Я размещаю специальные службы 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
ставит его в начале.Ответы:
Выполните те же команды, но замените «-A» на «-D». Например:
становится
источник
-I
или-R
, вы можете удалить его с помощью-D
.Вы также можете использовать номер правила ( --line-numbers ):
Пример вывода:
Итак, если вы хотите удалить второе правило:
Обновить
Если вы используете (d) определенную таблицу (например, nat), вы должны добавить ее в команду удаления (спасибо за комментарий @ThorSummoner)
источник
iptables -L INPUT --line-numbers | grep -oP "([0-9]{1,3}).*tcp.*domain" | cut -d" " -f1
-t nat
, например:,sudo iptables -t nat --line-numbers -L
и удалить их-t nat
тоже, например:sudo iptables -t nat -D PREROUTING 1
(Может быть, стоит добавить к ответу?)Лучшее решение, которое работает для меня без проблем, выглядит следующим образом:
1. Добавьте временное правило с некоторыми комментариями:
2. Когда правило добавлено и вы хотите удалить его (или все, что с этим комментарием), выполните:
Таким образом, вы на 100% удалите все правила, соответствующие $ comment, и оставите другие строки без изменений. Это решение работает в течение последних 2 месяцев с примерно 100 изменениями правил в день - никаких проблем. Надеюсь, это поможет
источник
iptables -S | grep "${comment}" | sed 's/^-A //' | while read rule; do iptables -D $rule; done
spamhaus
запреты iptables, 2) захватить spamhaus.org/drop , 3) grep для IP-адресов CIDR иiptables -A INPUT -s $ip_cidr -j -m comment --comment "spamhaus"
iptables -S | sed "/$comment/s/-A/iptables -D/e"
;) вот такСначала перечислите все правила iptables с помощью этой команды:
это перечисляет как:
Затем скопируйте нужную строку, а просто заменить
-A
с-D
удалить , что:источник
iptables: Bad rule (does a matching rule exist in that chain?).
Что сейчас?nat
с помощьюsudo iptables -S -t nat
и хотите удалить одно из возвращенных правил, копирования недостаточно. Вы должны добавить-t nat
, напримерsudo iptables -D ... -t nat
.Используйте
-D
команду, вот какman
это объясняет страница:Реализуйте эту команду, как и все другие команды (
-A
,-I
), работающие с определенной таблицей. Если вы не работаете с таблицей по умолчанию (filter
таблицей), используйте-t TABLENAME
для указания этой целевой таблицы.Удалить правило для соответствия
Примечание. При этом удаляется только первое найденное правило. Если у вас есть много совпавших правил (это может произойти в iptables), запустите это несколько раз.
Удалить правило, указанное как число
Помимо подсчета числа, вы можете перечислить номер строки с
--line-number
параметром, например:источник
iptables -F
Предположим, что если вы хотите удалить правила NAT,
Перечислите добавленные IPtables, используя команду ниже,
Если вы хотите удалить правило nat из таблиц IP, просто выполните команду,
Затем вы можете проверить это,
источник