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