Ubuntu Weekly Recipe

第76回 Ubuntuのソフトウェアファイアウォール:UFWの利用(1)

この記事を読むのに必要な時間:およそ 5 分

許可する通信を設定する

ufw enableを実行して全ての通信を遮断したら,⁠必要なポートを開く」作業を行います。以下ではSSHが利用する,TCP/UDPそれぞれのポート22を開いています。

$ sudo ufw allow 22

この状態でufw statusを実行すると,図4のように,ポート22に対する許可が行われているのが分かるでしょう。

図4 ポート22に対する許可を与えた状態

図4 ポート22に対する許可を与えた状態

必要であれば以下のようにすることで,TCPのみに許可を与えることもできます(SSHを利用するにはTCP/UDP双方が必要です。この例のようにTCPだけを許可することは望ましくありません)⁠

$ sudo ufw allow 22/tcp

不要になったルールは,次のように,追加のためのコマンドの頭に「delete」をつけて実行すれば削除できます。

$ sudo ufw allow 22/tcp ←追加のためのコマンド
$ sudo ufw delete allow 22/tcp ←削除のためのコマンド

また,ポート番号ではなく,サービス名で指定することも可能です。サービス名とポート番号の対応は,/etc/servicesに書かれたものが利用されます。⁠delete」を頭につけることで削除もできます。例は次のようになります。

$ sudo ufw allow ssh

接続頻度を制限する

SSHやIMAP,HTTPSのBASIC認証などの,パスワードによる認証を用いるサービスでは,⁠でたらめなパスワードを打ち込み続け,偶然正しいものと一致することを期待する」⁠ブルートフォース)攻撃への対策が必要です。

SSHでは公開鍵による認証を行うことで,パスワードよりも強固な,事実上ブルートフォース攻撃では破れない設定にすることも可能ですが,鍵の管理が面倒など,パスワード認証に比べて不便な点もあり,すべての場合で利用できるわけでもありません。

すでにufwとiptablesの比較のところでも触れたように,このような場合はufwの「接続頻度を制限する」機能が便利です。この指定はLIMITキーワードを用いて行います。以下のように操作しておくことで,⁠執拗に接続してくるアクセス」を拒否することが可能です。

$ sudo ufw limit ssh

許可・拒否のログを取る

このようにして「allow」を設定したルールに基づいて通信が許可された場合や,⁠limit」で接続が制限された場合,/var/log/syslogに以下のようなログが記録されます。

Jun 14 18:55:28 eridanus kernel: [ 3063.760231] [UFW ALLOW] IN=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff SRC=192.168.200.20 DST=192.168.200.102 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=19614 DF PROTO=TCP SPT=36097 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0

これらのログの出力は,ufwのLOGGING設定に依存します。わざわざufw allowルールによる接続許可をロギングしたくない場合,以下のようにレベル指定を「low」にします。

$ sudo ufw logging low

lowは,⁠default以外のルールによるブロック」を,流量制御しつつ出力します。以外のログの出力レベルには,off(完全に無効)⁠medium(流量制御ありでallow・denyにマッチしたもの+不正なパケット+新しいコネクションを出力。デフォルト値)⁠high(mediumの流量制御なし版)⁠full(すべてのログを記録)となっています。詳細は,man ufwかsudo ufw helpを参照してください。

ただし,ほとんどの場合はlowとmeduimを使い分ければ充分でしょう。また,highやfullを利用する場合,膨大なログが出力されるので,ディスク容量に注意してください。

「app」による指定

※この機能は,8.10以降のUbuntuで利用可能です。

ufwでは,ポート単位の指定だけでなく,⁠アプリケーションごと」に設定を行うことも可能になっています。たとえば,Sambaの接続許可を行う場合を考えてみましょう。

Samba Serverは名前解決やマスタブラウザの利用のために,4種類のポートを利用して動作します。これを8.04のufwを利用して許可する場合,以下のようにnetbios-ns(TCP/UDP 137)⁠netbios-dgm(TCP/UDP 138)⁠netbios-ssn・microsoft-ds(TCP/UDP 445)のそれぞれを許可する必要があります。

$ sudo ufw allow netbios-ns
$ sudo ufw allow netbios-dgm
$ sudo ufw allow netbios-ssn
$ sudo ufw allow microsoft-ds

しかし,本来の目的は,⁠Sambaのサービスを許可する」ことであり,これら4種類のサービスを許可するのはあくまで手段でしかありません。そこでufwでは,/etc/ufw/application.d/ディレクトリにアプリケーション定義ファイルを置くことで,アプリケーション単位で接続の可否を設定できるようになっています。このディレクトリにアプリケーション定義ファイルを配置するのは,サーバーアプリケーションのパッケージ(cupsやsamba・postfixパッケージ)の仕事となっており,ユーザーがこれらを意識する必要はありません。この機能は,以下のように利用します。

まず,登録されている「アプリケーション」の一覧を調べます。図5のようにアプリケーションごとの定義の一覧が表示されるはずです。

$ sudo ufw app list

図5 アプリケーションごとの定義の一覧

図5 アプリケーションごとの定義の一覧

あとは「allow」「deny」の引数としてアプリケーション名を与えるだけです。

$ sudo ufw allow Samba

これにより,サービス単位(=ポート単位)で接続許可を行わなくても,一度に設定を行うことができます。

なお,これらのアプリケーション名は,/etc/servicesに登録されているサービス名と区別するため,先頭が大文字で始まることになっています。

引き続き,次回はufwのより詳しい操作方法や,GUIからの利用について説明します。

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

コメントの記入