O ile w przypadku webserwera Apache2 wystarczy relatywnie prosta modyfikacja konfiguracji by dalej wszystko działało bez naszej dalszej ingerencji, to w przypadku Nginx „raz na jakiś czas” warto/trzeba zaktualizować listę wykorzystywanych przez Cloudflare adresów IP.
Dlatego sam posiłkuje się skryptem który robi to za mnie, a który właśnie dziś chciałbym Wam przedstawić…
Nginx i automatyczne pobieranie adresów IP Cloudflare
Nie będę tutaj rozpisywał się nad tym dlaczego w ogóle taka operacja jest potrzebna – zainteresowanych odsyłam do wcześniejszego wpisu na ten temat, w którym opisałem „co i dlaczego”.
W tym wpisie będzie tylko o skrypcie który pobiera listę adresów IP należących do Cloudflare i tworzy plik cloudflare.conf, który jest wykorzystywany przez Nginx do „demaskowania” prawdziwych adresów IP użytkowników:
#!/bin/bash
# Skrypt pobiera listę IP używanych przez Cloudflare
# i zapisuje je do pliku zgodnego z Nginx.
# Plik należy zapisać /etc/nginx/conf.d/cloudflare.conf
# i zrestartować Nginx (restart lub reload).
# Skrypt może to zrobić automatycznie (parametr: auto),
# lub dopiero gdy sami zdecydujemy (start bez parametru).
CF_IP4="/tmp/cf_ipv4"
CF_IP6="/tmp/cf_ipv6"
CF_TEMP_IP_LIST="/tmp/cf_temp_ip_list"
CF_NGINX_IP_LIST="/etc/nginx/conf.d/cloudflare.conf"
if [ "$CF_IP4" ]
then
sudo rm $CF_IP4
fi
if [ "$CF_IP6" ]
then
sudo rm $CF_IP6
fi
if [ "$CF_TEMP_IP_LIST" ]
then
sudo rm $CF_TEMP_IP_LIST
fi
sudo wget -U "Download IP4" https://www.cloudflare.com/ips-v4 -O $CF_IP4
sudo wget -U "Download IP6" https://www.cloudflare.com/ips-v6 -O $CF_IP6
echo "# Cloudflare MyRealIP" | sudo tee $CF_TEMP_IP_LIST > /dev/null
while read line; do
echo "set_real_ip_from "$line";"
done < $CF_IP4 | sudo tee -a $CF_TEMP_IP_LIST > /dev/null
while read line; do
echo "set_real_ip_from "$line";"
done < $CF_IP6 | sudo tee -a $CF_TEMP_IP_LIST > /dev/null
echo "real_ip_header CF-Connecting-IP;" | sudo tee -a $CF_TEMP_IP_LIST > /dev/null
echo "real_ip_recursive on;" | sudo tee -a $CF_TEMP_IP_LIST > /dev/null
echo "# /Cloudflare MyRealIP" | sudo tee -a $CF_TEMP_IP_LIST > /dev/null
echo "# $(date +"%Y.%m.%d")" | sudo tee -a $CF_TEMP_IP_LIST > /dev/null
if [ "$1" = "auto" ]
then
echo "AutoMode, start za 10 sekund..."
sleep 10
if [ "$CF_NGINX_IP_LIST" ]
then
sudo rm $CF_NGINX_IP_LIST
fi
sudo cp $CF_TEMP_IP_LIST $CF_NGINX_IP_LIST
sudo service nginx reload
echo "OK"
else
echo "----- PLIK -----"
sudo cat $CF_TEMP_IP_LIST
echo "----- /PLIK -----"
read -p "[Enter] -> Podmiana pliku"
if [ "$CF_NGINX_IP_LIST" ]
then
sudo rm $CF_NGINX_IP_LIST
fi
sudo cp $CF_TEMP_IP_LIST $CF_NGINX_IP_LIST
read -p "[Enter] -> Test Nginx"
sudo nginx -t
echo "Nginx: jeśli OK - 1, jeśli błąd - 0"
read NGINX_RESTART
fi
if [ "$NGINX_RESTART" = "0" ]
then
echo "0: Wyjscie"
exit
fi
if [ "$NGINX_RESTART" = "1" ]
then
echo "1: restart za 10 sekund..."
sleep 10
sudo service nginx reload
fi
exit 0
Skrypt możecie skopiować z “listingu” powyżej, lub – chyba bezpieczniej – pobrać z tego adresu. Ew możecie pobrać do bezpośrednio na serwer za pomocą komendy:
wget https://webinsider.pl/add/download/?link=nginx-cloudflare-autoscript -O /ścieżka/do/zapisania/nginx-cloudflare-autoscript
Skrypt możecie uruchamiać ręcznie „raz na jakiś czas”, lub np. za pomocą systemowego harmonogramu zadań (CRON) proces całkowicie zautomatyzować, dodając parametr „auto”, np. o 3 w nocy:
0 3 * * * root /usr/sbin/nginx-cloudflare-autoscript auto
- Zero Trust od Cloudflare, czyli prosty i bezpieczny sposób na dostęp do lokalnych zasobów z zewnątrz, bez publicznego adresu IP i otwierania portów na routerze - 1970-01-01
- Home Assistant i integracja z IMGW-PIB, czyli tworzymy automatyzację z powiadomieniami bazując na sensorach zagrożenie i alarm powodziowy - 1970-01-01
- Home Assistant 2024.9 i kolejne przydatne nowości w widoku „sekcje”, dzięki którym jeszcze lepiej można dopasować wygląd - 1970-01-01