access.log により moodle/calendar/set.php への不正規アクセスを確認 ユーザーエージェントは “MJ12bot”
ipsetを利用することで、IPアドレスの集合を簡単に管理することができる。
iptables を実行しなくて済むので早速入れた。
# yum install ipset
セットの作成
接続拒否IPの集合”BLACKLIST”を作成
# ipset create BLACKLIST hash:net
プログラムフロー
moodle/calendar/set.php 先頭へ追記
[highlight_php]
$uaip = $_SERVER[‘REMOTE_ADDR’];//ipを取得
$ua = $_SERVER[‘HTTP_USER_AGENT’];// ユーザエージェントを取得
if( strpos($ua, ‘MJ12bot’) !== false ){
http_response_code( 301 ) ;
header( “Location: ../../abcdef/iptables.php?uaip=$uaip” ) ;
exit;
}
[/highlight_php]
../../abcdef/iptables.php 新規作成 (場所はどこでもいい)
[highlight_php]
<?php
$file=’/var/www/deny_ip’;
$getparam=htmlspecialchars($_GET[‘uaip’]);
file_put_contents($file,$getparam,FILE_APPEND | LOCK_EX);
?>
[/highlight_php]
/var/www/deny_ip には MJ12botがアクセスしてきたipアドレスが書き込まれていく
/root/iptables.sh シェルスクリプト作成
[highlight_php]
#!/bin/bash
# 拒否IPリストに記載されたIPからのアクセスを拒否する
if [ -s /var/www/deny_ip ]; then
for ip in `cat /var/www/deny_ip`
do
ipset add BLACKLIST $ip
done
fi
: > /var/www/deny_ip
[/highlight_php]
cron で5分おきに実行 vi /etc/crontab
[highlight_php]
*/5 * * * * root sh /root/iptables.sh
[/highlight_php]
cron log確認 tail -f /var/log/cron
ipset list BLACKLIST
[highlight_php]
Name: BLACKLIST
Type: hash:net
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 17008
References: 1
Members:
158.69.254.103 ←これが拒否IP
[/highlight_php]