Skip to content

Разшрешаем к сайту трафик только от CloudFlare и режем подключения с других подсетей

Разшрешаем к сайту трафик только от CloudFlare и режем подключения с других подсетей

Установка ipset

Устаналиваем ipset, если не поставили его ранее

Для Centos

yum install ipset

Для Ubuntu/Debian

apt install ipset

Cоздаём список подсетей с наименованием cloudflare4

ipset create cloudflare4 hash:net
for net in  103.31.4.0/22 103.22.200.0/22 162.158.0.0/15 108.162.192.0/18 173.245.48.0/20 198.41.128.0/17 131.0.72.0/22 190.93.240.0/20 104.16.0.0/12 188.114.96.0/20 141.101.64.0/18 103.21.244.0/22 197.234.240.0/22 172.64.0.0/13; do ipset add cloudflare4 $net;done

Проверяем, что у нас получилось

ipset list cloudflare4

Должно получиться так

Name: cloudflare4
Type: hash:net
Revision: 6
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 1280
References: 0
Members:
131.0.72.0/22
198.41.128.0/17
104.16.0.0/12
173.245.48.0/20
103.21.244.0/22
162.158.0.0/15
197.234.240.0/22
190.93.240.0/20
141.101.64.0/18
103.22.200.0/22
103.31.4.0/22
172.64.0.0/13
188.114.96.0/20
108.162.192.0/18

Объявляем переменную domain, в качестве значения указываем доменное имя сайта, доступ к которому должен быть только у IP из подсетей системы защиты CloudFlare.

domain=example.site

Добавляем фильтрующие правила

Теперь нам нужно добавить правил, что разрешат подключения к сайту с серверов защиты, но заблокируют все остальные подключения.

Правило, пропускающее трафик к сайту с защищаемого домена

iptables -I INPUT 1 -m set --match-set cloudflare4 src -p tcp -m multiport --dports 80,443 -m string --string "${domain}" --algo kmp --to 65535 -j ACCEPT

Правило, режущее все обращения к домену, что прилетают с IP-адресов, что не входят в список подсетей защиты

iptables -I INPUT 2 -p tcp -m tcp -m multiport --dports 80,443 -m string --string "${domain}" --algo kmp --to 65535 -j DROP