Ограничить доступ к серверу только с IP Cloudflare
Приветствую! Как ограничить доступ к серверу и оставить доступ только с 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 адресов будет ограничен.

Автор:






