用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
这将丢弃所有端口的所有传出流量。