Вот здесь находим архивчик с базой IP-адресов и их национальной принадлежностью. Далее за нас работает небольшой скрипт:
#!/bin/bashДля определения списка стран, которые надо забанить используется файл, в котором просто перечисляются их коды:
#
TMPDIR=/tmp/geoiptban
IP_BBASE=$TMPDIR/bbase.csv
IP_EBASE=$TMPDIR/ebase.csv
DB_ZIP=$TMPDIR
PERL=/usr/bin/perl
FILE_BCOUNTRY=$1
COUNTRY_DB_URL=http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
mkdir -p $TMPDIR
# Стягиваем и распаковываем базу айпишников.
wget -q -O $DB_ZIP $COUNTRY_DB_URL
unzip -p $DB_ZIP > $IP_BBASE
# Убираем лишние символы из базы, для простоты обработки.
if [ -e "$IP_BBASE" ]
then
cp $IP_BBASE $IP_EBASE
$PERL -pi -e 's/"//g' $IP_EBASE
else
echo "Source ip-base-file not found."
exit 0;
fi
# Обработка базы. Форматируем базу сперва в вид диапазонов ip-адресов, а потом в список подсетей.
# Получившиеся подсети скармливаем iptables'у.
if [ -e "$FILE_BCOUNTRY" ]
then
for country in $(cat ${FILE_BCOUNTRY})
do
grep $country $IP_EBASE | awk -F "," '{print $1," - ",$2}' > $TMPDIR/$country.il
for ((i=1;i<=$(wc -l ${TMPDIR}/${country}.il | awk '{print $1}');i++))
do
ipcalc $(head -n ${i} ${TMPDIR}/${country}.il | tail -n 1) | grep -v deaggregate >> $TMPDIR/$country.nl
done
done
for country_network_list in $(ls ${TMPDIR} | grep nl)
do
for ((i=1;i<=$(wc -l ${TMPDIR}/$country_network_list | awk '{print $1}');i++))
do
iptables -t filter -A INPUT -s $(head -n ${i} ${TMPDIR}/$country_network_list | tail -n 1) -j DROP
done
done
else
echo "List of blocked countries not found."
exit 0;
fi
rm -rf $TMPDIR
[root@gateway ~]# cat country_listЗапускается скрипт очень просто:
RU US GB
[root@gateway ~]# ./geoiptban.sh country_list
И сколько правил получается на среднюю страну?
ОтветитьУдалить[root@gateway geoiptban]# iptables -nvL | grep DROP | wc -l
ОтветитьУдалить2404
Это Польша.