Edited at

CentOS 7 firewalld よく使うコマンド

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 --permanent



ポート番号の追加

「--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