Автоматическое обновление IP-Адресов Cloudflare в Nginx: Полное Руководство
Как настроить bash-скрипт и cron для автоматического обновления списка IP-адресов Cloudflare в конфиге Nginx и защитить сервер от прямых атак.
Cloudflare — популярный сервис для защиты веб-сайтов от DDoS-атак, ускорения загрузки страниц и обеспечения безопасности. Если вы используете Cloudflare для вашего сайта, важно, чтобы ваш веб-сервер был настроен на правильное получение реальных IP-адресов пользователей, которые проходят через Cloudflare. В этой статье мы расскажем, как автоматизировать обновление IP-адресов Cloudflare в конфигурационном файле Nginx с помощью скрипта на bash.
Почему Важно Обновлять IP-Адреса Cloudflare
Cloudflare использует множество IP-адресов для предоставления своих услуг. Эти адреса могут меняться, и если ваш сервер не будет обновлять список IP-адресов, он может не корректно определять реальный IP-адрес клиента. Это может привести к проблемам с безопасностью и доступом.
Что Нам Потребуется
Для автоматизации процесса обновления IP-адресов Cloudflare нам понадобятся следующие инструменты:
Bash: для написания скрипта.
Cron: для планирования выполнения скрипта.
Nginx: веб-сервер, который мы будем настраивать.
Шаг 1: Создание Скрипта
Первый шаг — создание bash-скрипта, который будет скачивать текущий список IP-адресов Cloudflare и обновлять конфигурационный файл Nginx.
Откройте терминал и создайте новый файл скрипта:
sudo nano /usr/local/bin/update-cloudflare-ips.shВставьте в файл следующий код:
#!/bin/bashСделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/update-cloudflare-ips.sh
Шаг 2: Настройка Cron для Регулярного Выполнения
Теперь, когда у нас есть скрипт, его нужно настроить для регулярного выполнения, чтобы IP-адреса обновлялись автоматически.
Откройте редактор crontab:
sudo crontab -eДобавьте строку для ежедневного выполнения скрипта. Например, чтобы запускать скрипт каждый день в 3:00 ночи:
0 3 * * * /usr/local/bin/update-cloudflare-ips.shСохраните изменения и выйдите из редактора.
Проверка и Отладка
После настройки скрипта и cron, убедитесь, что всё работает правильно:
Запустите скрипт вручную, чтобы проверить его работу:
sudo /usr/local/bin/update-cloudflare-ips.shПроверьте конфигурацию Nginx:
sudo nginx -tПросмотрите логи на наличие ошибок:
Логи Nginx:
sudo tail -f /Логи Cron:
sudo grep CRON /
Заключение
Автоматическое обновление IP-адресов Cloudflare позволяет вашему серверу всегда иметь актуальный список IP-адресов, что критично для правильной работы защиты и обеспечения безопасности. Следуя описанным шагам, вы сможете настроить автоматическое обновление и поддерживать ваш сервер в актуальном состоянии.
Комментарии (5)
вопрос: вы обновляете конфиг через set_real_ip_from в отдельном файле, который потом инклудите директивой include? у меня geo-модуль плюс realip вместе почему-то конфликтовали, пока не разнёс на два файла cloudflare.conf и упоминание в основном server{}
по инструкции сделал, только добавил проверку nginx -t перед reload — один раз кривой список прилетел (пустой файл из-за таймаута curl к api.cloudflare.com/client/v4/ips), и nginx упал бы на reload без этой проверки. Сейчас в скрипте: curl -s -f, и если код не 0 — выходим без изменений.
столкнулся с тем что после обновления списка nginx -s reload не подхватывал новые set_real_ip_from, помогло только полное systemctl restart nginx. кто-нибудь знает почему reload игнорирует изменения в этой директиве? gzip и location ре-читаются нормально, а тут нет
а зачем вообще каждый раз дёргать https://www.cloudflare.com/ips-v4 по крону, если список меняется от силы пару раз в год? у меня раз в неделю через cron стоит, и то за два года ни разу диапазоны не поменялись фактически. лишняя нагрузка на реалку ради иллюзии автоматизации
добавил бы ещё проверку на ipv6 (ips-v6), в статье только v4 упомянут а половина трафика у нас уже через v6 идёт, без второго списка real_ip определялся неправильно для части юзеров