系列文章

建站笔记

第 1 / 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 防火墙」→ 全局配置:

  1. 找到「User-Agent 黑名单」
  2. 添加:CensysInspect
  3. 保存生效

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 段换掉就行。