ufwコマンドの使い方
- 0 はじめに
- 1 ufwコマンドとは?
- 2 検証環境
- 3 オプション一覧
- 4 ufwの起動、停止方法
- 5 ロギングについて
- 6 ルールの追加、削除方法
- 7 登録されているルールを全てリセットする方法
- 8 アプリケーション・インテグレーション(Application Integration)の使い方
- 9 iptablesの設定内容を表示する方法(show)
- Z 参考情報
0 はじめに
以前書いた記事からアイキャッチ画像が削除できないので、改めて記事を作成しました。内容は変わりません。
1 ufwコマンドとは?
ufw(Uncomplicated FireWall)は、ファイアウォールの設定を行うコマンドです。ufwは、CentOS7のfirewall-cmd,openSUSEのSUSEfirewall2と同じ位置づけのコマンドです。図に書くと、以下のようになります。firewall-cmdコマンドの使い方は、firewall-cmdの使い方 - hana_shinのLinux技術ブログを参照してください。
CentOS7 Ubuntu20.04 openSUSE(Leap42.3) +--------------+ +------------+ +---------------------+ -*- | firewall-cmd | | ufw | | SUSEfirewall2 | | +--------------+ +------------+ +---------------------+ | ユーザ空間 +-----------------------------------------------------------+ | | iptables command | | +-----------------------------------------------------------+ -*- +-----------------------------------------------------------+ -*- | | | | OS(netfilter) | カーネル空間 | | | +-----------------------------------------------------------+ -*-
2 検証環境
Ubuntuの版数は以下のとおりです。
root@server:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.3 LTS Release: 20.04 Codename: focal
カーネル版数は以下のとおりです。
root@server:~# uname -r 5.4.0-91-generic
ufwの版数は以下のとおりです。
root@server:~# ufw --version ufw 0.36 Copyright 2008-2015 Canonical Ltd.
3 オプション一覧
オプションは以下のとおりです。
root@server:~# ufw -h ERROR: Invalid syntax Usage: ufw COMMAND Commands: enable enables the firewall disable disables the firewall default ARG set default policy logging LEVEL set logging to LEVEL allow ARGS add allow rule deny ARGS add deny rule reject ARGS add reject rule limit ARGS add limit rule delete RULE|NUM delete RULE insert NUM RULE insert RULE at NUM route RULE add route RULE route delete RULE|NUM delete route RULE route insert NUM RULE insert route RULE at NUM reload reload firewall reset reset firewall status show firewall status status numbered show firewall status as numbered list of RULES status verbose show verbose firewall status show ARG show firewall report version display version information Application profile commands: app list list application profiles app info PROFILE show information on PROFILE app update PROFILE update PROFILE app default ARG set default application policy
4 ufwの起動、停止方法
4.1 起動方法
Ubuntuをインストールした直後、ufw は停止(inactive)しています。
root@server:~# ufw status verbose Status: inactive
ufwを起動します。
root@server:~# ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
ufwの状態を確認します。ufwが起動(active)したことがわかります。この状態だとsshへのアクセスが許可されていないので、OSを再起動するとsshでログインできなくなってしまいますので、sshへのアクセスを許可する必要があります。
root@server:~# ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip
sshログインを可能にするため、sshへのアクセスを許可するルールを追加します。
root@server:~# ufw allow 22 Rule added Rule added (v6)
ufwの状態を確認します。sshへのアクセスを許可するルールが追加されたことがわかります。
root@server:~# ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22 ALLOW IN Anywhere 2 ALLOW IN Anywhere 22 (v6) ALLOW IN Anywhere (v6) 2 (v6) ALLOW IN Anywhere (v6)
sshへのアクセスを許可するルールを追加すると、iptablesのINPUTチェインにルールが登録されます。
root@server:~# iptables -nvL |grep -w 22 1 52 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:22
5 ロギングについて
ufwのログは、/var/log/ufw.logに記録されます。
root@server:~# cat /var/log/ufw.log Jan 31 10:32:05 server kernel: [ 4547.943493] [UFW BLOCK] IN=ens33 OUT= MAC=xx:xx:xx:yy:yy:yy:a0:64:8f:a3:11:ce:08:00 SRC=192.168.2.12 DST=192.168.2.171 LEN=92 TOS=0x00 PREC=0x00 TTL=128 ID=13151 DF PROTO=TCP SPT=64266 DPT=22 WINDOW=4102 RES=0x00 ACK PSH URGP=0 -snip-
ufwを起動すると、ロギング機能が有効(Logging: on (low))になります。
root@server:~# ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22 ALLOW IN Anywhere 22 (v6) ALLOW IN Anywhere (v6)
ロギングを無効にするためには、以下のように実行します。
root@server:~# ufw logging off Logging disabled
ロギングの状態を確認します。ロギングが無効(Logging: off)になっていることがわかります。
root@server:~# ufw status verbose Status: active Logging: off Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip
6 ルールの追加、削除方法
6.1 TCPポート番号の追加、削除方法
登録されているルールを確認します。sshのルールだけが登録されていることがわかります。なお、numberedオプションを指定すると、左端に行番号が表示されます。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 22 (v6) ALLOW IN Anywhere (v6)
TCPの11111番ポートへのアクセスを許可するルールを追加します。
root@server:~# ufw allow 11111 Rule added Rule added (v6)
ルールを確認します。11111番ポートへのアクセスを許可するルールが追加されたことがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 11111 ALLOW IN Anywhere [ 3] 22 (v6) ALLOW IN Anywhere (v6) [ 4] 11111 (v6) ALLOW IN Anywhere (v6)
次に、番号[2]のルールを削除します。
root@server:~# ufw delete 2 Deleting: allow 11111 Proceed with operation (y|n)? y Rule deleted
ルールを確認します。番号[2]のルールが削除されたことがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 22 (v6) ALLOW IN Anywhere (v6) [ 3] 11111 (v6) ALLOW IN Anywhere (v6)
最後に、番号[3]のルールを削除します。
root@server:~# ufw delete 3 Deleting: allow 11111 Proceed with operation (y|n)? y Rule deleted (v6)
ルールを確認します。番号[3]のルールが削除されたことがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 22 (v6) ALLOW IN Anywhere (v6)
6.2 UDPポート番号の追加、削除方法
UDPの11111番ポートへのアクセスを許可するルールを追加します。
root@server:~# ufw allow 11111/udp Rule added Rule added (v6)
ルールを確認します。UDPの11111番ポートへのアクセスを許可するルールが追加されたことがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 11111/udp ALLOW IN Anywhere [ 3] 22 (v6) ALLOW IN Anywhere (v6) [ 4] 11111/udp (v6) ALLOW IN Anywhere (v6)
次に、番号[2]のルールを削除します。
root@server:~# ufw delete 2 Deleting: allow 11111/udp Proceed with operation (y|n)? y Rule deleted
ルールを確認します。番号[2]のルールが削除されたことがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 22 (v6) ALLOW IN Anywhere (v6) [ 3] 11111/udp (v6) ALLOW IN Anywhere (v6)
最後に、番号[3]のルールを削除します。
root@server:~# ufw delete 3 Deleting: allow 11111/udp Proceed with operation (y|n)? y Rule deleted (v6)
ルールを確認します。番号[3]のルールが削除されたことがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 22 (v6) ALLOW IN Anywhere (v6)
6.3 範囲指定したポート番号の追加、削除方法
TCPの11111番ポートから11112番ポートへのアクセスを許可するルールを追加します。
root@server:~# ufw allow 11111:11112/tcp Rule added Rule added (v6)
ルールを確認します。TCPの11111番ポートから11112番ポートへのアクセスを許可するルールが追加されたことがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 11111:11112/tcp ALLOW IN Anywhere [ 3] 22 (v6) ALLOW IN Anywhere (v6) [ 4] 11111:11112/tcp (v6) ALLOW IN Anywhere (v6)
番号[2]のルールを削除します。
root@server:~# ufw delete 2 Deleting: allow 11111:11112/tcp Proceed with operation (y|n)? y Rule deleted
ルールを確認します。番号[2]のルールが削除されたことがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 22 (v6) ALLOW IN Anywhere (v6) [ 3] 11111:11112/tcp (v6) ALLOW IN Anywhere (v6)
番号[3]のルールを削除します。
root@server:~# ufw delete 3 Deleting: allow 11111:11112/tcp Proceed with operation (y|n)? y Rule deleted (v6)
6.4 既存ルールの前にルールを挿入する方法(insert)
6.1の方法では、ルールは最終行の後に追加されます。insertオプションを指定すると、既存ルールの前にルールを挿入することができます。まず、現在のルールを確認します。sshにアクセスするルールだけが定義されていることがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 22 (v6) ALLOW IN Anywhere (v6)
番号[1]の前に、11111番ポートへのアクセス許可するルールを挿入します。
root@server:~# ufw insert 1 allow 11111 Rule inserted Rule inserted (v6)
ルールを確認します。元の番号[1]の前に、11111番ポートへのアクセス許可するルールが挿入されたことがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 11111 ALLOW IN Anywhere [ 2] 22 ALLOW IN Anywhere [ 3] 11111 (v6) ALLOW IN Anywhere (v6) [ 4] 22 (v6) ALLOW IN Anywhere (v6)
7 登録されているルールを全てリセットする方法
現在のルールを確認します。sshにアクセスするルールと11111番ポートにアクセスするルールだけが定義されていることがわかります。
root@server:~# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 11111 ALLOW IN Anywhere [ 2] 22 ALLOW IN Anywhere [ 3] 11111 (v6) ALLOW IN Anywhere (v6) [ 4] 22 (v6) ALLOW IN Anywhere (v6)
登録されているルールを全てリセットします。
root@server:~# ufw reset 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.20220131_122424' Backing up 'before.rules' to '/etc/ufw/before.rules.20220131_122424' Backing up 'after.rules' to '/etc/ufw/after.rules.20220131_122424' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220131_122424' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220131_122424' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20220131_122424'
現在のルールを確認します。登録していたルールが全てリセットされたことがわかります。
root@server:~# ufw status numbered Status: inactive
8 アプリケーション・インテグレーション(Application Integration)の使い方
アプリケーション・インテグレーションは、/etc/servicesに登録されていないアプリケーションのポート番号とサービス名を登録するときに使います。つまり、自身が作成したアプリケーションが使用するポート番号とサービス名を/etc/servicesに登録するのではなく、/etc/ufw/applications.d配下のファイルに登録することになります。/etc/ufw/applications.d配下に作成するファイルをプロファイルと呼びます。
8.1 プロファイルの作成方法
現在のルールを確認します。sshにアクセスするルールが定義されていることがわかります。
root@server:~# ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22 ALLOW IN Anywhere 22 (v6) ALLOW IN Anywhere (v6)
次に、testという名前のプロファイルを作成します。プロファイルの内容は、サービス名がapp1、ポート番号が11111(tcp)になります。
root@server:~# vi /etc/ufw/applications.d/test root@server:~# cat /etc/ufw/applications.d/test [app1] title=Application Server1 description=This is used by Application Server1 ports=11111/tcp
app1へのアクセスを許可します。
root@server:~# ufw allow app1 Rules updated Rules updated (v6)
ルールを確認します。app1へのアクセスを許可するルールが追加されたことがわかります。
root@server:~# ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22 ALLOW IN Anywhere 11111/tcp (app1) ALLOW IN Anywhere 22 (v6) ALLOW IN Anywhere (v6) 11111/tcp (app1 (v6)) ALLOW IN Anywhere (v6)
8.2 プロファイルの変更方法(update,reload)
プロファイルの内容を変更します。11111番ポートにアクセス許可するルールを22222番ポートにアクセス許可するルールに変更します。
root@server:~# vi /etc/ufw/applications.d/test root@server:~# cat /etc/ufw/applications.d/test [app1] title=Application Server1 description=This is used by Application Server1 ports=22222/tcp
app1のプロファイルを更新します。
root@server:~# ufw app update app1 Rules updated for profile 'app1' Skipped reloading firewall
iptablesのルールを確認します。まだ、TCPの11111番へのアクセスが許可されています。
root@server:~# iptables -nvL |grep -e 11111 -e 22222 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:11111 /* 'dapp_app1' */ root@server:~#
iptablesのルールをリロードします。
root@server:~# ufw reload Firewall reloaded
iptablesのルールを確認します。TCPの22222番へのアクセスが許可されていることがわかります。
root@server:~# iptables -nvL |grep -e 11111 -e 22222 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22222 /* 'dapp_app1' */ root@server:~#
8.3 プロファイルの表示方法(list,info)
プロファイルの一覧を確認します。OpenSSHとapp1のプロファイルが作成されていることがわかります。
root@server:~# ufw app list Available applications: OpenSSH app1
app1のプロファイルの内容を確認します。
root@server:~# ufw app info app1 Profile: app1 Title: Application Server1 Description: This is used by Application Server1 Port: 11111/tcp
OpenSSHのプロファイルの内容を確認する。
root@server:~# ufw app info OpenSSH Profile: OpenSSH Title: Secure shell server, an rshd replacement Description: OpenSSH is a free implementation of the Secure Shell protocol. Port: 22/tcp
9 iptablesの設定内容を表示する方法(show)
9.1 ビルトインチェインのルールを表示する方法(builtins)
ビルトインチェインはiptablesに組み込まれているデフォルトルールの集合です。以下の5つがあります。showオプションは、デフォルトルールの内容を確認するときに使います。
- INPUT
- OUTPUT
- FORWARD
- PREROUTING
- POSTROUTING
ビルトインチェインを確認してみます。INPUTチェインのルールが表示されていることがわかります。
root@server:~# ufw show builtins IPV4 (builtins): (filter) Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 1694 123030 ufw-before-logging-input all -- * * 0.0.0.0/0 0.0.0.0/0 1694 123030 ufw-before-input all -- * * 0.0.0.0/0 0.0.0.0/0 406 25300 ufw-after-input all -- * * 0.0.0.0/0 0.0.0.0/0 406 25300 ufw-after-logging-input all -- * * 0.0.0.0/0 0.0.0.0/0 406 25300 ufw-reject-input all -- * * 0.0.0.0/0 0.0.0.0/0 406 25300 ufw-track-input all -- * * 0.0.0.0/0 0.0.0.0/0 -snip-
9.2 ログターゲットが設定されているルールを表示する方法(logging-rules)
root@server:~# ufw show logging-rules IPV4 (logging): Chain ufw-before-logging-input (1 references) pkts bytes target prot opt in out source destination Chain ufw-user-logging-input (0 references) pkts bytes target prot opt in out source destination -snip-
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ