本ページでは、firewalldのゾーン設定について説明します。
ゾーンの概要
ゾーンとは、ネットワークインターフェース(インターフェース)をまとめたグループのような概念です。1つのゾーンに複数のインターフェースを割り当てることができます。firewalldでは、アクセス制御を直接インターフェースに行わず、ゾーンに対して行います。
ゾーンの使い道として、複数のインターフェースを搭載しているサーバで、接続しているネットワークごとに制限する通信を分けたい場合に使用します。
例えば、管理用ネットワークに接続しているインターフェースが所属するゾーンはSSHの通信を許可、サービス提供用のインターフェースが所属するゾーンは不許可といった使い方ができます。
ゾーンの種類
firewalldには、いくつかのゾーンがデフォルト設定として入っています。代表的なゾーンは以下の通りです。
- public :
ssh
、dhcpv6-client
がデフォルトで許可 - external :
ssh
がデフォルトで許可。NAPT(IPマスカレード)が有効化されている - dmz :
ssh
がデフォルトで許可 - internal :
dhcpv6-client
、ipp-client
、mdns
、samba-client
、ssh
がデフォルトで許可 - trusted : 全てのパケットが許可
CentOSの初期設定では、全てのインターフェースはデフォルトでpublic
に所属します。OSインストール直後でもSSH接続できるのは、publicがssh
サービスを許可しているためです。
新たにゾーンを定義する場合は、用途に応じて以下の3つのゾーンを定義することをお勧めします。命名規則を合わせることで、管理がしやすくなります。
- untrust : 外部ネットワークから通信を受け付けるサービス用インターフェース向けゾーン
- trust : 内部ネットワークから通信を受け付けるサービス用インターフェース向けゾーン
- mgmt : 全機器共通の管理用インターフェース向けゾーン
ゾーンの一覧確認
以下のコマンドで、firewalldに設定されているゾーンの一覧が表示されます。
# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
サーバのインターフェースが所属し有効になっているゾーンを表示する場合、以下のコマンドを実行します。
以下の例では、public
ゾーンが有効状態で、enp0s3
とenp0s8
のインターフェースが所属していることがわかります。
# firewall-cmd --get-active-zones
public
interfaces: enp0s3 enp0s8
ゾーンの追加、削除
新たにゾーンを定義するには、以下のコマンドを実行します。なお、firewalldの設定を変更する場合、--permanent
をコマンドに付与することで、設定を永続化できます。
以下の例では、管理用ネットワーク向けにmgmt
という名前のゾーンを追加しています。
# firewall-cmd --permanent --new-zone mgmt
success
# firewall-cmd --reload
success
以下のコマンドを実行し、mgmt
がゾーン一覧に追加されていることを確認します。
# firewall-cmd --get-zones
block dmz drop external home internal mgmt public trusted work
上記とは逆にゾーンを削除する場合は、以下のコマンドを実行します。
# firewall-cmd --permanent --delete-zone mgmt
success
# firewall-cmd --reload
success
以下のコマンドを実行し、mgmt
がゾーン一覧から削除されていることを確認します。
# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
ゾーンへのインターフェース割り当て、割り当て解除
定義済みのゾーンにインターフェースを割り当てるには、以下のコマンドを実行します。なお、本操作は即時反映されるため、firewall-cmd --reload
による設定のリロードは不要です。
以下の例では、mgmt
のゾーンにenp0s3
のインターフェースを割り当てています。
# firewall-cmd --permanent --zone=mgmt --change-interface=enp0s3
success
以下のコマンドを実行し、mgmt
のゾーンにenp0s3
のインターフェースが割り当てられていることを確認します。
# firewall-cmd --get-active-zones
public
interfaces: enp0s8
mgmt
interfaces: enp0s3
なお、firewalldの管理下に置かれていないインターフェースをゾーンに割り当てる場合、以下のコマンドを実行します。
以下の例では、mgmt
のゾーンにenp0s9
のインターフェースを割り当てています。
# firewall-cmd --permanent --zone=mgmt --add-interface=enp0s9
success
以下のコマンドを実行し、mgmt
のゾーンにenp0s9
のインターフェースが新たに割り当てられていることを確認します。
# firewall-cmd --get-active-zones
public
interfaces: enp0s8
mgmt
interfaces: enp0s3 enp0s9