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 -> Network packet filtering framework (Netfilter) -> Core Netfilter Configuration -> Netfilter connection tracking support * Опция Connection tracking netlink interface должна быть отключена: Connection tracking netlink interface Symbol: NF_CT_NETLINK Location: -> Networking support -> Networking options -> Network packet filtering framework (Netfilter) -> Core Netfilter Configuration -> 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.
Warning: Cannot modify header information - headers already sent by (output started at /var/www/thesuki.org/dokuwiki/inc/Action/Export.php:106) in /var/www/thesuki.org/dokuwiki/inc/actions.php on line 38
shitbox:iptables_opendpi [SukuDokuWiki]

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