1.
概述与准备工作
说明目标与环境;准备一台美国机房的VPS,OS 假设为 Ubuntu 22.04;确保有 root 或 sudo 权限;开放端口:SSH(22)仅限你IP,监控端口(Prometheus 9090、Grafana 3000、node_exporter 9100)建议使用防火墙或内网VPN限制。备份重要数据并记录 VPS 提供商的控制台访问方法。
2.
安装基础监控:node_exporter(主机指标)
步骤:1) 下载并解压官方二进制:wget https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-*.linux-amd64.tar.gz && tar xzf ...; 2) 创建 systemd 服务文件 /etc/systemd/system/node_exporter.service,内容参考ExecStart=/usr/local/bin/node_exporter; 3) 启动并开机启用:systemctl daemon-reload && systemctl enable --now node_exporter; 验证:curl http://localhost:9100/metrics。
3.
部署指标收集:Prometheus
步骤:1) 安装 Prometheus(二进制或容器),将 node_exporter 加入 scrape_configs:job_name: 'node' static_configs: - targets: ['localhost:9100']; 2) 配置持久化磁盘路径 /var/lib/prometheus;3) 启动并确认:http://VPS:9090/targets 显示 UP;4) 配置基本抓取间隔 scrape_interval: 15s。
4.
可视化与告警:Grafana 与 Alertmanager
Grafana:apt install grafana 或 docker run;导入主机监控 dashboard(ID 1860 等);Alertmanager:安装并与 Prometheus 通信,Prometheus.yml 中 alerting: alertmanagers: - static_configs: - targets: ['localhost:9093']; 创建告警规则 files: - 'rules/host_alerts.yml'(示例:CPU>90% 5m 发告警)。
5.
日志收集:Filebeat/Fluentd 到 Elasticsearch 或 Loki
选择:ELK(Elasticsearch+Logstash+Kibana)或 Grafana Loki + Promtail。实际步骤(以 Filebeat->Elasticsearch 为例):1) apt install filebeat;2) 编辑 /etc/filebeat/filebeat.yml,add prospectors 指向 /var/log/auth.log,/var/log/syslog,/var/log/nginx/*;3) 启用并启动 filebeat;4) 在 Kibana 中创建仪表盘,建立关键日志搜索(如 sudo 重复失败、SSH 登录异常)。
6.
主机入侵检测:AIDE 文件完整性监控
安装与初始化:apt install aide;初始化 db:aideinit && mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db; 定期运行:在 /etc/cron.daily/ 写脚本 /usr/bin/aide --check 并将输出通过 mailx 或日志发送到监控系统;若变更未授权,触发告警。
7.
审计与系统调用监控:auditd 配置
安装:apt install auditd audispd-plugins;常用规则写入 /etc/audit/rules.d/audit.rules,例如监控 /etc/passwd、/etc/sudoers:-w /etc/passwd -p wa -k passwd_changes;重启 auditd 并通过 ausearch /aureport 查找异常;将 audit 日志转发到集中日志以便告警。
8.
登录与暴力破解防护:fail2ban 与 SSH 硬化
安装并配置 fail2ban:apt install fail2ban;在 /etc/fail2ban/jail.local 添加 [sshd] enabled = true bantime = 3600 maxretry = 5;同时禁用密码登录,使用密钥并限制允许用户:/etc/ssh/sshd_config 设置 PermitRootLogin no, PasswordAuthentication no, AllowUsers youruser。
9.
网络行为监控:连接/端口与异常流量检测
步骤与工具:1) 使用 netstat/ss/conntrack 定时抓取连接快照(脚本 crontab 每分钟);2) 使用 iptables/ufw 日志记录被拒绝连接,/var/log/ufw.log 收集到集中日志;3) 如需深度包检测,可部署 Suricata 或 Zeek 并将告警推送到 ELK/Loki。
10.
自动化响应与恢复:脚本化与 webhook 告警
设计流程:1) 在 Alertmanager 中设置 receiver(email/Slack/webhook);2) 编写自动化脚本(例:当高CPU进程异常时,脚本收集 top、ps、lsof,并尝试重启服务或杀进程);3) 将脚本作为 webhook 在告警触发时调用,并在脚本内限制执行频率与白名单。
11.
安全与隐私注意事项
要点:1) 对监控界面启用 HTTPS(自签或 Let’s Encrypt);2) Grafana/Prometheus 启用基本认证或反向代理;3) 最小化日志中敏感信息,遵守美国合规与提供商政策,避免将机密通过第三方传输。
12.
测试、演练与维护
建议步骤:1) 定期进行故障注入(如停止服务、制造高CPU、模仿SSH爆破)验证告警流程;2) 编写运行手册(runbook),每条告警对应处理步骤与负责人;3) 定期更新监控规则与白名单,清理陈旧报警。
13.
问:如何快速确认 VPS 是否被滥用(例如发起大量外联)?
答:先使用 ss -tunp 或 netstat -plant 列出高连接数进程;查看 lsof -i 来定位可疑二进制;检查 /var/log/auth.log 和 web/nginx 日志是否有异常请求;在 Prometheus/Grafana 查看出网连接、TCP ESTABLISHED 数量与带宽突增的时间线,若确认可疑,临时封禁相关进程或通过 iptables 阻断目的IP。
14.
问:如何让告警不产生大量误报?
答:采取多层过滤:设置合理的阈值与持续时间(如 CPU>90% 持续5分钟);在 Prometheus 规则中使用 for: 指定持续时间;将多信号组合(CPU+网络+日志异常)做为告警条件;使用抑制(silence)与抑制策略避免重复告警,并在规则中排除已知维护时间。
15.
问:对抗投诉或滥用时,监控还应关注哪些法律合规点?
答:保持日志可追溯但避免保存过长时间的敏感个人数据;遵守服务商条款与美国当地法律(如存储与传输加密要求);在遇到投诉时保留相关证据(时间戳、日志、快照),并在必要时配合提供商或执法,但事先咨询法律顾问以保障合规性。
来源:如何在美国防投诉vps 上建立监控体系及时发现异常行为