今回の記事では、Ubuntu Server 20.04LTSでファイアーウォールを設定する方法について説明したいと思います。インターネットと繋がっているVPSの管理者として、自分のサーバーを悪意のある外部者から守るためにはセキュリティもしっかりと設定しておく必要があります。
ファイアーウォールのステータスを確認しましょう
RLoginなどのターミナルソフトからVPSにログインして以下のコマンドを入力してみましょう。ufwはUbuntu Serverにおいてファイアーウォールを操作するコマンドになります。
$ sudo ufw status
Ubuntu Serverのデフォルトではファイアーウォールは無効になっていますので、Ubuntu Serverのインストール後に何も設定しなければ、ターミナル画面上に「Status: inactive」と表示されたかと思います。ファイアーウォールが有効ならターミナル画面上には「Status: active」と表示されます。
ファイアーウォールは、自分のサーバーと外部のインターネットの間で、通信を許可・拒否する文字通り「壁」となるものです。これが無効の状態では自分のサーバーと外部のインターネットとの間に壁が無いのと同じ状態であり、サーバーが悪意をもった外部からの様々な攻撃に対して無防備な状態となります。「Status: inactive」となっている場合は以下でファイアーウォールを設定していきましょう。
デフォルトは「拒否」にしましょう
ファイアーウォールは、ポート番号と呼ばれる0~65535の番号があり、各番号に対して外部との通信の「許可」「拒否」を設定します。サーバー上で利用するソフトウェアやサービスによって外部との通信に使用するポート番号が予め決められているものや、自分で設定するものなどもありますが、外部との通信が必要なポート番号には通信の許可を与えないとソフトウェアやサービスが使用できなくなります。一方で不必要な許可を与えていると、許可を与えたポートを通じて外部からの悪意のある攻撃にさらされる可能性もあります。
基本的にはファイアーウォールは全ての番号をいったん「拒否」にしておき、自分がサーバーを使用する上で必要な番号にのみ外部との通信を「許可」するようにした方が良いので、先ずはファイアーウォールのデフォルトの設定を「拒否」にします。
$ sudo ufw default deny
この時点では、まだファイアーウォールを有効にしていないので、通信が遮断されることはありませんが、デフォルトでは「拒否」にする設定をしたことになります。
サーバーの使用方法に合わせて必要なポートのみ「許可」しましょう
次に外部との通信が必要になるポート番号に対して、個別に外部との通信を「許可」していきます。ポート番号には0~65535までの番号がありますが、それらは以下の3つに分類されています。
ポート番号 | カテゴリ名称 | 内容 |
0~1023番 | ウェルノウンポート (Well-Known) | IAEA(Internet Assigned Numbers Authority) が管理している番号 |
1024~49151番 | レジスタードポート (Resistered) | 特定のソフトウェアが使用する番号 IAEAに申請して割り当てられる |
49152~65535番 | ダイナミックポート (Dynamic) | ユーザーが自由に使える番号 IAEAへの申請は不要 |
ウェルノウンポート(Well-Known)の中でも代表的なポート番号には以下の番号などがあります。これらの代表的なポート番号の中にはソフトウェアやサービスの設定によって使用するポート番号を変更できるものもありますが、自分のサーバーの使用に合わせて外部との通信が必要なポート番号には通信の「許可」を与える必要があります。
ポート番号 | TCP/UDP | サービス名 | 内容 |
22 | TCP | ssh | リモートログイン(セキュア) |
25 | TCP | smtp | メール送信 |
80 | TCP | http | Web(www) |
110 | TCP | pop3 | メール受信 |
220 | TCP | imap3 | メール受信 |
443 | TCP | https | Web(www)(セキュア) |
465 | TCP | smtps | メール送信(セキュア) |
990 | TCP | ftps | ファイル転送(セキュア) |
993 | TCP | imaps | メール受信 |
RLoginなどのターミナルソフトでVPSにリモート接続している場合は、少なくとも22番ポートを開けないとターミナルソフトでVPSを操作することができなくなります。SSHで使用するポート番号はサーバーの設定で変更することも可能ですが、ここでは以下のように入力して22番ポートに通信許可を与えましょう。
$ sudo ufw allow 22/tcp
その他のポートの通信許可は、自分がサーバー上で使用するソフトウェアやサービスに必要なものを個別に許可していきましょう。例えば、Wordpressでブログを開設するのであれば80番(http)を許可する必要がありますし、証明書を取得して自身のブログをセキュアな通信で公開するのであれば、443番(https)を許可する必要があります。
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
ファイアーウォールを有効にしましょう
必要なポートの通信許可が設定できたら、ファイアーウォールを有効化しましょう。ターミナルソフトからSSH接続をしている場合、「Command may disrupt existing ssh connections. Proceed with operation (y|n)?」というメッセージが表示されるかと思います。ファイアーウォールを有効にすることで現在のSSH接続が切断されるかもしれないという確認なのですが、SSH接続のために22番ポートに通信許可を出していれば問題は発生しませんので、y(Yes)を入力してファイアーウォールを有効にして下さい。
$ sudo ufw enable
ファイアーウォールを有効にしたあと、再び以下のコマンドを入力すると、「Status: active」とともに通信を許可したポート番号の一覧が表示されますので、自分が使用したいポート番号に正しく通信許可が設定されているかを確認しましょう。
$ sudo ufw status
自分のVPSを管理していく上では、セキュリティもしっかりと設定していく必要があります。私自身も学びながらではありますが、学んだことはこのLIFEWORK Blogで今後も紹介していきたいと思います。最後までお読みいただきありがとうございました。