Das verstehe ich nicht BADIPS=$(egrep -v "^#|^$" $tDB)
. Kannst du es erklären? vollständiger Code:
#!/bin/bash
# Purpose: Block all traffic from AFGHANISTAN (af) and CHINA (CN). Use ISO code. #
# See url for more info - http://www.cyberciti.biz/faq/?p=3402
# Author: nixCraft <www.cyberciti.biz> under GPL v.2.0+
# -------------------------------------------------------------------------------
ISO="af cn"
### Set PATH ###
IPT=/sbin/iptables
WGET=/usr/bin/wget
EGREP=/bin/egrep
### No editing below ###
SPAMLIST="countrydrop"
ZONEROOT="/root/iptables"
DLROOT="http://www.ipdeny.com/ipblocks/data/countries"
cleanOldRules(){
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
}
# create a dir
[ ! -d $ZONEROOT ] && /bin/mkdir -p $ZONEROOT
# clean old rules
cleanOldRules
# create a new iptables list
$IPT -N $SPAMLIST
for c in $ISO
do
# local zone file
tDB=$ZONEROOT/$c.zone
# get fresh zone file
$WGET -O $tDB $DLROOT/$c.zone
# country specific log message
SPAMDROPMSG="$c Country Drop"
# get
BADIPS=$(egrep -v "^#|^$" $tDB)
for ipblock in $BADIPS
do
$IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG"
$IPT -A $SPAMLIST -s $ipblock -j DROP
done
done
# Drop everything
$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST
# call your other iptable script
# /path/to/other/iptables.sh
exit 0
grep '^[^#]'
dieser Regex sollte am Anfang mindestens ein Zeichen erwarten, aber es sollte kein#
Antworten:
^
ist das Sonderzeichen eines regulären Ausdrucks, das zum Markieren des Zeilenanfangs und$
des Zeilenendes verwendet wird. Sie werden verwendet, um den Ausdruck an diesen Punkten zu verankern . Beginnt^#
also jede Zeile mit#
und^$
ist eine leere Zeile (da zwischen Anfang und Ende nichts steht).-v
ingrep
negiert die Übereinstimmung, daher sucht dieser Befehl nach Zeilen, die nicht auskommentiert (nicht mit#
) oder leer sind.quelle
egrep
Sucht nach Dateien, die einem Muster entsprechen.Die
-v
(oder--invert-match
) Option von egrep kehrt den Übereinstimmungssinn um, um nicht übereinstimmende Linien auszuwählen."^#|^$"
Wertet entweder eine leere Zeile oder eine Zeile aus, die mit einem # beginnt, einer Kommentarzeile, die von bash nicht ausgeführt wird. Das Invertieren der Übereinstimmung ergibt Zeilen, die weder Leerzeilen noch Kommentarzeilen sind.$tDB
ist eine Variable, die den Wert der lokalen Zonendatei speichert.Alles in allem werden die fehlerhaften IPs (zu blockierende IPs) in BADIPS gespeichert, in dem die Werte fehlerhafter IPs gespeichert werden, die aus einer Liste lokaler Zonendateien abgerufen wurden.
quelle