- 论坛徽章:
- 0
|
本帖最后由 louyuguang 于 2011-12-27 10:03 编辑
回复 8# 可可火山
是一个蠢的办法,主要是通过fail2ban添加新规则,满足的需求,我们的需求是只要能按1小时或者1天禁止就可以了。所以下面脚本只有1天和1小时,当然这个方法可以改的更灵活
我们的需求中还要可以对网段进行禁止访问功能。
添加一个新action:
cp /action.d/iptables.conf /action.d/iptables-subnet.conf
修改/action.d/iptables-subnet.conf
actionban = iptables -I fail2ban-<name> 1 -s <ip>/24 -j DROP
actionunban = iptables -D fail2ban-<name> -s <ip>/24 -j DROP
在ip选项的后面加上/24
这样添加iptables规则时候就会对网段进行封锁
创建一个新filter.d
[root@CentOS6-78 fail2ban]# cat filter.d/manually.conf
[Definition]
failregex = <HOST>
在jail.conf添加一个规则:
[manually-ip]
enabled = true
filter = manually
action = iptables[name=httpd, port=80, protocol=tcp]
logpath = /etc/fail2ban/manually-ip
maxretry = 1
[manually-subnet]
enabled = true
filter = manually
action = iptables-subnet[name=httpd, port=80, protocol=tcp]
logpath = /etc/fail2ban/manually-subnet
maxretry = 1
需要创建这两个空文件,/etc/fail2ban/manually-ip /etc/fail2ban/manually-subnet
新建一个脚本:
[root@CentOS6-78 fail2ban]# cat fail2ban
#!/bin/bash
ip=$1
value=$2
time=$3
fail2ban()
{
if [ $value == "ip" ];then
if [ $time = "day" ];then
/usr/bin/fail2ban-client set manually-ip bantime 86400 >/dev/null
echo $ip `date` >> /etc/fail2ban/manually-ip
exit 0
elif [ $time = "hour" ];then
/usr/bin/fail2ban-client set manually-ip bantime 3600 >/dev/null
echo $ip `date` >> /etc/fail2ban/manually-ip
exit 0
else
echo "The 3rd parameter must be "day" or "hour""
exit 1
fi
elif [ $value == "subnet" ];then
if [ $time = "day" ];then
/usr/bin/fail2ban-client set manually-subnet bantime 86400 >/dev/null
echo $ip `date` >> /etc/fail2ban/manually-subnet
exit 0
elif [ $time = "hour" ];then
/usr/bin/fail2ban-client set manually-subnet bantime 3600 >/dev/null
echo $ip `date` >> /etc/fail2ban/manually-subnet
exit 0
else
echo "The 3rd parameter must be "day" or "hour""
exit 1
fi
else
echo "The 2nd parameter must be "ip" or "subnet""
exit 1
fi
}
case "$#" in
3 ) fail2ban
;;
* ) echo printf "Usage: \nfail2ban 192.168.2.137 ip day\nfail2ban 192.168.2.0 subnet hour\n";;
esac
exit 0
|
|