Я размещаю специальные службы HTTP и HTTPS на портах 8006 и 8007 соответственно. Я использую 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, что нежелательно.
-I
вместо-A
дляACCEPT
линий. Это потому, что, как правило, последняя строка (например, дляINPUT
цепочки) - этоDROP
или,REJECT
и вы хотите, чтобы ваше правило предшествовало этому.-A
ставит новое правило после последнего правила, а-I
ставит его в начале.