Od wersji 6.39 RouterOS, protokoły P2P można zablokować wyłącznie używając wyrażeń regularnych (tzw. Regexp) w zakładce Layer 7 Protocols (w Filter Rule -> General zniknęła funkcja P2P). Poniżej przedstawiona są restrykcyjne reguły, które bardzo skutecznie blokują ruch P2P (w skrypcie poniżej tylko BitTorrent).
Cała konfiguracja opiera się na 5 krokach.
Dodanie wpisów L7:
/ip firewall layer7-protocol add comment="bittorrent" name=bittorrent regexp="^(\\x13bitt\ orrent protocol|azver\\x01\$|get /scrape\\\?info_hash=get /announce\\\?inf\ o_hash=|get /client/bitcomet/|GET /data\\\?fid=)|d1:ad2:id20:|\\x08'7P\\)[\ RP]"
Markowanie ruchu BitTorrent:
/ip firewall mangle add action=mark-connection chain=forward comment=mark_dw_connection in-interface=pppoe-out1 log-prefix=\ all-connections new-connection-mark=mark_dw_connection passthrough=yes add action=mark-packet chain=forward comment=mark_dw_packet connection-mark=mark_dw_connection new-packet-mark=\ mark_dw_packet passthrough=yes add action=mark-packet chain=forward comment=torrent_dw_pk layer7-protocol=bittorrent log-prefix=BitTorrent-log \ new-packet-mark=torrent_dw_pk packet-mark=mark_dw_packet passthrough=no
Dodanie hostów do listy P2P-users, którym będą blokowane porty 0 – 1024. Komputery, które mają mieć pełen dostęp do internetu i mogą ściągać z BT można umieścić na liście, np o nazwie allow-p2p:
/ip firewall filter add action=add-src-to-address-list address-list=P2P-Conn address-list-timeout=30m chain=forward comment=\ "bittorrent - dodanie hostow na liste do blokowania portow" log=yes log-prefix=P2P-users packet-mark=\ torrent_dw_pk src-address-list=!allow-p2p
Blokowanie portów komputerom, które korzystają z BitTorrent:
/ip firewall raw add action=drop chain=prerouting comment="Blokowanie portow hostom korzystajacym z programow p2p" dst-port=!0-1024 \ protocol=tcp src-address-list=P2P-Conn add action=drop chain=prerouting dst-port=!0-1024 protocol=udp src-address-list=P2P-Conn
Jest to ostatnia reguła blokująca wcześniej zamarkowane pakiety – na wypadek gdy ruch przejdzie przez niezablokowany port z przedziału 0 – 1024.
/ip firewall filter add action=drop chain=forward comment=\ "BitTorrent - blokowanie pozostalego ruchu BitTorrent, przechodzacego przez niezablokowane porty: 0 - 1024" \ packet-mark=torrent_dw_pk src-address-list=!allow-p2p
Poniżej przedstawione są filtry L7 (definicje Regexp), które blokują również inne protokoły (programy) p2p:
add name=chomikuj regexp="^.+(chomikuj.p).*\$" add name=emule regexp="^[\\xc5\\xd4\\xe3-\\xe5].\?.\?.\?.\?([\\x01\\x02\\x05\\x14\\x15\\x16\\x18\\x19\\x1a\\x1b\\x1c\ \\x20\\x21\\x32\\x33\\x34\\x35\\x36\\x38\\x40\\x41\\x42\\x43\\x46\\x47\\x48\\x49\\x4a\\x4b\\x4c\\x4d\\x4e\\x4f\\x\ 50\\x51\\x52\\x53\\x54\\x55\\x56\\x57\\x58[\\x60\\x81\\x82\\x90\\x91\\x93\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9e\ \\xa0\\xa1\\xa2\\xa3\\xa4]|\\x59................\?[ -~]|\\x96....\$)" add name=goboogy regexp=\ "<peerplat>|^get /getfilebyhash\\.cgi\\\?|^get /queue_register\\.cgi\\\?|^get /getupdowninfo\\.cgi\\\?" add name=soribada regexp="^GETMP3\r\ \nFilename|^\01.\?.\?.\?(Q:\\+|Q2:)|^\10[\14-\16]\10[\15-\17].\?.\?.\?.\?\$" add name=gnutella regexp="^(gnd[\01\02]\?.\?.\?\01|gnutella connect/[012]\\.[0-9]\r\ \n|get /uri-res/n2r\\\?urn:sha1:|get /.*user-agent: (gtk-gnutella|bearshare|mactella|gnucleus|gnotella|limewire|i\ mesh)|get /.*content-type: application/x-gnutella-packets|giv [0-9]*:[0-9a-f]*/|queue [0-9a-f]* [1-9][0-9]\?[0-9]\ \?\\.[1-9][0-9]\?[0-9]\?\\.[1-9][0-9]\?[0-9]\?\\.[1-9][0-9]\?[0-9]\?:[1-9][0-9]\?[0-9]\?[0-9]\?|gnutella.*content\ -type: application/x-gnutella|...................\?lime)" add name=shoutcast regexp="icy [1-5][0-9][0-9] [\t-\r -~]*(content-type:audio|icy-)" add name=bittorrent2 regexp=\ "^(\13bittorrent protocol|azver\01\$|get/scrape\\\?info_hash=)|d1:ad2:id20:|\08'7P\\)[RP]" add name=directconnect regexp="^(\\\$mynick |\\\$lock |\\\$key )" add name=ares regexp="^\03[]Z].\?.\?\05\$" add name=fasttrack regexp="^get (/.download/[ -~]*|/.supernode[ -~]|/.status[ -~]|/.network[ -~]*|/.files|/.hash=[0-9\ a-f]*/[ -~]*) http/1.1|user-agent: kazaa|x-kazaa(-username|-network|-ip|-supernodeip|-xferid|-xferuid|tag)|^give \ [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\?[0-9]\?[0-9]\?" add name=napster regexp="^(.[\02\06][!-~]+ [!-~]+ [0-9][0-9]\?[0-9]\?[0-9]\?[0-9]\? \"[\t-\r -~]+\" ([0-9]|10)|1(send\ |get)[!-~]+ \"[\t-\r -~]+\")" add name=soulseek regexp="^(\05..\?|.\01.[ -~]+\01F..\?.\?.\?.\?.\?.\?.\?)\$" add name=imesh regexp="^(post[\t-\r -~]*<PasswordHash>................................</PasswordHash><ClientVer>|4\80\ \?\r\?\FC\FF\04|get[\t-\r -~]*Host: imsh\\.download-prod\\.musicnet\\.com|\02(\01|\02)\83.\?.\?.\?.\?.\?.\?.\?.\?\ .\?.\?.\?.\?.\?.\?.\?.\?.\?.\?.\?.\?.\?.\?.\?.\?.\?.\?.\?.\?\02(\01|\02)\83)" add name=mohaa regexp="^\FF\FF\FF\FFgetstatus\ \n" add name=tor regexp=TOR1.*<identity> add name=bittorrent regexp="^(\\x13bittorrent protocol|azver\\x01\$|get /scrape\\\?info_hash=get /announce\\\?info_ha\ sh=|get /client/bitcomet/|GET /data\\\?fid=)|d1:ad2:id20:|\\x08'7P\\)[RP]" add name=bittorrent-sites regexp="^.+(|torrenty.org|thepiratebay|isohunt|entertane|demonoid|btjunkie|mininova|flixflu\ x|torrentz|vertor|h33t|btscene|bitunity|bittoxic|thunderbytes|entertane|zoozle|vcdq|bitnova|bitsoup|meganova|full\ dls|btbot|flixflux|seedpeer|fenopy|gpirate|commonbits|super-torrent|ex-torrenty-org|shadows-torrents|best-torrent\ y|miliontorrent|mega-torrenty|torrent.top-100|polskitorrent).*\$" add name="emule\?" regexp="\\xe3[\\x01-\\xff].\?.\?.\?\\x01.*\\xc5[\\x01-\\xff].\?.\?.\?\\x01.*\\xc5[\\x01-\\xff].\?.\ \?.\?\\x02.\r\ \n*\\xe3[\\x01-\\xff].\?.\?.\?\\x4c"