Dzisiejszy wpis będzie poświęcony walce ze spamerami. W fimie w której pracuję często dostajemy mailing typu „Ja być Twój admin, Ty zmienić hasło, Ty tu mieć formularz, Ty wpisać dane.”, niestety bardzo dużo ludzi przekazuje swoje hasła, przez co często prowadzimy batalię ze spamerami. Blokada samego konta już nie wystarcza, ponieważ spamerzy przełączają się na drugie aktywne konto i działają dalej.
W ramach walki z opisanym powyżej znajwiskiem napisałem skrypt w bashu, który za pomocą iptables blokuje konta które logują się za często, informując nas o tym mailem.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#!/bin/bash #ilość ostatnich monitorowanych logowań(jest to parametr, dlatego z minusem) logon_count="-500" #limit logowań, po którym przekroczeniu uznajemy że mamy do czynienia ze spamerem logon_limit=150 #ilosc logować z logon_count które podlegają sprawdzeniu czy został przekroczony próg ze zeminnej logon_limit (jest to parametr, dlatego z minusem) check_last_logon_count="-10" smtp_server="smtp.xxxx.pl" cat /var/log/maillog|grep sasl_method | tail ${logon_count} | cut -d "[" -f 3 | cut -d "]" -f 1 | sort | uniq -c | sort -n | tail ${check_last_logon_count} | while read -r ip_line; do ip=$( echo ${ip_line} | cut -d " " -f 2) count=$( echo ${ip_line} | cut -d " " -f 1) if [ ${count} -gt ${logon_limit} ]; then check_ip=$( /sbin/iptables -L | grep $ip) if [[ $check_ip = "" ]]; then /sbin/iptables -I INPUT -p tcp -s $ip -j DROP echo "`date` [Skrypt block_ip]: Blokada adresu: ${ip}, zarejestrowano ${count} logowań." >> /var/log/messages echo "Zablokowano adres IP: ${ip} Zarejestrowana ilość połączeń: ${count} W celu odblokowania wykonaj: iptables -D INPUT -p tcp -s $ip -j DROP" | mailx -r ${mail_from} -S smtp=${smtp_server} -s "ZIMBRA - blokada IP" ${mail_to} fi fi done |