Ubuntu 9.04でFirewall設定

クライアント版のubuntuは、基本的にFirewallが全開で空いてます。なのでローカルで開発してる時に、不用意にApacheとかMySQLとか上げてると、同一ネットワーク内のマシンから丸見えになってしまいます。
Ubuntuにはufwとかいうfirewall設定ツールがあるみたいですが、centosでも使ってるiptableを利用することにしました。
guiufw設定ができるgufwというツールもあるみたいなので、そっちを使えばもっと簡単だったかも。
http://mycoco.dyndns.org/hmsvr09.php

とりあえず、/root/iptables.shを作って下記内容を記載

#!/bin/sh

# 全てのルールを削除
/sbin/iptables -F
# 全てのユーザ定義チェインを削除
/sbin/iptables -X

# 基本的には外部からのパケットの通過を拒否
/sbin/iptables -P INPUT DROP
# 基本的には外部へのパケットの通過を許可
/sbin/iptables -P OUTPUT ACCEPT
# 基本的には他のインターフェイスへ再送信を拒否
/sbin/iptables -P FORWARD DROP


# 内部から行ったアクセスに対する外部からの返答アクセスを許可
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT

このスクリプトをrootで実行すればpacketがフィルターできます。
apacheを外部から確認したい場合や、ssh接続したい場合は、最後の2行の#をはずし、再度スクリプトを実行します。

あとは、毎回ブート時に設定されるように、/etc/rc.localに
/root/iptables.sh
を追加して設定されるようにします。

さて、ここまでで安心してちゃダメです。実はipv6がデフォルトで有効になっているので、こっちも対応が必要です。ipv6の機能をオフにしようと思いましたが、色々やってみてダメだったので、たぶんカーネル再構築が必要です。面倒なので、ip6tablesコマンドを使って全ての入出力パケットをフィルターするようにしました。
/root/ip6tables.shを作り、下記内容を記載します。

#!/bin/sh

# 全てのルールを削除
/sbin/ip6tables -F
# 全てのユーザ定義チェインを削除
/sbin/ip6tables -X

# 基本的には外部からのパケットの通過を拒否
/sbin/ip6tables -P INPUT DROP
# 基本的には外部へのパケットの通過を拒否
/sbin/ip6tables -P OUTPUT DROP
# 基本的には他のインターフェイスへ再送信を拒否
/sbin/ip6tables -P FORWARD DROP

# lo( ループバック)からのINPUTを拒否
/sbin/ip6tables -A INPUT -i lo -j DROP

これも同じように、/etc/rc.localに
/root/ip6tables.sh
の1行を記載してブート時にフィルターされるようにします。

これで安心!