Skrypt do automatycznego blokowania IP na firewallu (baner).

Skrypty te napisałem do blokowania na firewallu wszystkich numerów ip które zostały zarejestrowane w logach z jakichś tam powodów (zależnie od konfiguracji). Osobiście stosuję go do blokowania wszystkich numerów ip, które próbowały włamywać się na pewne porty w moim systemie (np. Samba, SSH, Wirusy: CodeRedWorm i Nimda, ICMP Flood). Blokada jest zdejmowana automatycznie po pewnym okresie czasu.

Pobierz baner.tar.gz (1.5KB)

Aby zainstalować skrypt należy:

  1. Rozpakować archiwum.
  2. Skopiować zawartość katalogu etc do katalogu /etc
  3. Wyedytować plik /etc/deny_method:
    # log path                    	IPpos   susp. string            name        	times
    #                                                                           
    /var/log/httpd/access_log		1       default.ida?            CodeRedWorm		1
    /var/log/httpd/access_log		1       scripts/root.exe        Nimda       		1
    /var/log/samba/log.smb		4       Denied                  Samba       		1
    /var/log/messages			12      222.197.124.128:515     port:printer		1
    /var/log/messages			12      222.197.124.128:137     port:samba  		1
    /var/log/messages			12      222.197.124.128:111     port:sunrpc 		1
    /var/log/messages			12      222.197.124.128:22      port:ssh    		1
    /var/log/messages			12      222.197.124.128:0       ICMP			30
    
    gdzie:
    • log path - ścieżka do logu
    • IPpos - kolumna w logu w której znajduje się numer ip z którego wystąpił atak
    • susp. string - łańcuch tekstowy po którym rozpoznaje się próbę ataku
    • name - nazwa wyświetlana, gdy łańcuch zostanie rozpoznany (informacja dla administratora)
    • times - ile razy atak się powtórzył (ilość prób) (dla ping (ICMP) trzeba ustawić duże wartości, żeby nie wyciąć niewinnych pojedyńczych pingów ;-)

    Uwaga! Nie używać spacji w łańcuchach tekstowych.

    W tej przykładowej konfiguracji mamy kontrolę logów serwera WWW Apache (httpd) pod kątem prób włamań przez popularne ostatnio wiruski CodeRedWorm i Nimda (ataki im się udaja tylko na serwery www f-my M$ ;-) Ale po co mieć wielkie, spuchnięte logi...
    Logowane są ponadto próby wejścia na serwer Samba (gdy Samba jest skonfigurowana tak, że akceptuje tylko połączenia z sieci lokalnej)
    A z logu /var/log/messages blokowane są wszystkie zarejestrowane pakiety które ipchains odrzuci i które spełniają warunki z konfiguracji.
  4. W archiwum są dostępne nastepujące skrypty:
    • /etc/cron.daily/find_hack - przeszukuje logi.
    • /etc/cron.weekly/rmdeny_all - usuwa wszystkie zablokowane numery ip (zdejmuje bany).
    • /root/mkdenyphp - generuje plik deny_full.txt oraz stronę www (po odhaszowaniu) do PHP-Nuke. Należy w nim wyedytować linię:
      internet_iface="ppp0"
      i wpisać w niej nazwę interfejsu, który będzie blokowany. Należy zadbać o odpowiednie regułki w skrypcie ipchains aby komenda ipchains -L ppp0-in działała (czyli zdefiniować ppp0-in. Najprościej wykorzystać do tego mój skrypt z regułkami ipchains na stronie Maskarada.
    • /root/mkdeny - skrypt używany przez find_hack.
      Można nim "zabanować" również ręcznie numer IP wpisując np.:
      mkdeny 174.29.1.2
    • /root/rmdeny - skrypt do usuwania banów:
      rmdeny 174.29.1.2
    • /root/show_deny - pokazuje zablokowane numery ip wraz z licznikami pakietów i bajtów zablokowanych.
  5. Skrypty używają następujących plików:
    • /etc/deny.txt - plik do którego zapisane zostają wszystkie zablokowane numery ip. Startując system od nowa należy zadbać aby skrypt ustawiający regułki ipchains wczytał i zablokował te numery. Można to zrobić tak jak w przykładzie poniżej lub skorzystać ze skryptu ipallow ze strony Maskarada:
      #!/bin/sh
      
      internet_iface="ppp0"
      deny=`cat /etc/deny.txt`
      
      ipchains -N ${internet_iface}-in
      ipchains -A input  -i ${internet_iface} -j ${internet_iface}-in
      
      # zabraniamy dostepu osobom z listy /etc/deny.txt 
      for s in $deny
      do
          ipchains -A ${internet_iface}-in -s $s -j DENY
      done
      
    • /etc/deny_full.txt - plik, w którym znajdują się nazwy kanoniczne zablokowanych numerów ip (można sobie podglądnąć, czy nie ma zablokowanego jakiegoś znajomego kompa ;-)


    • Powrót Linux
      @
      Webmaster Grzegorz Fitrzyk