Bug 28608

Summary: efw restart загружает conntrack
Product: Sisyphus Reporter: Anton Farygin <rider>
Component: etcnetAssignee: Mikhail Efremov <sem>
Status: NEW --- QA Contact: qa-sisyphus
Severity: major    
Priority: P3 CC: ldv, rider, sem, shaba, vseleznv
Version: unstable   
Hardware: all   
OS: Linux   

Description Anton Farygin 2013-02-26 22:27:53 MSK
Сразу после загрузки модулей conntrack нет (так и должно быть).

После efw restart модули появляются. Это плохо на высоконагруженных роутерах - загруженные модули conntrack приводят к тому, что ядро отслеживает все соединения и не создаёт новых при переполнении таблицы conntrack.

и что ещё хуже - увеличение таблицы через sysctl не работает, ибо на момент загрузки системы модулей conntrack в системе нет.

Необходимо сделать так, что бы перезапуск firewall в etcnet не загружал дополнительных модулей ядра, если в этом нет необходимости.

Воспроизводится очень просто на любой системе, не являющейся шлюзом:
[root@riderkvmS ~]# lsmod |grep conn
[root@riderkvmS ~]# efw restart
Interface is "default"
Table is "filter"
Chain is ""
Action is "restart"

Firewall type is "iptables"
Stopping iptables for default
	Flushing the "OUTPUT" chain in the "filter" table
	Flushing the "FORWARD" chain in the "filter" table
	Flushing the "INPUT" chain in the "filter" table
	Flushing the "POSTROUTING" chain in the "nat" table
	Flushing the "OUTPUT" chain in the "nat" table
	Flushing the "PREROUTING" chain in the "nat" table
	Flushing the "POSTROUTING" chain in the "mangle" table
	Flushing the "OUTPUT" chain in the "mangle" table
	Flushing the "FORWARD" chain in the "mangle" table
	Flushing the "INPUT" chain in the "mangle" table
	Flushing the "PREROUTING" chain in the "mangle" table
	Setting ACCEPT policy for the "INPUT" chain in the "filter" table
	Setting ACCEPT policy for the "FORWARD" chain in the "filter" table
	Setting ACCEPT policy for the "OUTPUT" chain in the "filter" table
Starting iptables for default
	Setting ACCEPT policy for the "INPUT" chain in the "filter" table
	Setting ACCEPT policy for the "FORWARD" chain in the "filter" table
	Setting ACCEPT policy for the "OUTPUT" chain in the "filter" table

[root@riderkvmS ~]# lsmod |grep conn
nf_conntrack_ipv4      14110  3 nf_nat,iptable_nat
nf_defrag_ipv4          1537  1 nf_conntrack_ipv4
nf_conntrack           83469  3 nf_nat,iptable_nat,nf_conntrack_ipv4
Comment 1 Andrew Kornilov 2013-02-26 22:45:42 MSK
А это не efw, ответственно заявляю как автор ;-)

Экспериментально выяснил только что следующее:

# lsmod |grep conn
# iptables -F OUTPUT -t nat
# lsmod |grep conn
nf_conntrack_ipv4      10493  3 iptable_nat,nf_nat
nf_conntrack           63523  3 iptable_nat,nf_nat,nf_conntrack_ipv4
nf_defrag_ipv4          1205  1 nf_conntrack_ipv4


Именно после этого flush-а начинается эта проблема. Другие flush-и это не делают. Грузит это всё, похоже, модуль iptables_nat.

Команда modprobe -r iptable_nat  убирает все эти модули.

Можете её выполнял где-то в скриптах любых остановки (даже в конфигах).  Можно еще что-то придумать, но это уже будет костыль, imho.
Comment 2 Sergey Bolshakov 2013-02-27 00:31:58 MSK
если нужно держать в рамках размер conntrack'а -- есть таблица raw и джамп NOTRACK. файрвол же вообще без conntrack -- это как-то хм.
Comment 3 Anton Farygin 2013-02-27 10:03:32 MSK
А зачем на файрволле conntrack, объясни пожалуйста ?

Файрволл - это же не всегда NAT, верно ?
Таблица raw - ещё один костыль.
Давайте сделаем хотя-бы так, что если в таблице nat пусто - то и не делаем её -F
Comment 4 Andrew Kornilov 2013-02-27 12:57:41 MSK
А как мы узнаем, пустая она или нет? Встраивать ненужный интеллект в скрипты? 

Проще, мне кажется, в blacklist запихнуть эти модули, чтобы не грузились. Ну или выяснить, почему iptables их вообще грузит для этого.
Comment 5 Sergey Bolshakov 2013-02-27 13:56:12 MSK
(In reply to comment #3)
> А зачем на файрволле conntrack, объясни пожалуйста ?
> 
> Файрволл - это же не всегда NAT, верно ?

Для RELATED. Вообще, этот наш линупс со времён 2.2 имеет
stateful firewall, и conntrack -- это вот оно и есть.