лучший способ сбросить все правила iptables

Вопрос или проблема

В настоящее время у меня есть этот фрагмент:

# сброс всех цепочек
iptables -F
iptables -t nat -F
iptables -t mangle -F
# удалить все цепочки
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 должен выдать этот (или очень похожий) вывод:

Цепочка INPUT (политика ACCEPT 0 пакетов, 0 байт)
 pkts bytes target     prot opt in     out     source               destination

Цепочка FORWARD (политика ACCEPT 0 пакетов, 0 байт)
 pkts bytes target     prot opt in     out     source               destination

Цепочка OUTPUT (политика ACCEPT 0 пакетов, 0 байт)
 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_backup.conf и очистка всех правил.

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

Чтобы восстановить предыдущую конфигурацию:

iptables-restore < iptables_backup.conf

Когда мне нужно отключить брандмауэр, я делаю что-то вроде этого:

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

Это можно сделать в 1 или 2 команды:

 $ sudo iptables-save > iptables.bak
 $ sudo iptables -F

Результат:

$ sudo iptables -nvL
Цепочка INPUT (политика ACCEPT 3138 пакетов, 5567K байт)
pkts bytes target     prot opt in     out     source               destination         

Цепочка FORWARD (политика ACCEPT 0 пакетов, 0 байт)
pkts bytes target     prot opt in     out     source               destination         

Цепочка OUTPUT (политика ACCEPT 3602 пакетов, 6547K байт)
pkts bytes target     prot opt in     out     source               destination         

Вы можете просто выгрузить модули 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 выдает приятный пустой вывод 🙂

Мне недавно пришлось заблокировать все соединения, и я в результате сделал следующее:

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 становится -D: удалить
nano rules  # проверьте, что все правильно
cat rules | while read line; do iptables $line; done
iptables-save

Готово!

sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -t filter -F
sudo iptables -t raw -F

sudo iptables -t nat -X
sudo iptables -t mangle -X
sudo iptables -t filter -X
sudo iptables -t raw -X

echo "=== NAT ==="; sudo iptables -t nat -S; echo "\n=== MANGLE ==="; sudo iptables -t mangle -S; echo "\n=== FILTER ==="; sudo iptables -t filter -S; echo "\n=== RAW ==="; sudo iptables -t raw -S

Новичок Нэкро-пост:

В последнее время я обнаруживаю, что nf/iptables сообщает, что он занят, так что любое –delete,
–flush или -X аргумент, который был выдан с командой iptables, просто не оказывает никакого эффекта. Поэтому иногда у меня оказывается некоторая смесь новых конфигурационных правил наряду с некоторыми нежелательными артефактными правилами из предыдущей конфигурации iptables, которые сохраняются с помощью iptables-save.

Хотя это не на 100% решение, я добавляю к любым командам iptables суффикс –wait, вместе с любыми другими аргументами, которые я намерен использовать, такими как -X.

Я думаю, что все равно стоит дополнить
-X предостережениями с помощью –flush, –delete и, возможно, создать нулевой брандмауэр .rules файл, чтобы восстановить с помощью iptables-restore.

Я могу проверить в скрипте оболочки bash, используя awk, если строк больше, чем по умолчанию 38 строк, полученных от команды iptables –list, показывающей пустую конфигурацию

EXITCOND1=0

iptables --list | awk '{ ++cnt; /
if (cnt < 40 ) exit level 1: /
print } '

EXITCOND1=$(echo $?)

if [ $EXITCOND1 == 0 ];
then
echo "Существуют правила брандмауэра"
else
echo "Правил брандмауэра нет"
fi

Очевидно, вы все знаете, что нужно заменить операторы “echo” вашим собственным кодом обработки. Вы также можете использовать аналогичный код, чтобы проверить длину строки и –log-prefix содержимое на случай, если у вас случайно есть только 38-40 строк кода в вашей конфигурации iptables.

(Я пишу это на своем телефоне. Надеюсь, автозамена не помогла мне ошибиться.)

Отличные идеи в ваших постах, ребята. Спасибо.

Ответ или решение

Как полностью очистить правила iptables

Очищение правил iptables является важной задачей для системных администраторов, желающих настроить новые правила безопасности или устранить конфликты в уже существующих конфигурациях. Рассмотрим лучший способ для достижения полной очистки правил, а также дополнительные рекомендации по управлению фаерволом.

Основные команды для очистки iptables

Чтобы сбросить все правила в iptables, можно использовать следующие команды:

# Установить политику для встроенных цепей в ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Очистить все цепи в таблицах nat и mangle
iptables -t nat -F
iptables -t mangle -F

# Очистить все цепи в таблице filter
iptables -F

# Удалить все пользовательские цепи
iptables -X

Эти команды обеспечивают, что все правила будут сброшены, а новые правила могут быть легко добавлены.

Проверка состояния iptables

После выполнения вышеуказанных команд вы можете удостовериться, что все правила очищены, выполнив команду:

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, можно воспользоваться следующими командами:

iptables-save > iptables.bak   # Сохранение текущих правил
service iptables stop           # Остановка сервиса iptables

Это может быть полезно при выполнении тестов или в ситуациях, когда временно нужно выключить защиту.

Резервное копирование конфигурации iptables

Перед очисткой очень важно сохранить текущие правила, чтобы иметь возможность их восстановить в будущем. Для этого выполните следующую команду:

iptables-save > iptables_backup.conf

Чтобы восстановить предыдущую конфигурацию, используйте:

iptables-restore < iptables_backup.conf

Отключение всех модулей iptables

В некоторых случаях может возникнуть необходимость отключить все связанные модули iptables. Это можно сделать командой:

lsmod | egrep '^iptable_' | awk '{print $1}' | xargs -rd\\n modprobe -r

Однако стоит отметить, что это может не сработать, если существуют активные правила или пользовательские цепи, поэтому лучше сначала очистить их.

Завершение

Очищение правил iptables — это критическая задача для поддержания безопасности и эффективного управления сетью. Представленные команды помогут вам полностью очистить конфигурацию без остаточных правил. Будьте внимательны при выполнении данных операций, особенно на живых системах, и всегда сохраняйте резервные копии конфигураций перед внесением изменений.

Оцените материал
Добавить комментарий

Капча загружается...