Mariusz, jeśli chcesz oto mój skrypt (ponizej)
Na poczatku zmienne do plików:
- WHITELIST - plik z adresami IP serwerów pocztowych
- SUBNETS - adresy podsieci LAN (np. 192.168.1.0/24)
- BLACKHOST - hosty z sieci LAN zablokowane na amen
- P2P - regulki dotyczace blokowania P2P
Dwa ostatnie pliki mogą być puste. Ważne by uzupełnić dwa pierwsze, inaczej nic z tego skryptu nie bedzie pozytecznego. Jeżli nie użwasz samby możesz "odpłotkować" 2 linie w 3ciej petli FOR.
#!/bin/sh
. /etc/rc.conf
. /etc/rc.d/functions
WHITELIST=`cat /etc/blocker/email_white | grep -v "#" | sed -e '/^$/d'`
SUBNETS=`cat /etc/blocker/subnets | grep -v "#" | sed -e '/^$/d'`
BLACKHOST=`cat /etc/blocker/host_black | grep -v "#" | sed -e '/^$/d'`
P2P=`cat /etc/blocker/p2p_block | grep -v "#" | sed -e '/^$/d'`
start () {
stat_busy "Uruchamiam blokady oraz białe listy..."
iptables -N blokady
iptables -I FORWARD -j blokady
for IPTB in $BLACKHOST
do
iptables -A blokady -s $IPTB -j DROP
done
for IPTM in $WHITELIST
do
iptables -A blokady -p tcp -d $IPTM --dport 25 -j ACCEPT
done
iptables -A blokady -p tcp --dport 25 -j LOG
iptables -A blokady -p tcp --dport 25 -j DROP
for IPTS in $SUBNETS
do
iptables -A blokady -p tcp -s $IPTS --dport 135 -j DROP
#iptables -A blokady -p tcp -s $IPTS --dport 139 -j DROP
#iptables -A blokady -p tcp -s $IPTS --dport 445 -j DROP
iptables -A blokady -p tcp -s $IPTS --dport 6667 -j DROP
done
echo -e $P2P | sh -
stat_done
}
stop () {
stat_busy "Wyłączam blokady oraz białe listy..."
iptables -D FORWARD -j blokady
iptables -F blokady
iptables -X blokady
stat_done
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 2
start
;;
*)
echo " "
echo "Użyj: $0: [start|stop|restart]"
echo " "
esac
exit 0
Tutaj skrypt do sprawdzania ilości (w sumie) połączeń na port 25 z każdego adresu IP z pliku /etc/hosts. Wynik można zapisywać do pliku i na jego podstawie blokować dane hosty (ogłoszeniem WWW lub do pliku $BLACKHOSTS)
#!/bin/bash
SPAM="/tmp/spammers"
grep DPT=25 /var/log/kernel |grep 192.168. | awk '{ print $8 }' > $SPAM
IP=`cat /etc/hosts | awk '{print $1}' | grep -v "#"`
echo -e "\nAdres IP:\t\t\t\tIlość połączeń na port 25:"
for SPAM_IP in $IP
do
COUNT=`grep -wc $SPAM_IP $SPAM`
if [ $COUNT -gt "5" ]; then
HOST_IP=`resolveip $SPAM_IP | awk '{print $6}'`
echo -e "$SPAM_IP ($HOST_IP)\t\t$COUNT"
fi
done
echo -e "\nAby sprawdzić poszczególne hosty dokładniej, uruchom: spammers-check [adres IP]\n"
rm -rf $SPAM
Spammers-check:
#!/bin/bash
grep DPT=25 /var/log/kernel* |grep -w $1 | awk '{ print $1,$2,$3,$8,$9 }' | less
Rozwiązanie nie jest może najłatwiejsze i wymaga trochę pracy (zwłaszcza na początku - dodawanie adresów IP serwerów) a jeden ze skryptów może obciążyć serwer, podobnie jak logowanie za pomocą iptables ale za to uszczelnia sieć na 100%. Korzystałem z check25 ale - co ciekawe - bardzo rzadko blokował spamujące osoby.
By zyskać na wydajności w pierwszym skrypcie można wywalić logowanie i operować tylko na białej liście... moim zdaniem nie ma takiego efektu psychologicznego jak np. z ogłoszeniem.