目录
通过Nginx的stream模块限制白名单,可以有效控制哪些IP地址能够通过你配置的代理服务(如TCP/UDP)连接到后端服务器,这常用于数据库访问代理或内部服务暴露等场景,是重要的安全措施。
一. 核心配置步骤
实现白名单控制,主要依赖 ngx_stream_access_module模块的 allow和 deny指令。
-
确认Nginx包含Stream模块
Nginx的
stream模块默认可能未启用。请使用nginx -V命令检查输出中是否包含--with-stream参数。如果没有,你需要重新编译Nginx并加入此参数。 -
配置语法与逻辑
-
allow: 允许指定的IP或网段访问。 -
deny: 拒绝指定的IP或网段访问。 -
配置逻辑:规则是按顺序匹配的。一个常见的模式是
allow 可信IP; deny all;,这表示“只允许白名单内的IP,拒绝其他所有连接”。
-
-
编辑配置文件
在
nginx.conf的http配置块之外,与它平级地添加stream块。一个基础的白名单配置示例如下:stream { # 定义白名单规则,允许特定IP和网段 allow 188.188.1.188; allow 10.0.0.0/24; deny all; # 拒绝所有非白名单IP server { listen 3306; # 代理服务监听端口 proxy_pass backend_mysql:3306; # 后端服务器地址 } }在这个例子中,只有IP
188.188.1.188和10.0.0.0/24网段的客户端能够通过本机的3306端口连接到后端MySQL服务。
二. 进阶配置与管理
当你熟悉基本用法后,可以考虑以下进阶操作来优化配置。
-
精细化权限控制:你可以在不同的
server块内设置独立的访问规则,实现端口级别的权限控制。stream { # 针对端口65000的服务设置白名单 server { listen 65000; allow 192.168.33.200; allow 192.168.33.5; deny all; proxy_pass 192.168.33.100:65000; } # 针对SSH服务(端口22)设置不同的白名单 server { listen 65222; allow 10.10.14.0/24; deny all; proxy_pass 192.168.33.100:22; } } -
使用外部白名单文件:为了方便管理大量IP,可以将白名单列表写入单独的文件(如
white_80ip.conf),然后在主配置文件中用include指令引入。# 在stream块或server块内 include /etc/nginx/white_ip.conf;white_ip.conf文件内容示例:allow 192.168.33.101; allow 192.168.33.102; -
动态更新白名单:如果需要频繁变更白名单,可以编写简单的Shell脚本自动完成IP的添加、删除,并重载Nginx配置使其生效。
三. 重要注意事项
-
规则顺序至关重要:Nginx遇到第一个匹配的
allow或deny指令就会停止继续匹配。因此,应将更具体的规则放在前面。 -
模块可用性:确保你的Nginx在编译时包含了
--with-stream和--with-stream_access_module模块。 -
配置完要重载:修改并保存配置文件后,先使用nginx -t检查语法,然后使用
nginx -s reload命令让配置生效,避免重启服务。
四. Stream 模块和 HTTP 模块的主要区别
| 特性 | Stream 模块 (四层代理) | HTTP 模块 (七层代理) |
|---|---|---|
| 工作层级 | 传输层 (TCP/UDP) | 应用层 (HTTP/HTTPS) |
| 处理内容 | IP 地址、端口、原始数据流 | HTTP 方法、URL、请求头、Cookie 等 |
| 解析能力 | 不解析应用协议 | 深度解析和修改 HTTP 协议 |
| 性能开销 | 相对较低 | 相对较高 |
| 典型场景 | 数据库、邮件、DNS、自定义TCP/UDP服务代理 | 网站服务器、API 网关、反向代理 |
2087

被折叠的 条评论
为什么被折叠?



