Raspberry, limitare gli accessi indesiderati (fail2ban).

Qualche tempo fa vi avevo parlato di come gestire il vostro raspberry e configurarlo per dare la possibilità di collegarsi remotamente ad esso. In particolare poter associare al vostro raspberry un indirizzo statico all’interno della vostra rete domestica (RaspberryPI, impostare un ip statico).
Questa configurazione risulta essere indispensabile per permettere di associare sul vostro router l’indirizzo ip:porta su cui instradare il traffico.

Questa cosa però espone su internet il vostro sistema, che può essere quindi preso di mira da malintenzionati.

Ma succede veramente? cosa vorranno da me?

Si succede anche a te. Le motivazione sono varie, ma non è argomento di questo articolo.

Ho scritto questo semplice script per cercare di capire effettivamente se anche il mio sistema è  continuamente “sotto attacco”:

#!/bin/sh
# controlla gli ultimi accessi effettuati su questa macchina
clear
echo "*****************************************"
echo "Check Access"
echo "******************************************"
echo " "
echo "*****************************************"
echo "Invalid user"
cat /var/log/auth.log | grep ssh | grep 'Failed password for invalid user'
echo "*****************************************"
echo "User accepted"
cat /var/log/auth.log | grep ssh | grep Accepted

ed il risultato mi ha sorpreso:

*****************************************
Check Access
******************************************

*****************************************
Invalid user
Apr  4 06:37:02 raspberrypi2 sshd[3585]: Failed password for invalid user store from 51.255.37.183 port 59547 ssh2
Apr  4 06:52:40 raspberrypi2 sshd[3603]: Failed password for invalid user student from 51.255.37.183 port 54234 ssh2
..... (altri 450 tentativi di connessione falliti)
Apr  7 03:42:35 raspberrypi2 sshd[25749]: Failed password for invalid user admin from 212.129.26.205 port 52626 ssh2
Apr  7 03:42:39 raspberrypi2 sshd[25753]: Failed password for invalid user user from 212.129.26.205 port 54205 ssh2
Apr  7 05:02:24 raspberrypi2 sshd[25825]: Failed password for invalid user admin from 103.25.133.97 port 45055 ssh2
Apr  7 05:58:38 raspberrypi2 sshd[25885]: Failed password for invalid user ubnt from 94.102.56.238 port 58853 ssh2
Apr  7 07:23:00 raspberrypi2 sshd[26057]: Failed password for invalid user ubnt from 103.25.133.97 port 32841 ssh2
*****************************************
User accepted
Apr  4 09:25:03 raspberrypi2 sshd[15920]: Accepted password for pi from .. port 25481 ssh2
Apr  4 13:24:16 raspberrypi2 sshd[18254]: Accepted password for pi from .. port 39290 ssh2
Apr  5 10:28:08 raspberrypi2 sshd[26854]: Accepted password for pi from .. port 65312 ssh2
Apr  5 14:08:56 raspberrypi2 sshd[24961]: Accepted password for pi from ..5 port 18463 ssh2
Apr  5 14:56:47 raspberrypi2 sshd[4888]: Accepted password for pi from .. port 22898 ssh2
Apr  6 07:52:53 raspberrypi2 sshd[10451]: Accepted password for pi from .. port 37544 ssh2
Apr  6 13:58:04 raspberrypi2 sshd[5022]: Accepted password for pi from .. port 57401 ssh2
Apr  6 14:46:01 raspberrypi2 sshd[21900]: Accepted password for pi from .. port 60872 ssh2
Apr  7 09:09:09 raspberrypi2 sshd[3571]: Accepted password for pi from .. port 13495 ssh2

Come potete vedere dal report, i tentativi di connessione negli ultimi 4 giorni son stati quasi 500 e sul mio sistema ho già attivato un sistema che limita i tentativi di connessione prolungati che vi spiegherò nella continuazione dell’articolo.
Sistemi automatici cercano su internet ip attaccabili e poi provano a collegarsi a questi sistemi usando possibili utenti con dizionari di password.

Quindi i seguenti consigli valgono sempre:

  • esporre all’esterno solo i servizi indispensabili (se non vi serve un web server, un database, ecc, non instalateli e non esponeteli su internet);
  • configurare sul vostro sistema solo gli utenti che vi servono;
  • utilizzare password solide (presto scriverò un articolo per sul discorso password, stay tuned);
  • tenete aggiornato il vostro sistema così da installare regolarmente patch di sicurezza (questo vale su tutti i sistemi linux, windows, mac, android, ecc).

Ora passiamo alla configurazione di un primo sistema per limitare gli accessi al vostro sistema: fail2ban.

La funzione principale di Fail2ban è quella di bloccare gli indirizzi IP selezionati che potrebbero appartenere a dei computers che stanno tentando di violare la sicurezza del sistema. Determina i server che devono essere bloccati da un controllo dei file di log (per esempio /var/log/auth.log, ecc) e proibisce l’accesso dagli IP degli host che hanno troppi tentativi di accesso indesiderato.

Per prima cosa occorre installarlo sul vostro sistema, con il seguente comando:

sudo apt-get install fail2ban

Una volta installato occorre configurarlo facendo una copia “.local” del file di configurazione.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Quindi editandone il contenuto con il comando:

sudo nano /etc/fail2ban/jail.local

Questo è un estratto del mio file di configurazione.

...
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1/8
bantime  = 36000
maxretry = 6
...
[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6
...
[proftpd]
enabled  = false
port     = ftp,ftp-data,ftps,ftps-data
filter   = proftpd
logpath  = /var/log/proftpd/proftpd.log
maxretry = 6
...

Questa è la descrizione dei parametri che troviamo:

PARAMETRO	DESCRIZIONE
ignoreip	Lista di IP da ignorare, IP possono essere inseriti con il netmask /24 per esempio
bantime	        Tempo in secondi per il quale non accettiamo piu connessioni dal HOST
findtime	Tempo di reset dei tentativi, dopo X secondi il contatore del retry è resettato
maxretry	Numero di tentativi massimo in un intervallo findtime
action	        Cosa fare quando si raggiunge il maxretry, normalmente si blocca la porta a quel IP
port	        Il servizio o meglio la porta che usa quel servizio che vogliamo controllare
filter	        La regola di filtro che applichiamo ai log in /etc/fail2ban/filter.d
logpath	        Naturalmente il log da monitorare e ricordiamoci di attivare il daemon per scrivere le info necessarie

Per esempio, osservando la sesione “SSH” si evince che verifica il log /var/log/auth.log utilizzando il filtro che si chiama sshd e se trova 6 tentativi di attacco chiude la porta 22 (azione di default).
Nella sezione “PROFTP” invece il filtro non è attivo.

Una volta configurato, il servizio va lanciato con il comando:

sudo /etc/init.d/fail2ban start

A questo punto, occorre aspettare qualche ora e poi verificare che il sistema stia facendo il suo lavoro. Per controllare, basta osservare il contenuto del log del servizio con questo comando:

tail -f /var/log/fail2ban.log

che da come risultato questo:

...
2016-04-07 01:02:49,796 fail2ban.actions: WARNING [ssh] Ban 104.238.164.8
2016-04-07 01:03:23,917 fail2ban.actions: WARNING [ssh] Unban 125.212.232.59
2016-04-07 01:52:00,831 fail2ban.actions: WARNING [ssh] Unban 222.186.56.138
2016-04-07 02:20:13,158 fail2ban.actions: WARNING [ssh] Unban 183.3.202.120
2016-04-07 02:28:06,823 fail2ban.actions: WARNING [ssh] Ban 183.3.202.120
2016-04-07 02:33:36,288 fail2ban.actions: WARNING [ssh] Unban 125.212.232.61
2016-04-07 02:58:05,262 fail2ban.actions: WARNING [ssh] Ban 222.186.56.46
2016-04-07 03:35:07,228 fail2ban.actions: WARNING [ssh] Unban 40.76.83.187
2016-04-07 05:02:57,161 fail2ban.actions: WARNING [ssh] Unban 5.44.100.114
2016-04-07 09:45:04,323 fail2ban.actions: WARNING [ssh] Ban 195.154.56.55
...

come potete vedere dal log il sistema banna automaticamente gli ip che soddisfano le regole impostate nei filtri del file di configurazione e dopo il tempo impostato viene eliminato il ban dall’ip.

Vi lascio con un quesito: avete provato a cercare chi vuole entrare nel vostro sistema? Un piccolo aiutino: cliccate su WhoIs e cercate gli ip bloccati.