ひさしぶりにDebianでiptablesをいじる機会があって、「/etc/init.d/iptables」があるものだと思っていたらなかったという話。
woodyまではあったそれがsargeからは「/usr/share/doc/iptables/examples/oldinitdscript.gz」として外されてて、lennyではそれすらもなくなってる、という経緯らしい。
理由は、「/etc/init.d」にあると順番によってはiptablesのルールが有効になる前に他のサービスが上がってしまって、一次的に無防備になるのを防ぐためだとか。(だったらその旨を書いてどこかに置いておいてくれたらいいのに・・・。)
で、どうするかというと、
- 「/etc/network/interfaces」で対象NICの「pre-up」と「post-down」にそれぞれルールの追加、削除を書く。
- 「/etc/network/if-pre-up.d」と「/etc/network/if-post-down.d」にそれぞれルールの追加、削除スクリプトを書いて置く。
のいずれかがいまのスタイルらしいです。短いときはNICのファイルに、長いときには単独のファイルで、と。
ただ、単独のファイルで置いた場合はNICの数ぶんだけスクリプトが走るので、ルールが重複して登録されることがあります。
対策は、
#!/bin/sh
if [ "$IFACE" = "eth0" ]; then
iptables -A INPUT -i eth0 なんとか
iptables -A INPUT -i eth0 かんとか
fi
ってな感じで$IFACEで判断してやればよし。
これ、Debian徹底入門のP603にしっかり書いてありました。
Debian GNU/Linux徹底入門第3版 Sarge対応 翔泳社(2005-08-04) 翔泳社 新品価格:¥ 4,968 中古価格:¥ 2,069 ASIN:4798102865 |
(本を持っていることをすっかり忘れててkomagataさんに相談し、本で見たっていう話を聞いて思い出したという経緯が・・・。本を持ってるだけじゃダメです、という典型的な例でございました。)