Ошибка в /etc/init.d/iptables. Функция read_tables всегда возвращает true, в результате и после остановки сервиса командой service iptables stop функции stop, panic, fwstatus и, что самое неприятное save, продолжают работать как если бы файрвол был запущен. Чем это грозит: Если сделать service iptables stop и _после_ этого service iptables save то слетают все сохраненные правила. Такая ситуация, например легко может возникникнуть если перед перезагрузкой компьютера при IPTABLES_SAVE_ON_STOP=yes сделать service iptables stop.
(In reply to comment #0) > Ошибка в /etc/init.d/iptables. > Функция read_tables всегда возвращает true, Это утверждение не соответствует действительности. Функция read_tables возвращает true если файл /proc/net/ip_tables_names непуст. > в результате и после остановки > сервиса командой service iptables stop функции stop, panic, fwstatus и, что > самое неприятное save, продолжают работать как если бы файрвол был запущен. > Чем это грозит: > Если сделать service iptables stop и _после_ этого service iptables save то > слетают все сохраненные правила. Такая ситуация, например легко может > возникникнуть если перед перезагрузкой компьютера при IPTABLES_SAVE_ON_STOP=yes > сделать service iptables stop. Правильный вывод из неправильной предпосылки. Проблема вызвана тем, что service iptables stop не выгружает модули ядра, в результате чего файл /proc/net/ip_tables_names остаётся непуст.
Created attachment 2205 [details] iptables.diff Попробуйте, пожалуйста, этот патч на /etc/init.d/iptables
[root@horus init.d]# service iptables stop Setting chains policy to ACCEPT: nat filter mangle [ DONE ] Flushing firewall rules: nat filter mangle [ DONE ] Removing user defined chains: nat filter mangle [ DONE ] Zeroing packet and byte counters: nat filter mangle [ DONE ] Unloading module iptable_nat: [ DONE ] Unloading module iptable_filter: FATAL: Module iptable_filter is in use. [FAILED] Unloading module iptable_mangle: FATAL: Module iptable_mangle is in use. [FAILED]
Created attachment 2206 [details] iptables.diff Новая версия того же патча.
(In reply to comment #3) > [root@horus init.d]# service iptables stop > Setting chains policy to ACCEPT: nat filter mangle > [ DONE ] > Flushing firewall rules: nat filter mangle > [ DONE ] > Removing user defined chains: nat filter mangle > [ DONE ] > Zeroing packet and byte counters: nat filter mangle > [ DONE ] > Unloading module iptable_nat: > [ DONE ] > Unloading module iptable_filter: FATAL: Module iptable_filter is in use. > > [FAILED] > Unloading module iptable_mangle: FATAL: Module iptable_mangle is in use. > > [FAILED] > А кто же использует эти модули?
(In reply to comment #4) > Created an attachment (id=2206) [edit] > iptables.diff > > Новая версия того же патча. Тот же результат.
> А кто же использует эти модули? Выяснилось, что каким-то боком их используют VZ контейнеры. После того, как я их остановил все заработало. Предыдущий патч проверить?
(In reply to comment #7) > > А кто же использует эти модули? > > Выяснилось, что каким-то боком их используют VZ контейнеры. > После того, как я их остановил все заработало. Уточнение: Если запускать service iptables start после vzctl start VEid, то он нормально останавливается. Если после запуска iptables запустить какое-нибудь VE, модули перестают выгружаться.
(In reply to comment #6) > (In reply to comment #4) > > Created an attachment (id=2206) [edit] [edit] > > iptables.diff > > > > Новая версия того же патча. > > Тот же результат. Естественно. Просто предыдущая версия патча была неполная.
(In reply to comment #8) > (In reply to comment #7) > > > А кто же использует эти модули? > > > > Выяснилось, что каким-то боком их используют VZ контейнеры. > > После того, как я их остановил все заработало. > > Уточнение: > Если запускать service iptables start после vzctl start VEid, то он нормально > останавливается. Если после запуска iptables запустить какое-нибудь VE, модули > перестают выгружаться. Наверное, дело обстоит следующим образом: если запущен хотя бы один контейнер, то модули выгрузить не получится. Вероятно, если после "service vz stop" выполнить "service iptables stop", то модули будут выгружены.
(In reply to comment #0) > Если сделать service iptables stop и _после_ этого service iptables save то > слетают все сохраненные правила. Только в случае если файл /proc/net/ip_tables_names не пуст. > Такая ситуация, например легко может > возникникнуть если перед перезагрузкой компьютера при IPTABLES_SAVE_ON_STOP=yes > сделать service iptables stop. Если IPTABLES_SAVE_ON_STOP включён, то правила будут сохранены непосредственно во время выполнения "service iptables stop", вне зависимости от способа запуска этой операции. Т.е. если выполнить "service iptables stop" вручную, то при выключении системы это действие будет пропущено.
> > Если запускать service iptables start после vzctl start VEid, то он нормально > > останавливается. Если после запуска iptables запустить какое-нибудь VE, модули > > перестают выгружаться. > > Наверное, дело обстоит следующим образом: если запущен хотя бы один контейнер, > то модули выгрузить не получится. > > Вероятно, если после "service vz stop" выполнить "service iptables stop", то > модули будут выгружены. Да, я практически об этом и написал. С сервисом vz вылезает еще один баг: если запустить service vz start до запуска service iptables start, то модули iptables загружаются скриптом vz, правила же не загружаются и мы можем опять получить ситуацию с потерей правил.
> > Если сделать service iptables stop и _после_ этого service iptables save то > > слетают все сохраненные правила. > Только в случае если файл /proc/net/ip_tables_names не пуст. > > Такая ситуация, например легко может > > возникникнуть если перед перезагрузкой компьютера при IPTABLES_SAVE_ON_STOP=yes > > сделать service iptables stop. > > Если IPTABLES_SAVE_ON_STOP включён, то правила будут сохранены непосредственно > во время выполнения "service iptables stop", вне зависимости от способа запуска > этой операции. > Т.е. если выполнить "service iptables stop" вручную, то при выключении системы > это действие будет пропущено. Если при этом выгрузятся все модули ядра, то так и есть, но если по каким-то причина хотя бы один из них не будет выгружен, то действие не будет пропущено и затрет сохраненные правила.
(In reply to comment #13) > > > Если сделать service iptables stop и _после_ этого service iptables save то > > > слетают все сохраненные правила. > > Только в случае если файл /proc/net/ip_tables_names не пуст. > > > > Такая ситуация, например легко может > > > возникникнуть если перед перезагрузкой компьютера при IPTABLES_SAVE_ON_STOP=yes > > > сделать service iptables stop. > > > > Если IPTABLES_SAVE_ON_STOP включён, то правила будут сохранены непосредственно > > во время выполнения "service iptables stop", вне зависимости от способа запуска > > этой операции. > > Т.е. если выполнить "service iptables stop" вручную, то при выключении системы > > это действие будет пропущено. > > Если при этом выгрузятся все модули ядра, то так и есть, но если по каким-то > причина хотя бы один из них не будет выгружен, то действие не будет пропущено и > затрет сохраненные правила. Нет. Действие "service iptables stop" не будет выполнено автоматически, если оно уже выполнено вручную и после этого не было выполнено "service iptables start".
Если из /etc/vz/vz.conf убрать из строчки IPTABLES="..." iptable_filter и iptable_mangle, то модули начинают выгружаться нормально. Оценить насколько они там нужны мне затруднительно.
(In reply to comment #15) > Если из /etc/vz/vz.conf убрать из строчки IPTABLES="..." iptable_filter и > iptable_mangle, то модули начинают выгружаться нормально. > > Оценить насколько они там нужны мне затруднительно. Они там нужны. Без этого они недоступны в контейнерах.