Я натрапив на ситуацію, коли клієнту потрібно вносити в чорний список набір трохи менше 1 мільйона окремих IP-адрес (без підмереж), а продуктивність мережі викликає занепокоєння. Хоча я здогадуюсь, що правила IPTables матимуть менший вплив на продуктивність, ніж маршрути, це лише припущення.
Хтось має якісь вагомі докази чи інші обґрунтування на користь або IPTables або нульової маршрутизації як рішення для чорного списку довгих списків IP-адрес? У цьому випадку все автоматизовано, тому простота у використанні насправді не викликає занепокоєння.
РЕДАКЦІЯ 26-листопада-11
Після деякого тестування та розробки виявляється, що жоден із цих варіантів не є працездатним. Здається, що пошук і маршрутів, і iptables роблять лінійний пошук через набір правил, і для обробки цих багатьох правил потрібно занадто багато часу. На сучасному обладнанні введення елементів 1М у чорний список iptables уповільнює роботу сервера до приблизно 2-х десятків пакетів за секунду. Тож IPTables та нульові маршрути вийшли.
ipset
, як рекомендує Джиммі Хедман, було б чудово, за винятком того, що це не дозволяє відслідковувати більше 65536 адрес у наборі, тому я навіть не можу спробувати використовувати його, якщо хтось не має жодних ідей.
Мабуть, єдиним рішенням для блокування цього безлічі IP-адрес є індексований пошук у рівні програми. Це не так?
Більше інформації:
Випадок використання в цьому випадку блокує список IP-адрес "відомих правопорушників" від доступу до статичного вмісту на веб-сервері. FWIW, блокування через Apache Deny from
настільки ж повільне (якщо не більше), як і лінійне сканування.
FYI: Остаточним робочим рішенням було використання mod_rewrite apache у поєднанні з картою DB Berkeley, щоб зробити пошук у чорному списку. Індексований характер БД Берклі дозволив списку масштабуватися з використанням O (log N).