alfort's Blog

Linuxエンジニアのメモ

UbuntuのファイアーウォールUFWの簡単な使い方メモ

Ubuntuのパッケージマネージャーから入れられるファイアーウォールはfirewalldの他にも、ufw(Uncomplicated FireWall)というソフトウェアがあるらしい。

名前からして単純らしいのでその使い方を調べた時のメモ。

ufwのインストール

$ sudo apt install ufw

状態の確認 (ufw status)

ufwが有効になっているのかどうか、また空けているポートの確認が可能。

$ sudo ufw status
Status: active

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

無効な場合には、以下のようにinactiveと表示される。 また、設定によって開けているポートも表示されることはない。

$ sudo ufw status
Status: inactive

ファイアーウォールの無効化 (ufw disable)

$ sudo ufw disable
Firewall stopped and disabled on system startup

ファイアーウォールの有効化 (ufw enable)

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

ポートの追加

通信を許可するポートを追加 (ufw allow)

3001/tcpを許可するように設定する。

nariba@ubuntu2204lts:~$ sudo ufw allow 3001/tcp
Rule added
Rule added (v6)

通信を拒否するポートの追加 (ufw deny)

3001/tcpを拒否するように設定する。

なお、似たようなオプションとしてrejectもあるが、セキュリティ的にはdenyのほうが好ましい。

$ sudo ufw deny 3001/tcp
Rule updated
Rule updated (v6)

設定の削除 (ufw delete)

ufw status numberedで設定の番号を確認し、その番号をufw delete NUMで削除する。

$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 3000                       ALLOW IN    Anywhere
[ 2] 22/tcp                     ALLOW IN    Anywhere
[ 3] 3001/tcp                   DENY IN     Anywhere  <--- これを削除したい
[ 4] 3000 (v6)                  ALLOW IN    Anywhere (v6)
[ 5] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 6] 3001/tcp (v6)              DENY IN     Anywhere (v6) <--- これを削除したい

$ sudo ufw delete 3
Deleting:
 deny 3001/tcp
Proceed with operation (y|n)? y
Rule deleted

$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 3000                       ALLOW IN    Anywhere
[ 2] 22/tcp                     ALLOW IN    Anywhere
[ 3] 3000 (v6)                  ALLOW IN    Anywhere (v6)
[ 4] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 5] 3001/tcp (v6)              DENY IN     Anywhere (v6)

$ sudo ufw delete 5
Deleting:
 deny 3001/tcp
Proceed with operation (y|n)? y
Rule deleted (v6)

通信を拒否する場合には、denyrejectどちらが好ましいのか?

ufwを使ってあるポートにdeny, rejectそれぞれの設定をかけた場合、ポートスキャナであるnmapコマンドを使うとどう見えるのかを調べる。

以下のようにrejectを設定した場合ほかのユーザーから設定が見えてしまうので、rejectよりもdenyを設定したほうがよさそう。

rejectを設定した場合

ufwの設定とその確認

$ sudo ufw reject 3001/tcp
Rule added
Rule added (v6)

$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 3000                       ALLOW IN    Anywhere
[ 2] 22/tcp                     ALLOW IN    Anywhere
[ 3] 3001/tcp                   REJECT IN   Anywhere
[ 4] 3000 (v6)                  ALLOW IN    Anywhere (v6)
[ 5] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 6] 3001/tcp (v6)              REJECT IN   Anywhere (v6)

ポートスキャンの結果

$ sudo nmap -Pn 192.168.XXX.XXX
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-08 15:10 JST
Nmap scan report for XXXXXXX (192.168.XXX.XXX)
Host is up (0.00018s latency).
Not shown: 997 filtered tcp ports (no-response)
PORT     STATE  SERVICE
22/tcp   open   ssh
3000/tcp open   ppp
3001/tcp closed nessus        <----- ポートが見えている
MAC Address: XX:XX:XX:XX:XX:XX (QEMU virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 4.23 seconds

denyを設定した場合

ufwの設定とその確認

$ sudo ufw deny 3001/tcp
Rule updated
Rule updated (v6)

$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 3000                       ALLOW IN    Anywhere
[ 2] 22/tcp                     ALLOW IN    Anywhere
[ 3] 3001/tcp                   DENY IN     Anywhere
[ 4] 3000 (v6)                  ALLOW IN    Anywhere (v6)
[ 5] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 6] 3001/tcp (v6)              DENY IN     Anywhere (v6)

ポートスキャンの結果

$ sudo nmap -Pn 192.168.XXX.XXX
Starting Nmap 7.92 ( https://nmap.org ) at 2022-08-08 15:10 JST
Nmap scan report for XXXXXXX (192.168.XXX.XXX)
Host is up (0.00019s latency).
Not shown: 998 filtered tcp ports (no-response)
PORT     STATE SERVICE
22/tcp   open  ssh
3000/tcp open  ppp
MAC Address: XX:XX:XX:XX:XX:XX (QEMU virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 4.54 seconds