WAF nginx反向代理和透明代理

本文深入探讨了Nginx的反向代理和透明代理配置,详细解释了如何通过iptables和ebtables设置代理规则,包括数据包的重定向、监听和转发流程。适合于网络管理和服务器配置的专业人士。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面看一下实例:反向代理(10.0.13.222)和透明代理(10.0.1.66)站点。

反向代理:

Nginx自带反向代理功能,只需在Linux系统上开启相应的端口。

反向代理规则链移植:

iptables -t filter -N waf_proxy
iptables -t filter -A INPUT -j waf_proxy
iptables -A waf_proxy -p tcp -m multiport --ports 8001 -j ACCEPT

透明代理:

数据包从网卡上来,原本经过二层的broute表转发数据包。ebtable命令让其在二层的转发包Drop掉,直接上三层。在broute表添加规则,如下:

数据包上至三层后,首先经过PREROUTING阶段,在该阶段,要给数据包打上MARK标志。如下:

并且调用iptables的TPROXY模块。tproxy功能主要:

  1. 重定向一部分经过路由选择的流量到本地路由进程(类似NAT中的REDIRECT)。

  2. 使用非本地IP作为源IP初始化连接。

  3. 无需iptables参与,在非本地IP上起监听。

tproxy使得打标记的数据包走本地策略路由表3000,如下:

然后在filter的INPUT链上规则,放开本地监听代理端口。如下:

透明代理规则链移植:

ebtables添加链规则:
ebtables -t broute -A waf_redirect -p ipv4 --ip-proto tcp --ip-src 10.0.1.66 --ip-sport 80 -j redirect --redirect-target DROP >/dev/null 2>&1
ebtables -t broute -A waf_redirect -p ipv4 --ip-proto tcp --ip-dst 10.0.1.66 --ip-dport 80 -j redirect --redirect-target DROP >/dev/null 2>&1 

mangle添加链规则:(WAF之前的链waf_redirect在jump_pos链下绑着)
iptables -t mangle -N waf_redirect
iptables -t mangle -A proxy_pos -j waf_redirect

数据包重定向操作:
iptables -t mangle -A waf_redirect -d 10.0.1.66 -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1234 --on-port 8001  >/dev/null 2>&1

mangle添加链添加:(WAF之前的链waf_socket_match在jump_pos链下绑着)
iptables -t mangle -N waf_socket_match
iptables -t mangle -A proxy_pos -j waf_socket_match
        
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 0x1234
iptables -t mangle -A DIVERT -j ACCEPT

服务端包到本地:
iptables -t mangle -A waf_socket_match -p tcp -s 10.0.1.66 --sport 80 -m socket -j DIVERT >/dev/null 2>&1

filter添加链规则:(iptables接收透明代理回应到本地的数据包)
iptables -A waf_proxy -s 10.0.1.66 -p tcp --sport 80 -j ACCEPT >/dev/null 2>&1(不必须)
iptables -A waf_proxy -d 10.0.1.66 -p tcp --dport 80 -j ACCEPT >/dev/null 2>&1    

其它相关配置:

filter添加链规则:(jiaoxt added forward rst pkt for testlink site died)
iptables -t filter -N waf_forward_rst
iptables -t filter -I FORWARD -j waf_forward_rst
        
iptables -A waf_forward_rst -s 10.0.1.66 -p tcp --sport 80 -j REJECT --reject-with tcp-reset >/dev/null 2>&1

 

<think>好的,用户之前问过关于Nginx反向代理Nacos的问题,现在又问了关于Keycloak的。我需要先回顾之前的回答结构,确保保持一致。用户可能是在搭建一套微服务环境,需要配置多个服务的反向代理,所以需要清晰的步骤配置示例。 首先,用户的需求是使用Nginx反向代理Keycloak,可能遇到访问问题,比如页面空白或配置错误。需要分析Keycloak的特点,比如默认端口、必要路径、WebSocket支持等。Keycloak通常运行在8080端口,但可能用户会修改,需要确认。另外,Keycloak可能需要处理CORSHTTPS,特别是生产环境中的安全配置。 接下来,我需要考虑用户可能的配置错误点。比如端口是否正确,是否启用了SSL,静态资源路径是否正确代理,WebSocket有没有配置。此外,Keycloak的上下文路径可能需要调整,用户可能修改过,导致Nginx配置不匹配。 然后,要整理配置模板,确保包含关键部分,比如静态资源代理、WebSocket支持、gRPC(如果适用)、SSL配置示例。需要提醒用户替换实际域名后端服务器地址。同时,强调关键配置说明,比如WebSocket的必要性,路径匹配,HTTPS的重要性,以及健康检查等。 还要考虑用户可能遇到的常见问题,比如页面无法加载、WebSocket连接失败、CORS错误、HTTPS重定向问题。给出排查步骤,比如检查Nginx日志,验证端口连通性,浏览器控制台检查等。 最后,补充建议部分需要提醒集群配置、性能调优、安全加固,比如添加访问限制、WAF集成,以及备份配置的重要性。确保用户有一个全面的指南来配置排查问题。 整个过程中要保持结构清晰,分步骤说明,使用代码块突出配置,让用户容易复制修改。同时,使用中文口语化表达,避免技术术语过于晦涩,确保用户能理解每一步的目的操作方法。</think>--- ### 一、Keycloak反向代理核心要点 **Keycloak特性与代理难点:** 1. **默认端口**:HTTP 8080(开发模式) / HTTPS 8443(生产模式) 2. **必要路径**:`/auth`(关键路径,新版本可能调整) `/auth/admin` `/auth/realms` 3. **协议敏感**:需严格保持前端(Nginx)与后端(Keycloak)协议一致 4. **WebSocket依赖**:实时功能需要代理升级协议 --- ### 二、推荐配置模板(基础版) ```nginx server { listen 80; server_name auth.yourdomain.com; # 核心路径代理 location / { proxy_pass http://keycloak-server:8080; # Keycloak后端地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # WebSocket支持(管理控制台需要) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } # 健康检查端点 location /health { proxy_pass http://keycloak-server:8080/health; access_log off; } } ``` --- ### 三、生产环境HTTPS增强配置 ```nginx server { listen 443 ssl; server_name auth.yourdomain.com; # SSL证书配置 ssl_certificate /etc/ssl/certs/fullchain.pem; ssl_certificate_key /etc/ssl/certs/privkey.pem; ssl_session_timeout 1d; ssl_protocols TLSv1.2 TLSv1.3; # 强制HTTPS重定向 if ($scheme != "https") { return 301 https://$host$request_uri; } # 代理配置(需同步修改Keycloak服务配置) location / { proxy_pass http://keycloak-server:8080; proxy_set_header X-Forwarded-Proto $scheme; # 必须传递协议类型 # 保持长连接 proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; } } ``` --- ### 四、关键配置说明 1. **协议一致性要求**: - 必须设置 `proxy_set_header X-Forwarded-Proto` - Keycloak会校验请求协议,若Nginx使用HTTPS但未传递该头,会导致重定向循环 2. **上下文路径匹配**: ```nginx # 如果Keycloak修改了context-path(默认无) location /my-auth/ { proxy_pass http://keycloak-server:8080/my-auth/; } ``` 3. **WebSocket超时配置**: ```nginx proxy_connect_timeout 7d; proxy_send_timeout 7d; proxy_read_timeout 7d; ``` --- ### 五、常见问题排查指南 #### 1. 页面无法加载 - **检查点**: ```bash # 验证后端可达性 curl -v http://keycloak-server:8080/auth/realms/master # 查看Nginx错误日志 tail -f /var/log/nginx/error.log | grep -i keycloak ``` #### 2. WebSocket连接失败 - **典型症状**:控制台出现 `WebSocket connection to 'wss://...' failed` - **解决方案**: ```nginx map $http_upgrade $connection_upgrade { default upgrade; '' close; } location / { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } ``` #### 3. CORS错误 - **配置增强**: ```nginx add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; ``` --- ### 六、高级配置建议 1. **集群部署支持**: ```nginx upstream keycloak_cluster { least_conn; server 10.0.0.1:8080; server 10.0.0.2:8080; keepalive 32; } ``` 2. **性能调优**: ```nginx # 缓冲区优化 proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; # 缓存静态资源 location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff2)$ { expires 365d; add_header Cache-Control "public, immutable"; } ``` 3. **安全加固**: ```nginx # 限制管理接口访问 location ~ ^/auth/admin/ { allow 192.168.1.0/24; deny all; proxy_pass http://keycloak-server:8080; } # 隐藏Server头 proxy_hide_header Server; more_clear_headers 'Server'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值