Sehr oft kommt es vor, dass mal ein Server unter „Beschuss“ genommen wird oder dass man einen Server nur für bestimmte Länder erreichbar machen möchte. Es gibt Firewall-Lösungen, die diese Features anbieten, diese sind aber meist für den normalen Endkunden kaum erschwinglich.

Es gibt zahlreiche freie Scripte, mit denen man annähernd das gleiche Ergebnis bekommt – nämlich bestimmte Länder anhand der IP-Adresse zu sperren oder zu filtern. Wir möchten hier einmal ein Beispiel für ein solches Script zeigen, welches mit einfachen Mitteln eine brauchbare Lösung produziert. Das Ganze stützt sich auf Informationen und Listen, welche von dem Anbieter IPdeny geliefert werden. Dieser Anbieter erstellt auf Basis der tagesaktuellen Daten aus CIDR Listen, anhand derer man IP-Bereiche Ländern zuordnen kann.

Durch ein einfaches Script kann man so anhand des Länder-ISO-Codes diese IP-Adressen verarbeiten und einfach filtern oder gar komplett sperren.

#!/bin/bash
### Block all traffic from based on country ISO code ###
ISO=“id pk bh tr pf mu sa th kw ae ph mh 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 uuups country block“

# 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

exit 0

Viel Spass beim ausprobieren. Aber denken Sie daran, per iptables kann man sich auch leicht selbst aussperren!