Fai richieste di drop nginx per timeout del client di proposito

2

Voglio evitare nginx dall'elaborare le richieste e nascondere il fatto che esiste persino in un determinato IP non rispondendo affatto. Le richieste dovrebbero essere abbandonate e il browser del client dovrebbe scadere autonomamente. È possibile?

La mia ipotesi è che un proxy_pass possa essere d'aiuto, ma non sono sicuro che questo lo farà da solo.

Potrei configurare un return 50x; , ma questo rivelerebbe un server in esecuzione.

    
posta berbt 04.03.2016 - 11:08
fonte

2 risposte

6

Make nginx drop requests to timeout client on purpose

Non è possibile rilasciare richieste HTTP per nascondere il server, indipendentemente dall'utilizzo di nginx o di un altro server. La richiesta HTTP verrà inviata solo dopo aver stabilito la connessione TCP. Questa connessione può quindi essere chiusa solo con o senza risposta. Puoi anche tenerlo aperto in modo che il browser scada, ma ogni connessione aperta ha bisogno di risorse sul server.

È possibile nascondere il server solo per i client in base all'IP di origine, non sul contenuto della richiesta HTTP (ad esempio, URL specifico). Ma questo non si farebbe nel webserver ma nel firewall (iptables, ipfw, pf o qualunque cosa tu abbia).

se la tua intenzione è di infastidire il tipico test dei bot per possibili exploit, puoi provare con un reindirizzamento a un IP o una porta inesistente. Qualsiasi accesso a questa porta potrebbe quindi essere eliminato dal firewall in modo che il bot venga eseguito in un timeout. Lo faccio sul mio sito e nella mia esperienza questo rallenterà i bot perché la maggior parte seguirà felicemente tali reindirizzamenti.

    
risposta data 04.03.2016 - 11:16
fonte
1

Su server che richiedono un accesso limitato, uso semplicemente iptables per limitare l'accesso agli indirizzi IP autorizzati a vedere il sito. Altri indirizzi IP si comporteranno esattamente come vorresti, scadendo come se non ci fosse nulla lì.

Per ogni (gamma di) indirizzo (i) IP consentito, definire ed eseguire:

# /sbin/iptables -A INPUT -p tcp -s $ip --dport 80 -j ACCEPT

(sostituendo $ip con l'IP desiderato (intervallo))

Per IPv6 puoi fare la stessa cosa, tranne eseguire /sbin/ip6tables .

Quindi elimina tutto il resto:

# /sbin/iptables -P INPUT DROP
# /sbin/ip6tables -P INPUT DROP

Assicurati di consentire anche SSH dal tuo IP, oppure ti chiuderai automaticamente se la macchina è remota.

Ricorda anche che per impostazione predefinita, queste regole non sopravvivono al riavvio. Dove salvare le regole differisce anche tra le distribuzioni Linux ma su Debian io uso:

# /sbin/iptables-save > /etc/iptables/rules.v4
# /sbin/ip6tables-save > /etc/iptables/rules.v6
    
risposta data 04.03.2016 - 11:24
fonte

Leggi altre domande sui tag