我正在尝试保护运行 ubuntu HardyHeron (8.04 lts) 的 vps 服务器。我使用 iptables 来阻止几乎所有传入流量。我希望允许以下内容:
- 网络流量(80 和 443)
- 邮件流量(传入和传出,25?)
- 来自我家电脑的所有流量(我有一个静态 IP)
除了邮件之外,一切都运行良好。我还没有测试过收到的邮件,但是当我加载链时,外发邮件似乎被阻止了。我有几个通过电子邮件发送确认的网页,当我加载规则时,这些确认被阻止了,但是当我没有任何规则时,它们工作正常。以下是规则(来自 iptables -L 的输出)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:www
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT all -- 208.69.32.132 anywhere #fake ip, but allows all traffic from my home pc
LOG all -- anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix `iptables denied: '
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我不明白为什么邮件被阻止,因此我希望得到帮助,并具体添加什么才能允许发送邮件。
答案1
您的出站邮件将失败,因为您允许出站数据包,但丢弃入站回复。以下 iptables 命令将添加一条规则,以接受已建立连接的传入数据包:
iptables --insert INPUT 1 -m state --state ESTABLISHED --jump ACCEPT
您可能还想允许与已建立连接相关的新入站连接(例如,对于 FTP,当它打开新连接时以及对于 ICMP 错误)。您可以通过将ESTABLISHED
上面的行更改为 来实现这一点ESTABLISHED,RELATED
。
答案2
我使用的语法与上面的略有不同。而第一位回复者写道:
iptables --insert INPUT 1 -m state --state ESTABLISHED --jump ACCEPT
我更喜欢:
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
为什么要进行此更改?例如,添加 RELATED 状态可让您从失败的连接中接收大量错误。另外,请注意我如何在第一条规则中使用 -i 标志指定环回接口(表示为“lo”)?您可以以相同的方式指定 NIC,如下所示:
iptables --insert INPUT 2 -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables 中有很多很酷的东西;看到它被 NFTables 取代,我非常不高兴,而且还没有在 NFT 上投入大量时间。我想很快就会了。祝你好运!