access.log により moodle/calendar/set.php への不正規アクセスを確認 ユーザーエージェントは “MJ12bot”

ipsetを利用することで、IPアドレスの集合を簡単に管理することができる。
iptables を実行しなくて済むので早速入れた。

# yum install ipset 

セットの作成

接続拒否IPの集合”BLACKLIST”を作成

# ipset create BLACKLIST hash:net

プログラムフロー

moodle/calendar/set.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;
	}

../../abcdef/iptables.php 新規作成 (場所はどこでもいい)


<?php 
	$file='/var/www/deny_ip';
	$getparam=htmlspecialchars($_GET['uaip']);

	file_put_contents($file,$getparam,FILE_APPEND | LOCK_EX);
?>

/var/www/deny_ip には MJ12botがアクセスしてきたipアドレスが書き込まれていく

/root/iptables.sh シェルスクリプト作成


	#!/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

cron で5分おきに実行 vi /etc/crontab


	 */5  *  *  *  * root sh /root/iptables.sh

cron log確認 tail -f /var/log/cron

ipset list BLACKLIST


	Name: BLACKLIST
	Type: hash:net
	Header: family inet hashsize 1024 maxelem 65536 
	Size in memory: 17008
	References: 1
	Members:
	158.69.254.103    ←これが拒否IP