2010年9月24日金曜日

さくらのVPS Ubuntu 10.04 ファイヤーウォールの設定

Ubuntu 10.04 が入った、さくらのVPS ですが、今回はファイヤーウォールの設定について書いてみたいと思います。

Ubuntu をファイヤーウォールに


「ファイヤーウォール」というと、たぶん皆さんは Windows マシンにインストールするウィルス対策ソフトウェアのデスクトップファイヤーウォールを想像するのではないかと思いますが、Linux ベースの OS では多くの場合、iptables コマンドを使って制御します。ここで「詳しくは iptables のマニュアルを読んで設定してください」と書いてしまうと、話は終わってしまうのですが、実はこの iptables には色々な機能が実装されていて、なかなか手数がかかって複雑かつ面倒だという事情があります。インタフェースをたくさん持っていてたくさんのネットワーク間の通信制御を行おうとすると、もはや人力で設定するのは難しいレベルに到達したりもします。こういったファイヤーウォールの設定を本気で作ろうとすると fwbuilder などで設定を作ることも検討しなければいけないのですが、さくらのVPS を使うのにはそこまで大がかりになるのもどうかとも思いますし、実は Ubuntu には iptables の使いやすいラッパー ufw が用意されているので、これを使って設定してしきましょう。

ufw でファイヤーウォールの設定を


ufw コマンドはすでにインストールされていると思いますので、早速設定してみたいと思います。コンソール(ここ重要)でログインし、ufw を有効にします。
# ufw status
Status: inactive
# ufw enable
Firewall is active and enabled on system startup
# ufw status
Status: active
現在の ufw の状況は ufw status で見ることができるので、ufw enable したあとに本当に有効になっているのか、上記のコマンド実行例のようにして確認してください。もしかしたら読者のみなさんの中にはすでに ssh サーバをインストールして、sshでログインしている人がいるかもしれませんが( ssh についてはこの連載(?)でも後で扱いたいと思います )、そのような場合でもファイヤーウォールについての操作はコンソールで作業することをお勧めします。設定に失敗した場合に ssh ではどうにもならない事態に陥ることもままあるので、はじめからコンソールで作業するのが無難です。逆の言い方をすれば、コンソールへアクセスする手段がない状況でこの手の作業を行うのは非常にリスクが高いことだということになります。

次にファイヤーウォールの設定に合致しなかったパケットについての処理について決めておきます。さくらのVPS は文字通りサーバとして使うので、入力時に規制ルールを書き、出力時は特に制限をかけないことにしておきたいと思います。ufw default コマンドで
# ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
# ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
# ufw reload
Firewall reloaded
# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
として、デフォルトルールとして、入力については deny、出力については allow と設定してください。なお、この状態では具体的なルールを書いていませんので、入力パケットについては全て破棄されることになります。

提供(予定の)サービスについて許可ルールを追加


ここではじめて、提供(もしくは提供予定の)サービスについて、許可ルールを追加します。ここでは、ssh と http について、許可ルールを追加してみたいと思います。
# ufw limit in ssh/tcp
Rule added
# ufw allow in http/tcp
Rule added
# ufw status numbered
Status: active

To Action From
-- ------ ----
[ 1] 22/tcp LIMIT IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere

# ufw reload
Firewall reloaded
さくらのVPS にとって、入力パケットはすべてVPSサーバ自身へのパケットですので、IPアドレスを書かずに allow in や limit in という風に指定することができます。

ここで、ssh については limit in を指定しましたが、これは、ssh に対してブルートフォース攻撃( ユーザ名とパスワードを総当りで試す攻撃 )が横行している状況を受けて、同一 IP アドレスから 30 秒間に 6回以上の接続がある場合には接続を拒否するという設定です。これで ssh と http のみを受け付ける設定ができました。

ufw の優れているところは、ループバックインタフェース lo の通信や icmp 、接続が確立されている通信などについての許可ルールや、マルチキャストやブロードキャストアドレスの通信を拒否するといった設定が暗黙のうちに組み込まれているところです( 詳しくは /etc/ufw や /lib/ufw のファイルを覗いてみてください )。文献によってはこの ufw を「簡易Firewall」と書いているところもありますが、なかなかしっかりしている印象をうけました( 正直私にはこれだけの設定内容を iptables で短時間にスクラッチから書くことはできません )。iptables で実現できるすべてのことを ufw で制御できるわけではないのですが、さくらのVPS のようなサーバに対してはジャストフィットな仕組みだと思います。

次回は


ファイヤーウォールの設定もできたので、ここらで ssh サーバを立ち上げたいと思います。