【Raspberry Pi】ufwでファイアウォールの設定

はじめに
Raspberry Piにufwというファイアウォールを入れてみました。この記事は、そのときに行ったufwの基本的な設定方法を解説いたします。
Raspberry Piにファイアーウォールを設定する(ufw)
今回Raspberry Piに使用するファイアウォールは、ufw(Uncomplicated Firewall)というものです。ufwでは、簡単なコマンドでファイアーウォールの管理を行うことができます。内部にはiptablesを使用しているようです。 ufwの設定方法は こちらの記事 を参考にさせていただきました。
それではufwを設定していきましょう。
ufwのインストール
まずは、Raspberry Piにufwをインストールします。
$ sudo apt install ufw
最初にすべてのポートを拒否しておく
次のようにして、すべてのポートをあらかじめ拒否します。
$ sudo ufw default deny
このとき、絶対にufwを起動させないでください。SSHでアクセスできなくなってしまいます。 ローカルエリア内にいようがいまいが、こうなってしまったらRaspberry Piを再インストールするか、モニタとキーボードを直接つないでファイアウォールの設定をいじるしかありません。くれぐれもご注意ください。
SSHを許可する
$ sudo ufw allow 22
これでufwを起動してもSSHだけは繋がるようになりました。
IPv6を除外する
IPv6は使用しないので、設定ファイルの内容を変更します。
$ sudo vi /etc/default/ufw
...
IPV6=no
...
ファイアウォールを起動させる
ufwのサービスを起動させてファイアウォールを有効にしましょう。
$ sudo ufw enable
実行すると次のように聞かれますが、SSHで使用するポートは開放しましたので「y」を入力してリターンします。
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
これでファイアウォールが有効になりました。
Firewall is active and enabled on system startup
ファイアウォールの状態を確認する
次のようにしてファイアウォールの状態を確認できます。
$ sudo ufw status
To Action From
-- ------ ----
22 ALLOW Anywhere
Raspberry Piでポートを使用しているプロセスを調べる(nmap)
ポートが開いていてもサーバープロセスが起動していなければアクセスできません。ネットワークトラブルのときに役立つ、nmapをインストールしておきましょう。
$ sudo apt install nmap
次のようにして、nmapでポートを使用しているプロセスを調べられます。
$ sudo nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2022-01-05 21:19 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000058s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 999 closed ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 0.44 seconds
外部ネットワークからポートの開放を確認する(macOS/nmap)
それでは、外部ネットワークから自鯖のポートが開放されているかチェックしてみましょう。macOSを使用しました。こちらもnmapを使います。
brewでnmapをインストールしましょう。
$ brew install nmap
次のようにして、nmapでTCPポートの開放の確認ができます。コマンドの実行は必ずスーパーユーザーで行ってください。
$ sudo nmap -sT -p ポート IPアドレス(またはホスト名)
オプションを-sU
にすればUDPの確認ができます。