本ページでは、firewalldのゾーン設定について説明します。

ゾーンの概要

ゾーンとは、ネットワークインターフェース(インターフェース)をまとめたグループのような概念です。1つのゾーンに複数のインターフェースを割り当てることができます。firewalldでは、アクセス制御を直接インターフェースに行わず、ゾーンに対して行います。

ゾーンの使い道として、複数のインターフェースを搭載しているサーバで、接続しているネットワークごとに制限する通信を分けたい場合に使用します。
例えば、管理用ネットワークに接続しているインターフェースが所属するゾーンはSSHの通信を許可、サービス提供用のインターフェースが所属するゾーンは不許可といった使い方ができます。

ゾーンの種類

firewalldには、いくつかのゾーンがデフォルト設定として入っています。代表的なゾーンは以下の通りです。

  • public : sshdhcpv6-clientがデフォルトで許可
  • external : sshがデフォルトで許可。NAPT(IPマスカレード)が有効化されている
  • dmz : sshがデフォルトで許可
  • internal : dhcpv6-clientipp-clientmdnssamba-clientsshがデフォルトで許可
  • 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ゾーンが有効状態で、enp0s3enp0s8のインターフェースが所属していることがわかります。

# 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