前書き

UFW、またはUncomplicated Firewallは、ファイアウォールの設定プロセスを簡素化するための「+ iptables 」へのインターフェースです。 ` iptables +`は堅実で柔軟なツールですが、初心者がファイアウォールを適切に設定する方法を学ぶのは難しい場合があります。 ネットワークの保護を開始しようとしていて、どのツールを使用すべきかわからない場合は、UFWが適切な選択肢である可能性があります。

このチュートリアルでは、Debian 10でUFWを使用してファイアウォールを設定する方法を示します。

前提条件

このチュートリアルを実行するには、https://www.digitalocean.com/community/tutorials/の手順1〜3に従ってセットアップできる、非ルートユーザーの `+ sudo +`を持つDebian 10サーバーが必要です。 initial-server-setup-with-debian-10 [Debian 10での初期サーバーセットアップチュートリアル]。

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

DebianはデフォルトでUFWをインストールしません。 https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10 [初期サーバー設定チュートリアル]全体を実行した場合、UFWをインストールして有効にしたことになります。 そうでない場合は、 `+ apt +`を使用してインストールします。

sudo apt install ufw

UFWをセットアップし、次の手順で有効にします。

ステップ2-UFWでのIPv6の使用(オプション)

このチュートリアルはIPv4を念頭に置いて書かれていますが、IPv6を有効にしている限り機能します。 DebianサーバーでIPv6が有効になっている場合、IPv6をサポートするようにUFWを構成する必要があります。これにより、UFWがIPv4に加えてIPv6のファイアウォールルールを管理するようになります。 これを設定するには、UFW設定ファイル `+ / etc / default / ufw `を ` nano +`またはお気に入りのエディタで開きます:

sudo nano /etc/default/ufw

次に、「+ IPV6 」の値が「 yes +」であることを確認します。 これは次のようになります。

/ etc / default / ufwの抜粋

IPV6=

ファイルを保存して閉じます。 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

これにより、ポート `+ 22 `上のすべての接続を許可するファイアウォールルールが作成されます。これは、デフォルトでSSHデーモンがリッスンするポートです。 UFWは、 ` / etc / services `ファイルにサービスとしてリストされているため、 ` allow ssh +`の意味を知っています。

ただし、サービス名の代わりにポートを指定することで、実際に同等のルールを作成できます。 たとえば、次のコマンドは上記と同じ結果を生成します。

sudo ufw allow 22

別のポートを使用するようにSSHデーモンを構成した場合、適切なポートを指定する必要があります。 たとえば、SSHサーバーがポート `+ 2222 +`でリッスンしている場合、このコマンドを使用してそのポートでの接続を許可できます。

sudo ufw allow

ファイアウォールが着信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 :/tcp
sudo ufw allow :/udp

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

特定のIPアドレス

UFWを使用する場合、IPアドレスも指定できます。 たとえば、職場または自宅のIPアドレス「203.0.113.4」など、特定のIPアドレスからの接続を許可する場合は、「+ from +」を指定してからIPアドレスを指定する必要があります。

sudo ufw allow from

+ to any port +`の後にポート番号を追加することにより、IPアドレスが接続できる特定のポートを指定することもできます。 たとえば、 `+ 203.0.113.4 +`がポート `+ 22 +(SSH)に接続できるようにするには、次のコマンドを使用します。

sudo ufw allow from  to any port

サブネット

IPアドレスのサブネットを許可する場合は、CIDR表記を使用してネットマスクを指定できます。 たとえば、「+ 203.0.113.1+」から「203.0.113.254」の範囲のすべてのIPアドレスを許可する場合、次のコマンドを使用できます。

sudo ufw allow from /

同様に、サブネット「+ 203.0.113.0 / 24 +」が接続できる宛先ポートを指定することもできます。 ここでも、例としてポート「+22 +」(SSH)を使用します。

sudo ufw allow from / to any port 22

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

特定のネットワークインターフェースにのみ適用されるファイアウォールルールを作成する場合は、 `+ allow in on +`に続けてネットワークインターフェースの名前を指定することで作成できます。

続行する前に、ネットワークインターフェイスを検索することをお勧めします。 これを行うには、次のコマンドを使用します。

ip addr
Output2: : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: : <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .

強調表示された出力は、ネットワークインターフェイス名を示しています。 通常、これらは「+ eth0 」や「 enp3s2 +」などの名前が付けられます。

たとえば、サーバーに `+ eth0 +`というパブリックネットワークインターフェイスがある場合、次のコマンドを使用してHTTPトラフィックを許可できます。

sudo ufw allow in on  to any port

そうすることで、サーバーはパブリックインターネットからHTTPリクエストを受信できるようになります。

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

sudo ufw allow in on  to any port

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

ステップ7-接続の拒否

着信接続のデフォルトポリシーを変更していない場合、UFWはすべての着信接続を拒否するように設定されます。 一般に、これにより、特定のポートとIPアドレスを明示的に許可するルールを作成する必要があるため、安全なファイアウォールポリシーの作成プロセスが簡素化されます。

ただし、ソースIPアドレスまたはサブネットに基づいて特定の接続を拒否したい場合がありますが、これはおそらくサーバーがそこから攻撃されていることを知っているためです。 また、デフォルトの受信ポリシーを*許可*(推奨されません)に変更する場合は、接続を許可しないサービスまたはIPアドレスに対して*拒否*ルールを作成する必要があります。

拒否*ルールを作成するには、上記のコマンドを使用して、 allow deny *に置き換えます。

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

sudo ufw deny http

または、「+ 203.0.113.4+」からのすべての接続を拒否する場合は、次のコマンドを使用できます。

sudo ufw deny from

では、ルールを削除する方法を見てみましょう。

ステップ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 `を削除することに決めた場合、次のUFW ` delete +`コマンドでこれを指定できます。

sudo ufw delete

これにより、確認プロンプトが表示され、「+ y / n 」で回答できます。 「 y 」を入力すると、ルール「+2」が削除されます。 IPv6を有効にしている場合は、対応するIPv6ルールも削除することに注意してください。

実際のルールによる

ルール番号の代わりに、削除する実際のルールを指定します。 たとえば、「+ allow http +」ルールを削除する場合、次のように記述できます。

sudo ufw delete

サービス名の代わりに「+ allow 80+」を使用してルールを指定することもできます。

sudo ufw delete

このメソッドは、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を使用したくない場合は、次のコマンドでUFWを無効にできます。

sudo ufw disable

UFWで作成したルールは無効になります。 後で有効にする必要がある場合は、いつでも `+ sudo ufw enable +`を実行できます。

すでにUFWルールが設定されているが、最初からやり直すことにした場合は、resetコマンドを使用できます。

sudo ufw reset

これにより、UFWが無効になり、以前に定義したルールが削除されます。 デフォルトのポリシーは、いつでも変更しても元の設定に変更されないことに注意してください。 これにより、UFWで新たなスタートを切ることができます。

結論

これで、ファイアウォールは(少なくとも)SSH接続を許可するように設定されました。 サーバーが必要とする他の着信接続はすべて許可し、不要な接続も制限してください。 これにより、サーバーの機能とセキュリティの両方が確保されます。

より一般的なUFW構成については、https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands [UFW Essentials:Common Firewall Rules and Commands]でこのチュートリアルをご覧ください。 。