sshObradićemo neke default radnje koje vi kao admin treba da odradite kad je u pitanju zaštita remote pristupa Linux serveru putem SSH.

SSH (Secure Shell) je mrežni protokol koji korisnicima omogućava uspostavljanje sigurnog komunikacijskog kanala između dva računara putem nesigurne računarske mreže. Više o SSH pročitajte na domaćoj Wikipediji.

Serveru ćemo pristupati sa Windows mašine preko programa koji se zove PuTTY jer je, na osnovu mog iskustva i onog što mi admini vele – to default pristup Linux mašinama.

Promena default SSH porta na serveru

Default port za logovanje na server putem SSH protokola je 22 i uljezi koji bi da dobiju pristup vašem serveru većinom slučajeva prvo skeniraju pa kasnije i brutforsuju taj port i zato je jedna od default radnji gašenje tog porta i otvaranje nekog wtf porta za pristup.

U ovom slučaju otvorićemo port 53535 – i to je ujedno moja preporuka…da svi ti custom portovi budu u opsegu 50000-65535 kako bi se dodatno otežao posao malicioznim korisnicima jer će tad izgubiti dodatno vreme za skeniranje otvorenih portova nmap-om.

Takođe, sama promena default ssh porta uz dobru firewall zaštitu (koju ćemo obraditi u nekom narednom tekstu) jeste indikator malicioznim korisnicima da je server najverovatnije obezbeđen od strane stručnog lica pa ih i to može odbiti od dalje akcije.

Za promene default porta ulogujte se na server kao root i odradite sledeće komande:

Sad pokušajte da se ulogujete na server, ali sa tim novim portom…

PuTTy - promenjen ssh port

Logovanje isključivo putem SSH ključeva

Ovo je ujedno i preporučeni način logovanja na produkcione servere – odjebaus lozinkama, samo ključ majka mara – zaštićen nekom zajebanom frazom i to je to. Po nekima, uz ovaj vid logovanja čak nije ni potrebno koristiti neke ssh bruteforce zaštite tipa fail2ban i slično jer napadač dalje od unosa korisničkog imena i ne može da ode, tj ne stiže do unosa lozinke – jer lozinke i nema 🙂

Jedina mana ovakvog pristupa logovanju je ta – da ako izgubite SSH ključ, možete se jebat’ ako nemate fizički pristup serveru, tako da je preporuka da i ove ključeve čuvate na sigurnom mestu, recimo tamo gde čuvate i lozinke – kažem na sigurnom mislim na KeePass Password Safe naravno.

Potom putem programa koji se zove WinSCP-a (može i FileZilla) idite na, u ovom slučaju folder /home/draza/.ssh/ i prekopirajte kod sebe privatni ključ…koji se zove (u ovom slučaju) id_rsa

Sadržaj tog privatno ključa je otprilike ovakav:

Privatni_kljuc

Kad ste prekopirali kod sebe taj fajl (tj ključ), treba da ga prevedete u neki format koji može da pročita PuTTy…a to se radi pomoću programa koji se zove PuTTYgen.

Pošto ste privatni ključ prebacili u PuTTY ključ i sačivali kod sebe, sad treba da zabranite logovanje putem lozinki a to ćete uraditi tako što ćete u fajlu /etc/ssh/sshd_config prepraviti ove linije da imaju sledeće vrednosti:

vim /etc/ssh/sshd_config

Pa restartujte sshd servis

Preporuka je kad ovo završite obrišete i privatni i javni ključ sa servera (folder ~/.ssh)

Zabrana logovanja putem SSH za root korisnika

Zašto? Root korisnik je tatko na sistem, ima pristup svemu i svima i može da radi šta mu srcu milo i drago, što će reći da može da uništi ceo server bez kapi znoja – a i root korisnik uvek ima username root (mada se može i ovo skarabudžiti ali nije preporučljivo)…čime je pola posla oko provaljivanja pristupa završeno – ostaje još samo lozinka da se ubode i to je to (pod uslovom da niste dodali i ssh ključ u celu priču).

fail2ban

Fail to ban je jedan od programčića koje vodim pod „default“ a služi da ubije na neko vreme IP adresu sa koje je neuspešno pokušavano logovanje više puta bilo preko SSH ili FTP-a ili nekog drugog servisa poput recimo WordPress-a a koji koristi neki vid autentifikacije – dakle, osnovna namena ovog programa jeste zaštita od bruteforce-a na serveru. U ovom tekstu ćemo ga instalirati i iskonfigurisati samo za zaštitu od brutforsovanja ssh

Potom u vi editoru otvorite fajl /etc/fail2ban/jail.local i dodajte, ispod linije [sshd] liniju enabled = true kao i port koji ssh koristi, dakle da izgleda otprilike ovako:

vim /etc/fail2ban/jail.local

…pa restartujte servis fail2ban

Proverite samo da li je kreirano novo iptables pravilo komandom: iptables -L | grep -i f2b
Treba da bude otprilike ovako nekakav output

Da biste bili obavešteni putem emaila o akcijama, banovanjima i slično, izmenite u fajlu

vim /etc/fail2ban/jail.local

U konfiguracionom fajlu /etc/fail2ban/jail.local uz instalaciju i startovanje nekih dodatnih servisa (sendmail, whois…) možete postaviti da dobijete email notifikaciju o tome koja je IP blokirana, njene whois podatke, da promenite koliko je puta maksimalno dozvoljena pogrešna autentifikcaija, na koliko vremenski IP adresa treba da bude zablokirana i slično. U ovom tekstu smo se dotakli najosnovnije moguće postavke za zaštitu od ssh bruteforce-a – koja radi, i nismo ništa dodatno budžili

Da rezimiramo:

  1. Promeniti default SSH port sa 22 na neki bezveze
  2. Zabraniti root korisniku logovanje preko SSH jer je on jedan veliki gospodin
  3. Postaviti bruteforce zaštitu za ssh (ne mora ako se logujete pomoću ključeva i bez lozinki)
  4. Omogućiti logovanje samo pomoću SSH ključeva

Sa ovim ste prošli kroz najosnovniju zaštitu logovanja putem SSH i na ovaj način ste se već dovoljno zaštitili od raznih budala. Naravno, ima tu i dodatnih zaštita, recimo – dozvola logovanja samo sa određenih IP adresa, omogućavanje logovanja samo odredjenih korisnika, DenyHosts program, postavljanje zasebne IP adrese za SSH login i svašta nešto, ali za početak – i ovo opisano u tekstu je dovoljno.