firewalldとは?
firewalldの概要
Linuxのサーバー構築におけるセキュリティ対策の1つがファイアウォールになります。最近のlinuxにおけるファイアウォールのデファクトスタンダードになりつつある機能です。少なくとも最近のRed Hat系ではiptablesではなくfirewalldが使われています。
続いて特徴を簡単に述べます。ゾーンベースの構成としてネットワークインターフェースを異なる「ゾーン」に割り当てることで、異なるセキュリティレベルを簡単に管理できます。例えば、ホームネットワークとパブリックネットワークで異なるポリシーを適用することが可能です。またサービスベースのフィルタリングが可能で 個々のポート番号だけでなく、サービス名を使ってアクセス制御を行います。
ゾーンの概念
firewalldではゾーンの概念を理解することが重要です。この概念をしっかり理解することで柔軟なファイアウォール設定が可能となります。
firewalldのゾーンは特定のセキュリティレベルを持つ論理的な領域として定義されています。ざくっと言うと用途別のテンプレートみたいなものと言えます。これらのゾーンにはネットワークインターフェースやネットワークソースを割り当てることができ、それに基づいてトラフィック制御を行います。各ゾーンには特定のルールセットがあり、許可されるサービス、ポート、プロトコルなどが設定されています。文章では伝えにくいので具体的なゾーンを紹介します。参考にしたサイトはこちらです。
ゾーン | 説明 |
---|---|
trusted | すべてのトラフィックを許可します。信頼できるネットワークに使用します。 |
home | 信頼できるネットワーク(家庭内ネットワーク)用。ほとんどのトラフィックを許可しますが、信頼度の低いトラフィックはブロックします。 |
work | 仕事用のネットワーク用。安全性と柔軟性のバランスが取れています。 |
public | 公共のネットワーク用。ほとんどのトラフィックをブロックし、基本的なインターネットアクセスのみを許可します。 |
block | すべての着信トラフィックをブロックし、返信トラフィックのみを許可します。 |
dmz | 非武装地帯用。公開するサービスのみを許可し、他のすべてのトラフィックをブロックします。 |
drop | すべての着信トラフィックをドロップし、返信も送信もしません。 |
またfirewalldのデフォルトゾーンは、特定のゾーンが明示的に指定されていないトラフィックやインターフェースに適用されるゾーンです。デフォルトゾーンはユーザーの要件に応じて変更することが可能です。デフォルトゾーンの設定は非常に重要で、何も指定されていない場合のセキュリティポリシーを決定します。例えば、家庭内ネットワークでは許可されるトラフィックが多く設定されている一方で、公共のネットワークでは制限が厳しくなるように設定することができます。
firewalldの基本的な使い方
前提
ubuntu 20.04.3 LTS
動作確認
firewalldの動作を確認するコマンドです。systemctl status firewalld
を実行しても現在の状態を確認することが可能です。
firewall-cmd --state
running
ゾーンの確認
オプションに--get-active-zones
を指定することでアクティブなゾーンを確認することができます。。下の例ではeth0
インターフェースがpublic
ゾーンに、wlan0
インターフェースがhome
ゾーンに割り当てられていることを示しています。
firewall-cmd --get-active-zones
public
interfaces: eth0
home
interfaces: wlan0
一方、オプションに--get-default-zone
を指定することでデフォルトのゾーンを確認することができます。
firewall-cmd --get-default-zone
public
なお、アクティブゾーンとデフォルトゾーンは下記のような違いがあります。
項目 | アクティブゾーン | デフォルトゾーン |
---|---|---|
定義 | 現在アクティブなインターフェースに割り当てられているゾーン。 | 新しいインターフェースや特定のゾーンが指定されていないトラフィックに適用されるゾーン。 |
用途 | 実際に使用中のネットワークインターフェースごとのセキュリティ設定を示す。 | デフォルトで適用されるセキュリティポリシーを決定。 |
オプションにfirewall-cmd --list-all
を指定すると現在のファイアウォールの設定を確認することができます。確認すべき項目は7行目のservicesと8行目のportsになります。
firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ftp http https
ports: 2222/tcp 10000-10100/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
設定コマンド
特定のゾーンに対して設定を追加していきます。
--add-port
でポート開放設定を、--add-service
でサービスの追加設定をすることができます。設定の削除ですが、サービスの設定削除は--remove-service
オプションで、ポート開放の設定解除はオプションで実行することができます。
なお、--permanent
を指定しないと再起動時に設定が戻ってしまうので注意してください。設定を恒久的に反映させるためにはfirewall-cmd --reload
を実行します。
firewall-cmd --add-port=2222/tcp --zone=public --permanent
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --remove-service=ssh --zone=public --permanent
firewall-cmd --remove-port=8080/tcp --zone=public --permanent
firewall-cmd --reload
まとめ
本記事ではfirewalldの基本的な使い方を解説しました。ゾーンの考え方を意識して設定するので少し慣れが必要ですが、慣れればある程度サクッと設定ができるのではないかと思います。ここで紹介した内容をもとにぜひlinuxのセキュリティを万全にしてくださいね。