Назад | Перейти на главную страницу

Как я могу предотвратить одновременные подключения с одного IP?

Я веду сайт Wordpress на цифровой капле океана, и капля работает под управлением CentOS с CWP. Веб-сайт новый, поэтому у него очень мало реального трафика, в среднем около 3-5 посетителей в день. Однако последние пару недель сайт находится под атакой.

Я почти ежедневно получаю уведомление по электронной почте от lfd service, про "Чрезмерно запущенный процесс под пользователем XYZ". Сразу после этого второе письмо с заголовком «Предупреждение о высокой 5-минутной средней нагрузке».

Образец строки из первого электронного письма: (последнее уведомление по электронной почте содержит около 143 количество процессов со статусом не убит)

User:XYZ PID:29096 PPID:26959 Run Time:58(secs) Memory:230140(kb) RSS:10104(kb) exe:/usr/local/bin/php-cgi cmd:/usr/local/bin/php-cgi /home/XYZ/public_html/wp-login.php

Второй электронная почта содержит вывод различных команд ps.txt, vnstat.txt, netstat.txt, apachestatus.html

В последнем электронном письме с уведомлением содержится ошибка во всех файлах, кроме apachestatus.html. Сообщение об ошибке: «Невозможно получить выходные данные SERVICE_NAME в течение 10 секунд - истекло время».

в apachestatus файл, я вижу 243 незанятые темы на wp-login.php из один IP.

Мои вопросы:

  1. В какое время по умолчанию разрываются неактивные соединения?
  2. Есть ли способ сбросить неактивные соединения быстрее этого? (возможно, время по умолчанию хорошее, но в моем случае это все еще вызывает проблемы, поэтому я хочу еще больше уменьшить его)
  3. Как я могу ограничить одновременные запросы с определенного IP? (чтобы ограничить лимит открытых подключений 10 или, может быть, 20)
  4. Как лучше всего справиться с этим и защитить сервер от атак такого типа? (любой соответствующий инструмент или методика)

Приведенное ниже - действительно просто ответ на ваш комментарий / вопрос о Fail2Ban - я не смог ответить достаточно подробно в качестве комментария.

Для использования fail2ban требуются не только базовые параметры. Вот мой "секретный соус"

apache-wplogin.conf:

# Fail2Ban configuration file
#
# Author: Tim Connors
# Tweeked by David Go
#

[Definition]

# Option:  failregex
# Notes.:  Regexp to catch Apache dictionary attacks on Wrodpress wp-login
# Values:  TEXT
#
#failregex = <HOST>.*] "POST /wp-login.php


#failregex = :80 <HOST> -.*"(GET|POST).*/wp-login.php
#            :443 <HOST> -.*"(GET|POST).*/wp-login.php

failregex = :80 <HOST> -.*(GET|POST).*/wp-login.php.*(HTTP)
            :443 <HOST> -.*(GET|POST).*/wp-login.php.*(HTTP)

apache-wpxmlrpc.conf

[Definition]

# Option:  failregex
# Notes.:  Regexp to catch xmlrpc attacks on Wordpress
# Values:  TEXT
#

 failregex = :80 <HOST>\ -.*(GET|POST).*/xmlrpc\.php.*(HTTP)
            :443 <HOST>\ -.*(GET|POST).*/xmlrpc\.php.*(HTTP)

Дополнительные строки в jail.local для вышеуказанного:

# Short term lockout for Wordpress Brute Force
[apache-wplogin]
logpath = /var/log/apache2/other_vhosts_access.log
maxretry = 8
bantime = 300
findtime = 300
enabled = true

Обратите внимание, что мой Apache регистрируется в "комбинированном" формате вне директив VirtualHost - у меня есть строки конфигурации:

# Define an access log for VirtualHosts that don't define their own logfile

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined    
CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined