序章

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

このチュートリアルでは、Ubuntu14.04でUFWを使用してファイアウォールを設定する方法を説明します。

前提条件

このチュートリアルの使用を開始する前に、Ubuntuサーバーにroot以外のスーパーユーザーアカウント(sudo権限を持つユーザー)を設定しておく必要があります。 これを行う方法を学ぶには、 Ubuntu 14.04を使用したサーバーの初期設定チュートリアルの少なくとも手順1〜3を完了してください。

UFWはデフォルトでUbuntuにインストールされます。 何らかの理由でアンインストールされている場合は、apt-getを使用してインストールできます。

  1. sudo apt-get install ufw

UFWでのIPv6の使用

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

  1. sudo nano /etc/default/ufw

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

/ etc / default/ufwの抜粋
...
IPV6=yes
...

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

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

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

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

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

  1. 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で使用されるデフォルトを設定するには、次のコマンドを使用します。

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

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

SSH接続を許可する

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

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

  1. sudo ufw allow ssh

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

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

  1. sudo ufw allow 22

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

  1. sudo ufw allow 2222

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

UFWを有効にする

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

  1. sudo ufw enable

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

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

他の接続を許可する

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

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

HTTP-ポート80

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

  1. sudo ufw allow http

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

  1. sudo ufw allow 80

HTTPS-ポート443

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

  1. sudo ufw allow https

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

  1. sudo ufw allow 443

FTP-ポート21

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

  1. sudo ufw allow ftp

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

  1. sudo ufw allow 21/tcp

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

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

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

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

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

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

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

  1. sudo ufw allow from 15.15.15.51

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

sudo ufw allow from 15.15.15.51 to any port 22

サブネットを許可する

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

  1. sudo ufw allow from 15.15.15.0/24

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

sudo ufw allow from 15.15.15.0/24 to any port 22

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

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

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

  1. ip addr
Output Excerpt:
... 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」や「eth1」などの名前が付けられています。

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

  1. sudo ufw allow in on eth0 to any port 80

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

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

  1. sudo ufw allow in on eth1 to any port 3306

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

接続を拒否する

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

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

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

  1. sudo ufw deny http

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

sudo ufw deny from 15.15.15.51

他のdenyルールの作成についてサポートが必要な場合は、以前の allow ルールを確認し、それに応じて更新してください。

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

ルールを削除する

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

ルール番号別

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

  1. 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削除コマンドで指定できます。

  1. sudo ufw delete 2

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

実際のルールによる

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

  1. sudo ufw delete allow http

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

  1. sudo ufw delete allow 80

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

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

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

  1. sudo ufw disable

UFWで作成したルールはアクティブではなくなります。 後でアクティブ化する必要がある場合は、いつでもsudo ufw enableを実行できます。

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

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

  1. sudo ufw reset

これにより、UFWが無効になり、以前に定義されたルールがすべて削除されます。 いずれかの時点で変更した場合、デフォルトのポリシーは元の設定に変更されないことに注意してください。 これにより、UFWを新たに始めることができます。

結論

これで、(少なくとも)SSH接続を許可するようにファイアウォールを構成する必要があります。 サーバーが機能して安全になるように、不要な接続を制限しながら、サーバーが他の着信接続を許可するようにしてください。

より一般的なUFW構成については、次のチュートリアルをご覧ください。 UFW Essentials:一般的なファイアウォールルールとコマンド

幸運を!