centos7
firewalld
firewall-cmd

CentOS 7 firewalld よく使うコマンド

More than 1 year has passed since last update.

CentOS 7ではファイアウォール(以下、FW)のサービスが iptables から firewalld に変わりました。
FWの設定は基本的に firewall-cmd にて行います。よく使うコマンドをまとめます。

サービスの起動

「bash-completion」がインストール済みの場合、[TAB]キーで補完可能です。
サービス名を指定する際の「.service」は省略可能です。

サービスの起動
# systemctl start firewalld.service
サービスの状態確認
# systemctl status firewalld.service

# firewall-cmd --state
running
<余談>サービスの終了
# systemctl stop firewalld.service

自動起動の設定

自動起動の設定
# systemctl enable firewalld.service
自動起動設定の状態確認
# systemctl is-enabled firewalld.service 
enabled
<余談>自動起動の解除
[root@localhost ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@localhost ~]# systemctl is-enabled firewalld.service
disabled

設定の確認

ゾーンの割り当て状態

firewalld にはゾーンという概念があり、ゾーンにFWの設定が入っています。ゾーンは標準で9つ用意されています。(追加も可能)
NIC に対して、ゾーンを割り当てて管理します。

現在割り当てられているゾーンの確認

「--get-active-zones」オプションを指定することで、現在割り当てられているゾーン(以下、アクティブゾーン)を確認できます。

アクティブゾーンの確認
# firewall-cmd --get-active-zones
public
  interfaces: ens160

上記の例では、「public」ゾーンが「ens160」インターフェースに割り当てられていることが確認できます。

デフォルトで割り当てられるゾーンの確認

「--get-default-zone」オプションを指定することで、デフォルトで割り当てられるゾーン(以下、デフォルトゾーン)を確認できます。
特にNICに対してのゾーンの割り当てがない場合は、デフォルトゾーンが割り当てられます。

デフォルトゾーンの確認
# firewall-cmd --get-default-zone
home

FWの設定状態の確認

デフォルトゾーン

「--list-all」オプションを指定することでデフォルトゾーンの現在のFW設定を確認できます。

デフォルトゾーンのFW設定確認
# firewall-cmd --list-all

※デフォルトゾーンとアクティブゾーンが異なる場合はアクティブゾーンの設定を見るように促す注意書きが出力されます。
 明示的にゾーンを指定する必要があります。他のコマンドを実行する際も同様に注意書きが出力されます。

デフォルトゾーン(home)とアクティブゾーン(public)が異なる場合
# firewall-cmd --list-all
You're performing an operation over default zone ('home'),
but your connections/interfaces are in zone 'public' (see --get-active-zones)
You most likely need to use --zone=public option.

home
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client mdns samba-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 

指定したゾーン

「--zone」オプションを指定することで任意のゾーンの現在のFW設定を確認できます。

指定したゾーンのFW設定を確認(homeの例)
# firewall-cmd --list-all --zone=home
home
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client mdns samba-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 

すべてのゾーン

「--list-all-zones」オプションを指定することですべてのゾーンの現在のFW設定を確認できます。

すべてのゾーンのFW設定を確認
# firewall-cmd --list-all-zones

恒久的なFW設定の確認

「--permanent」オプションを指定することで、恒久的な設定をそれぞれ確認できます。
※一時的に追加した設定は表示されません。再起動後も反映される設定となります。

デフォルトゾーンのFW設定確認(恒久的な設定のみ)
# firewall-cmd --list-all --permanent
指定したゾーンのFW設定確認(恒久的な設定のみ)
# firewall-cmd --list-all --zone=home --permanent
すべてのゾーンのFW設定確認(恒久的な設定のみ)
# firewall-cmd --list-all-zones --permanent

FWの設定

サービス

ゾーンにサービスを追加することで、そのサービス用のFW設定が反映されます。
サービスのFW設定は、XMLファイルで定義されており、以下の場所に格納されています。
/usr/lib/firewalld/services/

登録可能なサービスの確認

「--get-servicess」オプションを指定することで登録可能なサービス名一覧を確認できます。

登録可能なサービスの確認
# firewall-cmd --get-services

現在追加されているサービスの確認

「--list-services」オプションを指定することで現在追加されているサービスを確認できます。
※「--zone」オプションを省略した場合、デフォルトゾーンの設定が表示されます。
 ただし、アクティブゾーンとデフォルトゾーンが異なる場合は、注意書きが出力されます。

現在追加されているサービスの確認
# firewall-cmd --list-services --zone=public
dhcpv6-client ssh https
現在追加されているサービスの確認(恒久的な設定のみ表示)
# firewall-cmd --list-services --zone=public --permanent
dhcpv6-client ssh

サービスの追加

「--add-service」オプションを指定することでサービスを追加できます。
※「--zone」オプションを省略した場合、デフォルトゾーンに登録されます。

サービスの追加(publicゾーンに対して、httpsを追加する例)
# firewall-cmd --add-service=https --zone=public 

恒久的な設定とする場合は、「--permanent」オプションを指定します。
ただし、設定を反映したい場合は設定の再読み込みが必要です。

サービスの追加(恒久的な設定とする場合)
# firewall-cmd --add-service=https --zone=public --permanent
# firewall-cmd --reload
success

サービスの削除

「--remove-service」オプションを指定することでサービスを削除できます。
※「--zone」オプションを省略した場合、デフォルトゾーンから削除されます。

サービスの削除
# firewall-cmd --remove-service=https --zone=public

恒久的な設定とする場合は、「--permanent」オプションを指定します。
ただし、設定を反映したい場合は設定の再読み込みが必要です。

サービスの削除(恒久的な設定とする場合)
# firewall-cmd --remove-service=https --zone=public --permanent
# firewall-cmd --reload
success

ポート番号

現在追加されているポート番号の確認

「--list-ports」オプションを指定することで現在追加されているポート番号を確認できます。
※「--zone」オプションを省略した場合、デフォルトゾーンの設定が表示されます。
 ただし、アクティブゾーンとデフォルトゾーンが異なる場合は、注意書きが出力されます。

現在追加されているポート番号の確認
# firewall-cmd --list-ports --zone=public
現在追加されているポート番号の確認(恒久的な設定のみ表示)
# firewall-cmd --list-ports --zone=public

ポート番号の追加

「--add-port」オプションを指定することでサービスを追加できます。
※「--zone」オプションを省略した場合、デフォルトゾーンに追加されます。

ポート番号の追加(デフォルトゾーンに対して、TCP8080、UDP60000の例)
# firewall-cmd --add-port=8080/tcp --zone=public
# firewall-cmd --add-port=60000/udp --zone=public

恒久的な設定とする場合は、「--permanent」オプションを指定します。
ただし、設定を反映したい場合は設定の再読み込みが必要です。

ポート番号の追加(恒久的な設定とする場合)
# firewall-cmd --add-port=8080/tcp --zone=public --permanent
# firewall-cmd --add-port=60000/udp --zone=public --permanent
# firewall-cmd --reload
success

ポート番号の削除

「--remove-service」オプションを指定することでサービスを削除できます。
※「--zone」オプションを省略した場合、デフォルトゾーンから削除されます。

ポート番号の削除
# firewall-cmd --remove-port=8080/tcp --zone=public
# firewall-cmd --remove-port=60000/udp --zone=public

恒久的な設定とする場合は、「--permanent」オプションを指定します。
ただし、設定を反映したい場合は設定の再読み込みが必要です。

ポート番号の削除(恒久的な設定とする場合)
# firewall-cmd --remove-port=8080/tcp --zone=public --permanent
# firewall-cmd --remove-port=60000/udp --zone=public --permanent
# firewall-cmd --reload
success

IPアドレス

現在追加されているIPアドレスの確認

「--list-sources」オプションを指定することで現在追加されているIPアドレスを確認できます。
※「--zone」オプションを省略した場合、デフォルトゾーンに追加されます。

現在追加されているIPアドレスの確認
# firewall-cmd --list-sources --zone=public
現在追加されているIPアドレスの確認(恒久的な設定のみ表示)
# firewall-cmd --list-sources --zone=public --permanent

IPアドレスの追加

「--add-source」オプションを指定することでIPアドレスを追加できます。
※「--zone」オプションを省略した場合、デフォルトゾーンに追加されます。

アクセス許可

許可アドレスの追加
# firewall-cmd --add-source=192.168.0.0/24 --zone=public

恒久的な設定とする場合は、「--permanent」オプションを指定します。
ただし、設定を反映したい場合は設定の再読み込みが必要です。

ポート番号の追加(恒久的な設定とする場合)
# firewall-cmd --add-source=192.168.0.0/24 --zone=public --permanent
# firewall-cmd --reload
success

アクセス拒否

「drop」ゾーンに対してIPアドレスを登録することで拒否IPアドレスとなります。

拒否アドレスの追加
# firewall-cmd --add-source=192.168.11.0/24 --zone=drop 

恒久的な設定とする場合は、「--permanent」オプションを指定します。
ただし、設定を反映したい場合は設定の再読み込みが必要です。

ポート番号の追加(恒久的な設定とする場合)
# firewall-cmd --add-source=192.168.11.0/24 --zone=drop --permanent
# firewall-cmd --reload
success

アクセス元IPアドレスのゾーンの変更

すでに登録済みのIPアドレスは、「--change-source」オプションを指定することで、ゾーンの変更が行えます。

アクセス元IPアドレスに割り当てられているゾーンの変更(dropに変更の例)
# firewall-cmd --change-source=192.168.11.0/24 --zone=drop
アクセス元IPアドレスに割り当てられているゾーンの確認
# firewall-cmd --get-zone-of-source=192.168.11.0/24
drop

恒久的な設定とする場合は、「--permanent」オプションを指定します。
ただし、設定を反映したい場合は設定の再読み込みが必要です。

ゾーンの変更(恒久的な設定とする場合)
# firewall-cmd --change-source=192.168.11.0/24 --zone=drop --permanent
# firewall-cmd --reload
success

IPアドレスの削除

「--remove-source」オプションを指定することでサービスを削除できます。
※「--zone」オプションを省略した場合、デフォルトゾーンに追加されます。

IPアドレスの削除
# firewall-cmd --remove-source=192.168.11.0/24 --zone=drop

恒久的な設定とする場合は、「--permanent」オプションを指定します。
ただし、設定を反映したい場合は設定の再読み込みが必要です。

IPアドレスの削除(恒久的な設定とする場合)
# firewall-cmd --remove-source=192.168.11.0/24 --zone=drop --permanent
# firewall-cmd --reload
success

ゾーンの変更

アクティブゾーンの変更

「--change-interface」オプションを指定することでアクティブゾーンを変更できます。

アクティブゾーンの変更(ens160に対する割り当てをhomeに変更する例)
# firewall-cmd --zone=home --change-interface=ens160
アクティブゾーンの変更(恒久的な設定とするかつすぐに反映させる場合)
# firewall-cmd --zone=home --change-interface=ens160 --permanent
# firewall-cmd --reload
success

デフォルトゾーンの変更

「--set-default-zone」オプションを指定することでデフォルトゾーンを変更できます。
NICに対してゾーンの割り当ての指定が特にない場合は、デフォルトゾーンが割り当てられます。

デフォルトゾーンの変更(homeに変更する例)
# firewall-cmd --set-default-zone=home

サービスの新規作成

サービスは独自に作成することも可能です。
詳しくは、firewall-cmdのマニュアル(man firewalld-cmd)をご覧ください。
「--permanent」オプションは必須です。

hogeサービスの作成
# firewall-cmd --permanent --new-service hoge

# cat /etc/firewalld/services/hoge.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
</service>

※/etc/firewalld/services/hoge.xml が作成されます。

既存のxmlファイルから作成する場合
# firewall-cmd --permanent --new-service-from-file=[filename] --name=[別名をつける場合]
hogeサービスの説明文追加
# firewall-cmd --permanent --service=hoge --set-description=[説明文]
# firewall-cmd --permanent --service=hoge --set-short=[短い説明文]
hogeサービスにFW設定追加の例
# firewall-cmd --permanent --service=hoge --add-port=2020/tcp
# firewall-cmd --permanent --service=hoge --add-source-port=60000-65000/udp
# firewall-cmd --permanent --service=hoge --set-destination=ipv4:192.168.0.1/24

# cat /etc/firewalld/services/hoge.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>[短い説明文]</short>
  <description>[説明文]</description>
  <port protocol="tcp" port="2020"/>
  <source-port protocol="udp" port="60000-65000"/>
  <destination ipv4="192.168.0.1/24"/>
</service>
再読み込み
# firewall-cmd --reload
hogeサービスの削除
# firewall-cmd --permanent --delete-service=hoge