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
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.