■ ホーム

iptables への移行

[ 戻る | woody | domain | iptables ]

  1. kernel-image-2.4.x で ipchains が動かない
  2. ipchains モジュールで逃げ運用
  3. きちんと iptables を導入

kernel-image-2.4.x の導入に伴い ipmasq が動かなくなる
kernel の管理が大変なので kernel-image-2.4.x をインストールしたが、 これに伴い kernel-2.0,2.2 系で採用されていた ipchains による管理から、 iptables による管理になったため、ipmasq 機能が動かなくなる。

逃げの運用で、ipchains を動かす。
linux-2.4.x では ipchains をそのまま使えるようにするために、 ipchains 用のモジュールがある。
ipmasq の設定プログラムの先頭に、
	/sbin/modprobe ipchains
を追加する。
Debian の kernel-image を使っているので、(この例ではカーネル再構築の説明はしないが)本来なら ipchains モジュールを作らないといけない。
ひとまず動くようになるが、今後のことも考えると、NAT 機能も設定したいし、 iptables に切り替えたいと思う。

きちんと iptables を導入
ここで例に示している設定は、あくまで基本的なものであり、これ以外にも細々と個別に許可、禁止をしている設定がいくつかあるが、自宅のセキュリティホールの公開になるのもアホらしいので、ここでは割愛する。

ipmasq の設定プログラムの先頭に、必要なモジュールを読み込むための処理を追加する。
	/sbin/modprobe ip_tables
	/sbin/modprobe iptable_filter
	/sbin/modprobe iptable_nat
	/sbin/modprobe ip_nat_ftp
	/sbin/modprobe ipt_MASQUERADE
各ルールの初期化
	IPTABLES="/sbin/iptables"
	$IPTABLES -F                # ルールの初期化
	$IPTABLES -P OUTPUT DROP    # OUTPUTは原則禁止
	$IPTABLES -P FORWARD ACCEPT # FORWARDは原則許可
	$IPTABLES -P INPUT DROP     # INPUTは原則禁止

	$IPTABLES -t nat -F         # NAT機能の初期化
出力パケットの設定
        GROBAL_IF=eth0
        # プライベートアドレスパケットの流出禁止
        $IPTABLES -I OUTPUT -o $GROBAL_IF -d 10.0.0.0/8     -j DROP
        $IPTABLES -I OUTPUT -o $GROBAL_IF -d 172.16.0.0/12  -j DROP
        $IPTABLES -I OUTPUT -o $GROBAL_IF -d 192.168.0.0/16 -j DROP

        # それ以外のパケットは出力許可
        $IPTABLES -A OUTPUT -d 0.0.0.0/0 -j ACCEPT
フォワードの許可(マスカレード許可)
	$IPTABLES -t nat -A POSTROUTING -o $GROBAL_IF -j MASQUERADE
	$IPTABLES -t nat -A POSTROUTING -j MASQUERADE # あれ?不要だよな?
入力パケットの設定
        # ローカルはすべて許可
        $IPTABLES -I INPUT -i lo -j ACCEPT

        # プライベートアドレスの流出・流入の禁止
        $IPTABLES -I INPUT -i $GROBAL_IF -s 10.0.0.0/8     -j DROP
        $IPTABLES -I INPUT -i $GROBAL_IF -s 172.16.0.0/12  -j DROP
        $IPTABLES -I INPUT -i $GROBAL_IF -s 192.168.0.0/16 -j DROP

        # 内部ネットワークの許可
        $IPTABLES -A INPUT -s 127.0.0.0/8 -j ACCEPT
        $IPTABLES -A INPUT -s 192.168.1/24 -j ACCEPT # プライベートなどの許可
個別のプロトコルの許可
        # ICMPパケットの許可
        for proto in echo-reply destination-unreachable source-quench time-exceeded parameter-problem
        do
                $IPTABLES -A INPUT  -p ICMP --icmp-type $proto -j ACCEPT
                $IPTABLES -A OUTPUT -p ICMP --icmp-type $proto -j ACCEPT
        done

        # UDPパケットの許可(外と同じ様なサービスを提供している)
        for port in domain ntp icp
        do
                $IPTABLES -A INPUT -p udp --dport $port -j ACCEPT
                $IPTABLES -A INPUT -p udp --sport $port -j ACCEPT
        done

        # TCPパケットの許可
        for port in domain ntp icp http https ftp ftp-data webcache ssh smtp pop-2 pop-3 ntp nntp
        do
                $IPTABLES -A INPUT -p tcp --dport $port -j ACCEPT
                $IPTABLES -A INPUT -p tcp --sport $port -j ACCEPT
        done

        # コネクション確立用パケットは禁止
        $IPTABLES -A INPUT -p tcp ! --syn -d 192.168.0.0/16 --dport 1024:65535 -j ACCEPT
        $IPTABLES -A INPUT -p udp         -d 192.168.0.0/16 --dport 1024:65535 -j ACCEPT

        # reject パケットの記録を残す
        $IPTABLES -A INPUT -j LOG
        $IPTABLES -A INPUT -j REJECT

        # フォワード機能の有効化
        echo "1" > /proc/sys/net/ipv4/ip_forward
■ ホーム