如何仅使用 IPTables 允许 SSH 和 SMTP?

如何仅使用 IPTables 允许 SSH 和 SMTP?

我设置了一个树莓派来定期向我发送电子邮件。由于它 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其中有更多示例并且解释得很好。

相关内容