Help us understand the problem. What is going on with this article?

ufwコマンドの使い方

1 はじめに

ufw(Uncomplicated FireWall)は、ファイアウォールの設定を行うコマンドです。
ufwは、CentOS7のfirewall-cmd,openSUSEのSUSEfirewall2と同じ位置づけのコマンドです。
図に書くと、以下のようになります。

なお、各コマンドの使い方は、下記を参照してください。
・iptables:iptablesの使い方
・firewall-cmd:firewall-cmdコマンドの使い方
・SUSEfirewall2:SUSEfirewall2コマンドの使い方

       CentOS7         Ubuntu16.04        openSUSE(Leap 42.3)
  +--------------+    +------------+    +---------------------+   -*-
  | firewall-cmd |    |     ufw    |    |    SUSEfirewall2    |    |
  +--------------+    +------------+    +---------------------+    |
                                                                 ユーザ空間
  +-----------------------------------------------------------+    |
  |                     iptables  command                     |    |
  +-----------------------------------------------------------+   -*-

  +-----------------------------------------------------------+   -*-
  |                                                           |    |
  |                    OS(netfilter)                          |  カーネル空間
  |                                                           |    |
  +-----------------------------------------------------------+   -*-

2 環境

VMware Workstation 12 Player上の仮想マシンを使用しました。

root@server:~# cat /etc/issue
Ubuntu 16.04 LTS \n \l

root@server:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"

root@server:~# uname -a
Linux server 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

3 ufwの起動、停止の確認方法

ufwを起動する。
root@server:~# systemctl start ufw

ufwの状態を確認する。activeになったことがわかる。
root@server:~# systemctl is-active ufw
active

登録されているルール等が確認できる。
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)

ufwを停止する。
root@server:~# systemctl stop ufw

ufwの状態を確認する。inactiveになったことがわかる。
root@server:~# systemctl is-active ufw
inactive

4 ufwのログについて

4.1 ロギング機能の有効・無効化の方法

ufwのロギング機能を有効にする。
root@server:~# ufw logging on
Logging enabled

状態を確認する。ロギング機能が有効(★)になったことがわかる。
root@server:~# 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のロギング機能を無効にする。
root@server:~# ufw logging off
Logging disabled

状態を確認する。ロギング機能が無効(★)になったことがわかる。
root@server:~# ufw status verbose
Status: active
Logging: off ★
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)

root@server:~#

4.2 ログの場所

ufwのログは/var/log/ufw.logに格納されます。

root@server:~# cat /var/log/ufw.log
Nov  2 21:57:11 server kernel: [ 6975.349683] [UFW BLOCK] IN=eth0 OUT= MAC=00:0c:29:49:07:5d:00:0c:29:f4:7e:71:08:00 SRC=192.168.0.110 DST=192.168.0.220 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=19980 DF PROTO=TCP SPT=49966 DPT=80 WINDOW=29200 RES=0x00 SYN URGP=0

5 ルールの追加、削除方法

5.1 TCPポート番号の追加、削除方法

現在登録されているルールを確認する。numberedオプションを指定すると、左端に行番号が表示されます。
root@server:~# ufw status numbered
Status: active

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

11111番ポート(TCP)へのアクセス許可のルールを設定する。
root@server:~# ufw allow 11111
Rule added
Rule added (v6)

状態を確認する。11111番ポート(TCP)へのアクセス許可のルール(★)が登録されたことがわかる。
root@server:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 11111 ★                   ALLOW IN    Anywhere
[ 3] 22/tcp (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

状態を確認する。11111/tcpが削除されたことがわかる。
root@server:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 22/tcp (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)

状態を確認する。11111/tcp(v6)が削除されたことがわかる。
root@server:~# ufw status numbered
Status: active

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

5.2 UDPポート番号の追加、削除方法

11111番ポート(UDP)へのアクセス許可のルールを設定する。
root@server:~# ufw allow 11111/udp
Rule added
Rule added (v6)

状態を確認する。11111番ポート(UDP)へのアクセス許可のルール(★)が登録されたことがわかる。
root@server:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 11111/udp ★               ALLOW IN    Anywhere
[ 3] 22/tcp (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

状態を確認する。11111/udpが削除されたことがわかる。
root@server:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 22/tcp (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)

状態を確認する。22/tcp (v6)が削除されたことがわかる。
root@server:~# ufw status numbered
Status: active

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

5.3 範囲指定したポート番号の追加方法

TCPの11111番ポートから11122番ポートへのアクセスを許可する。
root@server:~# ufw allow 11111:11122/tcp
Rule added
Rule added (v6)

状態を確認する。11111-11122番ポートへのアクセスが許可されていることがわかる。
root@server:~# ufw status numbered
Status: active

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

2番のルールを削除する。
root@server:~# ufw delete 2
Deleting:
 allow 11111:11122/tcp
Proceed with operation (y|n)? y
Rule deleted

状態を確認する。11111-11122番ポートへのアクセス許可が削除されたことがわかる。
root@server:~# ufw status numbered
Status: active

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

3番のルールを削除する。
root@server:~# ufw delete 3
Deleting:
 allow 11111:11122/tcp
Proceed with operation (y|n)? y
Rule deleted (v6)

状態を確認する。11111-11122番ポート(v6)へのアクセス許可が削除されたことがわかる。
root@server:~# ufw status numbered
Status: active

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

5.4 任意の場所にルールを追加する方法(insert)

状態を確認する。現在は22番ポートへのアクセスだけが許可されていることがわかる。
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番の前にルール(★)が追加されたことがわかる。
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)

さらに、1番の前に(22222番ポートへのアクセス許可)を追加する。
root@server:~# ufw insert 1 allow 22222
Rule inserted
Rule inserted (v6)

状態を確認する。元の1番の前にルール(★)が追加されたことがわかる。
root@server:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22222 ★                   ALLOW IN    Anywhere
[ 2] 11111                      ALLOW IN    Anywhere
[ 3] 22                         ALLOW IN    Anywhere
[ 4] 22222 (v6)                 ALLOW IN    Anywhere (v6)
[ 5] 11111 (v6)                 ALLOW IN    Anywhere (v6)
[ 6] 22 (v6)                    ALLOW IN    Anywhere (v6)

6 ルールのリセット方法

resetコマンドを使うと、登録されているルールを全てリセット(消去)することができます。

状態を確認する。TCP/UDPの11111番ポートへのアクセスが許可されていることがわかる。
root@server:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 11111                      ALLOW IN    Anywhere
[ 3] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 4] 11111 (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 'after6.rules' to '/etc/ufw/after6.rules.20171102_224543'
Backing up 'before.rules' to '/etc/ufw/before.rules.20171102_224543'
Backing up 'after.rules' to '/etc/ufw/after.rules.20171102_224543'
Backing up 'user.rules' to '/etc/ufw/user.rules.20171102_224543'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20171102_224543'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20171102_224543'

root@server:~# ufw status numbered
Status: inactive

root@server:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

root@server:~# ufw status numbered
Status: active

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

7 アプリケーション・インテグレーション(Application Integration)の使い方

アプリケーション・インテグレーションは、/etc/servicesに登録されていないアプリケーションの
ポート番号とサービス名を登録するときに使います。
つまり、自身が作成したアプリケーションが使用するポート番号とサービス名を/etc/servicesに
登録するのではなく、/etc/ufw/applications.d配下のファイルに登録することになります。
/etc/ufw/applications.d配下に作成するファイルをプロファイルと呼びます。

7.1 プロファイルの作成方法

プロファイルを作成する。プロファイルの内容は、サービス名が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
Rule added
Rule added (v6)
root@server:~# ufw status numbered
Status: active

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

7.2 プロファイルの変更方法(update,reload)

作成したプロファイルの内容を変更する場合に実行します。
プロファイルのupdateを行うと、プロファイルの設定内容がuser.rulesに保存されます。
そして、プロファイルのreloadを行うと、user.rulesの内容がiptablesに反映されます。
以下では、プロファイルに設定したポート番号の変更(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=11111/tcp

app1へのアクセスを許可する。
root@server:~# ufw allow app1
Rule added
Rule added (v6)

状態を確認する。app1へのアクセスが許可(★)されたことがわかる。
root@server:~# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] app1 ★                    ALLOW IN    Anywhere
[ 3] 22 (v6)                    ALLOW IN    Anywhere (v6)
[ 4] app1 (v6) ★               ALLOW IN    Anywhere (v6)

user.rulesファイルを確認する。user.rulesの定義に11111番ポートへのアクセス許可が設定されたことがわかる。
root@server:~# cat /etc/ufw/user.rules|grep -e 11111 -e 22222
### tuple ### allow tcp 11111 0.0.0.0/0 any 0.0.0.0/0 app1 - in
-A ufw-user-input -p tcp --dport ★11111 -j ACCEPT -m comment --comment 'dapp_app1'

iptablesの設定内容を確認する。iptablesにも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' */

プロファイルの内容を変更する。ポート番号を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 ★

プロファイルのアップデートを行う。
root@server:~# ufw app update app1
Rules updated for profile 'app1'
Skipped reloading firewall

user.rulesファイルを確認する。user.rulesの定義が22222に変更されたことがわかる。
root@server:~# cat /etc/ufw/user.rules|grep -e 11111 -e 22222
### tuple ### allow tcp 22222 0.0.0.0/0 any 0.0.0.0/0 app1 - in
-A ufw-user-input -p tcp --dport ★22222 -j ACCEPT -m comment --comment 'dapp_app1'

iptablesの設定内容を確認する。ポート番号はまだ変更されていないことがわかる。
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:~# ufw reload
Firewall reloaded

iptablesの設定内容を確認する。reloadすることで、ポート番号が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' */

7.3 プロファイルの表示方法(list,info)

プロファイルの一覧を表示する。作成したapp1のプロファイル(★)が表示されていることがわかる。
root@server:~# ufw app list
Available applications:
  Apache
  Apache Full
  Apache Secure
  CUPS
  OpenSSH
  app1 ★

app1のプロファイルを確認する。
root@server:~# ufw app info app1
Profile: app1
Title: Application Server1
Description: This is used by Application Server1

Port:
  11111/tcp

8 iptablesの設定内容を表示する方法(show)

8.1 ビルトインチェインのルールを表示する方法(builtins)

ビルトインチェインは以下の5つです。これらの設定内容を確認するときに使います。
- INPUT
- OUTPUT
- FORWARD
- PREROUTING
- POSTROUTING

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
    6349   652157 ufw-before-logging-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0
    6349   652157 ufw-before-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0
     296    32446 ufw-after-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0
     232    21954 ufw-after-logging-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0
     232    21954 ufw-reject-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0
     232    21954 ufw-track-input  all  --  *      *       0.0.0.0/0            0.0.0.0/0

(filter) Chain ★FORWARD (policy DROP 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 ufw-before-logging-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0
       0        0 ufw-before-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0
       0        0 ufw-after-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0
       0        0 ufw-after-logging-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0
       0        0 ufw-reject-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0
       0        0 ufw-track-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0
-以下、略-

8.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

Chain ufw-after-logging-input (1 references)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 10 LOG flags 0 level 4 prefix "[UFW BLOCK] "

Chain ufw-before-logging-forward (1 references)
    pkts      bytes target     prot opt in     out     source               destination

Chain ufw-user-logging-forward (0 references)
    pkts      bytes target     prot opt in     out     source               destination

Chain ufw-after-logging-forward (1 references)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 10 LOG flags 0 level 4 prefix "[UFW BLOCK] "

Chain ufw-before-logging-output (1 references)
    pkts      bytes target     prot opt in     out     source               destination

Chain ufw-user-logging-output (0 references)
    pkts      bytes target     prot opt in     out     source               destination

Chain ufw-after-logging-output (1 references)
    pkts      bytes target     prot opt in     out     source               destination

Chain ufw-logging-allow (0 references)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 10 LOG flags 0 level 4 prefix "[UFW ALLOW] "

Chain ufw-logging-deny (2 references)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID limit: avg 3/min burst 10
       0        0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: avg 3/min burst 10 LOG flags 0 level 4 prefix "[UFW BLOCK] "
-以下、略-

X 参考情報

UFW
Ubuntu で ufw を利用して ping を拒否する設定
how do you create an app profile for ufw?
Ubuntu 11.04 Server Guide

hana_shin
写真は淡路島SAから明石海峡大橋を撮影したものです('19夏撮影)。'20年夏も3年連続で四国、大阪に行く予定でしたが、コロナ終息しないので断念。甲子園で高校野球もみれない。ほんと悲しい!コロナなんとかならないか!治療薬の研究開発している人がんばってほしいな。ソフトが少しでも役に立てればと思う今日この頃。取得済資格:ネットワークスペシャリスト、オンライン情報処理技術者。
https://hana-shin.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away