海外服务器安全加固清单:24项安全检查与配置实战(2026最新版)
Meta Description: 海外云服务器安全加固实战清单:SSH密钥认证、防火墙iptables/nftables、fail2ban入侵防御、Auditd审计日志、自动备份策略、内核参数加固。
- 前言
- SSH 安全加固(第 1-6 项)
- 系统用户与权限加固(第 7-10 项)
- 防火墙与网络安全(第 11-15 项)
- 入侵检测与日志审计(第 16-19 项)
- 自动备份(第 20-22 项)
- 内核与容器安全(第 23-24 项)
- 七大云厂商安全组功能对比
Meta Description: 海外云服务器安全加固实战清单:SSH密钥认证、防火墙iptables/nftables、fail2ban入侵防御、Auditd审计日志、自动备份策略、内核参数加固。24项逐条检查,附完整命令与配置模板。
关键词:服务器安全加固、SSH安全配置、防火墙规则、入侵检测、审计日志、自动备份、海外服务器
前言
部署一台海外云服务器后,30分钟内就会被全球扫描器盯上。根据 Cloudflare 2026 年安全报告,一台未加固的 Linux 服务器平均在 上线后 12 分钟 就会收到第一次 SSH 暴力破解尝试。如果你用的是默认 22 端口 + 密码登录,运气不好的话 48 小时内就会被攻破。
本清单覆盖 24 项安全检查,分为六大类:SSH 加固、系统用户与权限、防火墙与网络、入侵检测与日志审计、自动备份、内核与容器安全。每一项都给出现状检查命令、加固命令、以及验证方法。全部执行完毕约需 30 分钟。
一、SSH 安全加固(第 1-6 项)
SSH 是服务器的第一道门。绝大多数入侵都是从 SSH 弱密码开始的。
✅ 第 1 项:禁用 root 直接 SSH 登录
检查现状:
grep "^PermitRootLogin" /etc/ssh/sshd_config
加固:
sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
systemctl restart sshd
验证: 尝试 ssh root@你的服务器IP,应提示 Permission denied。日常操作使用普通用户 + sudo。
✅ 第 2 项:改用 SSH 密钥认证,禁用密码登录
先生成本地密钥对(在你的电脑上执行):
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/server_key
将公钥上传到服务器:
ssh-copy-id -i ~/.ssh/server_key.pub user@你的服务器IP
服务器端禁用密码登录:
sed -i 's/^#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
⚠️ 注意: 先确认密钥能正常登录,再禁用密码。否则你会把自己锁在外面。
✅ 第 3 项:修改 SSH 默认端口
检查现状:
grep "^Port" /etc/ssh/sshd_config
加固(改为 2222 或其他非标准端口):
sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config
semanage port -a -t ssh_port_t -p tcp 2222 2>/dev/null # CentOS/RHEL SELinux
systemctl restart sshd
验证:
ssh -p 2222 user@你的服务器IP
修改端口后,暴力扫描器的流量会减少 95% 以上——大多数扫描器只扫 22 端口。
✅ 第 4 项:配置 SSH 空闲超时
防止运维人员登录后忘记退出,会话长期挂起:
cat >> /etc/ssh/sshd_config << 'EOF'
// SSH 空闲超时(300秒无操作自动断开)
ClientAliveInterval 300
ClientAliveCountMax 0
EOF
systemctl restart sshd
✅ 第 5 项:限制可 SSH 登录的用户白名单
只允许指定的运维账户 SSH 登录:
echo "AllowUsers deploy opsuser" >> /etc/ssh/sshd_config
systemctl restart sshd
验证: 用不在白名单中的用户尝试 SSH,应被拒绝。
✅ 第 6 项:安装并配置 fail2ban 防暴力破解
// Ubuntu/Debian
apt install -y fail2ban
// CentOS/RHEL
yum install -y epel-release && yum install -y fail2ban
// 创建本地配置(覆盖默认值)
cat > /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600
EOF
systemctl enable fail2ban && systemctl restart fail2ban
检查封禁列表:
fail2ban-client status sshd
二、系统用户与权限加固(第 7-10 项)
✅ 第 7 项:禁用不必要的系统账户
// 列出所有可登录的用户
awk -F: '($7 ~ /\/bin\/.*sh/) {print $1}' /etc/passwd
// 锁定不需要登录的账户(保留系统服务账户)
passwd -l games
passwd -l ftp
passwd -l nobody
✅ 第 8 项:加强密码策略(针对可登录用户)
// CentOS/RHEL
sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs
sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 7/' /etc/login.defs
sed -i 's/^PASS_MIN_LEN.*/PASS_MIN_LEN 12/' /etc/login.defs
sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 14/' /etc/login.defs
✅ 第 9 项:配置 sudo 日志记录
cat >> /etc/sudoers.d/logging << 'EOF'
Defaults logfile=/var/log/sudo.log
Defaults log_input,log_output
Defaults !syslog
EOF
效果: 所有 sudo 执行的命令及其输出都会被记录到 /var/log/sudo.log。
✅ 第 10 项:锁定关键系统文件防止篡改
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow
chattr +i /etc/ssh/sshd_config
解除锁定(需要修改时):
chattr -i /etc/ssh/sshd_config
三、防火墙与网络安全(第 11-15 项)
✅ 第 11 项:启用并配置 iptables / nftables
Ubuntu/Debian(使用 ufw):
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp // SSH
ufw allow 80/tcp // HTTP
ufw allow 443/tcp // HTTPS
ufw enable
ufw status verbose
CentOS/RHEL(使用 firewalld):
systemctl start firewalld && systemctl enable firewalld
firewall-cmd --permanent --add-service=ssh --add-port=2222/tcp
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload
firewall-cmd --list-all
✅ 第 12 项:关闭不必要的网络服务
// 查看所有监听端口
ss -tlnp
// 常见要关闭的服务
systemctl disable --now rpcbind
systemctl disable --now rpcbind.socket
systemctl disable --now avahi-daemon
systemctl disable --now cups
✅ 第 13 项:配置内核网络参数防 DDoS 与 IP 欺骗
cat >> /etc/sysctl.d/99-security.conf << 'EOF'
// 防止 SYN Flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
// 防止 IP 欺骗
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
// 忽略 ICMP 重定向
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
// 防止 IP 源路由
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
// 记录可疑包
net.ipv4.conf.all.log_martians = 1
// 减少 TIME_WAIT
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
EOF
sysctl -p /etc/sysctl.d/99-security.conf
✅ 第 14 项:配置速率限制(rate limiting)
限制单个 IP 的 SSH 连接频率:
// iptables 方式
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
✅ 第 15 项:禁用 ICMP 广播响应
echo "net.ipv4.icmp_echo_ignore_broadcasts = 1" >> /etc/sysctl.d/99-security.conf
echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" >> /etc/sysctl.d/99-security.conf
sysctl -p /etc/sysctl.d/99-security.conf
四、入侵检测与日志审计(第 16-19 项)
✅ 第 16 项:安装并配置 Auditd(Linux 审计系统)
// CentOS/RHEL
yum install -y audit
// Ubuntu/Debian
apt install -y auditd
systemctl enable auditd && systemctl start auditd
配置关键文件监控:
cat >> /etc/audit/rules.d/security.rules << 'EOF'
// 监控 /etc/passwd 和 /etc/shadow 的修改
-w /etc/passwd -p wa -k identity_changes
-w /etc/shadow -p wa -k identity_changes
-w /etc/group -p wa -k identity_changes
// 监控 sudo 配置文件
-w /etc/sudoers -p wa -k sudo_changes
-w /etc/sudoers.d/ -p wa -k sudo_changes
// 监控 SSH 配置
-w /etc/ssh/sshd_config -p wa -k ssh_config_changes
// 监控 root 用户操作
-a always,exit -F arch=b64 -F euid=0 -F auid>=1000 -F auid!=unset -S execve -k root_commands
// 时钟修改
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
EOF
augenrules --load
systemctl restart auditd
查询审计日志:
// 查看最近的 root 用户命令
ausearch -k root_commands --format text | tail -20
// 查看 /etc/passwd 的修改记录
ausearch -k identity_changes --format text
✅ 第 17 项:配置 rsyslog 集中日志
// 确认 rsyslog 正在运行
systemctl status rsyslog
// 增加详细日志
cat >> /etc/rsyslog.d/50-security.conf << 'EOF'
// 记录所有认证相关日志到独立文件
auth.* /var/log/auth-security.log
// 记录所有内核日志
kern.* /var/log/kern-security.log
EOF
systemctl restart rsyslog
✅ 第 18 项:安装并配置 AIDE 文件完整性检测
// CentOS/RHEL
yum install -y aide
// Ubuntu/Debian
apt install -y aide
// 初始化数据库
aide --init
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
// 创建每天检查的 cron 任务
cat > /etc/cron.daily/aide-check << 'EOF'
#!/bin/bash
/usr/sbin/aide --check | mail -s "AIDE Daily Check $(hostname)" [email protected]
EOF
chmod +x /etc/cron.daily/aide-check
✅ 第 19 项:监控异常登录(lastb + 自定义脚本)
// 查看所有失败的登录尝试
lastb | head -20
// 查看成功登录记录
last -20
// 创建登录告警脚本
cat > /usr/local/bin/login-alert.sh << 'EOF'
#!/bin/bash
tail -f /var/log/auth-security.log | while read line; do
echo "$line" | grep "Accepted" && \
echo "ALERT: New SSH login detected on $(hostname)" | \
mail -s "SSH Login Alert" [email protected]
done &
EOF
五、自动备份(第 20-22 项)
✅ 第 20 项:配置数据库自动备份(MySQL/PostgreSQL)
MySQL/MariaDB:
cat > /usr/local/bin/db-backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=30
mkdir -p $BACKUP_DIR
// 备份所有数据库
mysqldump --all-databases --single-transaction --quick \
--lock-tables=false > $BACKUP_DIR/all-db-$DATE.sql
// 压缩
gzip $BACKUP_DIR/all-db-$DATE.sql
// 删除 30 天前的备份
find $BACKUP_DIR -name "*.gz" -mtime +$RETENTION_DAYS -delete
echo "Backup completed: all-db-$DATE.sql.gz"
EOF
chmod +x /usr/local/bin/db-backup.sh
添加 cron 任务(每天凌晨 3 点备份):
echo "0 3 * * * /usr/local/bin/db-backup.sh >> /var/log/db-backup.log 2>&1" | crontab -
✅ 第 21 项:配置文件与网站目录备份
cat > /usr/local/bin/file-backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/files"
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
// 备份关键配置目录
tar czf $BACKUP_DIR/etc-$DATE.tar.gz /etc/nginx /etc/ssh /etc/fail2ban
// 备份网站目录(根据实际路径调整)
tar czf $BACKUP_DIR/www-$DATE.tar.gz /var/www
// 保留最近 7 天的备份
find $BACKUP_DIR -mtime +7 -delete
echo "File backup completed: $DATE"
EOF
chmod +x /usr/local/bin/file-backup.sh
echo "0 2 * * * /usr/local/bin/file-backup.sh >> /var/log/file-backup.log 2>&1" | crontab -
✅ 第 22 项:异地备份同步(rsync 到另一台服务器或对象存储)
同步到 AWS S3:
// 安装 AWS CLI
apt install -y awscli // 或 yum install -y awscli
// 配置凭证
aws configure
// 同步脚本
cat > /usr/local/bin/s3-sync-backup.sh << 'EOF'
#!/bin/bash
aws s3 sync /backup/ s3://your-bucket-name/server-backups/ --storage-class STANDARD_IA
echo "S3 sync completed at $(date)"
EOF
chmod +x /usr/local/bin/s3-sync-backup.sh
echo "0 5 * * * /usr/local/bin/s3-sync-backup.sh >> /var/log/s3-sync.log 2>&1" | crontab -
六、内核与容器安全(第 23-24 项)
✅ 第 23 项:启用 SELinux(CentOS/RHEL)或 AppArmor(Ubuntu)
CentOS/RHEL:
// 查看当前 SELinux 状态
getenforce
// 设置为 enforcing 模式
sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config
setenforce 1
// 查看 SELinux 阻止的操作
ausearch -m avc --start recent
Ubuntu(AppArmor):
aa-status
aa-enforce /etc/apparmor.d/*
✅ 第 24 项:容器运行时安全(Docker 加固)
基础检查:
// Docker 版本(确保不是过时有已知漏洞的版本)
docker version
// 检查是否有容器以 privileged 模式运行
docker ps --quiet | xargs docker inspect --format '{{.Name}}: Privileged={{.HostConfig.Privileged}}'
加固措施:
// 创建 Docker daemon 安全配置
cat > /etc/docker/daemon.json << 'EOF'
{
"icc": false,
"log-level": "info",
"userland-proxy": false,
"no-new-privileges": true,
"live-restore": true
}
EOF
systemctl restart docker
容器运行最佳实践(以 Nginx 为例):
docker run -d \
--name nginx-secure \
--read-only \
--tmpfs /var/cache/nginx \
--tmpfs /var/run \
--security-opt=no-new-privileges:true \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
--memory=256m \
--cpus=0.5 \
nginx:alpine
参数说明:
--read-only:容器文件系统只读--cap-drop=ALL:丢弃所有 Linux capabilities--cap-add=NET_BIND_SERVICE:仅保留绑定端口的能力--memory / --cpus:资源限制防止单个容器耗尽宿主机资源
七大云厂商安全组功能对比
不同云平台在安全组规则数量、默认策略、VPC 集成等方面差异显著。以下是实际生产环境对比:
| 功能项 | AWS Security Group | 阿里云安全组 | 腾讯云安全组 | GCP Firewall | Azure NSG |
|---|---|---|---|---|---|
| 默认入站策略 | 全部拒绝 | 全部拒绝 | 全部拒绝 | 全部拒绝 | 全部拒绝 |
| 默认出站策略 | 全部允许 | 全部允许 | 全部允许 | 全部允许 | 全部允许 |
| 单组规则上限 | 60条(可申请提升) | 200条 | 200条 | 无明确限制 | 1000条 |
| 有状态连接跟踪 | ✅ 自动 | ✅ 自动 | ✅ 自动 | ✅ 自动 | ✅ 自动 |
| 跨 VPC 引用 | ✅ 安全组 ID | ✅ 安全组 ID | ❌ 仅 IP/CIDR | ✅ 服务账户 | ✅ 服务标签 |
| CLI / API 管理 | aws ec2 | aliyun ecs | tccli vpc | gcloud compute | az network nsg |
| Terraform 支持 | ✅ 完善 | ✅ 完善 | ✅ 完善 | ✅ 完善 | ✅ 完善 |
安全检查自动化脚本
将上述 24 项检查整合为一条命令即可执行的脚本:
cat > /usr/local/bin/security-audit.sh << 'AUDIT_SCRIPT'
#!/bin/bash
echo "========== 服务器安全审计 =========="
echo "时间: $(date)"
echo "主机: $(hostname)"
echo ""
// 1. SSH 配置
echo "[1/6] SSH 安全配置检查"
echo " PermitRootLogin: $(grep '^PermitRootLogin' /etc/ssh/sshd_config | tail -1)"
echo " PasswordAuth: $(grep '^PasswordAuth' /etc/ssh/sshd_config | tail -1)"
echo " Port: $(grep '^Port' /etc/ssh/sshd_config | tail -1)"
// 2. 防火墙
echo "[2/6] 防火墙状态"
which ufw >/dev/null 2>&1 && ufw status | head -3
which firewalld >/dev/null 2>&1 && firewall-cmd --state
which iptables >/dev/null 2>&1 && iptables -L -n | head -10
// 3. 开放端口
echo "[3/6] 监听端口"
ss -tlnp | grep LISTEN
// 4. 失败登录
echo "[4/6] 最近失败登录"
lastb 2>/dev/null | head -5
// 5. 磁盘
echo "[5/6] 磁盘使用"
df -h | grep -vE 'tmpfs|devtmpfs'
// 6. 备份
echo "[6/6] 最近备份"
find /backup/ -type f -mtime -1 2>/dev/null | head -5
echo "========== 审计完成 =========="
AUDIT_SCRIPT
chmod +x /usr/local/bin/security-audit.sh
运行 security-audit.sh 即可获得一份完整的安全态势报告。
加固前后效果对比
| 指标 | 加固前 | 加固后 |
|---|---|---|
| SSH 暴力破解尝试(24小时) | 8000+ 次 | 0 次(端口变更 + fail2ban) |
| 陌生 IP 成功登录 | 可能发生 | 不可能(仅密钥 + 白名单) |
| 可疑进程发现 | 依赖手动 ps | Auditd 实时记录 |
| 数据丢失风险 | 无备份 | 每日自动备份 + 异地同步 |
| 被全球扫描器发现 | 上线 12 分钟内 | 仅开放必要端口 |
| 合规审计准备 | 无 | 完整日志链路 |
云厂商安全服务对比(Web 应用防火墙)
除了服务器自身加固,云厂商提供的 WAF 也是重要防线:
| 功能维度 | AWS WAF | 阿里云 WAF | Cloudflare WAF |
|---|---|---|---|
| 部署位置 | CloudFront / ALB | 域名接入 | 全球边缘节点 |
| OWASP Top 10 防护 | ✅ 托管规则 | ✅ 内置规则集 | ✅ 内置 + 自定义 |
| CC 攻击防护 | 需配合 Shield | ✅ 频率控制 | ✅ Rate Limiting |
| Bot 管理 | ✅ Bot Control | ✅ 爬虫风险管理 | ✅ Bot Management |
| 最低月费(USD) | $5/ACL + 按请求计费 | $141(企业版起步) | $0(Free 计划含基础 WAF) |
| DDoS 基础防护 | Shield Standard(免费) | 默认 5Gbps | Free 计划不限量 |
总结
安全不是一次性配置,而是一个持续的过程。这 24 项检查覆盖了从 SSH 入口到日志审计的完整链路,全部执行完毕约需 30 分钟,却能让你的服务器从「被攻破只是时间问题」变成「攻击者绕道走」。
建议每周运行一次 security-audit.sh 检查,每月更新一次 fail2ban 规则,每季度做一次完整的渗透测试验证。
🛡️ 企业出海需要专业的安全合规架构?通过 7.chengzicloud.cloud 联系我们,获取专属云安全方案——从安全加固到合规审计,一站式覆盖。
本文由 7.chengzicloud.cloud 提供,点击访问首页了解更多企业级云架构与安全方案。
常见问题(FAQ)
我只有一台服务器,需要做全部 24 项吗?
起步阶段至少完成第 1-3 项(SSH 配置)、第 11 项(防火墙)、第 16 项(审计)。这三项覆盖了 80% 的攻击面。业务上线后逐步补全其余项。
修改 SSH 端口后,云平台的安全组需要同步吗?
需要!如果使用云平台安全组(AWS Security Group / 阿里云安全组),必须在安全组中放行新端口(如 2222),同时可以删除 22 端口规则。
SELinux 启用后我的网站打不开了怎么办?
先用 ausearch -m avc --start recent 查看被阻止的操作,然后针对性地通过 audit2allow 生成策略模块。不建议直接 setenforce 0 关闭。
fail2ban 和云平台安全组有什么区别?
fail2ban 在 OS 层面通过 iptables 封禁 IP,反应时间为分钟级。云安全组在网络边界拦截,但通常是静态规则。两者互补——安全组做白名单,fail2ban 做动态封禁。
备份需要存到哪里?
建议「本地 + 异地」双副本:每日本地备份保留 7 天,异地同步到对象存储(AWS S3 / 阿里云 OSS / Cloudflare R2)。对象存储默认 11 个 9 的持久性,远高于单台服务器。
加固后性能会下降吗?
影响极小。Auditd 在高 I/O 场景下可能有 1-3% 的 CPU 开销,但远小于被入侵后的损失。防火墙规则几乎无开销。