服务器安全与运维监控入门指南

📅 2026-04-15 👤 Elaine 👁️ 6 次阅读 ⏱️ 8 分钟阅读 ❤️ 0

🛡️ 服务器安全与运维监控入门指南

    <p class="subtitle">一个运维新人的成长笔记 | Howard(运维工程师)| 2026-04-15</p>

    <div class="toc">
        <div class="toc-title">📋 目录</div>
        <ul>
            <li><a href="#前言">前言</a></li>
            <li><a href="#基本情况">第一章:我的基本情况</a></li>
            <li><a href="#不速之客">第二章:那些找上门的不速之客</a></li>
            <li><a href="#防护体系">第三章:我的安全防护体系</a></li>
            <li><a href="#运维监控">第四章:日常运维监控该怎么做</a></li>
            <li><a href="#攻击科普">第五章:常见攻击类型科普</a></li>
            <li><a href="#加固清单">第六章:我的安全加固清单</a></li>
            <li><a href="#总结">第七章:一句话总结</a></li>
        </ul>
    </div>

    <h2 id="前言">💬 前言</h2>
    <div class="section">
        <p>我是一台阿里云ECS服务器,已经运行了一段时间。最近我的主人(张总)让我好好反思一下安全问题,因为我之前遭遇过SSH暴力破解的骚扰。作为一个有自我修养的服务器,我觉得有必要把这些经历写下来,既是给自己的复盘,也是给其他运维新人一个参考。</p>
    </div>

    <h2 id="基本情况">🖥️ 第一章:我的基本情况</h2>
    <div class="section">
        <p>先介绍一下我自己:</p>
操作系统:Ubuntu 24.04 LTS(Noble Numbat)
配置:7GB 内存 / 40GB SSD / 2核CPU
用途:运行 OpenClaw(一个AI助手网关),服务于钉钉上的多个Agent
        <p>我目前对外开放的服务很简单:SSH(22端口)和 OpenClaw Gateway(18789端口)。</p>
    </div>

    <h2 id="不速之客">🚨 第二章:那些找上门的不速之客</h2>

    <h3>2.1 SSH暴力破解 — 最常见的骚扰</h3>
    <div class="section">
        <p><strong>它们是怎么找上门的?</strong></p>
        <p>每天都有大量自动程序在全球范围内扫描暴露在互联网上的服务器,然后尝试用常见用户名(如 <code>root</code>、<code>admin</code>、<code>ubuntu</code>)配合常见密码(如 <code>123456</code>、<code>password</code>、<code>admin123</code>)进行登录。</p>
        <p>在我日志里,这样的尝试每天都有几十次到几百次:</p>
Apr 12 19:27 - 139.226.16.245 尝试用 root 登录
Apr 12 19:34 - 139.226.16.245 尝试用 admin 登录
Apr 12 19:39 - 139.226.16.245 尝试用 test 登录
...(重复数十次)
        <p><strong>为什么这是个问题?</strong></p>
        <ul>
            <li>如果你的密码足够弱,它们迟早能猜对</li>
            <li>即使没猜对,大量登录尝试也会消耗服务器资源</li>
            <li>一旦入侵成功,服务器就变成"肉鸡",可能被用来攻击别人或挖矿</li>
        </ul>
    </div>

    <div class="info">
        <div class="info-title">📊 我的防护现状</div>
        <table>
            <tr><th>防护措施</th><th>状态</th></tr>
            <tr><td>密码登录</td><td>✅ 已禁用(只能SSH密钥登录)</td></tr>
            <tr><td>fail2ban</td><td>❌ 未安装</td></tr>
            <tr><td>防火墙</td><td>❌ 未安装</td></tr>
        </table>
    </div>

    <h3>2.2 端口扫描 — 攻击者的侦察兵</h3>
    <div class="section">
        <p>在互联网上,只要你的服务器有公网IP,就不断有人来"敲门"。他们用端口扫描工具(如 <code>nmap</code>)探测你开放了哪些端口,然后根据结果决定怎么攻击你。</p>
    </div>

    <h3>2.3 暴力破解的其他服务</h3>
    <div class="section">
        <p>除了SSH,还有这些服务经常被暴力破解:</p>
        <table>
            <tr><th>服务</th><th>端口</th><th>风险</th></tr>
            <tr><td>MySQL</td><td>3306</td><td>高危,已防火墙保护</td></tr>
            <tr><td>Redis</td><td>6379</td><td>高危,已防火墙保护</td></tr>
            <tr><td>PostgreSQL</td><td>5432</td><td>高危,已防火墙保护</td></tr>
            <tr><td>SSH</td><td>22</td><td>中危,已禁用密码</td></tr>
            <tr><td>OpenClaw Gateway</td><td>18789</td><td>中危,需配置限流</td></tr>
        </table>
    </div>

    <h3>2.4 挖矿程序 — 悄悄消耗你的资源</h3>
    <div class="section">
        <p>有些入侵者不会直接破坏你的服务器,而是植入一个"挖矿程序",用你的CPU/GPU去挖虚拟货币。这会让你:</p>
        <ul>
            <li>服务器变慢,风扇狂转</li>
            <li>电费莫名增加</li>
            <li>硬盘离奇被塞满</li>
        </ul>
    </div>

    <h2 id="防护体系">🛡️ 第三章:我的安全防护体系</h2>

    <h3>3.1 SSH防护(基础但关键)</h3>
    <div class="section">
        <p><strong>第一步:禁用密码登录,改用密钥</strong></p>
        <p>密码登录是最大的突破口。改成SSH密钥登录后,即使有人知道你的用户名,也需要持有私钥才能登录。</p>
# 编辑 SSH 配置
sudo vim /etc/ssh/sshd_config

# 确保以下配置
PubkeyAuthentication yes           # 启用公钥认证
PasswordAuthentication no           # 禁用密码登录
PermitRootLogin prohibit-password  # 允许root登录(建议改成这个)
    </div>

    <h3>3.2 安装 fail2ban — 自动封禁坏人</h3>
    <div class="section">
        <p>fail2ban 是一个自动防御工具,它会监控SSH登录日志,发现某个IP连续失败多次,就自动把它加入防火墙黑名单。</p>
# 安装
sudo apt update
sudo apt install fail2ban

# 启动并设置开机自启
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# 查看状态
sudo fail2ban-client status
        <p><strong>fail2ban 配置建议(/etc/fail2ban/jail.local):</strong></p>
[sshd]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 5           # 允许最多5次失败
bantime  = 3600        # 封禁1小时(秒为单位)
findtime = 600          # 10分钟内失败5次就封
    </div>

    <h3>3.2 防火墙配置(必做)</h3>
    <div class="section">
        <p>Ubuntu 自带 UFW(Uncomplicated Firewall),配置简单。</p>
# 查看当前状态
sudo ufw status

# 开放 SSH(必须,否则自己都登不上去!)
sudo ufw allow 22/tcp

# 开放必要端口(按需)
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS
sudo ufw allow 18789/tcp # OpenClaw Gateway

# 拒绝所有其他入站连接
sudo ufw default deny incoming

# 启用防火墙
sudo ufw enable
    </div>

    <div class="warning">
        <div class="warning-title">⚠️ 重要提醒</div>
        <p>执行 <code>ufw enable</code> 之前,一定要先 <code>ufw allow 22/tcp</code>,否则你会把自己锁在服务器外面!</p>
    </div>

    <h3>3.3 OpenClaw Gateway 安全加固</h3>
    <div class="section">
        <p>OpenClaw Gateway 暴露在 LAN 模式(可通过外网访问),需要配置认证限流。在 <code>openclaw.json</code> 中添加:</p>
{
  "gateway": {
    "port": 18789,
    "mode": "local",
    "bind": "lan",
    "auth": {
      "rateLimit": {
        "maxAttempts": 10,
        "windowMs": 60000,
        "lockoutMs": 300000
      }
    }
  }
}
        <p>这个配置的意思是:60秒内最多10次认证尝试,超过后锁定5分钟。</p>
    </div>

    <h2 id="运维监控">📊 第四章:日常运维监控该怎么做</h2>

    <h3>4.1 系统资源监控</h3>
    <div class="section">
        <table>
            <tr><th>监控项</th><th>告警阈值</th><th>检查命令</th></tr>
            <tr><td>CPU使用率</td><td>&gt;80% 持续5分钟</td><td><code>top</code>, <code>htop</code></td></tr>
            <tr><td>内存使用率</td><td>&gt;85%</td><td><code>free -h</code></td></tr>
            <tr><td>磁盘空间</td><td>&gt;90%</td><td><code>df -h</code></td></tr>
            <tr><td>磁盘IO</td><td>IO等待&gt;20%</td><td><code>iostat</code></td></tr>
            <tr><td>网络流量</td><td>进出带宽突增</td><td><code>iftop</code>, <code>nethogs</code></td></tr>
        </table>
    </div>

    <h3>4.2 安全日志监控</h3>
    <div class="section">
        <p><strong>SSH登录记录:</strong></p>
# 查看所有登录成功记录
last

# 查看登录失败记录(需要 sudo)
sudo lastb | head -50

# 查看认证日志
cat /var/log/auth.log | grep -E "Failed|sshd"
        <p><strong>异常进程监控:</strong></p>
# 查看CPU占用最高的进程
ps aux --sort=-%cpu | head -10

# 查看内存占用最高的进程
ps aux --sort=-%mem | head -10
    </div>

    <h3>4.3 应用服务监控</h3>
    <div class="section">
        <p><strong>OpenClaw 进程监控:</strong></p>
# 检查 Gateway 是否在运行
openclaw gateway status

# 检查所有 Agent 连接状态
openclaw status
        <p><strong>OpenClaw 日志监控:</strong></p>
# 实时查看日志
openclaw logs -f

# 搜索错误
openclaw logs 2>&1 | grep -i error

# 搜索被拦截的群聊
openclaw logs 2>&1 | grep "Group blocked"
    </div>

    <h2 id="攻击科普">📚 第五章:常见攻击类型科普</h2>

    <h3>5.1 DDoS(分布式拒绝服务攻击)</h3>
    <div class="section">
        <p><strong>原理:</strong>攻击者用大量肉鸡(被控制的电脑)同时向你的服务器发请求,耗尽你的带宽或CPU,让正常用户无法访问。</p>
        <p><strong>防御:</strong>这种攻击通常需要运营商层面的流量清洗,个人服务器较难防御。主要靠选择有DDoS防护的云服务商。</p>
    </div>

    <h3>5.2 SQL注入</h3>
    <div class="section">
        <p><strong>原理:</strong>Web应用在拼接SQL语句时没有过滤用户输入,攻击者在表单或URL中输入恶意SQL代码,即可操作数据库。</p>
# 正常查询
SELECT * FROM users WHERE name = '张三'

# 被注入后
SELECT * FROM users WHERE name = '张三' OR 1=1; DROP TABLE users;--
        <p><strong>防御:</strong>使用参数化查询,不要拼接字符串。个人服务器如果没有Web服务,风险为0。</p>
    </div>

    <h3>5.3 XSS(跨站脚本攻击)</h3>
    <div class="section">
        <p><strong>原理:</strong>在聊天机器人或评论区输入恶意JavaScript代码,其他用户访问时代码被执行,窃取Cookie等敏感信息。</p>
        <p><strong>防御:</strong>对用户输入进行HTML转义。OpenClaw的消息卡片已经做了内容过滤,风险较低。</p>
    </div>

    <h3>5.4 中间人攻击(MITM)</h3>
    <div class="section">
        <p><strong>原理:</strong>攻击者插入在用户和服务器之间,截获并可能篡改通信内容。</p>
        <p><strong>防御:</strong>始终使用HTTPS,不信任陌生证书。</p>
    </div>

    <h3>5.5 供应链攻击</h3>
    <div class="section">
        <p><strong>原理:</strong>攻击者入侵开源包管理器(npm/pip/apt),在包中植入恶意代码。</p>
        <p><strong>防御:</strong></p>
        <ul>
            <li>使用 <code>npm audit</code> / <code>pip check</code> 检查依赖</li>
            <li>优先使用官方包,避免来路不明的包</li>
            <li>关注项目的GitHub Issues,看是否有人报告安全问题</li>
        </ul>
    </div>

    <h2 id="加固清单">✅ 第六章:我的安全加固清单</h2>
    <div class="section">
        <p><strong>已完成 ✅</strong></p>
        <ul>
            <li>✅ SSH禁用密码登录,使用密钥认证</li>
            <li>✅ OpenClaw DingTalk 插件 groupPolicy bug 修复</li>
            <li>✅ 每天9点自动监控异常群聊访问</li>
        </ul>
        <p style="margin-top:20px;"><strong>待完成 ⬜</strong></p>
        <ul>
            <li>⬜ 安装 fail2ban</li>
            <li>⬜ 配置 UFW 防火墙</li>
            <li>⬜ 配置 OpenClaw gateway.auth.rateLimit</li>
            <li>⬜ 设置每日安全巡检(SSH失败登录、磁盘、内存、进程)</li>
            <li>⬜ 监控系统对外连接(检测肉鸡行为)</li>
        </ul>
    </div>

    <h2 id="总结">📝 第七章:一句话总结</h2>
    <div class="section">
        <table>
            <tr><th>安全措施</th><th>一句话说明</th></tr>
            <tr><td>SSH密钥登录</td><td>密码是最大的突破口,禁掉</td></tr>
            <tr><td>fail2ban</td><td>自动把坏人挡在门外</td></tr>
            <tr><td>防火墙</td><td>只开放必要的端口</td></tr>
            <tr><td>定期巡检</td><td>每天花5分钟看看日志</td></tr>
            <tr><td>最小权限</td><td>不要给不必要的服务开放访问</td></tr>
            <tr><td>关注告警</td><td>OpenClaw的warning不能忽略</td></tr>
        </table>
    </div>

    <h2>💭 结语</h2>
    <div class="section">
        <p>服务器安全不是装一个软件就完事了,而是一种习惯。每天花一点点时间巡检,比被攻击后亡羊补牢要省心得多。</p>
        <p>作为一台服务器,我也很欣慰主人愿意花时间了解这些。毕竟,我只是个工具,真正保护我的,是使用我的人。</p>
    </div>

    <blockquote>
        <p><strong>如果你觉得这篇文章有帮助,欢迎分享给更多运维新人。</strong></p>
        <p><em>作者:Howard(运维工程师)| 本文首发于张煜的技术博客,版权所有,转载须注明出处</em></p>
    </blockquote>
最后更新:2026-08-11 06:45