A ファイアウォールは、システムを保護するためのコアコンポーネントの1つです。ネットワーク上の送受信接続を管理する役割を担っています。これは、サーバーとデータの主要な防御線です。そのため、適切に設定されたファイアウォールを導入することが極めて重要です。このガイドでは、Ubuntu 18.04でUFWを使用してファイアウォールをセットアップする手順を説明します。
Ubuntu上のUFW
「UFW」という用語は「Uncomplicated Firewall」の略です。これはUbuntuにプリインストールされているデフォルトのファイアウォールプログラムです。UFWは実際にはiptablesへのインターフェースです。UFWの目的は、ファイアウォールの設定と管理を容易にすることです。iptables自体は堅牢で柔軟なオプションですが、初心者には親しみにくいものです。UFWは、初心者と経験豊富なユーザーの両方にとって使いやすくなっています。
まず、UFWの基本機能を理解するのに役立つ包括的なガイドをご覧ください。また、このガイドに従ってUbuntuサーバーをインストールすることもできます。それでは、始めましょう!
まず、何らかの理由でUFWがインストールされていない場合は、すぐにインストールしてください。
|
1 |
$ sudo apt install ufw |
UFWの設定
-
IPv6の使用
現在のところ、依然としてIPv4が主流です。それを念頭に置いて、このガイドの大部分でもIPv4を取り上げています。ありがたいことに、UFWはIPv6もサポートしています。必要なのは、UFW設定ファイルからこの機能を有効にすることだけです。
まず、テキストエディタでUFW設定ファイルを開きます。変更を保存するには、テキストエディタをsudo権限で実行する必要があります。
|
1 |
$ sudo vim /etc/default/ufw |
「IPV6」を探し、それが「yes」に設定されていることを確認します。
-
デフォルトポリシー
ファイアウォールを初めていじる場合は、まずデフォルトポリシーを定義することをお勧めします。これらのルールは、明示的なルールに一致しないトラフィックをどのように制御するかを決定します。デフォルトでは、UFWはすべての受信接続を拒否し、すべての送信接続を許可するように設定されています。これにより、サーバー上で実行されているアプリケーションは外部にアクセスできますが、外部からは誰もサーバーにアクセスできないようになります。
次のコマンドは、UFWのデフォルトの動作を再定義するだけです。以前に変更されていた場合、UFWの動作が変更されることに注意してください。
|
1 2 |
$ sudo ufw default deny incoming $ sudo ufw default allow outgoing |
個人用コンピュータの場合、これらのファイアウォールルールだけで十分です。ただし、サーバーのセキュリティを適切に強化するには、さらに多くの設定が必要です。
SSH接続の許可
現在のUFWの設定では、すべての受信接続が拒否されます。リモートサーバーの場合、これでは困ります。サーバーにアクセスできなければ、何もできません。この問題を回避するために、UFWを設定して受信SSH または HTTP 接続を許可することができます。
サーバーへのSSH接続を許可するには、次のコマンドを実行します。これにより、基本的にポート22でのすべての接続を許可するようUFWに指示します。これは、SSHデーモンがデフォルトでリッスンするポートです。
|
1 |
$ sudo ufw allow ssh |
このコマンドの代わりに、ポート22への接続許可を直接設定することも可能です。このポートは/etc/servicesファイルで定義されています。
|
1 |
$ sudo ufw allow 22 |
ポート22はSSHデーモンのデフォルトであるため、攻撃を受けやすくなる可能性もあります。SSHサーバーが別のポートをリッスンするように設定されている場合はどうでしょうか?そのような状況では、UFWはそのポートへの接続を許可する必要があります。SSHサーバーがポート1234をリッスンしていると仮定すると、次のコマンドを使用します。
|
1 |
$ sudo ufw allow 1234 |
UFWの有効化
UFWルールが設定されていても、UFWが有効化されない限り何も行われません。デフォルトではUFWは無効になっており、ルールを宣言しても適用されません。UFWを有効にするには、次のコマンドを実行します。
|
1 |
$ sudo ufw enable |
UFWは、既存のSSH接続が切断される可能性があるという警告メッセージを表示する場合があります。SSH接続は許可するように設定されているため、UFWを有効にしても切断されることはありません。設定されているルールを確認するには、次のコマンドを実行します。
|
1 |
$ sudo ufw status verbose |
さまざまな接続の許可
この時点で、安定した動作環境を得るために、UFWに他のルールを設定しておく必要があります。許可する接続は、特定のニーズによって異なります。サービス名やポート番号に基づいて接続を許可するようにUFWに指示する方法は、すでに説明しました。
以下は、一般的に開放されているその他のポートです。
- SSH (
ポート 22): これは、SSH接続用に設定されているデフォルトのポートです。 - HTTP (
ポート 80): これは、暗号化されていないWebサーバーが使用するデフォルトのポートです。 - HTTPS (
ポート 443): これは、暗号化されたWebサーバーが使用するデフォルトのポートです。
To enable SSH connections, run either of the following commands:
|
1 2 |
$ sudo ufw allow ssh $ sudo ufw allow 22 |
次に、HTTP接続を有効にするには、次のいずれかのコマンドを実行します。
|
1 2 |
$ sudo ufw allow http $ sudo ufw allow 80 |
HTTPS接続を有効にするには、次のいずれかのコマンドを実行します。
|
1 2 |
$ sudo ufw allow https $ sudo ufw allow 443 |
ポート範囲
これまでは、特定のポートを許可する方法を説明しました。ポートの範囲を指定する必要がある場合はどうすればよいでしょうか?UFWに対して各ポートを個別に宣言するのは非常に非効率的です。一部のアプリケーションは複数のポートを使用します。幸いなことに、UFWではポートの範囲を宣言できます。そのためには、次のコマンド構造を使用します。
|
1 |
$ sudo ufw allow <start>:<end>/<protocol> |
次の例では、ポート 6000 から 6007:
|
1 2 |
$ sudo ufw allow 6000:6007/tcp $ sudo ufw allow 6000:6007/udp |
可能な限りプロトコルを宣言することをお勧めします。ただし、ほとんどの場合、これは必須ではなく、宣言しなくても問題なく動作します。
特定のIPアドレス
UFWを使用する場合、特定のIPアドレスによって接続をフィルタリングすることも可能です。デフォルトでは、UFWはすべてのIPアドレスからの接続をブロックします。特定のIPアドレスからの接続を許可するように宣言することができます。IPアドレスからの接続を許可するには、次のコマンド構造を使用します。
|
1 |
$ sudo ufw allow from <ip_address> |
また、そのIPアドレスが接続を許可される特定のポートを宣言することもできます。そのためには、コマンドに to any port に続けてポート番号を追加します。
|
1 |
$ sudo ufw allow from <ip_address> to any port <port> |
サブネット
IPアドレスのサブネットを許可する必要がある場合は、CIDR表記を使用して行うことができます。この例では、UFWは次の範囲のIPアドレスからの接続を許可します:203.0.113.1 から 203.0.113.254:
|
1 |
$ sudo ufw allow from 203.0.113.0/24 |
前のステップと同様に、これらのIPアドレスが接続できるポートを指定することも可能です。
|
1 |
$ sudo ufw allow from 203.0.113.0/24 to any port <port> |
特定のネットワークインターフェースへの接続
サーバー環境では、システムに複数のネットワークインターフェースが接続されている場合があります。UFWを使用すると、特定のルールが特定のネットワークインターフェースにのみ適用されるように記述できます。まず、サーバーに接続されているすべてのネットワークインターフェースを確認します。対象となるネットワークインターフェースの名前が主な注目点です。
|
1 |
$ ip addr |
今回のケースでは、ネットワークインターフェースは ens3 の1つだけで、これがパブリックインターネットに接続されています。このネットワークインターフェースからの受信接続を許可するには、次のコマンド構造を使用します。
|
1 |
$ sudo ufw allow in on <network_interface> |
また、ネットワークインターフェースから入ってくるトラフィックが到達できるポートを定義することも可能です。
|
1 |
$ sudo ufw allow in on <network_interface> to any port <port> |
接続の拒否
デフォルトの設定では、UFWは(宣言された例外を除き)任意のソースからの接続を拒否します。これがUFWの推奨される使用方法です。ただし、特定の送信元IPアドレスまたはサブネットからの特定の接続をブロックする必要がある場合があります。あるいは、UFWのデフォルトの動作がすべての接続を許可するように設定されている可能性もあります(非推奨)。
特定のIPアドレスからの接続を拒否するには、UFWで拒否(deny)ルールが必要です。拒否ルールの作成は非常に簡単です。任意の許可(allow)ルールを用意し、「allow」という言葉を「deny」に置き換えるだけです。これで拒否ルールになります。
次の例を見てみましょう。すべてのHTTP接続を拒否するには、次の拒否ルールを使用します:
|
1 2 |
$ sudo ufw deny http $ sudo ufw deny 80 |
からの接続を拒否するには、203.0.113.1、次の拒否ルールを使用します:
|
1 |
$ sudo ufw deny from 203.0.113.1 |
ルールの削除
これまでに学んだのは、ルールの作成方法だけです。ルールが作成されるのと同様に、削除することもできます。UFWの場合、ルールを削除する具体的な方法が2つあります。
-
ルール番号によるルールの削除
これは、UFWルールを削除する最も簡単な方法です。UFWの各ルールにはルール番号があります。次のコマンドを実行すると、すべてのUFWルールがルール番号とともに表示されます。
|
1 |
$ sudo ufw status numbered |
次のコマンドは、ルール番号で指定されたルールを削除します:
|
1 |
$ sudo ufw delete <rule_number> |
-
実際のルールによるルールの削除
これは、ルールを削除するより難しい方法です。削除するには、実際のルールを手動で指定する必要があります。次の例では、UFWは以下で指定されたルールを削除します:allow http:
|
1 |
$ sudo ufw delete allow http |
ルールは以下で指定することもできます:allow 80。その場合、次のコマンドで削除されます:
|
1 |
$ sudo ufw delete allow 80 |
ルールを削除すると、IPv4とIPv6の両方で削除されます。
UFWのステータスとルールの確認
UFWが有効(アクティブ)であるかどうかを確認することは不可欠です。UFWのステータスを確認するには、次のコマンドを実行します:
|
1 |
$ sudo ufw status verbose |
ステータスが「inactive」の場合は、上記のステップ「Enabling UFW」に従って有効化してください。有効な場合、UFWはステータス「active」を報告し、すべてのアクティブなルールを一覧表示します。
UFWの無効化
何らかの理由でUFWを使用しない場合は、次のコマンドを使用して無効にします:
|
1 |
$ sudo ufw disable |
UFWが無効になると、作成されたすべてのルールはアクティブではなくなります。ただし、ルールは削除されません。UFWを再有効化すると、すべてのルールが再びアクティブになります。現在のUFW設定が混乱している場合はどうすればよいでしょうか?ルールを個別に削除する代わりに、1つのコマンドですべてを削除することができます。UFWをリセットするには、次のコマンドを実行します:
|
1 |
$ sudo ufw reset |
これにより、最初に設定されたデフォルトのUFWの動作は変更されないことに注意してください。
結論
セキュリティと機能性を確保するには、適切なファイアウォール設定が必要です。不要な接続を制限しながら、必要な受信接続のみを許可するように設定する必要があります。
他のファイアウォールソリューションについて詳しく知りたい場合は、当社のブログで詳細なリソースをご覧ください:
ハッピーコンピューティング!











コメント
コメントはまだありません。最初のコメントを投稿しましょう。