Debian 10においてUFWを使用してファイアウォールをセットアップする方法

イントロダクション

UFW、またはUncomplicated Firewallは、iptablesやnftablesなどのより低レベルのパケットフィルタリング技術の複雑さを隠す簡略化されたファイアウォール管理インターフェースです。ネットワークのセキュリティを始めたいが、どのツールを使用すべきかわからない場合、UFWが適切な選択肢となるかもしれません。

このチュートリアルでは、Debian 10上でUFWを使用してファイアウォールをセットアップする方法を紹介します。

前提条件

このチュートリアルに従うには、sudoを使用できる非ルートユーザーを持つDebian 10サーバーが1台必要です。Debian 10の初期サーバーセットアップチュートリアルのステップ1から3に従って設定することができます。

ステップ1 – UFWのインストール

デビアンではデフォルトでUFWはインストールされません。もしも、初期サーバーセットアップチュートリアルを完全に実行した場合、UFWがインストールおよび有効化されているはずです。もししていない場合は、aptを使用して今すぐインストールしてください。

  1. sudo apt install ufw

 

以下の手順でUFWを設定し、有効にします。

ステップ2 — UFWを使用したIPv6の設定(オプション)

このチュートリアルはIPv4を前提として書かれていますが、IPv6も有効にする場合にも動作します。DebianサーバーにIPv6が有効になっている場合は、UFWがIPv6をサポートするように設定する必要があります。これにより、UFWはIPv4に加えてIPv6のファイアウォールルールを管理することが保証されます。この設定を行うには、nanoまたはお気に入りのエディタでUFWの設定ファイルである/etc/default/ufwを開いてください。

  1. sudo nano /etc/default/ufw

 

ファイル内でIPV6を見つけて、その値が「はい」であることを確認してください。

/etc/default/ufwの抜粋
IPV6=yes

ファイルを保存して閉じてください。もし nano を使っている場合は、CTRL+X、Y、ENTER の順に押してファイルを保存して終了してください。

現在、UFWが有効になると、IPv4およびIPv6のファイアウォールルールが設定されるようになります。ただし、UFWを有効にする前に、SSH経由で接続できるようにファイアウォールが設定されていることを確認する必要があります。まず、デフォルトのポリシーを設定することから始めます。

ステップ3 — デフォルトポリシーの設定

ファイアウォールを始めたばかりの場合、最初に設定するべきルールはデフォルトポリシーです。これらのルールは、他のルールに明示的に一致しないトラフィックを処理します。デフォルトでは、UFWはすべての着信接続を拒否し、すべての送信接続を許可するように設定されています。つまり、サーバーにアクセスをしようとする人は接続できず、サーバー内のアプリケーションは外部の世界に接続することができます。

このチュートリアルに続くことができるように、UFWのルールをデフォルトに戻してください。UFWが使用するデフォルトを設定するには、次のコマンドを使用してください。

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

 

以下のような出力を受け取ります。

Output

Default incoming policy changed to ‘deny’ (be sure to update your rules accordingly) Default outgoing policy changed to ‘allow’ (be sure to update your rules accordingly)

これらのコマンドは、デフォルトでの受信は拒否し、送信は許可するように設定します。これらのファイアウォールのデフォルトだけでも、個人用コンピュータには十分かもしれませんが、サーバーは通常、外部ユーザーからの受信要求に対応する必要があります。次のステップでこのプロセスを開始します。

ステップ4 – SSH接続を許可する

あなたのUFWファイアウォールはまだ有効にできません。なぜなら、サーバーへのアクセスを含むすべての着信接続が拒否されてしまうからです。したがって、サーバーがそのような要求に応答するためには、明示的に正当な着信接続を許可するルールを作成する必要があります。例えば、SSHやHTTP接続などです。クラウドサーバーを使用している場合、サーバーに接続して管理するために、着信SSH接続を許可することがほとんどでしょう。

以下のコマンドを使用して、サーバーを設定して、SSH接続を受け入れるようにしてください。

  1. sudo ufw allow ssh

 

以下の内容を日本語で表現する :
デフォルトでSSHデーモンが待ち受けているポートであるポート22に対して、すべての接続を許可するファイアウォールルールが作成されます。UFWは、/etc/services ファイルにサービスとしてリストされていることから、SSHを許可するポートを知っています。

しかし、サービス名の代わりにポートを指定することで、実際に同等のルールを書くことができます。例えば、このコマンドは上記のものと同じ結果を出力します。

  1. sudo ufw allow 22

 

もしSSHデーモンを別のポートに設定した場合、適切なポートを指定する必要があります。例えば、SSHサーバーがポート2222でリッスンしている場合、同じコマンドを使いますが、22を2222に置き換えてください。

以下の通り、ネイティブな日本語で言い換えます(一つのオプションのみ):
SSHの着信接続を許可するようファイアウォールの設定が完了しましたので、有効化してください。

ステップ5 – UFWの有効化

UFWを有効にするためには、このコマンドを使用してください。

  1. sudo ufw enable

 

「既存のSSH接続に影響を与える可能性がある」と警告が表示されますが、すでにSSH接続を許可するファイアウォールルールを設定していますので、問題なく続行しても大丈夫です。プロンプトに「y」と入力し、ENTERキーを押してください。

ファイアウォールが現在アクティブです。設定したルールを確認するには、このコマンドを実行してください。

  1. sudo ufw status verbose

 

このチュートリアルの残りの部分では、UFWの詳細な使い方について説明します。これには、さまざまな種類の接続の許可と拒否が含まれます。

ステップ6 — 他の接続を許可する

この時点で、サーバーが正常に機能するために必要な他のすべての接続を許可するべきです。許可する接続は、あなたの具体的なニーズに依存します。すでに、サービス名やポートに基づいて接続を許可するルールの書き方を知っています。例えば、ポート22のSSHに対してはこれを行いました。

これは、暗号化されていないウェブサーバーが使用するポート80で行えます。このタイプのトラフィックを許可するためには、次のように入力します。

  1. sudo ufw allow http

 

これをHTTPSのポート443でも行うことができます。これは暗号化されたウェブサーバーが利用するポートです。この種のトラフィックを許可するために、次のように入力します。

  1. sudo ufw allow https

 

両方のシナリオでは、HTTPはポート80、HTTPSはポート443として明示することもできます。ただし、ポートや既知のサービスを指定する以外にも接続を許可する方法があります。これについては次に説明します。

特定のポート範囲

UFWを使用して、ポート範囲を指定することができます。例えば、いくつかのアプリケーションは単一のポートではなく、複数のポートを使用しています。

例えば、ポート6000から6007を使用するX11接続を許可するために、次のようなコマンドを使用してください。

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

 

UFWを使用してポート範囲を指定する際は、適用するルールに対してプロトコル(tcpまたはudp)を指定する必要があります。これは以前に言及されていませんでしたが、プロトコルを指定しない場合は自動的に両方のプロトコルが許可されるため、ほとんどの場合は問題ありません。

特定のIPアドレス

UFWを使用する際、IPアドレスも指定することができます。例えば、特定のIPアドレス(例えば、勤務先または自宅のIPアドレスである203.0.113.4)からの接続を許可したい場合、fromとその後にIPアドレスを指定する必要があります。

  1. sudo ufw allow from 203.0.113.4

 

IPアドレスが接続を許可する特定のポートを指定することもできます。ポート番号の後に任意のポートを追加することで、203.0.113.4がポート22(SSH)に接続することを許可したい場合は、次のコマンドを使用してください。

  1. sudo ufw allow from 203.0.113.4 to any port 22

 

サブネット

IPアドレスのサブネットを許可する場合、ネットマスクを指定するためにCIDR表記を使用することができます。例えば、203.0.113.1から203.0.113.254までのすべてのIPアドレスを許可したい場合、次のコマンドを使用できます。

  1. sudo ufw allow from 203.0.113.0/24

 

同様に、サブネット203.0.113.0/24が接続を許可される宛先ポートを指定することもできます。再び、ポート22(SSH)を例に挙げます。

  1. sudo ufw allow from 203.0.113.0/24 to any port 22

 

特定のネットワークインタフェースへの接続

特定のネットワークインターフェースにのみ適用されるファイアウォールルールを作成したい場合は、allow in onの後にネットワークインターフェースの名前を指定することで行うことができます。

続行する前に、ネットワークインターフェースを調べると役立ちます。そのためには、このコマンドを使用してください。

  1. ip addr

 

Output

. . . 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

ハイライトされた出力は、ネットワークインターフェースの名前を示しています。通常、eth0やenp3s2のような名前を持っています。

もしもあなたのサーバーに「eth0」という公共ネットワークインターフェースがある場合、以下のコマンドを使用してそれにHTTPトラフィックを許可することができます。

  1. sudo ufw allow in on eth0 to any port 80

 

そうすることで、お使いのサーバーは一般のインターネットからのHTTPリクエストを受け取ることができるようになります。

もしくは、プライベートネットワークインターフェースeth1で接続を受け付けるためにMySQLデータベースサーバー(ポート3306)を使用したい場合、次のコマンドを使用できます。

  1. sudo ufw allow in on eth1 to any port 3306

 

あなたのプライベートネットワーク上の他のサーバーが、あなたのMySQLデータベースに接続できるようになります。

ステップ7 — 接続を拒否する

もしも受信接続のデフォルトポリシーを変更していない場合、UFWは全ての受信接続を拒否するように設定されています。一般的に、これにより特定のポートやIPアドレスを明示的に許可するルールを作成することでセキュアなファイアウォールポリシーの作成が簡略化されます。

時々、サーバーが特定のIPアドレスまたはサブネットから攻撃を受けているため、そのような接続を拒否したいと思うことがあるかもしれません。また、デフォルトの受信ポリシーを許可に変更する場合(おすすめされていませんが)、接続を許可したくないサービスやIPアドレスのために拒否ルールを作成する必要があります。

「deny」で置き換えることで、上記で説明されたコマンドを使用して拒否ルールを記述することができます。

例えば、HTTP接続を拒否するためには、このコマンドを使用できます。

  1. sudo ufw deny http

 

もしあなたが203.0.113.4からのすべての接続を拒否したい場合は、このコマンドを使うことができます。

  1. sudo ufw deny from 203.0.113.4

 

今、削除ルールの実装方法を学ぶことができます。

ステップ8 — ルールの削除

ファイアウォールのルールを削除する方法を知ることは、それを作成する方法と同じくらい重要です。削除するルールを指定する方法には2つあります:ルール番号またはルールそのもので指定する方法です。これは、ルールが作成されたときに指定された方法と似ています。

ルールナンバーによる

ファイアウォールルールを削除するためにルール番号を使用している場合、最初にするべきことはファイアウォールルールのリストを取得することです。UFWステータスコマンドには、各ルールの横に番号を表示するオプションがあります。

  1. sudo ufw status numbered

 

Output

Status: active To Action From — —— —- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

もしルール2(ポート80でのHTTP接続を許可するルール)を削除することを決定した場合、次のUFW削除コマンドで指定することができます。

  1. sudo ufw delete 2

 

これによって確認プロンプトが表示され、y/nで回答することができます。yを入力すると、ルール2が削除されます。IPv6が有効になっている場合は、関連するIPv6のルールも削除する必要があることに注意してください。

実際のルールによれば

ルール番号の代わりに、削除する実際のルールを指定する方法があります。例えば、HTTPを許可するルールを削除したい場合は、次のように書くことができます。

  1. sudo ufw delete allow http

 

サービス名の代わりに、80を許可するルールを指定することもできます。

  1. sudo ufw delete allow 80

 

存在する場合、この方法はIPv4とIPv6のルールを両方削除します。

ステップ9:UFWの状態とルールの確認を行います。

いつでも、このコマンドでUFWの状態を確認できます。

  1. sudo ufw status verbose

 

もしUFWが無効になっている場合(デフォルト設定ですが)、出力は以下のようになります。

Output

Status: inactive

もしUFWがアクティブであれば、Step 3に従っているのであれば、出力にはアクティブであることが表示され、設定したルールがリストされます。例えば、ファイアウォールがSSH(ポート22)の接続をどこからでも許可するように設定されている場合、出力には次のような内容が含まれるかもしれません。

Output

Status: active To Action From — —— —- 22/tcp ALLOW IN Anywhere

ファイアウォールの設定方法を確認したい場合は、ステータスコマンドを使用してください。

ステップ10- UFWの無効化またはリセット(オプション)

もしUFWを使用したくないと決めた場合、このコマンドで無効にすることができます。

  1. sudo ufw disable

 

UFWで作成したすべてのルールは無効となります。後で有効化する必要がある場合は、常にsudo ufw enableコマンドを実行できます。

すでにUFWのルールが設定されている場合、しかしやり直したいと考えた場合は、リセットコマンドを使用することができます。

  1. sudo ufw reset

 

これにより、UFWが無効化され、以前に定義したすべてのルールが削除されます。ただし、デフォルトのポリシーは、いつでも変更した場合には元の設定には戻りませんので、ご注意ください。これにより、UFWを新たな状態で再開することができます。

結論

現在、あなたのファイアウォールはSSH接続を許可するように設定されています。サーバーが必要とする他の入り口接続も許可して、不要な接続は制限してください。これにより、サーバーが機能し、安全になります。

より一般的なUFWの設定について学ぶには、UFW基礎:共通のファイアウォールルールとコマンドのチュートリアルを参照してください。

コメントを残す 0

Your email address will not be published. Required fields are marked *