Martin Schmitt wrote:
Peter Barthel schrieb:
DROP_COUNT=0;
while read n x; do
if [ $n -gt 5 ]; then
DROP_COUNT=`expr $DROP_COUNT + 1`;
fi
echo $DROP_COUNT;
done
echo $DROP_COUNT;
Halt! Ist das wirklich das konkrete Beispiel, das bei Dir nicht
funktioniert, oder hast Du das für unsere Verhältnisse angepaßt? So wie
Du es hier geschrieben hast, funktioniert es nämlich mit bash und ksh
gleichermaßen ohne Probleme.
-martin
Jein.
Es ist noch eine zusätzliche while-schleife drumherum...
Das ist ein Script um bei einem ddos (syn-flood) schuldige ips zu kicken...
Es ist noch n bissel mehr drum herum, aber das hier ist das essentielle
daran:
#!/bin/bash
#ab wieviel SYN-Connects wird gekickt?
KICK_AB=5
#beginnen zu zaehlen, wie oft das script ips geblocked hat...
DROP_COUNT=0;
#[Ctrl] + [C] Abfangen
trap 'function_sterbengehen' 2;
function function_sterbengehen()
{
rm -rf /tmp/didit;
exit 0;
}
while /bin/true ; do
echo -e "\033[1;31mGedroppte IPs seit dem Aufruf von "$0":
\033[1;32m"$DROP_COUNT;
echo -e "\033[0;mRefresh alle 15 Sekunden"
echo -e
"\033[0;m-------------------------------------------------------------------------------------------";
#tmp-File wegwerfen
rm -f /tmp/didit
(netstat -n | grep :80| grep ESTAB; sleep 5; netstat -n | grep
:80| grep ESTAB; sleep 5; netstat -n | grep :80| grep ESTAB;) | \
sort | perl -pe 's/ +/ /g' | uniq -c | sort -n | \
grep '0 0' | grep -v '1.*tcp' | cut -d: -f2 | cut -d' ' -f2 | \
sort | uniq -c | sort | \
while read n ip; do
if [ $n -gt $KICK_AB ]; then
echo "date `date` ip [$ip] n [$n]"
/sbin/iptables -L input -v -n | grep -q $ip ||
/sbin/iptables -I input --source $ip --jump DROP
echo $ip >> /tmp/didit;
DROP_COUNT=`expr $DROP_COUNT + 1`;
fi
done
sleep 5
done
Gruß, Peter
--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org