Cerberus
04.04.2013, 12:52
Aus gegebenem Anlass habe ich mal ein kleines Script gebaut, mit welchem man aus den Log-Files IP-Adressen "rausfummelt" und diese dann per Block in die iptables reinschreibt ...
#!/bin/bash
#Settings und Einstellungen
log_file="/var/log/nginx/access.log"
such_str="w00tw00t"
count=0
# in {print $1} steht die Position der IP-Adresse :)
for ip in `cat $log_file | grep $such_str | awk '{print $1}' | sed 's/]//g' | sort -ug` ; do
count=$[$count+1]
#Prüfen, ob die IP schon enthalten ist
if [ "iptables -L INPUT -v -n | grep '$ip'" == "" ]; then
iptables -I INPUT -s $ip -j DROP
iptables -I OUTPUT -s $ip -j DROP
echo $ip hinzugefügt
else
echo $ip gefunden
fi
done
#Abschliessende Statusmitteilung ausgeben
if [ "$count" -gt 0 ]; then
echo $count Einträge bearbeitet
else
echo keine Einträge
fi
Oben im config-Teil die entsprechende LOG angeben und die $-Variable in der FOR-Schleife anpassen.
Den entsprechenden Suchstring nicht vergessen....
Dann sollte das auch sauber laufen ....
Wäre interessant zu erfahren wo der Nutzen liegt. Ich meine wenn ich die IP kenne, brauche ich die nicht in einer Log suchen lassen ;)
Cerberus
04.04.2013, 13:26
ich habe das gebaut, weil auf dem Server um den es geht zu viele Anfragen von denen kommen ...
und damit wäre ich im "Hand-Modus" Stunden beschäftigt ....
so bügelt das Script drüber und fertig is die Lauge
Ach seh grad, du suchst ja gar nicht mit einer IP als Suchstring, sondern nach diesem w00tw00t. Hehe, dachte das is nur deine Art von "Platzhalter" ;)
OK, dann sehe ich jetzt den Sinn :)
EDIT
Wußte das mir w00tw00t bekannt vorkommt. Habe mal eben in meine Firewall geschaut. Einfach diese Regel adden und schon ist das Skript obsolet.
$IPT -A INPUT -d <EIGENE_SERVER_IP> -p tcp --dport 80 -m string --to 70 --algo bm --string 'GET /w00tw00t.at.ISC.SANS.' -j DROP
Flori12345
25.09.2019, 10:22
Moin,
müsste das Skript die Ip´s nicht eigentlich automatich sperren ?
bei mir steht immer nur gefunden, die IP ist aber noch net gesperrt.
tantetoni2
26.09.2019, 14:09
Warum so unbequem?
Jedes mal ins File rein um nach was bestimmten zu suchen ist doch kacke^^
#!/bin/bash
# IP tables
IPT=$(which iptables)
IPT6=$(which ip6tables)
# Settings und Einstellungen
log_file="/var/log/nginx/access.log"
such_str=${1:-} #first bash param file.sh param1
count=0
[ -z "$such_str" ] && echo "missing search string" && exit 0;
# in {print $1} steht die Position der IP-Adresse :)
for ip in `cat $log_file | grep "$such_str" | awk '{print $1}' | sed 's/]//g' | sort -ug` ; do
((++count)) # increment
# IPv6 check
if [[ ! -z "$IPT6" && "$ip" =~ ^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$ ]]; then
IPT="$IPT6"
fi
echo "using $IPT"
if [ -z $($IPT -L INPUT -v -n | grep '$ip') ]; then
$IPT -I INPUT -s $ip -j DROP
$IPT -I OUTPUT -s $ip -j DROP
echo "$ip hinzugefügt"
else
echo "$ip gefunden"
fi
done
#Abschliessende Statusmitteilung ausgeben
([ "$count" -gt 0 ] && echo "$count Einträge bearbeitet") || echo "keine Einträge"
call ./script.sh suchstring oder wenn leerzeichen ./script.sh "wort1 wort2"
Ein paar Punkte :D
Bei echos ohne Quote kann einiges kaputt gehen
increment in bach geht unter anderem so ((++var))
besser mit [ -z "$var" ] prüfen ob eine var leer ist == ist ein alias für = dem Stringvergleich in Bash, kann also unter bestimmten Voraussetzungen wenn man Zahlen erwartet daneben gehen
mit zb ${1:-"default"} kann man das erster Argument abfragen, wenn nicht gesetzt dann nimm den default wert nach :- ${2:-"default2"} wäre zb für Argument 2
IPv6 haste vergessen ;)
Flori12345
28.10.2019, 22:27
@tantetoni2 (http://www.netvision-technik.de/forum/member.php?u=398) kannst du dir das nochmal bitte anschauen.
Die IPs die schon gesperrt wurden, werden bei nochmaligen ausführen des scriptes nochmal gesperrt.
is das normal oder soll das so sein
lg
vBulletin® v3.8.9, Copyright ©2000-2024, vBulletin Solutions, Inc.