« Назад

Применение технологии Deep Packet Inspection (DPI) в Linux Debian 7 (wheezy)

Межсетевые экраны, фильтрующие пакеты на втором и третьем уровне модели 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 for FTP protocol packets.
--pop Match for POP protocol packets.
--smtp Match for SMTP protocol packets.
--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 protocol packets.
--mysql Match for MySQL protocol packets.
--tds Match for TDS protocol packets.
--ddl Match for DirectDownloadLink protocol packets.
--i23v5 Match for I23V5 protocol packets.
--applejuice Match for AppleJuice protocol packets.
--directconnect Match for DirectConnect protocol packets.
--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 packets.
--ppstream Match for PPStream protocol packets.
--zattoo Match for Zattoo protocol packets.
--shoutcast Match for SHOUTCast protocol packets.
--sopcast Match for SopCast protocol packets.
--tvants Match for TVAnts protocol packets.
--tvuplayer Match for TVUplayer protocol packets.
--veohtv Match for VeohTV protocol packets.
--qqlive Match for QQLive protocol packets.
--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 packets.
--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 protocol packets.
--ssl Match for SSL protocol packets.
--ssh Match for SSH protocol packets.
--usenet Match for USENET protocol packets.
--mgcp Match for MGCP protocol packets.
--iax Match for IAX protocol packets.
--tftp Match for TFTP protocol packets.
--afp Match for AFP protocol packets.
--stealthnet Match for StealthNet protocol packets.
--aimini Match for Aimini protocol packets.
--sip Match for SIP protocol packets.
--truphone Match for Truphone protocol packets.
--icmpv6 Match for ICMPv6 protocol packets.
--dhcpv6 Match for DHCPv6 protocol packets.
--armagetron Match for Armagetron protocol packets.
--crossfire Match for CrossFire protocol packets.
--dofus Match for Dofus protocol packets.
--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 protocol packets.
--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 for Google_Maps protocol packets.
--youtube Match for YouTube protocol packets.
--skype Match for Skype protocol packets.
--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 protocol packets.
--citrixonline Match for CitrixOnline protocol packets.
--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 Radius protocol packets.
--windowsupdate Match for Windows_Update protocol packets.
--teamviewer Match for TeamViewer protocol packets.
--tuenti Match for Tuenti protocol packets.
--lotusnotes Match for Lotus_Notes protocol packets.
--sap Match for SAP protocol packets.
--gtp Match for GTP protocol packets.
--upnp Match for uPnP protocol packets.
--llmnr Match for LLMNR protocol packets.
--remotescan Match for Remote_Scan protocol packets.
--spotify Match for Spotify protocol packets.
--webm Match for WebM protocol packets.
--h323 Match for H323 protocol packets.
--openvpn Match for OpenVPN protocol packets.
--noe Match for NOE protocol packets.
--ciscovpn Match for CiscoVPN protocol packets.
--teamspeak Match for Teamspeak protocol packets.
--tor Match for TOR protocol packets.
--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 кБ/с. Пользуйтесь.

Сентябрь 12, 2013

Если у вас возникли вопросы

СВЯЖИТЕСЬ С НАМИ!

Оставьте свои данные и мы свяжемся
с вами ближайшее время