mar 30 2009
Come bloccare con Iptables nazioni intere
Capita spesso, in siti particolarmente visitati, che parte del traffico sia spam o proveniente da paesi che contestualmente al sito non sono di nostro interesse.
Come faccio a configurare Apache o solo iptables per rifiutare le connessioni solo ad alcuni paesi?
È possibile bloccare il traffico sia con Apache o livello di iptable.
A mio parare consiglio iptables per risparmiare risorse. Per farlo, è necessario ottenere l’elenco delle netblocks per ogni paese. È sufficiente visitare questa pagina e scaricare file di blocco IP sono forniti in formato CIDR.
Il seguente script ci permette di definire quali paesi bloccare :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #!/bin/bash ### Block all traffic from AFGHANISTAN (af) and CHINA (CN). Use ISO code ### 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 |
A questo punto impostiamo nel cronjob l’esecuzione dello script per permettere l’aggiornamento del file countries:
@weekly /path/to/country.block.iptables.sh



















[...] Bloccare intere nazioni con Iptables [...]
[...] hai accesso alla configurazione di Apache ti pu