• nginx环境安装配置fail2ban屏蔽攻击ip


     

    安装 fail2ban

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

    设置 Nginx 的访问日志格式 

    这个是设置 fail2ban 封禁的关键因素

     
    log_format  main  '$remote_addr $status $request $body_bytes_sent [$time_local]  $http_user_agent $http_referer  $http_x_forwarded_for $upstream_addr $upstream_status $upstream_cache_status $upstream_response_time';
    access_log  logs/access.log  main;

    4.png 

    攻击日志的信息:

     
    42.120.74.xxx 403 GET /ethnicity.php?id=../opt/nginx/conf/nginx.conf HTTP/1.1 2090 [03/Dec/2015:04:19:57 +0800]  curl/7.29.0 -  - - - - -

    5.png 

    配置 fail2ban

    CC 攻击的 IP 会经过 Nginx和 lua 处理后,访问状态变为 403,根据 Nginx的访问日志格式,设置 fail2ban 过滤这些 IP 和 403 状态,加入黑名单攻击的 IP 就被临时封禁了

    1) 新建 fail2ban 的规则文件 /etc/fail2ban/filter.d/nginx-403-CC.conf,这个和 nginx 的日志 log_format 设置位置是吻合的,这个很关键:

     
    # cat /etc/fail2ban/filter.d/nginx-403-cc.conf
    [Definition]
    failregex =403.(GET|POST)*.*HTTP/1.*$
    ignoreregex =

    3.png

    2)  新建 fail2ban 的配置文件 /etc/fail2ban/jail.d/nginx-anti-403.conf。这里配置的是封禁的规则相关的,日志的路劲是自定义的,需要和当前的路劲是一致的:

     
    # cat /etc/fail2ban/jail.d/nginx-anti-403.conf
    [nginx-anti-403]
    enabled = true
    port = http
    filter = nginx-403-cc
    logpath = /opt/nginx/logs/access.log
    findtime = 6
    bantime = 900
    maxretry = 9

    时间和频率参数注释:
    findtime(检测多少秒内的日志)
    bantime (屏蔽攻击ip的时间为多少秒)
    maxretry (达到多少次就启动屏蔽)

    2.png

    3) 修改 fail2ban 的防火墙相关的配置

    当前版本 fail2ban 在执行 iptables 命令时,会加上了 -w 参数防止规则冲突,iptables-1.4.20 以后才有这个参数,而 CentOS 6 的 iptables 是1.4.7,导致 iptables 规则添加失败,解决方法是删除 iptables -common.conf 中的 执行如下命令即可无任何的返回就是成功的:

     
    #sed -i 's/iptables = iptables/iptables = iptables/' /etc/fail2ban/action.d/iptables-common.conf 

    4) 启动 fail2ban 

     
    # /etc/init.d/fail2ban start
    Starting fail2ban:                                         [  OK  ]

    1.png 

    攻防效果的演示

    fail2ban 策略生效之前:

    6.png

    生效之后:

    7.png

    再看下防护墙规则(这个规则是 fail2ban 自动添加的):

    8.png

    本文来自阿里云文档中心!!!

  • 相关阅读:
    e552. 取Applet的参数
    e551. 精简的Applet
    e558. 在Applet中多图片交互显示
    e1087. try/catch语句
    e1086. if/else语句
    e1087. 用For循环做数组的遍历
    e1084. 捕获错误和异常
    Zookeeper 应用程序
    Zookeeper API
    Java并发编程:volatile关键字解析
  • 原文地址:https://www.cnblogs.com/fjping0606/p/10102797.html
Copyright © 2020-2023  润新知