найкращий спосіб очистити всі правила iptables


83

У мене зараз цей фрагмент:

# flush all chains
iptables -F
iptables -t nat -F
iptables -t mangle -F
# delete all chains
iptables -X

Чи є ймовірність, що якесь непроникне правило залишиться в живих після запуску цього?

Ідея полягає у тому, щоб мати повністю чистий конфігурацію iptables, який можна легко замінити новим набором правил (не враховуючи маршрути / параметри ifconfig).

Відповіді:


107

Щоб відповісти на ваше запитання лаконічно, ні: після промивання кожної таблиці не було б ніяких правил "залишків". В інтересах бути ретельним, можливо, ви також можете встановити політику для вбудованих 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

9
ви забули про 'raw': iptables -t raw -F iptables -t raw -X
kK-Storm

there would not be any "leftover" rules after flushing every tableОП не замикає кожну таблицю. Ні ти. Ось як це виглядає, якщо ви хочете бути ретельними . І ви можете додати iptables -t "$table" -Z. Зверніть увагу, що таким чином ви жорстко кодуєте список таблиць та їх ланцюгів. Тож я б серйозно розглядав рішення збереження-відновлення . Або ви можете просто завантажити iptables .
x-yuri

23

Це правильно повністю скине систему iptables до дуже базового стану:

iptables-save | awk '/^[*]/ { print $1 } 
                     /^:[A-Z]+ [^-]/ { print $1 " ACCEPT" ; }
                     /COMMIT/ { print $0; }' | iptables-restore

Усі політики будуть скинуті до ACCEPT, а також очищення кожної таблиці в поточному використанні. Усі ланцюги, крім вбудованих ланцюгів, більше не існуватимуть.


1
Акуратний хак! Я б не залежав від цього, оскільки завжди можливо, що тонкі зміни у форматі збереження / відновлення можуть порушити його. Напевно, найкраще дотримуватися API, який iptablesявно надає інструмент, IMO.
Стівен у понеділок

3
Я передумав: формат даних навряд чи більше зміниться, оскільки він використовується настільки широко. +1.
Стівен у понеділок

2
+1, цікавий хак
Сем Халике

Цьому вдалося позбутися залишених ланцюгів UFW, на що прийнята відповідь не відповіла.
l0b0

Це незначна деталь, але ви можете замінити перший print $1з print $0бути послідовним :)
х-Yuri

2

Щоразу, коли мені потрібен відключений брандмауер, є щось подібне:

  • iptables-save > iptables.bak
  • service iptables stop (я на Fedora)

1

Ви можете просто вивантажити 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виходить приємний порожній вихід :)


Це може бути молоток тут. Дякую.
Конрад Гаєвський

0

Це можна зробити за допомогою 1 або 2 команд:

 $ 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         

5
Якщо для стандартних політик на даний момент встановлено значення DROP, це швидкий спосіб вимкнутись із сервера. Отже, ні, це не командний процес 1 або 2. Спочатку потрібно встановити ACCEPT, якщо це не наразі.
RyanH

0

Нещодавно мені довелося перекрити всі з'єднання, чим я закінчився

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, Ive використовував це в минулому

cp /lib/ufw/{user.rules,user6.rules} /<BACKUP LOCATION> 
cp /lib/ufw/{user.rules,user6.rules} ./

Я думаю, що це може бути корисним для подальшого використання. Думав, що поділюсь.


0

Конфігурація резервних копій для iptables_backup.conf та очищення всіх правил.

iptables-save | tee iptables_backup.conf | grep -v '\-A' | iptables-restore

Щоб відновити попередню конфігурацію:

iptables-restore < iptables_backup.conf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.