はじめに
UFW、またはUncomplicated Firewallは、iptables
やnftables
などの下位レベルのパケットフィルタリング技術の複雑さを隠す、簡略化されたファイアウォール管理インターフェースです。ネットワークをセキュリティで保護し始めたいが、どのツールを使用すべきかわからない場合、UFWが適切な選択肢になるかもしれません。
このチュートリアルでは、Debian 11でUFWを使用したファイアウォールの設定方法を示します。
前提条件
このチュートリアルに従うには、sudo
権限を持つ非rootユーザーを1つ備えたDebian 11サーバーが必要です。これは、Debian 11の初期サーバーセットアップチュートリアルのステップ1から3に従って設定できます。
ステップ1 – UFWのインストール
デビアンはデフォルトでUFWをインストールしません。 Initial Server Setup tutorial を完全に実行した場合、UFWがインストールおよび有効化されています。そうでない場合は、apt
を使用して今すぐインストールしてください:
以下の手順でUFWを設定し、有効にします。
ステップ 2 — IPv6をUFWと使用する(オプション)
このチュートリアルはIPv4を対象としていますが、IPv6でも動作します。デビアンサーバーがIPv6を有効にしている場合は、UFWがIPv6をサポートするように設定する必要があります。これにより、UFWがIPv4に加えてIPv6のファイアウォールルールを管理するようになります。これを設定するには、お気に入りのエディターである nano
を使用して UFW 設定ファイル /etc/default/ufw
を開きます:
ファイル内で IPV6
を見つけ、その値が yes
になっていることを確認してください:
IPV6=yes
ファイルを保存して閉じます。 nano
を使用している場合は、CTRL+X
、Y
、ENTER
を押してファイルを保存して終了します。
これで、UFWが有効になると、IPv4およびIPv6のファイアウォールルールの書き込みが設定されます。ただし、UFWを有効にする前に、SSH経由で接続できるようにファイアウォールが構成されていることを確認する必要があります。デフォルトのポリシーの設定から始めます。
ステップ3 — デフォルトポリシーの設定
ファイアウォールを始めるばかりの場合、最初に定義するルールはデフォルトポリシーです。これらのルールは、明示的に他のルールと一致しないトラフィックを処理します。デフォルトでは、UFW はすべての受信接続を拒否し、すべての送信接続を許可するように設定されています。つまり、サーバーに到達しようとする人は接続できない一方、サーバー内のアプリケーションは外部の世界に到達できます。
このチュートリアルに従って進めることができるように、UFW のルールをデフォルトに戻します。UFW で使用されるデフォルトを設定するには、次のコマンドを使用します。
次のような出力が表示されます。
OutputDefault 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 接続を許可する
あなたのサーバーには、正当な入力接続(例えば、SSHまたはHTTP接続など)を明示的に許可するルールを作成する必要があるため、まだUFWファイアウォールを有効にすることはできません。クラウドサーバーを使用している場合は、サーバーに接続して管理するためにSSH接続を受け入れることができるようにしたいと思うでしょう。
サーバーを受信するSSH接続を許可するように構成するには、このコマンドを使用します:
これにより、デフォルトでSSHデーモンがリッスンするポートであるポート22
上のすべての接続を許可するファイアウォールルールが作成されます。UFWは、/etc/services
ファイルでサービスとしてリストされているポートがallow ssh
に紐づいていることを知っています。
ただし、サービス名の代わりにポートを指定して同等のルールを実際に書くことができます。たとえば、次のコマンドは上記のものと同じ結果を生み出します:
SSHデーモンを異なるポートに設定した場合は、適切なポートを指定する必要があります。たとえば、SSHサーバーがポート2222
でリッスンしている場合、同じコマンドを使用して22
を2222
に置き換えることができます。
これで、ファイアウォールが受信するSSH接続を許可するように構成されたので、有効にすることができます。
ステップ5 — UFWの有効化
UFWを有効にするには、このコマンドを使用します:
警告が表示されます。そのコマンドは既存のSSH接続を妨げる可能性があるという警告です。すでにSSH接続を許可するファイアウォールルールを設定しているので、続行しても問題ありません。プロンプトにy
と入力してENTER
キーを押して応答してください。
ファイアウォールがアクティブになりました。設定したルールを確認するには、このコマンドを実行してください:
このチュートリアルの残りの部分では、UFWの詳細な使用方法について説明します。これには、さまざまな種類の接続を許可または拒否する方法が含まれます。
ステップ6 — その他の接続を許可する
この段階では、サーバーが正常に機能するために必要な他のすべての接続を許可する必要があります。許可する接続は、特定のニーズに応じて異なります。すでにサービス名やポートに基づいて接続を許可するルールを書く方法を知っています。これはSSHのポート22
に対して行いました。
これはHTTPのポート80
に対して行うこともできます。これは、非暗号化のウェブサーバーで使用されます。このタイプのトラフィックを許可するには、次のように入力します:
これはHTTPSのポート443
に対しても行うことができます。これは、暗号化されたウェブサーバーで使用されます。このタイプのトラフィックを許可するには、次のように入力します:
両方のシナリオで、ポートを指定することもでき、HTTPは80
であり、HTTPSは443
です。例:
ただし、ポートまたは既知のサービスを指定する以外にも、接続を許可する方法があります。これについては、次に説明します。
特定のポート範囲
UFWではポート範囲を指定することができます。たとえば、いくつかのアプリケーションは単一のポートではなく複数のポートを使用します。
たとえば、ポート6000
から6007
を使用するX11
接続を許可するには、次のコマンドを使用します:
UFWでポート範囲を指定する場合は、適用するプロトコル(tcp
またはudp
)を指定する必要があります。これは以前に言及されていませんでしたが、プロトコルを指定しないと自動的に両方のプロトコルが許可されるため、ほとんどの場合には問題ありません。
特定のIPアドレス
UFWを使用する際に、IPアドレスを指定することもできます。たとえば、特定のIPアドレス(例:203.0.113.4
の職場や自宅のIPアドレス)からの接続を許可したい場合は、from
とその後にIPアドレスを指定する必要があります:
IPアドレスが接続を許可される特定のポートも指定できます。これにはto any port
とその後にポート番号を追加します。たとえば、203.0.113.4
がポート22
(SSH)に接続できるようにする場合は、次のコマンドを使用します:
サブネット
サブネットのIPアドレスを許可したい場合は、CIDR表記を使用してネットマスクを指定できます。たとえば、203.0.113.1
から203.0.113.254
までのすべてのIPアドレスを許可したい場合は、次のコマンドを使用できます:
同様に、サブネット203.0.113.0/24
が接続を許可する宛先ポートも指定できます。再び、ポート22
(SSH)を例にします:
特定のネットワークインターフェースへの接続
特定のネットワークインターフェースにのみ適用されるファイアウォールルールを作成したい場合は、allow in on
を指定して、ネットワークインターフェースの名前を続けます。
続行する前に、ネットワークインターフェースを調べると役立ちます。次のコマンドを使用してください:
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トラフィックを許可できます:
これにより、サーバーはインターネットからのHTTPリクエストを受信できるようになります。
または、MySQLデータベースサーバー(ポート3306
)がプライベートネットワークインターフェースeth1
で接続を待機するようにしたい場合、次のコマンドを使用できます:
これにより、プライベートネットワーク上の他のサーバーがMySQLデータベースに接続できるようになります。
ステップ7 — 接続の拒否
着信接続のデフォルトポリシーを変更していない場合、UFWはすべての着信接続を拒否するように構成されています。一般的には、これにより、特定のポートとIPアドレスを明示的に許可するルールを作成する必要があることで、セキュアなファイアウォールポリシーの作成プロセスが簡素化されます。
しかし、サーバーがそこから攻撃されていることがわかっているため、ソースIPアドレスまたはサブネットに基づいて特定の接続を拒否したい場合もあります。また、デフォルトの着信ポリシーをallow
に変更したい場合(お勧めしませんが)、接続を許可したくないサービスまたはIPアドレスにdeny
ルールを作成する必要があります。
deny
ルールを記述するには、上記のコマンドを使用し、allow
をdeny
に置き換えます。
たとえば、HTTP接続を拒否するには、次のコマンドを使用できます:
または、203.0.113.4
からのすべての接続を拒否したい場合は、次のコマンドを使用できます:
これで、削除ルールの実装方法を学ぶことができます。
ステップ8 — ルールの削除
ファイアウォールルールを削除する方法を知っていることは、それを作成する方法と同じくらい重要です。削除するルールを指定する方法は2つあります: ルール番号またはルール自体によって。これは、ルールが作成されたときに指定された方法と似ています。
ルール番号による
ファイアウォールルールを削除するためにルール番号を使用している場合、まず最初にファイアウォールルールのリストを取得する必要があります。UFWのstatus
コマンドにはnumbered
オプションがあり、各ルールの隣に番号が表示されます:
OutputStatus: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
HTTP接続をポート80
で許可するルール2
を削除することを決定した場合、次のUFWのdelete
コマンドでこれを指定できます:
これには確認プロンプトが表示され、y/n
で回答できます。 y
を入力すると、ルール2
が削除されます。 IPv6が有効になっている場合は、対応するIPv6ルールも削除する必要があります。
実際のルールによる
代替としての規則番号は、削除する実際の規則を指定することです。たとえば、allow http
ルールを削除したい場合は、次のように書くことができます:
また、サービス名の代わりに allow 80
を使用してルールを指定することもできます:
この方法では、IPv4 および IPv6 の両方のルールが存在する場合に削除されます。
ステップ 9 — UFW のステータスとルールを確認する
いつでも、次のコマンドで UFW のステータスを確認できます:
UFW が無効になっている場合(これがデフォルトです)、出力は次のようになります:
OutputStatus: inactive
UFW がアクティブな場合(ステップ 3 に従った場合)、出力はアクティブであると表示され、設定したルールがリストされます。たとえば、ファイアウォールがどこからでも SSH (ポート 22
) 接続を許可するように設定されている場合、出力には次のようなものが含まれる可能性があります:
OutputStatus: active
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
ファイアウォールの設定を確認する場合は、status
コマンドを使用してください。
ステップ 10 — UFW の無効化またはリセット(オプション)
UFW を使用しないことを決定した場合は、次のコマンドで無効にできます:
UFWで作成したルールはもはや有効ではありません。後で有効にする必要がある場合は、常にsudo ufw enable
を実行できます。
すでにUFWルールを構成している場合でも、最初からやり直したいと思った場合は、リセットコマンドを使用できます:
これにより、UFWが無効になり、以前に定義したルールが削除されます。ただし、デフォルトのポリシーは、いつでも元の設定に変更されないことに注意してください。これにより、UFWをリフレッシュした状態で開始できます。
結論
ファイアウォールは今や(少なくとも)SSH接続を許可するように構成されています。サーバーが必要とする他の受信接続を許可し、不必要な接続を制限するようにしてください。これにより、サーバーが機能し、安全であることが保証されます。
より一般的なUFW構成について学ぶには、UFW Essentials: Common Firewall Rules and Commandsのチュートリアルを参照してください。
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian