niedziela, 25 października 2009

Netfilter jako prosty nIDS/nIPS

W świecie Otwartego Oprogramowania jest kilka aplikacji typu nIDS/nIPS, które dzielą się na dwie kategorie:
- Snort
- cała reszta

Snort - narzędzie przyciężkawe i toporne, słyszałem o takich u których działa, u mnie jednak odmawiał posłuszeństwa po kilkunastu dniach pożerania cykli CPU. Cała reszta to zwykle programy, wykrywające skanowanie portów, jak choćby Portsentry. Lubię proste rozwiązania, dlatego zamiast instalować kolejną aplikację, zacząłem dłubać przy Netfilterze. Za pomocą tego firewalla, możemy łatwo stworzyć niezbyt wyrafinowane, ale za to łatwe we wdrożeniu i bardzo wydajne narzędzie.

Podobnie jak w innych aplikacjach tego typu, wykrywa się próby połączeń na porty, którymi nikt nie powinien się interesować. Oczywiście w każdym wypadku lista może być inna. Kto próbuje się dostać na port powinien być z automatu blokowany, poza tym rozwiązanie musi być maksymalnie nieobsługowe, tzn. automatycznie czyścić "czarną listę". padło na wykorzystanie modułu recent, który zwykle jest stosowany do ochrony przed atakami słownikowymi na SSH.

Poniższy listing pozwala wykrywać skanowanie typu: Connect, SYN i UDP. Dwie pierwsze regułki zajmują się reakcją na wykryte skanowanie: pierwsza zapisuje do logów, druga blokuje IP-ka na 12 godzin. Kolejne to definicje portów:


iptables -A FORWARD -m recent --name skanery --update --seconds 43200 --hitcount 1 -j LOG --log-prefix "FW port-scan " -m limit --limit 2/hour
iptables -A FORWARD -m recent --name skanery --rcheck --seconds 43200 --hitcount 1 -j DROP

iptables -A FORWARD -p tcp -d 1.2.3.4 --dport 7 -m recent --name skanery --set
iptables -A FORWARD -p tcp -d 1.2.3.4 --dport 23 -m recent --name skanery --set
iptables -A FORWARD -p tcp -d 1.2.3.4 --dport 111 -m recent --name skanery --set
iptables -A FORWARD -p tcp -d 1.2.3.4 --dport 137 -m recent --name skanery --set
iptables -A FORWARD -p tcp -d 1.2.3.4 --dport 139 -m recent --name skanery --set


Skanowanie Null i Xmas traktujemy jak inne pakiety uszkodzone, jedną regułką:


iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP


Szkoda czasu na zastanawianie się, czy to skanowanie czy zwykłe śmieci.

2 komentarze:

qwiat pisze...

Oczywiscie do skanowania trzeba dodac osobne regułki dla UDP np.:

iptables -A FORWARD -p udp -d 1.2.3.4 --dport 7 -m recent --name skanery --set

Czarny pisze...

Ludzie książki piszą, konferencje zwołują, cuda wyczyniają, a tutaj prosto, przystępnie i rzeczowo.

Rzeczowo: riposty na konkretne wywołania nmapa, czyli jedynego słusznego skanera.

Podesłałem swoim s tudentom żeby przeczytali, zrozumieli i wryli :)