Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
189 lines (122 sloc) 7.42 KB
<<< BAN for IP address >>>
このソフトは、fail情報が含まれたログファイルを読み込みながら、iptablesでIPアドレスをBANするツールです。
"ban4ip"はIPv4とIPv6アドレスに対応しています。
fail2banがIPv6に対応してくれなかったので、作りました。
全てのサーバー管理者とIPv4&IPv6ユーザーのために。:-)
必要なパッケージ:
php
php-devel
php-pear
php-mbstring
php-pdo (SQLite3)
php-process
PECL inotify
procps
使い方:
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
Step1. メインの設定ファイル「ban4ipd.conf」とサブ設定ファイル(/etc/ban4ip/*.conf)を設定しましょう
メイン設定ファイル...
このツールを必要としている人なら、設定ファイルを見れば理解できると思います。
サブ設定ファイル...
-------------------------------
:
:
target_service = 'apache-error' ... ログ出力にのみ関係します(後述)
target_log = '/var/log/httpd/error_log' ... 監視対象ログファイル名(フルパスで記述すること)
target_protcol = tcp ... BANするプロトコル(tcp, udp, all)
target_port = 80 ... BANするポート(nnn or all)
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…これでも結構長いと思うんだけど)
"The user limit on the total number of inotify instances has been reached"
"Failed to obtain an inotify instance!?"
申し訳ありませんが、監視対象ログが多すぎるので減らしてください。(つまり、.confを減らす)
#以下日本語だけの技術メモ
・ban4ipdは、PHPで記述されていて、プロセスのフォークによりデーモンとして動作します。
・logrotateによる監視対象ファイルの切り詰めに対応しています。(inotifyでIN_MOVE_SELFを監視)
・一つのtcpポートに対して複数の設定ファイルを置くことはできますが、iptablesの設定はポート単位となります。
 (fail2banは、一つの設定ファイルごとにチェインを作る感じだった(確実にそうではない)が、ban4ipではそこまで求めていない)
・バージョンアップの際には、以下のPHPスクリプトのみ
 cp ./ban4ipc /usr/bin/
 cp ./ban4ipd /usr/bin/
 cp ./ban4ipd_*.php /usr/bin/
 コピーして、必要に応じて設定(conf)ファイルを修正すればOK
・PHPのポリシーによりsystemd配下ではUTCによる処理になっていたので、サーバーのローカルタイム(local_time())を取得する処理を追加した
・CentOS6でテストしていますが、他のディストリビューションでも同じようなパッケージを入れれば動くと思います。
・CentOS7でもふつーに使ってます。
・SQLite3でのジャーナルモードをWALに、同期モードをNORMALにしました。
・PDO入れているのに何で使わんの?という突っ込みが入ったのでPDOで処理するようにしました。
・BAN対象のアクセスが多いサーバーで、いつの間にかBAN対象のカウントが止まっている事象が発生。
 調査してみると、SQLite3への記録が追い付かないためにDBとのアクセスがハングアップしてしまう。
 それだけではなく、カウント用データベース(count.db)そのものが壊れる事象も確認。
 このため、BAN対象がカウント出来なくなったらファイルを削除して0から作り直すような処理を追加。
ライセンス:
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 "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
You can’t perform that action at this time.