Protezione del server Linux. Cosa fare per prima cosa

Protezione del server Linux. Cosa fare per prima cosa
Habib M’henni / Wikimedia Commons, CC BY-SA

Al giorno d'oggi avviare un server su un hosting richiede solo pochi minuti e qualche clic. Tuttavia, subito dopo l'avvio, si trova in un ambiente ostile, aperto a tutto internet come una ragazza innocente a una discoteca rock. Viene rapidamente individuato dai scanner e migliaia di bot automatici che setacciano la rete alla ricerca di vulnerabilità e configurazioni errate. Ci sono alcune cose da fare subito dopo il lancio per garantire una protezione di base.

Contenuto

Utente non root

Per prima cosa bisogna creare un utente non root. Infatti, l'utente root ha privilegi assoluti nel sistema, e se gli consente l'amministrazione remota, si fa metà del lavoro per l'hacker, lasciando a lui un username valido.

Pertanto, è necessario creare un altro utente e disabilitare l'amministrazione remota per root tramite SSH.

Il nuovo utente viene creato con il comando useradd:

useradd [options]

Successivamente, viene aggiunta una password con il comando passwd:

passwd

Infine, questo utente deve essere aggiunto a un gruppo che ha il diritto di eseguire comandi con privilegi elevati sudo. A seconda della distribuzione Linux, questi possono essere gruppi diversi. Ad esempio, in CentOS e Red Hat l'utente viene aggiunto al gruppo wheel:

usermod -aG wheel

In Ubuntu viene aggiunto al gruppo sudo:

usermod -aG sudo

Chiavi invece di password SSH

Il brute force o la fuga di password sono vettori d'attacco comuni, quindi è meglio disabilitare l'autenticazione tramite password in SSH (Secure Shell) e utilizzare invece l'autenticazione tramite chiavi.

Esistono diversi programmi per implementare il protocollo SSH, come lsh e Dropbear, ma il più popolare è OpenSSH. Installazione del client OpenSSH su Ubuntu:

sudo apt install openssh-client

Installazione sul server:

sudo apt install openssh-server

Avvio del demone SSH (sshd) sul server Ubuntu:

sudo systemctl start sshd

Avvio automatico del demone ad ogni avvio:

sudo systemctl enable sshd

Va notato che la parte server di OpenSSH include anche il client. Cioè, tramite openssh-server È possibile connettersi ad altri server. Inoltre, dalla propria macchina client è possibile avviare un tunnel SSH da un server remoto a un host esterno, e allora l'host esterno considererà il server remoto come sorgente delle richieste. È una funzione molto comoda per mascherare il proprio sistema. Per maggiori dettagli, consulta l'articolo «Consigli pratici, esempi e tunnel SSH».

Sulla macchina client di solito non ha senso installare un server completo, per evitare la possibilità di connessioni remote al computer (per motivi di sicurezza).

Quindi, per il tuo nuovo utente devi innanzitutto generare delle chiavi SSH sul computer da cui accederai al server:

ssh-keygen -t rsa

La chiave pubblica viene salvata in un file .pub e appare come una stringa di simboli casuali che inizia con ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Poi, come root, creare una directory SSH nella home del tuo utente e aggiungere la chiave pubblica SSH nel file authorized_keys, utilizzando un editor di testo come Vim:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Infine, impostare i permessi corretti per il file:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

e cambiare la proprietà a questo utente:

chown -R username:username /home/username/.ssh

Dal lato client, è necessario specificare il percorso della chiave segreta per l'autenticazione:

ssh-add DIR_PATH/keylocation

Ora è possibile effettuare il login al server con il nome utente utilizzando questa chiave:

ssh [username]@hostname

Dopo l'autenticazione, è possibile utilizzare il comando scp per copiare file, l'utilità sshfs per montare remote file system o directory.

È consigliabile fare alcune copie di riserva della chiave privata, perché se si disabilita l'autenticazione tramite password e la si perde, non ci sarà alcuna possibilità di accedere al proprio server.

Come accennato sopra, in SSH è necessario disabilitare l'autenticazione per l'utente root (per questo motivo abbiamo creato un nuovo utente).

Su CentOS/Red Hat troviamo la riga PermitRootLogin yes nel file di configurazione /etc/ssh/sshd_config e la modifichiamo:

PermitRootLogin no

Su Ubuntu aggiungiamo la riga PermitRootLogin no nel file di configurazione 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Dopo aver verificato che il nuovo utente si autentica con la propria chiave, è possibile disattivare l'autenticazione tramite password per escludere il rischio di fuga o attacco brute-force. Ora, per accedere al server, un aggressore dovrebbe ottenere la chiave privata.

Su CentOS/Red Hat troviamo la riga PasswordAuthentication yes nel file di configurazione /etc/ssh/sshd_config e la modifichiamo come segue:

PasswordAuthentication no

Su Ubuntu aggiungiamo la riga PasswordAuthentication no nel file 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Per le istruzioni sulla connessione con autenticazione a due fattori tramite SSH vedere. qui.

Firewall

Il firewall garantisce che solo il traffico sulle porte che hai esplicitamente autorizzato raggiunga il server. Questo protegge dall'esploiting di porte che sono state accidentalmente attivate da altri servizi, riducendo notevolmente la superficie di attacco.

Prima di installare il firewall, assicurati che SSH sia nella lista delle eccezioni e non venga bloccato. Altrimenti, dopo l'attivazione del firewall, non saremo in grado di connetterci al server.

Con la distribuzione di Ubuntu viene fornito Uncomplicated Firewall (ufw), mentre con CentOS/Red Hat — firewalld.

Autorizzazione di SSH nel firewall su Ubuntu:

sudo ufw allow ssh

Su CentOS/Red Hat utilizziamo il comando firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Dopo questa procedura, è possibile avviare il firewall.

Su CentOS/Red Hat avviamo il servizio systemd per firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Su Ubuntu utilizziamo il seguente comando:

sudo ufw enable

Fail2Ban

Servizio Fail2Ban analizza i log sul server e conta il numero di tentativi di accesso da ciascun indirizzo IP. Nelle impostazioni sono specificate le regole sul numero di tentativi di accesso consentiti per un determinato intervallo: dopo il quale questo indirizzo IP viene bloccato per un periodo di tempo stabilito. Ad esempio, consentiamo 5 tentativi di autenticazione falliti via SSH in un intervallo di 2 ore, dopo di che blocchiamo questo indirizzo IP per 12 ore.

Installazione di Fail2Ban su CentOS e Red Hat:

sudo yum install fail2ban

Installazione su Ubuntu e Debian:

sudo apt install fail2ban

Avvio:

systemctl start fail2ban
systemctl enable fail2ban

Il programma ha due file di configurazione: /etc/fail2ban/fail2ban.conf e /etc/fail2ban/jail.confLe limitazioni per il ban sono indicate nel secondo file.

Il jail per SSH è abilitato per impostazione predefinita con impostazioni predefinite (5 tentativi, intervallo di 10 minuti, ban di 10 minuti).

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5

Oltre a SSH, Fail2Ban può proteggere anche altri servizi su web server nginx o Apache.

Aggiornamenti di sicurezza automatici

Come è noto, in tutti i programmi vengono costantemente scoperte nuove vulnerabilità. Dopo la pubblicazione delle informazioni, gli exploit vengono aggiunti ai pacchetti di exploit più popolari, che sono utilizzati massicciamente da hacker e giovani durante la scansione di tutti i server consecutivamente. Perciò, è molto importante installare gli aggiornamenti di sicurezza non appena diventano disponibili.

Sul server Ubuntu, per impostazione predefinita, sono attivati gli aggiornamenti automatici di sicurezza, quindi non sono necessarie ulteriori azioni.

Su CentOS/Red Hat è necessario installare l'applicazione dnf-automatic e attivare il timer:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Verifica del timer:

sudo systemctl status dnf-automatic.timer

Cambio delle porte predefinite

SSH è stato sviluppato nel 1995 per sostituire telnet (porta 23) e ftp (porta 21), quindi l'autore del programma, Tatu Ylönen, ha scelto la porta 22 come impostazione predefinita, e questo è stato approvato da IANA.

Naturalmente, tutti gli aggressori sono a conoscenza della porta su cui funziona SSH e la scansionano insieme agli altri porti standard per scoprire la versione del software, verificare le password predefinite di root e così via.

Cambiare le porte standard — offuscare — riduce significativamente il volume del traffico spazzatura, la dimensione dei log e il carico sul server, oltre a ridurre la superficie d'attacco. Anche se alcuni criticano questo metodo come «protezione attraverso l'oscurità» (security through obscurity). Il motivo è che questa tecnica è contraria alla protezione architetturale fondamentale. Ad esempio, il National Institute of Standards and Technology degli Stati Uniti afferma nella «Guida alla sicurezza del server» l'importanza di un'architettura di server aperta: «La sicurezza di un sistema non dovrebbe dipendere dalla segretezza dell'implementazione dei suoi componenti»

, si afferma nel documento. Teoricamente, cambiare le porte predefinite è in contraddizione con la pratica dell'architettura aperta. Ma nella pratica, il volume del traffico malevolo è effettivamente ridotto, rendendo questa una misura semplice ed efficace.

Il numero della porta può essere configurato modificando la direttiva Port 22 nel file di configurazione. /etc/ssh/sshd_configÈ anche specificato dall'opzione -p in sshd. Il client SSH e i programmi sftp supportano anch'essi l'opzione -p.

Caratteristica -p che può essere utilizzata per specificare il numero della porta durante la connessione con il comando ssh su Linux. In sftp e scp si utilizza il parametro -P (P maiuscola). L'indicazione dalla riga di comando sovrascrive qualsiasi valore nei file di configurazione.

Se ci sono molti server, quasi tutte queste operazioni per proteggere un server Linux possono essere automatizzate in uno script. Ma se c'è solo un server, è meglio controllare il processo manualmente.

In pubblicità

Ordina e inizia subito a lavorare! Creazione di VDS di qualsiasi configurazione e con qualsiasi sistema operativo in un minuto. La configurazione massima permetterà di sorprendere completamente con 128 core CPU, 512 GB RAM, 4000 GB NVMe. Epico 🙂

Protezione del server Linux. Cosa fare per prima cosa

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster