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

サービスの概要

サービスとは、複数の通信条件の組み合わせを別名で管理する機能です。定義されているサービスをゾーンに割り当てることで、サービス単位の通信制御が可能となります。
firewalldには、デフォルトで主要なプロトコルのサービスが定義されています。

定義済みサービスの確認

以下のコマンドで、定義済みのサービス一覧が表示されます。

# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client ...(略)

以下のコマンドで、個別サービスの詳細情報を確認できます。
以下の例では、httpの詳細を表示しています。

# firewall-cmd --info-service=http
http
  ports: 80/tcp
  protocols: 
  source-ports: 
  modules: 
  destination: 

サービスの追加

サービスを追加するには、以下のコマンドを実行します。
以下の例では、myappというサービスに、ポートやIPアドレスによる許可条件を指定しています。各条件の指定は任意で、指定しない項目は許可状態となります。
なお、サービスの設定では宛先IPアドレスの指定ができるものの、送信元IPアドレスの指定ができません。別途説明するリッチルールで許可する送信元/宛先IPアドレスを一括で指定した方が管理しやすいので、サービスの設定では宛先IPアドレスを個別に指定しないことをお勧めします。

# サービスを追加
# firewall-cmd --permanent --new-service=myapp
success

# サービス概要文の指定 
# firewall-cmd --permanent --service=myapp --set-short="(サービスの概要)"
success

# 通信を許可する宛先ポート番号を指定
# firewall-cmd --permanent --service=myapp --add-port=9999/tcp
success

# 通信を許可する送信元ポート番号を指定
# firewall-cmd --permanent --service=myapp --add-source-port=32768-61000/tcp
success

# 通信を許可する宛先IPアドレスを指定
# firewall-cmd --permanent --service=myapp --set-destination=ipv4:192.168.0.1/24
success

# 設定をリロードして反映
# firewall-cmd --reload
success

サービスの削除

定義済みのサービスを削除する場合は、以下のコマンドを実行します。

# サービスを削除
# firewall-cmd --permanent --delete-service=myapp
success

# 設定をリロードして反映
# firewall-cmd --reload
success

サービスのゾーン割り当て

定義済みのサービスをゾーンに割り当てるには、以下のコマンドを実行します。
以下の例では、myappサービスをpublicゾーンに割り当てています。
なお、デフォルトではpublicがデフォルトゾーンとなっているため、同ゾーンへの設定に限り--zone=publicは省略可能です。

# サービスの割り当て
# firewall-cmd --permanent --zone=public --add-service=myapp
success

# 設定をリロードして反映
# firewall-cmd --reload
success

以下のコマンドを実行することで、myapppublicゾーン内の許可サービスに追加されたことを確認できます。

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

サービスのゾーン割り当て解除

ゾーンからサービスの割り当てを解除する場合は、以下のコマンドを実行します。
以下の例では、myappサービスをpublicゾーンから割り当て解除しています。

# サービスの割り当て解除
# firewall-cmd --permanent --zone=public --remove-service=myapp
success

# 設定をリロードして反映
# firewall-cmd --reload
success

以下のコマンドを実行することで、myapppublicゾーン内の許可サービスから削除されたことを確認できます。

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