前書き
UFW(Uncomplicated Firewall)は、ファイアウォールの構成プロセスを簡素化することを目的としたiptables
へのインターフェースです。 iptables
は堅実で柔軟なツールですが、初心者がファイアウォールを適切に構成するために使用する方法を学ぶのは難しい場合があります。 ネットワークの保護を開始しようとしていて、使用するツールがわからない場合は、UFWが適切な選択である可能性があります。
このチュートリアルでは、Ubuntu 14.04でUFWを使用してファイアウォールを設定する方法を示します。
前提条件
このチュートリアルの使用を開始する前に、Ubuntuサーバーに別のルート以外のスーパーユーザーアカウント(sudo権限を持つユーザー)を設定する必要があります。 Initial Server Setup with Ubuntu 14.04チュートリアルの少なくともステップ1〜3を完了することで、これを行う方法を学ぶことができます。
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 excerpt
...
IPV6=yes
...
保存して終了します。 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 2222
ファイアウォールが着信SSH接続を許可するように設定されたので、有効にすることができます。
UFWを有効にする
UFWを有効にするには、次のコマンドを使用します。
sudo ufw enable
「コマンドによって既存のssh接続が中断される可能性があります」という警告が表示されます。SSH接続を許可するファイアウォールルールが既に設定されているため、続行しても問題ありません。 プロンプトにy
で応答します。
ファイアウォールがアクティブになりました。 sudo ufw status verbose
コマンドを実行して、設定されているルールを確認してください。
他の接続を許可する
ここで、サーバーが応答する必要がある他のすべての接続を許可する必要があります。 許可する接続は、特定のニーズによって異なります。 幸いなことに、サービス名またはポートに基づいて接続を許可するルールを作成する方法をすでに知っています。これは、ポート22でSSHに対してすでに実行しています。
許可が必要な非常に一般的なサービスの例をいくつか示します。 すべての着信接続を許可する他のサービスがある場合は、この形式に従ってください。
[[http—port-80]] === HTTP—port 80
暗号化されていないWebサーバーが使用するHTTP接続は、次のコマンドで許可できます。
sudo ufw allow http
ポート番号80を使用する場合は、次のコマンドを使用します。
sudo ufw allow 80
[[https—port-443]] === HTTPS—ポート443
暗号化されたWebサーバーが使用するHTTPS接続は、次のコマンドで許可できます。
sudo ufw allow https
ポート番号443を使用する場合は、次のコマンドを使用します。
sudo ufw allow 443
[[ftp—port-21]] === FTP—port 21
暗号化されていないファイル転送に使用されるFTP接続(おそらく使用しないはずです)は、次のコマンドで許可できます。
sudo ufw allow ftp
ポート番号21を使用する場合は、次のコマンドを使用します。
sudo ufw allow 21/tcp
特定のポート範囲を許可する
UFWでポート範囲を指定できます。 一部のアプリケーションは、単一のポートではなく複数のポートを使用します。
たとえば、ポート6000-6007を使用するX11接続を許可するには、次のコマンドを使用します。
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
UFWでポート範囲を指定する場合は、ルールを適用するプロトコル(tcp
またはudp
)を指定する必要があります。 プロトコルを指定しないと両方のプロトコルが許可されるだけなので、これについてはこれまで言及していませんでした。
特定のIPアドレスを許可する
UFWを使用する場合、IPアドレスも指定できます。 たとえば、15.15.15.51
の職場または自宅のIPアドレスなど、特定のIPアドレスからの接続を許可する場合は、「from」を指定してからIPアドレスを指定する必要があります。
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アドレスを許可する場合は、次のコマンドを使用できます。
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」の後にネットワークインターフェースの名前を指定することで作成できます。
続行する前に、ネットワークインターフェイスを検索することをお勧めします。 これを行うには、次のコマンドを使用します。
ip addr
Output Excerpt:...
2: eth0: mtu 1500 qdisc pfifo_fast state
...
3: eth1: mtu 1500 qdisc noop state DOWN group default
...
強調表示された出力は、ネットワークインターフェイス名を示しています。 通常、「eth0」や「eth1」などの名前が付けられます。
したがって、サーバーにeth0
というパブリックネットワークインターフェイスがある場合は、次のコマンドを使用してサーバーへのHTTPトラフィック(ポート80)を許可できます。
sudo ufw allow in on eth0 to any port 80
そうすることで、サーバーがパブリックインターネットからHTTPリクエストを受信できるようになります。
または、たとえば、MySQLデータベースサーバー(ポート3306)がプライベートネットワークインターフェイスeth1
で接続をリッスンするようにする場合は、次のコマンドを使用できます。
sudo ufw allow in on eth1 to any port 3306
これにより、プライベートネットワーク上の他のサーバーがMySQLデータベースに接続できるようになります。
接続を拒否
着信接続のデフォルトポリシーを変更していない場合、UFWはすべての着信接続を拒否するように設定されます。 一般に、これにより、特定のポートとIPアドレスを明示的に許可するルールを作成する必要があるため、安全なファイアウォールポリシーの作成プロセスが簡素化されます。 ただし、ソースIPアドレスまたはサブネットに基づいて特定の接続を拒否したい場合があります。これは、サーバーがそこから攻撃されていることを知っている可能性があるためです。 また、デフォルトの受信ポリシーをallowに変更する場合(セキュリティ上の理由から推奨されていません)、使用しないサービスまたはIPアドレスに対してdenyルールを作成する必要があります。の接続を許可したい。
denyルールを作成するには、「allow」を「deny」に置き換える必要があることを除いて、上記で説明したコマンドを使用できます。
たとえば、HTTP接続を拒否するには、次のコマンドを使用できます。
sudo ufw deny http
または、15.15.15.51
からのすべての接続を拒否する場合は、次のコマンドを使用できます。
sudo ufw deny from 15.15.15.51
他のdenyルールの作成についてサポートが必要な場合は、前のallowルールを確認し、それに応じて更新してください。
では、ルールを削除する方法を見てみましょう。
ルールを削除
ファイアウォールルールを削除する方法を知ることは、ルールを作成する方法を知ることと同じくらい重要です。 削除するルールを指定する2つの異なる方法があります。ルール番号または実際のルール(ルールが作成されたときに指定された方法に似ています)。 UFWを初めて使用する場合は、削除する実際のルールを作成するよりも簡単なので、delete by rule numberメソッドから始めます。
ルール番号別
ルール番号を使用してファイアウォールルールを削除する場合、最初にすることはファイアウォールルールのリストを取得することです。 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
これにより、確認プロンプトが表示され、ルール2が削除され、HTTP接続が許可されます。 IPv6を有効にしている場合、対応するIPv6ルールも削除することに注意してください。
実際のルールによる
ルール番号の代わりに、削除する実際のルールを指定します。 たとえば、「allow http」ルールを削除する場合、次のように記述できます。
sudo ufw delete allow http
また、サービス名ではなく「80を許可」でルールを指定することもできます。
sudo ufw delete allow 80
このメソッドは、IPv4とIPv6の両方のルールが存在する場合、それらを削除します。
UFWを無効にする方法(オプション)
何らかの理由でUFWを使用したくない場合は、次のコマンドでUFWを無効にできます。
sudo ufw disable
UFWで作成したルールは無効になります。 後でアクティブ化する必要がある場合は、いつでもsudo ufw enable
を実行できます。
UFWルールのリセット(オプション)
すでにUFWルールが設定されているが、最初からやり直すことにした場合は、resetコマンドを使用できます。
sudo ufw reset
これにより、UFWが無効になり、以前に定義されたルールが削除されます。 デフォルトのポリシーは、いつでも変更しても元の設定に変更されないことに注意してください。 これにより、UFWで新たなスタートを切ることができます。
結論
これで、(少なくとも)SSH接続を許可するようにファイアウォールを構成する必要があります。 サーバーが機能し、安全であるように、不要な接続を制限しながら、サーバーの他の着信接続を必ず許可してください。
より一般的なUFW構成については、次のチュートリアルをご覧ください:UFW Essentials: Common Firewall Rules and Commands
がんばろう!