OpenDPI — библиотека для классификации трафика на основе технологии глубокого анализа пакетов (DPI — Deep Packet Inspection). Проект IPP2P более не поддерживается, и, в качестве замены, предлагает использовать именно OpenDPI. В отличие от IPP2P, основной целью которого является определение именно p2p трафика, OpenDPI поддерживает широкий набор различных протоколов. OpenDPI изначально спроектирован для очень низкого уровня ложных положительных срабатываний. В отличие от L7-filter не требует наложения патчей на iptables и ядро; работает в виде модуля ядра и библиотеки xtables. Также определения протоколов представляют собой не список регэкспов, а модули на C, что повышает быстродействие. Недавно для этой библиотеки была реализована поддержка iptables. А теперь давайте попробуем использовать OpenDPI на практике.
Идем в раздел Downloads сайта проекта. Скачиваем файлы opendpi-1.2.0.tar.gz и opendpi-netfilter-wrapper-1.1.tar.gz (эти версии актуальны на момент написания статьи). Если есть желание поиграться — изучите содержимое opendpi-1.2.0.tar.gz, попробуйте собрать обычным образом (./configure && make && make install), поэкспериментируете со скармливанием различных pcap-файлов демо-приложению OpenDPI_demo. Приступаем к сборке модуля iptables. Вам понадобятся заголовки ядра и iptables. Также необходимо, чтобы в ядре были выставлены определенные опции:
Connection tracking events Symbol: NF_CONNTRACK_EVENTS Location: → Networking support → Networking options
Connection tracking netlink interface Symbol: NF_CT_NETLINK Location: → Networking support → Networking options
Распакуйте opendpi-netfilter-wrapper-1.1.tar.gz и перейдите в каталог opendpi-netfilter-wrapper-1.1. Сюда распакуйте opendpi-1.2.0.tar.gz. Т.е. в каталоге opendpi-netfilter-wrapper-1.1 должны находиться файлы README, ipq_*.diff, каталог wrapper и каталог opendpi-1.2.0. В каталоге opendpi-1.2.0 соответственно исходники OpenDPI. Ниже все описанные действия в виде команд:
$ ls opendpi-1.2.0.tar.gz opendpi-netfilter-wrapper-1.1.tar.gz $ tar -xzf opendpi-netfilter-wrapper-1.1.tar.gz $ cd opendpi-netfilter-wrapper-1.1 $ tar -xzf ../opendpi-1.2.0.tar.gz
Теперь переходите в каталог opendpi-1.2.0:
$ cd opendpi-1.2.0
и применяйте патчи:
$ patch -p0 < ../ipq_main.h.diff $ patch -p0 < ../ipq_protocols.h.diff
После этого необходимо установить переменную среды:
$ export OPENDPI_PATH=$(pwd)
и перейти в каталог wrapper:
$ cd ../wrapper
Теперь наложите патч для поддержки ядра 2.6.35 (поддержка старых ядер сломана не будет). Патч написал, посравнивав исходники netfilter в 2.6.34 и 2.6.35. Разработчикам патч уже отправлен, скачать его можно в этой ветке обсуждения на офсайте. Кладите патч на один уровень с каталогом opendpi-netfilter-wrapper-1.1 и применяйте его командой:
patch -p3 < ../../opendpi-netfilter-wrapper-1.1_2.6.35_v2.patch
Затем нужно выполнить:
$ make # make modules_install # cp ipt/libxt_opendpi.so /lib/xtables
Теперь можно использовать модуль:
# modprobe xt_opendpi
Изучите доступные опции:
# iptables -m opendpi –help
Попробуйте в действии:
# iptables -A OUTPUT -m opendpi –http -j DROP # wget http://ya.ru/ –2010-11-12 20:57:41– http://ya.ru/ Connecting to 213.180.204.3:80… connected. HTTP request sent, awaiting response… ^C
Возможные ошибки при сборке:
FATAL: Error inserting xt_opendpi (/lib/modules/2.6.34-gentoo-r12/extra/xt_opendpi.ko): Device or resource busy
значит вы не выставили верные опции в ядре (см. выше)
/opendpi/opendpi-netfilter-wrapper-1.1/wrapper/src/main.c:466: error: dereferencing pointer to incomplete type
значит вы скорее всего используете ядро 2.6.35 или выше. Необходимо наложить патч, указанный в статье выше.
Ебилд для Gentoo выложил тут.
UPD: Заявленный список поддерживаемых протоколов: opendpi match options:
--ftp Match for FTP protocol packets. --pop Match for Mail_POP protocol packets. --smtp Match for Mail_SMTP protocol packets. --imap Match for Mail_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. --apple Match for AppleJuice protocol packets. --directconnect Match for DirectConnect protocol packets. --socrates Match for Socrates protocol packets. --winmx Match for WinMX protocol packets. --manolito Match for MANOLITO 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/Fasttrack 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/Webthunder 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. --secondlife Match for Second Life 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.