クライアント版のubuntuは、基本的にFirewallが全開で空いてます。なのでローカルで開発してる時に、不用意にApacheとかMySQLとか上げてると、同一ネットワーク内のマシンから丸見えになってしまいます。
Ubuntuにはufwとかいうfirewall設定ツールがあるみたいですが、centosでも使ってるiptableを利用することにしました。
guiでufw設定ができる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行を記載してブート時にフィルターされるようにします。
これで安心!