• 首页
  • 随笔
  • 归档
  • 友链
  • 留言
  • 量化平台
  • 搜索
  • 夜间模式
    ©2019-2025  凌飞•Blog Theme by OneBlog
    搜索
    标签
    # 技术 # 汽车 # 游戏 # 诗词 # 分享 # 时评 # 文章 # 其他 # 教育 # 随笔
  • 首页>
  • 技术分享>
  • 正文
  • fail2ban—不止是个CC攻击防御工具(支持宝塔魔改nginx)

    2019年04月08日 2.7 k 阅读 4 评论 3472 字

    此文由Rat's Blog率先发布,我修改后支持宝塔魔改的nginx添加~更适合新手 挂了CDN的网站不适合此教程

    原文传送门

    介绍

            对于个人小型站点来说~如何防御CC攻击一直是个让人头痛的问题~比较常见的防御方式就是宝塔面板自带的防火墙,张戈大佬的CCkiller脚本了~不过宝塔防火墙一个月需要不少的费用~cckiller因为制作年代较为久远并不支持目前centos7自带的Firewalld~以前我都是先卸载firewalld然后安装iptables后再配置cckiller作为防卫工具~但是最近我换的VPS服务商的机器不知为什么没法安装iptables~只好另寻他法~在Rat's的博客上找到一款比cckiller更为强大的配合firewalld使用的防御工具~他不但能防御cc攻击,还能防止端口扫描爆破~除了内置的无数规则外,还支持自建规则~不可谓不强大~下面给大家讲讲如何为你的网站配置fail2ban~

    准备工作

            首先你需要确定你的系统使用的是firewalld而不是iptables~如果你的系统没有启用firewalld则需要先启用firewalld。并把你当前使用的端口添加到firewalld放行
    1.查看当前系统是否启用了iptables
    systemctl status iptabeles
    2.如果启用的iptables先关闭~
    systemctl stop iptables
    3.查看firewalld的状态
    systemctl status firewalld
    4、启动firewalld并设置自启
    启动:systemctl start firewalld
    自启systemctl enable firewalld.service
    5、如果之前iptables的状态是启用,这里记得关闭iptables的自启~
    chkconfig iptables off

    切记将你现在使用的端口添加到firewalld放行!包括但不限于/网站http端口、网站https端口、SSH端口、宝塔或其他面板入口端口、你之前开启的其他端口

    放行方法如下:以80端口为例,permanent 永久放行
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    所有端口放行完毕后需要重载firewalld
    firewall-cmd --reload
    查询已开放的端口~
    firewall-cmd --zone=public --list-ports

    安装fail2ban

    CentOS内置源并未包含fail2ban,需要先安装epel源
    yum -y install epel-release
    安装fial2ban
    yum -y install fail2ban
    安装成功后fail2ban配置文件位于/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,其它目录/文件一般很少用到,如果需要详细了解可自行搜索。

    配置fail2ban规则~

    先新建一个nginx日志匹配规则
    vi /etc/fail2ban/filter.d/nginx-cc.conf
    填写如下内容

    [Definition]
    failregex = <HOST> -.*- .*HTTP/1.* .* .*$
    ignoreregex =

    新fail2ban建配置文件
    vi /etc/fail2ban/jail.local
    输入以下内容

    [DEFAULT]
    ignoreip = 127.0.0.1/8
    bantime  = 86400
    findtime = 600
    maxretry = 5
    banaction = firewallcmd-ipset
    action = %(action_mwl)s
    
    
    [sshd]
    enabled = true
    filter  = sshd
    port    = 填入你的SSH端口
    action = %(action_mwl)s
    logpath = /var/log/secure
    
    
    [nginx-cc]
    enabled = true
    port = http,https
    filter = nginx-cc
    action = %(action_mwl)s
    maxretry = 40
    findtime = 30
    bantime = 300
    logpath = 填入你的nginx access日志路径。

    通过查询nginx的配置文件nginx.conf可以找到你的nginx access路径~
    比如我的配置文件位置:/www/server/nginx/conf
    access路径/www/wwwlogs/access.log
    针对使用宝塔平台的,此处需要修改宝塔网站配置
    在配置面板——网站——设置——配置文件中 最下方的
    access_log /dev/null改成 access_log /www/wwwlogs/access.log;或者 宝塔默认的access_log /www/wwwlogs/域名.log;
    然后重启nginx 清空log文件 访问你的网站后 查看log文件是否有刚才的访问记录 有多个站点的,可以将所有站点设置成同一log文件
    因为每次访问都会被写入此log时间长了会占用很大的空间,所以我们需要定期清理,使用宝塔建立一个每天执行的命令 以我的log位置为例
    sed -i '1,10000d' /www/wwwlogs/www.jdonkey.club.log
    此命令会清除此log前10000行的内容
    在部分环境上清除log后会导致log不能正常写入,重启nginx即可
    所以还要在清除log的计划任务后加上一个重启nginx的计划任务
    systemctl restart nginx
    没有面板的使用crontab命令 网上很多教程 这里不做说明

    配置说明

    sshd:名称,可以随便填写
    filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则
    port:对应的端口
    action:采取的行动
    logpath:需要监视的日志路径
    此处设置为
    10分钟内连接SSH达到5次错误此IP将被BAN24小时

    CC
    maxretry 请求次数 即同一IP在一定时间内的请求次数
    findtime 就是上面所说的一定时间内~
    bantime 超过此次数后阻挡该IP的时间 单位秒
    这里请根据自己情况自行设置~

    重启fail2ban让设置生效
    systemctl restart fail2ban

    常用命令

    启动
    systemctl start fail2ban
    停止
    systemctl stop fail2ban
    开机启动
    systemctl enable fail2ban
    查看被ban IP(CC攻击)
    fail2ban-client status nginx-cc
    查看被ban IP(SSHD端口扫描)
    fail2ban-client status sshd

    删除被ban IP

    fail2ban-client set sshd delignoreip 192.168.111.111

    查看日志

    tail /var/log/fail2ban.log

    本文著作权归作者 [ flynn ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    技术
    取消回复

    发表留言
    回复

    读者留言4

    1. gated0 Lv.1
      2019-08-24 16:15 回复

      这篇源文章并不是萌鼠大佬的,萌鼠大佬也是转发xiaoz,在萌鼠大佬的结尾处有来源链接的

      1. fly-L Lv.2
        2019-08-27 11:40 回复
        @gated0

        是的……小Z也是我好友 还是老乡呢

    2. 左岸 Lv.3
      2019-04-09 07:22 回复

      我旅游回来啦!
      为什么,网站这么卡😂
      cckiller、Nginx防火墙和这个一起装会发生什么🌚

      1. fly 博主
        2019-04-09 07:43 回复
        @左岸

        不会发生什么……不卡吧 之前用的nodecache的CDN可卡死了 我换回CF了

    加载更多评论
    加载中...
    — 已加载全部评论 —
    首页随笔归档友链留言量化平台
    Copyright©2019-2025  All Rights Reserved.  Load:0.053 s
    Theme by OneBlog V3.6.4
    夜间模式
    KUCAT盟2025101000号

    图片预览

    ×

    开源不易,请尊重作者版权,保留基本的版权信息。