使用 iptables 编写简单的防火墙

使用 iptables 编写简单的防火墙

我正在学习如何使用iptables并在 Ubuntu 上编写一个非常简单的防火墙。

仅使用过滤表,我添加了以下规则

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

因为我只想让我想要的数据包通过。

然后我尝试添加规则来建立简单的 HTTP 连接,因此,作为第一次尝试,我添加了

iptables -A INPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT

第一行接受所有 TCP 流量,第二行接受 DNS 应答。

类似地,对于 OUTPUT 链,我添加了

iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

但当我尝试使用时,lynx连接却没有建立。

我认为唯一的问题就是 DNS,因为所有 TCP 流量都被接受。但是往返于端口 53 的数据包可以通过防火墙...那么,问题出在哪里?


我添加了以下两条规则,现在它可以正常工作了。

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

使用 Wireshark 我意识到 DNS 请求也来自/发往环回接口。我从来没有想过...为什么?

答案1

只需使用iptables-save并重新启动计算机即可。这将使您的 iptables 设置生效。

如果您正在设置防火墙,那么为什么要启用所有 tcp 端口。我更愿意仅允许选定的端口。例如,对于 lynx。我会使用:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables-save
sudo init 6

为什么你使用

sudo iptables -A OUTPUT -j DROP

这将丢弃所有端口的所有传出流量。

相关内容