Я сталкивался с ситуацией, когда клиенту необходимо занести в черный список набор из чуть менее 1 миллиона отдельных IP-адресов (без подсетей), и производительность сети является проблемой. Хотя я бы предположил, что правила IPTables окажут меньшее влияние на производительность, чем маршруты, это всего лишь гипотеза.
Есть ли у кого-нибудь убедительные доказательства или иное обоснование предпочтения IPTables или нулевой маршрутизации в качестве решения для внесения в черный список длинных списков IP-адресов? В этом случае все автоматизировано, поэтому простота использования не является проблемой.
РЕДАКТИРОВАТЬ 26 ноября 2011
После некоторого тестирования и разработки кажется, что ни один из этих вариантов не работает. Похоже, что и поиск маршрутов, и iptables выполняют линейный поиск по набору правил и занимают слишком много времени, чтобы обработать это множество правил. На современном оборудовании размещение 1M элементов в черном списке iptables замедляет работу сервера до примерно 2 дюжин пакетов в секунду. Так что IPTables и нулевые маршруты отсутствуют.
ipset
, как рекомендует Джимми Хедман, было бы замечательно, за исключением того, что он не позволяет отслеживать более 65536 адресов в наборе, поэтому я даже не могу использовать его, если у кого-то нет идей.
По-видимому, единственное решение для блокировки такого количества IP-адресов - это индексированный поиск на уровне приложений. Это не так?
Больше информации:
Случай использования в этом случае блокирует список IP-адресов «известных нарушителей» от доступа к статическому контенту на веб-сервере. FWIW, блокировка через Apache Deny from
одинаково медленна (если не более), так же как и линейное сканирование.
К вашему сведению: окончательное рабочее решение заключалось в том, чтобы использовать apache mod_rewrite в сочетании с картой Беркли в Беркли для поиска в черном списке. Индексированная природа Беркли БД позволила масштабировать список с производительностью O (log N).