Einzelnen Beitrag anzeigen
Alt 26.09.2019, 13:09   #6
tantetoni2
König
Punkte: 116.452, Level: 100 Punkte: 116.452, Level: 100 Punkte: 116.452, Level: 100
Levelaufstieg: 0% Levelaufstieg: 0% Levelaufstieg: 0%
Aktivität: 0% Aktivität: 0% Aktivität: 0%
Letzte Erfolge
Auszeichnungen
Artikel Benutzer besitzt 1x Hilfe Level 3
 
Benutzerbild von tantetoni2
 
Registriert seit: 15.10.2008
Beitr?ge: 1.923
Abgegebene Danke: 23
Erhielt 571 Danke für 38 Beiträge
Downloads: 8
Uploads: 0
Nachrichten: 4155
Renommee-Modifikator:
7256 tantetoni2 genießt hohes Ansehentantetoni2 genießt hohes Ansehentantetoni2 genießt hohes Ansehentantetoni2 genießt hohes Ansehentantetoni2 genießt hohes Ansehentantetoni2 genießt hohes Ansehentantetoni2 genießt hohes Ansehentantetoni2 genießt hohes Ansehentantetoni2 genießt hohes Ansehentantetoni2 genießt hohes Ansehentantetoni2 genießt hohes Ansehen
Standard

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
  • 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
__________________

Ge?ndert von tantetoni2 (26.09.2019 um 14:29 Uhr)
tantetoni2 ist offline   Mit Zitat antworten Nach oben