Photo by Possessed Photography
Protection against DDoS attacks

Советы по защите сайта на WordPress от DDoS-атак без использования дополнительных сервисов

11.08.25

DDoS-атаки остаются одной из самых распространённых угроз для сайтов на WordPress. Даже если вы не готовы подключать внешние платные сервисы, то минимизировать последствия атаки и повысить устойчивость проекта можно с помощью встроенных и серверных решений.

Базовые меры на уровне WordPress

Начнём с базового уровня, часто о нём забывают. Думаю, нет смысла говорить, но всё же: всегда поддерживайте актуальность самой CMS и плагинов.

Второе, отключите xmlrpc.php, если не используете внешние приложения, так как через xmlrpc часто проводят DDoS с помощью pingback.

<Files xmlrpc.php>
   Order deny,allow
   Deny from all
</Files>

Третье, запретите доступ к wp-login.php, например, через файл .htaccess или Nginx (в зависимости от того что используете) введя ограничения по IP:

Nginx:

location ~ ^/wp-login.php {
    allow 1.2.3.4; #Ваш IP
    deny all;
    error_page 403 forbidden.html;
}

Apache:

<Files wp-login.php>
    Order Deny,Allow
    Deny from all
    Allow from 1.2.3.4 #ваш IP
</Files>

Ограничения по IP могут быть очень неудобными, например, если у вас много пользователей админпанели и все они на динамических IP-адресах или вы сами работаете из разных мест. Вместо ограничения по IP можно установить fai2ban и настроить на блокировку IP-адресов после 3 — 5 неудачных попыток.

Это не совсем про DDoS, но все же сильно снижает нагрузку на сервер убирая бесконечные запросы от желающих забрутфорсить вашу админку.

Четвертое, Nginx умеет очень быстро выдавать статический контент и если правильно настроить кеширование, то ваш сайт сможет справиться с очень серьёзной нагрузкой и его будет крайне тяжело задедосить.

Лимитирование запросов (rate limiting)

Настройте ограничения количества запросов на уровне сервера для каждого IP-адреса в короткий промежуток времени. В Nginx это делается директивой limit_req, в Apache — mod_ratelimit.

# Пример для Nginx
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

server {
    location / {
        limit_req zone=mylimit burst=20 nodelay;
    }
}

Это очень эффективная мера, которая позволит отбрасывать подозрительных посетителей ещё до загрузки WordPress. Главное, не переусердствуйте с настройками, помните про параллельные загрузки.

Кроме того, можно «прикрутить» тот же fail2ban на 503 ошибку и IP-адреса атакующих будут блокироваться на уровне firewall (его надо обязательно настроить!).

Геоблокировка

Если ваш сайт ориентирован на определённый регион, заблокируйте неактуальные страны на уровне сервера. Это сильно сузит возможности DDoS-атак на ваш сайт!

Сделать это можно с помощью всё того же Nginx’а, собранного с http_geoip_module (проверить можно nginx -V ). Если это так, то нужен ещё geoip-модуль: sudo apt-get install nginx-module-geoip или sudo yum install nginx-module-geoip в зависимости от вашей ОС.

Далее, настройте Nginx, пример:

http {
    # Файл с базой IP (может быть в другом месте)
    geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $allowed_country {
        default no;
        CN yes; # Allow China
        RU yes; # Allow Russia
    }

    server {
        listen 80;
        location / {
            if ($allowed_country = no) {
                return 403; # Forbidden
            }
            # ... 
        }
    }
}

Можно выбрать обратную политику, разрешить по-умолчанию все страны: default yes, а запрещать определенные CN no, например.

В качестве заключения

Даже без специализированных DDoS-сервисов можно существенно повысить устойчивость WordPress-сайта к массовым атакам. Главное — быть внимательным к деталям, следить за обновлениями и грамотно настроить сервер.

Регулярно проверяйте логи, блокируйте доступ к административной панели и не игнорируйте основы грамотной серверной архитектуры. Такой подход на практике способен выдержать большинство DDoS-атак и позволит вам не платить за дорогие прокси фильтры!