服务器安全不容小觑,但对于我们这些小站长来说,专业能力相较于运维人员还有所欠缺,对 Linux 操作系统的熟悉程度也不够,更别提分析日志并提前发现和解决问题了。在个人精力和专业能力之间不可避免地要做出一些选择。
我总结了目前在服务器安全方面所做的努力,尽可能减少因个人原因导致的漏洞问题。当然,我毕竟不是专业人员,所提出的观点仅代表个人看法。本篇文章归类于 杂谈。
一、云服务商
1.1 登录凭证
选择 SSH 密钥作为登录凭证,而非自定义密码。
1.2 密钥类型
SSH 密钥使用 ed25519 加密算法,并可选择设置"密钥短语"(passphrase)以增加安全性。
1.3 防火墙控制
尽量减少开放的端口,并对常见的通用扫描器 IP 段设置黑名单[1]。
1.3.1 激进策略
放弃 IPV4 访问,禁用整个 IPV4 段网络;放弃境外流量,对于 IPV6 仅允许中国境内的访问。
更换常用服务的默认端口,例如将 Nginx 的端口从 80 和 443 改为 8880 和 44333,并使用 CDN 进行访问。
1.3.2 国内常见 IPV6 段
240e::/16
: 中国电信2408::/15
: 中国联通、移动
实际上,中国广电、科技网及国内的云服务商等在使用其他 IP 段。如果你对此有担忧,可以将 IP 段范围扩大到2400::/12
,以确保亚太地区[2]的正常访问。
1.3.3 激进策略 2.0
如果您的网站只通过 CDN 回源,那么为什么不禁用 80/443 并对 CDN 回源节点 添加白名单呢?
腾讯云 CDN 地址段
27.44.206.0/24 |
二、应用控制
2.1 SSH 应用
禁止密码登录、只允许密钥登录、更换默认端口
vim /etc/ssh/sshd_config |
# 禁止密码登录 |
2.2 Web 应用
2.2.1 DNS 阶段
首先,我们的理想状态是通过域名找不到服务器的真实 IP。备案的话,可以使用国内的 CDN 服务;没有备案时,可以使用 Cloudflare 的代理服务。这两种方法都能有效隐藏真实的服务器地址。
2.2.1.1 区域解析
既然绝大部分恶意流量都来自境外,而作为一个中文网站,为何不在 DNS 阶段设置成仅境内解析呢?国内大部分 DNS 商均提供了区域解析能力,我们只需要将默认解析替换成境内解析即可。而对于 Cloudflare,我们可以新建一条重定向规则,对于国家/区域不是中国的,统统重定向到 localhost。
注:域名 DNS 默认解析在 CDN 设置为境内分发时,会导致境外 IP 访问时直接回源。
2.2.2 访问阶段
拒绝默认域名访问
server { |
拒绝非 CDN 请求访问
在 CDN 面板中的回源设置里添加一个只有你知道的请求头和值,然后在对其判断,不符合就返回 444。
# 私有请求头校验 X-Check |
搭配 Fail2Ban 进行屏蔽
创建 Nginx 过滤器,创建文件 /etc/fail2ban/filter.d/nginx-4xx.conf
并添加以下内容:
[Definition] |
创建 Nginx 过滤器,创建文件 /etc/fail2ban/filter.d/nginx-4xx-5xx.conf
并添加以下内容:
[Definition] |
创建 Nginx 过滤器,创建文件 /etc/fail2ban/filter.d/fail2ban-recidive.conf
并添加以下内容:
[Definition] |
配置 Fail2Ban 监狱(Jail),编辑 Fail2Ban 的配置文件 /etc/fail2ban/jail.local
,添加以下内容:
[nginx-all-default] |
1Panel 的默认站点日志文件的实际位置是:
/opt/1panel/apps/openresty/openresty/www/sites/default.website/log/access.log
创建日志:
sudo touch /var/log/nginx-4xx.log |
2.2.3 避免抛出错误信息
避免直接把错误信息展现给用户,不知道的永远是最好的,可以在网站的配置中重定向 5XX 错误。
重定向 4/5xx 请求
# 捕获所有4XX和5XX错误并重定向到返回444的位置 |
2.2.4 对关键地址进行加密
比如在 Typecho 博客的后台登录页,可以直接利用面板的访问限制功能,对 /admin/
路径进行简单加密。只有经过授权的用户才能访问该页面,否则会返回 401 Unauthorized 错误。
2.2.5 部署 Web 防火墙
无论你是使用面板的防火墙还是 ModSecurity 防火墙,请务必开启一个。
2.2.6 拉黑无意义的 UA
具体情况具体分析,我的拉黑策略相对激进,以下列内容的 User-Agent 均被我拉黑:
User-Agent 黑名单
*nmap*|*NMAP*|*HTTrack*|*sqlmap*|*Java*|*zgrab* |
三、其他
面板
为面板设置证书,并配置 Nginx 反向代理访问(回源地址:https://127.0.0.1:port
)。
数据库
没有必要开放数据库端口,通过 SSH 隧道进行访问,保持数据库的本地连接即可。
Censys IP 段:Can I opt out of Censys scans。 ↩︎
亚太地区包括:中国、日本、韩国、澳大利亚、新西兰、印度、新加坡、马来西亚、泰国、越南。 ↩︎