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

Блокировать запросы в lighttpd, сделанные с HTTP/1.0, и разрешить только HTTP/1.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

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

Связанный контент