squeezeのiptablesのサービス化

■以下のデーモン化から、initスクリプトは、保存/復元/初期化のみ行う方針に変更

 Lennyのiptablesをデーモン化
 http://d.hatena.ne.jp/labunix/20120208

 ※ユーザ設定はすべて「/etc/smallfirewall」スクリプトから行う。

■万一に備えてシリアルコンソールで接続出来るようにしておく。

 VMwarePlayerで、Squeeze on Squeeze シリアルコンソール接続
 http://d.hatena.ne.jp/labunix/20120215

■shの参照先は、Lennyでは「bash」、squeezeでは「dash」

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2011-10-15 21:24 /bin/sh -> dash

■以下をダウンロード

 smallfirewall.tar.gz(2012/02/18)
 http://sourceforge.jp/users/labunix/pf/smallfirewall/

$ md5sum smallfirewall-20120218_v0.1.tar.gz
b0e7ef654473748e251bad480e082e57  smallfirewall-20120218_v0.1.tar.gz

■展開と配置
 ※インストール時に「insserv」と「chkconfig」を導入します。
 ※デフォルトでは、eth0のリッスン中のTCPとUDPを許可するだけです。
 (拒否もログもありません)

$ tar zxvf smallfirewall-20120218_v0.1.tar.gz
$ cd smallfirewall-20120218
$ sudo ./install.sh

■先に導入しておくかuninstall.infoを空にしておくと、「./install -u」時に削除されません。

$ sudo apt-get install -y insserv chkconfig
$ dpkg -l | grep "insserv\|chkconfig" | awk '{print $1"\t"$2}'
ii      chkconfig
ii      insserv

■「/etc/smallfirewall」の設定に失敗したら「iptables-save」から復旧

$ sudo /etc/init.d/iptables stop && sudo /etc/init.d/iptables start

■「/etc/smallfirewall」の設定に成功したら、保存と復元チェック。

$ sudo /etc/init.d/iptables restart

■設定内容の確認方法の例

$ sudo iptables -L -v -n

■smallfirewallのカスタマイズ
 デフォルトでは許可ポリシーにeth0のtcp/udpのINPUT/FORWARD/OUTPUTの許可を重ねるだけです。
 ※READMEを読んでsmallfirewallスクリプトを修正して下さい。

■「lo」についての記述が無い
 ※以下のようにします。
  仮想NICも同様にして、慣れるまでは各NICを以下のように許可することをお勧めします。

iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

■ログを出す
 ※大量のログが出る事が予想される為、デフォルトでは設定がありません。
 ※ポリシーでDROPするのは初めはログ取得後にします。

iptables -A INPUT -j LOG --log-prefix "iptables-in : " --log-level=info
iptables -A FORWARD -j LOG --log-prefix "iptables-fo : "
iptables -A OUTPUT -j LOG --log-prefix "iptables-ou : "

iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

■ログを見ながら設定の変更

$ sudo tail -f /var/log/syslog | grep iptables

■テスト時の反映手順

$ sudo /etc/init.d/iptables stop
$ sudo /bin/bash -x /etc/smallfirewall

$ echo "成功したら" > /dev/null; sudo /etc/init.d/iptables restart
$ echo "失敗したら" > /dev/null; sudo /etc/init.d/iptables stop && sudo /etc/init.d/iptables start

■icmpについての記述が無い。
 tcp/udpと関連するケースもあるので、ログ取得前にDROPする際はご注意下さい。

iptables -A INPUT -p icmp -j DROP
#iptables -A FORWARD -p icmp -j DROP
iptables -A OUTPUT -p icmp -j DROP

■他ネットワークからの通信の設定が無い。

 ログを見ながら時間をかけて設定する必要があります。
 環境に大きく左右されます。
 正しく設定できてから、ポリシーをDROPに変更して下さい。