Rozszerzenie ipset dla iptables
Napisał: Patryk Krawaczyński
08/11/2014 w Bezpieczeństwo Brak komentarzy. (artykuł nr 464, ilość słów: 258)
P
rzez długi czas firewall w Linuksie oparty o iptables nie miał żadnego efektywnego sposobu, aby dopasowywać reguły do zbiorów adresów IP. Jeśli mieliśmy wiele adresów IP, aby dopasować do nich różne reguły (na przykład: setki lub tysiące adresów IP, które należało trzymać z daleka od portu SMTP) trzeba było tworzyć jeden wpis iptables dla każdego adresu IP, a następnie wprowadzać te wpisy sekwencyjnie. To wprowadzało wiele komplikacji w utrzymywanie takiego rozwiązania. Na szczęście w jądrach od serii 2.6.39 (Ubuntu 12.04, 14.04, Fedora 20, RHEL / CentOS 7) pojawiło się rozszerzenie ipset.
Ipset daje nam możliwość tworzenia zbiorów różnych rzeczy typu: portów TCP, adresów MAC, sieci IP (CIDR), pojedynczych adresów IP, interfejsów sieciowych itd. Pracę z tym narzędziem (iptables nie jest standardowo dostarczany z nim w zestawie) należy zacząć od zainstalowania pakietu o nazwie ipset
. Podstawowe jego użycie sprowadza się do stworzenia zbioru, dodania do niego danych (określonego typu) i rozpoczęcia czynności dopasowywania. Przykład:
ipset create blocknets hash:net counters ipset add blocknets 10.10.0.0/16 ipset add blocknets 192.168.0.0/24 iptables -A INPUT -p tcp --dport 25 -m set --match-set blocknets src -j DROP
Ważne, aby zbiór istniał zanim zostanie wykorzystany przez iptables. Oprócz prostoty zarządzania zbiorami danych – ipset daje systemowi coś więcej. W “standardowym” trybie użycia iptables, przy tysiącach wpisów czas połączenia (ms) na filtrowany port będzie się wydłużać podczas, gdy przy użyciu zbiorów ip pozostaje mniej więcej ten sam.
Więcej informacji: man ipset, Mass-blocking IP addresses with ipset, Ipset for heavy use