最近网站总是被高频度扫描,导致数据库连接过多,打开页面报“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

  1. #ubuntu
  2. apt-get install fail2ban
  3. #CentOS
  4. yum -y install epel-release
  5. yum -y install fail2ban

fail2ban 配置原理介绍

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

  1. [DEFAULT]
  2. # 忽略 IP,IP 白名单,这些 IP 永远不会被禁
  3. ignoreip = 127.0.0.1/8
  4. #IP 被封禁的时间,单位秒
  5. bantime  = 600
  6. #日志文件中,在 findtime 时间段内,ip 出现超过 maxretry 次数,就会封禁该 IP
  7. findtime = 600
  8. maxretry = 3
  9. # "backend" 指获取日志文件的方法,分为"pyinotify", "gamin", "polling", "auto"四种
  10. # auto 值得是哪种可用就用哪种,默认 polling 可用
  11. backend = auto
  12. # "usedns" specifies if jails should trust hostnames in logs,
  13. usedns = warn
  14. #接受邮件地址
  15. destemail = xxxxxx@gmail.com
  16. # Name of the sender for mta actions
  17. sendername = Fail2Ban
  18. #默认的动作执行行为,在 action.d 目录下有各种行为策略,默认是 iptables-multiport
  19. banaction = iptables-multiport
  20. # email action. Since 0.8.1 upstream fail2ban uses sendmail
  21. mta = sendmail
  22. # Default protocol
  23. protocol = tcp
  24. # Specify chain where jumps would need to be added in iptables-* actions
  25. chain = INPUT
  26. #定义各种行为参数
  27. #只禁 IP
  28. action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
  29. #禁 IP+邮件通知
  30. action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
  31. %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s", sendername="%(sendername)s"]
  32. # 禁 IP+邮件通知+报告相关日志
  33. action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
  34. %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s", sendername="%(sendername)s"]
  35. # 选择行为
  36. action = %(action_)s
  37. #以下是各种应用监控日志的配置,以 ssh 日志和 apache 日志为例说明一下配置原理
  38. [ssh]
  39. enabled  = true
  40. port     = ssh
  41. filter   = sshd
  42. logpath  = /var/log/auth.log
  43. maxretry = 6
  44. [php-url-fopen]
  45. enabled = true
  46. port    = http,https
  47. filter  = php-url-fopen
  48. action = %(action_mwl)s
  49. logpath = /var/log/apache2/access.log
  50. findtime = 180
  51. maxretry = 200

ssh 日志监控

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 默认的正则有点问题,需要稍微修改下,修改后如下

  1. [Definition]
  2. failregex = ^<HOST> -.*"(GET|POST).* HTTP\/.*$
  3. ignoreregex =

Logpath apache 日志存放路径

findtime 为 180 秒

访问次数阈值为 200 次。

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

Fail2ban 管理&常用命令

  1. #fail2ban 服务重启、停止、开启
  2. service fail2ban restart|stop|start
  3. #查看 fail2ban 状态
  4. fail2ban-client status
  5. #查看日志监控状态
  6. fail2ban-client status php-url-fopen
  7. #查看 iptables 禁 ip 情况
  8. 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)

添加

  1. set ssl-verify=ignore
  2. set nss-config-dir=/etc/pki/nssdb
  3. set from=邮件地址@163.com
  4. set smtp=smtps://smtp.163.com:465
  5. set smtp-auth-user=邮件地址@163.com
  6. set smtp-auth-password=e8456ds78c23
  7. set smtp-auth=login

发邮件测试

echo “邮件内容”.|mail -v -s “邮件标题” xxxx@qq.com

jail.conf 中 mta 改为 mail,即可


http://www.taodudu.cc/news/show-1167348.html

相关文章:

  • ubuntu 20.04 快速开启TCP BBR实现高效单边加速
  • 怎么跟女生看电影牵手技巧方法
  • SpringBoot - MyBatis-Plus使用详解2(设置实体类对应的表名、字段名 )
  • 利用Jackson的JsonFilter来实现动态过滤数据列(数据列权限控制)
  • spring boot 加载静态文件
  • 9. 设计二个函数分别计算sinx和cosx_【数组分享】PHP函数array_udiff_assoc ()分享(20201128)...
  • 初中数学抽象教学的案例_初中八年级数学上册教学视频汇总
  • onedrive电脑手机不同步_免费的手机电脑同步便签软件怎么找?求帮忙推荐
  • echarts 地图 dispatchaction不好使_数据分析帝:广东省客户数量地图展示,如何通过python实现?...
  • client中周期性边界_FLUENT创建周期性边界条件方法
  • 安装成功后python报错_python安装Graphviz后报错及解决方法
  • docker es持久化_Docker 搭建 ES 集群并整合 Spring Boot
  • 可消费消息数量_战疫情!CKafka助力腾讯课堂百万消息实现稳定互动
  • go io.reader 多次读取_你应该掌握的 Go 高级并发模式:计时器
  • opa847方波放大电路_电子设计竞赛教程-放大器类
  • angular js创建表单_如何优雅的使用 Angular 表单验证
  • chararray遍历_数组常用的遍历方法 ——总结
  • android led灯框架_LED面板灯的特点:应用领域、产品结构与产品分类
  • 数据库设计_数据库设计(一)分析及逻辑设计
  • 列运算_DAX表操作基础第二招:增加列
  • 6 volist双层数组_Javascript算法 — 数组排序
  • 接收list参数_what?你竟然不知道C#中的方法及参数的类型解析!那还不快来瞅瞅...
  • python输出矩阵的行数_python查看矩阵的行列号以及维数方式
  • 会计云课堂实名认证后怎么更改_会计云课堂怎么听课 网上听课步骤详解
  • 多线程 转账_多线程编程不可错过——彻底理解volatile
  • flyway常用配置_Spring Boot 2.x基础教程:使用Flyway管理数据库版本
  • 聚类算法的缺点_常用聚类算法
  • 数组指定位置添加元素_数据结构--顺序表的9种基本运算,初始化,销毁,判断是否为空表,长度,求指定位置的元素值......
  • 土是独体字结构吗_205砂浆、混凝土强度等级与定额不同时,你会调整换算吗?...
  • file association没有 *.class文件_springboot如何MultipartFile文件跨服务

Fail2ban详细教程,解决网站被扫描、CC攻击、ssh暴力破解、防爬虫等问题相关推荐

  1. cc压力测试_中小型网站如何防范CC攻击?

    大公司就不说了,付费CDN,防火墙,WAF,大流量,一般也会配置专门的安全问题响应团队. 今天侧重讨论一下中小型网站如何(优雅)防范CC攻击. 中小站点安全问题通病:对安全问题不重视,不少iptabl ...

  2. 高防CDN是如何防护网站,防止CC攻击的?

    CDN即内容分发网络,通过在网络各处放置节点服务器在现有互联网基础上构成的一层智能虚拟网络,CDN系统使网络内容传输得更快.更稳定.近年来,互联网络技术不断进步的同时,网络安全形式日益严峻,网络攻击频 ...

  3. 什么是CC攻击?如何判断网站是否被CC攻击? CC攻击怎么防御?

    什么是CC攻击?如何判断网站是否被CC攻击? 一.什么是CC攻击? 二.如何判断网站是否被CC攻击? 三.CC攻击怎么防御? 1.服务器垂直扩展和水平扩容 2.数据缓存(内存级别,不要用文件) 3.页 ...

  4. 使用 fail2ban 防御 SSH 暴力破解

    前言: 刚会使用服务器,这就一直有人来破解,虽说**99%**他们破解不了,但是一直被扫,负载一直增加,看着很不爽就百度了fail2ban,贼好玩 嗯~ o( ̄▽ ̄)o,所以总结一下. 0x01:Fa ...

  5. 如何在Docker容器里开启fail2ban防止SSH暴力破解

    一.前提介绍 Docker容器里开启了SSH服务,但是发现有大量的暴力破解进程,需要使用fail2ban防止SSH暴力破解,将攻击的IP拉黑. 二.原因分析 但是直接安装fail2ban,和没有使用容 ...

  6. 企业网站如何防护CC攻击

    作为站长或者公司的网站的网管,什么最可怕?显然是网站受到的DDoS攻击.大家都有这样的经历,就是在访问某一公司网站或者论坛时,如果这个网站或者论坛流量比较大,访问的人比较多,打开页面的速度会比较慢,对 ...

  7. 用fail2ban阻止ssh暴力破解root密码

    安装fail2ban工具来实现防暴力破解,防止恶意攻击,锁定恶意攻击IP.   1.如果是centos系统,先yum安装fail2ban [root@VM_152_184_centos /]# yum ...

  8. opencv在vs2012下重编译详细教程——解决按f11进入不了源代码

    最近用到opencv人脸识别的代码,想进源码看看实现过程,大家都知道opencv的源码在opencv/modules下,但是光看那么长的源代码实在麻烦,要是能在调试的时候按f11直接就能跟进内部代码就 ...

  9. 超级详细教程解决photo shop CS6 初始字体过小问题

    前言 新手下载photo shop CS6 不久 打开软件发现字体异常小,如今已解决问题 ,故在此分享. 具体步骤 ** 一.找到文件所在位置 ** ** 二.右键选择属性-兼容性-修改高DPI缩放行 ...

最新文章

  1. local reference table overflow 内存泄露
  2. Python 爬虫实现天气查询(可视化界面版)
  3. 机器学习入门学习笔记:(2.2)线性回归python程序实现
  4. ubuntu创建文件夹快捷方式命令
  5. C#快速导入海量XML数据至SQL Server数据库
  6. Requirements of pair programming
  7. java 三级考试_java三级考试理论题
  8. MinGW 编译libwebsockets
  9. 视觉SLAM笔记(45) 搭建 VO 框架
  10. ubuntu下docker简单安装mysql
  11. linux查看ip命令_不可不知的Linux文本查看命令
  12. 安徽出台医疗大数据应用发展实施意见
  13. 批量将WORD转换成PDF文件
  14. foxpro导入 mysql_无法导入、导出或链接到 FoxPro 数据库 | Microsoft Docs
  15. 小米5s html,小米5S线刷MIUI9系统的方法_小米5S专用的MIUI9系统刷机包
  16. kuka机器人焊接编程入门教程_焊接机器人操作编程与应用教学.pptx
  17. 计算机的选材标准,计算机材料试验机
  18. 短信平台专业版软件客户端功能详解源码搭建|移讯云短信系统
  19. power_supply子系统
  20. 食品安全溯源区块链解决方案探索

热门文章

  1. 销售管理如何构成闭环?帆软大屏看板让销售数据转起来,不再分散
  2. 可视化实战!Python+BI,手把手教你做炫酷的NBA可视化分析
  3. 飞鸽传书2012绿色版
  4. 如何自定义MFC的窗口类名
  5. 本周Web2.0小工具推荐[2008-08-24]
  6. steam夏日促销用Python爬取排行榜上的游戏打折信息
  7. 第二波 编程资料免费领,前后端、移动端都有
  8. 刚毕业就要求月薪10K?我觉得没毛病
  9. 程序员的七夕:转给此刻你想起的那位!
  10. android 个推打开页面,个推android客户端点击跳到指定activity