iptables --sport vs --dport。 INPUT与OUTPUT

时间:2015-03-09 14:59:58

标签: linux iptables

我在理解iptables时遇到了一些麻烦。我知道它可以作为一个过滤器,但有些东西不是点击因为它没有按照我认为应该的方式工作。首先我要说的是我创建了一个白名单,因此所有策略(INPUT,FORWARD,OUTPUT)都默认为DROP。

我有以下与SMTP相关的规则:

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

-A INPUT -p tcp --dport 25 -j ACCEPT -A OUTPUT -p tcp --dport 25 -j ACCEPT //needed for receiving? -A OUTPUT -p tcp --sport 25 -j ACCEPT //needed for sending?

*这三条线也逐字存在于端口587& 465

如果我删除了第一个OUTPUT行,那么我的服务器就不会收到电子邮件&如果我删除了最后一行,它就不会发送电子邮件。我不明白的是为什么。不该' T:

-A INPUT -p tcp --dport 25 -j ACCEPT -A OUTPUT -p tcp --sport 25 -j ACCEPT

足以让一切都通过? AFAIK所有SMTP通信应该超过25,587或465.我目前的理解是,SMTP数据包应始终与这两个规则中的一个匹配。所有输入数据包应该到达端口25,所有输出数据包都从25发送?我错过了什么?

2 个答案:

答案 0 :(得分:2)

对于SMTP,您不需要任何--sport规则。源和目标不依赖于方向 - 它们在数据包的源端口和目标端口上匹配。每个连接都有一个随机源端口,因此无法匹配。

  

如果我删除了第一个OUTPUT行,那么我的服务器就不会收到电子邮件&如果我删除了最后一行,它就不会发送电子邮件。

这是错误的。只有INPUT行才能接收电子邮件。此外,只有OUTPUT --dport 25行才能发送电子邮件。所以这些规则应该足够了:

-A INPUT -p tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp --dport 25 -j ACCEPT

问题可能是您将OUTPUT设置为默认为DROP,但仅允许在INPUT上建立连接。通常人们将OUTPUT违约保留为ACCEPT。如果您想继续使用白名单进行输出,则必须添加:

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

另外,请阅读SMTP端口。您列出的部分内容仅用于电子邮件提交和不建议使用的加密,而不适用于服务器到服务器的通信。这可能会改变您规划规则的方式。

答案 1 :(得分:1)

以前的回答状态:此外,只有OUTPUT --dport 25行才能发送电子邮件。

这并非总是如此。例如,某些系统配置为智能主机,其中MTA成为客户端。在这种情况下,MTA将在提交端口(587)上使用SASL身份验证连接到远程服务器以发送邮件。

要恢复,客户端通过远程服务器发送邮件,远程服务器本身通过SASL身份验证连接到端口587上的另一台远程服务器。

在这种情况下,以下iptable规则适用(对于smarthost)

iptables -I OUTPUT -p -tcp -dport 597 -j ACCEPT
iptables -I INPUT -p -tcp -sport 587 -j ACCEPT