Bug 24897

Summary: service iptables stop пытается выгрузить не существующие модули
Product: Sisyphus Reporter: Slava Dubrovskiy <dubrsl>
Component: kernel-image-ovz-elAssignee: Gleb F-Malinovskiy <glebfm>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: boyarsh, glebfm, kernelbot, ldv, mike, mithraen, real.altlinux.org, rider, sbolshakov, shrek, sin, vitty, vsu, vt, zerg
Version: unstable   
Hardware: all   
OS: Linux   

Description Slava Dubrovskiy 2011-01-11 20:05:24 MSK
Ядро 2.6.32-ovz-el-alt6
При попытке остановить сервис iptables, последний пытается выгрузить модуль который вкомпилен в ядро.

# grep -i NF_FILTER /boot/config-2.6.32-ovz-el-alt6 
CONFIG_IP_NF_FILTER=y
CONFIG_IP6_NF_FILTER=m


# service iptables stop
Setting chains policy to ACCEPT: mangle nat filter                                                                                                                                                     [ DONE ]
Flushing firewall rules: mangle nat filter                                                                                                                                                             [ DONE ]
Removing user defined chains: mangle nat filter                                                                                                                                                        [ DONE ]
Zeroing packet and byte counters: mangle nat filter                                                                                                                                                    [ DONE ]
Unloading module iptable_mangle:                                                                                                                                                                       [ DONE ]
Unloading module iptable_nat:                                                                                                                                                                          [ DONE ]
Unloading module iptable_filter: FATAL: Module iptable_filter not found.
Comment 1 Dmitry V. Levin 2011-01-22 01:15:22 MSK
Когда был написан service iptables, все эти модули существовали.
Интересно, зачем их теперь засунули в ядро?
Comment 2 aspsk 2011-01-22 10:50:50 MSK
(В ответ на комментарий №1)
> Когда был написан service iptables, все эти модули существовали.
> Интересно, зачем их теперь засунули в ядро?

Когда собиралось ovz-el у меня была (неправильная) идея сделать конфиг,
основанный на el-smp. На следующей неделе я этим займусь.
Comment 3 Slava Dubrovskiy 2011-01-22 11:22:56 MSK
(В ответ на комментарий №2)
> (В ответ на комментарий №1)
> > Когда был написан service iptables, все эти модули существовали.
> > Интересно, зачем их теперь засунули в ядро?
> 
> Когда собиралось ovz-el у меня была (неправильная) идея сделать конфиг,
> основанный на el-smp. На следующей неделе я этим займусь.
Мне кажется это сделано вполне обосновано и правильно, т.к. если модули не загружены перед стартом VPS то внутри они не видны. И поэтому приходится прибегать к "грязному хаку" - обязательно ставить iptables на HN и ставить в автостарт с указанием нужных модулей в /etc/sysconfig/iptables_modules, чтобы iptables работало в VPS.
В связи с этим, если сделать все это не модулем то и нет проблем.

Или вот еще теперь нет модуля button - оно в ядре. Тоже очень правильно. А то сделали модулем, потом сделали 
installer-feature-powerbutton-stage2 - Arrange for power button to work as expected
installer-feature-powerbutton-stage3 - Arrange for power button to work as expected
Comment 4 Dmitry V. Levin 2011-01-23 00:08:33 MSK
(In reply to comment #3)
> (В ответ на комментарий №2)
> > (В ответ на комментарий №1)
> > > Когда был написан service iptables, все эти модули существовали.
> > > Интересно, зачем их теперь засунули в ядро?
> > 
> > Когда собиралось ovz-el у меня была (неправильная) идея сделать конфиг,
> > основанный на el-smp. На следующей неделе я этим займусь.
> Мне кажется это сделано вполне обосновано и правильно,

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

> т.к. если модули не
> загружены перед стартом VPS то внутри они не видны. И поэтому приходится
> прибегать к "грязному хаку"

Зачем???

Прочитайте, пожалуйста, в документации vzctl(8) на тему --iptables.
Comment 5 Slava Dubrovskiy 2011-01-24 02:29:45 MSK
(В ответ на комментарий №4)
> > т.к. если модули не загружены перед стартом VPS то внутри они не видны. И поэтому приходится прибегать к "грязному хаку"
> Зачем???
Да об этом везде написано! Например:
http://wiki.openvz.org/Setting_up_an_iptables_firewall#Setting_up_a_firewall_that_allows_per-container_configuration : - "If you want to use a firewall inside a container, please load these modules BEFORE starting the container"

> Прочитайте, пожалуйста, в документации vzctl(8) на тему --iptables.
Что читать? Читано - перечитано и проверено на собственном опыте. 
--iptables name
   Allow to use the functionality of name iptables module inside the container.

И ни слова про то что vzctl самостоятельно их грузит. И не должен. Это задача iptables. Просто сервис iptables должен еще смотреть в переменную IPTABLES в /etc/vz/vz.conf и загружать указанные там модули. Чтобы модули подхватились в VPS, т.к. если модули загрузить ПОСЛЕ старта сервиса vz, то VPS их не увидит. Поэтому я и говорю, что включение их в ядро самый легкий вариант решения проблемы. 
А при остановке iptables проверять не используются ли модули в VPS (запущен ли сервис vz) и если да, то не выгружать то что указано в IPTABLES.
Аналогично и для IP6TABLES

ЗЫ:
Кстати в переводе man vzctl совсем противоположное описывается:
--iptables имя
    Запретить  доступ  к  модулям iptables из виртуальной среды
Comment 6 Dmitry V. Levin 2011-01-24 03:01:03 MSK
(In reply to comment #5)
> (В ответ на комментарий №4)
> > > т.к. если модули не загружены перед стартом VPS то внутри они не видны. И поэтому приходится прибегать к "грязному хаку"
> > Зачем???
> Да об этом везде написано! Например:
> http://wiki.openvz.org/Setting_up_an_iptables_firewall#Setting_up_a_firewall_that_allows_per-container_configuration
> : - "If you want to use a firewall inside a container, please load these
> modules BEFORE starting the container"

Мало ли где что написано.  Главное -- это что написано в коде, см.
$ fgrep MODULES /etc/init.d/vz

> И ни слова про то что vzctl самостоятельно их грузит. И не должен.

service vz start их загружает.

> Кстати в переводе man vzctl совсем противоположное описывается:
> --iptables имя
>     Запретить  доступ  к  модулям iptables из виртуальной среды

О неточностях перевода лучше сообщать мейнтейнеру соответствующего пакета.
Comment 7 Slava Dubrovskiy 2011-01-24 03:34:09 MSK
(В ответ на комментарий №6)
http://wiki.openvz.org/Setting_up_an_iptables_firewall#Setting_up_a_firewall_that_allows_per-container_configuration
> > : - "If you want to use a firewall inside a container, please load these
> > modules BEFORE starting the container"
> 
> Мало ли где что написано.  Главное -- это что написано в коде, см.
> $ fgrep MODULES /etc/init.d/vz
> 
> > И ни слова про то что vzctl самостоятельно их грузит. И не должен.
> service vz start их загружает.
Ага, спасибо. Уже значит сделали. Раньше точно не грузило. И приходилось извращаться.

Мне кажется тут проблема, что эти 2 сервиса пытаются управлять одними и теми же модулями. Ведь если делать service iptables restart, то при остановке будет попытка выгрузить те модули которые могут быть использованы в vz.
Плохо когда 2 хозяина на один модуль...
Comment 8 Dmitry V. Levin 2011-01-24 20:21:34 MSK
(In reply to comment #7)
> Мне кажется тут проблема, что эти 2 сервиса пытаются управлять одними и теми же
> модулями.

Я бы не сказал, что service vzctl управляет модулями iptables.
Да, он умеет их загружать и выгружать при необходимости, но не более того.

> Ведь если делать service iptables restart, то при остановке будет
> попытка выгрузить те модули которые могут быть использованы в vz.

Нет, service iptables restart не выгружает модули.
Comment 9 Slava Dubrovskiy 2011-01-24 20:49:00 MSK
(В ответ на комментарий №8)
> > Ведь если делать service iptables restart, то при остановке будет
> > попытка выгрузить те модули которые могут быть использованы в vz.
> Нет, service iptables restart не выгружает модули.
Но service iptables stop выгружает.
Повторю суть обсуждения: - Eсли делать service iptables stop, то при остановке будут выгружены модули которые использованы в vz. Что делать при этом?
Comment 10 Dmitry V. Levin 2011-01-24 20:52:56 MSK
(In reply to comment #9)
> (В ответ на комментарий №8)
> > > Ведь если делать service iptables restart, то при остановке будет
> > > попытка выгрузить те модули которые могут быть использованы в vz.
> > Нет, service iptables restart не выгружает модули.
> Но service iptables stop выгружает.

Да, stop пытается выгрузить модули.

> Повторю суть обсуждения: - Eсли делать service iptables stop, то при остановке
> будут выгружены модули которые использованы в vz. Что делать при этом?

Модули, которые используются, выгрузить невозможно.
А в чем, собственно говоря, проблема?
Comment 11 Slava Dubrovskiy 2011-01-24 21:03:16 MSK
> Модули, которые используются, выгрузить невозможно.
> А в чем, собственно говоря, проблема?
Да, что-то занесло.
Проблема в том, о чем изначально завел баг.
Comment 12 aspsk 2011-01-25 09:11:42 MSK
(В ответ на комментарий №11)
> > Модули, которые используются, выгрузить невозможно.
> > А в чем, собственно говоря, проблема?
> Да, что-то занесло.
> Проблема в том, о чем изначально завел баг.

Ну тогда может быть стоит перевесить этот баг на ovz-el?
Comment 13 Dmitry V. Levin 2011-02-05 01:11:32 MSK
(In reply to comment #12)
> (В ответ на комментарий №11)
> > > Модули, которые используются, выгрузить невозможно.
> > > А в чем, собственно говоря, проблема?
> > Да, что-то занесло.
> > Проблема в том, о чем изначально завел баг.
> 
> Ну тогда может быть стоит перевесить этот баг на ovz-el?

OK
Comment 14 aspsk 2011-02-07 16:49:52 MSK
Fixed in ovz-el-2.6.32-alt10