1) 目标环境说明:越南CN2 VPS通常带宽为100Mbps至1Gbps,常见cpu 2核、内存2GB、磁盘30GB的商业实例。
2) 安全目标:保证SSH/面向互联网服务可用性、记录攻击溯源、实现日志异地备份与增量恢复。
3) 常见威胁:暴力破解、端口扫描、TCP/UDP放大DDoS、应用层WEB攻击。
4) 合规性要求:保留防火墙日志至少30天,备份策略满足7天快速恢复制和90天归档。
5) 本文架构:防火墙规则→本地日志→远程收集→压缩/去重备份→恢复演练。
1) 日志粒度选择:对DROP/REJECT记录关键字段(时间、源IP、目的端口、策略名)。例如日志前缀"FW_DROP"。
2) 日志位置:将防火墙日志写入独立文件,如/var/log/firewall.log,方便rotate与收集。
3) 限流与降噪:对日志使用rate-limit(如iptables limit模块:--limit 5/min)避免日志风暴。
4) 与syslog集成:通过rsyslog规则将kernel/iptables日志重定向到/var/log/firewall.log。示例::msg, contains, "FW_DROP" -/var/log/firewall.log。
5) retention策略:本地保留7天,远程备份保留90天,保存重要事件(如10Gbps攻击快照)长期归档。
1) iptables基础规则示例(保存输出):
iptables-save | grep -E 'ACCEPT|DROP|LOG' --color=never
2) 推荐规则片段(iptables)示例:
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 22 -m recent --set --name SSH
-A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 6 --name SSH -j DROP
3) 记录拒绝流量(带前缀):
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "FW_DROP: " --log-level 4
4) nftables等价示例:
nft add rule inet filter input ct state established,related accept
nft add rule inet filter input tcp dport 22 ct count over 6/60s drop
5) 生效与保存命令:
iptables-save >/etc/iptables/rules.v4 或 nft list ruleset >/etc/nftables.conf,并在启动脚本恢复。
1) rsyslog示例配置片段(/etc/rsyslog.d/30-firewall.conf):
:msg, contains, "FW_DROP" -/var/log/firewall.log
& stop
2) 远程收集:启用模板并发送TCP到日志服务器(TCP+TLS推荐),示例:
'*.* @@logs.example.com:6514;RSYSLOG_ForwardFormat'
3) 日志轮转(logrotate)示例(/etc/logrotate.d/firewall):
/var/log/firewall.log { daily rotate 30 compress delaycompress missingok notifempty copytruncate }
4) 数据示例(典型一天量与保留策略):下表展示3天样例日志量(MB/天)和保留设置。
| 日志文件 | 日均量(MB) | 保留天数 | 备注 |
|---|---|---|---|
| /var/log/auth.log | 12 | 30 | SSH 登录/失败 |
| /var/log/firewall.log | 85 | 90(远程) | 防火墙拒绝/记录 |
| /var/log/nginx/access.log | 250 | 14 | 应用层流量 |
1) 备份分层:云端快照(每周)、增量文件备份(日)、关键配置即时备份(每小时)。保留策略:7/30/90。
2) rsync 增量例子(带带宽限制):
rsync -aAX --delete --bwlimit=8000 /etc/ root@backup.example.com:/backups/vps/configs/
3) borg 备份示例(去重压缩,示例脚本):
borg init --encryption=repokey /data/backup-repo
borg create --stats /data/backup-repo::'{hostname}-{now:%Y-%m-%d}' /var/www /etc
4) prune 策略示例:保留7个每日、4个每周、12个每月:
borg prune -v --keep-daily=7 --keep-weekly=4 --keep-monthly=12 /data/backup-repo
5) rclone 到对象存储(示例带加密):
rclone sync /var/backups remote:bucket/vps --transfers=4 --checkers=8 --bwlimit 10M
6) 安排cron任务:示例crontab:
0 2 * * * /usr/local/bin/backup_daily.sh >/var/log/backup_daily.log 2>&1
1) 恢复演练频率:每月一次全量恢复演练,验证镜像/文件系统一致性与服务可用性。
2) 恢复示例命令(rsync恢复):
rsync -aAX root@backup.example.com:/backups/vps/configs/ /etc/
3) borg 恢复示例:
borg extract /data/backup-repo::hostname-2025-05-01
4) 校验与sha256:备份文件加入sha256校验表,恢复后自动比对。示例:sha256sum -c checksums.sha256
5) 告警集成:使用Prometheus node_exporter + Alertmanager或Zabbix,设置阈值:日志增长速率>500MB/5min触发报警,磁盘使用>80%报警,备份失败连续2次报警。
1) 案例背景:某电商客户越南CN2 VPS(带宽500Mbps)在促销期间遭遇UDP放大攻击,峰值约10Gbps,持续12小时。
2) 初步响应:立即启用ISP临时nullroute,应用iptables速率限制并将防火墙日志转发到外部日志服务器。关键命令示例:
iptables -A INPUT -p udp -m limit --limit 10/second -j LOG --log-prefix "DDoS:"
3) 日志处理:本地日志从平时85MB/天飙升到120GB/天,团队立刻启用远程收集并在日志服务器端启用采样与索引(Elasticsearch+Filebeat),减轻VPS磁盘压力。
4) 备份调整:将当日备份策略从完整备份改为仅备份关键配置与数据库binlog,使用borg进行去重压缩,节省网络带宽与存储。
5) 结果与教训:通过速率限制+ISP协助,服务在3小时内恢复基本可用;日志远程化避免了VPS本地磁盘耗尽;建议长期保留远程备份并建立SLA响应流程。