如何检查 iptable 规则是否有效

如何检查 iptable 规则是否有效

我对 iptables 和网络总体来说是新手,所以我正在尝试它。

我正在学习如何关闭端口;特别是我试图关闭主机上的特定端口,这样网络上的另一台机器就不会收到数据包。

我想删除端口 22 上的传出流量,因此无法从特定计算机 (192.168.100.3) ssh 到计算机 (192.168.100.10)。

我在要删除流量的计算机 (192.168.100.3) 上编写了此规则:

iptables -I OUTPUT -s 192.168.100.10 -p tcp --dport 22 -j DROP

到目前为止,我没有收到任何错误,但是当我尝试 ssh 进入这台机器时,我可以毫无问题地执行此操作。

我认为我的规则是“丢弃输出中定向到该端口上该 IP 的所有数据包”;这将导致无法启动 ssh 连接,因为它在端口 22 上运行。

我缺少什么?如何检查该规则是否确实有效?

编辑:感谢您的评论,我发现我使用了 s 而不是 d;这可能就是它行不通的原因。

答案1

也许有人有更好的答案,但这是我的。

  1. 创建一个相同的规则,但其目标不是LOGorACCEPTDROP​​。该规则来自您想要测试的那个。

    iptables -I OUTPUT -s 192.168.100.10 -p tcp --dport 22 -j LOG --log-level info 
    

    您可以在将内核日志定向到的任何位置找到日志输出。 (如果您不知道,那是另一个问题。)tail -f当您尝试从其他主机访问该端口时,请使用该文件。

  2. 规则就位后,按照 /u/richard 的建议,您使用nmap或其他一些工具来尝试到达测试的端口,使用iptables-v选项运行-x以查看命中每个规则的数据包的确切数量。我用:

    iptables -L OUTPUT -nvx
    

    假设该规则是列表中的#6。您可以使用方便的程序来监控该程序watch

    watch -n 0.5 iptables -L OUTPUT 6 -nvx
    

    每 1/2 秒更新一次显示。

答案2

要详细查看传入请求匹配了哪些规则,iptables具有强大的 TRACE目标,
文档总结得最好:

TRACE
该目标标记数据包,以便内核在数据包遍历表、链、规则时记录与数据包匹配的每条规则。
...
它只能在原始表中使用。

在你的情况下只需这样做:

iptables -t raw -A PREROUTING -s 192.168.100.10 -p tcp --dport 22 -j TRACE

描述:
从 192.168.100.10 发送到系统端口 22 的每个 TCP 数据包都将被标记,因此适用于该数据包的每个规则都将记录在内核日志中。
要使用它,必须将其TRACE添加到包含链的原始表中PREROUTING

如果你想知道数据包如何流经iptables表和链,请查看图片: 数据包通过 iptables 的路径

如果您需要更好地了解什么是表、链等,请参阅这里

答案3

测试传入连接:nmap 是一个很好的工具,您需要在另一台机器上运行它。 Zenmap 是 nmap 的图形用户界面。您可以使用它来扫描开放端口等。

至于封锁特定的ip端口,这些很容易改变。如果你阻止我使用端口 22,那么我会将我的 ssh 服务器添加到另一个端口。

通常您希望阻止除您需要的内容之外的所有内容。

相关内容