
, 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 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. 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 .
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_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à a questo utente:
chown -R username:username /home/username/.sshDal lato client, è necessario specificare il percorso della chiave segreta per l'autenticazione:
ssh-add DIR_PATH/keylocationOra è possibile effettuare il login al server con il nome utente utilizzando questa chiave:
ssh [username]@hostnameDopo l'autenticazione, è possibile utilizzare il comando scp per copiare file, l'utilità 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.confDopo 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.confPer le istruzioni sulla connessione con autenticazione a due fattori tramite SSH vedere. .
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 (), mentre con CentOS/Red Hat — .
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 --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 il seguente comando:
sudo ufw enable
Fail2Ban
Servizio 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 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.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 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), quindi l'autore del programma, Tatu Ylönen, , 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 (security through obscurity). Il motivo è che questa tecnica è contraria alla . Ad esempio, il National Institute of Standards and Technology degli Stati Uniti afferma nella 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. È anche specificato dall'opzione -p in . Il client SSH e i programmi 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 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! 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 🙂
Fonte: habr.com
