CentOS8 の firewalld で ICMP だけをブロックする

Linux で Ping (ICMP) の応答をブロックしたい場合、firewall-cmd --add-icmp-block=echo-request を設定する方法があります。 これでも ICMP をブロックすることは出来ますが、送信元に対して「ICMP をブロックしている」旨のメッセージが返されます。 こういった場合は ICMP だけ DROP ゾーンで処理し、残りの TCP/UDP 通信は許可することで回避出来ます。 今回は CentOS8 で設定しました。

firewalld の設定を確認します。 ですが、firewalld が起動していないと設定を確認することが出来ません。

1
2
# firewall-cmd --list-all --zone=public
FirewallD is not running

このような場合は firewalld を起動します。

1
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 を実行して設定を反映します。

1
2
3
4
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 に対して「抑制している」というメッセージを応答しなくなります。