拿自己唯一的云服务器当蓝队实验场:前面雷池 WAF、旁边 HFish 蜜罐、主机按加固清单收紧。这篇专注运营与研判。
我的防御架构
公网 443
↓
雷池 SafeLine(tengine,拦截层)
↓
后端 nginx(127.0.0.1:8080,仅监听本地)
↓
静态站点
旁路:HFish 蜜罐(诱捕端口)+ Tailscale 内网管理面
原则:管理面全部内网化,公网只留一个被 WAF 保护的 443。
雷池 WAF 运营笔记
部署用官方一键脚本,学问在日常运营:
- 拦截日志:先看攻击类型分布(我这儿 SQL 注入探测最多),再看源 IP 画像——大量是 IDC 段,偶发家庭宽带的反而值得深挖。
- 误报:RSS 抓取器被误拦过一次(UA 含特殊字符),加白名单解决。
- 规则强度:博客访客少直接开高强度,业务站建议中强度起步。
- 频率限制:登录接口开速率限制,防爆破第一道闸。
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 挡应用层、安全组挡网络层、加固挡系统层、蜜罐给视野、日志给真相。