我想在我的 Ubuntu 机器上设置防火墙,专门阻止除用于浏览的端口 80/443 和用于解析 DNS 的端口 53 之外的所有进出,我试过了,但没有结果。
我现在正在使用,UFW
它很容易设置,但我不确定它是否安全iptables
。
有人能告诉我如何阻止除需要的端口之外的所有端口吗?
答案1
您应该知道,ufw
它本身就是的前端iptables
,它是一个用于管理 netfilter 防火墙的程序。
如果您不太擅长使用,iptables
我强烈建议您使用ufw
。您甚至可以使用gufw
,图形界面的使用ufw
比现在更容易。
是ufw
安全的?
我可以向您保证,使用ufw
它是安全的,因为它具有许多预定义的、可靠的规则来保护您的机器。
默认情况下,它允许传出连接并拒绝传入连接,因此没有人可以ssh
进入您的机器。
让我们看一下:
首先确保ufw
已被禁用:
sudo ufw disable
现在让我们删除所有 iptables 链和规则:
sudo iptables -F
sudo iptables -X
并用来iptables -L
查看默认iptables
链和规则,它们应该是三个链,并且所有链都接受所有内容。
让我们启用ufw
:
sudo ufw enable
现在,如果您看一下iptables
使用规则iptables -L
,您会看到已经设置了很多规则ufw
来保护您,这些规则足以胜任。
另外,如果你运行:sudo ufw status verbose
,你会得到一个简单的输出,告诉你发生了什么:
Status: active
Logging: off
Default: deny (incoming), allow (outgoing), disabled (routed)
如何使用 iptables 阻止除 http(s) 和 DNS 之外的所有内容?
如果坚持使用iptables
,请先禁用然后使用和开关ufw
删除所有链和规则。-F
-X
sudo ufw disable
sudo iptables -F
sudo iptables -X
政策:
然后我们应该设置策略。策略是默认行为,当数据包与任何已定义的规则不匹配时,将对其应用这些策略:
sudo iptables -P DROP INPUT
sudo iptables -P DROP OUTPUT
sudo iptables -P DROP FORWARD
然后允许传出 DNS:
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
并允许传出 http(s):
sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
最后,我们将只允许相关且已建立的传入流量:
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT