Linux Install Memo

サーバー管理者によるLinux関連ソフトのインストールメモ

Home » □fail2banをやめてBan4ipにしませんか?

□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

Name of author

Name: admin

One thought on “□fail2banをやめてBan4ipにしませんか?

  • まさきち

    お世話になります。
    サーバー立ち上げ後、しつこい攻撃の多さに驚いてしまい、早速Ban4ip インストールしました。
    うるさい某国からの root ログインを drop でき、サーバーが本来の仕事をできるようになりました。
    ありがとうございます。感謝!感謝!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です