nginx中可通過寫入配置文件的方法來達到一定的過濾IP作用,可使用deny來寫。
deny的使用方法可用於前端服務器無防護設備的時候過濾一些異常IP,過濾的client ip會被禁止再次訪問,起到一定的阻斷作用。
但是,在現在這個網絡環境非常負載的情況,實際阻斷的IP可能都是一些代理模擬出來的,所以遇到大范圍異常攻擊的時候還是選用前端的防護設備如FW、DDOS等才可進行防護。
1、首先遍歷nginx_access log來查看惡意IP地址:
awk '{print $1}' /var/log/nginx/access.log |sort |uniq -c|sort -n
2、在nginx目錄 /etc/nginx創建blocksip.conf文件,並寫入內容:
deny 192.168.1.1; #過濾單個IP deny 192.168.1.0/24; #過濾整個地址段 deny all; #過濾所有IP allow 192.168.1.1; #與deny all;組合是指除192.168.1.1外其他都過濾
3、nginx.conf文件將該配置加入http{}標簽末尾:
vim nginx.conf
http{
include blocksip.conf;
}
nginx -t
nginx -s reload
4、使用deny過的IP訪問nginx代理的應用服務,可在error.log中查看forbidden日志
如果想屏蔽某個地區的 IP 訪問的話,用 iptables 把來自某個國家的 IP 重定向到預定頁面不是特別靈活的辦法,如果只有一個 IP 可用而有多個網站在同一 VPS 上怎么辦?用 iptable 屏蔽某個網站的話也會屏蔽同一 VPS 上的其他網站的訪問。所以正統的辦法還是用 GeoIP 配合對應的 web 服務器模塊,比如:apache + mod_geoip 或者 nginx + http_geoip_module 等。
安裝 MaxMind 的 GeoIP 庫
MaxMind 提供了免費的 IP 地域數據庫(GeoIP.dat),不過這個數據庫文件是二進制的,需要用 GeoIP 庫來讀取,所以除了要下載 GeoIP.dat 文件外(見下一步),還需要安裝能讀取這個文件的庫。
wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz tar -zxvf GeoIP.tar.gz cd GeoIP-1.4.6 ./configure make; make install
剛才安裝的庫自動安裝到 /usr/local/lib 下,所以這個目錄需要加到動態鏈接配置里面以便運行相關程序的時候能自動綁定到這個 GeoIP 庫:
echo '/usr/local/lib' > /etc/ld.so.conf.d/geoip.conf ldconfig
下載 IP 數據庫
MaxMind 提供了免費的 IP 地域數據庫,這個數據庫是二進制的,不能用文本編輯器打開,需要上面的 GeoIP 庫來讀取:
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz gunzip GeoIP.dat.gz
安裝 Nginx
因為要用到 http_geoip_module 模塊,系統自帶的 nginx 一般不帶這個模塊,所以要下載 nginx 源代碼后自行編譯:
wget http://nginx.org/download/nginx-0.9.6.tar.gz
tar zxvf nginx-0.9.6.tar.gz
cd nginx-0.9.6 ./configure --without-http_empty_gif_module --with-poll_module \ --with-http_stub_status_module --with-http_ssl_module \ --with-http_geoip_module make; make install
配置 Nginx
最后是配置 nginx,在相關地方加上如下的配置就可以了:
# vi /etc/nginx/nginx.conf http { ... geoip_country /home/vpsee/GeoIP.dat; fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code; fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3; fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name; ... } server { ... location / { root /home/vpsee/www; if ($geoip_country_code = CN) { root /home/vpsee/cn; } ... } ... }
這樣,當來自中國的 IP 訪問網站后就自動訪問到預定的 /home/vpsee/cn 頁面。關於 Nginx + GeoIP 還有很多有用的用法,比如做個簡單的 CDN,來自中國的訪問自動解析到國內服務器、來自美國的訪問自動轉向到美國服務器等。MaxMind 還提供了全球各個城市的 IP 信息,還可以下載城市 IP 數據庫來針對不同城市做處理。
參考: http://www.vpsee.com/2011/03/install-nginx-with-geoip-module-for-country-targeting/
https://www.jb51.net/article/86850.htm