1

У меня есть веб-сервер lighttpd, который обеспечивает PHP-генерируемые веб-страницы. Этот сервер в настоящее время сталкивается с большим трафиком из-за атаки DDoS-ботов, и я ищу способ заблокировать или смягчить некоторые из них.

Насколько я знаю, lighttpd предлагает возможность блокировать запросы через удаленный IP-адрес, например, поставив

$HTTP["remoteip"] == "12.34.56.0/24" {
  url.access-deny = ( "" )
}

в lighttpd.conf все запросы из диапазона IP 12.34.56.0 - 12.34.56.255 будут заблокированы.

Однако из-за характера DDoS невозможно заблокировать отдельные IP-адреса или диапазоны, поскольку они меняются довольно часто.

Изучив журнал доступа, я обнаружил, что большинство запросов от ботов, похоже, используют более старый протокол HTTP/1.0, в то время как наиболее легитимный трафик использует HTTP/1.1.

Поэтому мой вопрос таков: есть ли способ блокировать / отклонять все запросы, поступающие через HTTP / 1.0 (и разрешать их через HTTP / 1.1) в lighttpd?

Я не смог найти такую возможность в официальной документации по настройке lighttpd.

Заметки:

  • Я знаю, что некоторый законный трафик может также использовать HTTP/1.0, но было бы хорошо, чтобы я тоже блокировал их.
  • Запросы ботов, похоже, не используют общий шаблон для пользовательских агентов или HTTP-ссылок, поэтому использование вариантов с шаблоном регулярного выражения, по-видимому, не вариант.

1 ответ1

1

Вместо того, чтобы дать решение для lighttpd , я бы порекомендовал вам использовать fail2ban, который присутствует во всех системах на основе Unix. Он отслеживает изменения в файлах журнала и анализирует их в соответствии с правилами регулярных выражений и в случае совпадения шаблона (HTTP/1.0 в вашем случае) заблокирует его на уровне брандмауэра системы, что более эффективно для блокировки нежелательных соединений.

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

iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 127 -j ACCEPT

Если вы все еще хотите заблокировать HTTP/1.0 на уровне lighttpd , попробуйте использовать протокол HTTP следующим образом:

env.SERVER_PROTOCOL == "HTTP/1.0" {
  url.access-deny = ( "" )
} 

(Решение не тестировалось, так как я давно перешел на nginx , но, возможно, это сработает.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .