我对iptables相当陌生,正试图弄清楚我是否已经适当地configuration了我的规则集。 关于我的问题的-P INPUT ACCEPT部分,我正试图确定这是否适用于我想要应用的规则。 请参阅下面的进一步细节。
我已经使用包含以下规则的文件使用iptables-restore 。 本质上,我试图允许回送stream量,build立/相关的连接,SSH和HTTP。 所有其他stream量应该被拒绝。
*filter :fail2ban-ssh - [0:0] # Input chain rules -A INPUT -i lo -j ACCEPT -A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh # Reject all other inbound traffic -A INPUT -j REJECT # Output chain rules -A OUTPUT -o lo -j ACCEPT -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT # Forward chain rules -A FORWARD -j REJECT # fail2ban-ssh chain rules -A fail2ban-ssh -s 146.0.77.33/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-ssh -s 62.75.236.76/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-ssh -j RETURN COMMIT
如果我运行iptables -S ,我收到以下输出:
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -j REJECT --reject-with icmp-port-unreachable -A FORWARD -j REJECT --reject-with icmp-port-unreachable -A OUTPUT -o lo -j ACCEPT -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT -A fail2ban-ssh -s 146.0.77.33/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-ssh -s 62.75.236.76/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-ssh -j RETURN
我已经做了一些iptables的阅读,我的理解是,前几行(例如,“- P INPUT ACCEPT ”)基本上意味着,如果没有其他规则适用的默认行动是接受stream量这种情况下,用于input,转发和输出)。
如果是这种情况,我应该明确地把我的规则文件中的以下行并恢复iptables?
-P INPUT DROP -P FORWARD DROP -P OUTPUT DROP
任何人读这个完整的问题,提前非常感谢! 这有点长,但我认为有必要包括所有上述细节来充分解释我的情况。
要回答您实际询问的问题,策略应显示在正常的iptables-save文件中,而不是作为-P规则的参数。
相反,他们应该出现在开始,连同你的任何定制链的声明,他们的政策,就像这样:
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] :fail2ban-ssh - [0:0]
您的自定义链的连字符是缺less的策略参数,因为用户定义的链没有策略。
请注意,如果将防火墙写成,如果将所有策略更改为DROP ,则服务器在执行DNS查找时将遇到困难,而且许多事情将无法预料地失败。
顺便说一下,我只是把你的规则( INPUT链)转换成fffuu来提取一个简化的版本。 它只显示谁可以build立连接:
ACCEPT all -- 127.0.0.0/8 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 dports: 22 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 dports: 80 DROP tcp -- 146.0.77.33/32 0.0.0.0/0 dports: 22 DROP tcp -- 62.75.236.76/32 0.0.0.0/0 dports: 22 DROP all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
你可以看到你的fail2ban方法实际上被破坏了:第二个规则接受所有的ssh连接; 4号和5号规则(DROP规则)是阴影的(他们永远不能到达)。
我假设你的默认策略是ACCEPT ,你可以看到它是简化列表中的最后一个规则。 您也可能会看到, INPUT的默认策略在这里并不重要,因为倒数第二个规则已经丢弃了所有不符合规则的数据包。 这是因为你的-A INPUT -j REJECT规则。
基本上,除了fail2ban块之外,你现在的规则意味着你没有防火墙。
考虑一下防火墙在以下情况下的响应方式:
您正在运行MySQL或其他数据库正在监听本地连接的TCP连接 – 但您不希望远程连接。
然后恶意的远程机器尝试访问端口3306上的mysql服务器。
假设fail2ban没有阻止他们,问题是你的现有规则会帮助你吗? 关于什么:
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable -A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable – NOPE -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -NOPE -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT – NOPE 等等…没有任何匹配和丢弃的连接,所以你的INPUT政策适用和连接被接受。
然后考虑运行在你机器上的任何其他服务的相同场景 – 如果fail2ban没有被阻塞,你的服务器将让他们进入。
所以是的,我build议你添加到你的iptables-restore规则
-P INPUT DROP # Any unmatched packets on FORWARD chain will be dropped -P FORWARD DROP
注意:尽pipeiptables规则通常不会在重新启动之后持续存在,但策略将会如此。 在这种情况下,如果在服务器重启之后没有相应的ACCEPT规则被加载,上面的规则将locking一个SSH会话 – 也就是说,这个策略会locking你。
就我个人而言,我仍然会使用丢弃策略,但有些人喜欢保持-P INPUT ACCEPT ,而不是使用
-A INPUT DROP
作为一个规则在您的INPUT链的底部作为一个“准”政策。 在修改文件墙时,您必须小心谨慎,并重新阅读规则,但是如果在重新启动时没有设置iptables来恢复规则,则这意味着您可以重新启动计算机。