Вопрос или проблема
Оригинальный заголовок вопроса: “Разрешить только доступ Cloudflare к моему сайту и блокировать все посещения, боты или краулеры по моему IP-адресу”
У меня есть вопрос, я использую Cloudflare DNS на своем домене. Мой VPS 30.xxx.xxx.xxx.xx Порт 4490
Мой IP-адрес VPS был отфильтрован краулерными веб-страницами, и я получаю бот-атаки на свой сервер.
Я думаю о покупке нового VPS и добавлении защиты, которая разрешает только Cloudflare и блокирует все IP-адреса.
Я читал документацию Cloudflare.
Они рекомендуют мне эти опции для добавления IPTABLES на мой сервер
Разрешить только Cloudflare
запретить все остальное
IPTABLE блокировать
Вопрос в том, если я выполню эти шаги, будут ли у меня проблемы с доступом к SSH через мой IP?
Что меня волнует, так это доступ к SSH, и чтобы все посещения разрешались только через Cloudflare, а все остальное, связанное с IP, было заблокировано для посетителей, ботов или краулеров.
Вам нужно добавить свой собственный IP-адрес в список разрешенных IP-адресов.
Другой вариант – настроить взаимную TLS-аутентификацию, где любой желающий подключиться к вашему веб-серверу должен иметь клиентский сертификат. https://developers.cloudflare.com/ssl/origin-configuration/authenticated-origin-pull/ объясняет, как это реализовать с помощью Cloudflare.
Если вы разрешаете доступ только определенным/конкретным субъектам и блокируете все другие запросы к вашему сайту, то белый список IP может быть полезен для блокировки любых нежелательных посещений без разрешения.
Скрипт для добавления необходимых правил iptables и ip6tables, при этом сначала разрешая диапазоны IP Cloudflare
https://ongoingtechnology.blogspot.com/2025/02/script-to-add-required-iptables-and.html
#!/bin/bash
# Разрешить IPv4-адреса Cloudflare
for ip in 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 104.24.0.0/14 172.64.0.0/13 131.0.72.0/22
do
iptables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT
done
# Разрешить IPv6-адреса Cloudflare
for ip in 2400:cb00::/32 2606:4700::/32 2803:f800::/32 2405:b500::/32 2405:8100::/32 2a06:98c0::/29 2c0f:f248::/32
do
ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT
done
# Заблокировать весь остальной входящий HTTP и HTTPS трафик
iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
ip6tables -A INPUT -p tcp -m multiport --dports http,https -j DROP
echo "Правила межсетевого экрана применены: разрешены IP Cloudflare, остальные заблокированы."
Ответ или решение
Позволить доступ к вашему веб-сайту только через Cloudflare и заблокировать все другие запросы — это разумный шаг, особенно если вы столкнулись с атаками ботов и нежелательной активностью на вашем сервере. В этом ответе я подробно объясню, как это можно сделать, ориентируясь на использование IPTABLES и учитывая ваш интерес к обеспечению безопасного доступа к SSH.
Теория
Когда вы используете Cloudflare, вы основательно маскируете свой реальный IP-адрес для внешнего мира, поскольку все запросы сначала направляются на сервер Cloudflare, который затем перенаправляет их на ваш сервер. Это помогает защититься от DDoS-атак, снижает нагрузку на сервер и повышает безопасность. Используя пожарные стены, такие как IPTABLES, вы можете еще больше усилить эту защиту, разрешив доступ к вашему серверу только от определенных IP-адресов, принадлежавших Cloudflare.
Пример
Чтобы реализовать эту конфигурацию, вам нужно добавить правила IPTABLES для разрешения входящего трафика только из диапазонов IP-адресов Cloudflare, а затем заблокировать все остальные входящие HTTP/HTTPS-соединения. Вот пример скрипта, который поможет это сделать:
#!/bin/bash
# Разрешение Cloudflare IPv4 адресов
for ip in 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 104.24.0.0/14 172.64.0.0/13 131.0.72.0/22
do
iptables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT
done
# Разрешение Cloudflare IPv6 адресов
for ip in 2400:cb00::/32 2606:4700::/32 2803:f800::/32 2405:b500::/32 2405:8100::/32 2a06:98c0::/29 2c0f:f248::/32
do
ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $ip -j ACCEPT
done
# Блокировка всех прочих входящих HTTP и HTTPS запросов
iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
ip6tables -A INPUT -p tcp -m multiport --dports http,https -j DROP
echo "Правила файла сетевого экрана применены: IP-адреса Cloudflare разрешены, остальные заблокированы."
Применение
Вы можете скопировать этот скрипт в файл, например, cloudflare.sh
, сделать его исполняемым командой chmod +x cloudflare.sh
и выполнить его с правами суперпользователя (sudo ./cloudflare.sh
). Это добавит необходимые правила в вашу конфигурацию IPTABLES.
Важно помнить о некоторых нюансах:
-
Доступ к SSH: Если ваше соединение по SSH также проходит через Cloudflare, проверьте наличие правил, разрешающих его. Однако если вы подключаетесь напрямую к вашему серверу по IP, добавьте свой IP-адрес в список разрешенных.
-
Обновление IP-адресов Cloudflare: Периодически проверяйте диапазоны IP-адресов Cloudflare на их официальной странице, поскольку они могут изменяться, и обновляйте свой IPTABLES скрипт соответственно.
-
Конфиденциальность: Убедитесь, что ваш VPS всегда доступен для администрирования, даже при строгой фильтрации. Если ваша компания использует статические IP-адреса, добавьте их в сейф-лист.
-
Муни-технология аутентификации на основе TLS: Рассмотрите возможность внедрения взаимной аутентификации TLS, как описано в документации Cloudflare. Это добавит еще один слой безопасности, требуя клиентский сертификат для подключения к вашему серверу.
-
Тестирование: Всегда тестируйте изменения в конфигурации за пределами рабочей среды, чтобы быть уверенным в том, что ваши правила сетевого экрана работают как задумано.
Эти меры значительно снизят риск нежелательного доступа и помогут поддерживать ваш сервер в защищенном состоянии. Используя Cloudflare в качестве посредника, вы сможете настроить безопасное и надежное соединение для всех легитимных запросов.