Debianでiptablesファイルを置く場所について。

ひさしぶりにDebianでiptablesをいじる機会があって、「/etc/init.d/iptables」があるものだと思っていたらなかったという話。

woodyまではあったそれがsargeからは「/usr/share/doc/iptables/examples/oldinitdscript.gz」として外されてて、lennyではそれすらもなくなってる、という経緯らしい。
理由は、「/etc/init.d」にあると順番によってはiptablesのルールが有効になる前に他のサービスが上がってしまって、一次的に無防備になるのを防ぐためだとか。(だったらその旨を書いてどこかに置いておいてくれたらいいのに・・・。)
で、どうするかというと、

  1. 「/etc/network/interfaces」で対象NICの「pre-up」と「post-down」にそれぞれルールの追加、削除を書く。
  2. 「/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対応 Debian GNU/Linux徹底入門第3版 Sarge対応
翔泳社(2005-08-04)
翔泳社
新品価格:¥ 4,968
中古価格:¥ 2,069
ASIN:4798102865

(本を持っていることをすっかり忘れててkomagataさんに相談し、本で見たっていう話を聞いて思い出したという経緯が・・・。本を持ってるだけじゃダメです、という典型的な例でございました。)

タイトルとURLをコピーしました