我需要为具有 nginx、ssh 和 sendmail 的服务器设置 IpTable 规则。现在的问题是,使用我的规则,我无法再向其他主机发送电子邮件。当防火墙开启时,可以向本地主机发送电子邮件,但向其他服务器发送电子邮件则不行。
我尝试打开传入和传出端口 25 以及 DNS 查找端口,但没有任何效果。有什么想法吗?
更新:
以下是我的规则:
#! /bin/sh
# firewall iptable rules
interface="eth0"
# first, deny all
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# open loopback device completely
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# open ssh ports
iptables -A INPUT -p tcp -i $interface --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -o $interface --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
# open browser ports
iptables -A INPUT -p tcp -i $interface --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -o $interface --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT
答案1
如果您想允许您的 Linux 机器通过端口 25 发送电子邮件,您应该通过添加如下规则来允许它:
$ iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
对于 DNS 流量也类似:
$ iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
如果没有这样的明确规则,则流量将默认被拒绝,因为默认策略设置为DROP
。
更新:
不要忘记使用以下方法允许相关/已建立的连接:
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
答案2
将以下规则添加到您的 IPTables:
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT