Ubuntu 16.04. Apache2. Установка модуля mod_qos

Задача: блокировка ip при превышении определённого количества запросов за заданное время (секунд, минут).

Установка libapache2-mod-qos через репозиторий

apt install libapache2-mod-qos

Включение модуля

a2enmod qos

но после этого, правила, добавленные по инструкции не заработали, пришлось устанавливать последнюю версию из исходных кодов

Установка mod_qos из исходных кодов

Установка дополнительных библиотек и утилит

apt install libpcre3-dev automake autoconf libtool libssl-dev libcrypto++-dev zlib1g-dev libpng-dev

Сборка mod_qos.so

wget https://netcologne.dl.sourceforge.net/project/mod-qos/mod_qos-11.58.tar.gz
tar xvfpz mod_qos-11.58.tar.gz
cd mod_qos-11.58/apache2
apxs -i -c mod_qos.c -lcrypto -lpcre

Сборка support tools

cd mod_qos-11.58/tools
./configure
make

после выполнения make возможно вылезет ошибка, предлагающая выполнить команду

automake --add-missing

и после этого ещё раз make

Копирование mod_qos.so в каталог модулей apache

cp mod_qos-11.58/apache2/.libs/mod_qos.so /usr/lib/apache2/modules/

В /etc/apache2/mods-available/ создаём конфиги:

qos.load

LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so

qos.conf


	# Лимит 5 запросов за 10 секунд
	QS_ClientEventLimitCount 6 10 SlowRequest
	SetEnvIf              Request_URI / SlowRequest=1
	SetEnvIf              Request_URI .*\.(jpg)|(jpeg)|(gif)|(png)|(js)|(css)|(ico)$ !SlowRequest
	SetEnvIf              Request_URI .*\.(eot)|(svg)|(ttf)|(woff)|(woff2)$ !SlowRequest
	
	# запретить IP-адрес клиента в течение 30 минут (1800 сек), если он нарушает правило 3 раза:
	QS_ClientEventLimitCount          3 1800 SlowRepeatedlySlow
	QS_SetEnvIf      SlowRequest_Counter=6 SlowRepeatedlySlow=1

Проверка конфига и рестарт апача

apachectl configtest
service apache2 restart

В результате этого конфига:
1) после 5 запросов (кроме перечисленных расширений) за 10 секунд ip будет заблокирован до истечения этого времени (10 секунд), будет выдаваться 500 ошибка.
2) в случае повторения этой блокировки 3 раза, ip будет заблокирован на 30 минут.

http://mod-qos.sourceforge.net/index.html
http://mod-qos.sourceforge.net/dos.html
https://www.opennet.ru/tips/info/2308.shtml
https://www.askapache.com/htaccess/setenvif/
http://httpd.apache.org/docs/current/mod/mod_setenvif.html#setenvif