建站笔记
第 1 / 1 篇
-
01
宝塔 + Nginx 实战:三招让 Censys 扫描器吃闭门羹正在阅读
Censys 是谁?
Censys 是美国一家网络安全公司,做的事情类似”互联网的谷歌地图”——持续扫描全网 IP,记录每个服务器开放了什么端口、跑了什么服务、用的什么证书。它本身无害,但每次扫描都会产生无效日志、占用资源,还会探测你的站点结构。
它的扫描器 UA 长这样:
Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)
官方公布的扫描 IP 段:
162.142.125.0/24
167.94.138.0/24
167.94.145.0/24
167.94.146.0/24
167.94.147.0/24
完整列表以 Censys 官网为准:support.censys.io/hc/en-us/articles/360043177452
Censys 扫描有什么坏处?
Censys 虽然不攻击网站,但持续扫描带来的麻烦并不少:
- 日志刷屏:每天产生大量无意义的访问记录,日志文件越滚越大,你想找真实访客的记录,得在一堆扫描记录里翻半天。
- 白耗资源:每次扫描请求都要占用一点 CPU 和带宽,单个看微不足道,但 Censys 是全天候、多 IP 轮番扫,积少成多就是纯浪费。
- 暴露指纹:扫描会探测你跑的是什么程序、什么版本、目录结构长什么样——这些信息等于给真正的攻击者递”侦察报告”,方便他们找漏洞下手。
- 数据失真:扫描流量混进网站统计里,阅读量、访客数、来源分析全被污染,你看不到真实数据。
所以屏蔽扫描器,不只是”眼不见心不烦”,更是省资源、保安全、还原真实数据的正经操作。
动手前的重要提醒
- 先备份再动手:改 Nginx 配置前,先把原配置文件复制一份(
cp 你的域名.conf 你的域名.conf.bak),改坏了能秒恢复。 - 改完必须测试:保存配置后先执行
nginx -t,显示 syntax is ok 再nginx -s reload。配置写错了会导致整个网站打不开,千万别跳过测试。 - deny 和 allow 的顺序不能反:
allow all;必须放在所有deny后面,否则等于全放行,白忙一场。 - 确认自己的 IP 不在屏蔽段里:动手前先查一下自己电脑的公网 IP(百度搜”IP”即可),别把自己也挡在门外——尤其用方法三封 IP 段时,封错了 SSH 都连不上。
- UA 屏蔽的局限:方法一只挡”自称是 Censys”的请求,如果有人伪造 UA 成普通浏览器是拦不住的(Censys 官方不会这么干,所以实际够用)。
- 防火墙规则是持久的:firewalld 的 –permanent 规则重启服务器后依然生效,想解封得手动删除,别加完就忘。
方法一:Nginx 按 User-Agent 屏蔽(最简单)
Censys 扫描器的 UA 是固定的,直接在站点配置里拦掉。
编辑站点配置文件(宝塔:网站 → 设置 → 配置文件,或 /www/server/panel/vhost/nginx/你的域名.conf),在 server 块里加:
# 屏蔽 Censys 扫描器
if ($http_user_agent ~* "CensysInspect|Censys") {
return 444;
}
444 是 Nginx 特有的”不返回任何内容直接断开连接”,对扫描器来说就像打在棉花上,比 403 更省资源。
保存后重载配置:
nginx -t && nginx -s reload
验证:
curl -I -A "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)" https://你的域名
返回 444 就说明拦住了,正常浏览器访问不受影响。
优点:一行配置,立竿见影
缺点:理论上 UA 可以伪造(但 Censys 官方不会伪造,实际有效)
方法二:Nginx 按 IP 段屏蔽(更彻底)
从网络层直接拒绝 Censys 的 IP 段,比 UA 屏蔽更硬核。同样在 server 块里加:
# 屏蔽 Censys 扫描 IP 段
deny 162.142.125.0/24;
deny 167.94.138.0/24;
deny 167.94.145.0/24;
deny 167.94.146.0/24;
deny 167.94.147.0/24;
allow all;
注意:deny 规则必须在 allow all 之前,否则会被放行。重载验证同上。
优点:从 TCP 层就拒绝,扫描器连 HTTP 握手都完成不了
缺点:Censys 的 IP 段可能会更新,需要定期维护(建议配合方法一使用)
方法三:宝塔防火墙(图形化,适合新手)
不想改配置文件?宝塔面板自带两种防火墙,点点鼠标就能封。
3.1 Nginx 防火墙插件(拦截 UA)
宝塔面板 → 软件商店 → 安装「Nginx 防火墙」→ 全局配置:
- 找到「User-Agent 黑名单」
- 添加:CensysInspect
- 保存生效
3.2 系统防火墙(封 IP 段)
宝塔面板 → 安全 → 系统防火墙,把 Censys 的 5 个 IP 段依次添加并选择「拒绝」。也可以用命令行(SSH):
# firewalld(CentOS 7+ 默认)
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=162.142.125.0/24 drop'
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=167.94.138.0/24 drop'
firewall-cmd --reload
# 或 iptables(老系统)
iptables -A INPUT -s 162.142.125.0/24 -j DROP
iptables -A INPUT -s 167.94.138.0/24 -j DROP
service iptables save
优点:图形化操作,不用记命令
缺点:依赖面板插件,解封要手动删规则
总结:推荐组合
| 方法 | 拦截层面 | 维护成本 | 推荐度 |
|---|---|---|---|
| 方法一(UA) | HTTP 层 | 零 | ⭐⭐⭐⭐⭐ |
| 方法二(IP 段) | 网络层 | 低 | ⭐⭐⭐⭐ |
| 方法三(防火墙) | 网络层 | 低 | ⭐⭐⭐ |
我的建议:方法一 + 方法二双保险,在 Nginx 层解决,不依赖面板插件。方法三留给不喜欢动配置的朋友。
屏蔽之后,日志里再也看不到 CensysInspect 了,网站资源也省下一部分。同样的套路也可以用来屏蔽其他扫描器(Shodan、Masscan 等),把 UA 和 IP 段换掉就行。