Врло је честа потреба да у рутеру или заштитном зиду (firewall) пресретнете неки одређени протокол, да бисте му, рецимо, дали виши или нижи приоритет, да бисте регулисали брзину протока или чак тај протокол забранили. Разлога за препознавање протокола има много.
Неке протоколе је лако разазнати јер користе наменске портове, као на пример POP3, SMTP, HTTP, SSH, FTP и слични. За такве протоколе обично је сасвим довољно филтрирати конекције по познатим портовима, примењујући логику да ако конекција користи одређени порт, то значи да је то конекција која користи и протокол за који је тај порт намењен.
Недостаци филтрирања по портовима
протокол | порт |
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 |
Филтрирање по портовима има и слабих страна. Чест је случај и да се неки протокол користи на нестандардним портовима, рецимо HTTP протокол поред порта 80 који је стандардан врло често се употребљава на другим портовима. Неки провајдери због сигурности премештају POP3, SMTP са стандардних портова.
Неки интернет сервиси немају дефинисане стандардне портове или могу користити неки од портова из стандардног опсега. То је чест случај рецимо са играма које се користе за играње преко Интернета. Њих је често тешко препознати по портовима које користе, а са друге стране постоји велика потреба да њихове конекције буду препознате, јер су игре захтевне и треба им дати виши приоритет у односу на остали интернет саобраћај.
Други интернет сервиси који желе да избегну забране на заштитним зидовима, намерно користе портове познатих и често коришћених протокола (иако са тим протоколима немају никакве везе) зато што претпостављају да су портови за те протоколе отворени. То не мора да значи да је такав сервис злонамеран. На пример Skype се користи таквом техником да би омогућио да његове конекције раде са што мање подешавања од стране корисника. Он, ако утврди да не може да оствари конекцију са Skype сервером на нормалан начин, пробаће да употреби TCP порт 80 који се корисити за приступ веб сајтовима, јер очекује да такве конекције нису забрањене.
Постоји и доста протокола који су намерно осмишљени тако да их је врло тешко пратити на рутерима. Обично су то протоколи који се користе за сервисе сумњивог моралног статуса, на пример за п2п размену датотека. Такви протоколи најчешће уопште не користе неки конкретан порт већ више њих и чак мењају портове, тако да је на рутеру врло тешко идентификовати такву конекцију.
Разлог потребе за препознавањем оваквих протокла не мора бити само жеља да они буду блокирани. Напротив, много је чешћа потреба да се контролишу ресурси које овакви протоколи троше.
Наиме, П2П протоколи су веома захтевни и себични када је у питању интернет конекција. Способни су да држе истивремено отвореним на хиљаде конекција и да троше расположиви интернет проток до крајњих граница. Верујем да је свако ко је иоле озбиљно користио Интернет упознат са тим да када пусти П2П програм, то значи да ће приступ било ком другом интернет сервису бити драстично спорији, а дешава се чак и да јефтини рутери какви се користе за АДСЛ и сличне кућне интернет линкове, једноставно не могу да издрже такво оптерећење и почињу да отказују. Најгоре од свега је што обично корисник таквог програма не зна или чак и нема могућност да у П2П програму подеси колико ресурса жели да одвоји за П2П програм а колико да остави за своје друге потребе.
Дакле, потреба препознавања оваквих протокола је честа баш због тога да би се њихова незајажљивост за ресурсима могла свести на разумну меру.
Препознавање оваквих протокола се заснива на препознавању карактеристичних садржаја у самим подацима које се тим протоколом преносе. Сваки протокол има одређени скуп команди и одговора којима се управља самим протоколом. Рутери то проналазе и препознају и на основу тога идентификују и саме протоколе. Да ствар буде још компликованија, аутори протокола се често труде да шифрују комуникацију кроз протокол, тако да онемогуће или отежају и препознавање самог протокола.
Уграђени филтери
Микротик је од својих најранијих верзија имао одређени ниво подршке за препознавање релативно великог броја често коришћених протокола за п2п.
Када подешавате неко правило у филтеру заштитном зиду у Микротику (/ip firewall filter) једна од опцијa је и да изаберете П2П протокол као критеријум за издвајање конекција, параметром p2p. Овај параметар може да има вредности all-p2p, bit-torrent, blubster, direct-connect, edonkey, fasttrack, gnutella, soulseek, warez и winmx.
Филтрирати можете по свим протоколима (all-p2p) или појединачно, избором неког од протокола са листе, као на пример:
/ip firewall p2p=all-p2p action=log log-prefix=p2p
Иста ова опција постоји у означавањy пакета и конекција (/ip firewall mangle), а такође је омогућена и у подешавању приоритета и ограничења протока (/queue и /queue simple).
Међутим, овакви филтери су унапред уграђени, а може их дефинисати само произвођач. Они не могу да прате често појављивање нових и измене на постојећим протоколима, тако да се дешава да Микротик на овај начин не може да идентификује неки протокол, те је рутер немоћан да га контролише.
Дефинисање филтера на layer7 нивоу
Од верзије 3 Микротика уведена је нова опција, која омогућава да корисник сам дефинише правила за препознавање протокола. Принцип рада је једноставан: корисник може да подеси одређени шаблон (regular expression) који се примењује на пакете у конекцијама и ако је дати шаблон препознат у пакету, тај пакет и цела конекција којој он припада се идентификује као описани протокол.
У Микротику се то подешава такође у заштитном зиду у новој опцији Layer 7 Protocols (/ip firewall layer7-protocol). Правило се додаје командом add која има два параметра: name којим се одређује име протокола и regexp којим се одређује шаблон за препознавање протокола.
Ево пример како се саставља правило за препознавање POP3 протокола:
/ip firewall layer7-protocol add name=pop3 regexp="^(\\+ok |-err )"
Овом командом се дефинише име протокола као pop3, шаблон је наведен као регуларни израз (regular expression) који одређује да ако се у пакету нађе низ знакова +ok или -err, да је то сигурно POP3 протокол.
Ево правила за још неке протоколе:
Skype: add name=skypetoskype regexp="^..\02............." TeamSpeak: add name=teamspeak regexp="^\F4\BE\03.*teamspeak" Quake1: add name=quake1 regexp="^\80\0C\01quake\03"
Када су правила дефинисана она се могу употребити у Микротик заштитном зиду у опцијама filter, mangle и NAT.
У филтеру се на пример може додати правило за издвајање POP3 конекција коришћењем дефиниције протокола коју смо претходно направили, командом
/ip firewall filter add layer7-protocol=pop3 action=log
log-prefix=pop3
Приликом коришћења препознавања протокола на layer7 нивоу треба бити умерен јер ова опција троши много ресурса и значајно оптерећује рутер. Добра пракса је да у низу правила увек прво ставите правила која на неки други начин идентификују и обрађују конекције, тако да их што мање остане за проверу правилима на нивоу layer7.
За подешавање шаблона потребно је добро познавање протокола, а да не бисте откривали топлу воду можете употребити дефиниције које су припремљене за програм Application Layer Packet Classifier for Linux . На овом сајту постоје описи и готове дефиниције шаблона великог броја протокола. Те дефиниције можете употребити и на Микротику.
Да ствар буде лепша, један део дефиниција layer7 шаблона постоји на Микротик сајту већ припремљена као скрипт . Преузмите га, покрените и те дефиниције ће бити уписане у ваш Микротик. Наравно, то нису све дефинције али је корисно за почетак.
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 :)