らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

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

LinuxPing (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

改めて設定を確認します。

# 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

この状態で設定は以下のようになりました。

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