Skrypt kontra spamerzy cz. 2

Posted on Thu 24 September 2020 in Linux, Tips4Unices • 2 min read

W pierwszej części pisałem o japońskim filmie, Reksiu, historii dwukropka oraz, co najmniej chyba ważne, skrypcie do blokowania spamerów.

Część druga będzie krótka ponieważ jest tylko rozwinięciem istniejącego już skryptu. Pokażę teraz co do niego dodałem:

cat spammers.log | awk ' BEGIN { FS = "," } {if ($2 > 333) system("ipset add blacklist "$1)}'

Plik "spammers.log" jest właściwie w formacie CSV, bo poszczególne pola oddzielone są przecinkiem (coma separated value), a rekordy znakiem nowej linii. Z tej właściwości korzystam w dodanym fragmencie.

Dyrektywa FS = "," mówi awk-owi, że znakiem rozdzielającym pola jest przecinek. Dzięki temu każdy rekord czyli jedną linię pliku awk dzieli na pola, a znajdujące się w nich wartości podstawia odpowiednio pod zmienne: $1 i $2.

Ponieważ plik wygląda tak:

212.70.149.83       ,19652
193.35.48.18        ,27796
45.142.120.209      ,39014
45.142.120.192      ,45761
45.142.120.53       ,72477
to dla 1-ej linii zmienna $1 będzie miała wartość 212.70.149.83, a zmienna $2 wartość 19652.
Nota bene: oznacza to, że gnojek spod ww. adresu IP połączył się z serwerem w dość krótkim czasie, ponad 19 tysięcy razy!

Potem następuje instrukcja warunkowa, mówiąca mniej więcej to: jeśli wartośc zmiennej $2 przekracza 333 to uruchom polecenie systemowe. O co chodzi z liczbą 333? Jeśli jakiś host połączy się w krótkim czasie z moim więcej niż 333 razy to najprawdopodobniej jest to spammer.

Tak, wiem. Liczba jest z kosmosu. Ale tylko na razie. Przecież po to są komputery, żeby cierpliwie zbierać dane i na ich podstawie urealniać kosmiczne założenia. Ale to później. Na razie niech zostanie 333, bo ładnie wygląda.

Polecenie system("ipset add blacklist "$1)mówi awk-owi, by dla spełnionego wyżej opisanego warunku uruchomił ipset. A ipset dodaje do blacklisty IP, które przechowane jako wartość zmiennej $2.

No i na razie tyle.

Pozstało jeszcze parę rzeczy do zrobienia:

  • statystyka, która być może da odpowiedź jak odróżnić spamerów od zwykłych połączeń,
  • zachowywanie ustawień ipset,
  • odtwarzanie tych ustawień.

Zabawa robi się coraz fajniejsza.