DDoS 攻击旨在耗尽服务器资源,使网站无法访问。以下是一套从基础到进阶的 WordPress 防护策略。
一、基础防御(立即实施)
1. 启用 Web 应用防火墙(WAF)
- Cloudflare(推荐免费版)
- 注册 Cloudflare,更改 DNS 服务器
- 开启“Under Attack”模式(I’m Under Attack Mode)
- 设置安全级别为“高”
- 启用“Browser Integrity Check”
# 额外防护:限制直接访问真实 IP if ($http_cf_connecting_ip = "") { return 403; } - Sucuri 或 Wordfence(插件方案)
- 安装后启用防火墙和速率限制
2. 服务器层面配置
# 限制连接频率(Nginx 示例)
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_req zone=one burst=20 nodelay;
limit_conn addr 10;
}
# 保护 wp-login.php
location = /wp-login.php {
limit_req zone=one burst=5 nodelay;
limit_conn addr 3;
}
# 保护 XML-RPC
location = /xmlrpc.php {
deny all; # 或 limit_req zone=one burst=2;
}
}
}
3. WordPress 插件配置
// 在 wp-config.php 中添加
define('WP_CACHE', true); // 启用缓存
define('DISALLOW_FILE_EDIT', true); // 禁用文件编辑
define('FORCE_SSL_ADMIN', true); // 强制 SSL
二、高级防护策略
1. 登录安全强化
// 重命名登录页面(functions.php)
function rename_login_page() {
if (!is_user_logged_in()) {
if ($_SERVER['REQUEST_URI'] == '/wp-login.php') {
wp_redirect(home_url('/404'));
exit;
}
}
}
add_action('init', 'rename_login_page');
2. 验证码和两步验证
- reCAPTCHA v3 集成
- Wordfence Login Security 启用两步验证
- 限制登录尝试次数
// 限制登录尝试
add_filter('authenticate', 'check_login_attempts', 30, 3);
function check_login_attempts($user, $username, $password) {
$transient_name = 'login_attempts_' . $_SERVER['REMOTE_ADDR'];
$attempts = get_transient($transient_name) ?: 0;
if ($attempts > 5) {
return new WP_Error('too_many_attempts', '请稍后再试');
}
if (is_wp_error($user)) {
set_transient($transient_name, $attempts + 1, 3600);
}
return $user;
}
3. API 和 REST 端点保护
// 禁用不必要的 REST API
add_filter('rest_authentication_errors', function($result) {
if (!empty($result)) return $result;
if (!is_user_logged_in()) {
return new WP_Error('rest_not_logged_in', '需要登录', array('status' => 401));
}
return $result;
});
三、服务器优化
1. 反向代理配置
# 限制请求大小和超时
client_body_timeout 10;
client_header_timeout 10;
client_max_body_size 10M;
keepalive_timeout 5 5;
send_timeout 10;
2. 数据库优化
-- 清理修订和垃圾数据
DELETE FROM wp_posts WHERE post_type = 'revision';
DELETE FROM wp_comments WHERE comment_approved = 'spam';
OPTIMIZE TABLE wp_posts, wp_comments, wp_options;
3. PHP 配置优化
; php.ini 设置
max_execution_time = 30
max_input_time = 30
memory_limit = 256M
max_input_vars = 1000
; 禁用危险函数
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
四、监控和响应
1. 实时监控工具
- UptimeRobot 或 StatusCake:监控可用性
- Loggly 或 Papertrail:集中日志
- Netdata:服务器性能监控
2. 自动化脚本
#!/bin/bash
# 自动封禁异常 IP
LOG_FILE="/var/log/nginx/access.log"
THRESHOLD=100
BLOCK_TIME=3600
# 分析访问频率
tail -5000 $LOG_FILE | awk '{print $1}' | sort | uniq -c | sort -nr | while read count ip; do
if [ $count -gt $THRESHOLD ]; then
iptables -A INPUT -s $ip -j DROP
echo "$(date) 封禁 IP: $ip ($count 次请求)" >> /var/log/ddos.log
fi
done
3. 应急响应清单
- 立即行动:
- 启用 Cloudflare “Under Attack” 模式
- 切换到静态缓存页面
- 联系主机商启用 DDoS 防护
- 中期处理:
- 分析日志确定攻击类型
- 批量封禁恶意 IP 段
- 启用验证码全局验证
- 长期加固:
- 部署多 CDN 策略
- 建立高可用架构
- 定期进行压力测试
五、高级架构方案
1. 多云/CDN 策略
用户 → Cloudflare → AWS CloudFront → 源站服务器
↳ Fastly (备用)
↳ 自建 CDN (极端情况)
2. 静态化策略
// 攻击时切换为静态页
add_action('template_redirect', 'emergency_static_mode');
function emergency_static_mode() {
if (file_exists(ABSPATH . 'emergency.html') && !is_user_logged_in()) {
include(ABSPATH . 'emergency.html');
exit;
}
}
3. 数据库读写分离
// wp-config.php
define('DB_HOST', 'write-server:3306');
define('DB_READ_HOST', 'read-replica:3306');
// 查询分离
function use_db_replica($query) {
if (strpos($query, 'SELECT') === 0) {
$GLOBALS['wpdb']->dbh = $replica_connection;
}
}
六、推荐工具栈
| 防护层面 | 推荐工具 | 成本 |
|---|---|---|
| CDN/WAF | Cloudflare Pro | $20/月 |
| 主机防护 | Sucuri Firewall | $199/年 |
| 插件防护 | Wordfence Premium | $99/年 |
| 监控 | UptimeRobot + Loggly | 免费-$49/月 |
| 服务器 | AWS Shield Advanced | $3000/月起 |
七、测试你的防护
# 使用工具测试(合法测试自己的网站)
siege -c 100 -t 1M https://yourdomain.com
ab -n 1000 -c 100 https://yourdomain.com/
# 监控效果
tail -f /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c
关键要点
- 分层防御:不要依赖单一防护层
- 缓存为王:尽可能缓存静态内容
- 最小化暴露:关闭不必要的服务和端口
- 持续监控:设置警报,快速响应
- 应急预案:提前准备好应急方案
记住:100% 防护 DDoS 是不可能的,目标是提高攻击成本,确保核心服务可用。小型攻击(<10 Gbps)可通过上述方案有效防护,大规模攻击需要专业 DDoS 防护服务。


湘公网安备43020002000238