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

【Raspberry Pi】ufwでファイアウォールの設定
【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をインストールします。

sh
$ sudo apt install ufw

最初にすべてのポートを拒否しておく

次のようにして、すべてのポートをあらかじめ拒否します。

sh
$ sudo ufw default deny

このとき、絶対にufwを起動させないでください。SSHでアクセスできなくなってしまいます。 ローカルエリア内にいようがいまいが、こうなってしまったらRaspberry Piを再インストールするか、モニタとキーボードを直接つないでファイアウォールの設定をいじるしかありません。くれぐれもご注意ください。

SSHを許可する

sh
$ sudo ufw allow 22

これでufwを起動してもSSHだけは繋がるようになりました。

IPv6を除外する

IPv6は使用しないので、設定ファイルの内容を変更します。

sh
$ sudo vi /etc/default/ufw
...
IPV6=no
...

ファイアウォールを起動させる

ufwのサービスを起動させてファイアウォールを有効にしましょう。

sh
$ 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

ファイアウォールの状態を確認する

次のようにしてファイアウォールの状態を確認できます。

sh
$ sudo ufw status
To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere                  

Raspberry Piでポートを使用しているプロセスを調べる(nmap)

ポートが開いていてもサーバープロセスが起動していなければアクセスできません。ネットワークトラブルのときに役立つ、nmapをインストールしておきましょう。

sh
$ sudo apt install nmap

次のようにして、nmapでポートを使用しているプロセスを調べられます。

sh
$ 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をインストールしましょう。

sh
$ brew install nmap

次のようにして、nmapでTCPポートの開放の確認ができます。コマンドの実行は必ずスーパーユーザーで行ってください。

sh
$ sudo nmap -sT -p ポート IPアドレス(またはホスト名)

オプションを-sUにすればUDPの確認ができます。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

ESP32搭載ボード
ESP32の書籍
Arduinoで人気の周辺パーツ
M5Stackのオススメ参考書
M5Stack製品
M5StickCで使えるHat
ESP32ボード