ファイアウォールがないと、ネットワークトラフィックにはルールや制限がありません。それにより、いくつかのネガティブな影響が生じます。Linuxシステムには、デフォルトのファイアウォール設定ツールであるUncomplicated Firewall(UFW)が付属しています。しかし、UFWファイアウォールをどのように設定しますか?リラックスしてください、このチュートリアルでカバーしています!
このチュートリアルでは、UFWを設定し、Linuxシステムにファイアウォールをセットアップしてネットワークを保護し、悪意のある行為を防ぎます。
準備はできましたか?続けて読んで始めましょう!
前提条件
このチュートリアルは実際のデモンストレーションです。一緒に進める場合は、以下のものを準備してください。
- Ubuntuマシン – このチュートリアルではUbuntu 20.04 LTSを使用しますが、他のLinuxディストリビューションでも構いません。
UFWのインストールとIPv6接続の有効化
UbuntuシステムにはUFWがパッケージ化されていますが、デフォルトではインストールされていません。まずはapt
パッケージマネージャーを使ってUFWをインストールし、IPv6接続を許可するように設定します。
1. ターミナルを開いて、以下のapt update
コマンドを実行して、ローカルパッケージインデックスを更新してください。更新中にすべてのプロンプト(-y
)を受け入れるため、ユーザーの介入が少なくなります。

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

3. お気に入りのテキストエディタでUFW構成ファイル(/etc/default/ufw)を開いてください。UFWはIPv6をサポートしていますが、ファイアウォールがIPv6経由での接続を受け入れるように構成されていることを確認する必要があります。
IPv4のみを有効にしている場合、自分自身をIPv6攻撃にさらしていることになります。
4. IPV6変数までスクロールし、値を以下に示すようにyesに設定し、変更を保存してエディタを終了してください。

5. 最後に、以下のコマンドを実行してUFWを無効にしてから再度有効にしてください。このコマンドはUFWサービスを再起動し、変更を反映させます。
コマンドが完了したら、ファイアウォールは今後、IPv4およびIPv6のファイアウォールルールセットを書き込むことができます。
ファイアウォールルールのデフォルトポリシーの構成
UFWを始めたばかりの場合は、ルールにデフォルトポリシーを設定することが推奨されます。デフォルトポリシーは、まだ特定のルールが定義されていないチェーンに適用されます。
UFWを設定して、すべての着信接続を拒否し、すべての送信接続を許可します。その結果、外部からマシンにアクセスしようとする人は拒否されますが、あなたはまだ自由に任意のウェブサイトやサーバーに接続することができます。
以下の`ufw`コマンドを実行して、デフォルトですべての着信接続を`deny`にします。

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

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

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

しかし、おそらくSSHのポート番号(22
)を指定したい場合は、代わりに次のコマンドを実行してください。
3. 次に、以下のコマンドを実行してUFWを有効にします。
確認プロンプトでYを入力し、以下に示すようにEnterキーを押してコマンドを続行してください。これでUFWはシステム上のパケットをフィルタリングし始めます。

4. 最後に、UFWファイアウォールのステータスを確認するために以下のいずれかのコマンドを実行してください。
- Status: active – ファイアウォールが現在実行中であることを示します。
- Logging: on (low) – UFWがファイアウォールによって処理されるすべてのパケットをログに記録していることを示します。
- デフォルト:deny(着信)、allow(送信)、disabled(ルーティング) – デフォルトポリシーはすべての着信接続を拒否し、すべての送信接続を許可することを示します。
- 新しいプロファイル:skip – ファイアウォールは現在、デフォルトのルールセットを使用していることを示します。

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

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

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

特定のポート範囲やIPアドレスからの接続を許可する
一部のアプリケーションは、サービスを提供するために複数のポートを使用します。おそらく開くポートの範囲があるか、特定のIPアドレスからの接続を許可する必要があります。その場合は、UFWファイアウォールにさらにルールを追加してください。
以下のコマンドを実行して、ポート5001から5009への着信接続を許可してください。常にポート範囲の後にプロトコル(tcp
またはudp
)を指定する必要があります。なぜなら、すべてのポートが両方のプロトコルで使用されているわけではないからです。
たとえば、一般的に使用されるTCPポートには80(HTTP)と443(HTTPS)があります。しかし、一般的なUDPポートには53(DNS)や67/68(DHCP)が含まれます。

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

特定のネットワークインターフェースからのトラフィックを許可する
UFWでは、eth0が最初のイーサネットインターフェースであり、wlan0が最初のWi-Fiインターフェースであるような特定のネットワークインターフェース上のトラフィックのみを許可することができます。
以下のいずれかのコマンドを実行して、eth0
およびwlan0
インターフェース上でのHTTP接続のみを許可してください。

UFWファイアウォールルールの削除
おそらく、いくつかのUFWファイアウォールルールにはもはや目的がないかもしれません。その場合、UFWからいくつかのルールを削除したい場合があります。ただし、削除するルールの番号または名前を知る必要があります。
1. UFWに追加されたルールの番号付きリストを取得するには、以下のコマンドを実行します。
以下のような出力から、ルールの番号または名前をメモしてください。

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

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

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

5. 最後に、ステップ1と同じように以下のコマンドを再実行してすべてのルールをリストします。
以下に示すように、5001:5010/tcp
ポート範囲、http
、および443
ポートのルールは削除されました。

UFWファイアウォールのリセット
大規模なルールセットを構成した後など、UFWをデフォルト設定にリセットする必要がある場合があります。アップデートにより設定が変更され、UFWの再構成と、可能な場合はスクラッチからやり直す必要があるかもしれません。
以下のufw reset
コマンドを実行して、すべてのファイアウォールルールをデフォルト設定にリセットします。このコマンドはUFWを無効にし、現在のファイアウォールルールをすべて削除します。
タイプ「Y」を入力し、Enter キーを押して UFW ファイアウォールをリセットし続けます。

リセットが完了すると、UFW の新規インストールが完全に無効になり、デフォルトポリシーも消えています。
以下のコマンドを実行して、UFW を再度有効にし、ファイアウォールルールをゼロから構成します。
UFW を使用しないことを決定した場合は、再度有効にする必要はありません。また、以下のコマンドを実行して UFW が無効になっていることを確認します。

結論
このチュートリアル全体を通じて、UFW を使用するとファイアウォールの設定があまり困難でないことがわかりました。これで、Ubuntu 上で UFW を使用して独自のルールを設定して実装する方法についての良い理解が得られるはずです。
さて、この新しい知識を活かして、Linux マシンでの UFW と Docker セキュリティについてさらに学ぶのはどうでしょうか?