Protezione dell'accesso al server

Cosa starai creando

Grazie alla crescente abbondanza di utili app self-hosted come WordPress e la crescita economica dei provider di hosting cloud, la gestione del proprio server sta diventando sempre più avvincente per un pubblico più ampio. Ma proteggere in modo appropriato questi server richiede una conoscenza abbastanza ampia dell'amministrazione del sistema Linux; questo compito non è sempre adatto per i neofiti. 

Quando ti registri per il tipico account di cloud hosting, riceverai un'email con un account di root, password e indirizzo IP e le istruzioni per accedere tramite SSH sulla porta 22. Ma è importante fare diversi passi aggiuntivi oltre la base accedere alle configurazioni. Quella prima password di root sotto è in realtà solo il punto di partenza per la sicurezza. C'è molto altro da fare.

Questo tutorial fornirà una panoramica degli approcci incrementali comuni per proteggere il tuo tipico server Linux.

Approcci alla sicurezza del server

Per gli scopi di questo tutorial, sto usando una nuova droplet Ubuntu 14.04 da Digital Ocean con la configurazione LAMP; se si desidera seguire la stessa configurazione, qui vengono spiegati i passaggi di configurazione di esempio. 

Una volta mappato il nome di dominio scelto, sei pronto per iniziare. Sto usando http://secure.lookahead.io per il mio esempio.

Puoi accedere al tuo server con SSH: ssh [email protected]. Il server dovrebbe richiedere di cambiare la password durante il primo tentativo di accesso:

Adesso il resto dipende da te. Ecco alcuni approcci comuni per migliorare la sicurezza di accesso del tuo server:

1. Aggiorna i componenti del sistema

In primo luogo, è importante aggiornare regolarmente i componenti del sistema Linux. In genere, quando si accede, Ubuntu ti dirà quanti pacchetti hai bisogno di aggiornare. I comandi per aggiornare i pacchetti sono:

sudo apt-get update sudo apt-get dist-upgrade

La recente vulnerabilità di sicurezza Shellshock rivelata in Bash è un perfetto esempio della necessità di aggiornare regolarmente i file di sistema.

Ogni volta che accedi, Ubuntu ti dirà se ci sono pacchetti e aggiornamenti di sicurezza che possono essere aggiornati.

Se lo desideri, puoi attivare aggiornamenti automatici:

sudo apt-get install unattended-upgrade sudo dpkg-reconfigure aggiornamenti non presidiati 

2. Cambia la tua porta SSH dal valore predefinito

Lasciare l'accesso SSH sulla porta 22 rende più veloce e più facile per gli hacker indirizzare i propri server. Cambiamo la porta SSH predefinita in qualcosa di più oscuro.

Modifica il file di configurazione SSH:

sudo nano / etc / ssh / sshd_config

Passare a un numero di porta diverso, ad esempio:

# Quali porte, IP e protocolli ascoltiamo per Port 33322

Riavvia SSH:

riavvio del servizio sudo sudo

Quindi, disconnettersi e provare ad accedere di nuovo. Dovresti vedere questo messaggio di errore:

ssh [email protected] ssh: connettersi alla porta host secure.lookahead.io 22: Connessione rifiutata

Questa volta, utilizzare il seguente comando SSH, cambiando la porta in 33322: ssh -p 33322 [email protected]. Dovresti essere in grado di accedere correttamente.

3. Attivare un firewall

L'utilizzo di un firewall può aiutare a bloccare l'accesso alle porte lasciate vettori di attacco inutilmente aperti e chiusi; può anche aiutare con la registrazione delle intrusioni tentate.

Se ti capita di utilizzare i servizi cloud Amazon AWS, c'è una bella interfaccia utente web per il suo firewall chiamato gruppi di sicurezza. La console per i gruppi di sicurezza AWS semplifica la disattivazione dell'accesso a tutte le porte tranne la nuova porta SSH e la porta 80 scelte per la navigazione sul Web; puoi vedere un esempio visivo di questo qui:

Se desideri implementare i firewall basati su Linux, puoi studiare ufw e iptables. Anche se è oltre lo scopo di questo tutorial, darò un breve esempio di utilizzo ufw, il "firewall non complicato". 

Innanzitutto, abiliteremo ufw e quindi consentire l'accesso per la nostra porta SSH 33322 e per tutto il traffico http, sulla porta 80. Quindi, negheremo l'accesso sulla porta SSH standard 22.

sudo ufw abilita sudo ufw allow 33322 sudo ufw consenti http sudo ufw deny 22 sudo ufw status

Fai attenzione durante la configurazione ufw, dato che puoi bloccarti da una sessione di console esistente e da tutto il tuo server.

Se si desidera approfondire, il knock-out offre un modo per oscurare completamente la porta di accesso SSH. C'è un tutorial dettagliato per utenti esperti di Justin Ellingwood: Come usare Port Knocking per nascondere il demone SSH degli hacker.

4. Modificare il nome di accesso root

Ora, eliminiamo l'utente di accesso root (o ubuntu su alcuni sistemi) e personalizziamo il login dell'amministratore.

Aggiungeremo un utente chiamato "hal". Sostituisci "hal" con il tuo nome utente preferito negli esempi seguenti:

sudo adduser hal

Aggiungi il tuo nuovo utente al gruppo sudo per gli amministratori:

sudo adduser hal sudo

Aggiungi il tuo nuovo utente al gruppo sudoers. Modifica il file sudoers:

sudo nano / etc / sudoers

Aggiungi questa riga al file sudoers, nella sezione dei privilegi utente:

hal ALL = (TUTTI) NOPASSWD: TUTTI

Modifica nuovamente il file di configurazione SSH:

sudo nano / etc / ssh / sshd_config

Rimuovere l'account root o ubuntu dal AllowUsers campo. Potrebbe inoltre essere necessario aggiungere questa riga se non si trova nel file di configurazione:

AllowUsers hal

Assicurarsi PermitRootLogin è spento:

PermitRootLogin no

Riavvia il servizio:

riavvio del servizio sudo sudo

Esci e prova ad accedere nuovamente come root. Non dovresti essere in grado di Quindi, prova ad accedere come Hal: ssh -p 33322 [email protected]. Questo dovrebbe funzionare bene.

Si noti che alcuni utenti potrebbero voler riavviare SSH, disconnettersi e verificare di poter accedere come Hal prima di disattivare il login di root.

5. Attiva l'autenticazione a due fattori di Google

Ora, aggiungeremo l'autenticazione a due fattori al login del tuo server; in altre parole, quando proviamo ad accedere al server, ci verrà richiesto di fornire un codice sensibile al tempo da un'app sul nostro telefono. 

Per questo esempio, utilizzeremo Google Authenticator. Assicurati di scaricare Google Authenticator dall'app store di iTunes o dal Play Store.

Quindi, dalla tua console del server, installa il pacchetto Google Authenticator:

sudo apt-get install libpam-google-authenticator

Quindi modificheremo il Pluggable Authentication Module (PAM) per SSH per richiedere l'autenticazione a due fattori da Google:

nano /etc/pam.d/sshd

Aggiungi la seguente riga in alto:

auth richiesto pam_google_authenticator.so

Quindi, torna a modificare di nuovo il file di configurazione SSH:

sudo nano / etc / ssh / sshd_config

Cambiare il ChallengeResponseAuthentication a si:

# Passare a yes per abilitare le password di challenge-response (attenzione ai problemi con # alcuni moduli e thread PAM) ChallengeResponseAuthentication yes

Salva la modifica e attiva l'autenticatore:

google-autenticatore

Oltre a visualizzare un codice QR di grandi dimensioni (come mostrato nella parte superiore di questo tutorial), vedrai anche una serie di chiavi di accesso segrete e ti verranno poste alcune domande per personalizzare la configurazione:

Utilizzando l'app Google Authenticator sul telefono, scegli l'icona di modifica penna in alto a destra e aggiungi una nuova voce utilizzando il pulsante in basso. Puoi scansionare il codice QR con la tua fotocamera o inserire la chiave segreta. Una volta completato, Google Authenticator sarà pronto a fornirti i codici per il tuo prossimo accesso.

Stampare una copia di questi codici di emergenza e salvarli in un luogo sicuro, nel caso in cui sia necessario ripristinare il login senza autenticazione a due fattori.

Riavvia nuovamente il servizio SSH e scollegati:

sudo service ssh restart logout

Accedi di nuovo, e questa volta ti verrà chiesto un codice di verifica prima della tua password. Digitare il codice di verifica a sei cifre da Google Authenticator sul telefono:

L'aggiunta dell'autenticazione a due fattori aggiunge un forte livello di sicurezza secondaria al server. Tuttavia, c'è più che possiamo fare.

6. Passare a Utilizzo dei tasti SSH per l'accesso

È consigliabile disattivare l'accesso basato su password del server in favore delle chiavi di sicurezza; le chiavi sono molto più resistenti agli attacchi. Le password sono brevi e soggette agli attacchi del dizionario; le chiavi sono più lunghe e per la maggior parte possono essere compromesse solo dai supercomputer delle agenzie governative.

Per creare la chiave SSH, segui queste istruzioni. Passa alla directory home del tuo nuovo utente:

cd / home / hal

Crea una directory SSH e imposta le autorizzazioni:

mkdir .ssh chmod 700 .ssh

Genera una nuova coppia di chiavi. Quando richiesto, sta a te decidere se aggiungere una password alla chiave:

cd .ssh ssh-keygen -b 1024 -f id_hal -t dsa

Aggiungi la chiave pubblica al authorized_keys file:

cat ~ / .ssh / id_hal.pub> ~ / .ssh / authorized_keys

Imposta le autorizzazioni per il file chiave:

chmod 600 ~ / .ssh / *

Sposta la chiave privata in una cartella temporanea per il download sul tuo computer locale:

cp ~ / .ssh / * / tmp chmod 644 / tmp / *

Scarica la nuova chiave privata sul tuo computer usando il tuo account Ubuntu. Sul tuo computer, usa Terminale:

scp -P 33322 -i ~ / .ssh / id_hal [email protected]: / tmp / * ~ / .ssh

Imposta permessi e test:

cd ~ / .ssh chmod 400 id_hal ssh -p 33322 -i ~ / .ssh / id_hal [email protected]

Se si verificano errori, è possibile provare a guardare il registro sul server AWS mentre si tenta di accedere:

tail -f /var/log/auth.log

Rimuovere i file temporanei della chiave dalla directory tmp del server:

rm -rf / tmp / *

Modifica nuovamente il file di configurazione SSH:

sudo nano / etc / ssh / sshd_config

Disattiva autenticazione password:

PasswordAuthentication no

Riavvia nuovamente il servizio SSH:

riavvio del servizio sudo sudo

Ora, nessuno sarà in grado di accedere al tuo server senza la tua chiave privata. Per accedere al tuo server, usa il seguente comando:

ssh -p 33322 -i ~ / .ssh / id_hal [email protected]

Assicurati di proteggere il computer che stai usando con la chiave privata su di esso; è anche consigliabile memorizzare una copia della chiave privata su un'unità flash da qualche parte fisicamente sicura.

Tieni presente che l'autenticazione a due fattori di Google Authenticator viene aggirata quando si utilizza la sicurezza della chiave SSH.

Inoltre, in caso di blocco del server durante queste configurazioni, DigitalOcean fornisce una console Web che funziona come se una tastiera fosse collegata al server. Per gli altri host, potrebbe essere necessario ottenere aiuto dal proprio team di supporto.

7. Gestisci la sicurezza delle tue applicazioni

Mentre il portale di accesso del tuo server è una seria vulnerabilità, onestamente, le applicazioni che scegli di installare potrebbero comportare rischi ancora più grandi. Ad esempio, recentemente ho letto che l'utilizzo di espressioni regolari protette in modo errato nella tua app PHP può aprire il tuo server agli attacchi ReDoS.

Ma un esempio più comune è la recente vulnerabilità del plugin per WordPress con Slider Revolution. Un tema che avevo installato in realtà in bundle questo plugin, quindi ho dovuto aggiornare il tema per risolvere il bug.

Le vulnerabilità delle applicazioni possono essere difficili da mantenere. Può rendere di nuovo attraente il ritorno all'hosting gestito; non mollare! Fai attenzione alle app che installi, rimani sulle mailing list per i fornitori di codice e mantieni tutto regolarmente aggiornato.

Sii proattivo e fai tutto il possibile per proteggere le tue app. Per esempio, guarda come descrivo l'aggiunta della sicurezza utente di Apache all'installazione della popolare app Web, PHPMyAdmin, che viene utilizzata per semplificare l'accesso e l'amministrazione del database MySQL. Perché solo gli amministratori hanno bisogno di accedere a PHPMyAdmin e le conseguenze della sua violazione sono elevate, aggiungendo un ulteriore livello di sicurezza della password è abbastanza appropriato per questa particolare app.

La sicurezza è una grande preoccupazione e una grande area con cui confrontarsi. Spero tu abbia trovato utile questo tutorial. Non esitate a postare le vostre idee, correzioni, domande e commenti qui sotto. Sarei particolarmente interessato ad approcci alternativi ed estesi. Puoi anche raggiungermi su Twitter @reifman o mandarmi un'email direttamente.