.htaccess blocca l'accesso quando HTTP_HOST è IP (sicurezza)
Ho avuto molti attacchi al mio server. La maggior parte inizia con una scansione delle vulnerabilità, seguita da ondate di richieste POST.
Presto implementerò Cloudflare (WAF e DDos). Ciò significa che una ricerca DNS sul mio dominio mostrerà l'indirizzo IP di Cloudflare, piuttosto che il mio server. Quindi l'indirizzo IP del mio server sarà nascosto a tale riguardo.
Tuttavia, gli attacchi possono comunque arrivare passando uno per uno attraverso tutti i possibili IP nel mondo. Quando guardo i log del mio server, vedo che succede MOLTO. (Ho 3 IP collegati al mio 1 server e gli stessi identici attacchi avvengono su XXX.XXX.XXX.XX1 poi XXX.XXX.XXX.XX2 poi XXX.XXX.XXX.XX3)
Il mio .htaccess di primo livello è simile a questo:
# deny all POST requests
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteRule .* - [F,L]
</IfModule>
# deny unused request types
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
RewriteRule .* - [F,L]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Domande:
Cosa devo aggiungere in modo che [se HTTP_HOST = XXX.XXX.XXX.XX1 OR HTTP_HOST = XXX.XXX.XXX.XX2 OR HTTP_HOST = XXX.XXX.XXX.XX3] il traffico viene immediatamente bloccato?
Posso mettere questo nuovo codice all'inizio di .htaccess? Romperà ciò che c'è attualmente?
Risposte
Non è necessario controllare l' Hostintestazione per IP specifici, basta controllare quelli Hostche iniziano con una cifra. Ad esempio, all'inizio del .htaccessfile:
RewriteCond %{HTTP_HOST} ^\d
RewriteRule .* - [F]
Non hai bisogno della Lbandiera con F- è implicita.
Inoltre non sono necessari i <IfModule mod_rewrite.c>wrapper aggiuntivi . Lascia quello di WordPress così com'è. (Anche se nemmeno questo è strettamente richiesto.)
Tuttavia, questo tipo di blocchi dovrebbe idealmente essere eseguito a livello di server / vitualhost, non in .htaccess. Configurare un valore predefinito <VirtualHost>che intercetti queste richieste IP indesiderate.
Ad esempio, supponendo che tu stia utilizzando solo VirtualHost basati sul nome, puoi configurare un VirtualHost predefinito (che deve verificarsi prima di tutti gli altri VirtualHost) del modulo:
# Catch all other requests for non-specific hosts. eg IP address access
<VirtualHost _default_>
ServerName default.example.com
<Location />
Require all denied
</Location>
</VirtualHost>
In questo modo vengono rilevate tutte le richieste che non vengono mappate a nessun altro host virtuale "denominato". _default_è semplicemente un alias per *. Come notato sopra, questo <VirtualHost>contenitore deve essere presente prima di tutti gli altri <VirtualHost>contenitori nella configurazione del server. Il fatto che sia definito per primo è ciò che lo rende "predefinito".
La ServerNamedirettiva dovrebbe essere definita come qualcosa di diverso dal nome di un server reale sul tuo sistema. Può essere omesso, ma il server tenterà solo di calcolarlo, il che potrebbe rivelarsi inaffidabile.
Ciò impedisce ai tuoi host virtuali effettivi (che servono il tuo sito Web) di dover gestire queste altre richieste.
# deny all POST requests
Sembra un po 'estremo! Sono sorpreso che il tuo sito funzioni ancora?