[Poradnik] Ograniczenie połączeń WWW do adresów z puli CloudFlare

Komu to potrzebne? :face_with_raised_eyebrow:

Podany skrypt jest pomocny w sytuacji, kiedy z jakiegoś powodu chcesz ukryć posiadanie serwera www na swoim vpsie lub dedyku przed skanerami typu Shodan, lub osobami, które celowo chcą pominąć firewall CloudFlare.

Składniki do przepisu :man_cook:

  • 60 g mąki, dwa jajka, szczypta soli
  • Serwer WWW na portach 80/443.
  • IPTables, zainstalowany wget/curl oraz pomarańczowa chmurka w panelu CloudFlare :partly_sunny:

Instalacja

Oczywiście sudo można pominąć, jeśli ktoś jest większym kozakiem i leci na roocie. :frowning:

  1. Zacznijmy od pobrania skryptu.
    wget https://gist.githubusercontent.com/Manouchehri/cdd4e56db6596e7c3c5a/raw/be3c3ef3459a39e97aad4e643c9e0992d49cef96/cloudflare.sh

  2. Pora nadać wymagane uprawnienia: sudo chmod +x cloudflare.sh

  3. Ostatni krok to uruchomienie skryptu: sudo ./cloudflare.sh

  4. Gotowe! Efekt można podziwiać wchodząc na adres naszego serwera WWW (adres_ip:80 / adres_ip:443). Próba połączenia zakończy się niepowodzeniem.

Uruchomiłem ponownie VPS, czemu ten skrypt nie działa?!1?!

IPTables domyślnie nie zapamiętuje dodawanych reguł. Najprostszym sposobem na rozwiązanie tego problemu jest dopisanie naszego skryptu do cron’a.

  1. Wpisujemy polecenie sudo crontab -e
  2. Dopisujemy linijkę @reboot sh /lokalizacja/skryptu/cloudflare.sh
  3. Gotowe.

Dlaczego crontab, przecież są lepsze sposoby!

Jasne, jednak cloudflare może zaktualizować pule używanych IP. Chcesz za każdym razem usuwać stare reguły i dodawać nowe? :wink:

Kod skryptu:

# Source:
# https://www.cloudflare.com/ips
# https://support.cloudflare.com/hc/en-us/articles/200169166-How-do-I-whitelist-CloudFlare-s-IP-addresses-in-iptables-

for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -p tcp -m multiport --dports http,https -s $i -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -p tcp -m multiport --dports http,https -s $i -j ACCEPT; done

# Avoid racking up billing/attacks
# WARNING: If you get attacked and CloudFlare drops you, your site(s) will be unreachable. 
iptables -A INPUT -p tcp -m multiport --dports http,https -j DROP
ip6tables -A INPUT -p tcp -m multiport --dports http,https -j DROP
1 polubienie