Заштита SSH приступа серверима
Обрадићемо неке дифолт радње које ви као админ треба да одрадите кад је у питању заштита даљинског приступа Линукс серверу путем SSH.
SSH (Secure Shell) је мрежни протокол који корисницима омогућава успостављање сигурног комуникацијског канала између два рачунара путем несигурне рачунарске мреже. Више о SSH прочитајте на домаћој Википедији. Серверу ћемо приступати са Виндовс машине преко програма који се зове PuTTY јер је, на основу мог искуства и оног што ми админи веле – то главни приступ Линукс машинама.
Промена подразумеваног SSH порта на серверу
Подразумевани порт за логовање на сервер путем SSH протокола је 22 и уљези који би да добију приступ вашем серверу већином случајева прво скенирају па касније и брутфорсују (bruteforce) тај порт и зато је једна од првих радњи гашење тог порта и отварање неког безвезе порта за приступ.
Такође, сама промена подразумеваног SSH порта уз добру firewall заштиту (коју ћемо обрадити у неком наредном тексту) јесте индикатор малициозним корисницима да је сервер највероватније обезбеђен од стране стручног лица па их и то може одбити од даље акције.
За промене подразумеваног порта улогујте се на сервер као root корисник и одрадите следеће команде:
# Измена закоментарисане вредности #Port 22 у Port 53535 у фајлу /etc/ssh/sshd_config sed -i s/"#Port 22"/"Port 53535"/g /etc/ssh/sshd_config # Наравно, на firewall-у не заборавите да отворите тај порт iptables -I INPUT 1 -p tcp --dport 53535 -j ACCEPT service iptables save service iptables restart
# Рестарт sshd-а service sshd restart
Сад покушајте да се улогујете на сервер, али са тим новим портом…
Логовање искључиво путем SSH кључева
Ово је уједно и препоручени начин логовања на продукционе сервере – одјебаус лозинкама, само кључ мајка мара – заштићен неком зајебаном фразом и то је то. По некима, уз овај вид логовања чак није ни потребно користити неке SSH брутфорс заштите типа „fail2ban“ и слично јер нападач даље од уноса корисничког имена и не може да оде, тј не стиже до уноса лозинке – јер лозинке и нема, хехе.
Једина мана оваквог приступа логовању је та – да ако изгубите SSH кључ, можете се јебат’ ако немате физички приступ серверу, тако да је препорука да и ове кључеве чувате на сигурном месту, рецимо тамо где чувате и лозинке – кажем на сигурном мислим на KeePass Password Safe наравно.
# Креирање кључа за неког од корисника (у овом случају корисник draza) [root@centos6 ~]# su - draza [draza@centos6 ~]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/draza/.ssh/id_rsa): Created directory '/home/draza/.ssh'. Enter passphrase (empty for no passphrase): unesite_neku_lozinku_ovde Enter same passphrase again: unesite_neku_lozinku_ovde Your identification has been saved in /home/draza/.ssh/id_rsa. Your public key has been saved in /home/draza/.ssh/id_rsa.pub. The key fingerprint is: cd:4c:30:34:cc:d7:c2:bb:c0:3f:06:51:0e:15:eb:45 draza@centos6.kompjuteras.com The key's randomart image is: +--[ RSA 2048]----+ | +*++oE | | +*+o. | | . o+o. | | +*.. | | S+=. | | = | | . . | | | | | +-----------------+ # Креирана су два кључа id_rsa (приватни) и id_rsa.pub (јавни). # Додати јавни у ауторизоване кључеве и поставити исправне привилегије [draza@centos6 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys [draza@centos6 ~]$ chmod 600 ~/.ssh/authorized_keys && chmod 700 ~/.ssh/
Потом путем програма који се зове WinSCP-a (може и FileZilla) идите на, у овом случају фолдер /home/draza/.ssh/ и прекопирајте код себе приватни кључ…који се зове (у овом случају) id_rsa
Садржај тог приватно кључа је отприлике овакав:
Кад сте прекопирали код себе тај фајл (тј кључ), треба да га преведете у неки формат који може да прочита PuTTY…a то се ради помоћу програма који се зове PuTTYgen.
Пошто сте приватни кључ пребацили у PuTTY кључ и сачували код себе, сад треба да забраните логовање путем лозинки а то ћете урадити тако што ћете у фајлу /etc/ssh/sshd_config преправити ове линије да имају следеће вредности:
vim /etc/ssh/sshd_config
ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no
Па рестартујте sshd сервис
service sshd restart
Препорука је кад ово завршите обришете и приватни и јавни кључ са сервера (фолдер ~/.ssh)
Забрана логовања путем SSH за root корисника
Зашто? Root (рут) корисник је татко на систем, има приступ свему и свима и може да ради шта му срцу мило и драго, што ће рећи да може да уништи цео сервер без капи зноја – а и root корисник увек има корисничко име root (мада се може и ово скарабуџити али није препоручљиво)…чиме је пола посла око проваљивања приступа завршено – остаје још само лозинка да се убоде и то је то (под условом да нисте додали и ssh кључ у целу причу).
# Ако немате неког другог корисника на серверу додајте га и дајте му лозинку useradd draza passwd draza # Измена линије #PermitRootLogin yes --> PermitRootLogin no sed -i s/"#PermitRootLogin yes"/"PermitRootLogin no"/g /etc/ssh/sshd_config # Restart ssh servisa service sshd restart
fail2ban
Fail2ban је један од програмчића које водим под „дифолт“ а служи да убије на неко време IP адресу са које је неуспешно покушавано логовање више пута било преко SSH или FTP-а или неког другог сервиса попут рецимо Вордпресa а који користи неки вид аутентификације – дакле, основна намена овог програма јесте заштита од брутфорса на серверу. У овом тексту ћемо га инсталирати и исконфигурисати само за заштиту од брутфорсовања ssh
# Инсталација fail2ban на ЦентОС 6 (под претпоставком да нисте гасили firewall)
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install fail2ban vim -y
chkconfig fail2ban on
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Потом у vi едитору отворите фајл /etc/fail2ban/jail.local и додајте, испод линије [sshd] линију enabled = true као и порт који ssh користи, дакле да изгледа отприлике овако:
vim /etc/fail2ban/jail.local
[sshd] enabled = true port = 53535 logpath = %(sshd_log)s
…па рестартујте сервис fail2ban
service fail2ban restart
Проверите само да ли је креирано ново iptables правило командом: iptables -L | grep -i f2b
Треба да буде отприлике овако некакав aутпут
[root@centos6 ~]# iptables -L | grep -i f2b f2b-sshd tcp -- anywhere anywhere multiport dports 53535 Chain f2b-sshd (1 references)
Да бисте били обавештени путем имејла о акцијама, бановањима и слично, измените у фајлу
vim /etc/fail2ban/jail.local
destemail = vas.mail@mail.com # И линију: action = %(action_)s ----> action = %(action_mwl)s
У конфигурационом фајлу /etc/fail2ban/jail.local уз инсталацију и стартовање неких додатних сервиса (sendmail, whois…) можете поставити да добијете имејл нотификацију о томе која је IP блокирана, њене „whois“ податке, да промените колико је пута максимално дозвољена погрешна аутентификцаија, на колико временски IP адреса треба да буде заблокирана и слично. У овом тексту смо се дотакли најосновније могуће поставке за заштиту од ssh брутсорсовања – која ради, и нисмо ништа додатно буџили
Да резимирамо:
- Променити подразумевани SSH порт са 22 на неки безвезе
- Забранити root кориснику логовање преко SSH јер је он један велики господин
- Поставити брутфорс заштиту за ssh (не мора ако се логујете помоћу кључева и без лозинки)
- Омогућити логовање само помоћу SSH кључева
Са овим сте прошли кроз најосновнију заштиту логовања путем SSH и на овај начин сте се већ довољно заштитили од разних будала. Наравно, има ту и додатних заштита, рецимо – дозвола логовања само са одређених IP адреса, омогућавање логовања само одређених корисника, DenyHosts програм, постављање засебне IP адресе за SSH логин и свашта нешто, али за почетак – и ово описано у тексту је довољно.
Ivana
14/01/2016 @ 18:20
uhfadsiopuh47q893zf987fh87qh8q784xn6gdniqg4iusmH,OIOJKARW.PG,WMEOUGMISEuhmyawieh (ovako sam pročitala gornji tekst)
Nebojša
17/01/2016 @ 12:00
Još jedna mogućnost koja povećava sigurnost
https://www.digitalocean.com/community/tutorial_series/how-to-implement-port-knocking-to-obscure-your-ssh-daemon
Zeus-rs
13/10/2016 @ 16:57
Pozdrav, može jedan tutorijal kako da server iz mreže natuje da bude vidljiv sa vana?
Компјутераш блог
13/10/2016 @ 17:00
Нисам баш разумео на шта тачно мислиш? Ако си мислио да сервер унутар LAN-a буде видљив са спољне мреже онда port forwarding завршава посао?
Zeus-rs
14/10/2016 @ 07:27
Da upravo to ali je upitanju Cisco router.:)
Компјутераш блог
14/10/2016 @ 09:48
Не знам како се радио port forward на Ciscu, немам искуства и нисам никад радио са њим. Најдаље што сам отишао са рутерима су Микротик и pfSense
Zeus-rs
14/10/2016 @ 21:36
🙁 Ok. Hvala na dobroj volji da pomogneš.
Zeus
25/11/2016 @ 15:36
Pozdrav Darko,
imam jedno pitanje. Što se tiče prvog koraka i promjene porta iz 22 u npr. 53535. Sve uradim kako si napisao i u lokalu putty prođe međutim ako idem van mreže nema šanse da prođe. Da li imaš ideju šta bi moglo biti?
Puno pozdrava,
Компјутераш блог
17/02/2017 @ 16:00
Firewall. Мораш да отвориш тај порт на firewall-у (по дифолту није отворен)
Apsent
17/02/2017 @ 15:54
Pozdrav Darko, „Zabrana logovanja putem SSH za root korisnika“ Uradio ovo iz tvog tutoriala i onda ne mogu ništa dalje da radim jer mi je user obični user a ne admin. Šta sad da radim?
Компјутераш блог
17/02/2017 @ 15:56
Улогујеш се као обичан корисник и урадиш: su – root (куцај ручно су цртица root, ова цртица кад се копира из htmla уме понекад да буде нека лудорија)