Małe lasso na SPAM
Napisał: Patryk Krawaczyński
29/08/2009 w Bezpieczeństwo 1 komentarz. (artykuł nr 141, ilość słów: 448)
Lista DROP (ang. Don’t Route Or Peer) projektu Spamhaus jest zbiorem bloków sieciowych, czyli zakresów adresów IP – składających się z komputerów zombie lub sieci w pełni kontrolowanych przez zawodowych spamerów. Lista ta jest dostępna pod postacią prostej listy tekstowej, którą można wykorzystać w własnych zaporach sieciowych czy sprzęcie odpowiedzialnym za routing.
Ze względu na fakt, iż lista ta nigdy nie będzie zawierać przestrzeni adresowej kontrolowanej przez legalnych właścicieli – nawet jeśli została ona im ponownie przyznana od “spamerów z piekła” – z powodzeniem można ją wykorzystać do blokady całego ruchu pochodzącego z bloków sieciowych tej listy. Wykorzystana w ten sposób, w naszej sieci lub głównych routerach naszego ISP powinna chronić naszych użytkowników w bliżej nieokreślonym stopniu przed spamowaniem, zbieraniem adresów e-mail, skanowaniem, czy atakami DDoS.
Najprostszą implementacją listy DROP w naszym hoście jest użycie narzędzia curl (ang. transfer a URL) w połączeniu z iptables:
curl -s http://www.spamhaus.org/drop/drop.lasso | grep ^[1-9]|cut -f 1 -d ' ' | xargs -iX -n 1 iptables -A INPUT -s X -i eth0 -j DROP
W systemie oczywiście musi być zainstalowane narzędzie curl (pakiet o tej samej nazwie) oraz xargs (pakiet findutils). Interfejs eth0 jest interfejsem zewnętrznym. Jeśli pragniemy odświeżać wpisy z listy, co jakiś czas (serwis Spamhaus prosi by lista nie była uaktualniana więcej razy niż jeden na godzinę) – najlepiej stworzyć osobny łańcuch (iptables -N SPAM), do którego będą wpisywane i uaktualniane wpisy z listy:
#!/bin/sh IPT="/usr/sbin/iptables" IPTS="/usr/sbin/iptables-save" FILE="rules.txt" $IPTS > $FILE CHAIN=`cat $FILE | grep SPAM | wc -l` if [ $CHAIN -eq "0" ]; then echo "Łańcuch SPAMHAUS nie istnieje." $IPT -N SPAM $IPT -I INPUT -j SPAM curl -s http://www.spamhaus.org/drop/drop.lasso | grep ^[1-9] | cut -f 1 -d ' ' | xargs -iX -n 1 iptables -A SPAM -s X -i wlan0 -j DROP else echo "Łańcuch SPAMHAUS istnieje." $IPT -F SPAM curl -s http://www.spamhaus.org/drop/drop.lasso | grep ^[1-9] | cut -f 1 -d ' ' | xargs -iX -n 1 iptables -A SPAM -s X -i wlan0 -j DROP fi rm $FILE exit 0
Tak prosty skrypt możemy umieścić np. w katalogu /etc/cron.daily/, aby nasze wpisy były aktualizowane raz na dzień. Jeśli nasz serwer pełni rolę routera / bramy wówczas należy łańcuch dla pakietów przychodzących zamienić na łańcuch dla pakietów przechodzących pomiędzy interfejsami:
xargs -iX -n 1 iptables -A FORWARD -s X -d 192.168.0.0/24 -j DROP
Gdzie 192.168.0.0/24 jest adresem sieci lokalnej w zapisie CIDR, którą obsługuje nasz router. Na stronie projektu Spamhaus możemy również znaleźć narzędzia do obsługi routerów CISCO oraz zapory ipfw dla systemu FreeBSD.
Więcej informacji: Spamhaus DROP Advisory Null List
Jeśli pragniemy uruchomić DUŻE lasso na spam to serwis NiX Spam DNSBL udostępnia listę około 40 tysięcy wpisów adresów IP spamerów. Filtry NiX wychwytują około 200’ście tysięcy wiadomości spam / na godzinę. Lista aktualizowana jest mniej więcej, co 15 minut. Jeśli chcemy ją zaimplementować do iptables wystarczy zrobić to poprzez linijkę:
Jednak ładowanie tak dużej liczby wpisów do tablic ip może zając dużo więcej czasu niż 15 minut, dlatego najlepiej skorzystać z serwera DNSBL – ix.dnsbl.manitu.net, ale ten musi zostać już zaimplementowany w samym MTA.