Блокировать запросы в lighttpd с использованием HTTP / 1.0 и разрешать только HTTP / 1.1

418
Striezel

У меня есть веб-сервер 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
Alex

Вместо того, чтобы дать решение для 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давно перешел, но, скорее всего, оно может сработать.)

Похожие вопросы