Добавил: Amro   Дата: 21.06.2022 07:28

Устанавливаем 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