Mediante Misure di Sicurezza Consigliate Per Proteggere i Tuoi Server

Introduzione

Molto spesso, il tuo focus principale sarà sulla creazione e sull’avvio delle tue applicazioni cloud. Come parte del tuo processo di configurazione e distribuzione, è importante integrare misure di sicurezza robuste e approfondite nei tuoi sistemi e applicazioni prima che siano disponibili al pubblico. L’implementazione delle misure di sicurezza descritte in questo tutorial prima della distribuzione delle tue applicazioni assicurerà che ogni software che esegui sulla tua infrastruttura abbia una configurazione di base sicura, invece che misure ad hoc che potrebbero essere implementate dopo la distribuzione.

Questo guida evidenzia alcune misure pratiche di sicurezza che puoi adottare mentre configuri e impostoi la tua infrastruttura server. Questa lista non è esaustiva di tutto ciò che puoi fare per proteggere i tuoi server, ma fornisce un punto di partenza che puoi costruire su. Con il tempo, puoi sviluppare un approcio di sicurezza più personalizzato che soddisfa le specifiche necessità dei tuoi ambienti e applicazioni.

Chiavi SSH

SSH, o secure shell, è un protocollo crittografato utilizzato per amministrare e comunicare con i server. Quando lavori con un server, probabilmente trascorderai la maggior parte del tuo tempo in una sessione di terminale connessa al tuo server tramite SSH. Come alternativa all’accesso basato su password, le chiavi SSH utilizzano crittografia per fornire un metodo sicuro per accedere al tuo server e sono consigliate a tutti gli utenti.

Con le chiavi SSH, viene creata una coppia di chiavi privata e pubblica per lo scopo dell’autenticazione. La chiave privata deve essere mantenuta segreta e sicura dall’utente, mentre la chiave pubblica può essere condivisa. Questo è comunemente noto come crittografia asimmetrica, un modello che potresti trovare in altri contesti.

Per configurare l’autenticazione con chiavi SSH, devi inserire la tua chiave pubblica SSH sul server nella posizione prevista (di solito ~/.ssh/authorized_keys). Per saperne di più su come funziona l’autenticazione basata su chiavi SSH, leggi Comprendere il Processo di Crittografia e Connessione di SSH.

Como le Chiavi SSH Migliorano la Sicurezza?

Con SSH, ogni tipo di autenticazione, compresa l’autenticazione tramite password, è completamente crittografata. Tuttavia, quando le login basate su password sono consentite, gli utenti malintenzionati possono tentare ripetutamente e automaticamente di accedere a un server, specialmente se ha un indirizzo IP pubblico. Anche se ci sono modi per bloccare l’accesso dopo numerosi tentativi falliti da lo stesso IP, e gli utenti malintenzionati saranno limitati nella pratica dalla velocità con cui possono tentare di accedere al vostro server, ogni circostanza in cui un utente può tentare con plausibilità di ottenere accesso al vostro stack tramite attacchi brute force ripetuti costituisce un rischio di sicurezza.

Impostare l’autenticazione tramite chiave SSH consente di disabilitare l’autenticazione basata sulla password. Le chiavi SSH hanno generalmente molti più bit di dati di una password — è possibile creare un hash della chiave SSH da 128 caratteri da una password di 12 caratteri — rendendole molto più difficili da soggettere ad attacchi di forza bruta. Alcuni algoritmi di crittografia sono comunque considerati crackabili cercando di rientrare le hash delle password abbastanza spesso su un computer abbastanza potente. Altri, incluso la chiave RSA predefinita generata dai clienti SSH moderni, non sono ancora considerati plausibili da soggettere ad attacco.

Come Implementare Chiavi SSH

Le chiavi SSH sono il metodo raccomandato per accedere a qualsiasi ambiente server Linux remoto. Un paio di chiavi SSH può essere generato sulla macchina locale utilizzando il comando ssh, e quindi è possibile trasferire la chiave pubblica su un server remoto.

Per impostare le chiavi SSH sul tuo server, puoi seguire Come Impostare le Chiavi SSH per Ubuntu, Debian o CentOS.

Per qualsiasi parte della tua pila che richiede accesso tramite password o che è soggetta ad attacchi di forza bruta, puoi implementare una soluzione come fail2ban sui tuoi server per limitare i tentativi di accedere con le credenziali.

È una pratica consigliata non consentire al root di accedere direttamente tramite SSH. Invece, accedi come utente non privilegiato e poi eleva i privilegi se necessario usando un tool come sudo. Questo approccio alla limitazione delle autorizzazioni si chiama principio dell’autorizzazione minimale. Una volta che hai collegato il tuo server e creato un account non privilegiato che hai verificato funziona con SSH, puoi disabilitare le connessioni root agendo sul file /etc/ssh/sshd_config del tuo server e quindi riavviamo il processo SSH del server con un comando come sudo systemctl restart sshd.

Firewall

Il firewall è un dispositivo o software che controlla come le sue funzionalità sono esposte al network e quale tipo di traffico è consentito all’interno e all’esterno di un determinato server o reti. Un firewall configurato correttamente assicura che solo i servizi che dovrebbero essere disponibili pubblicamente possano essere raggiunti dall’esterno.

Nella maggior parte dei server comuni, diversi servizi potrebbero essere in esecuzione in modo predefinito. Questi possono essere categorizzati nelle seguenti categorie:

  • Servizi pubblici che possono essere accesi da chiunque sulla rete internet, spesso anonimi. Un esempio di questo è il server web che serve il tuo sito web attuale.
  • Servizi privati che dovrebbero essere accesi solo da un gruppo selezionato di account autorizzati o da determinate location. Per esempio, un pannello di controllo del databasecome phpMyAdmin.
  • Servizi interni che dovrebbero essere accesi solo dal server stesso, senza esporre il servizio alla rete internet. Ad esempio, un database che accetta connessioni locali solamente.

I firewall possono garantire che l’accesso ai tuoi software sia limitato secondo le categorie suddette con variazioni di granularità diverse. I servizi pubblici possono essere lasciati aperti e disponibili all’internet, i servizi privati possono essere restriciti basandosi su criteri differenti, come tipi di connessione. Le porte non utilizzate sono bloccate completamente in molte configurazioni.

Come le firewall migliorano la sicurezza?

Anche se i tuoi servizi implementano funzionalità di sicurezza o sono limitati alle interfacce in cui vuoi che operino, una firewall costituisce una base di protezione limitando le connessioni verso e dalla tua infrastruttura prima che il traffico sia gestito dall’applicazione.

Una firewall configurata correttamente restringerà l’accesso a tutto ciò che non sono i servizi specifici che devi mantenere aperti, di solito aperti solo i porti associati a quei servizi. Per esempio, SSH di solito opera su porta 22, mentre l’accesso HTTP/HTTPS attraverso un browser web di solito opera su porte 80 e 443 rispettivamente. Esportare solo un numero limitato di software riduce la superficie di attacco del tuo server, limitando i componenti vulnerabili all’esploitation.

Come implementare le firewall

Esistono molte firewall disponibili per i sistemi Linux, e alcune sono più complesse di altre. In generale, dovresti apportare modifiche alla configurazione della tua firewall solo quando modifichi i servizi in esecuzione sul tuo server. Ecco alcune opzioni per iniziare:

  • UFW, o Uncomplicated Firewall, è installato di default su alcune distribuzioni Linux come Ubuntu. Puoi leggere più dettagli su Come impostare un firewall con UFW su Ubuntu 20.04
  • Se stai usando Red Hat, Rocky, o Fedora Linux, puoi leggere Come impostare un firewall usando firewalld per usare le loro tooling predefinite.

  • Altri software firewall come UFW e firewalld scriveranno le loro regole configurate direttamente in un file chiamato iptables. Per scoprire come lavorare direttamente con la configurazione di iptables, puoi consultare Iptables Essentials: Regole e Comandi Comuni per i Firewall
    . Nota che altri software che implementano le regole dei porti autonomamente, come Docker, scriveranno anche direttamente in iptables e potrebbero entrare in conflitto con le regole che crei con UFW, quindi è utile sapere come leggere una configurazione di iptables in casi come questo.

Nota: Molti provider di host, compreso DigitalOcean, consentono di configurare un firewall come servizio che funziona come livello esterno gestito sui tuoi server nell’ambiente cloud, piuttosto che necessitando di implementarlo direttamente. Queste configurazioni, implementate all’angolo della rete usando tool gestiti, sono spesso meno complicate in pratica, ma possono essere più difficili da scrivere e replicare. Puoi riferire alla documentazione per il firewall cloud di DigitalOcean.Assicurati che la configurazione predefinita del tuo firewall blocca il traffico non conosciuto. In questo modo, ogni nuovo servizio che deploy ti sarà automaticamente esposto al mondo intero. Al contrario, dovrai consentirlo esplicitamente, che farà in modo che tu valutassi come un servizio è eseguito, acceduto e chi dovrebbe poterne usarlo.

Reti VPC

Le reti Virtual Private Cloud (VPC) sono reti private per le risorse dell’infrastruttura. Le reti VPC offrono una connessione più sicure tra le risorse perché le interfacce delle reti sono inaccessibili dall’internet pubblico.

Come i VPC Network migliorano la sicurezza?

Alcuni provider di host possono assegnarti automaticamente un’interfaccia di rete pubblica e una interfaccia di rete privata per le tue istanze in cloud. Disabilitarli la interfaccia pubblica su alcune parti della tua infrastruttura consentirà solo che queste istanze si connessionino tra loro usando le loro interfacce di rete private su una rete interna, che significa che il traffico tra i tuoi sistemi non sarà trattato attraverso l’internet dove potrebbe essere esposto o intercettato.

Attraverso la condizionale esposizione solo pochi gateway dedicati all’accesso internet, anche noti come ingressgateways, come punto di accesso unico tra le risorse della tua rete VPC e l’internet, avrai più controllo e visibilità sul traffico pubblico che viene collegato alle tue risorse. I sistemi di orchestrazione dei contenitori moderni come Kubernetes hanno un concetto ben definito di ingress gateway, perché creano molti interfacce di rete private di default, che devono essere esposte selezionativamente.

Implementare le Reti VPC

Molti provider di infrastruttura in cloud ti consentono di creare e aggiungere risorse alla rete VPC all’interno dei loro datacentri.

Nota: Se utilizzi DigitalOcean e desideri configurare il tuo proprio gateway VPC, puoi seguire il guida Come configurare un Dropletto come gateway VPC per imparare come fare su server basati su Debian, Ubuntu e CentOS.

Configurare manualmente una propria rete privata può richiedere configurazioni avanzate sui server e conoscenze di rete. Un’alternativa al setup di un’area dati personalizzata è l’utilizzo di connessioni VPN tra i tuoi servizi.

VPN e Rete Privata

Un VPN, o rete privata virtuale, è un modo di creare connessioni sicure tra computer remoti e presentarle come se fossero su una rete privata locale. Questo offre un modo di configurare i servizi come se fosse su una rete privata e collegare server remoti tramite connessioni sicure.

Per esempio, le reti private DigitalOcean consentono di configurare i servizi come se fossero su una rete privata e connettersi ai server remoti tramite connessioni sicure.

Come le VPN Rendono più Sicure le Connessioni?

L’uso di VPN è un modo di mappare una rete che solo i tuoi server possono vedere. La comunicazione sarà completamente privata e sicura. Altre applicazioni possono essere configurate per passare il traffico sul’interfaccia virtuale che il software VPN espone. In questo modo, solo i servizi che sono destinati ad essere usati dai client su Internet necessiteranno essere esposti su rete pubblica.

Ciò significa che solo i servizi che devono essere utilizzati dai client su Internet necessitano essere esposti su rete pubblica.

Come implementare VPN

L’utilizzo di reti private di solito richiede di prendere decisioni riguardo alle interfacce di rete quando si deployano per la prima volta i server e di configurare le applicazioni e il firewall per preferire queste interfacce. Invece, il deploy di VPN richiede l’installazione di strumenti aggiuntivi e la creazione di rotte di rete aggiuntive, ma di solito può essere implementato sopra l’architettura esistente. Ogni server in una VPN deve avere i dati di sicurezza e configurazione condivisi necessari per stabilire una connessione VPN. Dopo aver avviato e fatto funzionare la VPN, le applicazioni devono essere configurate per utilizzare il tunnel VPN.

Se state utilizzando Ubuntu o CentOS, potete seguire il tutorial Come impostare e configurare un server OpenVPN su Ubuntu 20.04.

Wireguard
è un’altra popolare implementazione di VPN. Di solito, le VPN seguono lo stesso principio di limitare l’ingresso ai vostri server cloud implementando una serie di interfacce di rete private dietro pochi punti di accesso, ma mentre le configurazioni VPC sono di solito una considerazione infrastrutturale centrale, le VPN possono essere implementate su base più ad-hoc.

Audizione Servizi

Una buona sicurezza comprende l’analisi dei sistemi, la comprensione delle superfici di attacco disponibili e la sicurezza delle componenti nel modo più possibile.

L’audizione servizi è un metodo per sapere quali servizi sono in esecuzione su un determinato sistema, quali porte li stanno utilizzando per la comunicazione e quali protocolli stanno utilizzando quei servizi. queste informazioni possono aiutare a configurare quali servizi dovrebbero essere accessibili al pubblico, impostazioni del firewall, monitoraggio e allarmi.

Come L’Audizione Servizi Migliora la Sicurezza?

Ogni servizio in esecuzione, sia esso interno o pubblico, rappresenta una superficie di attacco estesa per gli utenti malintenzionati. Più servizi si avviano, maggior è la possibilità di una vulnerabilità che colpisce il software.

Una volta che hai una buona idea di quali servizi di rete sono in esecuzione sul tuo computer, puoi iniziare ad analizzare questi servizi. Quando si effettua un audit di servizi, chiediti le seguenti domande riguardo ogni servizio in esecuzione:

  • Deve questo servizio essere in esecuzione?
  • Il servizio è in esecuzione su interfacce di rete che non dovrebbero essere in esecuzione?
  • Il servizio dovrebbe essere legato ad un’interfaccia di rete pubblica o privata?
  • Le mie regole del firewall sono organizzate in modo che passi il traffico legittimo al servizio?
  • Le mie regole del firewall bloccano il traffico che non è legittimo?
  • Ho un metodo per ricevere alert di sicurezza sulle vulnerabilità per ognuno di questi servizi?

Questo tipo di controllo dell’auditoria del servizio deve essere una pratica standard quando si configura ogni nuovo server nell’infrastruttura. Eseguire controlli di auditoria dei servizi ogni pochi mesi aiuterà anche a scoprire i servizi con configurazioni che potrebbero essere cambiate accidentalmente.

Come implementare l’auditing dei servizi

Per auditare i servizi di rete che sono in esecuzione su un sistema, usare il comando ss. Un esempio di comando che mostra il nome del programma, PID e le address utilizzate per la ricezione di traffico TCP e UDP è:

  1. sudo ss -plunt

I parametri p, l, u, n, e t funzionano come segue:

  • p mostra il processo specifico che usa un determinato socket.
  • l mostra solo socket attivamente in ascolto per le connessioni.
  • u include i socket UDP (in aggiunta ai socket TCP).
  • n mostra valori numerici del traffico.
  • t include socket TCP (oltre agli socket UDP).

Riceverai un output simile a questo:

Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3)) tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=69226,fd=6),("nginx",pid=69225,fd=6)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=812,fd=4)) tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=69226,fd=7),("nginx",pid=69225,fd=7))

Le colonne principali che richiedono la tua attenzione sono Netid, Indirizzo Locale:Porta e Nome Processo. Se l’Indirizzo Locale:Porta è 0.0.0.0, allora il servizio accetta connessioni su tutte le interfacce di rete IPv4. Se l’indirizzo è [::], allora il servizio accetta connessioni su tutte le interfacce IPv6. Nell’output di esempio sopra, SSH e Nginx sono entrambi in ascolto su tutte le interfacce pubbliche, sia sulla pila di rete IPv4 che su quella IPv6.

Puoi decidere se vuoi permettere a SSH e Nginx di ascoltare su entrambe le interfacce, o solo su una o l’altra. Generalmente, dovresti disabilitare i servizi che sono in esecuzione su interfacce inutilizzate.

Aggiornamenti Non Supervisionati

Mantenere i tuoi server aggiornati con le patch è necessario per garantire un buon livello di base di sicurezza. I server che eseguono versioni datate e insicure di software sono responsabili della maggior parte degli incidenti di sicurezza, ma gli aggiornamenti regolari possono mitigare le vulnerabilità e prevenire gli attaccanti dal ottenere un punto di appoggio sui tuoi server. Aggiornamenti non supervisionati permettono al sistema di aggiornare la maggior parte dei pacchetti automaticamente.

Come le aggiornamenti non supervisionati migliorano la sicurezza?

L’adozione di aggiornamenti automatici, cioè non supervisionati, riduce il livello di impegno richiesto per mantenere i server sicuri e abbrevia il tempo in cui i server possono essere vulnerabili a errori noti. In caso di una vulnerabilità che colpisce il software sui tuoi server, i tuoi server rimarranno vulnerabili fino a quando non eseguirai gli aggiornamenti. Gli aggiornamenti non supervisionati giornalieri garantiranno che non ti sbagli nessuna delle tue包裹 e che ogni software vulnerabile sia aggiornato appena disponibili le correzioni.

Come implementare aggiornamenti non supervisionati

Puoi fare riferimento a Come tenere aggiornati i server Ubuntu per una panoramica sull’implementazione di aggiornamenti non supervisionati su Ubuntu.

Infrastruttura della chiave pubblica e cifratura SSL/TLS

Infrastruttura di chiave pubblica, ossia PKI, si riferisce ad un sistema progettato per creare, gestire e valutare la validità delle certificazioni per identificare individui e cifrare le comunicazioni. Le certificazioni SSL o TLS possono essere utilizzate per autenticare diverse entità l’una con l’altra. Dopo l’autenticazione, possono anche essere usate per stabilire una comunicazione cifrata.

Come Rendere più Sicuro il PKI?

Creare un Autorita di Certificazione (CA) e gestire i certificati per i tuoi server consente agli enti all’interno della tua infrastruttura di valutare le identità degli altri membri e cifrare il traffico. Questo può prevenire attacchi man-in-the-middle dove un attaccante imita un server nell’infrastruttura per intercettare il traffico.Ogni server può essere configurato per fare affidamento su una autorita di certificazione centrale. Dopo che ogni certificato firmato da questa autorita è implicitamente accettato.

Implementare PKI richiede alcuni passaggi:

Come Implementare il PKI

1. **Creare un’Autorita di Certificazione**: Il primo passaggio consiste nel creare un’autorita di certificazione che sarà responsabile di firmare i certificati.
2. **Gestire le Certificazioni**: Successivamente, devi organizzare e gestire le certificazioni per tutti i server e gli utenti necessari.
3. **Configurare i Server**: Ogni server deve essere configurato per affidarsi ai certificati firmati dalla tua autorita di certificazione centrale.
4. **Valutare le Identità**: Dopo aver implementato la tua infrastruttura di chiave pubblica, ogni entità potrà valutare le identità degli altri membri e cifrare le comunicazioni per evitare attacchi man-in-the-middle.

La configurazione di un’autorità certificatrice e l’installazione di altri infrastrutture pubbliche per la sicurezza possono richiedere molto lavoro iniziale. Inoltre, la gestione dei certificati può creare un carico di amministrazione aggiuntivo quando i nuovi certificati devono essere creati, firmati o revocati.

Per molti utenti, implementare una infrastruttura pubblica di chiavi crittografiche potrebbe significare solo un po’ di lavoro iniziale. Gestire le comunicazioni tra componenti usando un VPN potrebbe essere meglio come misura intermedia finché non arrivate al punto in cui l’infrastruttura PKI è digna degli extra costi di amministrazione.

Se vuoi creare la tua propria autorità certificatrice, puoi riferirsi ai guidi su come impostare e configurare una Autorità Certificatore (CA) in funzione della distribuzione Linux che stai usando.

Conclusione

Le strategie elencate nel presente tutorial sono un riassunto di alcuni passaggi che puoi intraprendere per migliorare la sicurezza dei tuoi sistemi. È importante accorgerti che le misure di sicurezza diminuiscono nell’effettività se vi aspettate troppo a lungo ad implementarle. La sicurezza non deve essere un’opzione dopo il facto e deve essere implementata quando provvedete alla configurazione della tua infrastruttura. Una volta che abbiamo un basamento sicuro da costruire su, potrete cominciare a deployare i servizi e le applicazioni con alcune assicurazioni che si siano sviluppati in un ambiente di sicurezza predefinito.

anche con un’ambiente di sicurezza di partenza, tieni presente che la sicurezza è un processo continuo e iterativo. Sempre assicurati di chiedervi cosa possa significare per la sicurezza qualsiasi cambio, e cosa puoi fare per assicurarti che sempre crei configurazioni e ambienti di sicurezza predefiniti per il tuo software.

Source:
https://www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your-servers