Fail2ban详细教程(fail2ban爬虫网段)

Fail2ban详细教程(fail2ban爬虫网段)

浏览次数:
信息来源: 用户投稿
更新日期: 2025-09-14
文章简介

最近网站总是被高频度扫描,导致数据库连接过多,打开页面报“Errorestablishingadatabaseconnection“错误。最开始写了个监控网站的脚本,一旦发现网站打不开,重启数据

2025阿里云双十一服务器活动

最近网站总是被高频度扫描,导致数据库连接过多,打开页面报“Errorestablishingadatabaseconnection“错误。最开始写了个监控网站的脚本,一旦发现网站打不开,重启数据库就好了。但是这几天网站挂掉的频率越来越高,不得不开始寻找新的办法了。

对于网站被恶意扫描、暴力破解、CC攻击这一系列攻击,都有相似的特征,即高频率发请求导致主机资源使用率飙高。对于这些问题,必须要做两件事,一个是识别恶意发请求的IP,并封禁;二个是实现网站缓存、静态化等功能减少数据库查询。今天介绍下识别频繁发请求的IP并封IP的工具。

调研了cckiller、WordfenceSecurity、fail2ban这三个工具,最终选择了fail2ban。

fail2ban、cckiller、WordfenceSecurity对比分析

首先是cckiller,是国内大佬实现的linux轻量级cc防御工具。是根据当前http连接数计算并发量,如果某个ip的并发量大于某个值则在iptables中封禁该ip。是个不错的工具,但有两个小问题。一个是只能根据某个时刻计算并发量封IP,不能计算某个时间段的总请求数来封IP;二个是兼容性不太好,适合在centos上运行,但个人习惯用ubuntu。

其次是WordfenceSecurity,wordpress安全插件。据说可以根据某个时间段访问网站总次数超过阈值后,封禁该IP。但是问题较多,该插件比较庞大,只为了这个功能安装插件不划算;没有汉化;该功能好像要付费才能用的更流畅。简单试了下,不太合适。

最终选择了fail2ban,有以下优点。

根据实时日志,统计请求数量,如果某个时间段,某种请求超过了阈值,就可以封禁该IP

配置简单,配置文件几行配置就能实现需求

支持多种监控。简单举几个例子。可以读取ssh的登录日志,如果某个ip在某个时间段登录失败次数过多,则封该ip;读取apache访问日志,如果某个ip在某个时间段防问次数过多,则封该ip

Fail2ban安装步骤&使用教程

使用场景:操作系统是ubuntu,web服务器为apache。将3分钟内请求数量超过300次的ip视为恶意扫描IP直接封禁。(其他操作系统和web服务器配置流程基本一样)

yum-yinstallepel-release

主要是配置/etc/fail2ban/jail.conf文件

#忽略IP,IP白名单,这些IP永远不会被禁

#日志文件中,在findtime时间段内,ip出现超过maxretry次数,就会封禁该IP

#"backend"指获取日志文件的方法,分为"pyinotify","gamin","polling","auto"四种

#auto值得是哪种可用就用哪种,默认polling可用

#"usedns"specifiesifjailsshouldtrusthostnamesinlogs,

destemail=xxxxxx@gmail.com

#Nameofthesenderformtaactions

#默认的动作执行行为,在action.d目录下有各种行为策略,默认是iptables-multiport

banaction=iptables-multiport

#emailaction.Since0.8.1upstreamfail2banusessendmail

#Specifychainwherejumpswouldneedtobeaddediniptables-*actions

action_=%(banaction)s[name=%(__name__)s,port="%(port)s",protocol="%(protocol)s",chain="%(chain)s"]

action_mw=%(banaction)s[name=%(__name__)s,port="%(port)s",protocol="%(protocol)s",chain="%(chain)s"]

Fail2ban详细教程,fail2ban爬虫网段

#禁IP+邮件通知+报告相关日志

action_mwl=%(banaction)s[name=%(__name__)s,port="%(port)s",protocol="%(protocol)s",chain="%(chain)s"]

%(mta)s-whois-lines[name=%(__name__)s,dest="%(destemail)s",logpath=%(logpath)s,chain="%(chain)s",sendername="%(sendername)s"]

#以下是各种应用监控日志的配置,以ssh日志和apache日志为例说明一下配置原理

logpath?=/var/log/auth.log

logpath=/var/log/apache2/access.log

ssh日志监控

enabled=true,表示开启监控

filter在/etc/fail2ban/filter.d/sshd.conf中定义,主要定义了找到错误日志的正则

该配置意思为:实时监控ssh登录日志(/var/log/auth.log),如果某个ip在600秒内登录错误了6次(根据filter正则判断),则封禁该IP

apache日志监控

enabled=true,表示开启监控

filter在/etc/fail2ban/filter.d/php-url-fopen.conf中定义,主要定义了匹配访问日志的正则。其中fail2ban默认的正则有点问题,需要稍微修改下,修改后如下

failregex=^<HOST>-.*"(GET|POST).*HTTP/.*$

Logpathapache日志存放路径

该配置意思为:实时监控apache访问日志(/var/log/apache2/access.log),如果某个ip在180秒内访问了200次(根据filter正则判断),则封禁该IP

#fail2ban服务重启、停止、开启

servicefail2banrestart|stop|start

fail2ban-clientstatusphp-url-fopen

使用三方smtp服务器发送通知邮件

由于腾讯云的25端口有限制不能使用系统自带的sendmail,需要调用三方的stmp服务器,如163服务器,并使用端口为465的ssl协议发送邮件。配置如下

安装mail,apt-getinstallheirloom-mailx

修改/etc/nail.rc(ubuntu16.04为/etc/s-nail.rc、centos为/etc/mail.rc)

set?nss-config-dir=/etc/pki/nssdb

set?from=邮件地址@163.com

set?smtp=smtps://smtp.163.com:465

set?smtp-auth-user=邮件地址@163.com

set?smtp-auth-password=e8456ds78c23

echo&8221;.|mail-v-s&8221;xxxx@qq.com

jail.conf中mta改为mail,即可

标签:
网站在美国服务器上怎么提高访问速度(国外服务器访问速度慢)
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!