如何清除 iptables 中的 PREROUTING 规则?

如何清除 iptables 中的 PREROUTING 规则?

很久以前,我在 iptables 中创建了一些预路由规则。我在 ~/myuser/Downlaods 中有一个脚本,由root

 #!/bin/bash
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT  --to-port 8069
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT  --to-port 8070
iptables-save

我已注释掉这些行并重命名该文件并将所有权更改为非 root 用户。

我认为我必须将它添加到其他脚本(rc.local、systemd 等...)中,因为在我清除 iptables、保存它们并重新启动后,规则就会恢复。

我努力了:

$ sudo iptables -t nat -D PREROUTING 2
$ sudo iptables -t nat -D PREROUTING 1
$ sudo iptables-save

这种方法暂时有效。此时 iptables 全部为空。然后我重新启动:

$ sudo reboot

重启后我得到:$ sudo iptables -L -n -t nat

Chain PREROUTING (policy ACCEPT)
target    prot opt source    destination
REDIRECT  tcp  --  0.0.0.0/0 0.0.0.0/0   tcp dpt:80 redir ports 8069
REDIRECT  tcp  --  0.0.0.0/0 0.0.0.0/0   tcp dpt:443 redir ports 8070

其余链条均为空。

我在配置文件中将 systemd 日志级别设置为 DEBUG,虽然启动时有数千行内容,但我没有看到任何grep引用 iptables 或 PREROUTING 的内容(主要是使用)。

我正在运行 Ubuntu 18.04.1 LTS。

我运行了$ sudo grep -rnw 'etc/init.d/' -e 'PREROUTING',但没有返回任何结果。

我运行了$ sudo grep -rnw 'etc/init.d/' -e '8069',但没有返回任何结果。

/etc/rc.local不存在,所以它不会从那里运行。

我还能在哪里找到这个?

答案1

要修复您的情况netfilter-persistent,请安装然后使用之前的命令再次删除这些规则。

现在要iptables重新加载并及时了解 iptables 规则的新状态,您可以执行以下操作:

sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6 # for ipv6

或者:

sudo dpkg-reconfigure iptables-persistent

相关内容