Установка ipset
sudo apt install ipset
Создание нового списка
Создание нового списка iplist
ipset -N iplist hash:net ipset create iplist hash:net
Добавление адресов в список
Добавление адреса в список iplist
ipset -A iplist 8.8.8.8 ipset add iplist 8.8.8.8
Чтобы не отображались лишние сообщения при добавлении одинаковых адресов, что такой адрес уже есть, к команде добавляется элемент -exist
ipset -A iplist 8.8.8.8 -exist ipset add iplist 8.8.8.8 -exist
Удаление всех адресов из списка
Удаление всех адресов из списка iplist. Очистка списка.
ipset -F iplist ipset flush iplist
Удаление списка
Удаление списка iplist и его содержимого
ipset -X iplist ipset destroy iplist
Удаление адреса из списка
Удаление адреса из списка iplist
ipset -D iplist 8.8.8.8 ipset del iplist 8.8.8.8
Переименование списка адресов
Переименовать список iplist в newlist. newlist не должен существовать!
ipset -E iplist newlist ipset rename iplist newlist
Поменять местами содержимое списков адресов
Поменять местами содержимое списка iplist и newlist. Фактически переименование обоих списков. Оба списка должны существовать. Можно менять местами списки с совместимым типом данных.
ipset -W iplist newlist ipset swap iplist newlist
Просмотр списков адресов
Просмотр всех списков
ipset -L ipset list
Просмотр технической информации о списках без вывода адресов
ipset -L -terse ipset list -terse
Просмотр адресов списка iplist
ipset -L iplist ipset list iplist
Проверка наличия адреса в списке
Проверка наличия адреса 8.8.8.8 в списке iplist
ipset -T iplist 8.8.8.8 ipset test iplist 8.8.8.8
В зависимости от содержимого списка iplist будет выведено:
если адрес входит в список iplist
8.8.8.8 is in set iplist
если не входит
8.8.8.8 is NOT in set iplist
Добавление ipset в iptables
Разрешаем доступ к серверу с адресов, указанных в списке iplist по SSH (порт tcp 22)
iptables -A INPUT -p tcp -m set --match-set iplist src --dport 22 -j ACCEPT
Разрешаем доступ к серверу с любых адресов, кроме указанных в списке blocklist по HTTP (порт tcp 80)
iptables -A INPUT -p tcp -m set ! --match-set blocklist src --dport 80 -j ACCEPT
где:
- -m set — использовать модуль ipset
- —match-set — перечисление имен используемых списков адресов
- src или dst — проверять адреса списков с адресам источника или назначения
Блокировка по территориальной принадлежности
Чтобы заблокировать доступ с адресов по территориальной принадлежности необходимо создать скрипт, подгружающий списки адресов из GeoIP базы.
ipset -N geoblock nethash for IP in $(wget -O geoblock https://www.ipdeny.com/ipblocks/data/countries/{cn,kr,tw,sg,hk}.zone) do ipset -A geoblock $IP done iptables -A INPUT -m set --match-set geoblock src -j DROP