Chi gestisce un server remoto nei log trova spesso tentativi di intrusione da parte di hacker o comunque persone che “smanettando” cercano accessi a funzionalità quali
Di solito utilizzano degli script che scansionano, indirizzi e porte e trovando accesso eseguono una serie di operazioni ripetute…
Questo non vuol dire che abbiano accesso ai nostri servizi… ma oltre ad essere fastidiosi, occupano banda effettuando accessi e richieste ripetute.
In genere tali tentativi provengono da stati quali Cina, Russia, India, Singapore etc…
Se i nostri servizi, non sono rivolti a tali stati è possibile bloccare l’accesso a indirizzi provenienti da un SET di stati indicati come non amici. Vediamo come.
Per prima cosa, dovremmo installare un database contenente la lista di indirizzi associati a stati (Country):
sudo apt-get install geoip-database-contrib -y
Fatto questo, all’interno del file di configurazione di nginx dovremmo aggiungere alcune regole. apriamo il file:
nano /etc/nginx/nginx.conf
ed aggiungiamo all’interno di http {… il codice presente dopo il commento ESCLUSIONE IP:
http{
# Basic Settings
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout65;
types_hash_max_size2048;
# server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
### ESCLUSIONE IP
#######################################
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country{
default no;
IT yes;
DE yes;
}
In questo caso indichiamo l’esclusione di tutti gli indirizzi ad eccezione di quelli provenienti dall’Italia e dalla Germania. Abbiamo dato accesso solo ad alcuni Paesi desiderati.
Se invece volessimo escludere manualmente alcuni paesi dovremmo scrivere:
### ESCLUSIONE IP #######################################
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country{
default yes;
CN no;
RU no;
}
In questo caso, abbiamo definito che tutte le richieste possono essere accolte (default yes) ad eccezione di quelle provenienti dalla Cina e dalla Russia.
Ora nel nostro file server di nginx dovremmo inserire le righe con la condizione if:
server{
listen 80;
server_name x.xxx.xxx.xxx;
charset utf-8;
[...]
if($allowed_country = yes){
set $exclusions1;
}
if($allowed_country = no){
return444;
}
Riavviamonginxcon
systemctl restart nginx
A questo punto dovremmo essere pronti.
Escludendo ad esempio indirizzi provenienti dagli USA potrebbe capitare di trovare nei log una stringa di questo tipo:
66.249.93.6 - -[29/Jun/2018:10:46:13 +0200]"GET /manuale/ HTTP/1.1"4440"-""Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 Google Favicon"
Questo è il googlebot che ha tentato di accedere al manuale di un applicativo, ma si è visto ritornare un 444 dal server.