Debian10でUFWを使用してファイアウォールを設定する方法
序章
UFW(Uncomplicated Firewall)は、iptables
へのインターフェースであり、ファイアウォールの構成プロセスを簡素化することを目的としています。 iptables
は堅実で柔軟なツールですが、初心者がファイアウォールを適切に構成するために使用する方法を学ぶのは難しい場合があります。 ネットワークの保護を開始しようとしていて、使用するツールがわからない場合は、UFWが適切な選択となる可能性があります。
このチュートリアルでは、Debian10でUFWを使用してファイアウォールを設定する方法を説明します。
前提条件
このチュートリアルに従うには、sudo
非rootユーザーを持つDebian10サーバーが1つ必要です。これは、 Debian10チュートリアルの初期サーバーセットアップの手順1〜3に従ってセットアップできます。 ]。
ステップ1-UFWのインストール
DebianはデフォルトではUFWをインストールしません。 初期サーバーセットアップチュートリアル全体を実行すると、UFWがインストールされて有効になります。 そうでない場合は、apt
を使用して今すぐインストールしてください。
sudo apt install ufw
次の手順でUFWを設定して有効にします。
ステップ2— UFWでのIPv6の使用(オプション)
このチュートリアルはIPv4を念頭に置いて書かれていますが、IPv6を有効にしている限り機能します。 DebianサーバーでIPv6が有効になっている場合は、UFWがIPv6をサポートするように構成されていることを確認する必要があります。 これにより、UFWがIPv4に加えてIPv6のファイアウォールルールを確実に管理できるようになります。 これを構成するには、UFW構成ファイル/etc/default/ufw
をnano
またはお好みのエディターで開きます。
sudo nano /etc/default/ufw
次に、IPV6
の値がyes
であることを確認します。 次のようになります。
/ etc / default/ufwの抜粋
IPV6=yes
ファイルを保存して閉じます。 これで、UFWが有効になると、IPv4とIPv6の両方のファイアウォールルールを書き込むように構成されます。 ただし、UFWを有効にする前に、SSH経由で接続できるようにファイアウォールが構成されていることを確認する必要があります。 デフォルトのポリシーの設定から始めましょう。
ステップ3—デフォルトポリシーの設定
ファイアウォールを使い始めたばかりの場合、最初に定義するルールはデフォルトのポリシーです。 これらのルールは、他のルールと明示的に一致しないトラフィックを処理します。 デフォルトでは、UFWはすべての着信接続を拒否し、すべての発信接続を許可するように設定されています。 つまり、サーバーにアクセスしようとするユーザーは接続できませんが、サーバー内のアプリケーションは外部にアクセスできます。
UFWルールをデフォルトに戻しましょう。そうすれば、このチュートリアルを確実に実行できるようになります。 UFWで使用されるデフォルトを設定するには、次のコマンドを使用します。
sudo ufw default deny incoming sudo ufw default allow outgoing
これらのコマンドは、デフォルトで着信を拒否し、発信接続を許可するように設定します。 これらのファイアウォールのデフォルトだけでパーソナルコンピュータには十分かもしれませんが、サーバーは通常、外部ユーザーからの着信要求に応答する必要があります。 次にそれを調べます。
ステップ4—SSH接続を許可する
ここでUFWファイアウォールを有効にすると、すべての着信接続が拒否されます。 これは、サーバーがこれらのタイプの要求に応答するようにする場合、正当な着信接続(SSHまたはHTTP接続など)を明示的に許可するルールを作成する必要があることを意味します。 クラウドサーバーを使用している場合は、サーバーに接続して管理できるように、着信SSH接続を許可することをお勧めします。
着信SSH接続を許可するようにサーバーを構成するには、次のコマンドを使用できます。
sudo ufw allow ssh
これにより、SSHデーモンがデフォルトでリッスンするポートであるポート22
ですべての接続を許可するファイアウォールルールが作成されます。 UFWは、/etc/services
ファイルにサービスとしてリストされているため、ポートallow ssh
の意味を認識しています。
ただし、実際には、サービス名の代わりにポートを指定することで、同等のルールを記述できます。 たとえば、このコマンドは上記と同じ結果を生成します。
sudo ufw allow 22
別のポートを使用するようにSSHデーモンを構成した場合は、適切なポートを指定する必要があります。 たとえば、SSHサーバーがポート2222
でリッスンしている場合、次のコマンドを使用して、そのポートでの接続を許可できます。
sudo ufw allow 2222
着信SSH接続を許可するようにファイアウォールが構成されたので、ファイアウォールを有効にできます。
ステップ5—UFWを有効にする
UFWを有効にするには、次のコマンドを使用します。
sudo ufw enable
コマンドが既存のSSH接続を中断する可能性があることを示す警告が表示されます。 SSH接続を許可するファイアウォールルールをすでに設定しているので、続行しても問題ありません。 y
でプロンプトに応答し、ENTER
を押します。
これでファイアウォールがアクティブになります。 sudo ufw status verbose
コマンドを実行して、設定したルールを確認します。 このチュートリアルの残りの部分では、さまざまなタイプの接続の許可と拒否を含め、UFWの使用方法について詳しく説明します。
ステップ6—他の接続を許可する
この時点で、サーバーが正しく機能するために必要な他のすべての接続を許可する必要があります。 許可する必要のある接続は、特定のニーズによって異なります。 幸いなことに、サービス名またはポートに基づいて接続を許可するルールを作成する方法はすでに知っています。 これは、ポート22
のSSHに対してすでに実行されています。 次の場合にもこれを行うことができます。
- ポート
80
のHTTP。これは、暗号化されていないWebサーバーが使用するものです。 このタイプのトラフィックを許可するには、sudo ufw allow http
またはsudo ufw allow 80
と入力します。 - ポート
443
のHTTPS。これは暗号化されたWebサーバーが使用するものです。 このタイプのトラフィックを許可するには、sudo ufw allow https
またはsudo ufw allow 443
と入力します。
ただし、ポートまたは既知のサービスを指定する以外に、接続を許可する方法は他にもあります。 次にそれらについて説明します。
特定のポート範囲
UFWでポート範囲を指定できます。 たとえば、一部のアプリケーションは、単一のポートではなく複数のポートを使用します。
たとえば、ポート6000
-6007
を使用するX11
接続を許可するには、次のコマンドを使用します。
sudo ufw allow 6000:6007/tcp sudo ufw allow 6000:6007/udp
UFWでポート範囲を指定する場合は、ルールを適用するプロトコル(tcp
またはudp
)を指定する必要があります。 プロトコルを指定しないと自動的に両方のプロトコルが許可されるため、これについては前に説明しませんでした。ほとんどの場合、これで問題ありません。
特定のIPアドレス
UFWを使用する場合、IPアドレスを指定することもできます。 たとえば、203.0.113.4
の職場または自宅のIPアドレスなど、特定のIPアドレスからの接続を許可する場合は、from
を指定してからIPアドレスを指定する必要があります。
sudo ufw allow from 203.0.113.4
to any port
の後にポート番号を追加して、IPアドレスが接続できる特定のポートを指定することもできます。 たとえば、203.0.113.4
がポート22
(SSH)に接続できるようにする場合は、次のコマンドを使用します。
sudo ufw allow from 203.0.113.4 to any port 22
サブネット
IPアドレスのサブネットを許可する場合は、CIDR表記を使用してネットマスクを指定できます。 たとえば、203.0.113.1
から203.0.113.254
の範囲のすべてのIPアドレスを許可する場合は、次のコマンドを使用できます。
sudo ufw allow from 203.0.113.0/24
同様に、サブネット203.0.113.0/24
が接続を許可されている宛先ポートを指定することもできます。 ここでも、例としてポート22
(SSH)を使用します。
sudo ufw allow from 203.0.113.0/24 to any port 22
特定のネットワークインターフェイスへの接続
特定のネットワークインターフェイスにのみ適用されるファイアウォールルールを作成する場合は、allow in on
に続けてネットワークインターフェイスの名前を指定することで、作成できます。
続行する前に、ネットワークインターフェイスを検索することをお勧めします。 これを行うには、次のコマンドを使用します。
ip addr
Output2: 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トラフィックを許可できます。
sudo ufw allow in on eth0 to any port 80
そうすることで、サーバーがパブリックインターネットからHTTPリクエストを受信できるようになります。
または、MySQLデータベースサーバー(ポート3306
)がプライベートネットワークインターフェイスeth1
で接続をリッスンするようにする場合は、次のコマンドを使用できます。
sudo ufw allow in on eth1 to any port 3306
これにより、プライベートネットワーク上の他のサーバーがMySQLデータベースに接続できるようになります。
ステップ7—接続を拒否する
着信接続のデフォルトポリシーを変更していない場合、UFWはすべての着信接続を拒否するように設定されています。 一般に、これにより、特定のポートとIPアドレスの通過を明示的に許可するルールを作成する必要があるため、安全なファイアウォールポリシーを作成するプロセスが簡素化されます。
ただし、サーバーがそこから攻撃されていることがわかっているために、送信元IPアドレスまたはサブネットに基づいて特定の接続を拒否したい場合があります。 また、デフォルトの着信ポリシーを allow に変更する場合(これは推奨されません)、使用しないサービスまたはIPアドレスに対してdenyルールを作成する必要があります。の接続を許可したい。
deny ルールを作成するには、上記のコマンドを使用して、allowをdenyに置き換えます。
たとえば、HTTP接続を拒否するには、次のコマンドを使用できます。
sudo ufw deny http
または、203.0.113.4
からのすべての接続を拒否する場合は、次のコマンドを使用できます。
sudo ufw deny from 203.0.113.4
次に、ルールを削除する方法を見てみましょう。
ステップ8—ルールを削除する
ファイアウォールルールを削除する方法を知ることは、それらを作成する方法を知ることと同じくらい重要です。 削除するルールを指定するには、ルール番号またはルール自体の2つの方法があります。 これは、ルールが作成されたときに指定された方法と似ています。 まず、ルール番号による削除の方法について説明します。
ルール番号別
ルール番号を使用してファイアウォールルールを削除している場合、最初に実行したいのは、ファイアウォールルールのリストを取得することです。 UFW status
コマンドには、numbered
オプションがあり、各ルールの横に数字が表示されます。
sudo ufw status numbered
OutputStatus: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere
ポート80
でHTTP接続を許可するルール2
を削除することにした場合は、次のUFWdelete
コマンドでこれを指定できます。
sudo ufw delete 2
これにより、y/n
で応答できる確認プロンプトが表示されます。 y
と入力すると、ルール2
が削除されます。 IPv6を有効にしている場合は、対応するIPv6ルールも削除する必要があることに注意してください。
実際のルールによる
ルール番号の代わりに、削除する実際のルールを指定することもできます。 たとえば、allow http
ルールを削除する場合は、次のように記述できます。
sudo ufw delete allow http
サービス名の代わりにallow 80
を使用してルールを指定することもできます。
sudo ufw delete allow 80
このメソッドは、IPv4ルールとIPv6ルールの両方が存在する場合はそれらを削除します。
ステップ9—UFWステータスとルールの確認
次のコマンドを使用して、いつでもUFWのステータスを確認できます。
sudo ufw status verbose
デフォルトでUFWが無効になっている場合は、次のように表示されます。
OutputStatus: inactive
UFWがアクティブな場合(手順3に従った場合)、出力にはアクティブであることが示され、設定したルールが一覧表示されます。 たとえば、ファイアウォールがどこからでもSSH(ポート22
)接続を許可するように設定されている場合、出力は次のようになります。
OutputStatus: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere
UFWがファイアウォールをどのように構成したかを確認したい場合は、status
コマンドを使用してください。
ステップ10— UFWの無効化またはリセット(オプション)
UFWを使用したくない場合は、次のコマンドで無効にできます。
sudo ufw disable
UFWで作成したルールはアクティブではなくなります。 後でアクティブ化する必要がある場合は、いつでもsudo ufw enable
を実行できます。
すでにUFWルールを設定しているが、最初からやり直すことにした場合は、resetコマンドを使用できます。
sudo ufw reset
これにより、UFWが無効になり、以前に定義したルールがすべて削除されます。 いずれかの時点でデフォルトのポリシーを変更しても、デフォルトのポリシーは元の設定に変更されないことに注意してください。 これにより、UFWを新たに始めることができます。
結論
これで、ファイアウォールは(少なくとも)SSH接続を許可するように構成されました。 不要な接続を制限しながら、サーバーが必要とするその他の着信接続を必ず許可してください。 これにより、サーバーが機能し、安全であることが保証されます。
より一般的なUFW構成については、 UFW Essentials:Common Firewall Rules andCommandsに関するこのチュートリアルをご覧ください。