nginx进阶——访问限制的一些骚操作

前言

公司开发了后台系统网站,用于对接各种公司开发的设备;
网站部署在机房,通过防火墙将内网服务器和公网ip进行了映射;

场景一:只允许域名访问网站,不允许通过ip访问

描述:如果你的网站没有配置此类的拦截规则,那么大概率会遭到恶意请求攻击。全球的公网ip是都是暴露在大众下的,每天都有大量的扫描工具在不停的扫描,一旦扫描到你的公网ip,继而进行端口扫描,你的web也就不可避免的暴露出来。

示例:

...
server {
	listen 80;
	server_name www.abcd.com;
	if ($host != 'www.abcd.com') {
		return 403;
	}

	location / {
		...
	}
}
...

通过上述配置,只有web端使用 www.abcd.com 的域名访问才不会被拦截,其余的都会返回403的错误;

杠精抬杠:我通过ip可以反查到对应的域名啊,这样也就可以攻击了;
我:这个配置是拦截了大部分自动扫描的机器人,如果通过反查再进行攻击,就属于人为的定向攻击了,另当别论;出门左转,不送!

场景二:允许多个域名访问网站,不允许通过ip访问

描述:如果有多个域名指向同一个公网ip呢?对,通常我们也会用域名的方式进行功能区分。比如:blog.abcd.com 是博客网站,www.abcd.com是公司系统网站......

示例配置:

...
server {
	listen 80;
	server_name www.abcd.com blog.abcd.com;

	set $flag 0;
	if ($host = 'www.poct.cloud') {
	    set $flag 1;
	}
	if ($host = 'blog.abcd.com') {
	    set $flag 1;
	}
	if ($flag != 1) {
	    return 403;
	}

	location / {
		...
	}
}
...

看懂了不,先设置一个变量flag,初始值为0;如果使用 www.poct.cloud 访问的,flag就会变成1,后面以此类推,最后判断 flag 的值,为0还是为1;如果不是使用www或blog来访问的,flag就还保持默认值,判断flag不为1,则返回403;满足任意条件,则flag为1,则通过。

场景三:多网卡ip,配置拦截和放行规则

在实际环境中刚改完,问题就来了,另一个开发部门的同事找过来,说请求403了。排查、对接发现,他们使用了内网的网卡进行的请求,被我配置的ip访问限制给拦截了;
系统有两个网卡,一个是 192.168.10.10(通过防火墙和公网ip做了映射),一个是 172.10.10.10(另一个部门开发的设备通过vpn来访问的,设备的请求通过vpn到达172.10.10.10,例如:https://172.10.10.10/api/)。

示例配置:

...
server {
	listen 80;
	server_name www.abcd.com blog.abcd.com;

	set $flag 0;
	if ($host = 'www.poct.cloud') {
	    set $flag 1;
	}
	if ($host = 'blog.abcd.com') {
	    set $flag 1;
	}
	if ($host = '172.10.10.10') {
		set $flag 1;
	}
	if ($flag != 1) {
	    return 403;
	}

	location / {
		...
	}
}
...

再加一个flag参数的判断就ok了;

相关文章

部署Nginx-一个ip,多个域名,部署多个项目

一、背景无论是在centos、ubuntu、iis等云服务器,还是在个人的电脑上,当部署Nginx时,基本上都会遇到想用一台服务器(只有一个IP)映射到多个域名上,以供访问多个不同的前端项目的情况(这...

在 Nginx 中防止 SSL 证书被其他域名“窜用”

在 Nginx 中防止 SSL 证书被其他域名“窜用”(即防止未经授权的域名使用你的 SSL 证书),需要确保你的服务器配置只允许合法域名访问,并通过适当的配置阻止非法域名的 HTTPS 请求。一般情...

搭建nginx反向代理用作内网域名转发

情景由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口。非80端...

要将端口5002和5003通过Nginx代理到一个域名上的操作笔记

要将端口5002和5003通过Nginx代理到域名www.4rvi.cn的不同路径下,请按照以下步骤配置Nginx:步骤说明创建或编辑Nginx配置文件通常配置文件位于/etc/nginx/sites...

Nginx域名配置

对于想搭建自己博客或者其他个人网站的小伙伴,可能会需要配置域名。在我们购买完服务器,代码敲完,项目搞定,怎么使用域名访问呢?首先购买域名(要有DNS解析)-> 然后域名备案与审核 -> 最...

使用nginx配置动态域名解析

使用nginx配置来达到动态域名解析,resolver指令设置解析器的地址using-nginx-map-directive-to-dynamically-set-proxy-upstream要使用...