4.9 KiB
title
| title |
|---|
| 配置问题 |
配置问题
站点配置问题
在没有 SafeLine 的时候,假设小明的域名 xiaoming.com 通过 DNS 解析到自己主机 192.168.1.111,上面在 :8888 端口监听了自己的服务(网站/博客/靶场)等等。
小明通过 http://xiaoming.com:8888 或者 192.168.1.111:8888 来访问自己的服务。
我该如何配置?/ 域名填什么?/ 端口怎么写?/ 上游服务器是什么?
目前社区版 SafeLine 支持的是反向代理的方式接入站点,也就是类似于一台 nginx 服务。这时候小明需要做的就是让流量先抵达 SafeLine,然后经过 SafeLine 检测之后,再转发给自己原先的业务。
小明只需要按照如下方式创建站点即可:
xiaoming.com填入页面的「域名」:7777填入「端口」;或者别的任意非:8888和:9443(被 SafeLine 后台管理页面占用)端口http://192.168.1.111:8888填入「上游服务器」
创建之后,就可以通过 http://xiaoming.com:7777 或者 192.168.1.111:7777 访问自己的服务了,这时候请求到 http://xiaoming.com:7777 的流量都会被 SafeLine 检测。经过 SafeLine 过滤后,安全的流量会被透传到原先的 :8888 业务服务器(即上游服务器)。
注:直接访问 http://xiaoming.com:8888 的流量,仍然不会被 SafeLine 检测,因为流量并没有经过 SafeLine,而是绕过 SafeLine 直接打到了上游服务器上
如果按照如上配置,还是无法成功访问到上游服务器,接着往下看,尝试逐项进行问题排查。
配置完成之后,还是没有成功访问到上游服务器
下面例子都还按照上面小明的环境情况介绍。
1. netstat/ss/lsof 查看端口占用情况
先确认下 0.0.0.0:7777 端口是否有服务在监听。SafeLine 使用 Tengine 来作为代理服务,所以正常来说,应该有一个 nginx 进程监听在 :7777 端口。如果没有的话,可能是 SafeLine 的问题,请通过社群或者 Github issue 提交反馈。
如果有的话,继续往下排查。
2. 是否是被非 SafeLine 的 nginx 监听
基于第一步,已经能确认 :7777 是被某个 nginx 进程监听了,但是并不能确认是被 SafeLine 自己的 nginx 监听。排查是否自己原先有 nginx conf 中配置了 server 监听 :7777。如果有的话,手动解决冲突。要么修改自己原先的 nginx conf,要么修改 SafeLine 的站点配置。
也可以直接通过 docker logs -f safeline-tengine 确认 SafeLine 是否有 nginx 报错说端口冲突。
常见的情况就是自己原先有一个服务监听在 :80,SafeLine 上配置了站点也监听 :80 端口,就产生了冲突。
如果没有的话,继续往下排查。
3. 是否被防火墙拦截
有操作系统本身的防火墙,还有可能是云服务商的防火墙。根据实际情况逐项排查,配置开放端口的 TCP 访问。
出现如下情况,可能就是被中间某防火墙拦截了:
- 在
192.168.1.111上 curl -vv127.0.0.1:7777能访问到业务,有 HTTP 返回码。 - 在本机 curl -vv
192.168.1.111:7777不通,没有 HTTP 响应;telnet 192.168.1.111 7777返回Unable to connect to remote host: Connection refused
4. SafeLine 是否能访问到上游服务器
小明的情况是 SafeLine 和业务在同一台机器,一般不会有不同机器之间的网络问题,但是也建议在 SafeLine 部署的机器上测试一下。如果是两台机器的情况下,需要考虑是否互相之间能正常通信。
直接 curl -H "Host: <SafeLine-IP>" -vv http://xiaoming.com:8888 测一下是否能访问到。如果不行,需要自行排查为什么 SafeLine 的机器没法访问到。
注:这里需要 -H 指定 Host Host: <SafeLine-IP> 进行连通性测试。收到比较多的反馈,在 WAF 上直接配置上游服务器为 HTTPS 的域名,比如 https://xiaoming.com。实际场景是希望先测试 WAF 能力正常后再把域名解析切到 WAF 进行上线。这种本地测试的场景,需要修改本机 host,把 xiaoming.com 解析到 SafeLine-IP,否则可能会无法成功代理。因为 SafeLine 向上游服务器转发时,代理请求中的 Host 使用的是原始 HTTP 请求中的 Host,此时需要自行判断上游业务服务器能够正确处理该代理请求(例如上游业务服务器在 Host 没有匹配自己的站点名称时,是否能够处理)
5. 其他情况
如果执行了 1-4:
- 确认有 nginx 进程监听了 SafeLine 机器的
0.0.0.0:7777端口 - 确认 SafeLine tengine 无端口冲突报错
- 确认主机和云服务商的防火墙都没有限制
:7777端口的 TCP 访问 - 确认在 SafeLine 上能访问到「上游服务器」
问题还是没有解决,可能是 SafeLine 产品的问题,请通过社群或者 Github issue 提交反馈。