Firewalld環境でfail2banを利用する

CentOS 7系の環境で「fail2ban」を利用して不正なアタックを締め出すようにします。F/Wは「Firewalld」を利用しています。Firewalldの設定は既に構築済みとして説明していきます。過去の記事「Firewalldの設定方法 ポートの開放」でFirewalldの設定は触れているので参考にして頂ければと思います

fail2ban のインストール

fail2banは、epelのレポジトリを追加したらyumコマンドでインストールできるので、それを利用してインストールします

$ sudo yum install epel-release
$ sudo yum install fail2ban fail2ban-systemd

fail2ban の設定

設定ファイルは「/etc/fail2ban/jail.conf」がありますが、このファイルは直接編集は推奨されていません。
その為に「/etc/fail2ban/jail.d/」のディレクトリに新規に設定ファイルを追加して設定します。

fail2ban でブロックするのは「SSH」と、メールサーバーSMTP認証に不正アクセスに対応したいので「postfix-sasl」の2つを対応します。
SSH接続は標準ポートではなく「9722」を利用しているので、そのポートを監視対象としています。SSHのポートを変更していない場合は「port = 9722」の箇所をコメントアウトするか削除して下さい

今回設定した設定ファイルは以下になります。
下記では、30分で3回以上不正なアクセスが有る場合は、1時間そのIPアドレスを拒否(BAN)します。また、24時間で3回以上の場合は1週間、そのIPアドレスを拒否(BAN)します

$ sudo vi /etc/fail2ban/jail.d/jail.local
[DEFAULT]
backend  = systemd
bantime = 3600 ; BANされたIPアドレスがアクセスを禁止される期間(秒) 1時間
findtime = 1800 ; BANの判定時間(秒) 30分
maxretry = 3 ; アクセス回数

[sshd]
enabled = true
port = 9722

[postfix-sasl]
enabled = true
filter   = postfix[mode=auth]
logpath  = %(postfix_log)s
backend  = %(postfix_backend)s

[recidive]
enabled = true
bantime = 604800 ; BANされる期間(秒)1週間
findtime = 86400 ; BANの回数判定時間(秒)24時間
maxretry = 3 ; BAN回数

fail2ban の起動及び自動起動の設定

fail2banを起動して、自動起動もONに設定します

$ sudo systemctl start fail2ban
$ sudo systemctl enable fail2ban

動作確認

fail2ban が起動したら、SSH、postfix-saslが動作しているか確認します。postfix-sasl の方は不正アクセスあるらしくIPアドレスが記載されています

# postfix-sasl
$ sudo fail2ban-client status postfix-sasl
Status for the jail: postfix-sasl
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=postfix.service
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   x.x.x.x

# sshd
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

Firewalld 側で不正アクセスがあったIPアドレスが追加されているか確認します。

$ sudo firewall-cmd --list-all --zone=public
public (active)
# 一部省略
  rich rules: 
        rule family="ipv4" source address="x.x.x.x" port port="smtp" protocol="tcp" reject type="icmp-port-unreachable"
        rule family="ipv4" source address="x.x.x.x" port port="465" protocol="tcp" reject type="icmp-port-unreachable"
        rule family="ipv4" source address="x.x.x.x" port port="submission" protocol="tcp" reject type="icmp-port-unreachable"
        rule family="ipv4" source address="x.x.x.x" port port="imap" protocol="tcp" reject type="icmp-port-unreachable"
        rule family="ipv4" source address="x.x.x.x" port port="imaps" protocol="tcp" reject type="icmp-port-unreachable"
        rule family="ipv4" source address="x.x.x.x" port port="pop3" protocol="tcp" reject type="icmp-port-unreachable"
        rule family="ipv4" source address="x.x.x.x" port port="pop3s" protocol="tcp" reject type="icmp-port-unreachable"

ブロックしたIPアドレスは追加されていますが、reject type="icmp-port-unreachable" で接続が拒否していますが、REJACTじゃなくてDROPの方が良い場合は、fail2banのアクション定義を以下に変更するとDROPに変更します

  • 「reject」の場合は、"icmp-port-unreachable" 等を返し、パケットを破棄します
  • 「drop」の場合は、パケットを破棄し、送信元にエラーは返しません
$ sudo vim /etc/fail2ban/action.d/firewallcmd-common.local
[Init]
blocktype = DROP
#rich-blocktype = dro

# 設定を変更したらfail2banを、再起動します
$ sudo systemctl start fail2ban

fail2ban で拒否(BAN)したIPアドレスの解除

fail2ban で拒否(BAN)したIPアドレスを解除するには、「fail2ban-client set [jail名] unbanip [IPアドレス]」で解除できます。
下記では、postfix-sasl で拒否(BAN)された「192.168.50.31」のIPのアドレスを解除しています

$ sudo fail2ban-client set postfix-sasl unbanip 192.168.50.31

firefalld は以下のようにDROPに変更されています

#  firewall-cmd --list-all --zone=public
public (active)
# 一部省略
  rich rules: 
        rule family="ipv4" source address="x.x.x.x" port port="smtp" protocol="tcp" drop
        rule family="ipv4" source address="x.x.x.x" port port="465" protocol="tcp" drop
        rule family="ipv4" source address="x.x.x.x" port port="submission" protocol="tcp" drop
        rule family="ipv4" source address="x.x.x.x" port port="imap" protocol="tcp" drop
        rule family="ipv4" source address="x.x.x.x" port port="imaps" protocol="tcp" drop
        rule family="ipv4" source address="x.x.x.x" port port="pop3" protocol="tcp" drop
        rule family="ipv4" source address="x.x.x.x" port port="pop3s" protocol="tcp" drop

 

 

 

 

LinuxCentOS 7

Posted by admin