Saya tidak mengerti BADIPS=$(egrep -v "^#|^$" $tDB)
. Bisakah Anda menjelaskannya? kode lengkap:
#!/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 '^[^#]'
regex ini harus mengharapkan setidaknya satu char di awal tetapi seharusnya tidak menjadi#
Jawaban:
^
adalah ekspresi reguler karakter khusus yang digunakan untuk menandai awal baris, dan$
menandai akhir baris. Mereka terbiasa menambatkan ekspresi pada titik-titik ini. Begitu^#
juga setiap baris yang dimulai dengan#
, dan^$
merupakan baris kosong (karena tidak ada apa pun antara awal dan akhir).-v
ingrep
meniadakan pertandingan, jadi perintah ini mencari baris yang tidak dikomentari (tidak dimulai dengan#
), atau kosong.sumber
egrep
mencari file yang cocok dengan suatu pola.Opsi
-v
(atau--invert-match
) dari egrep membalikkan indra pencocokan, untuk memilih jalur yang tidak cocok."^#|^$"
mengevaluasi menjadi baris kosong atau baris yang dimulai dengan # yang merupakan baris komentar, yang keduanya tidak dieksekusi oleh bash. Membalikkan pertandingan akan mengevaluasi baris yang bukan baris kosong atau baris komentar.$tDB
adalah variabel yang menyimpan nilai file zona lokal.Menyatukan semuanya IP buruk (IP yang akan diblokir) disimpan dalam BADIPS yang menyimpan nilai IP buruk yang diperoleh dari daftar file zona lokal.
sumber