Apache: Обмежити кількість запитів / трафіку на IP?


12

Я хотів би дозволити лише одному IP користуватися до, скажімо, 1 ГБ, трафіку на день, і якщо цей ліміт буде перевищено, усі запити з цього IP-адреси будуть відкинуті до наступного дня. Однак більш простого рішення, коли з'єднання припиняється після певної кількості запитів, буде достатньо.

Чи є вже якийсь модуль, який може це зробити? Чи, можливо, я можу досягти цього через щось на зразок iptables?

Спасибі


Версія Apache?
pehrs

2.2 - Заповнення ліміту символів--

Відповіді:


5

Якщо ви хочете отримати чисте рішення Apache, bw_mod для Apache 2.0 та mod_bandwidth для Apache 1.3. Вони можуть зменшити пропускну здатність вашого сервера, щоб обмежити використання пропускної здатності.

Існує також mod_limitipconn, який заважає одному користувачеві здійснювати безліч з'єднань з вашим сервером. mod_cband - це інший варіант, але я ніколи його не використовував.

Якщо ви не хочете возитися зі своєю установкою Apache, ви можете поставити проксі-кальмара перед Apache. Це дає вам більше контролю і над дроселюванням.

Однак у більшості випадків проблема полягає в декількох великих об'єктах, коли ви хочете обмежити пропускну здатність на один IP, і ви хочете дати повідомлення про помилку, якщо користувач витягує занадто багато даних, і ви блокуєте його. У такому випадку може бути простіше написати сценарій PHP та зберегти інформацію про доступ у тимчасовій таблиці в базі даних.


2
Дякуємо за пропозиції. Я вже розглядав bw_mod та mod_limitipconn, але ні (наскільки я можу сказати) не роблю те, що хочу. mod_limitipconn просто обмежує їх одним підключенням одночасно, а bw_mod дозволяє лише обмежувати швидкість завантаження на IP. Я хочу заблокувати їх після певної кількості передачі / запитів даних. Я насправді намагаюся захиститись від певних користувачів, які відчувають потребу сканувати весь мій сайт та завантажувати все. Я загляну в проксі-сервер кальмарів, це звучить цікаво. Якщо це не виходить, я думаю, я вдадуся до зміни джерела bw_mod.

Ви встановили robots.txt, щоб заборонити павуків?
pehrs

1
Проблема robots.txt полягає в тому, що (як і RFC 3514) поважають це лише приємні роботи.
Скотт Пак

Щоправда, але ви побачите, що більшість людей, які павуть ваш сайт, використовують стандартні інструменти. І багато з них, як wget, поважають robots.txt. Robots.txt також є правильним способом повідомити своїх користувачів, що ви не хочете, щоб вони павука.
pehrs

1
Я спробував це. Спочатку robots.txt було достатньо, потім вони сказали Wget проігнорувати robots.txt, тому я вдався до блокування "нерозпізнаних" користувальницьких агентів, але потім вони підробляли користувальницький агент. Вони, як правило, роблять багато головних запитів, тоді як законні веб-переглядачі цього не роблять, тому я можу розглянути обмеження головної запити або взагалі відключити його (менш бажано).

5

Це моє рішення iptables для подібного роду питань. Налаштуйте, --seconds --hitcountяк вам потрібно, також таблицю iptables.

iptables -A FORWARD -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 5 --name ATACK --rsource -j REJECT --reject-with icmp-port-unreachable
iptables -A FORWARD -d 192.168.0.113/32 -o eth1 -p tcp -m tcp --dport 80 -m recent --set --name ATACK --rsource -j ACCEPT

Пояснили:

  1. iptablesперевірте, чи вказаний джерело IP-файлу у файлі / proc / net / ipt_recent / ATACK протягом 5 або більше разів за інтервал 600 секунд і чи це НОВИЙ запит. Якщо це так, зробіть відхилення; ще

  2. iptables перевірте, чи запит призначений для порту 80. Якщо так, надрукуйте IP та часову позначку до / proc / net / ipt_recent / ATACK та переслати пакет.

Це добре працює для моїх потреб.


3

Ви подивилися на такий інструмент, як fail2ban? Якщо для вас це може бути важко, але це дозволить вам обмежити кількість запитів, дозволених будь-яким IP-адресом. Він працює, переглядаючи журнали, і ви встановлюєте правила, скільки дозволених порушень одночасно, тож для вас можуть бути запити на день. Після того, як вони перейдуть, це може робити такі речі, як блокувати їх за допомогою ipchains.

Я дуже успішно використовував для блокування DDoS-атак на поштовий сервер. Однак він може споживати значну потужність процесора.


поточний; y про те, щоб реалізувати це сам. Сподіваюся, що це працює
Dark Star1

1

спробуйте mod_dosevasiveабоmod_security

mod_dosevasive може бути налаштовано на заборону IP-адреси після заданого номера або запитів на сторінку на визначений часовий період

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.