Debian上でのiptablesの設定方法

ネットでググると古い記事が多いので、Debian Wikiを参考に簡単な方法を書いてみます。

aptitude install iptables iptables-persistent

まず、iptablesiptables-persistentをインストールします。
iptables-persistentは後で役立ってきます。

iptables -L

早速、現在の設定を見てみると

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

このように空っぽの状態だと思います。

テスト用に設定ファイルを作ります。

vi /etc/iptables.test.rules

今回は、Debian Wikiに書かれているサンプルを利用してみます。
各自、SSHD_CONFIGのポート番号に書き換えましょう。

*filter

# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

# Allows SSH connections for script kiddies
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
-A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT

# Now you should read up on iptables rules and consider whether ssh access 
# for everyone is really desired. Most likely you will only allow access from certain IPs.

# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

テスト用の設定を適用させてみましよう。

iptables-restore < /etc/iptables.test.rules

最初との違いがわかると思います。

iptables -L

/etc/network/if-pre-up.d/
/etc/network/if-post-down.d/
上記に設定をして、インターフェイスが立ち上がる前にiptablesを適応するようにしている記事が多いのですが、今回はiptables-persistentを利用します。

iptables-save > /etc/iptables/rules
service iptables-persistent start

これだけでOKです。
起動スクリプトを自分で用意する必要がないのでお手軽ですね。

後は、各自でiptablesの設定を調整してみてください。

ちなみに/etc/init.d/iptables-persistent、中身はシンプルなシェルスクリプトでした。

#!/bin/sh
#               Written by Simon Richter <sjr@debian.org>
#
### BEGIN INIT INFO
# Provides:          iptables-persistent
# Required-Start:    mountkernfs $local_fs
# Required-Stop:     $local_fs
# Default-Start:     S
# Default-Stop:
# Short-Description: Set up iptables rules
### END INIT INFO

case "$1" in
start)
    if [ -f /etc/iptables/rules ]; then
        iptables-restore </etc/iptables/rules
    fi
    ;;
stop|force-stop|restart|force-reload|status)
    ;;
*)
    echo "Usage: $0 {start|stop|force-stop|restart|force-reload|status}" >&2
    exit 1
    ;;
esac

exit 0

情報が古くなったので、追記しておきました。
http://d.hatena.ne.jp/mercysluck/20121212