赞
踩
由于没有固定的宽带,拿不到公网IP地址。所以只能使用内网穿透工具通过腾讯云轻量主机进行内网穿透。想在穿透过程中使用waf对于一些恶意请求进行拦截处理。故而产生了本篇文档的使用安装说明
- Centos7环境下安装Nginx:Centos7安装配置nginx
- 长亭雷池一键安装:长亭雷池官网安装介绍
- frp配置介绍:frp中文文档
- CentOS7安装Docker 和 docker-compose:CSDN安装Docker和Docker-Compose
之前已经有写过关于frp安装的文档,这里不再说明可以查看Frp内网穿透安装及配置
这里主要调整一个配置,locations_http_to_https
[common] bind_port = 7000 token = your token vhost_http_port = 80 #http服务监听的端口 #以下dashboard相关为管理看板的地址和账号密码 dashboard_port = 8888 dashboard_user = admin dashboard_pwd = admin enable_prometheus = true #日志输出地址,级别,最大保留天数 log_file = /var/log/frps.log log_level = info log_max_days = 3 [web] type = http custom_domains = your domain #主要增加以下这段,强制将http请求跳转到https locations_http_to_https = true ##
通过配置 locations_http_to_https 让我们的http请求强制跳转到https端口上
另外,我们可以看到 这里我们没有监听https端口,这块交给Nginx来进行了 具体原因在后面frpc配置的时候会讲到
frpc的配置会比较关键,以下会贴入相关配置代码进行介绍
[nas_https] type = https custom_domains = your domain plugin = https2http #使用plugin为 https2http 将https请求转向http地址 plugin_local_addr = 10.10.10.10:8888 proxy_protocol_version = v1 #传输IP使用proxy_protocol协议,= 后面为版本 use_encryption = true #连接是否加密 use_compression = true #连接是否压缩 #HTTPS 证书相关的配置 plugin_crt_path = /etc/frp/cert/xxx.crt #SSL证书文件 plugin_key_path = /etc/frp/cert/xxx.key #重写header里面的Host plugin_host_header_rewrite = your domain
以上配置能够实现访问为SSL加密的,但是会存在一个问题是waf内始终获取不到proxy_protocol内的客户端真实地址并且会报错Header头损坏。但是使用http协议进来的请求是OK的,所以怀疑是plugin转http时重写了Header导致。故而我们在使用waf时不要使用以上写法
[nas_http]
type = http
local_ip = IP
local_port = 端口 #由于我们需要请求经过waf,所以这里ip和端口都填写内网Nginx中访问地址和端口
custom_domains = your domain
proxy_protocol_version = v1 #传输IP使用proxy_protocol协议,= 后面为版本
use_encryption = true #连接是否加密
use_compression = true #连接是否压缩
我们配置为以上格式即可。需要注意的是由于我们需要请求经过waf,所以这里ip和端口都填写内网Nginx中访问地址和端口 通过该Nginx转发至waf
- 环境搭建比较简单,首先我们搭建好Docker和Docker Compose
- 然后可以选择官网内提供的几种安装方式进行选择
这里我们需要注意的是上游服务器地址填写的时候为全路径,如:http://192.168.1.1:8001
另外这里的端口和域名都为frpc内配置的请求地址和端口
黑白名单可以配置拦截或者豁免某一部分请求
如图:将豁免路径内包含host.txt关键字的请求,防止网站关键请求被识别恶意而被拦截
查看被拦截请求的情况
可以点击详情查看拦截的详细信息,在调试获取真实IP的时候可以通过这里查看请求 来判断是否有传入真实IP地址
另外,需要waf系统内显示的为真实连接IP地址需要依据该请求头调整Header获取方式。
例如:以上X-real-IP获取的为我的公网访问地址,那么我们需要去【通用配置】中修改如下配置
此处Nginx主要是安装在公网服务器中,用于代理Https请求 将其转发至 frp穿透出去的Http请求上
#nas server { listen 443 ssl; ssl_certificate /usr/local/nginx/cert/xxx.crt; #cacert.pem 文件路径 ssl_certificate_key /usr/local/nginx/cert/xxx.key; #privkey.pem 文件路径 server_name your domain; #此处的域名/IP请修改为相对应的 ssl_session_timeout 5m; ssl_session_cache shared:SSL:5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS; ssl_prefer_server_ciphers on; proxy_set_header X-Forwarded-For $remote_addr; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; server_tokens off; location / { proxy_pass http://127.0.0.1:80; #转发请求至80端口 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-Host $server_name; proxy_set_header X-Forwarded-Proto https; access_log /usr/local/nginx/logs/nas.access.log; error_log /usr/local/nginx/logs/nas.error.log; proxy_read_timeout 1200s; client_max_body_size 0; } }
此处的Nginx主要是用于解析frp传输过来的proxy_protocol
#wx地址
server {
listen 8886 proxy_protocol;
server_name your domain;
location / {
proxy_pass http://xxxx:9996;#waf新增站点地址和端口
proxy_set_header X-Real-IP $http_x_real_ip;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
}
}
通过这段解析real_ip 传到waf中 通过X-Real-IP 获取真实IP
需要信任代理服务器,也就是waf那台服务器的IP。以DSM 7.0为例
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。