Protezione del server Linux. Cosa fare prima

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

Al giorno d'oggi, creare un server su un hosting è questione di un paio di minuti e pochi clic del mouse. Ma subito dopo il lancio si trova in un ambiente ostile, perché è aperto a tutta Internet come una ragazza innocente in una discoteca rock. Gli scanner lo troveranno rapidamente e rileveranno migliaia di bot con script automatici che perlustrano la rete alla ricerca di vulnerabilità e configurazioni errate. Ci sono alcune cose che dovresti fare subito dopo il lancio per garantire una protezione di base.

contenuto

Utente non root

Il primo passo è creare un utente non root per te stesso. Il punto è che l'utente root privilegi assoluti nel sistema e se gli consenti l'amministrazione remota, allora farai metà del lavoro per l'hacker, lasciandogli un nome utente valido.

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

Un nuovo utente viene avviato dal comando useradd:

useradd [options] <username>

Quindi viene aggiunta una password per esso con il comando passwd:

passwd <username>

Infine, questo utente deve essere aggiunto a un gruppo che ha il diritto di eseguire comandi 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 <username>

In Ubuntu viene aggiunto al gruppo sudo:

usermod -aG sudo <username>

Chiavi invece di password SSH

La forza bruta o le perdite di password sono un vettore di attacco standard, quindi è meglio disabilitare l'autenticazione della password in SSH (Secure Shell) e utilizzare invece l'autenticazione della chiave.

Esistono vari programmi per implementare il protocollo SSH, come ad esempio lsh и Dropbear Drop, ma il più popolare è OpenSSH. Installazione del client OpenSSH su Ubuntu:

sudo apt install openssh-client

Installazione del server:

sudo apt install openssh-server

Avvio del demone SSH (sshd) sul server Ubuntu:

sudo systemctl start sshd

Avvia automaticamente il demone ad ogni avvio:

sudo systemctl enable sshd

Va notato che la parte server di OpenSSH include la parte client. Cioè, attraverso openssh-server puoi connetterti ad altri server. Inoltre, dalla tua macchina client, puoi avviare un tunnel SSH da un server remoto a un host di terze parti, quindi l'host di terze parti considererà il server remoto come l'origine delle richieste. Una funzione molto utile per mascherare il tuo sistema. Vedere l'articolo per maggiori dettagli "Suggerimenti pratici, esempi e tunnel SSH".

Su una macchina client, di solito non ha senso installare un server completo per impedire la possibilità di connessione remota a un computer (per motivi di sicurezza).

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

ssh-keygen -t rsa

La chiave pubblica è memorizzata in un file .pub e sembra una stringa di caratteri casuali che inizia con ssh-rsa.

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

Quindi, da sotto root, crea una directory SSH sul server nella home directory dell'utente e aggiungi la chiave pubblica SSH al 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, imposta i permessi corretti per il file:

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

e cambia la proprietà a questo utente:

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

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

ssh-add DIR_PATH/keylocation

Ora puoi accedere al server con il nome utente usando questa chiave:

ssh [username]@hostname

Dopo l'autorizzazione, è possibile utilizzare il comando scp per copiare i file, l'utility sshfs per montare in remoto un file system o directory.

Si consiglia di eseguire più copie di backup della chiave privata, poiché se si disabilita l'autenticazione della password e la si perde, non sarà possibile accedere al proprio server in alcun modo.

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

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

PermitRootLogin no

Su Ubuntu aggiungi la linea PermitRootLogin no al 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 stia autenticando con la propria chiave, è possibile disabilitare l'autenticazione della password per eliminare il rischio di perdita di password o forza bruta. Ora, per accedere al server, un utente malintenzionato dovrà ottenere una chiave privata.

Su CentOS/Red Hat troviamo la linea PasswordAuthentication yes nel file di configurazione /etc/ssh/sshd_config e modificarlo in questo modo:

PasswordAuthentication no

Su Ubuntu aggiungi la linea PasswordAuthentication no archiviare 10-my-sshd-settings.conf:

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

Per istruzioni su come abilitare l'autenticazione a due fattori tramite SSH, vedere qui.

Firewall

Il firewall garantisce che solo il traffico sulle porte autorizzate direttamente andrà al server. Ciò protegge dallo sfruttamento delle porte abilitate accidentalmente con altri servizi, il che riduce notevolmente la superficie di attacco.

Prima di installare un firewall, è necessario assicurarsi che SSH sia incluso nell'elenco di esclusione e non venga bloccato. Altrimenti, dopo aver avviato il firewall, non saremo in grado di connetterci al server.

La distribuzione Ubuntu viene fornita con Uncomplicated Firewall (Oh), e con CentOS/Red Hat - firewalld.

Consentire SSH nel firewall su Ubuntu:

sudo ufw allow ssh

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

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

Dopo questa procedura, puoi avviare il firewall.

Su CentOS/Red Hat, avvia il servizio systemd per firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Su Ubuntu usiamo 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. Le impostazioni specificano le regole per quanti tentativi di accesso sono consentiti per un determinato intervallo, dopodiché questo indirizzo IP viene bloccato per un determinato periodo di tempo. Ad esempio, consentiamo 5 tentativi di autenticazione SSH falliti entro 2 ore, quindi blocchiamo l'indirizzo IP specificato per 12 ore.

Installazione di Fail2Ban su CentOS e Red Hat:

sudo yum install fail2ban

Installazione su Ubuntu e Debian:

sudo apt install fail2ban

Lanciare:

systemctl start fail2ban
systemctl enable fail2ban

Il programma ha due file di configurazione: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Le restrizioni al divieto sono specificate nel secondo file.

La prigione per SSH è abilitata per impostazione predefinita con le impostazioni predefinite (5 tentativi, intervallo 10 minuti, divieto per 10 minuti).

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

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

Aggiornamenti di sicurezza automatici

Come sapete, in tutti i programmi vengono costantemente rilevate nuove vulnerabilità. Dopo che le informazioni sono state pubblicate, gli exploit vengono aggiunti ai popolari exploit pack, che vengono utilizzati in modo massiccio da hacker e adolescenti durante la scansione di tutti i server di seguito. Pertanto, è molto importante installare gli aggiornamenti di sicurezza non appena vengono visualizzati.

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

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

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

Controllo del timer:

sudo systemctl status dnf-automatic.timer

Modifica delle porte predefinite

SSH è stato sviluppato nel 1995 per sostituire telnet (porta 23) e ftp (porta 21), così l'autore del programma, Tatu Iltonen porta selezionata 22 per impostazione predefinita, ed è stato approvato dalla IANA.

Naturalmente, tutti gli aggressori sanno su quale porta è in esecuzione SSH e la scansionano insieme al resto delle porte standard per scoprire la versione del software, per controllare le password di root standard e così via.

La modifica delle porte standard - offuscamento - riduce più volte la quantità di traffico spazzatura, la dimensione dei registri e il carico sul server e riduce anche la superficie di attacco. Anche se alcuni criticare questo metodo di "protezione attraverso l'oscurità" (sicurezza attraverso l'oscurità). Il motivo è che questa tecnica si oppone al fondamentale protezione architettonica. Pertanto, ad esempio, il National Institute of Standards and Technology degli Stati Uniti in "Guida alla sicurezza del server" indica la necessità di un'architettura server aperta: "La sicurezza di un sistema non dovrebbe basarsi sulla segretezza dell'implementazione dei suoi componenti", afferma il documento.

Teoricamente, la modifica delle porte predefinite è contraria alla pratica dell'architettura aperta. Ma in pratica, la quantità di traffico dannoso è effettivamente ridotta, quindi questa è una misura semplice ed efficace.

Il numero di porta può essere configurato modificando la direttiva Port 22 nel file di configurazione /etc/ssh/sshd_config. È anche indicato dal parametro -p <port> в sshd. Client e programmi SSH sftp supportano anche l'opzione -p <port>.

Parametro -p <port> può essere utilizzato per specificare il numero di porta durante la connessione con il comando ssh su linux. IN sftp и scp parametro viene utilizzato -P <port> (P maiuscola). L'istruzione della riga di comando sovrascrive qualsiasi valore nei file di configurazione.

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

Sui diritti della pubblicità

Ordina e inizia subito! Creazione di VDS qualsiasi configurazione e con qualsiasi sistema operativo in un minuto. La configurazione massima ti consentirà di ottenere il massimo: 128 core della CPU, 512 GB di RAM, 4000 GB di NVMe. Epico 🙂

Protezione del server Linux. Cosa fare prima

Fonte: habr.com