尝试允许端口 22 上的传入 ssh 流量。默认行为是丢弃所有传入流量。
我遇到了 2 篇关于如何允许流量的文章。但是,它们是不同的。
## 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
似乎第一个允许所有流量,然后指定一个特定的网络。好像这些是互斥的?
这两个有什么区别,我应该使用哪一个?
这两套规则都有问题,我不会按原样使用它们。
在第一组中,第一条规则允许从任何地方到目标端口 22 的新传入流量。这不是问题。
第一个问题是第二个规则允许新的传入流量从特定子网到达目标端口 22。这是完全多余的,因为第一条规则允许来自任何地方的流量。
我的猜测是您阅读了一些使用这些规则作为(互斥)示例的教程,建议您选择其中一个,但不能同时选择两者。
第二个问题是在此规则之前需要另一个规则才能使防火墙完全有状态,而这里缺少该规则。如果没有此规则,则只允许 SYN 数据包,并且连接永远不会完成。
第二组规则也有类似的问题。我不知道最初是谁编写了这个规则集,但它已在互联网上被广泛复制。它似乎是由不熟悉一般状态防火墙或特别是 iptables 的人编写的。
在此规则集中,输入规则允许从任何地方到目标端口 22 的新的和已建立的传入流量。然后,输出规则允许从源端口 22 到任何地方的已建立流量。这本质上是第一条规则的镜像,如果您对传出流量的默认策略是丢弃或拒绝它,则需要类似的东西。
问题是这些出站规则很快就会变得多余,这会导致性能问题以及以后必须阅读规则的任何人的理解问题。如果您要丢弃传出流量,则无论您允许多少传入端口,任何端口上已建立的传出流量(匹配允许的传入流量)都只需要一个规则。
对于默认输入策略是拒绝流量而默认输出策略是允许流量的主机防火墙,您的大多数规则都将在 INPUT 表中。拥有状态规则和规则来为您需要的任何传入流量打开端口就足够了。
例如,要允许 ssh 和 http 连接:
如果您还默认拒绝输出流量,那么您还需要允许这些允许的入站连接的返回流量。
这是一个与 iptables 一样简单和有效的防火墙。
如果 connection = NEW CONNECTION,则 First Set 的第 1 行将允许 INBOUND 端口 22 流量。第一组的第 2 行似乎没有必要,因为仅允许一组网络范围的端口 22 流量也必须是新连接。但是,第 2 行上的先前规则已经允许流量通过。
这似乎是错误的或不完整的
第二组第 1 行,如果端口 = 22 并且是新的或已建立的连接,则允许在 the0 上进行 INBOUND 流量 第 2 行,如果设备 = eth0 和端口 = 22 并建立连接,则允许 OUTBOUND 流量
这将允许 SSH 连接到此主机,也将允许传出 SSH。
2 nd set 是你更好的选择
最上面的似乎对它试图做什么有点困惑,如果 iptables 没有看到双向流量,它似乎只允许 ssh 数据包进入,非常奇怪。
最下面的行要明智得多,但第二行是多余的,除非您的 OUTPUT 链上有 ACCEPT 以外的策略。(iptables -L 并查找“链输出(策略 XXXXXX)”)。
您可能只想要底部集合的第一行。