Komu to potrzebne?
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
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
Instalacja
Oczywiście sudo można pominąć, jeśli ktoś jest większym kozakiem i leci na roocie.
-
Zacznijmy od pobrania skryptu.
wget https://gist.githubusercontent.com/Manouchehri/cdd4e56db6596e7c3c5a/raw/be3c3ef3459a39e97aad4e643c9e0992d49cef96/cloudflare.sh
-
Pora nadać wymagane uprawnienia:
sudo chmod +x cloudflare.sh
-
Ostatni krok to uruchomienie skryptu:
sudo ./cloudflare.sh
-
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.
- Wpisujemy polecenie
sudo crontab -e
- Dopisujemy linijkę
@reboot sh /lokalizacja/skryptu/cloudflare.sh
- 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?
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