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.

Sto usando nginx 1.6.0.

  • Una risposta a monte viene tamponata in un file temporaneo
  • nginx autoindex ricevente 403 Proibito
  • nginx non risponde alla port 81
  • Come tenere aggiornati i programmi dalla fonte?
  • È ansible utilizzare Shibboleth 2 con Nginx + Passenger?
  • Come rende nginx traffico tra gli IP associati a un nome DNS a monte?
  • Regola di riscrivere Nginx per sostituire il punto interrogativo di querystring con il sottolineatura
  • Nginx: rigore della regola per la sottocartella
  • 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.