まくろぐ
更新: / 作成:

ufw とは

ufw (Uncomplicated Firewall) は Debian/Ubuntu 系 Linux でパケットフィルタリングの設定(ファイアウォール設定)を行うためのツールです。 従来、パケットフィルタリングのツールとしては iptables が使われていましたが、iptables は設定が煩雑で扱いづらいという問題を抱えていたため、直感的な設定を行うためのツールとして ufw が開発されました。 ufw は Ubuntu 8.04 LTS 以降で使用することができます。

ufw のサブコマンド

通常コマンド

コマンド説明
ufw enableenables the firewall
ufw disabledisables the firewall
ufw default ARGset default policy
ufw logging LEVELset logging to LEVEL
ufw allow ARGSadd allow rule
ufw deny ARGSadd deny rule
ufw reject ARGSadd reject rule
ufw limit ARGSadd limit rule
ufw delete RULE|NUMdelete RULE
ufw insert NUM RULEinsert RULE at NUM
ufw prepend RULEprepend RULE
ufw route RULEadd route RULE
ufw route delete RULE|NUMdelete route RULE
ufw route insert NUM RULEinsert route RULE at NUM
ufw reloadreload firewall
ufw resetreset firewall
ufw statusshow firewall status
ufw status numberedshow firewall status as numbered list of RULES
ufw status verboseshow verbose firewall status
ufw show ARGshow firewall report
ufw versiondisplay version information

アプリケーションプロファイル

コマンド説明
ufw app listlist application profiles
ufw app info PROFILEshow information on PROFILE
ufw app update PROFILEupdate PROFILE
ufw app default ARGset default application policy

ufw の基本的な使い方

ufw で現在の設定を確認する (ufw status)

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

1 行目の表示で、ufw によるファイアウォールが有効 (Status: active) になっているか、無効 (Status: inactive) になっているかを確認することができます。

その下には、どのポート(サービス)へのアクセスが許可 (ALLOW) されているかのルール設定が表示されます。 デフォルトでは、ufw はすべての受信パケットを拒否するため、ここに列挙されていないサービスには外部から接続できないことになります。

ufw を有効にする (ufw enable)

ufw を有効にするには、ufw enable コマンドを使用します。 ポート 20 番の SSH 接続を許可 (ufw allow ssh) しておかないと、ufw を有効にすることで SSH 接続ができなくなってしまうので、その警告メッセージが表示されますが、問題なければ y と入力します。

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

$ sudo ufw status
Status: active
...(省略)...

ufw を無効にする (ufw disable)

ufw を無効にする(パケットフィルタリングを停止する)には、ufw disable コマンドを使用します。

$ sudo ufw disable
Firewall stopped and disabled on system startup

$ sudo ufw status
Status: inactive

上記のようにファイアウォールを無効化しても、後ほど ufw enable で有効化すれば、以前の設定を復旧することができます。 ufw の設定は /etc/ufw ディレクトリ以下にルールファイルとして保存されています。

ufw でルールを追加する (ufw allow)

ufw allow コマンドで、特定のポートへのアクセスを許可できます。

例: SSH (22/tcp) でのアクセスを許可
$ sudo ufw allow ssh
$ sudo ufw allow 22/tcp  # これでも同じ意味
例: TCP ポート 8000 へのアクセスを許可
$ sudo ufw allow 8000/tcp

ufw でルールを削除する (ufw delete)

ufw で設定したルールを削除するには、ufw delete で「ルール名」あるいは「ルール番号」を指定します。 ルール名を指定する場合は、例えば ufw allow 8000/tcp で追加したルールは次のように削除します。

$ sudo ufw delete allow 8000/tcp

番号で削除するルールを指定する場合は、先に ufw status numbered コマンドで現在設定されているルールの番号を調べます。

# まずルールの番号を確認する
$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 8000/tcp                   ALLOW IN    Anywhere
[ 2] 8000/tcp (v6)              ALLOW IN    Anywhere (v6)

# 2 番目のルールを削除する
$ sudo ufw delete 2
Deleting:
 allow 22/tcp

ufw で連続アクセスを拒否する (ufw limit)

ufw allow の代わりに ufw limit を使用すると、特定ポートへの連続アクセスあった場合に一定時間接続を拒否することができます。 次の例では、SSH (22) ポートへの接続が 30 秒間に 6 回以上あった場合に接続を拒否します。

$ sudo ufw limit ssh

これにより、ブルートフォースアタックによるログインを防ぐことができます。 ufw limit 設定をしたポートに関しては、ufw allow 設定を行う必要はありません(連続接続以外のアクセスは許可する、という意味になります)。

関連記事

まくろぐ
サイトマップまくへのメッセージ