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

Tagi: #<Tag:0x00007f8a30a19c00> #<Tag:0x00007f8a30a19a20> #<Tag:0x00007f8a30a19890>

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. :merchant:

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

Poradnik miesiąca: lipiec 2020

11 polubień

Czyli jak będę sie łączyć przez domenę która ma dns na cloudflare to normalnie zobaczę stronę, strona nie wyświetli sie tylko w tedy kiedy spróbuje sie połączyć BEZPOŚREDNI (BEZ PROXY CLOUDFLARE) z IPv4/IPV6 przy pisanego do VPS/DEDYKA. Dziękuje za odpowiedź

2 polubienia

Dokładnie. Bez użycia proxy cloudflare nikt nie połączy się z serwerem WWW. :slight_smile:

3 polubienia

Cudowny poradnik, dzięki :heart:

5 polubień

Zrobisz poradnik, który współpracowałby z Dockerem?
Ustalanie reguł iptables, gdy Docker jest uruchomiony to istna katorga.

Przy dockerze trochę inaczej to wygląda ale nie jest to dramat czy coś.
Reguły należy umieszczać w łańcuchu DOCKER-USER po starcie dockerd, da się to ogarnąć w miarę prosto przez usługę systemd.

Powiązane:

1 polubienie