Zetknąłem się z sytuacją, w której klient musi umieścić na czarnej liście zestaw nieco poniżej 1 miliona pojedynczych adresów IP (bez podsieci), a wydajność sieci stanowi problem. Chociaż przypuszczam, że reguły IPTables będą miały mniejszy wpływ na wydajność niż trasy, to tylko przypuszczenie.
Czy ktoś ma jakieś solidne dowody lub inne uzasadnienie faworyzowania IPTables lub zerowego routingu jako rozwiązania dla czarnej listy długich list adresów IP? W tym przypadku wszystko jest zautomatyzowane, więc łatwość użytkowania nie jest tak naprawdę problemem.
EDYCJA 26-lis-11
Po kilku testach i pracach rozwojowych wydaje się, że żadna z tych opcji nie jest wykonalna. Wygląda na to, że zarówno przeszukiwanie trasy, jak i iptables przeszukują liniowo zestaw reguł, a przetworzenie tak wielu reguł zajmuje zbyt długo. Na nowoczesnym sprzęcie umieszczenie 1 mln pozycji na czarnej liście iptables spowalnia serwer do około 2 tuzinów pakietów na sekundę. Więc IPTables i trasy zerowe są niedostępne.
ipset
, jak zaleca Jimmy Hedman, byłoby świetnie, z tym wyjątkiem, że nie pozwala ci śledzić więcej niż 65536 adresów w zestawie, więc nie mogę nawet próbować go używać, chyba że ktoś ma jakieś pomysły.
Najwyraźniej jedynym rozwiązaniem blokującym tak wiele adresów IP jest indeksowane wyszukiwanie w warstwie aplikacji. Czy to nie tak?
Więcej informacji:
Przypadkiem użycia w tym przypadku jest blokowanie listy adresów IP znanych przestępców przed dostępem do zawartości statycznej na serwerze sieciowym. FWIW, blokowanie przez Apache'a Deny from
jest równie powolne (jeśli nie bardziej), ponieważ wykonuje również skanowanie liniowe.
FYI: Ostatnim działającym rozwiązaniem było użycie mod_rewrite apache w połączeniu z mapą DB Berkeley do wyszukiwania na czarnej liście. Zindeksowana natura baz danych Berkeley pozwoliła na skalowanie listy z wydajnością O (log N).