Ubuntu 14.04でUFWを使用してファイアウォールを設定する方法

前書き

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

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

前提条件

このチュートリアルの使用を開始する前に、Ubuntuサーバーに別の非ルートスーパーユーザーアカウント(sudo権限を持つユーザー)を設定する必要があります。 Ubuntuでの初期サーバーセットアップ14.04チュートリアル。

UFWはデフォルトでUbuntuにインストールされます。 何らかの理由でアンインストールされた場合、 `+ apt-get`でインストールできます:

sudo apt-get install ufw

UFWでIPv6を使用する

UbuntuサーバーでIPv6が有効になっている場合、UFWがIPv4に加えてIPv6のファイアウォールルールを管理するようにIPv6をサポートするように構成されていることを確認します。 これを行うには、お気に入りのエディターでUFW構成を開きます。 nanoを使用します。

sudo nano /etc/default/ufw

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

/ etc / default / ufwの抜粋

...
IPV6=
...

保存して終了します。 `+ Ctrl-X `を押してファイルを終了し、 ` Y `で行った変更を保存し、 ` ENTER +`でファイル名を確認します。

UFWを有効にすると、IPv4とIPv6の両方のファイアウォールルールを記述するように構成されます。

このチュートリアルはIPv4を念頭に置いて書かれていますが、IPv6を有効にする限り正常に機能します。

UFWのステータスとルールを確認する

次のコマンドを使用して、いつでもUFWのステータスを確認できます。

sudo ufw status verbose

デフォルトでは、UFWは無効になっているため、次のように表示されます。

Output:Status: inactive

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

Output:Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

そのため、UFWがファイアウォールをどのように構成したかを確認する必要がある場合は、statusコマンドを使用します。

UFWを有効にする前に、SSH経由で接続できるようにファイアウォールを構成する必要があります。 デフォルトのポリシーの設定から始めましょう。

デフォルトポリシーのセットアップ

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

UFWルールをデフォルトに戻して、このチュートリアルを確実に実行できるようにします。 UFWで使用されるデフォルトを設定するには、次のコマンドを使用します。

sudo ufw default deny incoming
sudo ufw default allow outgoing

ご想像のとおり、これらのコマンドはデフォルトで着信接続を拒否し、発信接続を許可します。 これらのファイアウォールの既定値は、それ自体でパーソナルコンピューターに十分な場合がありますが、通常、サーバーは外部ユーザーからの着信要求に応答する必要があります。 次にそのことを検討します。

SSH接続を許可する

ここでUFWファイアウォールを有効にすると、すべての着信接続が拒否されます。 これは、正当な着信接続(SSHまたはHTTP接続など)を明示的に許可するルールを作成する必要があることを意味します。たとえば、サーバーがこれらのタイプの要求に応答する場合です。 クラウドサーバーを使用している場合は、サーバーに接続して管理できるように、着信SSH接続を許可することをお勧めします。

着信SSH接続を許可するようにサーバーを構成するには、次のUFWコマンドを使用できます。

sudo ufw allow ssh

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

サービス名の代わりに* port *を指定することで、実際に同等のルールを書くことができます。 たとえば、このコマンドは上記のコマンドと同じように機能します。

sudo ufw allow 22

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

sudo ufw allow

ファイアウォールが着信SSH接続を許可するように設定されたので、有効にすることができます。

UFWを有効にする

UFWを有効にするには、次のコマンドを使用します。

sudo ufw enable

「コマンドによって既存のssh接続が中断される可能性があります」という警告が表示されます。SSH接続を許可するファイアウォールルールが既に設定されているため、続行しても問題ありません。 `+ y +`でプロンプトに応答します。

ファイアウォールがアクティブになりました。 設定されているルールを確認するには、 `+ sudo ufw status verbose +`コマンドを自由に実行してください。

他の接続を許可する

ここで、サーバーが応答する必要がある他のすべての接続を許可する必要があります。 許可する接続は、特定のニーズによって異なります。 幸いなことに、サービス名またはポートに基づいて接続を許可するルールを作成する方法を既に知っています。これは、ポート22でSSHに対してすでに実行しています。

許可が必要な非常に一般的なサービスの例をいくつか示します。 すべての着信接続を許可する他のサービスがある場合は、この形式に従ってください。

HTTPポート80

暗号化されていないWebサーバーが使用するHTTP接続は、次のコマンドで許可できます。

sudo ufw allow http

ポート番号80を使用する場合は、次のコマンドを使用します。

sudo ufw allow 80

HTTPSポート443

暗号化されたWebサーバーが使用するHTTPS接続は、次のコマンドで許可できます。

sudo ufw allow https

ポート番号443を使用する場合は、次のコマンドを使用します。

sudo ufw allow 443

FTPポート21

暗号化されていないファイル転送に使用されるFTP接続(おそらく使用しないでください)は、次のコマンドで許可できます。

sudo ufw allow ftp

ポート番号21を使用する場合は、次のコマンドを使用します。

sudo ufw allow 21/tcp

特定のポート範囲を許可する

UFWでポート範囲を指定できます。 一部のアプリケーションは、単一のポートではなく複数のポートを使用します。

たとえば、ポート6000-6007を使用するX11接続を許可するには、次のコマンドを使用します。

sudo ufw allow :/tcp
sudo ufw allow :/udp

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

特定のIPアドレスを許可する

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

sudo ufw allow from

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

sudo ufw allow from  to any port

サブネットを許可する

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

sudo ufw allow from /

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

sudo ufw allow from / to any port 22

特定のネットワークインターフェイスへの接続を許可する

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

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

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

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

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

sudo ufw allow in on  to any port

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

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

sudo ufw allow in on  to any port

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

接続を拒否

着信接続のデフォルトポリシーを変更していない場合、UFWはすべての着信接続を拒否するように設定されます。 一般に、これにより、特定のポートとIPアドレスを明示的に許可するルールを作成する必要があるため、安全なファイアウォールポリシーの作成プロセスが簡素化されます。 ただし、ソースIPアドレスまたはサブネットに基づいて特定の接続を拒否したい場合があります。おそらく、サーバーがそこから攻撃されていることがわかっているためです。 また、デフォルトの着信ポリシーを* allow (セキュリティの観点から推奨されません)に変更したい場合、許可したくないサービスまたはIPアドレスに対して deny *ルールを作成する必要がありますの接続。

*拒否*ルールを作成するには、上記で説明したコマンドを使用できますが、「allow」を「deny」に置き換える必要があります。

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

sudo ufw deny http

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

sudo ufw deny from

他の*拒否*ルールの作成にヘルプが必要な場合は、前の*許可*ルールを見て、それに応じて更新してください。

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

ルールを削除

ファイアウォールルールを削除する方法を知ることは、ルールを作成する方法を知ることと同じくらい重要です。 削除するルールを指定する2つの異なる方法があります。ルール番号または実際のルール(ルールが作成されたときに指定された方法に似ています)。 UFWを初めて使用する場合は、削除する実際のルールを記述するよりも簡単であるため、*ルール番号で削除*メソッドから始めます。

ルール番号別

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

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のdeleteコマンドで指定できます。

sudo ufw delete

これにより、確認プロンプトが表示され、ルール2が削除され、HTTP接続が許可されます。 IPv6を有効にしている場合、対応するIPv6ルールも削除することに注意してください。

実際のルールによる

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

sudo ufw delete

また、サービス名ではなく「80を許可」でルールを指定することもできます。

sudo ufw delete

このメソッドは、IPv4とIPv6の両方のルールが存在する場合、それらを削除します。

UFWを無効にする方法(オプション)

何らかの理由でUFWを使用したくない場合は、次のコマンドでUFWを無効にできます。

sudo ufw disable

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

UFWルールのリセット(オプション)

すでに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]

がんばろう!