Bug 12869 - service iptables stop не выгружает модули ядра
: service iptables stop не выгружает модули ядра
Status: ASSIGNED
: Sisyphus
(All bugs in Sisyphus/iptables)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2007-09-21 16:54 by
Modified: 2014-02-28 11:14 (History)


Attachments
iptables.diff (470 bytes, patch)
2007-09-21 17:49, Dmitry V. Levin
no flags Details | Diff
iptables.diff (1.23 KB, patch)
2007-09-21 18:37, Dmitry V. Levin
no flags Details | Diff


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2007-09-21 16:54:22
Ошибка в /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 From 2007-09-21 17:28:53 -------
(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 From 2007-09-21 17:49:46 -------
Created an attachment (id=2205) [details]
iptables.diff

Попробуйте, пожалуйста, этот патч на /etc/init.d/iptables
------- Comment #3 From 2007-09-21 18:00:57 -------
[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 From 2007-09-21 18:37:30 -------
Created an attachment (id=2206) [details]
iptables.diff

Новая версия того же патча.
------- Comment #5 From 2007-09-21 18:38:11 -------
(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 From 2007-09-21 18:52:39 -------
(In reply to comment #4)
> Created an attachment (id=2206) [edit] [details]
> iptables.diff
> 
> Новая версия того же патча.

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

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

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

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

Естественно.  Просто предыдущая версия патча была неполная.
------- Comment #10 From 2007-09-21 19:27:16 -------
(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 From 2007-09-21 19:31:49 -------
(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 From 2007-09-24 12:29:17 -------
> > Если запускать 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 From 2007-09-24 12:32: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" вручную, то при выключении системы
> это действие будет пропущено.

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

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

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

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