Блокировка IP-адресов в Linux с помощью ipset и iptables

Использование черных списков с iptables и ipset. Другими словами – создание черного списка для ip-адресов, подсетей и сетей, трафик от которых не хотим получать.

Устанавливаем ipset для CentOS

yum install ipset

Вам может понадобиться сначала установить пакет epel-release

Создание черного списка

С помощью установленной утилиты ipset мы создаем новый список для блокировки IP-адресов. Назовем blacklist.

ipset create blacklist hash:ip hashsize 4096

Если вы хотите блокировать на основе сетей, используйте hash: net

После создания черного списка добавляем набор правил в iptables. Это связано с опцией –match-set

iptables -A INPUT -m set --match-set blacklist src -j DROP
iptables -A FORWARD -m set --match-set blacklist src -j DROP

Эти команды добавят черный список в цепочки INPUT и FORWARD.

Блокируем IP-адрес

Добавление фактического IP-адреса в список:

ipset add blacklist 192.228.96.0/20

Чтобы убедиться, что IP заблокирован, выполняем:

ipset list

Вывод:

[root@pbx ~]# ipset list
Name: blacklist
Type: hash:net
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 23920
References: 2
Members:
192.228.96.0/20

Видим, что IP 192.228.96.0/20 указан , как участник черного списка, а значит трафик с ним блокируется.

Проверка и автозагрузка правил

При настройке такого черного списка всегда проверяйте его. Чтобы сохранить и восстановить правила iptables, используйте пакет iptables-persistent. Как видно из названия, это делает правила iptables постоянными при перезагрузках.

yum install iptables-persistent

Чтобы хранить правила ipset, создайте файл службы systemd: /etc/systemd/system/save-ipset-rules.service

[Unit]
Description=ipset persistent rule service
Before=netfilter-persistent.service
ConditionFileNotEmpty=/etc/iptables/ipset

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/ipset -exist -file /etc/iptables/ipset restore
ExecStop=/sbin/ipset -file /etc/iptables/ipset save

[Install]
WantedBy=multi-user.target

Этот скрипт помогает сохранять и восстанавливать правила ipset. Вам может потребоваться создать файл /etc/iptables/ipset

/sbin/ipset -file /etc/iptables/ipset save

Если вы используете IPv6:

ipset create blacklist6 hash:net hashsize 4096 family inet6

И добавляем правило в цепочки iptables:

ip6tables -I INPUT -m set --match-set blacklist6 src -j DROP

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *