Применение технологии 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` sudo apt-get install libtool sudo apt-get install autoconf sudo apt-get install pkg-config sudo apt-get install subversion sudo apt-get install iptables-dev sudo apt-get install libpcap-dev
Скачиваем исходники nDPI:
#cd /usr/src/ #wget https://rootmaster.com.ua/files/master.zip
##########################################
Скачиваем допиленную программу создания модуля отсюда, распаковываем в произвольную папку, переходим в ее корень и из нее начинаем процесс установки:
#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 кБ/с. Пользуйтесь.
http://www.sysadmin.in.ua/info/index/21/35/50
http://thingsinlinux.blogspot.com/2016/02/installing-and-configuring-ndpi.html