Устанавливаем ipset
apt-get install ipset
Создание списка
ipset -N blacklist nethash
Добавление в список правил
# ipset -A blacklist 5.43.240.0/21 # ipset -A blacklist 5.100.64.0/18 # ipset -A blacklist 5.159.112.0/21
Просмотр списка
# ipset -L blacklist Name: blacklist Type: hash:net Revision: 3 Header: family inet hashsize 1024 maxelem 65536 Size in memory: 16880 References: 0 Members: 5.100.64.0/18 5.43.240.0/21 5.159.112.0/21
Изменение дефолтных настроек при создании больших списков
# ipset create blacklist nethash hashsize 16348 maxelem 131072
Подключение списка к iptables
iptables -A INPUT -m set --match-set blacklist src -j DROP
Скрипт загрузка правил
#!/bin/bash # Удаляем список, если он уже есть #ipset -X blacklist # Создаем новый список #ipset -N blacklist nethash # Скачиваем файлы тех стран, что нас интересуют и сразу объединяем в единый список # wget -O netblack http://www.ipdeny.com/ipblocks/data/countries/{ua,lv,lt,bg,ge,de}.zone echo -n "Загружаем белый список в IPSET..." # Читаем список сетей и построчно добавляем в ipset list=$(cat blacklist) for ipnet in $list do ipset -A blacklist $ipnet done echo "Завершено" # Выгружаем созданный список в файл для проверки состава ipset -L blacklist > w-export
У меня wget выдал ошибку, пришлось вначале вручную качать, потом запускать скрипт выше для автосоздания правил в ipset
wget -O blacklist http://www.ipdeny.com/ipblocks/data/countries/{ua,lv,lt,bg,ge,de}.zone
Затем добавляем в iptables
iptables -A INPUT -m set --match-set blacklist src -j DROP
Если нужно логирование
iptables -A INPUT -m set --match-set blacklist src -j LOG --log-level 4 --log-prefix "Blocked by IPset: " iptables -A INPUT -m set --match-set blacklist src -j DROP
Проверяем правила в iptables
iptables -L INPUT -v -n --line-numbers
Удаляем правило по номеру из iptables
iptables -t filter -D INPUT 5
Где 5 — номер строки в правилах
=====================================
К примеру забаним UA, LV, LT и PL
Качаем
wget -O blackualtlvpl http://www.ipdeny.com/ipblocks/data/countries/{ua,lv,lt,pl}.zone
Создаём ipset список
ipset create blackualtlvpl nethash hashsize 16348 maxelem 131072
Далее формируем скрипт для импорта и заливаем
#!/bin/bash echo -n "Загружаем белый список в IPSET..." # Читаем список сетей и построчно добавляем в ipset list=$(cat blackualtlvpl) for ipnet in $list do ipset -A blackualtlvpl $ipnet done echo "Завершено" # Выгружаем созданный список в файл для проверки состава ipset -L blackualtlvpl > w-export-blackualtlvpl
Добавляем правило в iptables
iptables -A INPUT -m set --match-set blackualtlvpl src -j DROP
Сохранение правил
Важным шагом будет сохранение списка, иначе после ребута все правила пропадут.
создаём папку и фаил для сохранения правил:
mkdir /etc/ipsetsave && touch /etc/ipsetsave/ipset-save
сохраняем список ipset:
ipset -S > /etc/ipsetsave/ipset-save
Тоже самое делаем с iptables. Создаем фаил для сохранения правил:
touch /etc/ipsetsave/iptables-save
сохраняем список:
iptables-save > /etc/ipsetsave/iptables-save
Добавляем ipset и iptables в автозагрузку
nano /etc/rc.local
и перед exit 0 вставляем
cat /etc/ipsetsave/ipset-save | /usr/sbin/ipset -R cat /etc/ipsetsave/iptables-save | iptables-restore
Если у Вас Debian 10 и нет rc.local смотрим тут
comments powered by HyperComments