fail2banは楽しい
※この記事はDebianLinux6.x.x環境です。
fail2banはアクセスログを常に監視して、最近増えている不正アクセスを自動的に(ルールに従って)検知して、悪いことをしかけているクライアントをアクセス制限することができます。
アクセス禁止はiptablesに、自分で設定した期間適用され、期限が来ると自動的に解除されます。
本来はサーバーにアクセス制限をかけるというのは私のポリシーに反しますし、誰でもWelcome!なもので無くてはならないと思うのですが、でもでも・・・
やってみると意外と楽しい!!(笑)
ので、いくつかコンセプトを作ってやってみたいと思います。
どうせログなんざ目がチカチカするだけで、5万年に1度しか見やしないくせに、容量だけどんどん増えていきやがりますので、少しは役に立って見せろと。
そう思うのと、いつかは書いてみようと思っていましたので。
皆様ご承知の通りかと存じますが、不正なログインを試みようとする不埒な輩は中国が圧勝です。
ギネスに申請できるレベルです。
日本の人口の10倍いるわけですから、不正アクセスは100倍多いはずです。(先生、計算合ってないと思います。)
というわけで、中国人には申し訳ないアルけど、我慢するのコトヨ?
規制のコンセプト
- .htaccessを利用して中国からのインターネットアクセス(:80と:443)を403forbidden規制。
- apacheのerror.logから、一定のルールを作ってban(アクセス禁止)できるようにする。
- 具体的には10回403を食らっているにも関わらず、しつこくアクセスしてくる不埒な輩に適用。
- アクセス禁止期間は1日とする。
インストール
# aptitude install fail2ban python-gamin
python-gaminはディレクトリとファイルの監視をしてくれるソフトです。
開始
# /etc/init.d/fail2ban start
停止
# /etc/init.d/fail2ban stop
インストールされる場所は"/etc/fail2ban"
# ls /etc/fail2ban
action.d fail2ban.conf filter.d jail.conf
この辺りはいつもな感じです。
アクセス禁止対象のIPアドレス集を.htaccessに書き込む
インターネットで「アジア IPアドレス」とか検索すると出てきます。
どうにかして.htaccessに書き込めるようにテキストの形を整えてください。
自分は以下のように書き込んでみました。
さて、上記を.htaccessに書き込めば、中国からアクセスがあった場合に403 Forbiddenを返すことができます。
するとこれからは、apacheのerror.logに
" ~ client denied by server configuration: ~ "
というfail2banが拾いやすい一定の文字列を出せるようになりました。
自分でルールを作ってみよう
/etc/fail2ban/jail.conf に”[apache-client-denied]”という項目を自分で作ってみます。
他の記述と同じように書けば良いです。
# vi /etc/fail2ban/jail.conf で、以下のようなルールを勝手に書き込んでみます。
[apache-client-denied]
enabled = true
port = http,https
filter = apache-client-denied
logpath = /var/log/apache*/*error.log
maxretry = 10
このように書いてみました。
#
# HTTP servers
#
のところに追記するような形で追加しました。
同じようにして他の設定も enabled = true にすることによって、見張ってくれるようになります。
次に"/etc/fail2ban/filter.d/"にさっき勝手に名前をつけた "apache-client-denied.conf" という名前でファイルを作成します。
ちなみに"filter.d"はファイルでは無くディレクトリです。
# vi /etc/fail2ban/filter.d/apache-client-denied.conf
書き込む内容は
[Definition]
failregex = [[]client <HOST>[]] client denied by server configuration: *
ignoreregex =
こんな感じで、他のファイルに習って書いてみました。
以上で、apacheのerror.logに上の文字列が10回連続で来たらガッツリやっちゃってください!
というルールの完成です。
fail2banを再起動してください。
規制期間を1日にしたり、その他
# vi /etc/fail2ban/jail.conf をして、設定をちょっと変えてみましょう。
・1日は86400秒ということが私の3ヶ月にも及ぶ研究の結果判明しましたので以下のように修正します。
bantime = 86400
・無視するIPアドレスも設定しておきましょう。
管理者がBanされるとか、何考えてるんだと。でも、ちょっとBanされてみたい・・・などと。
ignoreip = 127.0.0.1 192.168.1.0/24
こんな感じで自分のサーバーのアドレスを書いておくと吉です。
・ファイルの監視を何に任せるかバックエンドを変えましょう。せっかくphython-gaminを入れたので、以下のように修正します。
#backend = polling
backend = gamin
・再起動してください。
# /etc/init.d/fail2ban restart
エラーなどが無ければ完了です。
お疲れ様です。
しばらくたったら/var/log/fail2ban.logを見てみてください。
2013-01-07 11:26:08,931 fail2ban.actions: WARNING [apache-client-denied] Ban 117.21.225.42
2013-01-07 13:09:25,466 fail2ban.actions: WARNING [apache-client-denied] Ban 117.21.225.25
2013-01-07 17:47:58,237 fail2ban.actions: WARNING [apache-client-denied] Ban 59.140.8.13
おぉ!ちゃんと自分ルールで不埒な輩をBanしてくれている!
この強制鬼ごっこ感が素敵!
・・・ということになっていたら、楽しくなりますね。
これで、セキュリティの面でもかなりパワーアップしたはずです。
※最後に重要な考え方を一つ
アクセス禁止を設けることは、世界中からの不正アクセスの脅威に対してこの上なく有効な手段です。
それが自動化されるわけですから、もはや最強といえます。
しかし、今回は中国からのアクセスを禁止(Fobidden)することにより、中国12億人/全世界60億人、少し大げさですが、世界中の人口の約5分の1もの人からのアクセス=チャンスの芽を自ら踏み潰してしまうこととなります。
これがビジネスの世界だったらどうでしょう?
アクセス制限を設けるということは、別の意味でのリスクと覚悟が必要ということです。
ビジネスチャンスに比べたら、昨今の情勢においては不正アクセスなど最早リスクでは無いのかもしれません。
ナントカも75日なわけです。のど元過ぎればナントカなわけです。
個人的には、制限など何一つ意味が無いと思っています。
おわり
(やべー、かっけー俺。)
コメントする
ゲストとして投稿します