学攻击学久了总想知道防守侧长什么样,于是我把自己唯一的云服务器当成了蓝队实验场:前面挂雷池 WAF,旁边摆 HFish 蜜罐,主机按加固清单收紧。这篇是防守侧的完整记录(部署细节我早前写过一篇,这篇专注运营与研判)。
我的防御架构
公网 443
↓
雷池 SafeLine(tengine,拦截层)
↓
后端 nginx(127.0.0.1:8080,仅监听本地)
↓
静态站点
旁路:HFish 蜜罐(诱捕端口)+ Tailscale 内网管理面
原则一句话:管理面全部内网化,公网只留一个被 WAF 保护的 443。
雷池 WAF 运营笔记
部署用官方一键脚本,真正的学问在日常运营:
- 拦截日志怎么读:先看攻击类型分布(我这 SQL 注入探测最多),再看源 IP 画像——大量是 IDC 段(机房扫描器),偶发家庭宽带的反而值得深挖。
- 误报处理:博客的 RSS 抓取器被误拦过一次(UA 含特殊字符),加白名单解决。WAF 不是装完就忘,误报不处理会挡正常用户。
- 规则强度选择:高强度模式误报多,我的博客访客少直接开高强度;业务站建议中强度起步。
- 频率限制:对登录接口开了速率限制,防爆破的第一道闸。
HFish 蜜罐研判
蜜罐的价值是看见谁在摸你。我的观察记录:
- 每天稳定有 SSH 爆破,字典清一色 root/admin/常见弱口令
- Web 蜜罐被扫的路径很有信息量:
/.git/config、/wp-admin、/actuator——看路径就知道对方在找什么 - 抓到过几次投递的样本 URL,都是已知的僵尸网络 loader
研判纪律:蜜罐告警不代表被打穿,它是”有人尝试”的证据。我建了简单流程:告警 → 查源 IP 情报 → 看是否触达真实服务 → 有必要就封 IP 段。
Linux 主机加固清单(我实际做的)
# 1. SSH 收编:管理口只走 Tailscale 内网,公网禁密码登录
PasswordAuthentication no
# 2. 端口收敛:公网只放 443,蜜罐端口除外
# 3. 安全响应头(nginx):
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
# 4. 隐藏版本:server_tokens off;
# 5. 防火墙:安全组(外层)+ ufw(本机)双层
每条都是一次真实配置 + 验证:改完 SSH 先用另一条会话测试能连,再断旧连接——别把自己锁在门外是加固第一定律。
WebShell 检测思路
从攻击方转过来的视角特别好用——我知道自己会怎么写马,就知道去哪查:
- 文件层:
find /var/www -name "*.php" -newer 基准文件找新增/被改;特征函数扫描(eval、assert、call_user_func) - 行为层:Web 目录里的文件新增监听(inotify)、php-fpm 进程异常子进程
- 流量层:雷池日志里的异常 POST(无 Referer、固定间隔心跳)
- 内存马(Java 站):查 Filter/Servlet 注册表有没有陌生条目
攻防一体的收获
防守运营给我最大的教育是日志视角:攻击者的每个动作都会留下痕迹,区别只在防守方看没看见。现在我做渗透时会下意识想”这一步在日志里长什么样”——这大概就是蓝队经验对红队手感的反哺。
小结
防御不是单个产品,是层:WAF 挡应用层、安全组挡网络层、加固挡系统层、蜜罐给视野、日志给真相。一台小服务器全都能练,推荐每个学安全的人都给自己搞一套。