Нужно было срочно сделать блокировку по странам для одного проекта, мне было лень собирать nginx c nginx-module-geoip2 и я не чего лучше не придумал чем сделать блокировку через ipset.
Установка IPSet
Для установки IPSet особо ничего не требуется. Ставим просто из репозитория.
yum install -y ipset ipset-serviceЗапускаем и добавляем в автозагрузку
systemctl daemon-reload systemctl start ipset systemctl enable ipsetСкачиваем файлы тех стран, что нас интересуют и сразу объединяем в единый файл/список.
Доступ сейчас заблокирован из России я скачивал через vpn в штатах.
cd /opt/scripts wget -O netwhite http://www.ipdeny.com/ipblocks/data/countries/{ru,by}.zoneЧерез запятую можно добавлять станы {ru,by,kz,by,uz,kg,am,az,tj}
Теперь ip адреса из файла netwhite
ipset restore < /opt/scripts/netwhiteДобавляем правила iptables с ключом —match-set whitelist:
iptables -A INPUT -i <имя интерфейса> -p tcp --dport 80 -m set --match-set whitelist src -j ACCEPT iptables -A INPUT -i <имя интерфейса> -p tcp --dport 443 -m set --match-set whitelist src -j ACCEPTСмотрим что получилось в правилах командой:
iptables -L INPUT -v -n | grep whitelistА можно это все не делать и просто запустить скрипт.
mcedit /opt/scripts/ipset.shИ добавляем следующее содержимое:
#!/bin/bash # Скачиваем список тех стран, что нас интересуют и сразу объединяем в единый файл # Доступ заблокирован из России закачал через vpn usa # Через запятую можно добавлять станы ru,by,... # cd /opt/scripts # wget -O netwhite http://www.ipdeny.com/ipblocks/data/countries/{ru,by}.zone # Путь до файла NETWHITE_FILE="/opt/scripts/netwhite" # Имя листа для IPSet IPSET_NAME="whitelist" # Проверка установки ipset, ipset-service и iptables-service. if ! command -v ipset &> /dev/null then # если нет ставим yum install -y ipset fi if ! rpm -q ipset-service &> /dev/null then # если нет ставим yum install -y ipset-service fi if ! rpm -q iptables-services &> /dev/null then # если нет ставим :) yum install -y iptables-services fi # Добавляем IP из файла /opt/scripts/netwhite. while read ip; do ipset add $IPSET_NAME $ip done < $NETWHITE_FILE # Добавляем/Заменяем правила в iptables для итересующих нас портов например: 80,443 # скрипт находиться в директории /opt/scripts/iptables.sh # $IPT -A INPUT -i $WAN -p tcp --dport 80 -m set --match-set whitelist src -j ACCEPT # $IPT -A INPUT -i $WAN -p tcp --dport 443 -m set --match-set whitelist src -j ACCEPT # Скрипт делал для Centos 7 и версии ipset: # ipset -v # ipset v7.1, protocol version: 7 # Проверить цепочку входящих # iptables -L INPUT -v -n | grep whitelist # Удалить старые списки # ipset -X whitelistДелаем файл исполняемым:
chmod +x /opt/scripts/ipset.sh