Primetili ste da vam mikrotik ruter prijavljuje upozorenja da neko pokušava da mu pristupi preko SSH? Log prikazuje da neko pokušava da na silu pogodi (brute force) lozinku i uđe u ruter.
Najpre, nema potrebe brinuti se. Ako koristite kvalitetnu lozinku za pristup, šanse da će neko da je pogodi i uđe u ruter su minimalne. No, za svaki slučaj valja uvesti mere predostrožnosti.
Ograničenje pristupa
Ako vam SSH pristup ruteru sa interneta nije potreban, onda ga isključite. Možete ga potpuno isključiti ili omogućiti pristup samo sa IP adresa iz vaše lokalne mreže.
Najpre proverite koji su sve servisi raposloživi. To možete uraditi komandom
/ip service print
a ona će dati prikaz sličan ovom:
[admin@mikrotik] /ip service print Flags: X - disabled, I - invalid # NAME PORT ADDRESS CERTIFICATE 0 telnet 23 0.0.0.0/0 1 ftp 21 0.0.0.0/0 2 www 80 0.0.0.0/0 3 ssh 22 0.0.0.0/0 4 X www-ssl 443 0.0.0.0/0 none 5 X api 8728 0.0.0.0/0 6 winbox 8291 0.0.0.0/0
SSH je u ovoj listi pod rednim brojem 3, što nam treba za dalja podešavanja. Imate dve mogućnosti, da potpuno isključite SSH pristup ruteru:
/ip service set 3 disabled="yes"
ili da ograničite na IP opseg vaše lokalne mreže, na primer 192.168.1.1:
/ip service set 3 address=192.168.1.1/24
Ako je ipak potrebno da ruteru možete pristupiti sa Interneta onda vam prethodno opisana ograničenja neće vredeti jer će osim potencijalnim napadačima, i vama pristup biti onemogućen.
Pristup preko VPN
Zabranu pristupa sa Interneta možete zaobići tako što ćete omogućiti pristup mreži sa Interneta preko nekog od VPN protokola (Virtual Private Network).
Kada se povežete kroz VPN, vaš računar postaje deo lokalne mreže pa će moći da pristupi i ruteru kao da je u lokalnoj mreži.
Omogućavanje pristupa sa nekih IP adresa
Ako je neophodno da ruteru pristupate sa Interneta tada možete ostaviti omogućen pristup sa interneta ali ga selektivno dozvoliti samo unapred odabranim IP adresama.
Najpre, napravite listu IP adresa kojima hoćete da dozvolite pristup:
/ip firewall address-list add address=87.36.211.77 list=allow_ssh add address=217.193.79.112 list=allow_ssh add address=72.204.127.15 list=allow_ssh
Zatim podesite zaštitni zid da dozvoli pristup SSH (tcp port 22) u input lancu (to su konekcije koje su upućene samom ruteru) na interfejsu internet linka (wan):
/ip firewall filter \ add chain=input in-interface=wan \ protocol=tcp dst-port=22 src-address-list=allow_ssh action=accept
Iza ovog pravila odmah blokirajte sve ostale konekcije na SSH u input lancu na interfejsu internet linka:
/ip firewall filter \ add chain=input in-interface=wan protocol=tcp dst-port=22 action=drop
Onemogućavanje zlonamernih konekcija
Brzo rešenje za problem zlonamernika je i taj da se prepoznaju zlonamerne konekcije i kao takve onemoguće. Problem sa SSH protokolom je što je on šifrovan pa ne možemo da pratimo saobraćaj te da prepoznamo neuspešan pokušaj prijave korisnika na servis pa da na to reagujemo. Moraćemo se zadovoljiti jednostavnijim pravilom da ako sa nekog IP dođe više pokušaja uspostave konekcije sa ruterom u kratkom vremenskom periodu, to smatramo lošom namerom.
Uistinu, kada se na ruteru pojavi nova konekcija na SSH port to može značiti da se radi o regularnom koriniku ali i o nekom ko pokušava neovlašećno da uđe. U tom trenutnu to ne možemo znati.
Međutim, regularan korisnik će uspeti da uđe u ruter jer zna korisničko ime i lozinku. Zlonamernik će morati da pokušava više puta pogađajuči lozinku. Dakle, ako neko pokušava više puta da uđe u ruter vrlo verovatno je da se radi o lošoj nameri.
Ipak, može da se desi i da regularan korisnik pogreši u kucanju lozinke te mora da ponovi pristup. Zato ćemo omogućiti da svako može da pokuša tri puta da uđe u ruter, a već četvrti put ćemo smatrati da se radi o lošoj nameri i blokirati pristup.
Kako to napraviti u mikrotik ruteru? Postavićemo pravila u input lanac na intefejs internet konekcije koja će da prate nove konekcije na TCP port 22. Koristimo input lanac jer ćemo tu videti konekcije koje su upućene ruteru. Pratimo samo nove konecije i tako nećemo reagovati na uspostavljene konekcije po ovom portu. Uspostavljena konekcija znači da se radi o regularnom pristupu.
Kada prepoznamo novu konekciju IP adresu sa koje je konekcija došla ćemo staviti u listu adresa pod nazivom ssh_conn_level_0. Adresa će u listi ostati jedan minut:
/ip firewall filter add chain=input connection-state=new protocol=tcp dst-port=22\ action=add-src-to-address-list address-list=ssh_conn_level_0 \ address-list-timeout=1m
Ovim će biti označena svaka nova konekcija na ruter na SSH servis a mi u ovom trenutku ne možemo znati da li je ona zlonamerna.
Međutim, ako sada proverimo da li se pojavljuju SSH konekcije na ruter sa adresa koje su već označene, svaka takva konekcija potencijalno jeste zlonamerna: prvi put pristup nije uspeo pa je usledio novi pokušaj. Ovakve IP ćemo ubaciti u drugu listu adresa pod nazivom ssh_conn_level_1.
/ip firewall filter add chain=input connection-state=new protocol=tcp dst-port=22 \ src-address-list=ssh_conn_level_0 \ action=add-src-to-address-list address-list=ssh_conn_level_1 \ address-list-timeout=1m
To su već potencijalno zlonamerne IP adrese, ali još uvek ih nećemo blokirati jer postoji verovatnoća da je regularan korisnik napravio grešku pa je morao da ponovi pristup.
Umesto blokiranja, listu ssh_conn_level_1 ćemo iskoristiti da prepoznamo nove konekcije koje prestavljaju treći pokušaj pristupa ruteru. Ove IP adrese ćemo staviti u novu listu IP adresa pod nazivom ssh_conn_level_2. Za razliku od prethodnih lista, IP adrese će iz ove liste biti brisane nakon deset minuta:
/ip firewall filter add chain=input connection-state=new protocol=tcp dst-port=22 \ src-address-list=ssh_conn_level_1 \ action=add-src-to-address-list address-list=ssh_conn_level_2 \ address-list-timeout=10m
Tri neuspela pokušaja su dosta. Svaki sledeći ćemo smatrati namerom neovlašćenog ulaska u ruter i blokirati:
/ip firewall filter add chain=input connection-state=new protocol=tcp dst-port=22 \ src-address-list=ssh_conn_level_2 \ action=drop
Posledica ovakvog podešavanja je da će biti dozvoljeno tri pokušaja konekcije u jednom minutu a sve preko toga će biti blokirano. Blokiranje za jednu IP adresu će trajati 10 minuta – da bi se sa te adrese moglo ponovo pristupiti ruteru na SSH port mora proći 10 minuta bez ikakvog pokušaja pristupa na taj port.
Ako se regularnom korisniku dogodi da bude blokiran jer nije uspeo da se iz tri puta prijavi na ruter, samo treba da sačeka deset minuta i moći će da pokuša ponovo.
Nasuprot tome, zlonamerni napadači koji pokušavaju da pogode lozinku će stalno pokušavati da pristupe isprobavajući razne kombinacije korisničkih imena i lozinki i sve dok to budu pokušavali, pristup će im biti blokiran.
Samo prva tri upita će zaista imati mogućnost prijave na ruter a posle toga će konekcije biti onemogućene daleko pre nego što uopšte stignu do SSH servisa. Tako je efikasno osujećeno i pogađanje lozinki, jer više ne deluje.
Kako ovakve stvari retko kad neko radi ručno već preko automatizovanih skripti, imaćemo uspešnu zaštitu od takvih napada. Da stvar bude bolja, skripte su obično napravljene tako da ako vide da im je pristup blokiran – odustaju i prelaze na neku drugu potencijalnu žrtvu.
A šta sa drugim servisima?
Za blokrianje SSH servisa smo koristili TCP port 22. Procedura za blokrianje drugih servisa je ista, samo treba blokirati njihove portove.
Za telnet se koristi port 23, za FTP – port 21. U pravilima zaštitnog zida za dst-port treba korsitit ove portove. Štaviše, možemo staviti i dst-port=21,22,23 pa će ista pravila raditi za sva tri porta istovremeno.
Šta ako napadač uradi ARP preusmerenje i počne da presreće sesiju i čeka da se korisnik uloguje na neki neenkriptovani servis, na primer na FTP?
Znajući korisnike, vrlo je velika šansa da će neko od njih staviti istu šifru za sve servise.
Da bi neko tako napao ruter mora imati mnogo ozbiljniju logistiku na raspolaganju.
Možda na prvi pogled teško izvodljivo, ali nije nemoguće.
Napadač može da sazna IP adresu kompa sa kojeg će se administrator logovati tako što će se upustiti u e-mail dopisivanje sa tim adminom i onda će je dobiti iz zaglavlja poruka. Posle toga mu preostaje da nađe dobro mesto sa kojeg će da se poveže na internet, tako da ovome što manje uspori vezu.
Ne ide to tako. ARP spufing se može izvesti samo ako je napadač fizički povezan na isti mrežni interfejs rutera preko koga žrtva dolazi na taj ruter.
Napad se može izvesti iz lokalne mreže što je opet velika otežavajuća okolnost s obzirom da ne može neko tek tako da se poveže na lokalnu mrežu.
Zato sam i rekao da mora da nađe pravo mesto. ARP ne mora nužno da se radi na LAN mreži. Bitno je da postoji bar jedan zajednički subnet.
Peđa, meni je ovo resilo problem zlonamernih napada
ssh_conn_level_0
ssh_conn_level_1
ssh_conn_level_2
i lista adresa u kojoj sam ubacio primecene IP adresa koji pokusavaju skriptama da „provale sifru“.
Veliko Hvala, i pozdrav iz KG-a.
Goran.
Peđa, zar pravila ne bi trebalo da idu naopako?
Od drop kao prvo pravilo, pa sve do ssh_conn_level_0 kao poslednje?
U suprotnom, ako se ne varam, svaka nova konekcija će da se zaustavi uvek samo na prvom pravilu a ostala neće da procesira jer po definiciji: „When processing a chain, rules are taken from the chain in the order they are listed there from top to bottom. If a packet matches the criteria of the rule, then the specified action is performed on it, and no more rules are processed in that chain (the exception is the passthrough action). If a packet has not matched any rule within the chain, then it is accepted.“
U ovom slučaju, mislim da redosled pravila čak i nije bitan jer svako pravilo hvata samo određene konekcije a ne sve, a te koje hvata treba da uhvati u svakom slučaju.
Na primer drop pravilo čak i ako stoji prvo neće uzimati u obzir sve konekcije nego samo one kojima je src-address-list=ssh_conn_level_2
Redosled koji je primenjen je zgodan jer je logičan sled akcija pa je lak za praćenje.
Ako stoji od 0 do drop, zar se ne dešava sledeće:
1. Nova konekcija -> Ispunjava uslove i upada u listu 0;
Pošto je kriterijum pravila zadovoljen, ne procesira se dalje.
2. Nova konekcija -> Ispunjava uslove i upada u listu 0;
Pošto je kriterijum pravila zadovoljen, ne procesira se dalje.
3. Nova konekcija -> Ispunjava uslove i upada u listu 0;
Pošto je kriterijum pravila zadovoljen, ne procesira se dalje.
i tako u krug…
———————–
A sa obrnutim pravilima, kada je drop prvo:
1. Nova konekcija -> Da li je u ssh_conn_level_2 -> Nije -> Sledeće pravilo -> Da li je u ssh_conn_level_1 -> Nije -> Sledeće pravilo -> Da li je u ssh_conn_level_0 -> Nije -> Sledeće pravilo -> Postavi u ssh_conn_level_0
2. Nova konekcija -> Da li je u ssh_conn_level_2 -> Nije -> Sledeće pravilo -> Da li je u ssh_conn_level_1 -> Nije -> Sledeće pravilo -> Da li je u ssh_conn_level_0 -> JESTE -> Postavi u ssh_conn_level_1
3. Nova konekcija -> Da li je u ssh_conn_level_2 -> Nije -> Sledeće pravilo -> Da li je u ssh_conn_level_1 -> JESTE -> Postavi u ssh_conn_level_2
4. Nova konekcija -> Da li je u ssh_conn_level_2 -> JESTE -> Drop
Mislim da tako treba da ide, ali još sam nov :)
Pozdrav!
Dobar dan
Uradio sam sve navedeno ali mi ruter i dalje daje da se ulogujem preko ssh, iako sam 3 puta kucao pogresnu sifru. IP adresa sa koje pokusavam da se ulogujem se nalazi u Address Lists tabu, odbrojava 10m, ali da i dalje mogu da pristupim ruteru preko ssh, daje mi login.
Gde gresim ?
Hvala
Pozdrav u roku 24 sata imam na mikrotiku minimum 20 napada sa razliciti ip adresa pretezno rusija i ukraina. Napadi su ssh telnet i ftp medjutim ftp su sa interne to jest lokalne ip adrese imam u kuci 3 kompa ispada kao da sam sebe napadam ip adrese od telefona ne koristi za napad. Napadac na ftp uvek koristi ista korisnicka imena koda ima sablon od tridesetak korisnicki imena. Povodom ovog blokirao sam ftp port i ssh … telnet nisam jer neznam dali cu moci pristupiti mikrotiku preko winboksa to jest dali cu u winboksu moci koristiti terminal…