« Назад

Міжмережеві екрани, що фільтрують пакети на другому та третьому рівні моделі OSI, давно перестали задовольняти сучасним вимогам систем безпеки корпоративних клієнтів. Блокування таких сервісів як skype або torrent перетворюється на справжній кошмар для системних адміністраторів. І найчастіше вирішувати ці питання припадає на сторону клієнта. А якщо їх сотні? Для досягнення поставленої задачі необхідно фільтрувати трафік, що проходить через маршрутизатор, на більш високому, прикладному рівні. Цим ми й займемося.

Завдання

Додати модуль фільтрації пакетів на прикладному рівні в iptables.

Рішення

З давніх-давен існували надбудови для міжмережевого екрану, такі як L7-filter і IPP2P. Вони дозволяли фільтрувати певний трафік, аналізуючи інформацію навіть на прикладному рівні OSI. Ці механізми стали основою цікавого проекту OpenDPI, що розповсюджується за ліцензією LGPLv3, побудованого на коді комерційного продукту PACE, який розроблявся компанією Ipoque. OpenDPI був модулем для iptables та вмів фільтрувати велику кількість різних типів пакетів. Проект припинив своє існування у 2011 році. Але з’явилася компанія ntop, яка стала використовувати вихідні джерела OpenDPI як основу для своїх продуктів. Цей проект називається nDPI і його вихідні ми будемо використовувати для виконання поставленого завдання. З’явилися умільці, які на основі вихідних nDPI створили модуль для iptables, таким чином відновивши проект OpenDPI. Здавалося б – впроваджуй не хочу. Але на практиці виявилося, що процес створення робочого модуля вимагає великої кількості сил, нервів і напильників. Програма “з коробки” – дуже сира та потребує великої кількості змін. Але адміністратори компанії “Інфотек Україна” вирішили це завдання та готові поділитися своїми напрацюваннями.

Встановлюємо необхідні для створення модуля пакети:

#apt-get install subversion make gcc libcap-dev iptables-dev module-assistant linux-headers-`uname -r`

 

Завантажуємо вихідні дані nDPI:

#cd /usr/src/
#svn co https://svn.ntop.org/svn/ntop/trunk/nDPI

 

Завантажуємо програму створення модуля звідси, розпаковуємо в довільну папку, переходимо в її корінь і з неї починаємо процес встановлення:

#NDPI_PATH=/usr/src/nDPI make 

 

(/usr/src/nDPI – шлях до вихідних nDPI, які ми завантажили спочатку)

Все має пройти без сучка і задирки – ми про це подбали))). Створюємо модуль:

#make modules_install

 

Тут теж не повинно бути проблем. Копіюємо отриманий модуль у потрібну папку та завантажуємо модуль:

#cp ipt/libxt_ndpi.so /lib/xtables
#modprobe xt_ndpi

 

Все встановлено, тепер розберемося як усім цим користуватися. Переглянемо список доступних протоколів:

#iptables -m ndpi --help
ndpi match options:
--ftp Match для пакетів FTP.
--pop Match для пакетів POP.
--smtp Match для пакетів SMTP.
--imap Match for IMAP protocol packets.
--dns Match for DNS protocol packets.
--ipp Match for IPP protocol packets.
--http Match for HTTP protocol packets.
/>--mdns Match for MDNS protocol packets.
--ntp Match for NTP protocol packets.
--netbios Match for NETBIOS protocol packets.
--nfs Match for NFS protocol packets.
--ssdp Match for SSDP protocol packets.
--bgp Match for BGP protocol packets.
--snmp Match for SNMP protocol packets.
--xdmcp Match for XDMCP protocol packets.
--smb Match for SMB protocol packets.
--syslog Match for SYSLOG protocol packets.
--dhcp Match for DHCP protocol packets.
--postgres Match for PostgreSQL протокол пакетів.
--mysql Match for MySQL protocol пакетів.
--tds Match for TDS protocol Packets.
--ddl Match for Dir ectDownloadLink протокол пакетів.
--i23v5 Match for I23V5 протокол пакетів.
--applejuice Match for AppleJuice protocol пакетів.
--directconnect Match for DirectConnect protocol пакетів.
--socrates Match for Socrates protocol packets.
--winmx Match for WinMX protocol packets.
--vmware Match for VMWare protocol packets.
--pando Match for PANDO protocol packets.
- -Filetopia Match for Filetopia Protocol Packets.
--iMESH Match for IMESH Protocol Packets.
--Kontiki Match for Kontiki Protocol Packets.
--openft Match for OpenFT Protocol Packets.
--fasttrack Match for Kazaa protocol packets.
--gnutella Match for Gnutella protocol packets.
--edonkey Match for eDonkey protocol packets.
--bittorrent Match for Bittorrent protocol packets.--off Match for OFF protocol packets.
--avi Match for AVI protocol packets.
--flash Match for Flash protocol packets.
--ogg Match for OGG protocol packets.
--mpeg Match for MPEG protocol packets.
--quicktime Match for QuickTime protocol packets.
--realmedia Match for RealMedia protocol packets.
--windowsmedia Match for Windowsmedia protocol packets.
/>--mms Match for MMS protocol packets.
--xbox Match for XBOX protocol packets.
--qq Match for QQ protocol packets.
--move Match for MOVE protocol packets.
--rtsp Match for RTSP protocol packets.
--feidian Match for Feidian protocol packets.
--icecast Match for Icecast protocol packets.
--pplive Match for PPLive protocol пакетів.
--ppstream Match for PPStream протокол пакетів.
--zattoo Match for Zattoo protocol пакетів.
--shoutcast Match for SHOUTCast protocol Packets.
--sopcast Match for SopCast protocol packets.
--tvants Match for TVAnts protocol пакетів.
--tvuplayer Match for TVUplayer протокол пакетів.
--veohtv Match for VeohTV протокол пакетів.
--qqlive Match for QQLive протокол пакетів.
--thunder Match for Thunder protocol packets.
--soulseek Match for Soulseek protocol packets.
--gadugadu Match for GaduGadu protocol packets.
--irc Match for IRC protocol packets.
--popo Match for Popo protocol packets.
--jabber Match for Jabber protocol packets.
--msn Match for MSN protocol packets.
--oscar Match for Oscar protocol packets.
- -Yahoo Match for Yahoo Protocol Packets.
--Battlefield Match for Battlefield Protocol Packets.
--Quake Match for Quake Protocol Packets.
--vrrp Match for VRRP Protocol Packets.
--steam Match for Steam protocol packets.
--hl2 Match for Halflife2 protocol packets.
--worldofwarcraft Match for World_of_Warcraft protocol packets.
--telnet Match for Telnet protocol packets.--stun Match for STUN protocol packe ts.
--ipsec Match for IPSEC protocol packets.
--gre Match for GRE protocol packets.
--icmp Match for ICMP protocol packets.
--igmp Match for IGMP protocol packets.
--egp Match for EGP protocol packets.
--sctp Match for SCTP protocol packets.
--ospf Match for OSPF protocol packets.
--ipip Match for IP_in_IP protocol packets.
--rtp Match for RTP protocol packets.
--rdp Match for RDP protocol packets.
--vnc Match for VNC protocol packets.
- -pcanywhere Match for PCAnywhere протокол пакетів.
--ssl Match for SSL protocol Packets.
--ssh Match for SSH protocol Packets.
--usenet Match for USENET protocol Packets.
>--mgcp Match для пакетів MGCP.
--iax Match для пакетів IAX.
--tftp Match для пакетів TFTP.
--afp Match for AFP протоколів. br />--stealthnet Match for StealthNet протокол пакетів.
--aimini Match for Aimini protocol Packets.
--sip Match for SIP protoc ol packets.
--truphone Match for Truphone protocol packets.
--icmpv6 Match for ICMPv6 protocol packets.
--dhcpv6 Match for DHCPv6 protocol packets.
--armagetron Match для Armagetron протокол пакетів.
--crossfire Match for CrossFire protocol пакетів.
--dofus Match for Dofus protocol пакетів.
--fiesta Match for Fiesta protocol Packets.
-- Florensia Match for Florensia Protocol Packets.
--guildwars Match for Guildwars Protocol Packets.
--httpactivesync Match for HTTP_Application_Activesync Protocol Packets.
--Kerberos Match for Kerberos Protocol Packets.
--ldap Match for LDAP protocol packets.
--maplestory Match for MapleStory protocol packets.
--mssql Match for msSQL protocol packets.
--pptp Match for PPTP protocol packets.
/>--warcraft3 Match for WARCRAFT3 протокол пакетів.
--wokf Match for World_of_Kung_Fu protocol Packets.
--meebo Match for MEEBO protocol Packets.
--facebook Match for FaceBook protocol packets.
--twitter Match for Twitter protocol packets.
--dropbox Match for DropBox protocol packets.
--gmail Match for Gmail protocol packets.
--gmaps Match для Google_Maps протокол пакетів.
--youtube Match for YouTube протокол пакетів.
--skype Match for Skype protocol пакетів.
--google Match for Google protocol Packets.
-- dcerpc Match for DCE_RPC protocol packets.
--netflow Match for NetFlow_IPFIX protocol packets.
--sflow Match for sFlow protocol packets.
--httpconnect Match for HTTP_Connect_SSL_over_HTTP protocol packets.
--httpproxy Match for HTTP_Proxy protocol packets.
--citrix Match for Citrix protocol packets.
--netflix Match for Netflix protocol packets.
--lastfm Match for LastFM protocol packets.
/>--grooveshark Match for Grooveshark protocol packets.
--skyfileprepaid Match for SkyFile_Prepaid protocol packets.
--skyfilerudics Match for SkyFile_Rudics protocol packets.
--skyfilepostpaid Match for SkyFile_Postpaid протокол пакетів.
--citrixonline Match for CitrixOnline protocol пакетів.
--apple Match for Apple_iMessage_FaceTime protocol Packets.
--webex Match for Webex protocol Packets.
--wgatsapp Match for WhatsApp protocol Packets.
--appleicloud Match for Apple_iCloud protocol Packets.
--Viber Match for Viber Protocol Packets.
--Appleitunes Match for Apple_iTunes Protocol Packets.
/>--radius Match for Radios протокол пакетів.
--windowsupdate Match for Windows_Update protocol Packets.
--teamviewer Match for TeamViewer protocol Packets.
--tuenti Match for Tuenti protocol Packets.
--lotusnotes Match for Lotus_Notes протокол пакетів.
--sap Match for SAP protocol Packets.
--gtp Match for GTP protocol Packets.
--upnp Match for uPnP protocol пакетів.
--llmnr Match for LLMNR протокол пакетів.
--remotescan Match for Remote_Scan protocol Packets.
--spotify Match for Spotify prot ocol packets.
--webm Match for WebM protocol packets.
--h323 Match for H323 protocol packets.
--openvpn Match for OpenVPN protocol packets.
--noe Match for NOE протокол пакетів.
--ciscovpn Match for CiscoVPN protocol Packets.
--teamspeak Match for Teamspeak protocol пакетів.
--tor Match for TOR protocol пакетів.
-- rsync Match for Skinny protocol packets.
--skinny Match for Corba protocol packets.
--rtcp Match for RTCP protocol packets.
--rsync Match for RSync protocol packets.
--oracle Match for Oracle protocol packets.
--corba Match for Corba protocol packets.
--ubuntuone Match for UbuntuOne protocol packets.

 

Залишилося тільки вибрати потрібний протокол і створити на його основі правило в iptables. Ось так:

#iptables -A FORWARD -m ndpi --skype -j DROP

 

Або так:

#iptables -A INPUT -m ndpi --bittorrent -j MARK --set-mark 1

 

І використовувати промарковані пакети для обмеження пропускної здатності до 1 кБ/с. Використовуйте.

September 12, 2013

Якщо у вас виникли питання

ЗВ'ЯЖІТЬСЯ З НАМИ!

Залишіть свої дані і ми зв'яжемося з вами найближчим часом