今回はUFWの設定により、特定の通信のみ許可する方法について書いていきます。
実際に設定したサーバはUbuntu22.04
です。
UFWとは
Ubuntuで使用されるファイアウォールの設定ツールです。
ちなみにUncomplicated Firewall
(複雑でないファイアウォール)の略です。
私はUbuntu FireWall
の頭文字を取ったものだと勘違いしていました;
その名の通り、iptables
ファイアウォールの設定を楽に行えるようです。
UFWの初期値は「すべての通信を遮断する」
UFWはデフォルトではオフになっていますが、これをオンにするとどう働くのでしょうか。
正解は「すべての通信が遮断される」ようになります。
UFWは、すべての通信を遮断しておいて、許可する通信のみ設定していく方式なのです。
ですので、サーバにSSH接続して作業する場合は、ターミナルを閉じてしまうと接続できなくなりますので注意が必要です。
UFWを使ってみる
では、実際にUFWを有効化してみましょう。
sudo ufw enable
次にデフォルトの設定を確認してみます。
sudo ufw status verbose
Default: deny (incoming), allow (outgoing)
と表示されるはずです。
これは「サーバへの入力はすべてdeny
(遮断)」、「サーバからの出力はすべてallow
(許可)」を示しています。
UFWは外から内に入ってくる通信にのみ制御が可能です。
この状態で、別のターミナルからSSHログインを試してみると繋がらないはずです。
UFWでSSH接続を許可してみる
初期状態ではサーバアクセスができないため、SSH接続を許可してみます。
sudo ufw allow 22/tcp
ちなみに遮断するにはsudo ufw deny 22/tcp
定義自体を削除するにはsudo ufw delete deny 22/tcp
とする。
また、ポート番号の他にも「サービス名」で許可/遮断を定義することもできる。
sudo ufw allow ssh
ちなみに、サービス名とポート番号の組合せは以下から確認することができる。
less /etc/services
もっと詳細に定義したい場合
UFWを使うと、もっと複雑な条件でも簡単に設定することができます。
正に痒い所に手が届くツールです。
特定のIPアドレスから、特定のポート番号に対してTCPプロトコルでの接続を許可
sudo ufw allow from 192.168.0.3 to any port 22 proto tcp
遮断するときはsudo ufw deny from 192.168.0.3 to any port 22 proto tcp
特定のサブネットから、特定のポート番号に対してTCPプロトコルでの接続を許可
sudo ufw allow from 192.168.0.0/24 to any port 22 proto tcp
遮断するときはsudo ufw deny from 192.168.0.0/24 to any port 22 proto tcp
特定のインタフェースから、特定のポート番号に対してTCPプロトコルでの接続を許可
sudo ufw allow in on eth0 to any port 22 proto tcp
遮断するときはsudo ufw deny in on eth0 to any port 22 proto tcp
まとめ
このようにして、UFWを上手く使いこなし、ファイアウォールによるセキュアなサーバを作っていきたいと思います。
今回は以上です。