В настоящее время у меня есть этот фрагмент:
# flush all chains
iptables -F
iptables -t nat -F
iptables -t mangle -F
# delete all chains
iptables -X
Есть ли вероятность, что какое-то непроницаемое правило останется в живых после запуска этого?
Идея состоит в том, чтобы иметь полностью чистую конфигурацию iptables, которую можно легко заменить новым набором правил (не говоря уже о маршрутах / параметрах ifconfig).
Если кратко ответить на ваш вопрос, то нет: не будет никаких «оставшихся» правил после очистки каждой таблицы. Однако в интересах полноты вы можете настроить политику для встроенного INPUT
и FORWARD
цепи к ACCEPT
, также:
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
Очистите правила ip6tables:
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -F
ip6tables -X
... и это должно сработать. iptables -nvL
должен произвести это (или очень аналогичный) вывод:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Это полностью сбросит вашу систему iptables до очень простого состояния:
iptables-save | awk '/^[*]/ { print $1 }
/^:[A-Z]+ [^-]/ { print $1 " ACCEPT" ; }
/COMMIT/ { print $0; }' | iptables-restore
Все политики будут сброшены на ACCEPT, а также будут очищены все таблицы, которые используются в данный момент. Все цепочки, кроме встроенных, больше не будут существовать.
Когда мне нужно отключить брандмауэр, происходит что-то вроде этого:
iptables-save > iptables.bak
service iptables stop
(я в шляпе)Резервное копирование конфигурации в iptables_backup.conf и очистка всех правил.
iptables-save | tee iptables_backup.conf | grep -v '\-A' | iptables-restore
Чтобы восстановить предыдущую конфигурацию:
iptables-restore < iptables_backup.conf
Вы можете просто разгрузить iptables
'модули из ядра:
modprobe -r iptable_raw iptable_mangle iptable_security iptable_nat iptable_filter
UPD К сожалению, это слишком хорошо, чтобы быть правдой. Пока в таблице есть правило или определяемая пользователем цепочка, счетчик ссылок соответствующего модуля равен 1, и modprobe -r
терпит неудачу. Вы можете удалить правила и определенные пользователем цепочки следующим образом:
echo $'*raw\nCOMMIT\n*mangle\nCOMMIT\n*security\nCOMMIT\n*nat\nCOMMIT\n*filter\nCOMMIT' | iptables-restore
или:
iptables-save | awk '/^[*]/ { print $1 "\nCOMMIT" }' | iptables-restore
Кроме того, вы можете захотеть выгрузить модули таким образом (без имен модулей жесткого кодирования):
lsmod | egrep ^iptable_ | awk '{print $1}' | xargs -rd\\n modprobe -r
С другой стороны, после этого iptables-save
производит красивый пустой результат :)
Это можно сделать одной или двумя командами:
$ sudo iptables-save > iptables.bak
$ sudo iptables -F
Результат:
$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 3138 packets, 5567K bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3602 packets, 6547K bytes)
pkts bytes target prot opt in out source destination
Недавно мне пришлось заблокировать все соединения. В итоге я сделал
iptables-policy INPUT DROP
iptables-policy OUTPUT DROP
iptables-policy FORWARD DROP
что касается экономии, я бы рекомендовал следующие
Ubuntu:
/etc/init.d/iptables save
/sbin/service iptables save
RedHat / CentOS:
/etc/init.d/iptables save
/sbin/iptables-save
В дополнение к резервному копированию всех текущих правил ufw, я использовал это в прошлом
cp /lib/ufw/{user.rules,user6.rules} /<BACKUP LOCATION>
cp /lib/ufw/{user.rules,user6.rules} ./
Я думаю, это может быть полезно для справок в будущем. Думал, что поделюсь.
Это сработало для меня (на Ubuntu 18.04):
sudo bash -c "ufw -f reset && iptables -F && iptables -X && ufw allow 22 && ufw -f enable"
Он сбрасывает (и отключает) ufw, а затем сбрасывает iptables, очищая и удаляя все цепочки. Затем он снова включает ufw, но не раньше, чем разрешит порт 22 для удаленного доступа. Две команды, требующие подтверждения от пользователя, являются «принудительными», поэтому ввод не требуется. Мне удалось запустить это через активное соединение SSH.
(источник)
Вот как я удаляю все правила DROP:
iptables -S |grep DROP| sed 's/-A/-D/' >rules # -A becomes -D: delete
nano rules # check that everything is correct
cat rules | while read line; do iptables $line; done
iptables-save
Готово!