用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请求也来自/来自loopback接口。 我没想到……为什么?

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

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

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

你也为什么要用

 sudo iptables -A OUTPUT -j DROP 

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