пятница, 29 ноября 2019 г.

Блокирование гадов в iptables по подписке



Пока копался в интернетах на тему блок листов всяких, я нашёл один хороший чёрный список всяких гадов, кои сканируют ресурсы и напичканы всякими плохими ботами. Список этот обновляется регулярно и поставляется любезно в виде списка правил для операционки routerOS. Но тут мне понадобилось получить ровно такой же функционал и на машинках под управлением обычных дистрибутивов GNU Linux. Оговорюсь сразу, что это можно/лучше проделывать на машинках, у которых есть хороший запас по cpu и памяти. Итак, я ставлю для начала на машинку пакет ipset:

sudo apt install ipset

Я написал короткий bash-скрипт, который положил в /opt/blackips/block-black-ips.sh (Будем блочить ТОЛЬКО IPv4):

#!/bin/bash
cd /opt/blackips/
rm drop.malicious.rsc -rf
if wget https://www.squidblacklist.org/downloads/drop.malicious.rsc -O drop.malicious.rsc
then
iptables -D FORWARD -m set --match-set blacklist src -j DROP
iptables -D INPUT -m set --match-set blacklist src -j DROP
iptables -D FORWARD -m set --match-set blacklist src -j DROP
ipset destroy blacklist
#ipset create blacklist hash:ip hashsize 1227600
ipset create blacklist hash:net family inet hashsize 32768 maxelem 300000
iptables -I FORWARD -m set --match-set blacklist src -j DROP
iptables -I INPUT -m set --match-set blacklist src -j DROP
iptables -I FORWARD -m set --match-set blacklist src -j DROP
cat drop.malicious.rsc | grep address= | awk '{print $8}' | sed 's/address=//' > tempips.txt
while read -r line; do
if [[ $line =~ .*:.* ]];
then
  echo "IPv6"
else
  ipset add blacklist "$line";
fi
done < tempips.txt
rm tempips.txt -rf
else
echo 'Error! Can not download black list of ip addresses!'
fi


Теперь добавим его в cron (sudo crontab -e):

# download black list of bad ip's and put them into iptables rules for DROP action
*/12 * * * * /opt/blackips/block-black-ips.sh

Комментариев нет:

Отправить комментарий