Ограничить доступ к серверу только с IP Cloudflare

Author Автор: Роман Чернышов    Опубликовано: 6 ноября 2024

cloudflare access ip Приветствую! Как ограничить доступ к серверу и оставить доступ только с IP Cloudflare, тема не новая, и уже обсуждалась много раз на различных сайтах, в том числе Хабре и на форумах посвящённых Linux безопасности, но я решил продублировать(в рамках заметки) ее основную суть, чтобы было всегда под рукой(так как на других источниках тема постоянно теряется, переносится, а то и вовсе удаляется). Далее пересказываю суть.

Для чего это может быть полезно? Что-бы отсечь все запросы к серверу и сайту(по протоколам HTTP и HTTPS), идущие в обход Cloudflare и соответственно настроенных на нем правил безопасности, файрволла, кеширования и прочего.

Iptables

Iptables — это стандартный сетевой файрволл, поставляемый в большинство дистрибутивов Linux по умолчанию, с помощью которого можно ограничить доступ к серверу для определенных IP адресов и подсетей.

Подключаемся к серверу по SSH, выполняем команду запрещающую все запросы к серверу по HTTP и HTTPS:

iptables -I INPUT 1 -p tcp -m multiport --dports http,https -j DROP

Cоздаем файл например cloudlare-update.sh, разместив его в директории/root/, со следующим содержимым:

#!/bin/bash
while read ip ; do iptables -D INPUT -p tcp -m multiport --dports http,https -s "$ip" -j ACCEPT ; done <<< "$(curl https://www.cloudflare.com/ips-v4)"
 
while read ip ; do iptables -I INPUT -p tcp -m multiport --dports http,https -s "$ip" -j ACCEPT ; done <<< "$(curl https://www.cloudflare.com/ips-v4)"
 
iptables-save > /etc/rules.v4

Первая строка скачивает список актуальных IP адресов Cloudflare размещенных по URL https://www.cloudflare.com/ips-v4, далее перебирает весь список цикле while и удаляет(как видите указан ключ -D) правила(если они есть) заданные в файрволле Iptables.

Вторая строка делает аналогичные действия первой, но добавляет(как видите указан ключ -I) новые правила в файрволл Iptables(с актуальными IP адресами).

На последней строке сохраняем правила в /etc/rules.v4.

Сохраняем файл /root/cloudlare-update.sh и выставляем права доступа 755(делая его исполняемы), выполнив команду:

chmod 755 /root/cloudlare-update.sh

Cron

Cron — это планировщик заданий, позволяющий настроить выполнение команды в определенное время с определенным интервалом. В нашем случае, планировщик нужен для запуска созданного нами скрипта /root/cloudlare-update.sh, который будет актуализировать список IP от Cloudflare.

Настроим запуск скрипта раз в сутки, в час ночи, для этого в файл /etc/crontab добавляем строку:

0 1 * * * root /root/cloudflare-update.sh &> /dev/null

На этом всё! Доступ к серверу на порты 80 и 443, со всех прочих IP адресов будет ограничен.

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 359₽
Популярные записи
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка