Posted by & filed under Linux, Ubuntu.

DMCA.com

Server Security

Appena si compra un vps (virtual private server) ci sono delle precauzioni di sicurezza che vanno prese.

In questo articolo vi spiegherò come rendere il vostro server il più sicuro possibile.

Per poter seguire questa guida è ovviamente necessario avere accesso ssh verso il proprio server.

Non loggarsi come root

Quando si compra un vps si riceve quasi sempre un server con sopra un utente chiamato root. Questo però non significa che noi dobbiamo utilizzare sempre questo utente, anzi è esattamente il contrario.

I sistemi *nix, consentono una profonda gestione degli utenti. E’ dunque consigliabile sfruttare questa capacità della nostra macchina per evitare che qualcuno causi danni.

Andremo quindi a creare un nuovo utente che verrà usato d’ora in avanti per collegarci al server.

Creare un nuovo utente è molto semplice. Basta dare il comando:

adduser nome_utente

Cosi facendo creeremo un nuovo utente chiamato nome_utente.

Aggiungiamo ora il nuovo utente al gruppo degli amministratori di sistema:

usermod -a -G sudo nome_utente

A questo punto chiudiamo la connessione ssh e proviamo a loggarci con il nuovo utente:

ssh [email protected]

Se abbiamo fatto tutto bene ora riusciremo a loggarci con il nuovo utente.

Utilizzare una chiave SSH per l’autenticazione

Fino ad ora ci siamo sempre loggati sul nostro server con username e password. Ma c’è un modo più sicuro per loggarsi: l’autenticazione con chiave SSH.

Per utilizzare questo tipo di autenticazione possiamo configurare tutto manualmente, oppure utilizzare uno script che fa tutto per noi.

Ho già parlato in passato di questo script chiamato ssh-copy-id. Quindi per completare questo passaggio vi rimando a questo mio precedente articolo

Modificare alcune opzioni di login ssh

Per rendere ancora più sicuro il nostro server dobbiamo ora fare 2 cose:

  1. Disabilitare il login con password
  2. Disabilitare la possibilità di loggarci come root

Le opzioni di configurazione per l’accesso ssh sono salvate nel file /etc/ssh/sshd_config. Quindi apriamo questo file e modifichiamo le due seguenti opzioni in questo modo:

PasswordAuthentication no
PermitRootLogin no

Infine non ci resta che riavviare il server ssh:

sudo service ssh restart

Creare un Firewall

E’ ora di configurare un server per limitare le connessioni in ingresso.

Iptables è un potente firewall disponibile su quasi tutte le distribuzioni linux. Useremo proprio iptables in questa guida.

Per controllare lo stato attuale delle connessioni in ingresso date:

sudo iptables -L

Probabilmente avrete un risultato simile a questo:

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

Questo significa semplicemente che sono permesse tutte le connessioni in ingresso e che il nostro firewall non sta filtrando nulla.

Creiamo un nuovo file /etc/iptables.firewall.rules che conterrà tutte le nostre regole.

All’interno di questo file inseriamo la seguente configurazione:

*filter

# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

# Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

# Allow SSH connections
#
# The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Allow ping
-A INPUT -p icmp -j ACCEPT

# Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

Il file è abbastanza chiaro e ben commentato. Quindi non penso ci sia bisogno di una spiegazione dettagliata. Se qualcosa non vi è ben chiara chiedete a zio google.

In ogni caso sappiate che con questa configurazione il firewall bloccherà tutte le connessioni tranne:

  • HTTP (porta 80)
  • HTTPS (porta 443)
  • SSH (porta 22)

Se decidete di aggiungere alcuni servizi, come ad esempio l’FTP, ricordatevi di modificare il file di configurazione del firewall di conseguenza.

Attiviamo ora la nuova configurazione:

sudo iptables-restore < /etc/iptables.firewall.rules

Controlliamo se le nuove regole sono attive:

sudo iptables -L

A questo punto dovreste avere come risultato qualcosa di simile a questo:

Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere 127.0.0.0/8 reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT icmp -- anywhere anywhere
LOG all -- anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROP all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere

Il firewall è ora configurato correttamente, ma ogni volta che riavvieremo il nostro server la configurazione andrà persa.

Per ovviare a questo problema creiamo un file chiamato /etc/network/if-pre-up.d/firewall e inseriamo all’interno di esso il seguente codice:

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall.rules

Da notare che è lo stesso codice che abbiamo eseguito prima.

Per concludere non ci resta che rendere eseguibile il file:

sudo chmod +x /etc/network/if-pre-up.d/firewall

A questo punto il firewall dovrebbe essere finalmente configurato ;)

Installazione e configurazione di Fail2Ban

Fail2Ban è un ottima applicazione per proteggere il vostro sito da attacchi a forza bruta. Questa applicazione monitora i tentativi di login su diversi protocolli (ssh, http, smtp ecc.), e quando nota un numero elevato di tentativi falliti crea una regola temporanea che impedisce ulteriori tentativi provenienti dall’indirizzo ip che sta provando a loggarsi.

Installare Fail2Ban è molto semplice:

sudo apt-get install fail2ban

Di default fail2ban monitora solo gli accessi ssh, ma potete configurarlo come meglio volete.

Per ulteriori informazioni su come configurarlo vi rimando al sito ufficiale.

  • Adriatik Dushica

    Ciao tutto bene? Ma nuovi video su backtrack 5? ;)

    • maurospage

      Al momento non ne sono previsti, in futuro chisa!