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 pochi minuti e alcuni clic del mouse. Ma subito dopo il lancio, si trova in un ambiente ostile, perché è aperto a tutto internet come una ragazza innocente in una discoteca rock. Verrà rapidamente individuato da scanner e scoperto da migliaia di bot automatici che vagano in rete alla ricerca di vulnerabilità e configurazioni errate. Ci sono diverse cose da fare subito dopo l'avvio per garantire una protezione di base.

Contenuto

Utente non root

Per prima cosa è necessario creare un utente non root. Il motivo è che l'utente root ha privilegi assoluti nel sistema, e se gli si consente l'amministrazione remota, farete metà del lavoro per un hacker, lasciandogli un nome utente valido.

Quindi, è 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]

Poi, per lui viene impostata 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, possono esserci diversi gruppi. 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 al posto delle password SSH

Brute force o fuga di password sono vettori di attacco standard, quindi è meglio disabilitare l'autenticazione basata su password in SSH (Secure Shell) e utilizzare invece l'autenticazione con chiavi.

Ci sono 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. Vale a dire, attraverso 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 così l'host esterno considererà il server remoto come sorgente delle richieste. È una funzione molto utile per mascherare il proprio sistema. Per maggiori dettagli, consulta l'articolo «Consigli pratici, esempi e tunnel SSH».

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

Quindi, per il proprio nuovo utente, è prima necessario generare delle chiavi SSH sul computer da cui ci si connetterà al server:

ssh-keygen -t rsa

La chiave pubblica viene memorizzata 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

Dopo, come root, creare sul server una directory SSH nella home dell'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à su questo utente:

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

Dal lato client è necessario specificare la posizione della chiave segreta per l'autenticazione:

ssh-add DIR_PATH/keylocation

Ora è possibile accedere al server come utente utilizzando questa chiave:

ssh [username]@hostname

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

È consigliabile fare alcune copie di backup della chiave privata, poiché se si disabilita l'autenticazione tramite password e la si perde, non si avrà più alcuna possibilità di accedere al proprio server.

Come accennato in precedenza, in SSH è necessario disabilitare l'autenticazione per 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 disabilitare l'autenticazione con password per escludere il rischio di fuga o di attacco a forza bruta. Ora, per accedere al server, un potenziale attaccante dovrà 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

Le istruzioni per collegarsi con l'autenticazione a due fattori tramite SSH sono riportate in qui.

Firewall

Il firewall garantisce che solo il traffico permesso possa raggiungere il server tramite le porte che hai esplicitamente autorizzato. Ciò protegge dall'utilizzo di porte che potrebbero essere state attivate accidentalmente con altri servizi, riducendo notevolmente la superficie di attacco.

Prima di installare il firewall, è necessario assicurarsi che SSH sia inserito nell'elenco delle eccezioni e non venga bloccato. Altrimenti, dopo l'attivazione del firewall, non saremo in grado di connetterci al server.

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

Autorizzazione 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 questo comando:

sudo ufw enable

Fail2Ban

Servizio Fail2Ban analizza i log sul server e conteggia il numero di tentativi di accesso da ciascun indirizzo IP. Nelle impostazioni sono specificate le regole su quanti tentativi di accesso sono consentiti in un determinato intervallo — dopo di che l'indirizzo IP in questione viene bloccato per un periodo di tempo stabilito. Ad esempio, consentiamo 5 tentativi di autenticazione SSH falliti in un intervallo di 2 ore, dopo di che blocchiamo l'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.conf. Le limitazioni per il ban sono specificate nel secondo file.

Il jail per SSH è abilitato per impostazione predefinita con le 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 sul server web nginx o Apache.

Aggiornamenti di sicurezza automatici

Come è noto, in tutti i programmi vengono costantemente trovate nuove vulnerabilità. Dopo la pubblicazione delle informazioni, gli exploit vengono aggiunti ai popolari exploit pack, che vengono utilizzati massicciamente da hacker e adolescenti durante la scansione di tutti i server uno dopo l'altro. Perciò, è molto importante installare gli aggiornamenti di sicurezza non appena vengono rilasciati.

Nel server Ubuntu, nella configurazione predefinita, sono attivati gli aggiornamenti automatici di sicurezza, quindi non è necessaria alcuna azione aggiuntiva.

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), perciò l'autore del programma Tatu Iltonen ha scelto la porta 22 come predefinita, ed è stata approvata in IANA.

Naturalmente, tutti i malintenzionati sono a conoscenza della porta su cui funziona SSH — e la scansionano insieme alle altre porte standard, per scoprire la versione del software, per controllare le password predefinite dell'admin e così via.

Cambiare le porte standard — offuscamento — riduce notevolmente il volume del traffico spazzatura, la dimensione dei log e il carico sul server, oltre a ridurre la superficie di attacco. Anche se alcuni criticano questo metodo come "sicurezza tramite oscurità" (security through obscurity). La ragione è che questa tecnica si oppone alla protezione architetturale fondamentale . Perciò, ad esempio, il National Institute of Standards and Technology degli Stati Uniti nel"Guidelines for Server Security" indica la necessità di un'architettura server aperta: "La sicurezza del sistema non dovrebbe dipendere dall'oscurità di implementazione dei suoi componenti", si legge nel documento. Teoricamente, cambiare le porte predefinite contraddice la pratica dell'architettura aperta. Ma nella pratica, il volume del traffico dannoso viene effettivamente ridotto, quindi è una misura semplice ed efficace.

Il numero di porta può essere configurato modificando la direttiva

Port 22 nel file di configurazione. È anche specificato come parametro /etc/ssh/sshd_config-p sshd. in Il client SSH e i programmisftp supportano anch'essi il parametro che può essere usato per specificare il numero di porta durante la connessione tramite il comando sshd..

Parametro sshd. in Linux. In ssh viene utilizzato il parametro supportano anch'essi il parametro e scp -P -P (titolo P). L'indicazione dalla riga di comando sovrascrive qualsiasi valore nei file di configurazione.

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

In base alla pubblicità

Ordina e inizia subito a lavorare! Creazione di VDS qualsiasi configurazione e con qualsiasi sistema operativo in un minuto. La configurazione massima consentirà di spingere al massimo: 128 core CPU, 512 GB di 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