« | »

2015.04.03

Fail2banを試す。

一年ぶり?ぐらいのLunuxネタ。
ここ最近一生懸命アクセスを試みる輩が増えている。今のところ単純な辞書アタック見たいだけど、ログにずらずらと残されるのは正直邪魔。

そんなこんなで巷で噂(?)のFail2banを入れてみたいと思います。もちろん色々面倒なんでyum様万歳です。
因みにOSはCentOS6.6
最近旧サーバーが壊れて入れ直したので7でも良かったんだけど、設定周りとか前のそのまま流用したかったので現状維持の6.6で再構築。

# yum install fail2ban.noarch

でインストール、次いでSSHに対するBanの設定

※2015/07/14編集
jail.confは将来のアップデートで上書き更新されてしまう可能性もあることから直書きではなく、jail.localに変更したい必要部分を記入することでデフォルトの設定を上書き出来るようです。

・/etc/fail2ban/jail.local

[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.0.0/24
bantime = 3600
findtime = 600

[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

※赤字部分を適所変更。
ignoreip:BAN対象外のアドレス。複数の場合は半角スペース区切り。
bantime:BANしたときにブロックする時間。秒指定。デフォは600。
findtime:この時間内にmaxretry回数リトライでBAN。秒指定。デフォは600。
dest:通知メールを送るアドレス。
sender:通知メールの送信者に入るアドレス。
logpath:SSH接続ログの場所。OS等によって違うので注意。
maxretry:findtime指定秒数中に何回リトライしたらBANするか。

基本はこんなもん。
これで外で借りてるサーバーは問題無く楽々起動。起動しましたメールが設定したアドレスに飛んでくる。
ちなみに sendmail-whois はBANしたときに飛ばすメールに該当IPのwhois情報を記載するスクリプトなので /usr/bin/whois コマンドが必要。
無い場合はyumなんかで入れましょ。
スクリプトを見る限り /usr/bin/whois 決め打ちのようなので /usr/local/bin/whois とかな人はシンボリックで対応しましょ。

そしてその流れで家のサーバーにもインストールし、起動させるとこちらも問題無く起動して起動メールが来、、、ねぇ( ´Д`)
OSも全く同じでyumから入れたFail2banのVerも全く一緒なんだが、、、
確認すると起動はしている、ただ、起動してもブロックしてもメールが飛んでこない状態のようだ。

なんでログを確認。

fail2ban.actions.action[4345]: ERROR printf %b "Subject: [Fail2Ban] SSH: started on `uname -n`
Date: `LC_TIME=C date -u +"%a, %d %h %Y %T +0000"`
From: Fail2Ban <fail2ban@example.com>
To: you@example.com\n
Hi,\n
The jail SSH has been started successfully.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f fail2ban@example.com you@example.com returned 7e00

なんか変なエラー出てる、、、( ´Д`)
しかしイマイチ当を得ない。
Google先生に聞いたりしたがこちらも実りがなく、これで丸一日ハマる。

ふと思い立ってエラーで出てるコマンドをそのまま叩いて見る。
、、、ちゃんとメールが飛ぶ。

もしやと思い、起動コマンドを直叩きしてみる。
、、、ちゃんとメールが飛ぶ。

この時点で起動スクリプトに問題があると判断。
だが別のサーバーで動いていると言う事は書式に間違いがあるとは思えない。
そうなるとPerlなんかで良く喰らったアレだ、

文字コード or 改行コード

原因は分からないがそこあたりでおかしい可能性が高い。
もうめんどくさいので起動スクリプトにnkfを噛ませて流す。

# /etc/rc.d/init.d/fail2ban stop
# cd /etc/rc.d/init.d/
# mv fail2ban fail2ban.org
# cat fail2ban.org | nkf -w > fail2ban
# chmod 755 fail2ban
# /etc/rc.d/init.d/fail2ban start

よし、動いたっメール飛んだっ(キリッ
UTF8の場合なのでそれ以外の文字コードの場合は nkf のオプションで指定ネ。

しかしよく見たらエラー文の中に改行コード \n がまんま出ちゃってるじゃんYO
まぁでもあれだけじゃ気付かなかったよ( ´・ω・)

※2016/03/08追記
どうやら悪いのは文字コードではなくSELinuxだった模様。無効にし忘れてた。
CentOS5ではインストール時に有効無効選べた気が済んだけどな、、、
なので上記みたいなエラーが出てメールが飛ばなかったり、fail2banとは関係無いですが「手動では動くのにcronに仕掛けると動かない」とか言う症状の場合はSELinuxが有効になっていないか確認しましょう。

あと起動スクリプトをいちいちフルパスで入れるのは癖なんで気にしないで下さい。

トラックバック URL

コメント & トラックバック

コメントはありません。

Comment feed

コメント





XHTML: 下記のタグが使用出来ます。:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

日本語が含まれない投稿は無視されますのでご注意ください(スパム対策)。また、コメントは管理者の許可制のため投稿後すぐには反映されません。