如何防止源站 IP 被泄露
本文最后更新于 2025年9月12日 上午
不要在未套 cdn 的情况下直接 DNS 解析到源站(如果解析了,但时间不长,此时可能还没被扫留下记录)
Nginx 配置时在 host 不匹配时拒绝握手
如以下配置:
1
2
3
4server {
listen 443 ssl default_server;
ssl_reject_handshake on;
}当没有匹配到 server 时,拒绝 ssl 握手。
将服务只监听 127.0.0.1,外部网络靠 Nginx 反代来访问。如使用 docker 注意映射端口时尽量使用
127.0.0.1,比如映射 $10808$ 端口:127.0.0.1:10808:10808。注意
ufw命令行为与 docker 端口的冲突,详见该项目
目前很多服务给出的默认 docker 命令或者 compose 文件都是在端口映射中未指明映射地址,导致默认映射 0.0.0.0 导致服务直接暴露在公网上。
这可能还好,最重要的是你暴露的服务所展现的内容(如 html 文件)可能直接暴露了对应的域名(比如网站的 favicon 链接),导致 censys 这类扫描 IP 地址的能够直接将域名和 IP 对应起来!!!
如著名图床 EasyImage2.0 服务就完美地踩中了以上两点。
挽救被 0.0.0.0 映射的服务
一个黑魔法:
docker ps找到对应容器的 IDsystemctl stop docker停止 dockervim /var/lib/docker/containers/<container-id>/hostconfig.json将
"HostIp": "0.0.0.0"或者"HostIp": ""改为HostIp": "127.0.0.1"systemctl start docker启动如果容器没启动,启动容器
可以使用以下脚本方便修改所有容器映射地址(同时注意修改你的 docker compose 文件上的映射地址;以及之后如果使用 docker run 命令,请注意显式指明映射 127.0.0.1):
1 | |
运行脚本后,你可能还需要启动容器。