nginx屏蔽某段IP、某个国家的IP

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 数据库来针对不同城市做处理。

https://blog.csdn.net/tadwork/article/details/80742904

原文地址:https://www.cnblogs.com/linkenpark/p/10236576.html

时间: 2024-10-09 06:58:42

nginx屏蔽某段IP、某个国家的IP的相关文章

Nginx 使用 sever 段规则屏蔽恶意 User Agent

相对于 Apache,Nginx 占用的系统资源更少,更适合 VPS 使用.恶意的 User Agent 无处不在,博客更换到 WordPress 没几天,就被 SPAM(垃圾留言)盯上,又被暴力破解后台用户名密码.以前介绍过 Apache 使用 .htaccess 屏蔽恶意 User Agent,今天来介绍 Nginx 屏蔽恶意 User Agent的方法. 先上规则&注释 #禁用未初始化变量警告 uninitialized_variable_warn off; #匹配各种 bad user

如何配置nginx屏蔽恶意域名解析指向《包含隐藏nginx版本号》

恶意域名指向: 比如,有一个垃圾域名将解析指向到了你们服务器的IP,一般多一个解析可能不会有什么问题,但是现在全民备案时期,可能你的运营商会联系你,说你们的域名没备案,可能会封你们的80端口,然后会导致你们的网页访问不了.等之类的情况. nginx屏蔽此类恶意域名指向的步骤如下: 1. 找到nginx.conf文件,加上或者修改默认配置,比如如下配置.<第4行至第8行,添加一个server段> 1 # Default vhost 2 # 3 4 server { 5 listen 80 def

搭建nginx虚拟主机——基于域名、端口和IP

Nginx支持的虚拟主机有三种 1.基于域名的虚拟主机2.基于IP的虚拟主机3.基于端口的虚拟主机且每一种虚拟主机均可通过"server{}" 配置段实现各自的功能 一.基于域名搭建 1.编译安装Nginx服务2.远程获取Windows上的源码包,并挂载到Linux上 [[email protected] ~]# smbclient -L //192.168.235.1 Enter SAMBA\root's password: Sharename Type Comment ------

常用的7个.htaccess代码组织某个国家的IP访问

htAccess 文件(Hypertext Access file)是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的功能. 使用.htaccess挡掉搜寻引擎机蜘蛛 挡掉百度搜寻引擎 百度是传说中的暴力搜寻引擎,不遵守搜寻引擎的规则,若你尝试使用robot.txt来挡住,那非常恭喜你,绝对无效.所以一定要使用比较暴力.强硬的手段才能,因此透过.htaccess就可以处理了,如果你要挡掉一些搜寻引擎(像是百度.搜狗等),那请将以

nginx前端负载,后端apache获取真实IP设置

原文链接: nginx前端负载,后端apache获取真实IP设置 参考文献: 前端Nginx,后端Apache获取用户真实IP地址  按照第二种方法设置不成功! 网站最前端是nginx,做的PROXY来转发请求到后端的apache上,所以获取的IP 都是NGINX PROXY 机器的IP,这对于分析和记录apache日志等很多基于IP判断的PHP程序都会出现一系列的问题,经过以下两处理便可让apache获取 正式的访问地址:1.修改NGINX的配置文件NGINX.CONF 在里面加上 proxy

自己家用电脑做站点server,解决动态IP、无公网IP、80port被封、HTTP被屏蔽

动态IP.无公网IP.80port被封.HTTP被屏蔽,这些问题都是自己的server做站点服务,easy遇到面对的问题.当出现这些问题时.能够利用当前的开放网络资源一一解决. 解决原理分析: 动态IP. 公网IP是动态变化的,利用动态域名解析,固定域名. 无公网IP.利用80port映射软件辅助,将内网站点应用映射到外网域名. 80port被封.相同可利用80port映射解决. HTTP被屏蔽.须要将WEB站点数据转换成非HTTP数据,或先加密,再公布站点应用. 以开放的NAT123网络辅助软

Nginx——主配置段

nginx主配置段 帮助文档: http://nginx.org/en/docs/ngx_core_module.html 1.正常运行必备的配置 user:指定worker进程的运行身份,如组不指定,默认和用户名同名 pid /PATH/TO/PID_FILE:指定存储nginx主进程PID的文件路径 include file|mask:指明包含进来的其它配置文件片断 load_module file: 模块加载配置文件:/usr/share/nginx/modules/*.conf 指明要装

Nginx多层反向代理透传客户端真实IP

Nginx的反向代理能非常强大,可以配置多层反向代理,多层代理中最关心的就是客户端IP的信息传递情况,当我们遇到问题后,分析日志是解决问题最有效的途径之一,涉及代理时我们肯定会分析源IP,目标IP等信息,查看相关的异常.本次实例就通过两层Nginx反向代理,模拟一下其客户端IP的传递信息. 实验环境: 操作系统 : Centos 7.X Nginx :   nginx1.12 序号 环境名称 IP地址 环境介绍 1 访问客户端1 10.57.3.29 mac  有Chrome等浏览器 2 访问客

Nginx配置基于多域名、端口、IP的虚拟主机

原文:https://www.cnblogs.com/ssgeek/p/9220922.html ------------------------------- 1.类型介绍 1.1 基于域名的虚拟主机 所谓基于域名的虚拟主机,意思就是通过不同的域名区分不同的虚拟主机,基于域名的虚拟主机是企业应用最广的虚拟主机类型,几乎所有对外提供服务的网站使用的都是基于域名的主机,例如www.test1.com www.test2.com等 1.2 基于端口的虚拟主机 同理,所谓基于端口的虚拟主机,意思就是通