Securizare SSH
OpenSSH este recomandat pentru autentificarea de la distanta, pentru realizarea backup-urilor, transferului de fisiere la distanta prin scp sau SFTP.
SSH este perfect pentru a pastra confidentialitatea si integritatea datelor schimbate intre doua retele si sisteme. Cu toate acestea, principalul avantaj este autentificarea pe server, prin utilizarea criptografiei cu chei publice.
Fisierele de configurare pentru serviciul si clientul SSH:
/ etc / ssh / sshd_config - fisierul de configurare a serviciului ssh;
/ etc / ssh / ssh_config - fisierul de configurare al clientului ssh;
~ / ssh / - directorul de configurare al utilizatorilor ssh;
~ / .ssh / authorized_keys sau ~ / .ssh / authorized_keys - liste chei publice (RSA sau DSA), care pot fi utilizate pentru a va conecta la contul utilizatorului;
/ etc / nologin - daca acest fisier exista, sshd refuza orice conexiune, cu exceptia root-ului;
/ etc / hosts.allow si / etc / hosts.deny - fisierele ce controleaza listele de acces;
- SSH port-ul implicit: TCP 22.
In scopul de a imbunatati securitatea serviciului OpenSSH, echipa DLSit va prezinta cele mai bune practici de securitate:
1. Dezactivati serviciul SSH
Statiile de lucru si laptop-urile pot functiona fara serviciul ssh. Daca nu se ofera autentificare de la distanta si capabilitati de transfer de fisiere de SSH, dezactivati si scoateti serviciul sshd.
CentOS/RHEL/Fedora Linux - utilizatorul poate dezactiva serviciul ssh cu comanda yum:
#chkconfig sshd off
#yum erase openssh-server
Debian / Ubuntu Linux - utilizatorul poate dezactiva cu comanda cu apt-get :
#apt-get remove openssh-server
Ar putea fi necesara actualizarea iptables pentru eliminarea regulilor ssh.
Sub CentOS/RHEL/Fedora se vor edita fisierele /etc/sysconfig/iptables si /etc/sysconfig/ip6tables.
Reporniti serviciul iptables:
#service iptables restart
#service ip6tables restart
2. Folositi doar Protocolul 2 SSH
Protocolul SSH versiunea 1 (SSH-1) are vulnerabilitati de securitate de tipul „man in the middle”.
SSH-1 este destul de vechi si ar trebui sa fie evitat cu orice pret. La deschiderea fisierului sshd_config asigurati-va ca exista urmatoarea linie:
Protocolul 2
3. Limitarea accesului utilizatorilor SSH
Toate sistemele se pot autentifica prin SSH folosind parole sau chei publice. Uneori va creati un cont de utilizator UNIX/Linux pentru FTP sau e-mail. Vor avea acces complet la instrumentele sistemului, inclusiv compilatoare si limbaje de scripting cum ar fi Perl, Python, care pot deschide porturile de retea si multe altele. Un atacator daca este capabil sa creeze un cont nou pe sistem prin intermediul unui script PHP, acesta nu va reusi sa intre prin ssh, pentru ca nu era in AllowUsers.
Permite numai root, xulescu si popescu pentru utilizarea SSH, adaugand urmatoarea linie in sshd_config:
AllowUsers root xulescu popescu
Puteti permite tuturor utilizatorilor sa se autentifice prin SSH, cu posibilitatea ca anumiti utilizatori sa fie blocati adaugand urmatoarea linie in sshd_config:
DenyUsers xulescu yxulescu zxulescu
4. Configurati intervalul de expirare al sesiunii ssh
Utilizatorul se poate conecta la server prin SSH si puteti seta un interval de expirare al sesiunii, in caz ca veti lasa terminalul deschis pentru a rezolva ceva urgent! Deschideti sshd_config si asigurati-va ca sunt configurate urmatoarele valori:
ClientAliveInterval 300
ClientAliveCountMax 0
Setati un interval in secunde (300 secs = 5 minute). Daca acest interval este depasit fara nici o actiune a utilizatorului asupra serverului prin serviciul sshd , acesta va fi automat deconectat.
5. Dezactiveaza fisierele rhosts
Fisierele utilizatorului sa nu poata fi citite ~ /. Rhosts si ~ /. Shosts. Actualizati sshd_config cu urmatoarele setari:
IgnoreRhosts yes
Dezactivarea accesului nesigur prin intermediul RSH.
6. Dezactiveaza Host-Based Authentication
Pentru a dezactiva autentificarea pe baza de gazda, actualizati sshd_config cu urmatoarea setare:
HostbasedAuthentication no
7. Anuleaza autentificarea ca root prin SSH
Nu este nevoie sa te autentifici ca root prin SSH intr-o retea. Utilizatorii normali pot folosi su sau sudo pentru a obtine nivelul de acces root. Pentru a dezactiva autentificare ca root prin SSH, actualizati sshd_config cu linia urmatoare:
PermitRootLogin no
8. Firewall pe portul SSH
Aveti nevoie de actualizarea iptables sau a fisierului de configurare pentru firewall-ului dvs pentru portul 22.
De obicei, serviciul ssh trebuie sa accepte doar conexiuni de la LAN-ul sau din WAN-uri sigure (daca se mai gasesc!).
Editati fisierul de configurare iptables /etc/sysconfig/iptables (RedHat) pentru a accepta conexiuni doar de la 192.168.1.0/24 si 10.1.1.0/28, introduceti:
-A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
-A INPUT -s 10.1.1.0/28 -m state --state NEW -p tcp --dport 22 -j ACCEPT
9. Schimbarea port-ului SSH si limitarea IP-ului
Default SSH asculta pe toate interfetele disponibile si de la orice adresa IP din LAN (daca nu este un firewall activat). Limitarea si schimbarea portului ssh este obligatorie (scripturi de brute force incearca sa se conecteaze doar pe portul 22). Pentru a avea acces de la IP-urile 192.168.1.7 si 10.1.1.5 pe portul 300, la serviciul ssh se adauga urmatoarele linii:
Port 300
ListenAddress 192.168.1.7
ListenAddress 10.1.1.7
10. Utilizati parole ssh puternice si Passphrase
Este foarte important sa utilizati parole puternice de utilizator si parole-fraza pentru chei. Atacurile brute force se bazeaza pe faptul ca utilizatorii folosesc parole bazate pe dictionar. Puteti obliga utilizatorii sa evite acest tip de parole pentru a nu fi vulnerabili impotriva unui atac brute force sau a instrumentului john ripper pentru a afla parolele slabe.
Mai jos este un generator de parola aleatoriu (se pune in ~ . / bashrc)
genpasswd() {
local l=$1
[ "$l" == "" ] && l=16
tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}
Se ruleaza prin comanda: #genpasswd 16
La iesire vom avea ceva asemanator cu textul din dreapta: GfgCnDV43536vOKvbnV
11. Foloseste autentificare bazata pe chei publice
Utilizati pereche de chei publice/private, cu protectie prin parola pentru cheia privata. A se vedea modul de utilizare de chei de autentificare bazate pe RSA si DSA. Nu folositi niciodata „passphrase” tasta space.
Pentru a interzice in mod explicit autentificare de la distanta de la conturile cu parole goale, actualizati sshd_config cu linia urmatoare:
PermitEmptyPasswords no
13. Limitarea numarului de conexiuni pe portul 22
Urmatorul exemplu va bloca conexiunile , care fac mai mult de 5 incercari de conectare la portul 22 in termen de 60 secunde:
#!/bin/bash
inet_if=eth1
ssh_port=22
$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent --set
$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP
sau
$IPT -A INPUT -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state NEW -m limit --limit 5/min --limit-burst 5 -j ACCEPT
$IPT -A INPUT -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o ${inet_if} -p tcp --sport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT
sau
# $IPT -A INPUT -i ${inet_if} -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 22 -m limit --limit 5/min --limit-burst 5-j ACCEPT