试图使 iptables 无状态会导致不可预见的过滤

Tim*_*all 5 linux firewall iptables tcp

我试图通过调整 iptables 以不跟踪 TCP 连接的状态来提高我的服务器的性能。我正在查看本指南:http : //cotdp.com/2011/07/nginix-on-a-256mb-vm-slice-24000-tps/

但是,如果我执行以下任何操作,似乎所有传出连接都被切断了:

删除此规则: INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 添加这些:

iptables -t raw -I OUTPUT -j NOTRACK
iptables -t raw -I PREROUTING -j NOTRACK

在进行任何更改后立即使“ping google.com”返回有关无法找到“google.com”的错误(即DNS停止解析)。

以下是在启动时加载的规则,但随后由 fail2ban 添加其他规则:

*筛选
-A 输入 -i lo -j 接受
-一个输入!-i lo -d 127.0.0.0/8 -j 拒绝
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A 输出 -j 接受
-A 输入 -p icmp -j 接受
-A 输入 -p tcp --dport ssh -j 接受
-A 输入 -p tcp --dport http -j 接受
-A 输入 -p tcp --dport https -j 接受
-A 输入 -p tcp --dport smtp -j 接受
-A 输入 -p tcp --dport ssmtp -j 接受
-A 输入 -j 拒绝
-A 转发 -j 拒绝
犯罪

这是 iptables --list 的输出:

链输入(政策接受)
目标 prot opt 源目标         
fail2ban-ssh tcp -- 任何地方多端口 dports ssh 
fail2ban-ssh-ddos tcp -- 任何地方多端口 dports ssh 
fail2ban-pam-generic tcp -- 任何地方            
接受所有 - 任何地方任何地方            
REJECT all -- 任何地方环回/8 拒绝与 icmp-port-unreachable 
接受所有 - 任何地方状态相关,已建立 
接受 icmp -- 任何地方            
接受 tcp -- 任何地方 tcp dpt:ssh 
接受 tcp -- 任何地方 tcp dpt:www 
接受 tcp -- 任何地方 tcp dpt:https 
接受 tcp -- 任何地方 tcp dpt:smtp 
接受 tcp -- 任何地方 tcp dpt:ssmtp 
REJECT all -- 任何地方都拒绝-with icmp-port-unreachable 

Chain FORWARD(策略接受)
目标 prot opt 源目标         
REJECT all -- 任何地方都拒绝-with icmp-port-unreachable 

链输出(政策接受)
目标 prot opt 源目标         
接受所有 - 任何地方任何地方            

链 fail2ban-pam-generic(1 参考)
目标 prot opt 源目标         
返回所有 - 任何地方任何地方            

链 fail2ban-ssh(1 参考)
目标 prot opt 源目标         
返回所有 - 任何地方任何地方            

链 fail2ban-ssh-ddos(1 参考)
目标 prot opt 源目标         
返回所有 - 任何地方任何地方            

mul*_*laz 3

您有一条阻止所有传入流量的规则:

-A INPUT -j REJECT
Run Code Online (Sandbox Code Playgroud)

并且您停止连接跟踪,因此接受已建立连接的数据包的规则不再起作用:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

因此,您的 DNS 数据包发出后不会被跟踪,然后会被第一条规则拒绝。

您需要启用跟踪才能使第二条规则发挥作用,或者添加规则以允许来自“良好”来源的传入流量。

  • 是的,但是您当然需要回复,这是由 INPUT 规则处理的。因此,DNS 服务器收到您的请求,发回回复,然后您拒绝它。 (9认同)