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
ディスカッション
ピンバック & トラックバック一覧
[…] Firewalld環境でfail2banを利用する […]
[…] jQuery( document ).ready( function($ ) { jQuery( '#bsc-slideshow').nivoSlider({ effect: 'random', directionNav: true, controlNav: true, } ); } ); […]