[{"content":"前言：公网服务器的“险恶”环境 任何一台只要拥有公网 IPv4 地址的云服务器，在开机后的数分钟内就会遭遇全网扫描。查看 /var/log/auth.log 或 btmp 日志，常常能看到每天成千上万次来自全球各地的 SSH 暴力破解尝试。\n为了在极低系统资源开销的前提下，让服务器既坚固如磐石，又能随时随地掌握其健康状态与安全指标，本文记录一套完整的安全加固与无感知推送运维方案。\n一、 系统基础安全加固 1. 内核级静默禁 Ping（隐藏公网存在） 大部分扫描器会先通过 ICMP Echo 请求探活。在 Linux 内核层直接忽略 Ping 请求，能有效避开大批量粗筛脚本：\n创建或修改 /etc/sysctl.d/99-disable-ping.conf：\nnet.ipv4.icmp_echo_ignore_all = 1 执行命令使其立即生效，无需重启：\nsudo sysctl --system 效果：公网针对该服务器 IP 的 ping 请求将直接超时，呈现“死机/未分配”的静默状态。\n2. 彻底禁用 SSH 密码登录（强制纯密钥认证） 暴力破解 100% 针对的是弱口令与密码字典。禁用密码认证即可直接免疫绝大多数自动化密码爆破。\n在现代 Ubuntu/Debian 系统中，推荐使用模块化配置覆盖默认值：\n创建 /etc/ssh/sshd_config.d/01-disable-password.conf：\nPubkeyAuthentication yes PasswordAuthentication no KbdInteractiveAuthentication no AuthenticationMethods publickey 测试配置文件语法并重启 SSH 服务：\nsudo sshd -t sudo systemctl restart ssh ⚠️ 注意：在重启 SSH 服务前，请务必保持当前登录窗口不关闭，并另开一个新终端测试密钥登录是否正常，避免配置错误导致失联。\n二、 自动化每日巡检与 Bark 手机推送 加固完成后，如何知道服务器今天是否依然安然无恙？有没有遭遇持续性网络攻击？ 部署重量级监控体系（如 Prometheus + Grafana）对 1核1G/2G 的轻量 VPS 而言过于臃肿。我们可以用 极简 Shell 脚本 + crontab + Bark API 实现零性能损耗的日常巡检。\n1. 为什么选择 Bark？ 极简优雅：iOS 平台的轻量开源推送客户端，只需一条简单的 HTTP POST/GET 即可将通知弹窗送达手机。 零额外常驻：无需在服务器安装长连接 Agent，仅靠一条 curl 发送即走。 2. 编写巡检脚本 /usr/local/bin/server_daily_check.sh #!/bin/bash # ========================================== # 服务器每日安全与健康巡检脚本 # ========================================== BARK_KEY=\u0026#34;YOUR_BARK_KEY\u0026#34; BARK_API=\u0026#34;https://api.day.app/${BARK_KEY}\u0026#34; NOW=$(date \u0026#34;+%Y-%m-%d %H:%M:%S\u0026#34;) # 1. 统计过去 24 小时的暴力破解拦截次数与成功登录次数 SINCE_TIME=$(date -d \u0026#34;24 hours ago\u0026#34; \u0026#34;+%Y-%m-%dT%H:%M\u0026#34; 2\u0026gt;/dev/null || date \u0026#34;+%Y-%m-%dT%H:%M\u0026#34;) FAILED_ATTACKS=$(zgrep -h -E \u0026#34;Failed password|Invalid user\u0026#34; /var/log/auth.log* 2\u0026gt;/dev/null | awk -v since=\u0026#34;$SINCE_TIME\u0026#34; \u0026#39;$1 \u0026gt;= since\u0026#39; | wc -l) SUCCESS_LOGINS=$(zgrep -h \u0026#34;Accepted \u0026#34; /var/log/auth.log* 2\u0026gt;/dev/null | awk -v since=\u0026#34;$SINCE_TIME\u0026#34; \u0026#39;$1 \u0026gt;= since\u0026#39; | wc -l) # 2. 系统核心指标采集 MEM_INFO=$(free -m | awk \u0026#39;NR==2{printf \u0026#34;%dMB / %dMB (%.1f%%)\u0026#34;, $3, $2, $3*100/$2}\u0026#39;) DISK_INFO=$(df -h / | awk \u0026#39;NR==2{printf \u0026#34;%s / %s (%s)\u0026#34;, $3, $2, $5}\u0026#39;) CPU_LOAD=$(uptime | awk -F\u0026#39;load average:\u0026#39; \u0026#39;{print $2}\u0026#39; | sed \u0026#39;s/^ //\u0026#39;) UPTIME_DAYS=$(uptime -p | sed \u0026#39;s/up //\u0026#39;) # 3. 核心服务状态检查（示例：EasyTier / Docker） ET_STATUS=\u0026#34;异常\u0026#34; docker ps --format \u0026#39;{{.Names}}\u0026#39; | grep -q \u0026#34;^easytier-node$\u0026#34; \u0026amp;\u0026amp; ET_STATUS=\u0026#34;正常运行\u0026#34; TITLE=\u0026#34;服务器每日巡检简报\u0026#34; BODY=\u0026#34;📅 时间: ${NOW} ⏱️ 运行时间: ${UPTIME_DAYS} 🛡️ 安全防御状态: • 过去24h拦截爆破: ${FAILED_ATTACKS} 次 • 成功登录记录: ${SUCCESS_LOGINS} 次 • SSH认证机制: 仅密钥 (密码已禁用) • ICMP响应: 已静默忽略 📊 系统资源负载: • 内存使用: ${MEM_INFO} • 磁盘空间: ${DISK_INFO} • CPU负载: ${CPU_LOAD} 🌐 核心服务检测: • 组网节点: ${ET_STATUS}\u0026#34; # 发送结构化 JSON 推送给 Bark curl -s -X POST \u0026#34;${BARK_API}\u0026#34; \\ -H \u0026#34;Content-Type: application/json; charset=utf-8\u0026#34; \\ -d \u0026#34;$(jq -n \\ --arg title \u0026#34;$TITLE\u0026#34; \\ --arg body \u0026#34;$BODY\u0026#34; \\ --arg group \u0026#34;ServerMonitor\u0026#34; \\ --arg icon \u0026#34;https://img.icons8.com/color/48/server.png\u0026#34; \\ \u0026#39;{title: $title, body: $body, group: $group, icon: $icon}\u0026#39;)\u0026#34; \u0026gt;/dev/null 2\u0026gt;\u0026amp;1 赋予脚本可执行权限：\nsudo chmod +x /usr/local/bin/server_daily_check.sh 3. 配置 Crontab 定时调度 每天早晨 09:00 准时接收巡检简报，在 crontab 中加入：\ncrontab -e 添加如下定时任务配置：\n0 9 * * * /usr/local/bin/server_daily_check.sh \u0026gt;/dev/null 2\u0026gt;\u0026amp;1 每天醒来，手机就会准时弹出卡片通知，清晰了解前一天的安全拦截统计与磁盘内存状况。\n三、 定期清理与空间维护 云服务器使用一段时间后，日志和包管理容易堆积占用数个 G 的磁盘：\n# 1. 限制 systemd journal 日志保留时间为最近 7 天 sudo journalctl --vacuum-time=7d # 2. 清理历史失败登录二进制大文件（/var/log/btmp） sudo truncate -s 0 /var/log/btmp # 3. 清理已卸载软件包残留的配置文件与无用依赖 sudo dpkg -l | grep \u0026#39;^rc\u0026#39; | awk \u0026#39;{print $2}\u0026#39; | xargs -r sudo dpkg --purge sudo apt-get autoremove -y \u0026amp;\u0026amp; sudo apt-get clean 总结 通过简单的内核参数优化、严格的 SSH 认证规则，加上不到 50 行的轻量 Shell 脚本，我们在零性能损耗、零额外软件开销的情况下，实现了高强度防线与全自动监控运维。\n","permalink":"https://dhmay7.nya.je/posts/server-hardening-and-bark-monitoring/","summary":"手把手记录一台公网云服务器的安全加固与自动化运维实践：从内核级禁 Ping、纯公钥 SSH 认证，到编写超轻量级 Shell 脚本每日统计暴力破解并推送到手机通知。","title":"Linux 云服务器安全加固与每日 Bark 自动化巡检运维实战"},{"content":"欢迎访问！🎉 很高兴你能来到这里！本博客正式搭建并运行在我的个人远程服务器上。\n技术栈选型 静态站点生成器：Hugo (超快渲染速度) 博客主题：PaperMod (极简、优雅、支持深浅色模式) 容器化编排：Docker Compose Web 服务器与反向代理：Nginx Alpine (HTTP/2, HTTPS 加密传输) 安全证书：Let\u0026rsquo;s Encrypt SSL 免费证书自动续期 凡是过往，皆为序章。接下来会在这里分享更多的技术折腾与日常记录！\n","permalink":"https://dhmay7.nya.je/posts/hello-world/","summary":"这是基于 Hugo + Nginx + Docker Compose 搭建在个人远程服务器上的首篇博文。","title":"Hello World！我的独立博客上线了"},{"content":"前言：为什么选择 EasyTier？ 平时我们常常面临跨网络访问设备的痛点：\n在家里的电脑、工位主机、NAS、云服务器散落在不同局域网； 绝大多数宽带没有公网 IPv4，经过了运营商层层 NAT； 传统组网工具（如 ZeroTier、Tailscale）的官方公共服务器位于海外，打洞成功率与中转延迟往往不理想。 EasyTier 是一款基于 Rust 开发的简单、去中心化点对点（P2P）Mesh 虚拟网络工具。它支持全自动 NAT 穿透打洞、多点加密中继，并且非常轻量。本文记录将一台 Linux 云服务器部署为公共中继节点，并将多台不同环境的设备接入自建虚拟内网的完整实战过程。\n一、 网络架构规划 为了兼顾稳定打洞中转与安全私密访问，我们规划如下拓扑：\n节点标识 节点角色 操作系统 / 环境 虚拟内网 IP 云服务器 (relay-node) 公网中继兼打洞协调端 (Relay) Linux VPS (Docker) 10.10.10.1 工作机 (workstation-pc) 主力工作环境 (Peer) Windows 11 (EasyTier GUI) 10.10.10.89 远端节点 (home-pc) 家用主机 / 笔记本 (Peer) Windows 11 (EasyTier GUI) 10.10.10.88 虚拟网段：10.10.10.0/24 公网监听端口：TCP / UDP 11010 网络名 (Network Name)：my-mesh-net（所有网络成员必须一致） 通信安全：自定义网络密码强加密，防止未授权设备接入。 二、 云服务器端部署（Docker） 服务器具有固定公网 IP，让它担任公网中继器与网络引导节点。\n1. 开放防火墙端口 确保服务器系统防火墙与云服务商安全组放行 11010 端口：\nsudo ufw allow 11010/tcp sudo ufw allow 11010/udp sudo ufw reload 2. 容器化部署（启用 TUN 网卡模式） 为了让服务器自身也能拥有虚拟 IP 并作为内网节点直接被访问，容器需要挂载 /dev/net/tun 并赋予网络管理权限：\ndocker run -d \\ --name easytier-node \\ --restart unless-stopped \\ --net=host \\ --cap-add=NET_ADMIN \\ --device=/dev/net/tun \\ easytier/easytier:latest \\ --network-name \u0026#34;my-mesh-net\u0026#34; \\ --network-secret \u0026#34;YourStrongPassword\u0026#34; \\ --ipv4 \u0026#34;10.10.10.1/24\u0026#34; \\ -l tcp://0.0.0.0:11010 \\ -l udp://0.0.0.0:11010 参数说明：\n--net=host：共享主机网络栈，避免额外 NAT 层开销。 --cap-add=NET_ADMIN --device=/dev/net/tun：允许在宿主机内核中创建 tun0 虚拟网卡。 -l tcp://... -l udp://...：同时监听 TCP 与 UDP，方便外部客户端优先尝试 UDP 打洞，必要时自动回退到 TCP。 三、 客户端加入网络（以 Windows 客户端为例） 客户端可直接使用官方提供的桌面端应用（easytier-gui）：\n基本配置： 网络名称：my-mesh-net 网络密码：与服务器保持完全一致 虚拟 IPv4：手动指定（例如 10.10.10.89/24）或选择自动 DHCP 连接对端 (Peer)： 填写公网服务器节点地址：tcp://your-vps-ip:11010 点击连接： 客户端会自动在系统安装虚拟网卡并分配 IP。 四、 连通性测试与对端状态排查 进入云服务器，通过容器内置的 easytier-cli 工具查看网络拓扑：\ndocker exec easytier-node easytier-cli peer 节点状态输出示例： | ipv4 | hostname | cost | lat(ms) | loss | rx | tx | tunnel | NAT | version | |---------------|----------------|-------|---------|------|---------|---------|--------|----------------|---------| | 10.10.10.1/24 | relay-node | Local | - | - | - | - | - | PortRestricted | 2.6.4 | | 10.10.10.88/24| home-pc | p2p | 251.15 | 0.0% | 1.46 kB | 1.70 kB | tcp | Symmetric | 2.6.4 | | 10.10.10.89/24| workstation-pc | p2p | 216.13 | 0.0% | 1.77 kB | 1.88 kB | tcp | PortRestricted | 2.6.4 | cost 显示为 p2p：代表各客户端之间已成功完成 NAT 穿透打洞！后续大文件传输、RDP 远程桌面等高流量交互将全部在客户端间端对端直连传输，不占用云服务器的公网中继带宽。 双向连通性测试： # 在客户端测试 Ping 服务器虚拟 IP ping 10.10.10.1 # 在服务器端测试 Ping 客户端虚拟 IP ping 10.10.10.89 丢包率为 0%，双向隧道畅通无阻。 五、 安全加固与实用场景延伸 虚拟内网建立后，能够显著提升基础设施的安全性：\n1. SSH 仅限虚拟内网访问（公网彻底隐形） 在服务器公网防火墙上关闭对公网开放的 22 端口，仅允许在 EasyTier 网卡（tun0）上接受 SSH 连接：\n# 限制 SSH 仅接受 10.10.10.0/24 网段 sudo ufw allow in on tun0 to any port 22 proto tcp sudo ufw delete allow 22/tcp 公网上的网络扫描爬虫和暴力破解机器人将完全无法嗅探到该服务器的 SSH 服务端口。\n2. 本地快速别名配置 在开发机 ~/.ssh/config 中配置快捷直连：\nHost vps-internal HostName 10.10.10.1 User root 平时在终端输入 ssh vps-internal 即可一秒直达。\n总结 EasyTier 相比传统组网方案，极大地简化了部署难度，几乎可以在 5 分钟内完成全套搭建。 配合一台配置哪怕仅有 1核1G 的轻量 VPS，就能搭建属于自己的低延迟、去中心化安全私有网络。\n","permalink":"https://dhmay7.nya.je/posts/easytier-mesh-vpn-guide/","summary":"详细记录利用具有公网 IP 的 Linux 云服务器与 EasyTier，搭建全加密、低延迟去中心化 Mesh 虚拟局域网的全过程，解决异地设备互通与安全直连痛点。","title":"从公网中继到点对点直连：基于 EasyTier 搭建个人跨设备虚拟内网实战"}]