Разрешение доступа по гео с iptables
Устанавливаем необходимые пакеты:
apt-get -y install iptables-persistent
apt-get -y install ipset
Для постоянности работы ipset необходимо создать службу /etc/systemd/system/ipset-persistent.service
:
[Unit]
Description=ipset persistent configuration
Before=network.target
# ipset sets should be loaded before iptables
# Because creating iptables rules with names of non-existent sets is not possible
Before=netfilter-persistent.service
Before=ufw.service
ConditionFileNotEmpty=/etc/iptables/ipset
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/ipset restore -exist -file /etc/iptables/ipset
# Uncomment to save changed sets on reboot
# ExecStop=/sbin/ipset save -file /etc/iptables/ipset
ExecStop=/sbin/ipset flush
ExecStopPost=/sbin/ipset destroy
[Install]
WantedBy=multi-user.target
RequiredBy=netfilter-persistent.service
RequiredBy=ufw.service
Включаем нашу службу:
systemctl daemon-reload
systemctl enable ipset-persistent.service
systemctl restart ipset-persistent.service
Создаем новую зону содержащую российские подсети:
ipset create "RU_zone" hash:net
for IP in $(wget -O - https://www.ipdeny.com/ipblocks/data/countries/ru.zone); do ipset add "RU_zone" $IP; done
Проверяем, что добавились подсети в зону:
ipset -L RU_zone | less
Для персистентности подсетей сохраняем и подгружаем их из файла:
ipset save > /etc/iptables/ipset
ipset restore < /etc/iptables/ipset
Сохраняем текущие правила iptables:
iptables-save > /root/rules.v4
Добавляем разрешение в нужном месте (определите его самостоятельно) доступа по гео в сохраненном файле /root/rules.v4:
-A INPUT -p tcp -m set --match-set RU_zone src -m tcp --dport 22000 -j ACCEPT
Для персистентности правил сохраняем их:
cp /root/rules.v4 /etc/iptables/rules.v4
Применение новых правил iptables:
iptables-restore < /etc/iptables/rules.v4
Полезная утилита для мониторинга работы iptables - iptstate