В интернете множество ресурсов предоставляет списки ip-адресов с которых замечен спам, перебор паролей, вирусная активность. Если по каким-либо объективным причинам (или не объективным) требуется перестраховаться и запретить доступ с таких адресов к своему компьютеру, можно воспользоваться одним из таких ресурсов.
Далее приведу пример скрипта автоматически скачивающего последнюю версию списка «плохих» ip-адресов и блокирующего с таких адресов доступ к вашему компьютеру.
Часть 1. Получаем список потенциально опасных ip-адресов
В качестве источника будем использовать infiltrated.net:
#!/bin/bash
LNAME=iplist
WDIR=/tmp
DRUN=0
wget -qO - http://infiltrated.net/blacklisted > ${WDIR}/${LNAME}
diff -q ${WDIR}/${LNAME}.old ${WDIR}/${LNAME} > /dev/null
if [ $? -eq 0 ]
then
echo "Blocklist has no changes."
else
echo "Blocklist updated."
DRUN=1
cp -f ${WDIR}/${LNAME} ${WDIR}/${LNAME}.old
fi
if [ $DRUN -eq 1 ]
then
cat ${WDIR}/${LNAME} | awk '!/#|[a-z]/&&/./{print ""$1""}' > ${WDIR}/${LNAME}.raw
fi
Эта часть скрипта скачивает последнюю версию списка ip с сайта, проверяет, изменился ли список с момента последней загрузки, и, в случае если список изменился, запускается условие по переменной DRUN, преобразующее список в пригодный для обработки через цикл.
Собственно блокировать ip можно через iptables или iproute. Предпочтительным является последний, но приведу оба.
Часть 2.1. Блокируем с помощью iptables.
В случае блокировки посредством iptables скрипт будет выглядеть примерно так (для блокировки создадим отдельную цепочку «dirty_hosts»):
iptables -D INPUT -i $IFACE -j dirty_hosts
iptables -F dirty_hosts
iptables -X dirty_hosts
iptables -N dirty_hosts
iptables -A INPUT -i $IFACE -j dirty_hosts
for ip in $( cat ${WDIR}/${LNAME}.raw )
do
iptables -A dirty_hosts -s $ip -j DROP
done
Где IFACE — интерфейс смотрящий в интернет.
Часть 2.2. Блокируем с помощью null route.
При блокировке через iproute используется специальный тип роута — черная дыра (blackhole), а скрипт будет выглядеть следующим образом:
ip route flush type blackhole
for ip in $( cat ${WDIR}/${LNAME}.raw )
do
ip route add blackhole ${ip}/32
done
В обоих вариантах (iptables и iproute) перед циклом блокировки идет очистка предыдущего списка.
Да процветает ваша паранойя.