NetVision-Technik

NetVision-Technik (http://www.netvision-technik.de/forum/index.php)
-   Security (http://www.netvision-technik.de/forum/forumdisplay.php?f=32)
-   -   Script für iptables (http://www.netvision-technik.de/forum/showthread.php?t=7068)

Cerberus 04.04.2013 11:52

Script für iptables
 
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 ...

Code:

#!/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 ....

bl0bb 04.04.2013 12:04

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 12: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

bl0bb 04.04.2013 17:02

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.

Code:

$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 09: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 13:09

Warum so unbequem?

Jedes mal ins File rein um nach was bestimmten zu suchen ist doch kacke^^

Code:

#!/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
Code:

./script.sh suchstring
oder wenn leerzeichen
Code:

./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 21:27

@tantetoni2 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


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.

Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.