如何在 iptables 中阻止除 http(s) 和 DNS 之外的所有内容?

如何在 iptables 中阻止除 http(s) 和 DNS 之外的所有内容?

我想在我的 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

相关内容