我设置了一个树莓派来定期向我发送电子邮件。由于它 24/7 连接到互联网,我需要正确设置 IPTables。
我想允许传入 SSH 并允许电子邮件通过 SMTP 在端口 587 上发送。我想出了这个 IPTables 脚本,它正确吗?如果没有,你能告诉我为什么吗?谢谢。
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 587 -j ACCEPT
答案1
像这样的 iptables 规则效果很好
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1:156]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
第一条规则默认删除所有传入连接,第二条规则默认删除所有转发,第三条规则接受输出,为什么接受?恕我直言,打开输出连接并不是太不安全,关闭它可能会使防火墙配置有点困难。
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
接受状态为 RELATED 和已建立状态的连接
剩下的很容易
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
接受22 tcp,接受587 tcp并禁止所有其他连接,您可以保存在文件中然后执行
iptables-restore < firewall.file
nmap -sS
并与您的主机核实
答案2
如果您不习惯使用这些iptables
命令,您可以使用UFW
其他命令。 UFW 代表简单防火墙,是一种比 iptables 更容易使用的工具。
ufw
在你的树莓派上安装:
sudo apt-get install ufw
安装 ufw 后,您可以使用以下命令设置默认值:
sudo ufw default deny incoming && sudo ufw default deny outgoing
这将拒绝所有尝试连接的内容,也将拒绝所有传出的请求,如果您想限制更多一点,这很好。
允许ssh
在做:
sudo ufw allow in 22
允许587
出去做:
sudo ufw allow out 587
如需更多信息,请查看man ufw
其中有更多示例并且解释得很好。