Help us understand the problem. What is going on with this article?

CentOS7 fail2banでSSH, SMTPへの攻撃からサーバを守る

More than 1 year has passed since last update.

Fail2banとは

公式:http://www.fail2ban.org/wiki/index.php/Main_Page

ログを監視し、大量アクセスなど攻撃の兆候を検知したら自動的に対象IPからのアクセスを拒否してくれます。

最近メールサーバを立てたので、
セキュリティを高めるべく導入します。

環境

OS CentOS7
firewall Firewalld
Postfix認証 SASL認証

ちなみにメールサーバに対する現在の攻撃状況

SSH

ログファイル:/var/log/secure
今日のお昼過ぎにポートのIP制限を撤廃しました。そこから3時間弱で20件よくわからんアクセスが来ています
image.png

SMTP

ログファイル:/var/log/maillog
こちらは約1週間で416件…
image.png

こいつらをやっつけます

インストールと設定

インストール

terminal
$ yum install fail2ban

設定

■ 一般設定

"fail2ban.conf"が設定ファイルですが
内容を編集したいときには、新規に"fail2ban.local"を新規作成して必要な個所のみオーバーライドします。

今回はログレベルをINFO → NOTICE へ下げました。

fail2ban.local
[Definition]
loglevel = NOTICE

■ 監視対象と条件

"jail.conf"が設定ファイルですが
これも内容を編集したいときには、新規に"jail.local"を新規作成して必要な個所のみオーバーライドします。

jail.local
[DEFAULT]

# 24時間以内に3回不審なアクセスがあったら24時間BAN
bantime  = 86400
findtime  = 86400
maxretry = 3

#CentOS7なのでsystemd
backend = systemd

# メール通知時の設定(ご自分の環境に合わせて)
destemail = you@example.com
sender = fail2ban@example.com
mta = postfix

# SSHのアクセスに対する設定
[sshd]
enabled = true
banaction = firewallcmd-ipset
       sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]#メール通知(任意)

# Postfixのアクセスに対する設定
[postfix-sasl]
enabled = true
banaction = firewallcmd-ipset
            sendmail-whois[name=SMTP, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]#メール通知(任意)

■ アクションの設定

規定回数の攻撃を検知した後は、対象のIPからのパケットを REJECT(拒否)ではなくDROP(破棄) するようにしておきます。
REJECTだと攻撃者にエラーメッセージを返してしまうため。

iptables-common.conf(編集箇所抜粋)
blocktype = DROP

■ 起動

起動して、自動起動設定。

terminal
$ systemctl start fail2ban 
$ systemctl enable fail2ban 
$ systemctl is-enabled fail2ban # 確認
 enabled

動作確認

・ ブロックされたIPを確認。
しめしめ

fail2banからの確認
# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 8
|  |- Total failed:     26
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 2
   |- Total banned:     2
   `- Banned IP list:   ***.***.***.*** ***.***.***.***


# fail2ban-client status postfix-sasl
Status for the jail: postfix-sasl
|- Filter
|  |- Currently failed: 17
|  |- Total failed:     877
|  `- Journal matches:  _SYSTEMD_UNIT=postfix.service
`- Actions
   |- Currently banned: 24
   |- Total banned:     24
   `- Banned IP list:   ***.***.***.*** ***.***.***.*** (以下略)

ipsetコマンドで確認
# ipset list fail2ban-sshd
Name: fail2ban-sshd
Type: hash:ip
Revision: 1
Header: family inet hashsize 1024 maxelem 65536 timeout 86400
Size in memory: 16656
References: 0
Members:
***.***.***.*** timeout 86145
***.***.***.*** timeout 86146

# ipset list fail2ban-postfix-sasl
Name: fail2ban-postfix-sasl
Type: hash:ip
Revision: 1
Header: family inet hashsize 1024 maxelem 65536 timeout 86400
Size in memory: 17936
References: 0
Members:
***.***.***.*** timeout 86143
***.***.***.*** timeout 86143
***.***.***.*** timeout 86299
(以下略)

既にBANされているIPからリクエストがあると
/var/log/fail2ban.logで "NOTICE [postfix-sasl] ... already banned"と通知が出ますが
/var/log/maillog の方には接続ログが出てきません。

参考にさせていただいたページ

ありがとうございました。
アタック対策 fail2ban (2016.1)
fail2banをインストールしてサーバへの不正攻撃を防ぐ
https://gtrt7.com/blog/linux/fail2ban

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした