Ubuntu18.04でUFWを使用してファイアウォールを設定する方法
序章
UFW、またはUncomplicated Firewallは、 iptables
これは、ファイアウォールを構成するプロセスを簡素化することを目的としています。 その間 iptables
は堅実で柔軟なツールであるため、初心者がファイアウォールを適切に構成するために使用する方法を学ぶのは難しい場合があります。 ネットワークの保護を開始しようとしていて、使用するツールがわからない場合は、UFWが適切な選択である可能性があります。
このチュートリアルでは、Ubuntu18.04でUFWを使用してファイアウォールを設定する方法を説明します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- 1台のUbuntu18.04サーバーと
sudo
非rootユーザー。Ubuntu18.04チュートリアルを使用したサーバーの初期設定の手順1〜3に従って設定できます。
UFWはデフォルトでUbuntuにインストールされます。 何らかの理由でアンインストールされている場合は、 sudo apt install ufw
.
ステップ1—IPv6が有効になっていることを確認する
Ubuntuの最近のバージョンでは、IPv6がデフォルトで有効になっています。 実際には、サーバーに追加されるほとんどのファイアウォールルールには、IPv4バージョンとIPv6バージョンの両方が含まれ、後者は次のように識別されます。 v6
UFWのステータスコマンドの出力内。 IPv6が有効になっていることを確認するには、次のURLでUFW構成ファイルを確認できます。 /etc/default/ufw
. を使用してこのファイルを開く nano
またはお気に入りのコマンドラインエディタ:
- sudo nano /etc/default/ufw
次に、の値を確認します IPV6
に設定されています yes
. 次のようになります。
IPV6=yes
ファイルを保存して閉じます。 使用している場合 nano
、入力することでそれを行うことができます CTRL+X
、 それから Y
と ENTER
確認するために。
このガイドの後のステップでUFWを有効にすると、IPv4とIPv6の両方のファイアウォールルールを書き込むように構成されます。
ステップ2—デフォルトポリシーの設定
UFWを使い始めたばかりの場合は、最初のステップとして、デフォルトのファイアウォールポリシーを確認することをお勧めします。 これらのルールは、他のルールと明示的に一致しないトラフィックの処理方法を制御します。
デフォルトでは、UFWはすべての着信接続を拒否し、すべての発信接続を許可するように設定されています。 つまり、サーバーにアクセスしようとするユーザーは接続できませんが、サーバー内のアプリケーションは外部にアクセスできます。 この一般的なポリシーの例外として、特定のサービスとポートを許可するための追加のルールが含まれています。
このチュートリアルの残りの部分を確実に実行できるようにするために、着信トラフィックと発信トラフィックのUFWデフォルトポリシーを設定します。
デフォルトのUFW着信ポリシーをに設定するには deny
、 走る:
- sudo ufw default deny incoming
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
デフォルトのUFW発信ポリシーをに設定するには allow
、 走る:
- sudo ufw default allow outgoing
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
これらのコマンドは、デフォルトで着信を拒否し、発信接続を許可するように設定します。 これらのファイアウォールのデフォルトだけでパーソナルコンピュータには十分かもしれませんが、サーバーは通常、外部ユーザーからの着信要求に応答する必要があります。 次にそれを調べます。
ステップ3—SSH接続を許可する
ここでUFWファイアウォールを有効にすると、すべての着信接続が拒否されます。 つまり、サーバーでこれらのタイプの要求に応答する場合は、正当な着信接続(SSHまたはHTTP接続など)を明示的に許可するルールを作成する必要があります。 クラウドサーバーを使用している場合は、サーバーに接続して管理できるように、着信SSH接続を許可することをお勧めします。
OpenSSHUFWアプリケーションプロファイルの許可
インストール時に、ネットワーク接続に依存するほとんどのアプリケーションは、UFW内にアプリケーションプロファイルを登録します。これにより、ユーザーはサービスへの外部アクセスをすばやく許可または拒否できます。 次の方法で、現在UFWに登録されているプロファイルを確認できます。
- sudo ufw app list
OutputAvailable applications:
OpenSSH
OpenSSHアプリケーションプロファイルを有効にするには、以下を実行します。
- sudo ufw allow OpenSSH
OutputRule added
Rule added (v6)
これにより、ポートでのすべての接続を許可するファイアウォールルールが作成されます 22
、SSHデーモンがデフォルトでリッスンするポートです。
サービス名によるSSHの許可
着信SSH接続を許可するようにUFWを設定する別の方法は、そのサービス名を参照することです。 ssh
.
- sudo ufw allow ssh
OutputRule added
Rule added (v6)
UFWは、サービスが使用するポートとプロトコルを認識しています。 /etc/services
ファイル。
ポート番号によるSSHの許可
または、アプリケーションプロファイルやサービス名の代わりにポートを指定して、同等のルールを作成することもできます。 たとえば、このコマンドは前の例と同じように機能します。
- sudo ufw allow 22
OutputRule added
Rule added (v6)
別のポートを使用するようにSSHデーモンを構成した場合は、適切なポートを指定する必要があります。 たとえば、SSHサーバーがポートでリッスンしている場合 2222
、このコマンドを使用して、そのポートでの接続を許可できます。
- sudo ufw allow 2222
OutputRule added
Rule added (v6)
着信SSH接続を許可するようにファイアウォールが構成されたので、ファイアウォールを有効にできます。
ステップ4—UFWを有効にする
これで、SSH接続を許可するようにファイアウォールを構成する必要があります。 これまでに追加されたルールを確認するには、ファイアウォールがまだ無効になっている場合でも、次を使用できます。
- sudo ufw show added
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
着信SSH接続を許可するルールがあることを確認したら、次の方法でファイアウォールを有効にできます。
- sudo ufw enable
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
コマンドが既存のSSH接続を中断する可能性があることを示す警告が表示されます。 SSH接続を許可するファイアウォールルールをすでに設定しているので、続行しても問題ありません。 プロンプトに応答する y
とヒット ENTER
.
これでファイアウォールがアクティブになります。 を実行します sudo ufw status verbose
設定されているルールを確認するコマンド。 このチュートリアルの残りの部分では、さまざまな種類の接続を許可または拒否するなど、UFWの使用方法について詳しく説明します。
ステップ5—他の接続を許可する
この時点で、サーバーが応答する必要のある他のすべての接続を許可する必要があります。 許可する必要のある接続は、特定のニーズによって異なります。 アプリケーションプロファイル、サービス名、またはポートに基づいて接続を許可するルールを作成する方法をすでに知っています。 ポートのSSHに対してすでにこれを実行しました 22
. 次の場合にもこれを行うことができます。
- 暗号化されていないWebサーバーが使用するポート80のHTTP
sudo ufw allow http
またsudo ufw allow 80
- 暗号化されたWebサーバーが使用するポート443のHTTPS
sudo ufw allow https
またsudo ufw allow 443
- HTTPとHTTPSの両方を備えたApache、
sudo ufw allow ‘Apache Full’
- HTTPとHTTPSの両方でNginxを使用します
sudo ufw allow ‘Nginx Full’
サーバーで使用できるアプリケーションプロファイルを確認することを忘れないでください。 sudo ufw app list
.
ポートまたは既知のサービス名を指定する以外に、接続を許可する方法は他にもいくつかあります。 次に、これらのいくつかを見ていきます。
特定のポート範囲
UFWでポート範囲を指定できます。 一部のアプリケーションは、単一のポートではなく、複数のポートを使用します。
たとえば、ポートを使用するX11接続を許可するには 6000
–6007
、次のコマンドを使用します。
- sudo ufw allow 6000:6007/tcp
- sudo ufw allow 6000:6007/udp
UFWでポート範囲を指定する場合は、プロトコルを指定する必要があります(tcp
また udp
)ルールを適用する必要があります。 プロトコルを指定しないと自動的に両方のプロトコルが許可されるため、これについては前に説明しませんでした。ほとんどの場合、これで問題ありません。
特定のIPアドレス
UFWを使用する場合、ルール内でIPアドレスを指定することもできます。 たとえば、職場や自宅のIPアドレスなどの特定のIPアドレスからの接続を許可する場合 203.0.113.4
、を使用する必要があります from
パラメータを指定し、許可するIPアドレスを指定します。
- sudo ufw allow from 203.0.113.4
OutputRule added
追加することにより、IPアドレスが接続を許可されるポートを指定することもできます to any port
その後にポート番号が続きます。 たとえば、許可したい場合 203.0.113.4
ポートに接続する 22
(SSH)、次のコマンドを使用します:
- sudo ufw allow from 203.0.113.4 to any port 22
OutputRule added
サブネット
IPアドレスのサブネットを許可する場合は、CIDR表記を使用してネットマスクを指定できます。 たとえば、次の範囲のすべてのIPアドレスを許可する場合 203.0.113.1
に 203.0.113.254
次のコマンドを使用できます。
- sudo ufw allow from 203.0.113.0/24
OutputRule added
同様に、サブネットが宛先ポートを指定することもできます 203.0.113.0/24
に接続できます。 ここでも、ポートを使用します 22
(SSH)例として:
- sudo ufw allow from 203.0.113.0/24 to any port 22
OutputRule added
特定のネットワークインターフェイスへの接続
特定のネットワークインターフェイスにのみ適用されるファイアウォールルールを作成する場合は、「allow in on」に続けてネットワークインターフェイスの名前を指定することで、作成できます。
続行する前に、ネットワークインターフェイスを検索することをお勧めします。 これを行うには、次のコマンドを使用します。
- ip addr
Output Excerpt2: 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トラフィックを許可できます(ポート 80
)このコマンドでそれに:
- sudo ufw allow in on eth0 to any port 80
OutputRule added
Rule added (v6)
そうすることで、サーバーがパブリックインターネットからHTTPリクエストを受信できるようになります。
または、MySQLデータベースサーバー(ポート 3306
)プライベートネットワークインターフェイスで接続をリッスンする eth1
たとえば、次のコマンドを使用できます。
- sudo ufw allow in on eth1 to any port 3306
OutputRule added
Rule added (v6)
これにより、プライベートネットワーク上の他のサーバーがMySQLデータベースに接続できるようになります。
ステップ6—接続を拒否する
着信接続のデフォルトポリシーを変更していない場合、UFWはすべての着信接続を拒否するように設定されています。 一般に、これにより、特定のポートとIPアドレスの通過を明示的に許可するルールを作成する必要があるため、安全なファイアウォールポリシーを作成するプロセスが簡素化されます。
ただし、サーバーがそこから攻撃されていることがわかっている場合など、送信元IPアドレスまたはサブネットに基づいて特定の接続を拒否したい場合があります。 また、デフォルトの着信ポリシーを allow に変更する場合(これは推奨されません)、使用しないサービスまたはIPアドレスに対してdenyルールを作成する必要があります。の接続を許可したい。
deny ルールを作成するには、前述のコマンドを使用して、allowをdenyに置き換えます。
たとえば、HTTP接続を拒否するには、次のコマンドを使用できます。
- sudo ufw deny http
OutputRule added
Rule added (v6)
または、からのすべての接続を拒否する場合 203.0.113.4
次のコマンドを使用できます。
- sudo ufw deny from 203.0.113.4
OutputRule added
場合によっては、サーバーからの発信接続をブロックすることもできます。 すべてのユーザーがサーバー上のポート(ポートなど)を使用することを拒否するには 25
SMTPトラフィックの場合、次を使用できます deny out
その後にポート番号が続きます:
- sudo ufw deny out 25
OutputRule added
Rule added (v6)
これにより、サーバー上のすべての送信SMTPトラフィックがブロックされます。
ステップ7—ルールを削除する
ファイアウォールルールを削除する方法を知ることは、それらを作成する方法を知ることと同じくらい重要です。 削除するルールを指定するには、ルール番号または人間が読める形式(ルールが作成されたときに指定された方法と同様)の2つの方法があります。
番号によるUFWルールの削除
UFWルールをその番号で削除するには、最初にすべてのファイアウォールルールの番号付きリストを取得する必要があります。 次に示すように、UFW statusコマンドには、各ルールの横に番号を表示するオプションがあります。
- sudo ufw status numbered
Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
ポート80(HTTP)接続を許可するルール番号 2 を削除する場合は、次のようにUFW削除コマンドで指定できます。
- sudo ufw delete 2
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
これにより、確認のプロンプトが表示され、HTTP接続を許可するルール2が削除されます。 IPv6を有効にしている場合は、対応するIPv6ルールも削除する必要があることに注意してください。
名前によるUFWルールの削除
ルール番号を使用する代わりに、ルールのタイプ(通常はルールのタイプに基づく)で人間が読める形式でルールを参照することもできます。 allow
また deny
)およびこのルールのターゲットであったサービス名またはポート番号、または使用された場合はアプリケーションプロファイル名。 たとえば、を削除したい場合 allow
と呼ばれるアプリケーションプロファイルのルール Apache Full
以前に有効にされていた場合は、次を使用できます。
- sudo ufw delete allow "Apache Full"
OutputRule deleted
Rule deleted (v6)
The delete
コマンドは、名前またはポートでサービスを参照して作成されたルールに対しても同じように機能します。 たとえば、以前にHTTP接続を許可するルールを設定した場合 sudo ufw allow http
、これはあなたが言ったルールを削除する方法です:
- sudo ufw delete allow http
OutputRule deleted
Rule deleted (v6)
ルールを指定するときにサービス名はポート番号と交換可能であるため、同じルールを参照することもできます。 allow 80
、 それ以外の allow http
:
- sudo ufw delete allow 80
OutputRule deleted
Rule deleted (v6)
UFWルールを名前で削除する場合、IPv4ルールとIPv6ルールの両方が存在する場合は削除されます。
ステップ8—UFWステータスとルールの確認
次のコマンドを使用して、いつでもUFWのステータスを確認できます。
- sudo ufw status verbose
UFWが無効になっている場合(デフォルトでは無効)、次のように表示されます。
OutputStatus: inactive
UFWがアクティブな場合(手順3に従った場合)、出力にはアクティブであることが示され、設定されているルールが一覧表示されます。 たとえば、ファイアウォールがSSH(ポート)を許可するように設定されている場合 22
)どこからでも接続すると、出力は次のようになります。
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
使用 status
UFWがファイアウォールをどのように構成したかを確認したい場合はコマンド。
ステップ9— UFWの無効化またはリセット(オプション)
UFWを使用したくない場合は、次のコマンドで無効にできます。
- sudo ufw disable
OutputFirewall stopped and disabled on system startup
UFWで作成したルールはアクティブではなくなります。 いつでも実行できます sudo ufw enable
後でアクティブ化する必要がある場合。
すでにUFWルールを設定しているが、最初からやり直すことにした場合は、resetコマンドを使用できます。
- sudo ufw reset
OutputResetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'
これにより、UFWが無効になり、以前に定義されたルールがすべて削除されます。 これにより、UFWを新たに始めることができます。 いずれかの時点でデフォルトのポリシーを変更しても、デフォルトのポリシーは元の設定に変更されないことに注意してください。
結論
これで、ファイアウォールは(少なくとも)SSH接続を許可するように構成されました。 サーバーが機能し、安全になるように、不要な接続を制限しながら、サーバーが必要とするその他の着信接続を必ず許可してください。
より一般的なUFW構成については、 UFW Essentials:Common Firewall Rules andCommandsチュートリアルをご覧ください。