blokowanie połączeń pocztowych wirusów (zazwyczaj)

problem:
wirusy z uporem godnym wyższej sprawy probują rozesłać się za pomocą emaili z wykonywalnymi zalącznikami (lub zipami), powoduje to znaczny przyrost logów pocztowych oraz bezsensowne wykorzystanie mocy

rozwiązanie (częściowe):
skrypt uruchamiany przez crona co 10 minut zdejmuje zalożone przed godziną filtry pakietów, przeszukuje log pocztowy z poprzednich 10 minut poszukując wpisu o zablokowanym emailu zawierającym wykonywalne zalaczniki (lub zipy), jesli taki znajdzie, dopisujee regułę dla zalożenia filtra pakietu na źrodłowy adres ip z którego pochodził zablokowany email (do pliku opisanego zmienną $CBS) oraz dopisuje regułę która za godzinę zdejmie filtr (do pliku opisanego zmienną $RBS); skrypt na koniec zakłada wygenerowane filtry

komentarz:
rozwiązanie jest mocno totalitarne, znacznie ogranicza próby wysłania wykonywalnych załącznikow oraz obniża ilość "szumu" w logach pocztowych; blokuje rownież ip niewinnych userów ktorym sie przydarzyło wysłać emaila z wykonywalnym załącznikiem (lub zipem); blokada trwa co prawda tylko godzinę a odpowiednio skonfigurowany postfix informuje o tym co się stało i dlaczego
--- początek /root/bin/block-mail-spammers ----

#! /bin/bash
sleep 1
TIMENOWS=`date +%s`
((GREPTIMED = $TIMENOWS % 600 ))
((GREPTIMES = $TIMENOWS - $GREPTIMED))
((GREPTIMESD = $GREPTIMES - 1))
GREPSRTINGR=`date --date="1970-01-01 00:00:00 UTC +$GREPTIMESD sec" +%b" "%e" "%H":"%M`
GREPSTRING=`echo "$GREPSRTINGR" | cut -c 0-11`
RULESTRING=`echo "$GREPSRTINGR" | cut -c 11`
case "$RULESTRING" in
        0)
                FFN="0"
        ;;
        1)
                FFN="1"
        ;;
        2)
                FFN="2"
        ;;
        3)
                FFN="3"
        ;;
        4)
                FFN="4"
        ;;
        5)
                FFN="5"
        ;;
        *)
                echo "something goes wrong FFN=$FFN, exiting" >> /var/log/block-mail-spammers.log  && exit 0
        ;;
esac

RBS="/root/bin/remove-block-spammer-$FFN"
CBS="/root/bin/create-block-spammer-$FFN"

touch "$RBS" && chmod u+x "$RBS"
touch "$CBS" && chmod u+x "$CBS"
"$RBS"
rm "$RBS" && touch "$RBS" && chmod u+x "$RBS"

grep "$GREPSTRING" /var/log/mail | grep "reject: header"| grep "\?\?name="| sed -e 's/.*\(name=\".*\"\)[ ]\(from[ ].*\)\[\(.*\)\]\;[ ].*/\3        \1/g' | sort  | uniq --check-chars=15 | awk '{print "#"$1" "$2"\niptables -I INPUT -s "$1"/32 -p tcp --dport 25 -j DROP"}'| tee $CBS | sed -e 's/ -I / -D /g' > $RBS
$CBS
rm $CBS

---- koniec /root/bin/block-mail-spammers ----
do crona dodajemy wpis ktory loguje nam aktualny stan blokady i uruchamia skrypt:
00,10,20,30,40,50 * * * * (date && iptables -L INPUT -vnx) >> /var/log/block-mail-spammers.log && /root/bin/block-mail-spammers
powyższe logowanie nie jest zbyt szczęśliwe jeśli w łańcuchu INPUT pojawiają sie reguły z innych źródeł, ale lepsze takie niż żadne
23.11.2004