这两个iptables规则有什么区别?

尝试允许端口22上的传入sshstream量。默认行为是删除所有传入的stream量。

我遇到了两篇关于如何通行的文章。 但是,他们是不同的。

## open port ssh tcp port 22 ## iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT 

VS

 # Allow all incoming SSH iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 

看来,第一个允许所有的stream量,然后指定一个特定的networking。 似乎是互相排斥的?

这两个之间有什么区别,我应该使用哪一个?

这两套规则都有问题,而且我也不会使用它们中的任何一种。


在第一组中,第一个规则允许从任何地方到达目的地端口22的新的传入stream量。 这不是问题。

第一个问题是第二个规则允许从特定的子网到达目的地端口22的新的inputstream量。 这是完全多余的,因为第一条规则允许任何地方的stream量。

我的猜测是,你读了一些使用这些规则的教程(相互排斥)的例子,build议你select一个或另一个,但不是两个。

第二个问题是在此规则之前需要另一个规则来使防火墙处于完全状态,并且在这里缺less该规则。 没有这个规则,只有SYN数据包被允许,连接永远不会完成。

 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

第二套规则也有类似的问题。 我不知道谁最初编写了这个规则集,但是它被广泛的复制到互联网上。 它似乎是由一般不熟悉状态防火墙的人写的,特别是iptables。

在这个规则集中,input规则允许从任何地方到达目的地端口22的新的和build立的inputstream量。 然后,输出规则允许来自源端口22的build立的通信到任何地方。 这基本上是第一条规则的一个镜像,如果您的传出stream量的默认策略是放弃或拒绝它,则需要类似这样的镜像。

问题是,这些出站规则变得冗余速度非常快,这导致性能问题以及后来必须阅读规则的任何人的理解问题。 如果您丢弃出站stream量,则无论您允许多less个入站端口,只需要在任何端口上build立出站stream量(匹配允许的入站stream量)的规则。

 -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

对于默认input策略为拒绝stream量而默认输出策略为允许stream量的主机防火墙,绝大多数规则都将位于INPUT表中。 拥有有状态规则,然后规则为您需要的任何传入stream量打开端口就足够了。

例如,要允许ssh和http连接:

 -P INPUT DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 

如果您还默认拒绝输出stream量,则还需要允许这些允许的入站连接的返回stream量。

 -P OUTPUT DROP -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

这是一个和iptables一样简单有效的防火墙。

最上面的一个似乎有点困惑,它试图做什么,它似乎只允许ssh数据包,如果iptables没有看到双向的stream量,很奇怪。

最下面的一个更合理,但是第二行是多余的,除非你在OUTPUT链上有一个除了ACCEPT之外的策略。 (iptables -L并查找“Chain OUTPUT(policy XXXXXX)”)。

你可能只是想要底部的第一行。

第一组的第一行将允许INBOUND端口22stream量,如果连接=新连接。 第一组第2行似乎是没有必要的,因为只允许端口22的stream量为一个设定的networking范围也必须是一个新的连接。 第二行上一条规则是否已经允许stream量通过。
这看起来不对或不完整

第二组线路1,如果端口= 22,并且是新的或已build立的连接,则允许INBOUNDstream量如果设备= eth0&端口= 22并且build立连接,则线路2,Alllow OUTBOUNDstream量

这将允许SSH连接到这个主机,也将允许传出的SSH。

第二套是你更好的select