网关-Nginx禁止通过IP访问,允许域名访问

简介: Nginx开启域名访问模式,屏蔽通过IP访问

nginx

1. 背景

近期因为信息安全方面的要求,安全部门提出我们的对公服务,要屏蔽来自 IP 地址的访问。我们接到这个需求,分析出要在反向代理服务器上设置禁止通过 IP 地址来访问服务,只允许通过域名的访问。

2. 现状

因为我们的对公服务域名有多个,而且域名,因为当初建设过程中,没考虑冗余,都配置成同城同机房一组外网服务器进行转发,所以这些域名都对应同一个公网 IP

3. 问题分析

提前补充一点网络的小知识,通过IP访问 与 通过 域名访问的区别就在于 HTTP 请求头信息中的 Host 值。我们在反向代理软件中,只要校验 Host 属性与我们自身域名不相同,则直接给我们的错误代码。

  • 域名访问

通过域名访问

  • IP访问

通过IP访问

3.1. 多域名

我们域名比较多,但是 NginxLua 语法不支持多重判断。所这里这里可以使用多个条件语句。

3.2. 多监听

此处没法绕过,只能挨个 server 配置,如果有更好的办法,欢迎请在留言处指明。

4. Nginx版本

此次演示是基于 1.21.6 的版本来操作。


-rwxrwxr-x 1 kejie kejie 6133152 Jun 10 20:28 nginx
[kejie@portal-apptest8 sbin]$ ./nginx -v
nginx version: nginx/1.21.6

5. 实现方案

由于 Nginx 语法特殊性,写法也有不同,下来主要就两种方式来说明实现方案。

5.1. 传统方式

Nginx 通过 $host 来获取 HTTP 中的 Host 属性,对 $host 内容进行判定即可。


http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    server {
        listen 80;
        server_name _;

        set $flag 0;
        if ($host ~* ^cia* ) {
             set $flag "1${flag}";
         }
         if ($host ~* ^mo* ) {
             set $flag "1${flag}";
         }
         if ($flag !~* ^1* ) {
             return 403;
         }
    }
}

这种方式,就是堆叠 if 语句,客观性和拓展性不够好。适用于临时应急方案。

5.2. 正则方式

既然传统方式不够友好,那需要考虑其他实现方案。通过观察,我们域名都有一定的特点,如后缀都是 cia.com.cn 。所以这里考虑使用正则表达式。

只要是 server_name 中的域名都是以 cia.com.cn 结尾的都是放行,最终配置如下:


http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    server {
        listen 80;
        server_name ~^(.+).cia.com.cn$;;
    }
}
相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
22天前
|
应用服务中间件 nginx
树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问
树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问
|
1天前
|
安全 网络协议 网络安全
【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题
【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题
20 0
|
3天前
|
域名解析 弹性计算 应用服务中间件
基于nginx反向代理实现OSS固定域名IP访问
本文基于阿里云OSS手册:https://help.aliyun.com/zh/oss/use-cases/use-an-ecs-instance-that-runs-centos-to-configure-a-reverse-proxy-for-access-to-oss,继续深入讨论如何利用nginx反向代理,实现固定的IP/域名访问OSS bucket。官方文档能够解决大部分的反向代理固定IP访问oss bucket的场景,但是对于必须使用域名作为endpoint的系统,会出现signatrue鉴权问题。本文继续在官方文档的基础上,将反向代理需要域名作为endpoint的场景补齐方案。
|
3天前
|
应用服务中间件 nginx
如何在树莓派部署Nginx并实现无公网ip远程访问内网制作的web网站
如何在树莓派部署Nginx并实现无公网ip远程访问内网制作的web网站
8 0
|
5天前
|
安全 Linux 网络安全
Linux _ apache服务器部署 不同域名—访问不同网站(多网站)
Linux _ apache服务器部署 不同域名—访问不同网站(多网站)
|
10天前
|
监控 数据可视化 安全
如何查找访问 Nginx 的前 10 个 IP?
【5月更文挑战第1天】
24 1
如何查找访问 Nginx 的前 10 个 IP?
|
21天前
|
域名解析 缓存 负载均衡
Nginx正向代理域名的配置
Nginx正向代理域名的配置
|
22天前
|
前端开发 应用服务中间件 网络安全
nginx配置SSL证书配置https访问网站 超详细(附加配置源码+图文配置教程)
nginx配置SSL证书配置https访问网站 超详细(附加配置源码+图文配置教程)
60 0
|
22天前
|
Ubuntu 应用服务中间件 Linux
nginx 配置代理ip访问https的域名配置
nginx 配置代理ip访问https的域名配置
|
12天前
|
域名解析 弹性计算 Linux
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
本文为大家介绍了2024年购买阿里云服务器和注册域名,绑定以及备案的教程,适合需要在阿里云购买云服务器、注册域名并备案的用户参考,新手用户可通过此文您了解在从购买云服务器到完成备案的流程。
阿里云购买云服务器、注册域名、备案及绑定图文教程参考