パソコン鳥のブログ

アクセスカウンタ

zoom RSS しつこい攻撃を fail2ban でブロックする

<<   作成日時 : 2015/06/16 19:34   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

fail2ban は、ログに特定のパターンが一定時間に指定回数現れたら、指定の動作を行います。
例えば、攻撃を示すログが現れた場合に、iptables で攻撃元からの接続をブロックします。
これにより、辞書攻撃などをブロックします。


例えば、/var/log/secure に下記ログが出力されたとします。
これは sshで試行しようとしたユーザ/パスワードが誤っていた場合に出力されるログです。
XXXXX がユーザ名、YY.YY.YY.YY が接続元のIPアドレス、ZZZZZ が接続元のポート番号です。


Failed password for invalid user XXXXX from YY.YY.YY.YY port ZZZZZ ssh2


fail2ban では、このログが10分間にCentOSでは5回、Ubuntuでは6回現れたら攻撃を受けていると判定し、iptables で攻撃元からの接続をブロックします。
ブロックは 10分後、解除します。

これにより、しつこい辞書攻撃などに対処します。



インストール



Ubuntu14.04 の場合



apt-get install fail2ban


インストール直後から fail2ban は起動しています。
また、システム起動時には自動起動もされます。



CentOS6の場合


まず、下記記事の手順で EPEL リポジトリを利用できるように設定します。
CentOS6でEPEL リポジトリを利用する設定 パソコン鳥のブログ/ウェブリブログ

設定後、次を実行します。

yum --enablerepo=epel install fail2ban


次に、CentOS での fail2ban の出力先を /var/log/messages に変更します。
以下のように /etc/fail2ban/jail.local を作成します。
なお、Ubuntu ではデフォルトで /var/log/fail2ban.log となっていますので、この作業は不要です。

/etc/fail2ban/fail2ban.local

[Definition]
logtarget = /var/log/fail2ban.log


/etc/fail2ban/fail2ban.local は、/etc/fail2ban/fail2ban.conf の設定を上書きします。
通常はこのように fail2ban.local の方に記述していきます。


fail2ban を起動します。


/etc/init.d/fail2ban start


これで fail2ban の動作が開始しました。
なお、次回システム起動時からは、fail2ban は自動起動してきます。




動作確認



fail2ban のデフォルトでは、ssh に対する攻撃がブロックされるようになっています。
10分間にCentOSでは5回、Ubuntuでは6回、sshのログインでIDやパスワードをミスしてみて下さい。
接続ブロックされ、サーバにssh接続できなくなります。
10分後、ブロックが解除され、サーバにアクセスできるようになります。


接続ブロックの際は、/var/log/fail2ban.log に次のような行が出力されます。
XX.XX.XX.XX が接続元IPアドレス(ブロックされたIPアドレス)になります。


CentOSの場合
WARNING [ssh-iptables] Ban XX.XX.XX.XX

Ubuntuの場合
WARNING [ssh] Ban XX.XX.XX.XX


ブロック解除の場合は、次のように出力されます。


CentOSの場合
WARNING [ssh-iptables] Unban XX.XX.XX.XX

Ubuntuの場合
WARNING [ssh] UnBan XX.XX.XX.XX



CentOSではこの際、通知先メールアドレスにメール送信することが出来ます。

この設定は、/etc/fail2ban/jail.conf の [ssh-iptables]セクションに記述されています。


[ssh-iptables]

enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]
logpath = /var/log/secure
maxretry = 5



dest= を変えると送信先メールを変更できます。
変更は、/etc/fail2ban/jail.local に以下のようにして記述します。


[ssh-iptables]
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=メールアドレス, sender=fail2ban@example.com, sendername="Fail2Ban"]


/etc/fail2ban/jail.local は、/etc/fail2ban/jail.conf の設定を上書きします。
通常はこのように jail.local に記述していきます。

記述後、設定を反映させます。


/etc/init.d/fail2ban reload




ブロックの仕組み


fail2ban のデフォルトでは、ssh に対する攻撃がブロックされるようになっていますが、このブロックは iptables によって行われます。

以下では iptables でのブロック/ブロック解除について説明します。
ここでは CentOS6の場合ですが、Ubuntu も基本的に同様です。


/etc/fail2ban/jail.conf , /etc/fail2ban/jail.local の[ssh-iptables]セクションが有効(デフォルト)になっていると、fail2ban起動時に以下が実行されます。


iptables -N fail2ban-SSH
iptables -A fail2ban-SSH -j RETURN
iptables -I INPUT -p tcp --dport ssh -j fail2ban-SSH


ユーザ定義チェイン fail2ban-SSH を作成し、fail2ban-SSHチェインではパケットを全て RETURN(許可も拒否もしない)します。
また、INPUTチェインの先頭に、TCP の ssh のポートに対して fail2ban-SSH を適用するルールを設定します。

これにより、iptables のルールの中で、まず fail2ban-SSHチェインのルールが適用されることになります。
fail2ban-SSHチェインは、初期状態では何もルールが登録されていませんが、接続ブロックやブロック解除時に次のようなルールが fail2ban によって登録されます。
<ip> は、ブロックやブロック解除の対象IPアドレスです。

接続ブロック時
fail2ban-SSH チェインの先頭に、指定IPアドレスを REJECT するルールを追加します。

iptables -I fail2ban-SSH 1 -s <ip> -j REJECT --reject-with icmp-port-unreachable


ブロック解除時
fail2ban-SSH チェインから、指定IPアドレスを REJECT するルールを削除します。

iptables -D fail2ban-SSH -s <ip> -j REJECT --reject-with icmp-port-unreachable


これら iptables へのルール追加/削除により、接続ブロックやブロック解除を行っています。




その他の攻撃にも対処する



fail2ban は、ssh以外への攻撃にも対処できます。
以下では CentOS6での例を説明します。


smtp認証の場合



smtp認証時のID/パスワードの認証エラーのログは、/var/log/mail.log に以下のように出力されます。
YY.YY.YY.YY が接続元のIPアドレスです。
このような認証エラーを示すログが一定回数現れると、接続をブロックするようにします。


warning: unknown[YY.YY.YY.YY]: SASL LOGIN authentication failed: UGFzc3dvcmQ6



/etc/fail2ban/jail.local に以下を追加します。


[sasl-iptables]
enabled = true


先に述べたとおり、jail.local は jail.conf の設定を上書きします。
jail.conf では以下のように記述されており、jail.local で enabled = true にすることで設定を有効にしています。


[sasl-iptables]

enabled = false
filter = postfix-sasl
backend = polling
action = iptables[name=sasl, port=smtp, protocol=tcp]
sendmail-whois[name=sasl, dest=you@example.com]
logpath = /var/log/mail.log


記述後、設定を反映させます。


/etc/init.d/fail2ban reload


これで、smtp認証時のID/パスワードの認証エラーに対しても動作するようになります。



メール受信時の認証



メール受信時のID/パスワードの認証エラーのログは、/var/log/mail.log に以下のように出力されます。
XXXXX がユーザ名、YY.YY.YY.YY が接続元のIPアドレスです。
このような認証エラーを示すログが一定回数現れると、接続をブロックするようにします。


auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=XXXXX rhost=YY.YY.YY.YY



/etc/fail2ban/jail.local に以下を追加します。

[dovecot-auth]
enabled = true



jail.conf では以下のように記述されており、jail.local で enabled = true にすることで設定を有効にしています。


[dovecot-auth]

enabled = false
filter = dovecot
action = iptables-multiport[name=dovecot-auth, port="pop3,pop3s,imap,imaps,submission,465,sieve", protocol=t
cp]
logpath = /var/log/secure



記述後、設定を反映させます。


/etc/init.d/fail2ban reload


これで、メール受信時のID/パスワードの認証エラーに対しても動作するようになります。





以上、fail2ban の説明でした。


参考


CentOS 6.5でfail2banを設定 | Works | URAMIRAIKAN
Ubuntu Manpage: jail.conf - configuration for the fail2ban server

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
しつこい攻撃を fail2ban でブロックする パソコン鳥のブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる