Je ne comprends pas BADIPS=$(egrep -v "^#|^$" $tDB)
. Pouvez-vous l'expliquer? code complet:
#!/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 '^[^#]'
ce regex devrait s'attendre à au moins un caractère au début mais il ne devrait pas être un#
Réponses:
^
est le caractère spécial d'une expression régulière utilisé pour marquer le début de la ligne et$
marque la fin de la ligne. Ils sont utilisés pour ancrer l'expression à ces points. Il en^#
va de même pour toute ligne commençant par#
, et^$
est une ligne vide (car il n'y a rien entre le début et la fin).-v
ingrep
annule la correspondance, donc cette commande recherche des lignes qui ne sont pas commentées (ne commençant pas par#
) ou vides.la source
egrep
recherche les fichiers correspondant à un modèle.L' option
-v
(ou--invert-match
) d'egrep inverse le sens de l'appariement pour sélectionner les lignes non appariées."^#|^$"
correspond à une ligne vide ou à une ligne commençant par un # qui est une ligne de commentaire, aucune des deux n'est exécutée par bash. L'inversion de la correspondance se traduit par des lignes qui ne sont ni des lignes vides ni des lignes de commentaire.$tDB
est une variable qui stocke la valeur du fichier de zone locale.En mettant tout cela ensemble, les mauvaises adresses IP (adresses IP à bloquer) sont stockées dans BADIPS qui stocke les valeurs des mauvaises adresses IP obtenues à partir d'une liste de fichiers de zone locale.
la source