美文网首页
Fail2ban防止网站CC

Fail2ban防止网站CC

作者: 844b9a3a3a68 | 来源:发表于2018-01-27 12:43 被阅读2145次

    Fail2ban可以通过日志监控操作防火墙规则,来达到屏蔽IP的功能,可以很好的避免SSH暴力破解和网站流量攻击。

    安装Fail2ban前,可以先配置Nginx限制IP访问,具体操作请看我的另一篇博客:https://www.jianshu.com/p/3cb4c82633d1

    安装Fail2ban:

    yum -y install epel-release
    yum repolist
    yum -y install fail2ban
    

    Fail2ban 结构

    /etc/fail2ban ## fail2ban 服务配置目录
    /etc/fail2ban/action.d ## iptables 、mail 等动作文件目录
    /etc/fail2ban/filter.d ## 条件匹配文件目录,过滤日志关键内容
    /etc/fail2ban/jail.conf ## fail2ban 防护配置文件
    /etc/fail2ban/fail2ban.conf ## fail2ban 配置文件,定义日志级别、日志、sock 文件位置等

    fail2ban.conf 默认配置(无需修改)

    [Definition]
    
    loglevel = 3 ## 定义日志级别,默认
    
    logtarget = /var/log/fail2ban.log ## 定义 fail2ban 日志文件
    
    socket = /var/run/fail2ban/fail2ban.sock ## sock 文件存放位置,默认
    
    pidfile = /var/run/fail2ban/fail2ban.pid ## pid 文件存放位置,默认
    

    jail.conf 防护配置(无需修改)

    [DEFAULT] ## 全局设置,优先级最小
    
    ignoreip = 127.0.0.1/8 ## 不受限制的 IP ,多组用空格分割
    
    bantime = 600 ## 非法 IP 被屏蔽时间(秒),-1 代表永远封锁
    
    findtime = 600 ## 设置多长时间(秒)内超过 maxretry 限制次数即被封锁
    
    maxretry = 3 ## 最大尝试次数
    
    backend = auto ## 日志修改检测机制(gamin 、polling 、auto 三种)
    
    usedns = warn
    
    [ssh-iptables] ## 分类设置(基于 SSHD 服务的防护)
    
    enabled = true ## 是否开启防护,false 为关闭
    
    filter = sshd ## 过滤规则 filter 名称,对应 filter.d 目录下的 sshd.conf
    
    action = iptables[name=SSH, port=ssh, protocol=tcp] ## 动作参数
    sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"] ## 邮件通知参数
                              ## 收件人地址           ## 发件人地址 
    logpath = /var/log/secure ## 检测系统登陆日志文件
    
    maxretry = 5 ## 最大尝试次数
    

    filter.d目录下新建http-get-dos.conf

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

    编辑 vi jail.local

    [DEFAULT]
    # Ban hosts for one hour:
    bantime = 600
    findtime = 60
    maxretry = 3
    backend = auto
    
    [ssh-iptables]
    enabled = true
    filter = sshd
    action = iptables[name=SSH, port=ssh, protocol=tcp]
    logpath = /var/log/secure
    maxretry = 3
    bantime = 60
    
    # Override /etc/fail2ban/jail.d/00-firewalld.conf:
    banaction = iptables-multiport
    
    # 此处引用刚才新建的http-get-dos.conf
    [http-get-dos]
    enabled = true
    port = http
    filter = http-get-dos
    logpath = /home/wwwlogs/access.log
    maxretry = 5
    findtime = 60
    bantime = 300
    action = iptables[name=HTTP,port=http,protocol=tcp]
    
    [sshd]
    enabled = true
    

    Fail2ban操作(如果重启 iptables ,必须重启 fail2ban):

    # 如果配置出错,请用此条命令启动,可以看到错误日志
    /usr/bin/fail2ban-client -x start
    # 启动
    service fail2ban start
    # 重启
    service fail2ban restart
    # 停止
    service fail2ban stop
    # 查看状态
    fail2ban-client status 
    # 以行数方式显示防火墙规则
    iptables -L -n --line-numbers
    # 删除指定规则
    iptables -D INPUT 5
    # 显示防火墙规则
    iptables -nL 
    # 查看拦截日志
    tail -1 /var/log/fail2ban.log
    # 系统登陆日志
    cat /var/log/secure 
    # centos7可以用如下命令重启服务
    systemctl restart fail2ban.service
    sudo systemctl restart fail2ban
    

    如果提示拦截日志不存在,请修改日志路径:

    vi fail2ban.conf
    loglevel = WARNING
    logtarget = /var/log/fail2ban.log
    

    解除屏蔽:

    # 显示防火墙规则列表,并显示行号
    iptables -L -n --line-numbers
    # 删除指定规则的某行
    iptables -D f2b-sshd 1
    # fail2ban删除屏蔽IP
    iptables -D f2b-HTTP -s 117.174.26.150 -j REJECT
    fail2ban-client set http-get-dos unbanip 117.174.26.150
    

    定时清理日志:

    vi /root/del_cc_log.sh
    #! /bin/bash
    cat /dev/null > /home/wwwlogs/access.log
    cat /dev/null > /var/log/fail2ban.log
    

    授权

    chmod 755 del_cc_log.sh
    

    定时任务:

    crontab -e
    30 3 * * 0 sh /root/del_cc_log.sh
    

    开启crontab:

    /etc/init.d/crond start
    chkconfig --list|grep crond
    

    配置用例:

    --屏蔽ssh探测
    vi /etc/fail2ban/jail.conf
    
    [ssh-iptables]
    enabled = true
    filter = sshd
    action = iptables[name=SSH, port=ssh, protocol=tcp]
    logpath = /var/log/secure 
    maxretry = 10 
    bantime = 144000
    

    Copy其他规则:

    cd /etc/fail2ban/filter.d
    cp apache-badbots.conf nginx-badbots.conf
    vim nginx-badbots.conf
    

    规则校验:

    fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-badbots.conf
    

    创建jail规则:

    vim /etc/fail2ban/jail.d/nginx.local
    

    例如:

    例如:
    
    [nginx-badbots]
    
    enabled  = true
    port     = http,https
    filter   = nginx-badbots
    logpath  = /home/wwwlogs/access.log
               /home/wwwlogs/www.sijitao.net.log
    maxretry = 3
    

    邮件支持

    yum install sendmail
    

    启动

    service sendmail start
    
    如果遇到“ 没有目录/ var / run / fail2ban包含套接字文件/var/run/fail2ban/fail2ban.sock ”的错误,请手动创建目录:
    mkdir /var/run/fail2ban
    

    配置邮件:

    vi jail.conf
    sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"] ## 邮件通知参数
                              ## 收件人地址           ## 发件人地址 
    

    相关文章

      网友评论

          本文标题:Fail2ban防止网站CC

          本文链接:https://www.haomeiwen.com/subject/agdnaxtx.html