IPtables – 明智和非矛盾的规则?

这是我的Web服务器与SSH安装我的IPtable规则,我有帮助得到这一点。 我的问题是,我的规则是否矛盾? 例如,我被推荐使用这两行:

# DONT KNOW WHAT THESE DO $i -A INPUT -i lo -j ACCEPT $i -A INPUT -p icmp --icmp-type any -j ACCEPT 

但是在我的整个剧本中,我觉得他们可能没有做任何事情。

 i=/sbin/iptables # Flush all rules $i -F $i -X # Setup default filter policy $i -P INPUT DROP $i -P OUTPUT DROP $i -P FORWARD DROP # DONT KNOW WHAT THESE DO $i -A INPUT -i lo -j ACCEPT $i -A INPUT -p icmp --icmp-type any -j ACCEPT # Force SYN checks $i -A INPUT -p tcp ! --syn -m state --state NEW -j DROP # Drop all fragments $i -A INPUT -f -j DROP # Drop XMAS packets $i -A INPUT -p tcp --tcp-flags ALL ALL -j DROP # Drop NULL packets $i -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # Allow established connections $i -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow unlimited traffic on loopback $i -A INPUT -i lo -j ACCEPT $i -A OUTPUT -o lo -j ACCEPT # Open nginx $i -A INPUT -p tcp --dport 443 -j ACCEPT $i -A INPUT -p tcp --dport 80 -j ACCEPT # Open SSH $i -A INPUT -p tcp --dport 22 -j ACCEPT 

其中的第一个接受回送接口上的所有stream量。 这是内核对自身进行交stream的方式之一,不要阻止这种stream量是相当重要的; 如果你这样做会发生不可预知的结果。 这是一个标准的规则,我不知道使用它的任何安全隐患。

第二个是更复杂一点。 有许多types的ICMP要么允许用于信息(例如ICMP主机不可达)或function(例如需要ICMP碎片需求,ICMP回应应答)的目的。 但是还有其他的,如ICMP-echo-r​​equest,你可能不想允许。 有没有简单的方法来告诉你你应该做什么,但有些人可能会争辩

 iptables -A INPUT -p icmp --icmp-type any -m state --state ESTABLISHED,RELATED -j ACCEPT 

有点宽松,并保留了几乎所有有用的function。

这一切都说,我注意到你列出的回环规则两次 ,这是完全没有意义的,你正在过滤OUTPUTstream量,并允许没有回报一半的数据包到允许的INPUTstream量。 所以这不能很好地工作。

恐怕我不得不同意伊恩。 如果你想开始自定义你的iptables规则,你需要在学习之前多学习一下TCP / IP。

在INPUT链的顶部添加这样的规则的一个可能的原因是尽早接受这些包,以便它们不必遍历所有的规则:

 $i -A INPUT -i lo -j ACCEPT # whitelist all loopback traffic $i -A INPUT -p icmp --icmp-type any -j ACCEPT # whitelist all ICMP traffic 

要找出多less使用个人规则看,使用

 iptables -L -nv