Help us understand the problem. What is going on with this article?

firewall-cmdコマンドの使い方

0 firewall-cmdとは?

firewall-cmdは、ファイアウォールの設定を行うコマンドです。
firewall-cmdは、Ubuntuのufw,openSUSEのSUSEfirewall2と同じ位置づけのコマンドです。
図に書くと、以下のようになります。

なお、ufwは、ufwコマンドの使い方
SUSEfirewall2は、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徹底攻略

hana_shin
写真は淡路島SAから明石海峡大橋を撮影したものです('19夏撮影)。'20年夏も3年連続で四国、大阪に行く予定でしたが、コロナ終息しないので断念。甲子園で高校野球もみれない。ほんと悲しい!コロナなんとかならないか!治療薬の研究開発している人がんばってほしいな。ソフトが少しでも役に立てればと思う今日この頃。取得済資格:ネットワークスペシャリスト、オンライン情報処理技術者。
https://hana-shin.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away