Fail2ban详细教程,解决网站被扫描、CC攻击、ssh暴力破解、防爬虫等问题
![]() | ![]() | ![]() | ![]() |
| 【性价之王】 | 【线路之王】 | 【价格之王】 | 【配置之王】 |
| 【免费之王】 | 【香港首推】 | 【梯子之王】 | 【独服之王】 |

最近网站总是被高频度扫描,导致数据库连接过多,打开页面报“Error establishing a database connection“错误。最开始写了个监控网站的脚本,一旦发现网站打不开,重启数据库就好了。但是这几天网站挂掉的频率越来越高,不得不开始寻找新的办法了。
对于网站被恶意扫描、暴力破解、CC 攻击这一系列攻击,都有相似的特征,即高频率发请求导致主机资源使用率飙高。对于这些问题,必须要做两件事,一个是识别恶意发请求的 IP,并封禁;二个是实现网站缓存、静态化等功能减少数据库查询。今天介绍下识别频繁发请求的 IP 并封 IP 的工具。
调研了 cckiller、Wordfence Security、fail2ban 这三个工具,最终选择了 fail2ban。
fail2ban、cckiller、Wordfence Security 对比分析首先是 cckiller,是国内大佬实现的 linux 轻量级 cc 防御工具。是根据当前 http 连接数计算并发量,如果某个 ip 的并发量大于某个值则在 iptables 中封禁该 ip。是个不错的工具,但有两个小问题。一个是只能根据某个时刻计算并发量封 IP,不能计算某个时间段的总请求数来封 IP;二个是兼容性不太好,适合在 centos 上运行,但个人习惯用 ubuntu。
其次是 Wordfence Security,wordpress 安全插件。据说可以根据某个时间段访问网站总次数超过阈值后,封禁该 IP。但是问题较多,该插件比较庞大,只为了这个功能安装插件不划算;没有汉化;该功能好像要付费才能用的更流畅。简单试了下,不太合适。
最终选择了 fail2ban,有以下优点。
fail2ban 功能特色根据实时日志,统计请求数量,如果某个时间段,某种请求超过了阈值,就可以封禁该 IP
支持 yum/apt 一键安装。
配置简单,配置文件几行配置就能实现需求
支持多种监控。简单举几个例子。可以读取 ssh 的登录日志,如果某个 ip 在某个时间段登录失败次数过多,则封该 ip;读取 apache 访问日志,如果某个 ip 在某个时间段防问次数过多,则封该 ip
支持邮件通知。
Fail2ban 安装步骤&使用教程使用场景:操作系统是 ubuntu,web 服务器为 apache。将 3 分钟内请求数量超过 300 次的 ip 视为恶意扫描 IP 直接封禁。(其他操作系统和 web 服务器配置流程基本一样)
安装 fail2ban
#ubuntuapt-get install fail2ban#CentOSyum -y install epel-releaseyum -y install fail2banfail2ban 配置原理介绍
主要是配置/etc/fail2ban/jail.conf 文件
[DEFAULT]# 忽略 IP,IP 白名单,这些 IP 永远不会被禁ignoreip = 127.0.0.1/8#IP 被封禁的时间,单位秒bantime = 600#日志文件中,在 findtime 时间段内,ip 出现超过 maxretry 次数,就会封禁该 IPfindtime = 600maxretry = 3# "backend" 指获取日志文件的方法,分为"pyinotify", "gamin", "polling", "auto"四种# auto 值得是哪种可用就用哪种,默认 polling 可用backend = auto# "usedns" specifies if jails should trust hostnames in logs,usedns = warn#接受邮件地址destemail = xxxxxx@gmail.com# Name of the sender for mta actionssendername = Fail2Ban#默认的动作执行行为,在 action.d 目录下有各种行为策略,默认是 iptables-multiportbanaction = iptables-multiport# email action. Since 0.8.1 upstream fail2ban uses sendmailmta = sendmail# Default protocolprotocol = tcp# Specify chain where jumps would need to be added in iptables-* actionschain = INPUT#定义各种行为参数#只禁 IPaction_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]#禁 IP+邮件通知action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]%(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s", sendername="%(sendername)s"]# 禁 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"]# 选择行为action = %(action_)s#以下是各种应用监控日志的配置,以 ssh 日志和 apache 日志为例说明一下配置原理[ssh]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 6[php-url-fopen]enabled = trueport = http,httpsfilter = php-url-fopenaction = %(action_mwl)slogpath = /var/log/apache2/access.logfindtime = 180maxretry = 200ssh 日志监控
enabled=true,表示开启监控
filter 在/etc/fail2ban/filter.d/sshd.conf 中定义,主要定义了找到错误日志的正则
Logpath ssh 日志存放路径
默认 findtime 为 600 秒
错误次数阈值为 6 次。
该配置意思为:实时监控 ssh 登录日志(/var/log/auth.log),如果某个 ip 在 600 秒内登录错误了 6 次(根据 filter 正则判断),则封禁该 IP
apache 日志监控
enabled=true,表示开启监控
filter 在/etc/fail2ban/filter.d/ php-url-fopen.conf 中定义,主要定义了匹配访问日志的正则。其中 fail2ban 默认的正则有点问题,需要稍微修改下,修改后如下
[Definition]failregex = ^<HOST> -.*"(GET|POST).* HTTP\/.*$ignoreregex =Logpath apache 日志存放路径
findtime 为 180 秒
访问次数阈值为 200 次。
该配置意思为:实时监控 apache 访问日志(/var/log/apache2/access.log),如果某个 ip 在 180 秒内访问了 200 次(根据 filter 正则判断),则封禁该 IP
Fail2ban 管理&常用命令#fail2ban 服务重启、停止、开启service fail2ban restart|stop|start#查看 fail2ban 状态fail2ban-client status#查看日志监控状态fail2ban-client status php-url-fopen#查看 iptables 禁 ip 情况iptables -nvL使用三方 smtp 服务器发送通知邮件由于腾讯云的 25 端口有限制不能使用系统自带的 sendmail,需要调用三方的 stmp 服务器,如 163 服务器,并使用端口为 465 的 ssl 协议发送邮件。配置如下
安装 mail ,apt-get install heirloom-mailx
修改/etc/nail.rc(ubuntu16.04 为/etc/s-nail.rc、centos 为/etc/mail.rc)
添加
set ssl-verify=ignoreset nss-config-dir=/etc/pki/nssdbset from=邮件地址@163.comset smtp=smtps://smtp.163.com:465set smtp-auth-user=邮件地址@163.comset smtp-auth-password=e8456ds78c23set smtp-auth=login发邮件测试
echo “邮件内容”.|mail -v -s “邮件标题” xxxx@qq.com
jail.conf 中 mta 改为 mail,即可
转载请注明原文WWW.VPS.COM.IN:Fail2ban 详细教程,解决网站被扫描、CC 攻击、ssh 暴力破解、防爬虫等问题 (5)
[搭建网站]历史优惠活动内容
猜你可能想看的VPS
- 微基主机→深港 IPLC 莞港 IPLC 等转发服务 5Mbps-20M全球[VPS测评]
- 便宜 ¥25 月 2 核 CPU 1G 内存 20G SSD 10Mbp香港VPS[主机]
- 一个口一个骂是什么成语?全球[VPS测评]
- 疯狂猜成语 图猜成语一堆珠宝一个饼是什么成语?全球[VPS测评]
- 禁止 input 输入框显示用户历史输入记录全球[VPS测评]
- MySQL 数据库查询字符串长度大于 小于或等于指定值的记录全球[VPS测评]
- file_get_contents 函数获取 https 内容出错的解决全球[VPS测评]
- 2019 年 2 月 Vultr 最新促销活动整理 新注册用户完成首充最全球[VPS测评]
- Cloudflare 防火墙自动屏蔽 IP 到和自动 5 秒盾脚本防 C全球[VPS测评]
- 真实测评 热网互联→洛杉矶 CN2 GIA 100Mbps 带宽线路晚高全球[VPS测评]
- Debian 10 如何启用 BBR 加速全球[VPS测评]
- HostMaze罗马尼亚抗诉vps,1Gbps带宽,无限流量,年付24美全球[VPS测评]
- RAKsmart双十一活动 每天10台独服月付30刀秒杀,注册就送10刀全球[VPS测评]
- Zappie Host便宜KVM VPS四折促销,1Gbps带宽, 年付全球[VPS测评]
- 漂亮的Css3响应侧边栏菜单,动画风格侧边栏导航菜单样式全球[VPS测评]
- 外贸无界烟台市有多少跨境电商?烟台跨境电商开发平台,烟台跨境电商选品全球[VPS测评]
- 九零云怎么样?香港将军澳VPS,美国圣何塞VPS 2核1G10M 47/美国VPS[主机]
- 中行升级服务力促跨境电商发展全球[VPS测评]
- centos7如何查看firewall防火墙状态:开启/关闭/重启防火墙全球[VPS测评]
- 紫云服务器怎么样?紫云香港云服务器1核1G2M仅65元/月香港VPS[主机]
- 8K超高清记录中国空间站凌月:天和核心舱与问天实验舱组成“土”字结构虚拟空间(主机)
- RAKsmart促销活动:韩国服务器低价抢购,美国G口服务器低至$99,韩国VPS[主机]
- 阿里云免备案服务器怎么样?阿里云香港服务器价格多少钱一年?香港VPS[主机]
- VPS到底有什么用?全球[VPS测评]
- 六六云:香港BGP云服务器/80M大带宽,月付45元起,5折优惠码可用香港VPS[主机]
- 景文互联年终特惠:日本/香港/美国VPS全场7折+送内存,充1000送3日本VPS[主机]
- 咖啡主机:元旦活动全场7、8折,洛杉矶vps仅需16元/月,香港将军澳C香港VPS[主机]
- 月神科技:香港沙田CN2 GIA VPS,1核/1G/10M/40GSS香港VPS[主机]
- 2020畅行云双11活动:海内外云服务器超低1.5折,2核2G5M云主机全球[VPS测评]
- 恒创科技怎么样?香港美国云服务器/独服/高防全场2.5折起美国VPS[主机]
转载请注明原文地址:http://140.238.13.167:12355/read-11245.html











