Oto spkrypt przetestowany i baardzo skuteczny.
#!/bin/bash
KATALOG="/etc/banudp"
dodajdobanlisty () {
IPIKI=(`cat /proc/net/ip_conntrack |grep udp | sed -n 's%.* src=\(10.1.[0-9.]*\).*%\1%p'| sort | uniq -c | awk '$1 > 200 { print $2 }'`)
if [ ! -e $KATALOG/banudp.lst ] && [ ${#IPIKI[@]} -gt 0 ]
then
touch $KATALOG/banudp.lst
chmod 777 $KATALOG/banudp.lst
fi
x=0
while [ $x -lt ${#IPIKI[@]} ]
do
#Wybieramy regulki zamiennie (albo 1 albo 2)
#regulka 1 - blokowanie calkowite UDP
iptables -I FORWARD -i eth2 -s "${IPIKI[$x]}" -p udp --dport ! 53 -j DROP
echo "iptables -D FORWARD -i eth2 -s ${IPIKI[$x]} -p udp --dport ! 53 -j DROP" >> $KATALOG/banudp.lst
#regulka 2 - mocno ograniczone UDP
# iptables -I FORWARD -p udp -s "${IPIKI[$x]}" -m state --state NEW -m limit --limit 1/s --limit-burst 5 -j ACCEPT
# echo "iptables -D FORWARD -p udp -s "${IPIKI[$x]}" -m state --state NEW -m limit --limit 1/s --limit-burst 5 -j ACCEPT" >> $KATALOG/banudp.lst
echo "${IPIKI[$x]}" >> /var/log/banudp.log
x=$[x + 1]
done
}
usunzbanlisty () {
if [ -e $KATALOG/banudp.lst ]
then
$KATALOG/banudp.lst > /dev/null
sleep 3s
rm $KATALOG/banudp.lst
fi
}
case "$1" in
"-d") dodajdobanlisty;;
"-u") usunzbanlisty;;
*) echo
echo "Błędny lub brak parametru."
echo "uzyj:";
echo " -d sprawdza i dodaje do banlisty UDP"
echo " -u czysci tablice z zbanowanych wpisow "; echo;;
esac
skrypt należy umieścić w /etc/banudp (katalogowi trzeba nadać możliwość prawa zapisu przez innych)
następnie dodać do crona wpisy:
*/1 * * * * /etc/banudp/banudp -d
*/3 * * * * /etc/banudp/banudp -u
Czyli skrypt odpala się zamiennie z dwoma parametrami -d i -u
-d sprawdza czy jakiś IP przekroczył wartość progową i jeśli tak dodaje go do banlisty
-u czyści wszytkie zbanowane IP
Czyli w cronie decydujemy na jak często ma sprawdzać stan i na jak długo maja być zbanowane
w tej lini skryptu
IPIKI=(`cat /proc/net/ip_conntrack |grep udp | sed -n 's%.* src=\(10.1.[0-9.]*\).*%\1%p'| sort | uniq -c | awk '$1 >
200 { print $2 }'`)
(zaznaczone na czewono) określamy próg banowania UDP dla IP.
Skrypt ma tą przewagę nad wpisami omawianymi od początku wątku że nie powoduje dostawiania lowID np w emule,
Z drugiej strony zauważyłem że programy p2p "uczą" sie jakie są bezpieczne wartości dla UDP i od czasu zastosowania tego skryptu trzymią się w nich.