Linux に UFW ファイアウォールをセットアップする方法

ファイアウォールがないと、ネットワークトラフィックにはルールや制限がありません。それにより、いくつかのネガティブな影響が生じます。Linuxシステムには、デフォルトのファイアウォール設定ツールであるUncomplicated Firewall(UFW)が付属しています。しかし、UFWファイアウォールをどのように設定しますか?リラックスしてください、このチュートリアルでカバーしています!

このチュートリアルでは、UFWを設定し、Linuxシステムにファイアウォールをセットアップしてネットワークを保護し、悪意のある行為を防ぎます。

準備はできましたか?続けて読んで始めましょう!

前提条件

このチュートリアルは実際のデモンストレーションです。一緒に進める場合は、以下のものを準備してください。

  • Ubuntuマシン – このチュートリアルではUbuntu 20.04 LTSを使用しますが、他のLinuxディストリビューションでも構いません。

UFWのインストールとIPv6接続の有効化

UbuntuシステムにはUFWがパッケージ化されていますが、デフォルトではインストールされていません。まずはaptパッケージマネージャーを使ってUFWをインストールし、IPv6接続を許可するように設定します。

1. ターミナルを開いて、以下のapt updateコマンドを実行して、ローカルパッケージインデックスを更新してください。更新中にすべてのプロンプト(-y)を受け入れるため、ユーザーの介入が少なくなります。

sudo apt update -y
Updating the System Package

2. 次に、以下のコマンドを実行して、システムにUFW(install uwf)をインストールしてください。インストール中にすべてのプロンプト(-y)を受け入れます。

sudo apt install ufw -y
Installing UFW on Ubuntu

3. お気に入りのテキストエディタでUFW構成ファイル(/etc/default/ufw)を開いてください。UFWはIPv6をサポートしていますが、ファイアウォールがIPv6経由での接続を受け入れるように構成されていることを確認する必要があります。

IPv4のみを有効にしている場合、自分自身をIPv6攻撃にさらしていることになります。

4. IPV6変数までスクロールし、値を以下に示すようにyesに設定し、変更を保存してエディタを終了してください。

Enabling IPV6 in the UFW Configuration File

5. 最後に、以下のコマンドを実行してUFWを無効にしてから再度有効にしてください。このコマンドはUFWサービスを再起動し、変更を反映させます。

コマンドが完了したら、ファイアウォールは今後、IPv4およびIPv6のファイアウォールルールセットを書き込むことができます。

sudo ufw disable && sudo ufw enable

ファイアウォールルールのデフォルトポリシーの構成

UFWを始めたばかりの場合は、ルールにデフォルトポリシーを設定することが推奨されます。デフォルトポリシーは、まだ特定のルールが定義されていないチェーンに適用されます。

UFWを設定して、すべての着信接続を拒否し、すべての送信接続を許可します。その結果、外部からマシンにアクセスしようとする人は拒否されますが、あなたはまだ自由に任意のウェブサイトやサーバーに接続することができます。

以下の`ufw`コマンドを実行して、デフォルトですべての着信接続を`deny`にします。

sudo ufw default deny incoming
Denying Incoming Network Traffics

次に、以下のコマンドを実行して、デフォルトですべての送信接続を`allow`にします。

sudo ufw default allow outgoing
Allowing Outgoing Network Traffics

UFWファイアウォールでSSH接続を許可する

UFWファイアウォールでデフォルトポリシーを設定して、すべての着信トラフィックを拒否しました。そして、「allow all-deny all」ルールは通常のユーザー向けの良い設定です。しかし、サーバーを実行している場合はどうでしょうか?特定のトラフィックを許可する必要があります。UFWファイアウォールでSSH接続を許可すると、特定のトラフィックの送受信が可能になります。

ポート22で着信SSH接続を許可するSSHサーバーを設定します。しかし、なぜポート22なのでしょうか?Unix系システムでは、SSHデーモンがデフォルトでポート22でリスニングされているため、デフォルトのSSHポートを使用することが、少しでも生活を楽にする良い習慣です。

1. 以下のコマンドを実行して、システムにOpenSSHサーバー(install openssh-server)をインストールし、OpenSSHサーバー(start ssh)を起動します。

sudo apt install openssh-server -y
sudo systemctl start ssh

2. 続けて、以下のコマンドを実行して、着信SSH接続を許可します。ポート22を指定しなくても、UFWがSSH用のポートを知っているので十分です。

sudo ufw allow ssh
Allowing SSH connection

/etc/servicesファイルには、システム上で利用可能なすべてのサービスのリストが含まれています。テキストエディタでファイルを開き、sshまでスクロールしてポート番号(22)がサービスの説明の一部として表示されていることを確認してください。

Previewing the /etc/services file

しかし、おそらくSSHのポート番号(22)を指定したい場合は、代わりに次のコマンドを実行してください。

sudo ufw allow 22

3. 次に、以下のコマンドを実行してUFWを有効にします。

sudo ufw enable

確認プロンプトでYを入力し、以下に示すようにEnterキーを押してコマンドを続行してください。これでUFWはシステム上のパケットをフィルタリングし始めます。

Enabling UFW

4. 最後に、UFWファイアウォールのステータスを確認するために以下のいずれかのコマンドを実行してください。

## インターフェースやパケットの現在の進捗など、詳細な情報を表示します
## 各ルールには番号と対応する許可または拒否のステータスが表示されます
sudo ufw status verbose
## 番号付きモードは、ここでルールセットを削除しようとしているときに便利です
コマンドをverboseオプションとともに実行すると、以下のような出力が表示されます:
sudo ufw status numbered

  • Status: active – ファイアウォールが現在実行中であることを示します。
  • Logging: on (low) – UFWがファイアウォールによって処理されるすべてのパケットをログに記録していることを示します。
  • デフォルト:deny(着信)、allow(送信)、disabled(ルーティング) – デフォルトポリシーはすべての着信接続を拒否し、すべての送信接続を許可することを示します。
  • 新しいプロファイル:skip – ファイアウォールは現在、デフォルトのルールセットを使用していることを示します。
Checking verbose UFW firewall status

次のコマンドをnumberedオプションで実行すると、以下の出力が表示されます。番号付きルールとそれに対応するALLOWまたはDENYステータスのリストが表示されます。

Viewing the UW Firewall status in a numbered list

HTTPおよびHTTPS接続の許可

この時点では、UFWファイアウォールでSSH接続のみを許可していますが、これによりサーバーの機能が制限されます。HTTPやHTTPSなどの他の種類の接続を許可し、UFWファイアウォールにさらにルールを追加してください。

次のコマンドのいずれかを実行して、着信HTTP接続を許可します。

## HTTP接続はポート80を使用します(安全ではありません)
sudo ufw allow 80
sudo ufw allow http
Allowing HTTP connections

次に、以下のコマンドのいずれかを実行して、着信HTTPS接続を許可します。

sudo ufw allow https
## HTTPS接続はポート443を使用します(安全です)
sudo ufw allow 443
Allowing incoming HTTPS connections.

特定のポート範囲やIPアドレスからの接続を許可する

一部のアプリケーションは、サービスを提供するために複数のポートを使用します。おそらく開くポートの範囲があるか、特定のIPアドレスからの接続を許可する必要があります。その場合は、UFWファイアウォールにさらにルールを追加してください。

以下のコマンドを実行して、ポート5001から5009への着信接続を許可してください。常にポート範囲の後にプロトコル(tcpまたはudp)を指定する必要があります。なぜなら、すべてのポートが両方のプロトコルで使用されているわけではないからです。

たとえば、一般的に使用されるTCPポートには80(HTTP)と443(HTTPS)があります。しかし、一般的なUDPポートには53(DNS)や67/68(DHCP)が含まれます。

sudo ufw allow 5001:5010/tcp
sudo ufw allow 5001:5010/udp
Allowing traffic on 5001:5010 port range

特定のIPアドレスからのSSH接続を許可する場合は、以下のコマンドを実行してください。このコマンドは、192.168.1.2 IPアドレスからのSSH接続(ポート22)のみを許可します。

sudo ufw allow from 192.168.1.2 to any port 22
Allowing SSH Connections from Specific IP Address

特定のネットワークインターフェースからのトラフィックを許可する

UFWでは、eth0が最初のイーサネットインターフェースであり、wlan0が最初のWi-Fiインターフェースであるような特定のネットワークインターフェース上のトラフィックのみを許可することができます。

以下のいずれかのコマンドを実行して、eth0およびwlan0インターフェース上でのHTTP接続のみを許可してください。

## eth0インターフェース上でのHTTP接続のみを許可
sudo ufw allow in on eth0 to any port 80
## wlan0インターフェース上でのHTTP接続のみを許可
sudo ufw allow in on wlan0 to any port 80
Allowing traffic on a specific interface

UFWファイアウォールルールの削除

おそらく、いくつかのUFWファイアウォールルールにはもはや目的がないかもしれません。その場合、UFWからいくつかのルールを削除したい場合があります。ただし、削除するルールの番号または名前を知る必要があります。

1. UFWに追加されたルールの番号付きリストを取得するには、以下のコマンドを実行します。

sudo ufw status numbered

以下のような出力から、ルールの番号または名前をメモしてください。

Previewing all the rules

2. 次に、以下のコマンドを実行して、5001:5010/tcpポート範囲であるルール番号4削除します。

sudo ufw delete 4
Deleting a Rule by Rule Number

3. ルールの実際の名前とallowステータスでルールを削除するには、以下のコマンドを実行します。この例では、httpルールを削除するために次のコマンドを実行します。

sudo ufw delete allow http
Deleting a Rule by Rule Name (http)

4. 次に、allowステータスとともにポート番号(443)を指定してルールを削除するために、以下のコマンドを実行します。

sudo ufw delete allow 443
Deleting a Rule by Port Number (443)

5. 最後に、ステップ1と同じように以下のコマンドを再実行してすべてのルールをリストします。

sudo ufw status numbered

以下に示すように、5001:5010/tcpポート範囲、http、および443ポートのルールは削除されました。

Checking the firewall rules

UFWファイアウォールのリセット

大規模なルールセットを構成した後など、UFWをデフォルト設定にリセットする必要がある場合があります。アップデートにより設定が変更され、UFWの再構成と、可能な場合はスクラッチからやり直す必要があるかもしれません。

以下のufw resetコマンドを実行して、すべてのファイアウォールルールをデフォルト設定にリセットします。このコマンドはUFWを無効にし、現在のファイアウォールルールをすべて削除します。

sudo ufw reset

タイプ「Y」を入力し、Enter キーを押して UFW ファイアウォールをリセットし続けます。

Resetting UFW

リセットが完了すると、UFW の新規インストールが完全に無効になり、デフォルトポリシーも消えています。

以下のコマンドを実行して、UFW を再度有効にし、ファイアウォールルールをゼロから構成します。

sudo ufw enable

UFW を使用しないことを決定した場合は、再度有効にする必要はありません。また、以下のコマンドを実行して UFW が無効になっていることを確認します。

sudo ufw disable
Disabling UFW firewall

結論

このチュートリアル全体を通じて、UFW を使用するとファイアウォールの設定があまり困難でないことがわかりました。これで、Ubuntu 上で UFW を使用して独自のルールを設定して実装する方法についての良い理解が得られるはずです。

さて、この新しい知識を活かして、Linux マシンでの UFW と Docker セキュリティについてさらに学ぶのはどうでしょうか?

Source:
https://adamtheautomator.com/ufw-firewall/