
, 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 e , ma il più popolare è OpenSSH. Installazione del client OpenSSH su Ubuntu:
sudo apt install openssh-clientInstallazione sul server:
sudo apt install openssh-serverAvvio del demone SSH (sshd) sul server Ubuntu:
sudo systemctl start sshdAvvio 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 .
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_keysvim /home/user_name/.ssh/authorized_keysInfine, impostare i permessi corretti per il file:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keyse cambiare la proprietà su questo utente:
chown -R username:username /home/username/.sshDal lato client è necessario specificare la posizione della chiave segreta per l'autenticazione:
ssh-add DIR_PATH/keylocationOra è possibile accedere al server come utente utilizzando questa chiave:
ssh [username]@hostnameDopo l'autenticazione, è possibile utilizzare il comando scp per copiare file, l'utilità 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.confDopo 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.confLe istruzioni per collegarsi con l'autenticazione a due fattori tramite SSH sono riportate in .
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 (), mentre con CentOS/Red Hat — .
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 --permanentDopo questa procedura, è possibile avviare il firewall.
Su CentOS/Red Hat avviamo il servizio systemd per firewalld:
sudo systemctl start firewalld
sudo systemctl enable firewalldSu Ubuntu utilizziamo questo comando:
sudo ufw enable
Fail2Ban
Servizio 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 fail2banInstallazione su Ubuntu e Debian:
sudo apt install fail2banAvvio:
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 e attivare il timer:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timerVerifica 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 , 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 (security through obscurity). La ragione è che questa tecnica si oppone alla protezione architetturale fondamentale "Guidelines for Server Security" 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 -p sshd. in sftp 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 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! 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 🙂
Fonte: habr.com
