Bug 12869

Summary: service iptables stop не выгружает модули ядра
Product: Sisyphus Reporter: Timur Batyrshin <erthad>
Component: iptablesAssignee: placeholder <placeholder>
Status: ASSIGNED --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: asy, glebfm, ldv, mike, placeholder
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
iptables.diff
none
iptables.diff none

Description Timur Batyrshin 2007-09-21 16:54:22 MSD
Ошибка в /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.
Comment 1 Dmitry V. Levin 2007-09-21 17:28:53 MSD
(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 остаётся непуст.

Comment 2 Dmitry V. Levin 2007-09-21 17:49:46 MSD
Created attachment 2205 [details]
iptables.diff

Попробуйте, пожалуйста, этот патч на /etc/init.d/iptables
Comment 3 Timur Batyrshin 2007-09-21 18:00:57 MSD
[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]
Comment 4 Dmitry V. Levin 2007-09-21 18:37:30 MSD
Created attachment 2206 [details]
iptables.diff

Новая версия того же патча.
Comment 5 Dmitry V. Levin 2007-09-21 18:38:11 MSD
(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]
> 

А кто же использует эти модули?
Comment 6 Timur Batyrshin 2007-09-21 18:52:39 MSD
(In reply to comment #4)
> Created an attachment (id=2206) [edit]
> iptables.diff
> 
> Новая версия того же патча.

Тот же результат.
Comment 7 Timur Batyrshin 2007-09-21 18:56:49 MSD
> А кто же использует эти модули?

Выяснилось, что каким-то боком их используют VZ контейнеры.
После того, как я их остановил все заработало.
Предыдущий патч проверить? 

Comment 8 Timur Batyrshin 2007-09-21 19:14:00 MSD
(In reply to comment #7)
> > А кто же использует эти модули?
> 
> Выяснилось, что каким-то боком их используют VZ контейнеры.
> После того, как я их остановил все заработало.

Уточнение:
Если запускать service iptables start после vzctl start VEid, то он нормально
останавливается. Если после запуска iptables запустить какое-нибудь VE, модули
перестают выгружаться.
Comment 9 Dmitry V. Levin 2007-09-21 19:24:27 MSD
(In reply to comment #6)
> (In reply to comment #4)
> > Created an attachment (id=2206) [edit] [edit]
> > iptables.diff
> > 
> > Новая версия того же патча.
> 
> Тот же результат.

Естественно.  Просто предыдущая версия патча была неполная.
Comment 10 Dmitry V. Levin 2007-09-21 19:27:16 MSD
(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", то
модули будут выгружены.
Comment 11 Dmitry V. Levin 2007-09-21 19:31:49 MSD
(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" вручную, то при выключении системы
это действие будет пропущено.
Comment 12 Timur Batyrshin 2007-09-24 12:29:17 MSD
> > Если запускать service iptables start после vzctl start VEid, то он нормально
> > останавливается. Если после запуска iptables запустить какое-нибудь VE, модули
> > перестают выгружаться.
> 
> Наверное, дело обстоит следующим образом: если запущен хотя бы один контейнер,
> то модули выгрузить не получится.
> 
> Вероятно, если после "service vz stop" выполнить "service iptables stop", то
> модули будут выгружены.

Да, я практически об этом и написал. С сервисом vz вылезает еще один баг: если
запустить service vz start до запуска service iptables start, то модули iptables
загружаются скриптом vz, правила же не загружаются и мы можем опять получить
ситуацию с потерей правил.
Comment 13 Timur Batyrshin 2007-09-24 12:32:13 MSD
> > Если сделать 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" вручную, то при выключении системы
> это действие будет пропущено.

Если при этом выгрузятся все модули ядра, то так и есть, но если по каким-то
причина хотя бы один из них не будет выгружен, то действие не будет пропущено и
затрет сохраненные правила.
Comment 14 Dmitry V. Levin 2007-09-24 14:29:19 MSD
(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".
Comment 15 Timur Batyrshin 2007-09-27 16:49:54 MSD
Если из /etc/vz/vz.conf убрать из строчки IPTABLES="..." iptable_filter и
iptable_mangle, то модули начинают выгружаться нормально.

Оценить насколько они там нужны мне затруднительно.
Comment 16 Sergey Y. Afonin 2014-02-28 11:14:01 MSK
(In reply to comment #15)

> Если из /etc/vz/vz.conf убрать из строчки IPTABLES="..." iptable_filter и
> iptable_mangle, то модули начинают выгружаться нормально.
> 
> Оценить насколько они там нужны мне затруднительно.

Они там нужны. Без этого они недоступны в контейнерах.