我在端口8006和8007上分别托管特殊的HTTP和HTTPS服务。我使用iptables来“激活”服务器,即路由传入的HTTP和HTTPS端口:
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8007 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8006
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8007
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8006
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-ports 8007
这个方法十分有效。不过,我想再创建另一个脚本,以便将我的服务器再次禁用;也就是将iptables恢复到运行上述代码之前的状态。然而,我很难找出删除这些规则的语法。唯一有效的方法似乎是完全清空:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
但这也会删除其他不需要的iptables规则。
ACCEPT
行,最好使用-I
而不是-A
。这是因为通常情况下(例如对于INPUT
链),最后一行是DROP
或REJECT
,而您希望您的规则出现在它之前。-A
将新规则放在最后一条规则之后,而-I
将其放在开头。 - Mark Lakata