Teme: Mikrotik

Mikrotik: filtriranje konekcija po protokolima

Skraćena veza: https://pedja.supurovic.net/veza/1479

Vrlo je česta potreba da u ruteru ili zaštitnom zidu (firewall) presretnete neki određeni protokol, da biste mu, recimo, dali viši ili niži prioritet, da biste regulisali brzinu protoka ili čak taj protokol zabranili. Razloga za prepoznavanje protokola ima mnogo.

Neke protokole je lako razaznati jer koriste namenske portove, kao na primer POP3, SMTP, HTTP, SSH, FTP i slični. Za takve protokole obično je sasvim dovoljno filtrirati konekcije po poznatim portovima, primenjujući logiku da ako konekcija koristi određeni port, to znači da je to konekcija koja koristi i protokol za koji je taj port namenjen.

Nedostaci filtriranja po portovima

protokol port
FTP 20 TCP
21 TCP
SSH 22 TCP
22 UDP
Telnet 23 TCP
SMTP 25 TCP
POP3 110 TCP
DNS 53 TCP
53 UDP
DHCP 67 UDP
68 UDP
HTTP 80 TCP
NTP 123 UDP
NetBIOS 137 TCP
137 UDP
138 TCP
138 UDP
139 TCP
139 UDP
DC 411 TCP
412 TCP

Filtriranje po portovima ima i slabih strana. Čest je slučaj i da se neki protokol koristi na nestandardnim portovima, recimo HTTP protokol pored porta 80 koji je standardan vrlo često se upotrebljava na drugim portovima. Neki provajderi zbog sigurnosti premeštaju POP3, SMTP sa standardnih portova.

Neki internet servisi nemaju definisane standardne portove ili mogu koristiti neki od portova iz standardnog opsega. To je čest slučaj recimo sa igrama koje se koriste za igranje preko Interneta. Njih je često teško prepoznati po portovima koje koriste, a sa druge strane postoji velika potreba da njihove konekcije budu prepoznate, jer su igre zahtevne i treba im dati viši prioritet u odnosu na ostali internet saobraćaj.

Drugi internet servisi koji žele da izbegnu zabrane na zaštitnim zidovima, namerno koriste portove poznatih i često korišćenih protokola (iako sa tim protokolima nemaju nikakve veze) zato što pretpostavljaju da su portovi za te protokole otvoreni. To ne mora da znači da je takav servis zlonameran. Na primer Skype se koristi takvom tehnikom da bi omogućio da njegove konekcije rade sa što manje podešavanja od strane korisnika. On, ako utvrdi da ne može da ostvari konekciju sa Skype serverom na normalan način, probaće da upotrebi TCP port 80 koji se korisiti za pristup veb sajtovima, jer očekuje da takve konekcije nisu zabranjene.

Postoji i dosta protokola koji su namerno osmišljeni tako da ih je vrlo teško pratiti na ruterima. Obično su to protokoli koji se koriste za servise sumnjivog moralnog statusa, na primer za p2p razmenu datoteka. Takvi protokoli najčešće uopšte ne koriste neki konkretan port već više njih i čak menjaju portove, tako da je na ruteru vrlo teško identifikovati takvu konekciju.

Razlog potrebe za prepoznavanjem ovakvih protokla ne mora biti samo želja da oni budu blokirani. Naprotiv, mnogo je češća potreba da se kontrolišu resursi koje ovakvi protokoli troše.

Naime, P2P protokoli su veoma zahtevni i sebični kada je u pitanju internet konekcija. Sposobni su da drže istivremeno otvorenim na hiljade konekcija i da troše raspoloživi internet protok do krajnjih granica. Verujem da je svako ko je iole ozbiljno koristio Internet upoznat sa tim da kada pusti P2P program, to znači da će pristup bilo kom drugom internet servisu biti drastično sporiji, a dešava se čak i da jeftini ruteri kakvi se koriste za ADSL i slične kućne internet linkove, jednostavno ne mogu da izdrže takvo opterećenje i počinju da otkazuju. Najgore od svega je što obično korisnik takvog programa ne zna ili čak i nema mogućnost da u P2P programu podesi koliko resursa želi da odvoji za P2P program a koliko da ostavi za svoje druge potrebe.

Dakle, potreba prepoznavanja ovakvih protokola je česta baš zbog toga da bi se njihova nezajažljivost za resursima mogla svesti na razumnu meru.

Prepoznavanje ovakvih protokola se zasniva na prepoznavanju karakterističnih sadržaja u samim podacima koje se tim protokolom prenose. Svaki protokol ima određeni skup komandi i odgovora kojima se upravlja samim protokolom. Ruteri to pronalaze i prepoznaju i na osnovu toga identifikuju i same protokole. Da stvar bude još komplikovanija, autori protokola se često trude da šifruju komunikaciju kroz protokol, tako da onemoguće ili otežaju i prepoznavanje samog protokola.

Ugrađeni filteri

Mikrotik je od svojih najranijih verzija imao određeni nivo podrške za prepoznavanje relativno velikog broja često korišćenih protokola za p2p.

Kada podešavate neko pravilo u filteru zaštitnom zidu u Mikrotiku (/ip firewall filter) jedna od opcija je i da izaberete P2P protokol kao kriterijum za izdvajanje konekcija, parametrom p2p. Ovaj parametar može da ima vrednosti all-p2p, bit-torrent, blubster, direct-connect, edonkey, fasttrack, gnutella, soulseek, warez i winmx.

Filtrirati možete po svim protokolima (all-p2p) ili pojedinačno, izborom nekog od protokola sa liste, kao na primer:

/ip firewall p2p=all-p2p action=log log-prefix=p2p

Ista ova opcija postoji u označavanjy paketa i konekcija (/ip firewall mangle), a takođe je omogućena i u podešavanju prioriteta i ograničenja protoka (/queue i /queue simple).

Međutim, ovakvi filteri su unapred ugrađeni, a može ih definisati samo proizvođač. Oni ne mogu da prate često pojavljivanje novih i izmene na postojećim protokolima, tako da se dešava da Mikrotik na ovaj način ne može da identifikuje neki protokol, te je ruter nemoćan da ga kontroliše.

Definisanje filtera na layer7 nivou

Od verzije 3 Mikrotika uvedena je nova opcija, koja omogućava da korisnik sam definiše pravila za prepoznavanje protokola. Princip rada je jednostavan: korisnik može da podesi određeni šablon (regular expression) koji se primenjuje na pakete u konekcijama i ako je dati šablon prepoznat u paketu, taj paket i cela konekcija kojoj on pripada se identifikuje kao opisani protokol.

U Mikrotiku se to podešava takođe u zaštitnom zidu u novoj opciji Layer 7 Protocols (/ip firewall layer7-protocol). Pravilo se dodaje komandom add koja ima dva parametra: name kojim se određuje ime protokola i regexp kojim se određuje šablon za prepoznavanje protokola.

Evo primer kako se sastavlja pravilo za prepoznavanje POP3 protokola:

/ip firewall layer7-protocol add name=pop3 regexp="^(\\+ok |-err )"

Ovom komandom se definiše ime protokola kao pop3, šablon je naveden kao regularni izraz (regular expression) koji određuje da ako se u paketu nađe niz znakova +ok ili -err, da je to sigurno POP3 protokol.

Evo pravila za još neke protokole:

Skype: add name=skypetoskype regexp="^..\02............."
TeamSpeak: add name=teamspeak regexp="^\F4\BE\03.*teamspeak"
Quake1: add name=quake1 regexp="^\80\0C\01quake\03"

Kada su pravila definisana ona se mogu upotrebiti u Mikrotik zaštitnom zidu u opcijama filter, mangle i NAT.

U filteru se na primer može dodati pravilo za izdvajanje POP3 konekcija korišćenjem definicije protokola koju smo prethodno napravili, komandom

/ip firewall filter add layer7-protocol=pop3 action=log log-prefix=pop3

Prilikom korišćenja prepoznavanja protokola na layer7 nivou treba biti umeren jer ova opcija troši mnogo resursa i značajno opterećuje ruter. Dobra praksa je da u nizu pravila uvek prvo stavite pravila koja na neki drugi način identifikuju i obrađuju konekcije, tako da ih što manje ostane za proveru pravilima na nivou layer7.

Za podešavanje šablona potrebno je dobro poznavanje protokola, a da ne biste otkrivali toplu vodu možete upotrebiti definicije koje su pripremljene za program Application Layer Packet Classifier for Linux. Na ovom sajtu postoje opisi i gotove definicije šablona velikog broja protokola. Te definicije možete upotrebiti i na Mikrotiku.

Da stvar bude lepša, jedan deo definicija layer7 šablona postoji na Mikrotik sajtu već pripremljena kao skript. Preuzmite ga, pokrenite i te definicije će biti upisane u vaš Mikrotik. Naravno, to nisu sve defincije ali je korisno za početak.

1 comment to Mikrotik: filtriranje konekcija po protokolima

  • Anthylon

    Svaka cast prijatelju; ovo je jako korisno. Evo, prijatelj se pati – ja promatram remote – nikako da sredimo preusmjeravanje… Naime, imamo 2 ADSL linka jedan za igre drugi za …. ostalo :D, ali ne uspijevamo da npr. Warcraft III natjeramo na ADSL2 a ostalo da ide na ADSL1.

    Onako to spominjem… Hvala za ove tekstove 🙂

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Popunite izraz tako da bude tačan: *