海外云服务器网站安全加固完整教程:ModSecurity WAF + fail2ban + WordPress 加固(2026最新版)

📅 · 海外云服务器自建服务教程 - ChengziCloud

一句话结论

Meta Description: 海外云服务器网站上线后必做的安全加固完整教程:fail2ban 全站防暴力破解(SSH+Nginx+WordPress)、自建 ModSecurity WAF + OWASP 核心规则集拦截注入与扫描、WordPress 深度加固(文件权限/隐藏版本/禁用XML-…

本文要点
  • 前言:网站上线后 24 小时内就会被扫描,安全加固是必修课
  • 服务器配置推荐与价格对比
  • 第一步:系统层基础加固(更新 + 普通用户 + SSH 密钥)
  • 第二步:fail2ban 全站防护(SSH + Nginx 认证 + WordPress 登录)
  • 第三步:自建 ModSecurity WAF + OWASP 核心规则集(拦注入和扫描)
  • 第四步:WordPress 深度加固(文件权限 + 隐藏版本 + 禁用 XML-RPC)
  • 第五步:Nginx 层安全配置(隐藏版本 + 安全响应头 + 敏感文件防护)
  • 第六步:自动化安全运维(定时体检 + 自动更新)

Meta Description: 海外云服务器网站上线后必做的安全加固完整教程:fail2ban 全站防暴力破解(SSH+Nginx+WordPress)、自建 ModSecurity WAF + OWASP 核心规则集拦截注入与扫描、WordPress 深度加固(文件权限/隐藏版本/禁用XML-RPC/登录限速)、Nginx 安全响应头与敏感文件防护,全部命令可直接复制执行,附服务器配置推荐与价格对比表。

关键词:海外云服务器安全加固、网站WAF、ModSecurity安装配置、fail2ban防暴力破解、WordPress安全加固、Nginx安全配置、网站被入侵怎么办、服务器防CC攻击

前言:网站上线后 24 小时内就会被扫描,安全加固是必修课

一句话回答:海外云服务器网站上线后,先做三层加固——系统层(更新+fail2ban 防暴力破解)→ 应用层(ModSecurity WAF 拦截注入和恶意扫描)→ 业务层(WordPress 等程序加固),再配一条自动化体检脚本,就能挡住 90% 以上的常见攻击。很多新手以为服务器安全是"大站才需要考虑的事",实际上公网 IP 被扫描机器人全天候探测:你的 SSH 端口每分钟都可能收到密码爆破尝试,网站只要上线,注入探测和目录扫描也会跟着来。本文按"系统 → WAF → 程序 → Nginx → 自动化"五条链路手把手加固,命令在 CentOS 7 和 Ubuntu 22.04 上都能直接复制执行,全程免费。

🚀 还没有海外云服务器?通过 5.chengzicloud.cloud 选购阿里云/AWS/腾讯云国际版,享专属折扣和中文技术支持。

服务器配置推荐与价格对比

安全加固对配置要求很低,主要吃的是 fail2ban 日志解析和 WAF 规则匹配的 CPU,1核1G 的小机器跑 Nginx + WordPress + ModSecurity 完全够用:

使用场景CPU/内存磁盘带宽参考月费建议安全配置
个人博客/轻量站1核1G20-40G SSD1-2TB$3-5fail2ban + 安全响应头
企业官网/商城2核2G40-80G SSD2-4TB$6-10fail2ban + ModSecurity WAF
高并发/高价值站2核4G+80G+ NVMe4TB+$12-20WAF + 日志审计 + 定期体检

如果网站是 WordPress 这类动态程序,建议直接选 2核2G 起步——WAF 开启后每个请求都要过规则集,CPU 余量留足体验才稳。主流海外云服务商对比如下(价格随促销浮动,以官网为准):

服务商月付年付(折扣后)数据中心优点
阿里云国际版 ECS$4.2$3.2/月新加坡/香港/硅谷中文面板、支持支付宝
AWS Lightsail$3.5$3.5/月全球20+区域新用户免费套餐、生态完善
腾讯云国际版 CVM$4.5$3.5/月香港/新加坡/东京低延迟到国内、微信支付
Vultr$6.0$6.0/月全球32个按小时计费、随时销毁
DigitalOcean$6.0$6.0/月全球14个文档最完善、社区教程多

💡 新手建议:选阿里云国际版或腾讯云国际版香港节点,延迟低、有中文面板,通过 5.chengzicloud.cloud 购买还可享额外折扣。

第一步:系统层基础加固(更新 + 普通用户 + SSH 密钥)

安全加固第一步永远是"让系统处于最新状态"。服务器刚到手时,先执行系统更新,把内核和软件包的安全补丁打上:


// Ubuntu 22.04
apt update && apt upgrade -y
apt install -y fail2ban ufw unattended-upgrades git

// CentOS 7
yum update -y
yum install -y epel-release
yum install -y fail2ban yum-cron git autoconf automake libtool gcc gcc-c++ make

接着创建普通用户并禁止 root 直接登录(详细 SSH 加固流程见文末延伸阅读的选购避坑指南,这里只给最小命令):


// 创建普通用户并加入 sudo 组(ubuntu 用 sudo,centos 用 wheel)
adduser deploy
usermod -aG sudo deploy

// 本地生成密钥对,把公钥上传到服务器
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
ssh-copy-id deploy@你的服务器IP

编辑 /etc/ssh/sshd_config 改三处:PermitRootLogin no、PasswordAuthentication no、PubkeyAuthentication yes,然后重启 SSH:


// Ubuntu 22.04
systemctl restart ssh

// CentOS 7
systemctl restart sshd

⚠️ 改完先开一个新终端用 deploy 用户测试能否登录,确认没问题再关掉旧连接,避免把自己锁在外面。

第二步:fail2ban 全站防护(SSH + Nginx 认证 + WordPress 登录)

fail2ban 的原理是监控日志文件,发现同一个 IP 在短时间内反复失败就自动封禁。默认配置只保护 SSH,我们要把它扩展成全站防护。先写配置文件:


cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 你的公网IP

[sshd]
enabled = true
port = ssh

[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log

[nginx-botsearch]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 3
EOF

nginx-http-auth 封的是反复输错网站后台密码的 IP(Nginx Basic Auth),nginx-botsearch 封的是用 404 探测网站目录结构的扫描器,3 次就封,非常狠。再为 WordPress 登录接口单独建一个过滤器:


cat > /etc/fail2ban/filter.d/wordpress-login.conf << 'EOF'
[Definition]
failregex = ^<HOST> .* "POST /wp-login\.php.* HTTP/.*" 4\d\d
ignoreregex =
EOF

cat >> /etc/fail2ban/jail.local << 'EOF'

[wordpress-login]
enabled = true
port = http,https
filter = wordpress-login
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 7200
EOF

这条规则会封掉短时间内反复向 wp-login.php 发起 POST 且返回 4xx 的 IP——正是暴力破解的特征。启动并验证:


systemctl enable fail2ban
systemctl restart fail2ban
fail2ban-client status
fail2ban-client status nginx-botsearch
fail2ban-client status wordpress-login

// 误封了用 unban 解封,查封禁情况用 banned
fail2ban-client unban 1.2.3.4
fail2ban-client set wordpress-login unbanip 1.2.3.4

第三步:自建 ModSecurity WAF + OWASP 核心规则集(拦注入和扫描)

ModSecurity 是目前最主流的开源 WAF,配合 OWASP 官方核心规则集(CRS),能自动拦截 SQL 注入、XSS、路径穿越、恶意扫描等上千种攻击模式。不想自建的话,可以直接用 Cloudflare 免费版自带的基础 WAF(接入教程见延伸阅读),想对请求做细粒度控制就按下面自建。整个过程需要编译,耗时 5-15 分钟。

3.1 编译安装 ModSecurity 核心库


// 下载并编译 ModSecurity 3(两条系统通用)
cd /usr/local/src
git clone --depth 1 -b v3.0.12 https://github.com/owasp-modsecurity/ModSecurity.git
cd ModSecurity
git submodule update --init --recursive
./build.sh
./configure
make -j$(nproc)
make install
ldconfig

3.2 编译 Nginx 动态模块(版本必须和服务器一致)


// 先确认已安装 nginx 的确切版本
nginx -v

// 下载同版本源码(下面以 1.24.0 为例,改成你服务器上 nginx -v 显示的版本号)
cd /usr/local/src
wget -q https://nginx.org/download/nginx-1.24.0.tar.gz
tar xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0

// --with-compat 保证模块与现有编译参数兼容
./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity
make modules
mkdir -p /etc/nginx/modules
cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules/

在 /etc/nginx/nginx.conf 最顶部(events 块之前)加一行加载模块,然后 nginx -t 验证:


load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;

⚠️ 如果报 module 版本不匹配,说明你下载的 nginx 源码版本和已安装的不一致,务必用 nginx -v 输出里的完整版本号重新下载。系统自带的 nginx 是带发行版补丁的(如 1.18.0 Ubuntu 版),建议先换成 nginx.org 官方源里的版本再编译。

3.3 配置 OWASP 核心规则集


// 放置主配置和规则集
mkdir -p /etc/nginx/modsecurity
cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsecurity/modsecurity.conf
cd /etc/nginx/modsecurity
git clone --depth 1 https://github.com/coreruleset/coreruleset.git crs
cp crs/crs-setup.conf.example crs-setup.conf

// 在 modsecurity.conf 末尾挂载规则集
echo "Include /etc/nginx/modsecurity/crs-setup.conf" >> /etc/nginx/modsecurity/modsecurity.conf
echo "Include /etc/nginx/modsecurity/crs/rules/*.conf" >> /etc/nginx/modsecurity/modsecurity.conf

官方推荐的 modsecurity.conf 默认就是 SecRuleEngine DetectionOnly(只记录不拦截),审计日志默认写在 /var/log/modsec_audit.log,无需改动——先这样观察 24-48 小时,确认没有大量误报后再开拦截。

3.4 在站点配置里开启 WAF

在网站的 server 块里加两行,然后重载 Nginx:


modsecurity on;
modsecurity_rules_file /etc/nginx/modsecurity/modsecurity.conf;

nginx -t && systemctl reload nginx

// 用典型的 SQL 注入 payload 测试(DetectionOnly 模式会记录但返回 200)
curl -s -o /dev/null -w "%{http_code}\n" "https://example.com/?id=1%20union%20select%201,2,3"

// 查看 WAF 审计日志,能看到命中规则 942100 等即说明 WAF 正常工作
tail -20 /var/log/modsec_audit.log

确认日志里有大量拦截记录且没有误伤正常访问后,把 modsecurity.conf 里的 SecRuleEngine DetectionOnly 改成 SecRuleEngine On,再 reload 一次,从此注入和恶意扫描请求直接返回 403:


sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /etc/nginx/modsecurity/modsecurity.conf
systemctl reload nginx

// 再次测试,输出 403 说明 WAF 已实际拦截
curl -s -o /dev/null -w "%{http_code}\n" "https://example.com/?id=1%20union%20select%201,2,3"

第四步:WordPress 深度加固(文件权限 + 隐藏版本 + 禁用 XML-RPC)

如果你的网站是 WordPress,除了 WAF 还要做程序层面的加固,这一步和文末的 WordPress 建站教程互补,专治"后台被爆破、文件被篡改、被当跳板"三类问题。先修文件权限——这是被黑后最常见的原因之一:


// 在 WordPress 网站根目录执行:目录 755、文件 644、wp-config.php 600
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 600 wp-config.php

再改 wp-config.php,打开文件把下面几项加上(盐值用官方生成器 https://api.wordpress.org/secret-key/1.1/salt/ 生成全新的一组):


define('DISALLOW_FILE_EDIT', true);
define('WP_DEBUG', false);

DISALLOW_FILE_EDIT 禁止后台编辑器直接改主题和插件文件——即使后台账号被盗,攻击者也无法写入木马。接着在主题的 functions.php 里加两行,隐藏 WordPress 版本号并移除 RSD 链接,降低被针对扫描的概率:


add_filter('the_generator', '__return_empty_string');
remove_action('wp_head', 'rsd_link');

WordPress 默认开启的 XML-RPC 是暴力破解的重灾区(可以一次请求尝试几百个密码),直接在 Nginx 站点配置里禁掉,同时给登录接口加限速:


limit_req_zone $binary_remote_addr zone=login:10m rate=3r/m;

server {
    ...
    location = /xmlrpc.php { deny all; }
    location = /wp-login.php {
        limit_req zone=login burst=5 nodelay;
    }
}

最后保持程序本身是最新版:后台出现更新提示就及时更新,或者用命令行一键更新:wp core update && wp plugin update --all。插件只装官方仓库的,长期不用的插件直接删除。

第五步:Nginx 层安全配置(隐藏版本 + 安全响应头 + 敏感文件防护)

在 server 块里加上面这段,隐藏 Nginx 版本号、给浏览器下发安全策略、禁止目录列表:


server_tokens off;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
autoindex off;

再挡掉常见的敏感文件和隐藏目录——.git 泄露源码、.env 泄露数据库密码、.sql 泄露数据备份,这些都是扫描器的最爱:


location ~* \.(git|env|sql|bak|conf|log|md)$ { return 403; }
location ~ /\. { deny all; }

保存后 nginx -t && systemctl reload nginx。用浏览器开发者工具或 curl 验证响应头:curl -sI https://example.com/,能看到 X-Frame-Options 等头说明配置生效,且 Server 头不再暴露完整版本号。

第六步:自动化安全运维(定时体检 + 自动更新)

加固是一次性的,安全是持续的。把两件自动化的事配好,日常基本不用操心。第一件是自动更新安全补丁:


// Ubuntu 22.04:自动安装安全更新
dpkg-reconfigure -plow unattended-upgrades

// CentOS 7:只自动更新安全相关软件包
sed -i 's/^update_cmd = default/update_cmd = security/' /etc/yum/yum-cron.conf
systemctl enable --now yum-cron

第二件是每日安全体检脚本,检查暴力破解尝试和 Nginx 错误日志,有异常就通过 Telegram 机器人推给你(机器人告警接入见延伸阅读的监控教程)。保存为 /root/sec-check.sh:


#!/bin/bash
// 每日体检:追加写入 /var/log/sec-check.log
echo "===== $(date '+%F %T') =====" >> /var/log/sec-check.log
// SSH 爆破尝试(CentOS 看 secure,Ubuntu 看 auth.log)
grep "Failed password" /var/log/secure 2>/dev/null | tail -3 >> /var/log/sec-check.log
grep "Failed password" /var/log/auth.log 2>/dev/null | tail -3 >> /var/log/sec-check.log
// Nginx 最近错误
tail -3 /var/log/nginx/error.log >> /var/log/sec-check.log
// fail2ban 封禁统计
fail2ban-client status nginx-botsearch 2>/dev/null | grep "Currently banned" >> /var/log/sec-check.log

然后 chmod +x /root/sec-check.sh,在 crontab 里加一行每天凌晨 3 点执行:crontab -e 后加入 0 3 * bash /root/sec-check.sh。再配合云厂商的快照功能每周打一次快照(备份容灾完整方案见延伸阅读),数据安全就闭环了。

常见问题 FAQ

  • Q: ModSecurity 开启后网站出现误杀(正常页面 403)怎么办?

A: 这是最常见的坑。先在审计日志里找到被误拦的请求:grep -B5 "403" /var/log/modsec_audit.log | tail -50,看命中哪条规则(如 942100 是 SQL 注入类)。如果是正常业务误伤,在 crs-setup.conf 里用 SecRuleRemoveById 排除该规则 ID,或把触发规则的关键字加入 SecRuleUpdateTargetById 白名单。所以强烈建议先跑 DetectionOnly 观察再开拦截。

  • Q: fail2ban 会不会把正常用户或我自己误封?

A: 正常访问不会触发(封的是"短时间内反复失败")。唯一要注意的是把 jail.local 的 ignoreip 加上你自己的公网 IP,这样无论怎么操作都不会封到自己。被误封了执行 fail2ban-client unban IP 立即解封。

  • Q: WordPress 已经被黑了怎么处理?

A: 三步:① 立即在控制台关停公网访问或改后台密码,防止损失扩大;② 用最近一次干净的快照回滚,或备份数据库和上传目录后重装 WordPress;③ 重装后立刻做本文的完整加固流程再上线。不要在被入侵的机器上继续排查,重装最干净。

  • Q: 用 Cloudflare 免费版是不是就不用自建 ModSecurity 了?

A: 两者互补:Cloudflare 免费版提供基础 DDoS 防护和托管 WAF 规则(在边缘拦截,不占服务器资源),ModSecurity 自建 WAF 可以做细粒度自定义规则、离线审计、完全不依赖第三方。推荐组合:Cloudflare 挡大流量攻击 + 自建 WAF 做业务层过滤 + fail2ban 防爆破,三层各司其职。

  • Q: 开启 WAF 和 fail2ban 后网站变慢了吗?

A: fail2ban 只做日志分析,对性能几乎零影响。ModSecurity 每个请求都要过规则集,会带来 5%-15% 的 CPU 开销,1核1G 跑 WordPress 建议用 DetectionOnly 或只对动态请求开 WAF(静态资源走 Cloudflare 缓存)。真觉得慢就升到 2核2G,性价比最高。

  • Q: 香港/新加坡的海外服务器也需要这些安全加固吗?

A: 需要,而且更必要——海外服务器的公网 IP 被全球扫描器探测的频率更高,绕备案的站也更容易成为攻击目标。安全加固和服务器所在地区无关,是上线前必做项。

  • Q: 这些加固配置重启服务器后会失效吗?

A: 不会。fail2ban 和 yum-cron 都注册成了 systemd 服务开机自启,Nginx 配置、ModSecurity 规则、文件权限都是落盘的,重启后全部保持。唯一要注意的是云厂商安全组(防火墙)在服务器外,不会因为重启改变。

总结

海外云服务器网站的安全没有银弹,但有标准答案:fail2ban 挡暴力破解、ModSecurity WAF 挡注入扫描、WordPress 加固挡后台沦陷、Nginx 安全头挡浏览器侧攻击、自动化脚本兜底持续防护,五层做完再配合每周快照,你的网站就具备了生产级的安全水位。整个流程不花一分钱,投入一小时,换来的是不用半夜爬起来处理被黑的服务器。安全加固和性能压测、监控告警、备份容灾一样,都是"上线前做一次、运行中自动跑"的长期投资——文末延伸阅读把这几块都补齐了。

🚀 想直接跳过选机踩坑?通过 5.chengzicloud.cloud 购买阿里云/AWS/腾讯云国际版服务器,全程中文支持,享专属折扣。

延伸阅读:

本文由 5.chengzicloud.cloud 提供,点击访问首页了解更多海外云服务器部署方案和专属优惠。