Linuxサーバー

firewalldの設定方法

更新日:

RHEL7やCentOS7からfirewalldサービスがデフォルトのファイアーウォールになりました(これ以前はiptablesが使われていました)。本記事ではこのfirewalldサービスの基本的な設定方法を紹介したいと思います。

firewalldは根本的な思想が刷新され、ゾーンという概念が新たに追加されました。これにより設定の仕方がiptablesのときと全く異なります。firewalldでネットワークはゾーンに分けられ、ゾーンに所属するネットワークインターフェイスやパケットフィルタリングのルールを追加する形になっています。

iptablesではちょっとした設定を行うにも、ある程度ネットワークの知識が必要でしたが、firewalldでは簡単に設定することができます。firewalldのもっとも簡単な設定方法は、ゾーンを選択し、そのゾーンにパケットフィルタリングのルールをサービス名で追加・削除することです。

ゾーンとは

firewalldでは、ゾーンにパケットフィルタリングのルールを設定していきます。ゾーンはあらかじめ用途別にいくつかテンプレートが用意されています。環境にあったゾーンを選択して、必要であればパケットフィルタリングの設定を追加や削除するのが基本です。

あらかじめ定義されているゾーンとその説明は次の通りです。

ゾーンの種類説明
drop 外部からのパケットは全て破棄(drop)する。ICMPメッセージも破棄される。内部から外部への接続のみ許可する
block 外部からのパケットは全て拒否(reject)する。ただし、ICMPメッセージは許可する。内部から開始された外部への接続は双方向を許可する
publicパブリックエリア用
external外部ネットワーク用。マスカレードが有効に設定されている
dmzDMZ用
work業務エリア用
home家庭用
internal内部ネットワーク用
trusted全てのネットワーク接続を許可

firewalldサービスの制御

ファイアーウォールを使うにはfirewalldサービスを起動します。ここではfirewalldサービスを制御する基本的なコマンドについて説明します。

firewalldサービスを起動する

firewalldサービスを起動するにはsystemctlコマンドを使って次のように実行します。

# systemctl start firewalld.service

firewalldサービスを停止する

firewalldサービス停止するには、次のようにします。

# systemctl stop firewalld.service

firewalldサービスの起動状態を確認する

firewalldサービスの起動状態を確認するには、systemctlまたはfirewall-cmdを使います。

# systemctl status firewalld.service
# firewall-cmd --state

サービスが起動していれば「Active: active (running)」あるいは「running」と表示されます。

# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor >
   Active: active (running) since Fri 2021-10-22 20:29:55 UTC; 5s ago
...
# firewall-cmd --state
running

停止していれば「Active: inactive (dead)」あるいは「not running」と表示されます。

# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor >
   Active: inactive (dead)
...
# firewall-cmd --state
not running

firewalldサービスの自動起動設定の確認

通常、OS起動時にfirewalldサービスは起動されていて欲しいでしょう。firewalldサービスの自動起動設定を確認するには、次のコマンドを実行します。

# systemctl is-enabled firewalld.service
enabled

自動起動が有効であれば「enabled」、無効であれば「disabled」と表示されます。

firewalldサービスの自動起動設定の有効化

自動起動設定を有効化するには次のようにします。

# systemctl enabled firewalld.service

firewalldサービスの自動起動設定の無効化

無効化するには、次のコマンドを実行します。

# systemctl disable firewalld.service

ゾーンを選択する

ファイアーウォール設定の第一歩はゾーンを選択することです。ゾーンを選択した後、そのゾーンに対して設定を行います。

ゾーンの情報を表示する

まずは、特定のゾーンの情報を表示してみましょう。それには --info-zone オプションに特定のゾーンを指定して実行します。次の例では public ゾーンの情報を表示しています。

# firewall-cmd --info-zone=public

実際にpublicゾーンの情報を表示すると、次のように表示されます。本記事では「services」や「ports」の部分の設定の仕方を説明しますが、それ以外にも多くの項目があることがわかります。

# firewall-cmd --info-zone=public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules: 

現在(デフォルト)のゾーンを表示する

現在のゾーンを確認するには次のように実行します。

# firewall-cmd --get-default-zone
public

現在(デフォルト)のゾーンを変更する

現在のゾーンを変更するには次のように実行します。これは永続的な変更です。

# firewall-cmd --set-default-zone=block
# firewall-cmd --reload

設定を反映させるためにはリロードなどの設定の再読み込みが必要です。 この例では block ゾーンに変更しています。

ゾーンのサービスをカスタマイズする

ゾーンには、あらかじめパケットフィルタリングのルールが定義されています。必要であればこれをカスタマイズすることができます(一部カスタマイズできないゾーンもあります)。

ここではもっとも基本的なサービス名でルールを設定する方法を説明します。

firewalldではパケットフィルタリングのルールをサービス名を使って設定できます。サービス名を追加すると、そのサービスの通信は許可されます。通信を禁止したければ、ゾーンからそのサービスを削除します。

ゾーンのサービスを確認する

まずは現在のゾーンに設定されているサービスを確認してみましょう。次のように実行するとアクティブ(有効)なサービスの設定を表示します。

# firewall-cmd --list-service
cockpit dhcpv6-client ssh

永続的なサービスを確認するには次のように --permanent オプションを付けて実行します。

# firewall-cmd --permanent --list-service
cockpit dhcpv6-client ssh

永続的なサービス設定の情報はファイルへ保存されていますので、(OS起動時などの)firewalldサービス起動時に、これらの設定がアクティブになります。そのためfirewalldサービス起動時は、上述のどちらのコマンドを実行しても設定されているサービスは同じです。この例ではどちらも「cockpit」、「dhcpv6-client」、「ssh」の通信が許可されています。

しかし、このあと見るように、アクティブ(有効)なサービス設定と永続的なサービス設定は別々に追加や削除ができます。

ゾーンにサービスを追加する

現在のゾーンにサービスを追加するには次のようにします。

# firewall-cmd --add-service=http

これはアクティブな設定に追加していますので、追加が成功した時点で有効になります。この例ではhttpの通信を許可しています。

ただし、永続的な設定ではありませんので、firewalldサービスやOSの再起動で設定は消えてしまいます。

永続的にサービスを追加するには次のように実行します。

# firewall-cmd -permanent --add-service=http
# firewall-cmd --add-service=http

1つ目のコマンドで永続的にサービスを追加しています。しかし、これだけではアクティブな設定に反映されませんので、アクティブな設定に追加するために2つ目のコマンドを実行します。

あるいは、次のように永続的な設定を追加して、設定を再読み込みします。

# firewall-cmd -permanent --add-service=http
# firewall-cmd --reload

ゾーンからサービスを削除する

ゾーンからサービスを削除するには次のようします。これはアクティブな設定からサービスを削除します。

# firewall-cmd --remove-service=http

追加のときと同様に、永続的にサービスを削除するには次のように実行します。

# firewall-cmd -permanent --remove-service=http
# firewall-cmd --remove-service=http

あるいは次のように実行します。

# firewall-cmd -permanent --add-service=http
# firewall-cmd --reload

サービスの名前を一覧表示する

どのようなサービス名が使えるかわからないときは次のコマンドを実行します。すると使用できるサービス名の一覧を表示します。

# firewall-cmd --get-services

ゾーンのポートをカスタマイズする

特定のポート番号の通信を許可したい場合があります。例えば、SSHで使用するポート番号を変更したときなどです。このようなとき、特定のポート番号でポートを制御する必要があります。ここではその方法を説明します。

ゾーンのポートを設定する

まず、現在のゾーンのポート設定を確認することから始めましょう。次のコマンドはアクティブな設定と永続的な設定をそれぞれ表示します。

# firewall-cmd --list-ports
# firewall-cmd --permanent --list-ports

ゾーンにポートを追加する

特定のポートの通信を許可するには、ゾーンにポートを追加します。それには --add-port オプションに「ポート番号」と「プロトコル」を「/」で区切って指定します。プロトコルにはtcp、udp、sctp、dccpのいずれかを使用できます。

# firewall-cmd --add-port=10022/tcp

この例ではポート番号10022のTCP通信を許可しています。この例はアクティブな設定へポートを追加しているだけなので、firewalldサービスやOSの再起動で設定は消えてしまいます。

永続的にポートを追加するには次のように実行します。

# firewall-cmd --permanent --add-port=10022/tcp
# firewall-cmd --add-port=10022/tcp

サービス追加の時と同様、1つ目のコマンドだけでは永続的な設定にしか追加されませんので、2つ目のコマンドでアクティブな設定へも追加しています。

あるいは、永続的な設定に追加して、設定を再読み込みしても同じです。

# firewall-cmd --permanent --add-port=10022/tcp
# firewall-cmd --reload

ゾーンからポートを削除する

ゾーンからポートを削除したい場合は --remove-port オプションを使います。

# firewall-cmd --remove-port=10022/tcp

永続的にポート削除するには、同様に --permanent オプションを付けます。

# firewall-cmd --permanent --remove-port=10022/tcp
# firewall-cmd --remove-port=10022/tcp

あるいは次のようにします。

# firewall-cmd --permanent --remove-port=10022/tcp
# firewall-cmd --reload

おわりに

この記事ではファイアーウォールのもっとも基礎的な部分を紹介しました。ファイアーウォールは機能が非常に豊富で複雑です。一つ一つ根気強く学習する必要があるでしょう。

-Linuxサーバー
-,

Copyright© アナグマのモノローグ , 2022 All Rights Reserved Powered by STINGER.