User Tools

Site Tools


shitbox:iptables_opendpi

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 должна быть включена:

Connection tracking events Symbol: NF_CONNTRACK_EVENTS Location: → Networking support → Networking options

  1. > Network packet filtering framework (Netfilter)
  2. > Core Netfilter Configuration
    1. > Netfilter connection tracking support
  • Опция Connection tracking netlink interface должна быть отключена:

Connection tracking netlink interface Symbol: NF_CT_NETLINK Location: → Networking support → Networking options

  1. > Network packet filtering framework (Netfilter)
  2. > Core Netfilter Configuration
    1. > Netfilter connection tracking support

Распакуйте 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

Возможные ошибки при сборке:

  • Если компилятор жалуется, что не может найти файлы generated/*.h, значит у вас нет заголовков ядра. Возможно также, что вы сделали make clean в каталоге с исходниками ядра.
  • Если при modprobe вы получаете ошибку

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. 
shitbox/iptables_opendpi.txt · Last modified: 2010/11/17 12:04 by slayer