お金をかけずにサーバーの勉強をしよう

Ubuntuでもファイアウォール

2022年12月5日

メニューへ戻る

Windowsの Defender Firewall、RockyLinuxの firewalld のように、Ubuntuにもファイアウォールを設定しましょう。

こんにちは。

Ubuntuのデフォルトインストールでファイアウォールのソフトが入っているんですが、無効状態になっています。

でもサーバーでは有効にしておきたいですね。
これまでサーバーを作る時に設定が面倒臭くてやってなかったのですが、そろそろマズいかなと重い腰を上げることにしました。

対象の環境は Ubuntu Server 22.04.1 になりますが、他のバージョンや Desktopでも同じでしょう(多分)。

ufwコマンド(program for managing a netfilter firewall)がそれですよ、と言ってしまうと語弊がありますね。
実体は netfilter で、ufwコマンドでそれを操作するってことです。

作業前には通信ができていることを証明するため、何かサーバープロセスがないか見てみたら、先日インストールした code-server がありましたので、それにアクセスしてみます。
code-serverにアクセスできている絵
アクセスできていますね。


では、まず有効化から。

しかし早合点してやってしまってはいけません。
有効になった途端に sshのセッションが切れてしまいます。
遠隔地のサーバーにやらかした日には目もあてられません。

ファイアウォールが有効になるのは有効化した後にリブートしたときからですが、保険として先に sshだけは開けておきましょう。

subro@UbuntuServer2204:~$ sudo ufw allow 22/tcp
ルールをアップデートしました

これで大丈夫なはずですが、意識高い系のあわてんぼうさんはセキュリティのために sshのポートを変えていたりしますので、十分にご注意下さい。

では有効化。

subro@UbuntuServer2204:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ファイアウォールはアクティブかつシステムの起動時に有効化されます。

ステータスを取ってみます。

subro@UbuntuServer2204:~$ sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere

良さげですね。

自腹でのサーバールーム出張の準備はお済みでしょうか。
久し振りにコンソール作業を楽しめるかも知れません。

リブートします。

subro@UbuntuServer2204:~$ sudo reboot

リブートが済んで、改めて sshでログインすることができました。

他のポートはどうでしょうか。

code-serverにアクセスしてみます。
code-serverにアクセスできなくなった絵
予想通りタイムアウトしました。

この際ログファイル /var/log/ufw.log には以下のようなメッセージが出力されていました。

Dec  5 20:41:20 ubuntuserver2204 kernel: [  180.383885] [UFW BLOCK] IN=ens32 OUT= MAC=00:0c:29:16:22:22:00:0c:29:6c:ea:c0:08:00 SRC=192.168.1.45 DST=192.168.1.102 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48994 DF PROTO=TCP SPT=48384 DPT=8080 WINDOW=64240 RES=0x00 SYN URGP=0

では、code-serverのために、8080/tcp を開けましょう。

subro@UbuntuServer2204:~$ sudo ufw allow 8080/tcp
ルールを追加しました

subro@UbuntuServer2204:~$ sudo ufw status
状態: アクティブ

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
8080/tcp                   ALLOW       Anywhere

設定は良さげです。


code-serverに再びアクセスしてみます。
code-serverにアクセスできている絵
※画像は使いまわしですが、ちゃんとアクセスできたことを確認しています。

入れるようになりました。

他のサーバープロセスにも同様の手法で穴を開けていけば良いでしょう。


以上、大したネタではないのですが、記しておきました。