2011年2月8日火曜日

iptablesのリスタート時にモジュールをアンロードさせない方法


最近のlinuxカーネルではデフォルトで、
iptablesリスタートするとiptablesモジュールがいったんunloadされる。

このとき、TCP接続元ホストやそのホストでwindow scale optionが有効になっている場合、
(1) windowサイズを正しく認識できなくなる
(2) 張られているTCPセッションがESTABLISHED ⇒ INVALIDとなる
(3) TCPセッションが切られる


アプリによっては再接続等で問題がわからないかもしれない。
しかし、TCPセッションが切れることで問題が発生するアプリも存在するだろう。

そのため、iptablesモジュールをunloadしない設定にしておくかどうかを検討する必要がある。



● 確認
① window scale option の確認
# cat /proc/sys/net/ipv4/tcp_window_scaling
1
↑ window scale optionが有効である
    0であれば無効である


② iptablesコンフィグ
# grep UNLOAD /etc/sysconfig/iptables-config
IPTABLES_MODULES_UNLOAD="yes"
↑ iptablesモジュールがunloadされる
   "no"であればunloadされない 



● 確認結果 
① 環境
# uname -a
Linux imta105 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:02 EDT 2007 i686 i686 i386 GNU/Linux 


② 設定変更前のiptablesリスタート
# /etc/init.d/iptables restart 
ファイアウォールルールを適用中: [  OK  ] 
チェインポリシーを ACCEPT に設定中filter [  OK  ] 
iptables モジュールを取り外し中 [  OK  ] ← モジュールがunloadされた 
iptables ファイアウォールルールを適用中: [  OK  ] 
iptables モジュールを読み込み中ip_conntrack_netbios_ns [  OK  ] ← モジュールがloadされた


③ 設定変更
# vi /etc/sysconfig/iptables-config 
IPTABLES_MODULES_UNLOAD="no" にする。


④ 設定変更後のiptablesリスタート
# /etc/init.d/iptables restart
ファイアウォールルールを適用中: [  OK  ] 
チェインポリシーを ACCEPT に設定中filter [  OK  ] 
iptables ファイアウォールルールを適用中: [  OK  ] 
iptables モジュールを読み込み中ip_conntrack_netbios_ns [  OK  ] ← モジュールがloadされた


モジュールがloadされなおすのだが、上書きなのか、
この場合の影響は検証できていない。


また、iptables関係で、ここも気をつけるポイントだろう。