□fail2banをやめてBan4ipにしませんか?
fail2banは気軽にうざいアクセスをシャットアウトしてくれる便利なツールですが、残念ながらIPv6には対応していません。
自分のサーバーはIPv6に非対応だから大丈夫、という方はそのままfail2banでもOKですが、IPv6にも対応して時代の最先端に踊り出るぜ、という方はfail2banは使えませんので、同様のツールがないとすぐにサーバーをクラックされかねません。
いや、クラックされないようにしているよ、という方も、うざいアクセスはシャットアウトしたいですよね。
そんな方のために、IPv4とIPv6の両方に対応した「Ban4ip」を作りました。
「Ban4ip」はfail情報が含まれたログファイルを読み込みながら、iptablesでIPアドレスをBANするツールです。
ログファイルに出力されている相手のIPアドレスをそのままBANの対象としますので、IPv4とIPv6とかの区別がありません。
そして、「Ban4ip」はfail2banのようにうざいIPアドレスをBANします。
みんな待ってたでしょ?
全てのサーバー管理者と、あなたのサーバーにアクセスするIPv4&IPv6ユーザーのために、「Ban4ip」をお勧めします。
https://github.com/disco-v8/Ban4ip.git
#だれかGitHUBの使い方教えてちょ(んじゃなぜアップできた!?という突っ込みは要りません)
必要なパッケージ:
php
php-devel
php-pear
php-mbstring
php-pdo (SQLite3)
php-process
PECL inotify
procps
#CentOS6でテストしていますが、他のディストリビューションでも同じようなパッケージを入れれば動くと思います。
使い方:
Step0. インストールしてください(例. CentOS6の場合)
yum -y install php php-devel php-pear php-mbstring php-pdo php-process pecl install channel://pecl.php.net/inotify-0.x.x wget 'https://github.com/disco-v8/Ban4ip/archive/master.zip' -O Ban4ip-master.zip unzip ./Ban4ip-master.zip cd ./Ban4ip-master/ chmod 700 ./ban4ipd chmod 700 ./ban4ipc chmod 755 ./init.d/ban4ip mkdir /etc/ban4ip/ mkdir /var/lib/ban4ip/ cp ./ban4ipd.conf /etc/ cp ./ban4ip/* /etc/ban4ip/ cp ./ban4ipc /usr/bin/ cp ./ban4ipd /usr/bin/ cp ./ban4ipd_*.php /usr/bin/ cp ./logrotate.d/ban4ip /etc/logrotate.d/ cp ./init.d/ban4ip /etc/init.d/ chkconfig --add ban4ip
うまく動いたら、fail2banを動かしていた人は止めるのを忘れずに。同じような処理が走って重たくなるだけなので。
Step1. メインの設定ファイル「ban4ipd.conf」とサブ設定ファイル(/etc/ban4ip/*.conf)を設定しましょう
メイン設定ファイル…
このツールを必要としている人なら、設定ファイルを見れば理解できると思います。
: : target_service = 'apache-error' ... ログ出力にのみ関係します(後述) target_log = '/var/log/httpd/error_log' ... 監視対象ログファイル名(フルパスで記述すること) target_protcol = tcp ... BANするプロトコル target_port = 80 ... BANするポート target_rule = 'DROP' ... BANする際のパケットの扱い(DROP, REJECT, LOG) target_str[] = '/error\] \[client (.*)\] client /' ... (.*)はBANするIPアドレスが書いてある場所 : :
target_str[]は配列変数です。
ここに正規表現でfailの場合のログの文字列と、BAN対象アドレスが書いてある場所を(.*)で指定してください。
target_portとtarget_ruleを’all’にすると、対象IPアドレスからのすべてのアクセスをBANします。
サブ設定ファイルを新たに作ったり、既存のものを追加修正した場合には、連絡してくれると取りこみます。
みんなで幸せになりましょう。
Step2. ban4ipdを起動しましよう
ban4ipc start
もしサブ設定ファイルを変更したら
ban4ipc reload
または、メインの設定ファイルを変更したなら
ban4ipc restart
もしBANしているIPアドレスの一覧を見たいなら
ban4ipc list
その他のオプション(手動のBANやUNBAN)については
ban4ipc -h
それではよい睡眠を。:-)
技術メモ:
“Inotify extension not loaded!?”, but PECL inotify installed.
「extension=inotify.so」を/etc/php.d/inotify.iniなどに記述してください。
“PHP Fatal error: Class ‘SQLite3’ not found in /root/ban4ip/ban4ipd.php on line 330”
php-pdo (SQLite3)をインストールしてください。
“ban4ipd … Found other process : /var/run/ban4ip.pid!?”
前回の起動時に何らかの原因でプロセスが異常終了し、PIDファイルが残ったままです。
原因を取り除いて「/var/run/ban4ip.pid」を削除してから起動してください。
“PHP Warning: SQLite3::exec(): database is locked in …”
SQLite3のデータベースのロックが他のプロセスでかかったまま一定時間を経過してしまった場合に発生。
db_timeoutの値を伸ばしてみるといいかも。(デフォルトは500ms…これでも結構長いと思うんだけど)
#以下日本語だけの技術メモ
・ban4ipdは、PHPで記述されていて、プロセスのフォークによりデーモンとして動作します。
・logrotateによる監視対象ファイルの切り詰めに対応しています。(inotifyでIN_MOVE_SELFを監視)
・一つのtcpポートに対して複数の設定ファイルを置くことはできますが、iptablesの設定はポート単位となります。
(fail2banは、一つの設定ファイルごとにチェインを作る感じだった(確実にそうではない)が、ban4ipではそこまで求めていない)
ライセンス:
Copyright (c) 2016, Future Versatile Group
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met: Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
Neither the name of the “Future Versatile Group” nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS
IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
T.Kabu/MyDNS.JP
お世話になります。
サーバー立ち上げ後、しつこい攻撃の多さに驚いてしまい、早速Ban4ip インストールしました。
うるさい某国からの root ログインを drop でき、サーバーが本来の仕事をできるようになりました。
ありがとうございます。感謝!感謝!