iptables -L -v
以下是Ubuntu 22.04的输出:
https://pastebin.ubuntu.com/p/47ysNrXCcN/
Chain DENYIN (1 references)
pkts bytes target prot opt in out source destination
276 14576 DROP all -- !lo any sylnat-27.147.226.250.link3.net anywhere
Chain DENYOUT (1 references)
pkts bytes target prot opt in out source destination
0 0 LOGDROPOUT all -- any !lo anywhere sylnat-27.1
如果我写:
iptables -D INPUT -s sylnat-27.147.226.250.link3.net -j DROP
输出为:
iptables v1.8.7 (nf_tables): host/network sylnat-27.147.226.250.link3.net' not found
如果我写:
iptables -D INPUT -s 27.147.226.250 -j DROP
输出为:iptables: Bad rule (does a matching rule exist in that chain?)
。
答案1
下面我写的内容永远不足以让你了解你需要的一切ipatebles
... 因此,请阅读手册了解选项并在互联网上研究相关概念。
看起来您不知道自己在做什么,因为您似乎不知道系统上实际存在什么规则,而且您似乎不知道规则和规则链之间的区别......因此,我建议您删除所有现有的用户规则并从干净状态正确开始。
您的系统有两个非空的规则链,我建议您将其删除,以达到您真正了解和控制的干净状态......请看此演示:
$ sudo iptables -N MY_CHAIN
$ sudo iptables -A MY_CHAIN ! -i lo ! -o lo -j REJECT
$ sudo iptables -A INPUT -j MY_CHAIN
$ sudo iptables -A OUTPUT -j MY_CHAIN
...这将阻止(拒绝数据包loopback
)除系统上某些重要应用程序正常工作所需的接口之外的所有接口上的所有入站和出站流量。
规则嵌套在链中:
$ sudo iptables -vL MY_CHAIN
Chain MY_CHAIN (2 references)
pkts bytes target prot opt in out source destination
1457 142K REJECT all -- !lo !lo anywhere anywhere reject-with icmp-port-unreachable
...(2 references)
意味着有两个规则引用了该链... 您需要先找到它们并删除它们,然后才能删除该链... 使用以下命令找到它们:
$ sudo iptables -S | grep MY_CHAIN
-N MY_CHAIN
-A INPUT -j MY_CHAIN
-A OUTPUT -j MY_CHAIN
-A MY_CHAIN ! -i lo ! -o lo -j REJECT --reject-with icmp-port-unreachable
...删除两条规则:
$ sudo iptables -D INPUT -j MY_CHAIN
$ sudo iptables -D OUTPUT -j MY_CHAIN
...确认链现在是空的:
$ sudo iptables -vL MY_CHAIN
Chain MY_CHAIN (0 references)
pkts bytes target prot opt in out source destination
4740 434K REJECT all -- !lo !lo anywhere anywhere reject-with icmp-port-unreachable
... 从内核表中清除链条:
$ sudo iptables -F MY_CHAIN
...删除现在为空的链:
$ sudo iptables -X MY_CHAIN
对系统拥有的两个用户链执行此操作。
现在决定你想要什么...你似乎想要允许来自和到你的IP的连接27.147.226.250
并阻止除接口之外的其余部分loopback
...如果这就是你想要的,那么可以通过多种方式来实现...然而,我将演示一种我认为简单易懂的方法...那就是:
$ sudo iptables -A INPUT -s 27.147.226.250 -j ACCEPT
$ sudo iptables -A OUTPUT -d 27.147.226.250 -j ACCEPT
$ sudo iptables -A INPUT ! -i lo -j REJECT
$ sudo iptables -A OUTPUT ! -o lo -j REJECT
请注意,规则的顺序很重要,因为规则是从第一个开始按顺序进行评估的,因此您必须先允许您的 IP 的流量,然后再阻止所有流量。