【Raspberry Pi】ufwでファイアウォールの設定
Raspberry Piにufwというファイアウォールを入れてみました。この記事は、そのときに行ったufwの基本的な設定方法を解説いたします。
つかうもの
Raspberry Pi
今回は自宅で持て余していたRaspberry Pi 3 Model Bを使用しました。アクセスの少ないWebサーバーなどでの用途でしたら、Raspberry Pi 3でもスペック的には充分です。
ただし、ffmpegなどの動画エンコーダーを動かす場合は、Raspberry Pi 3はおすすめできません。ハードウェアエンコーダーを使ってもCPU100%超えとなってしまいました。Raspberry Pi 4などのスペックの高いボードを使いましょう。
ルーターのポート開放
自宅以外の外部ネットワークからRaspberry Piにアクセスするためにはファイアウォール以前に、ルーターのポート開放が必要になります。ただし、ルーターによってポートの開放のやり方は異なりますので、設定のやり方はこの記事では割愛します。 ルーターのポート開放の詳しくは「ポートフォワーディング」や「ポートマッピング」で調べてみてください。
ちなみに私はNECのAtermルーターを10年以上愛用してます。ポート開放も行うことができ、自鯖の設置にはおすすめなルーターです。 ▼ こちらのルーターは実際に実家で使用しているものです。2階でもWiFi受信できるようになりました。
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の確認ができます。