Come faccio a negare tutte le richieste non da cloudflare?

Recentemente ho ottenuto attacchi di denial of service da più ips proxy, quindi ho installato cloudflare per evitare questo. Poi ho iniziato a notare che escludono il cloudflare collegandosi direttamente all'indirizzo IP del server e forgiando l'intestazione host.

Qual è il modo più efficace per restituire 403 su connessioni che non sono dagli indirizzi di 18 ip utilizzati da cloudflare?
Ho provato a deny tutti i permessi esplicitamente permessi ips cloudflare, ma questo non funziona da quando l'ho impostato in modo che il CF-Connecting-IP imposta i permessi per allow l'ip.

  • Permesso nginx negato ai file di certificazione per la configuration ssl
  • Perché nginx gzip_http_version è predefinito per HTTP 1.1
  • Utilizzo di una condivisione NTFS montata con nginx
  • Come posso fare Nginx redirect tutte le richieste di file che non esistono a un singolo file php?
  • Il process di lavoratore Nginx è uscito
  • Come posso ottimizzare il nginx? Dallo benchmarking sembra Apache2 sia più veloce per la consegna statica
  • Sto usando nginx 1.6.0.

  • Cloudflare non cache come previsto
  • L'elenco di iptables non persiste durante i riavvii
  • Come aggiungere record dns record su cloudflare
  • Amazon S3 sembra bloccare gli indirizzi IP cloudflare. Come lo aggiusto?
  • Se il cloudflare conosce il contenuto decriptato quando utilizza una connessione https?
  • Impostazione di CloudFlare con la Route 53?
  • 2 Solutions collect form web for “Come faccio a negare tutte le richieste non da cloudflare?”

    Il modo più efficace è un firewall hardware davanti al server. Oppure chiedere al vostro centro dati / fornitore a monte di aiutarti a mitigare l'attacco.

    Bloccare le cose nel server web o iptables può aiutare, ma utilizza ancora la width di banda e le risorse di sistema in modo da attacchi DoS sono ancora possibili. Quello che vuoi è bloccare il traffico fino a livello di upstream ansible, quindi il traffico non raggiunge mai il tuo server e non inondano il tuo collegamento con il resto del mondo. Un firewall hardware può filtrare il traffico molto, molto più veloce del tuo server web e non utilizza risorse di server. Vornetworking che consentano loro di consentire il traffico da cloudflare, nonché il proprio ufficio o altri server per quando è necessario connettersi direttamente.

    Cambiare l'IP del server può anche aiutare – solo cloudflare dovrebbe conoscere il nuovo IP, non pubblicarlo nei record DNS pubblici.

    L'unica soluzione che ho scoperto è che può essere fatto con nginx da solo richiedendo versione nginx 1.9.7 o superiore.

    È ansible utilizzare il module ngx_http_geo_module per identificare e restituire una risposta 403 per qualsiasi ip che non sia il cloudflare ip.

    Utilizzando questo block geo.

     geo $realip_remote_addr $cloudflare_ip { default 0; 103.21.244.0/22 1; 103.22.200.0/22 1; 103.31.4.0/22 1; 104.16.0.0/12 1; 108.162.192.0/18 1; 131.0.72.0/22 1; 141.101.64.0/18 1; 162.158.0.0/15 1; 172.64.0.0/13 1; 173.245.48.0/20 1; 188.114.96.0/20 1; 190.93.240.0/20 1; 197.234.240.0/22 1; 198.41.128.0/17 1; 199.27.128.0/21 1; 2400:cb00::/32 1; 2405:8100::/32 1; 2405:b500::/32 1; 2606:4700::/32 1; 2803:f800::/32 1; 2c0f:f248::/32 1; 2a06:98c0::/29 1; } 

    Puoi quindi aggiungere questo al block di server.

     if ($cloudflare_ip != 1) { return 403; } 

    Quale restituisce un 403 per eventuali connessioni non originarie di un $cloudflare_ip .

    Questo funziona perché sto utilizzando $realip_remote_addr nel block geo che mantiene l'indirizzo originale del client quando utilizza real_ip_header CF-Connecting-IP .

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.