分类 默认分类 下的文章

一、 前言:从“托管”回归“自主”
在 CentOS 7 时代,我的服务器曾因配置过于单一而遭受攻击,随后我转投 GitHub Pages 寻求庇护。虽然静态托管稳定省心,但作为技术人,始终渴望那种对底层协议的绝对掌控感。2025 年,我带着更成熟的防御思维回归自建,构建了一套“隐身”与“分流”并重的安全架构。

二、 核心架构:多层协议分流与“探测防御”
我不再直接暴露 Web 业务端口,而是通过 Nginx Stream 模块在网络层建立了一道精密的过滤网。

流量分拣:所有 xxx 端口流量先进入分流器,通过 SNI(服务器名称指示) 识别访问域名。

主站 B.com:识别到主站请求后,流量被转发至后端 xxxxx 端口的 Web 容器,处理博客业务。

安全网关 A.B.com:识别到二级域名后,流量进入加密隧道层。

授权访问:识别特定私有协议特征,开启远程管理隧道。

未知探测/回落:任何不具备协议特征的访问,系统会自动触发 Fallback(回落机制),将其重定向至 xxxxx 端口的“恐龙”静态页。

三、 自动化运维:让服务器“自我愈合”
为了保证这套复杂系统的长期稳定,我部署了两套关键的自动化监控脚本(已进行路径脱敏处理)。

  1. 证书与服务端自动同步脚本
    由于 Web 前端与底层安全网关共享证书,为了实现证书续签后的“无缝衔接”,我编写了基于 MD5 校验的同步脚本。
#!/bin/bash
# 监测前端证书变动并同步至网关层
SOURCE_CERT="/www/server/panel/vhost/cert/A.B.com/fullchain.pem"
GATEWAY_CERT="/etc/gateway/cert/server.crt"

# 获取 MD5 值进行比对
SOURCE_MD5=$(md5sum $SOURCE_CERT | cut -d ' ' -f1)
GATEWAY_MD5=$(md5sum $GATEWAY_CERT | cut -d ' ' -f1)

if [ "$SOURCE_MD5" != "$GATEWAY_MD5" ]; then
    cp $SOURCE_CERT $GATEWAY_CERT
    cp /www/server/panel/vhost/cert/A.B.com/privkey.pem /etc/gateway/cert/server.key
    # 重启安全网关服务确保生效
    systemctl restart gateway_service
    echo "$(date) - 证书已更新并重启安全服务" >> /var/log/sys_monitor.log
else
    echo "$(date) - 证书正常,无需操作" >> /var/log/sys_monitor.log
fi
  1. 系统冗余文件清理脚本
    防止日志溢出(尤其是分流层产生的海量访问记录),确保磁盘空间始终处于健康状态。
#!/bin/bash
echo "开始执行系统冗余清理..."

# 1. 自动截断 Web 日志(保留文件,清空内容)
find /www/wwwlogs/ -name "*.log" -exec truncate -s 0 {} \;
find /www/wwwlogs/ -name "*.log.gz" -delete

# 2. 清理面板后台冗余数据
rm -f /www/server/panel/logs/*.log
rm -rf /www/server/panel/logs/history_backups/*

# 3. 清理系统临时会话与包缓存
rm -rf /tmp/sess_*
apt-get autoremove -y && apt-get clean

echo "清理任务已完成!"

四、 避坑指南:架构加固细节
物理权限隔离:针对动态博客系统,我执行了 chmod 444 config.inc.php,在系统层锁死核心配置文件,切断了通过 Web 漏洞篡改配置的路径。

协议头修复:在分流环境下,后端服务往往无法识别加密状态。通过在 Nginx 转发块中注入 fastcgi_param HTTPS on;,彻底解决了样式表加载乱序的问题。

五、 交互设计:隐藏的“传送门”
在二级域名 A.B.com 的静态页中,我埋下了一个基于 localStorage 的彩蛋。页面表面上是一只像素恐龙,但通过连续点击 5 次触发计数器,即可开启通往主站 A.com 的“传送门”。这种设计有效地隔离了自动化探测脚本与真实业务入口的关联。

// 核心逻辑:连击计数器 + 本地存储记忆
let count = 0;
const dino = document.getElementById('dino-img');
const link = document.getElementById('secret-link');

// 检查是否已解锁
if (localStorage.getItem('dino_unlocked') === 'true') {
    link.style.display = 'inline-block';
}

dino.onclick = () => {
    if (localStorage.getItem('dino_unlocked') === 'true') return;
    count++;
    if (count === 5) {
        link.style.display = 'inline-block';
        localStorage.setItem('dino_unlocked', 'true');
        alert('传送门已开启');
    }
};

六、 结语
从 GitHub Pages 回到自建服务器,并不是简单的搬家,而是一次防御体系的重构。这只“橙色小恐龙”不仅是伪装站的标志,更是技术进阶的勋章。在信息碎片化的时代,守护好这一方属于自己的的数字领地,本身就是一种极大的乐趣。