server-memo.net

firewalldでソースを指定して通信を遮断する方法

   

「firewalld」で特定のアドレスからの通信(ソース指定)を遮断する方法です。

通信を遮断

「http(S)」や「smtp(メール)」等のサービスを提供している際、特定のアドレスから大量のアクセス(攻撃)があった場合にそのアドレスからの通信を遮断したいといったような事があると思います。

このような場合「firewalld」では、発信元のアドレスを「drop」ゾーンに設定をすることで、そこからの通信を遮断することができるので、その設定方法を説明させていただきます。

一時的に遮断する場合

一時的に通信を遮断したい場合は、「--permanent」オプションを付けずに設定を行います。

この場合、サーバの再起動や「firewalld」サービスを再起動すると設定は消えてしまいますので注意してください。

# firewall-cmd --zone=drop --add-source=ネットワークアドレス/ネットマスク

設定例

下記は「192.168.1.10/32」からの通信を遮断する場合の設定となります。

今回はネットマスクに「/32」を指定しているので、1つのIPからのみ遮断するという設定になっていますが、ネットマスクの部分を「/24」とか「/16」といったように指定することで、ネットワークアドレス単位での指定もできます。

# firewall-cmd --zone=drop --add-source=192.168.1.10/32

恒久的に遮断する場合

恒久的に設定を残したい場合は「--permanent」オプションを付けて設定を行います。

# firewall-cmd --permanent --zone=drop --add-source=ネットワークアドレス/ネットマスク
# firewall-cmd --reload

設定例

「firewall-cmd --reload」を行わないと、設定が反映されないので注意してください。

# firewall-cmd --permanent --zone=drop --add-source=192.168.1.10/32
# firewall-cmd --reload

設定確認

「drop」ゾーンに登録したアドレスは下記のコマンドで確認することが出来ます。

# firewall-cmd --zone=drop --list-all

実行例

「sources」の項目に登録したIPアドレスが表示されていることが確認できます。

# firewall-cmd --zone=drop --list-all
drop
  interfaces:
  sources: 192.168.1.10/32
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

解除方法

「drop」ゾーンに設定されている情報を削除(remove-source)することで、遮断設定を解除することができます。

一時的に解除

一時的に解除する場合は、登録のときと同様に「--permanent」オプションをつけずに「--remove-source」で、解除したいネットワークアドレス指定します。

# firewall-cmd --zone=drop --remove-source=ネットワークアドレス/ネットマスク

恒久的に解除

恒久的に通信遮断の設定を解除したい場合は、「--permanent」オプションを指定してください。

# firewall-cmd --permanent --zone=drop --remove-source=ネットワークアドレス/ネットマスク
# firewall-cmd --reload

大量に数を遮断したい場合

国単位で通信を遮断したいとかになると、非常に膨大な量のネットワークアドレスを登録することになってしまいます。

そうなると、スループットも悪くなりますし、firewalld自体も非常に動作が重くなってしまうので、このような場合は「ipset」と「firewalld」を組み合わせることで、問題が解決されます。

設定方法はこちらのページで解説していますので、もしよろしければ参考にしてください。

 - firewalld