Ubuntu 22.04 基本的なUFWの利用

スポンサーリンク

UFW(Uncomplicated FireWall)は、ファイアウォールの操作や管理をするiptablesの難しさを簡単に行うためのツールです。

検証した環境

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
$ uname -r
5.15.0-102-generic
$ ufw --version
ufw 0.36.1
Copyright 2008-2021 Canonical Ltd.

初期状態

OSのインストールを完了した時点で、UFWは起動していますが、特に通信の制御はされていません。

$ sudo systemctl status ufw.service
● ufw.service - Uncomplicated firewall
     Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: e>
     Active: active (exited) since Thu 2024-04-11 16:18:08 UTC; 15h ago
       Docs: man:ufw(8)
   Main PID: 628 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Apr 11 16:18:08 ubuntu systemd[1]: Starting Uncomplicated firewall...
Apr 11 16:18:08 ubuntu systemd[1]: Finished Uncomplicated firewall.
$ sudo ufw status
Status: inactive

通信制御の設定(ssh通信の許可)

UFWの通信制御はデフォルト動作として、「deny(拒否)」であるため、UFWを有効化にするとすべての通信を通しません。そのため、リモートでの操作ができなくなるのを防ぐため、「ssh(22)」の通信をとりあえず「allow(許可)」します。

$ sudo ufw allow from any to any port 22 proto tcp ・・・ ポート22の通信を許可
Rules updated
Rules updated (v6)
$ sudo ufw enable ・・・ UFWの有効化
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
$ sudo ufw status verbose ・・・ UFWの状態確認
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)

通信制御の許可と拒否の方法

https通信のポートである443/tcpを許可をして拒否をする方法です。この操作が基本となります。

$ sudo ufw allow from any to any port 443 proto tcp ・・・ ポート443の通信を許可
$ sudo ufw status numbered ・・・ 番号付きでUFWの状態確認
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 443/tcp                    ALLOW IN    Anywhere
[ 3] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 4] 443/tcp (v6)               ALLOW IN    Anywhere (v6)

$ sudo ufw delete 2 ・・・ 番号を指定して削除
Deleting:
 allow 443/tcp
Proceed with operation (y|n)? y
Rule deleted
$ sudo ufw status numbered 
Status: active

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

$ sudo ufw delete 3
Deleting:
 allow 443/tcp
Proceed with operation (y|n)? y
Rule deleted (v6)
$ sudo ufw status numbered 
Status: active

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

通信制御の初期化

通信制御を初期化して、UFWの無効化をします。

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)

$ sudo ufw reset ・・・ 通信制御の初期化(UFWの無効化)
Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20240412_183940'
Backing up 'before.rules' to '/etc/ufw/before.rules.20240412_183940'
Backing up 'after.rules' to '/etc/ufw/after.rules.20240412_183940'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20240412_183940'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20240412_183940'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20240412_183940'

$ sudo ufw status verbose 
Status: inactive
$ sudo ufw enable ・・・ UFWの有効化
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
$ sudo ufw status verbose ・・・ 初期化されているか確認
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
$ sudo ufw allow from any to any port 22 proto tcp ・・・ ポート22の通信を許可
Rule added
Rule added (v6)
$ sudo ufw status verbose 
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)

連続した接続が行われたら拒否

30秒間に連続して6回の接続が行われたら拒否をすることもできます。

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)

$ sudo ufw limit from any to any port 22 proto tcp
Rule updated
Rule updated (v6)
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     LIMIT IN    Anywhere
22/tcp (v6)                LIMIT IN    Anywhere (v6)

$ sudo ufw limit from any to any port 22 proto tcp comment 'Rate limit for openssh server' ・・・ コメントを入れることも可能
Rule updated
Rule updated (v6)
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     LIMIT IN    Anywhere                   # Rate limit for openssh server
22/tcp (v6)                LIMIT IN    Anywhere (v6)              # Rate limit for openssh server

$ sudo ufw allow from any to any port 22 proto tcp ・・・ もとに戻す
Rule updated
Rule updated (v6)
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)

ログの設定

UFWでログの設定を行います。ログレベルは下記の通り。

通常は、「low」か「medium」で十分でしょう。

パラメーター説明
offログの出力をしない
low定義されたポリシーに一致しないすべての拒否された通信をログに記録する
medium定義されたポリシーに一致しない拒否/許可された通信および、不正なパケット、新規の接続をログに記録する
highmediumで流量制御(Limit)を抜いたものをログに記録する
fullすべての通信を記録する
$ sudo ufw status verbose
Status: active
Logging: on (low) ・・・ デフォルトではlowが設定されている
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)