我已经在很多网站上看过如何使用iptables在Linux中将一个端口重新路由到另一个端口。 例如,重新路由端口80到8080看起来像这样…
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
我担心的是,如果我改变了主意呢? 我没有阅读任何地方给出纠正它的语法。 我认为有一个(简单的)方法来做到这一点,但是我在Linux上太新了,直觉地想出如何在不重新安装操作系统的情况下将端口80恢复到原来的行为。
你可以使用-D选项来删除链表中的规则。 例如
首先列出您想从中删除规则的链,请使用–line-numbers
sudo iptables -L RH-Firewall-1-INPUT -n --line-numbers Chain RH-Firewall-1-INPUT (2 references) num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255 4 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0 5 ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0 6 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353 7 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631 8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:631 9 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 10 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 11 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
删除第6行
sudo iptables -D RH-Firewall-1-INPUT 6 sudo iptables -L RH-Firewall-1-INPUT -n --line-numbers Chain RH-Firewall-1-INPUT (2 references) num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255 4 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0 5 ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0 6 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631 7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:631 8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 10 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
如果你的iptablesconfiguration保存在一个文件中,不要忘了更新文件( iptables-save
, service iptables save
等)
如果您正在编写脚本,则根据定义更容易删除:
例:
加上:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
注意到-A ? 这意味着增加 。
去除:
iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
注意到-D ? 这意味着删除 。
http://linux.die.net/man/8/iptables :
啊哈
iptables -L, --list [chain] List all rules in the selected chain. If no chain is selected, all chains are listed. As every other iptables command, it applies to the specified table (filter is the default), so NAT rules get listed by iptables -t nat -n -L Please note that it is often used with the -n option, in order to avoid long reverse DNS lookups. It is legal to specify the -Z (zero) option as well, in which case the chain(s) will be atomically listed and zeroed. The exact output is affected by the other arguments given. The exact rules are suppressed until you use iptables -L -v ... iptables -D, --delete chain rule-specification iptables -D, --delete chain rulenum Delete one or more rules from the selected chain. There are two versions of this command: the rule can be specified as a number in the chain (starting at 1 for the first rule) or a rule to match.
bithavoc的答案是正确的。 由于我还没有足够的评论意见,所以我添加了更多的信息作为新的答案:
添加一个新的重新路由规则
$ sudo iptables -t nat -D PREROUTING -p tcp --dport 443 -j REDIRECT --to 5671
列出NAT规则
$ sudo iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination REDIRECT tcp -- anywhere anywhere tcp dpt:https redir ports 5671 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination
-t nat
开关必须能够路由规则。
删除规则
$ sudo iptables -t nat -D PREROUTING -p tcp --dport 443 -j REDIRECT --to 5671 [ec2-user@ip-172-31-27-46 ~]$ sudo iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination