yum install -y epel-release yum install -y fail2ban
這個是設置 fail2ban 封禁的關鍵因素php
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;
攻擊日誌的信息:nginx
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 - - - - - -
CC 攻擊的 IP 會通過 Nginx和 lua 處理後,訪問狀態變爲 403,根據 Nginx的訪問日誌格式,設置 fail2ban 過濾這些 IP 和 403 狀態,加入黑名單攻擊的 IP 就被臨時封禁了sql
1) 新建 fail2ban 的規則文件 /etc/fail2ban/filter.d/nginx-403-CC.conf,這個和 nginx 的日誌 log_format 設置位置是吻合的,這個很關鍵:apache
# cat /etc/fail2ban/filter.d/nginx-403-cc.conf [Definition] failregex =403.(GET|POST)*.*HTTP/1.*$ ignoreregex =
2) 新建 fail2ban 的配置文件 /etc/fail2ban/jail.d/nginx-anti-403.conf。這裏配置的是封禁的規則相關的,日誌的路勁是自定義的,須要和當前的路勁是一致的:curl
# 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 (達到多少次就啓動屏蔽) ui
3) 修改 fail2ban 的防火牆相關的配置阿里雲
當前版本 fail2ban 在執行 iptables 命令時,會加上了 -w 參數防止規則衝突,iptables-1.4.20 之後纔有這個參數,而 CentOS 6 的 iptables 是1.4.7,致使 iptables 規則添加失敗,解決方法是刪除 iptables -common.conf 中的 執行以下命令便可無任何的返回就是成功的:lua
#sed -i 's/iptables = iptables/iptables = iptables/' /etc/fail2ban/action.d/iptables-common.conf
4) 啓動 fail2ban url
# /etc/init.d/fail2ban start Starting fail2ban: [ OK ]
fail2ban 策略生效以前:spa
生效以後:
再看下防禦牆規則(這個規則是 fail2ban 自動添加的):
本文來自阿里雲文檔中心!!!