CentOS8 の firewalld で ICMP だけをブロックする
Linux で Ping (ICMP) の応答をブロックしたい場合、firewall-cmd --add-icmp-block=echo-request
を設定する方法があります。 これでも ICMP をブロックすることは出来ますが、送信元に対して「ICMP をブロックしている」旨のメッセージが返されます。 こういった場合は ICMP だけ DROP ゾーンで処理し、残りの TCP/UDP 通信は許可することで回避出来ます。 今回は CentOS8 で設定しました。
firewalld の設定を確認します。 ですが、firewalld が起動していないと設定を確認することが出来ません。
| # firewall-cmd --list-all --zone=public
FirewallD is not running
|
このような場合は firewalld を起動します。
| systemctl start firewalld
|
改めて設定を確認します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | # firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
|
TCP/UDP を全許可し、ICMP を含むその他全ての通信を DROP するには以下のように設定します。 設定後は --reload
を実行して設定を反映します。
| firewall-cmd --add-port=0-65535/tcp --zone=public --permanent
firewall-cmd --add-port=0-65535/udp --zone=public --permanent
firewall-cmd --set-target=DROP --permanent
firewall-cmd --reload
|
この状態で設定は以下のようになりました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | # firewall-cmd --list-all --zone=public
public (active)
target: DROP
icmp-block-inversion: no
interfaces: ens192
sources:
services: cockpit dhcpv6-client ssh
ports: 0-65535/tcp 0-65535/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
|
これで ICMP に対して「抑制している」というメッセージを応答しなくなります。