我想测试一些 iptables 规则,该规则是拒绝除 DNS 之外的所有出站流量。
所以我使用此命令将过滤表的 OUTPUT 默认规则更改为 DROP。
sudo iptables -t filter -P OUTPUT DROP
然后我将此规则附加到接受 DNS 流量。
sudo iptables -t filter -A OUTPUT -p udp --dport 53 -o ens33 -j ACCEPT
我运行这个命令来测试策略。
nslookup google.com
在运行这个命令之前,我在我的虚拟机和主机上运行了 wireshark。
然后 nslookup 命令花费了一些时间并给了我这个消息。
连接超时; 无法访问任何服务器
并且wireshark(在虚拟机和主机上)没有捕获任何数据包。
所以我删除了这条规则并添加了另一个。
sudo iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
并做了和以前一样的事情。
再次出现相同的消息,但wireshark(在虚拟机和主机上)捕获数据包(请求和响应)。
然后我删除了这条规则并添加了下一条规则。
sudo iptables -t filter -A OUTPUT -p udp -j ACCEPT
并做了和以前一样的事情。
这次 nslookup 命令返回结果,并用wireshark 捕获数据包。
那么为什么会这样呢?
在这些测试之前,我安装了 snort(在不同的虚拟机上),我试图丢弃一些数据包,但它没有。
数据包被记录但不被丢弃。
我不知道这些案件是否相关。