Простое ограничение скорости в .htaccess - PullRequest
0 голосов
/ 18 октября 2019

Допустим, у меня есть логин form:

<form action="index.php" method="post"><input type="password" name="pwd"><input type="submit" />

Я знаю, что правильное ограничение скорости должно быть сделано с iptables или fail2ban, но, не заходя так далеко, можем ли мысделайте что-нибудь простое, просто в .htaccess:

  • Ограничьте IP-адрес на 24 часа, если за последнюю минуту на эту страницу было> = 10 запросов

Может ли что-то подобное быть сделано только с .htaccess (или apache2.conf) и без какого-либо другого стороннего инструмента (модуль Apache в порядке)?

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Если вам действительно нужен способ «ограничить скорость» одного конкретного IP-адреса и вам нужен модуль Apache для него, то это может быть для вас:
https://wiki.debian.org/en/Apache/mod_evasive

mod_evasive - это модуль, который обнаруживает возможные шаблоны атак в сети, аналогичные IPS (системе предотвращения вторжений).
Базовое объяснение того, что делает IPS прямо здесь .

Чтобы настроить модуль, запустите

sudo apt-get install libapache2-mod-evasive 

Затем активируйте модуль с помощью

sudo a2enmod evasive 

Проверьте установку, запустив

 sudo apachectl -M | grep evasive

Ожидаемый вывод: evasive20_module (shared)
Теперь мы создаем новую папку для нашего модуля apache, чтобы он мог записывать логик нему.

sudo mkdir /var/log/mod_evasive
sudo chown www-data:root /var/log/mod_evasive 

Давайте отредактируем конфиг mod_evasive. Я использую nano для этого примера

sudo nano /etc/apache2/mods-available/evasive.conf

Обратите внимание: никогда не редактируйте конфигурацию модуля в / apache2 / mods-enabled / use / apache2 / mods-available / вместо этого. Приведенный выше пример верен.
Это пример конфигурации:

 <IfModule mod_evasive20.c> 
 DOSHashTableSize 3097 
 DOSPageCount 2 
 DOSSiteCount 50 
 DOSPageInterval 1 
 DOSSiteInterval 1 
 DOSBlockingPeriod 10 
 DOSEmailNotify email@yourdomain.com 
 DOSSystemCommand "echo +%s > /proc/net/xt_recent/badguys" or block them with iptables "su root -c '/sbin/iptables -A INPUT -s %s -j DROP'" ##command that will be sent to the system - %s = attackers ip
 DOSLogDir "/var/log/mod_evasive" 
 DOSWhitelist 127.0.0.1
 </IfModule>

Если вы хотите получать уведомления по электронной почте через sendmail, используйте

sudo ln -s /usr/bin/mail /bin/mail 


Наконец, просто перезапустите apache, используя

 sudo systemctl restart apache2


Чтобы ограничить модуль одним местоположением, используйте

<Directory /var/www/test/>
  <IfModule moduleLimitedToTest>
   ... do something with module
  </IfModule>
</Directory>

Подробнее о том, как использовать контейнеры, можно найти здесь . Вы можете поместить это в конфигурацию сайта / virtualhost. Это объясняется здесь .
Хотя я настоятельно рекомендую то же самое, что и Олаф Кок.

1 голос
/ 18 октября 2019

Я бы настоятельно рекомендовал не решать эту проблему на уровне, который вы предлагаете. Я бы предпочел перейти на прикладной уровень, потому что в конце концов это, скорее всего, неудачных попыток входа в систему, которые вы хотите ограничить.

И так как мы все еще страдаем от IPV4, а с ним NAT, вы не будете знать, сколько различных законных браузеров прячутся за одним IP-адресом.

При сбое приложение может запуститьfail2ban или iptables мероприятий. Однако во времена распределенных атак и бот-сетей я сомневаюсь, что это будет иметь большое значение. Прежде чем тратить много времени, я бы порекомендовал проверить журналы и выяснить, является ли это обычным (или, скорее, самым распространенным) путем атаки.

...