Edited at

firewall-cmdコマンドの使い方


0 firewall-cmdとは?

firewall-cmdは、ファイアウォールの設定を行うコマンドです。

firewall-cmdは、Ubuntuのufw,openSUSEのSUSEfirewall2と同じ位置づけのコマンドです。

図に書くと、以下のようになります。

       CentOS7         Ubuntu16.04        openSUSE(Leap 42.3)

+--------------+ +------------+ +---------------------+ -*-
| firewall-cmd | | ufw | | SUSEfirewall2 | |
+--------------+ +------------+ +---------------------+ |
ユーザ空間
+-----------------------------------------------------------+ |
| iptables command | |
+-----------------------------------------------------------+ -*-

+-----------------------------------------------------------+ -*-
| | |
| OS(netfilter) | カーネル空間
| | |
+-----------------------------------------------------------+ -*-


1 環境

[root@server ~]# cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

[root@server ~]# uname -r
3.10.0-693.el7.x86_64


2 ランタイムルートとパーマネントルール

ルール
ルールの保存先

ランタイムルール
ルールはメモリ上に保存される。firewalldをリスタートすると消える。

パーマネントルール
ルールはファイル(/etc/firewalld/zones配下)に保存される。firewalldをリスタートすると、ファイルからルールが読み込まれメモリに展開される

--runtime-to-permanentを実行すると、メモリ上のルールをファイルに保存する。

逆に、--reloadを実行すると、ファイルに保存されたルールをメモリに展開する。


--runtime-to-permanent
(1) ----------- (2) -------------> (3)
ランタイムルール パーマネントルール(ファイル(*)に保存)
(メモリに保存) <---------- (4) -------------
--reload (*) /etc/firewalld/zones/public.xml等


3 ルールの登録方法

2章の(1),(2),(3),(4)について、それぞれ実行例を示す。


3.1 ランタイムルールへのルール登録

ランタイムルールはメモリ上に保存されるルールです。

firewalldをリスタートすると、ランタイムルールが消えてしまいます。

ここでは、firewalldをリスタートすることで、ランタイムルールが消えることを確認します。

ランタイムルールを確認する。「アクセス可」のポート番号が未登録であることがわかる。

[root@server ~]# firewall-cmd --list-ports

ランタイムルールに11111番ポートを登録する。
[root@server ~]# firewall-cmd --add-port=11111/tcp
success

ランタイムルールを確認する。11111番ポートが登録されたことがわかる。
[root@server ~]# firewall-cmd --list-ports
11111/tcp

firewalldを再起動する。
[root@server ~]# systemctl restart firewalld.service

ランタイムルールを確認する。登録したポート番号が削除されたことがわかる。
[root@server ~]# firewall-cmd --list-ports


3.2 ランタイムルールをパーマネントルールに保存(--runtime-to-permanent)

2章の(2)について確認する。


パーマネントルールへの保存

ランタイムルールを確認する。何も登録されていないことがわかる。

[root@server ~]# firewall-cmd --list-ports

ランタイムルールに11111番ポートを登録する。
[root@server ~]# firewall-cmd --add-port=11111/tcp
success

ランタイムルールを確認する。11111番ポートが登録されたことがわかる。
[root@server ~]# firewall-cmd --list-ports
11111/tcp

ランタイムルールをパーマネントルールに保存する。
[root@server ~]# firewall-cmd --runtime-to-permanent
success

パーマネントルールを確認する。11111番ポートが登録されたことがわかる。
[root@server ~]# cat /etc/firewalld/zones/public.xml|grep 11111
<port protocol="tcp" port="11111"/>

firewalldを再起動する。
[root@server ~]# systemctl restart firewalld.service

ランタイムルールを確認する。登録したポート番号が残っていることがわかる。
[root@server ~]# firewall-cmd --list-ports
11111/tcp



後始末

次の検証のため、後始末をする。パーマネントルールからルールを削除する。

[root@server ~]# firewall-cmd --remove-port=11111/tcp
success

ランタイムルールをパーマネントルールに保存する。
[root@server ~]# firewall-cmd --runtime-to-permanent
success

ランタイムルールを確認する。何も登録されていないことがわかる。
[root@server ~]# firewall-cmd --list-ports

パーマネントルールを確認する。111111番ポートが削除されたことがわかる。
[root@server ~]# cat /etc/firewalld/zones/public.xml|grep 11111
[root@server ~]#



3.3 パーマネントルールにルールを保存(--permanent)

2章の(3)について確認する。

ここでは、ルールをメモリではなく、直接ファイルに保存する方法について説明する。

ランタイムルールを確認する。何も登録されていないことがわかる。

[root@server ~]# firewall-cmd --list-ports

パーマネントルールを確認する。111111番ポートが登録されていないことがわかる。
[root@server ~]# cat /etc/firewalld/zones/public.xml|grep 11111
[root@server ~]#

パーマネントルールに11111番ポートを登録する(--permanent)。
[root@server ~]# firewall-cmd --permanent --add-port=11111/tcp
success

ランタイムルールを確認する。何も登録されていないことがわかる。
[root@server ~]# firewall-cmd --list-ports

パーマネントルールを確認する。11111番ポートが登録されていることがわかる。
[root@server ~]# cat /etc/firewalld/zones/public.xml|grep 11111
<port protocol="tcp" port="11111"/>


3.4 パーマネントルールをランタイムルールに保存(--reload)

2章の(4)について確認する。

パーマネントルールに保存されているルールをランタイムルールに展開する。


ランタイムルールを確認する。何も登録されていないことがわかる。
[root@server ~]# firewall-cmd --list-ports

[root@server ~]# cat /etc/firewalld/zones/public.xml|grep 11111

ランタイムルールに11111番ポートへのアクセス可を登録する。
[root@server ~]# firewall-cmd --permanent --add-port=11111/tcp
success

ランタイムルールを確認する。何も登録されていないことがわかる。
[root@server ~]# firewall-cmd --list-ports

パーマネントルールを確認する。11111番ポートが登録(アクセス可)されていることがわかる。
[root@server ~]# cat /etc/firewalld/zones/public.xml|grep 11111
<port protocol="tcp" port="11111"/>

パーマネントルールをランタイムルールに展開する。
[root@server ~]# firewall-cmd --reload
success

ランタイムルールを確認する。11111番ポートが登録されたことがわかる。
[root@server ~]# firewall-cmd --list-ports
11111/tcp

後始末をする。
ランタイムルールから11111番ポートへのアクセス可を削除する。
[root@server ~]# firewall-cmd --remove-port=11111/tcp
success

パーマネントルールから11111番ポートへのアクセス可を削除する。
[root@server ~]# firewall-cmd --runtime-to-permanent
success

ランタイムルールを確認する。何も登録されていないことがわかる。
[root@server ~]# firewall-cmd --list-ports

パーマネントルールを確認する。11111番ポートへのアクセス可が削除されたことがわかる。
[root@server ~]# cat /etc/firewalld/zones/public.xml|grep 11111
[root@server ~]#


4 ポート番号の追加・削除方法

ポート番号の追加・削除は、数値またはサービス名を使って行うことができます。


4.1 数値で追加・削除する方法(--add-port,--remove-port)


初期状態の確認

ポート番号一覧を表示する。現時点でアクセスを許可しているポート番号はありません。

ただし、この結果は数値で表示した場合であって、サービス名で表示するとssh等はアクセスが許可されていることがわかります(後述)。
[root@server ~]# firewall-cmd --list-ports


80番ポートへのアクセス許可

80番ポートへのアクセスを許可する。

[root@server ~]# firewall-cmd --add-port=80/tcp
success

ポート番号一覧を表示する。80番ポートへのアクセスが許可されたことがわかる。
[root@server ~]# firewall-cmd --list-ports
80/tcp



80番ポートへのアクセス許可の削除

80番ポートへのアクセス許可を削除する。

[root@server ~]# firewall-cmd --remove-port=80/tcp
success

ポート番号一覧を表示する。80番ポートへのアクセス許可が削除されたことがわかる。
[root@server ~]# firewall-cmd --list-ports



4.2 サービス名で追加・削除する方法(--add-service,--remove-service)

サービス名とは、/etc/servicesに登録されている名前です。

たとえば、80番ポートならhttp、22番ポートならsshと登録されています。


初期状態の確認

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

ssh(20番),dhcpv6-client(546番)へのアクセスが許可されていることがわかる。
[root@server ~]# firewall-cmd --list-services
ssh dhcpv6-client

sshのサービス名とポート番号を確認する。
[root@server ~]# cat /etc/services |grep ssh
ssh 22/tcp # The Secure Shell (SSH) Protocol
ssh 22/udp # The Secure Shell (SSH) Protocol
(以下、略)

dhcpv6-clientのサービス名とポート番号を確認する。
[root@server ~]# cat /etc/services |grep dhcpv6-client
dhcpv6-client 546/tcp
dhcpv6-client 546/udp



http(80番ポート)へのアクセス許可

http(80番ポート)へのアクセスを許可する。

[root@server ~]# firewall-cmd --add-service=http
success

サービス名を表示する。http(80番)へのアクセスが許可されたことがわかる。
[root@server ~]# firewall-cmd --list-services
ssh dhcpv6-client http

数値でポート番号を表示する。数値では表示されないようです。
[root@server ~]# firewall-cmd --list-ports

httpのサービス名とポート番号を表示する。
[root@server ~]# cat /etc/services |grep http
# http://www.iana.org/assignments/port-numbers
http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperText Transfer Protocol
(以下、略)



http(80番ポート)へのアクセス許可の削除

http(80番ポート)へのアクセス許可を削除する。

[root@server ~]# firewall-cmd --remove-service=http
success

サービス名を表示する。http(80番)へのアクセス許可が削除されたことがわかる。
[root@server ~]# firewall-cmd --list-services
ssh dhcpv6-client



4.3 追加したポート番号はiptablesにどのように設定されているか?

--add-portや--add-serviceで追加したポート番号が、

iptablesにどのように設定されているのかを確認してみます。


80番ポートへのアクセス許可

80番ポートへのアクセスを許可します。

[root@server ~]# firewall-cmd --add-port=80/tcp
success

ポート番号一覧を表示する。80番ポートへのアクセスが許可されたことがわかる。
[root@server ~]# firewall-cmd --list-ports
80/tcp


iptablesの使い方は、ここを参照ください。


INPUTチェインの表示

[root@server ~]# iptables -nvL INPUT

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
2158 137K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
27 1496 INPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
27 1496 INPUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
27 1496 INPUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
25 1392 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited


ユーザ定義チェイン(INPUT_ZONES)の表示

[root@server ~]# iptables -nvL INPUT_ZONES

Chain INPUT_ZONES (1 references)
pkts bytes target prot opt in out source destination
0 0 IN_public all -- eth1 * 0.0.0.0/0 0.0.0.0/0 [goto]
26 872 IN_public all -- eth0 * 0.0.0.0/0 0.0.0.0/0 [goto]
2 656 IN_public all -- + * 0.0.0.0/0 0.0.0.0/0 [goto]


ユーザ定義チェイン(IN_public)の表示

[root@server ~]# iptables -nvL IN_public

Chain IN_public (3 references)
pkts bytes target prot opt in out source destination
28 1528 IN_public_log all -- * * 0.0.0.0/0 0.0.0.0/0
28 1528 IN_public_deny all -- * * 0.0.0.0/0 0.0.0.0/0
28 1528 IN_public_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0


ユーザ定義チェイン(IN_public_allow)の表示

[root@server ~]# iptables -nvL IN_public_allow

Chain IN_public_allow (1 references)
pkts bytes target prot opt in out source destination
2 104 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ctstate NEW

INPUTチェインから、IN_public_allowチェインまでは、以下のような階層構造になっています。

そして、IN_public_allowチェインで、80番ポートへのアクセスを許可する設定が行われています。


チェインの階層構造

INPUT

+ INPUT_ZONES
+ IN_public
+ IN_public_allow
+ ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ctstate NEW

80番ポートへのアクセス許可を削除します。


後始末

[root@server ~]# firewall-cmd --remove-port=80/tcp

success

IN_public_allowチェインを確認する。80番ポートへのアクセス許可が削除されたことがわかる。
[root@server ~]# iptables -nvL IN_public_allow
Chain IN_public_allow (1 references)
pkts bytes target prot opt in out source destination
2 104 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW



5 ICMPタイプの表示、設定、削除方法


5.1 ICMPタイプを表示する方法(--get-icmptypes)


ICMPタイプの一覧表示結果

[root@server ~]# firewall-cmd --get-icmptypes

address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option


5.2 ICMPタイプを設定する方法(--add-icmp-block)

ここでは、ICMP Echo要求をブロックする設定をしてみます。

設定するICMPのタイプは、5.1で得たタイプを指定します。


echo要求のブロック設定

[root@server ~]# firewall-cmd --add-icmp-block=echo-request

success


ブロックしたICMPタイプの確認

[root@server ~]# firewall-cmd --list-icmp-blocks

echo-request

ICMP Echo要求のブロック設定を行うと、IN_public_denyチェインに下記設定が行われます。


iptablesの設定内容

[root@server ~]# iptables -nvL IN_public_deny

Chain IN_public_deny (1 references)
pkts bytes target prot opt in out source destination
15 1260 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8 reject-with icmp-host-prohibited

IN_public_denyチェインは、以下のようにINPUTチェインから呼び出されています。


iptablesの階層構造

INPUT

+ INPUT_ZONES
+ IN_public
+ IN_public_deny
+ REJECT icmptype 8 reject-with icmp-host-prohibited

クライアントからサーバに対してpingを実行してみます。


ping実行結果

[root@client ~]# ping -c 3 192.168.3.20

PING 192.168.3.20 (192.168.3.20) 56(84) bytes of data.
From 192.168.3.20 icmp_seq=1 Destination Host Prohibited
From 192.168.3.20 icmp_seq=2 Destination Host Prohibited
From 192.168.3.20 icmp_seq=3 Destination Host Prohibited
(以下、略)


5.3 ICMPタイプを削除する方法(--remove-icmp-block)


ブロックしたICMPタイプの削除

[root@server ~]# firewall-cmd --remove-icmp-block=echo-request

success


ICMPタイプの確認

[root@server ~]# firewall-cmd --list-icmp-blocks


[root@server ~]#


6 ダイレクトルールの使い方

ダイレクトルールは、Netfilterに直接アクセスするためのものです。

ダイレクトルールを使うと、iptablesコマンドで設定できることは、ほぼ全て設定できるようです。


6.1 ユーザ定義チェイン


6.2 ユーザ定義チェインの追加、表示、削除

ユーザ定義チェインを追加する。

[root@server ~]# firewall-cmd --direct --add-chain ipv4 filter OUTPUT_direct_xxxxx
success

全てのユーザ定義チェインを確認する。
[root@server ~]# firewall-cmd --direct --get-all-chains
ipv4 filter OUTPUT_direct_xxxxx

別の確認方法として、特定のテーブル(filer)のユーザ定義チェインを確認する。
[root@server ~]# firewall-cmd --direct --get-chains ipv4 filter

もう1つ、ユーザ定義チェインを追加する。
[root@server ~]# firewall-cmd --direct --add-chain ipv4 filter OUTPUT_direct_yyyyy
success

ユーザ定義チェインを確認する。追加した2つのユーザ定義チェインが確認できる。
[root@server ~]# firewall-cmd --direct --get-all-chains
ipv4 filter OUTPUT_direct_xxxxx
ipv4 filter OUTPUT_direct_yyyyy

ユーザ定義チェインを削除する。
[root@server ~]# firewall-cmd --direct --remove-chain ipv4 filter OUTPUT_direct_xxxxx
success

[root@server ~]# firewall-cmd --direct --remove-chain ipv4 filter OUTPUT_direct_yyyyy
success

ユーザ定義チェインを確認する。2つとも削除できたことがわかる。
[root@server ~]# firewall-cmd --direct --get-all-chains
[root@server ~]#


6.3 ダイレクトルールの追加、表示、削除


6.3.1 設定、表示、削除のやりかた

ダイレクトルールを設定する。設定内容は、宛先ポート番号11111は廃棄する。

[root@server ~]# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -p tcp --dport 11111 -j DROP
success

ダイレクトルールを表示する。
[root@server ~]# firewall-cmd --direct --get-all-rules
ipv4 filter OUTPUT 1 -p tcp --dport 11111 -j DROP

ダイレクトルールを削除する。
[root@server ~]# firewall-cmd --direct --remove-rule ipv4 filter OUTPUT 1 -p tcp --dport 11111 -j DROP
success

ダイレクトルールを表示する。
[root@server ~]# firewall-cmd --direct --get-all-rules
[root@server ~]#


6.3.2 ダイレクトルール追加時のiptablesの設定内容

ダイレクトルール追加前のiptablesの設定を保存する。

[root@server ~]# iptables -nL > before

ダイレクトルールを1つ追加する。
[root@server ~]# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -p tcp --dport 11111 -j DROP
success

ダイレクトルールを確認する。
[root@server ~]# firewall-cmd --direct --get-all-rules
ipv4 filter OUTPUT 1 -p tcp --dport 11111 -j DROP

ダイレクトルール追加後のiptablesの設定を保存する。
[root@server ~]# iptables -nL > after

ダイレクトルール追加前後の設定内容を比較する。宛先が11111ポートは廃棄のルールが追加されたことがわかる(★印)
[root@server ~]# diff -Nur before after
--- before 2017-04-05 20:12:35.102777357 +0900
+++ after 2017-04-05 20:12:57.302335371 +0900
@@ -126,3 +126,4 @@

Chain OUTPUT_direct (1 references)
target prot opt source destination
+DROP★ tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:11111

ダイレクトルールをもう1つ追加する。
[root@server ~]# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -p tcp --dport 22222 -j DROP
success

ダイレクトルールを確認する。
[root@server ~]# firewall-cmd --direct --get-all-rules
ipv4 filter OUTPUT 1 -p tcp --dport 11111 -j DROP
ipv4 filter OUTPUT 1 -p tcp --dport 22222 -j DROP

ダイレクトルール追加後のiptablesの設定を保存する。
[root@server ~]# iptables -nL >after2

ダイレクトルール追加前後の設定内容を比較する。宛先が22222ポートは廃棄のルールが追加されたことがわかる(★印)
[root@server ~]# diff -Nur before after2
--- before 2017-04-05 20:12:35.102777357 +0900
+++ after2 2017-04-05 20:17:55.152822225 +0900
@@ -126,3 +126,5 @@

Chain OUTPUT_direct (1 references)
target prot opt source destination
+DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:11111
+DROP★ tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22222


7 ダイレクトルールの使い方(その2)


7.1 ルールを設定する方法(--add-rule)

VRRPパケットの受信(-i)を許可(ACCEPT)する。なお、VRRPパケットは宛先IPアドレスが224.0.0.18のマルチキャストパケットである。

[root@server ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -i eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
success

VRRPパケットの送信(-o)を許可(ACCEPT)する。
[root@server ~]# firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -o eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
success


7.2 ルールを表示する方法(--get-all-rules, --get-rules)

定義されている全てのダイレクトルールを表示する。

[root@server ~]# firewall-cmd --direct --get-all-rules
ipv4 filter OUTPUT 1 -o eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
ipv4 filter INPUT 1 -i eth0 -d 224.0.0.18 -p vrrp -j ACCEPT

INPUTチェインのダイレクトルールだけを表示する。
[root@server ~]# firewall-cmd --direct --get-rules ipv4 filter INPUT
1 -i eth0 -d 224.0.0.18 -p vrrp -j ACCEPT

OUTPUTチェインのダイレクトルールだけを表示する。
[root@server ~]# firewall-cmd --direct --get-rules ipv4 filter OUTPUT
1 -o eth0 -d 224.0.0.18 -p vrrp -j ACCEPT


7.3 ルールを削除する方法(--remove-rule)

OUTPUTチェインからダイレクトルールを削除する。

[root@server ~]# firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -i eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
success

INPUTチェインからダイレクトルールを削除する。
[root@server ~]# firewall-cmd --direct --remove-rule ipv4 filter OUTPUT 1 -o eth0 -d 224.0.0.18 -p vrrp -j ACCEPT
success

定義されているダイレクトルールを確認する。2つとも削除できたことがわかる。
[root@server ~]# firewall-cmd --direct --get-all-rules
[root@server ~]#


7.4 ポート番号の範囲を指定する方法(multiport)

指定したポート番号の範囲についてフィルタを設定する方法を示します。

以下の例は、宛先TCPポート番号10000から10005までのパケットの受信許可をする設定です。

宛先TCPポート番号が10000-10005のパケットの受信を許可する。

[root@server ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -i eth0 -p tcp -m multiport --dports 10000:10005 -j ACCEPT
success

ダイレクトルールを確認する。ルールが追加できたことがわかる(★印)
[root@server ~]# firewall-cmd --direct --get-all-rules
ipv4 filter INPUT 1 -i eth0 -p tcp -m multiport --dports 10000:10005 -j ACCEPT★

宛先TCPポート番号が10000-10005のパケットの受信許可のルールを削除する。
[root@server ~]# firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -i eth0 -p tcp -m multiport --dports 10000:10005 -j ACCEPT
success

ダイレクトルールを確認する。ルールが削除できたことがわかる。
[root@server ~]# firewall-cmd --direct --get-all-rules
[root@server ~]#


7.5 SYNパケットを廃棄する方法

iptablesコマンドで使用するオプション


設定

SYNフラグがたったパケットを廃棄する設定をおこなう。

[root@server ~]# firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --tcp-flags ALL SYN -j DROP
success

設定を確認する。SYNフラグのたったパケット廃棄の設定ができた。
[root@server ~]# firewall-cmd --direct --get-rules ipv4 filter INPUT
1 -p tcp --tcp-flags ALL SYN -j DROP



設定の削除

設定を削除する。

[root@server ~]# firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --tcp-flags ALL SYN -j DROP
success

設定を確認する。設定が削除できたことがわかる。
[root@server ~]# firewall-cmd --direct --get-rules ipv4 filter INPUT
[root@server ~]#



8 ゾーンについて


8.1 デフォルトゾーンの確認方法(--get-default-zone)

デフォルトのゾーンはpublic。--add-port等を実行するとデフォルトゾーンに対して行われます。

デフォルトのゾーンを確認する。publicであることがわかる。

[root@server ~]# firewall-cmd --get-default-zone
public


8.2 デフォルトゾーンの変更方法(--set-default-zone)

デフォルトのゾーンをtrustedに変更する。

[root@server ~]# firewall-cmd --set-default-zone=trusted
success

デフォルトのゾーンを確認する。trustedに変更されたことがわかる。
[root@server ~]# firewall-cmd --get-default-zone
trusted

12345番ポートをアクセス可能に設定する。
[root@server ~]# firewall-cmd --add-port=12345/tcp
success

trustedゾーンの状態を確認する。12345番ポートがアクセス可能になったことがわかる(★印)。
[root@server ~]# firewall-cmd --zone=trusted --list-all
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces: eth0
sources:
services:
ports: ★12345/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:


8.3 ゾーンの状態を確認する方法(--list-all-zones)


全てのゾーンの状態確認方法

[root@server ~]# firewall-cmd --list-all-zones

-中略-
public (active)
target: default
icmp-block-inversion: no
interfaces: cbr0 eth0
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:


特定ゾーンの状態確認方法

[root@server ~]# firewall-cmd --zone=public --list-all

public (active)
target: default
icmp-block-inversion: no
interfaces: cbr0 eth0
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:


8.4 ゾーンに属するインタフェースの表示、変更方法

publicゾーンにeth0,eth1の2つのインタフェースが存在することがわかる。

[root@server ~]# firewall-cmd --get-active-zones
public
interfaces: eth0 eth1

eth1をhomeゾーンに変更する。
[root@server ~]# firewall-cmd --zone=home --change-interface=eth1
The interface is under control of NetworkManager, setting zone to 'home'.
success

eth0がpublicゾーン、eth1がhomeゾーンに所属することがわかる。
[root@server ~]# firewall-cmd --get-active-zones
home
interfaces: eth1
public
interfaces: eth0


X 参考情報

CentOS 7システム管理ガイド systemd/NetworkManager/Firewalld徹底攻略