Пиринговая сеть (P2P от англ. peer-to-peer – равный к равному) – это компьютерная сеть, основанная на равноправии участников. В такой сети отсутствуют выделенные серверы, а каждый узел является как сервером так и клиентом одновременно. Такая организация сети позволяет сохранить работоспособность при любом количестве и любом сочетании доступных узлов.
Иногда приходится отфильтровать и блокировать трафик пиринговых сетей, таких например как BitTorrent и eDonkey. Я думаю это головная боль не одного системного администратора так как в большинстве случаев заблокировать его не так то просто как может показаться на первый взгляд. Зачастую этот трафик не привязывается к определенному порту, поэтому появляется необходимость искать более интеллектуальные способы определения трафика нежели просто блокирование одного порта на фаерволе. Здесь описан модуль к iptables который автоматически обнаруживает сигнатуру пирингового трафика, который в дальнейшем можно блокировать. Модуль называется ipp2p
Ipp2p
Перейду ближе к установке
Что имеется:
Операционная система: Ubuntu 10.04 server LTS (Ядро версии 2.6.32.24)
Фаервол: iptables v 1.4.6 (По умолчанию стоит фаервол версии 1.4.4, я обновил его используя исходники с официального сайта)
К сожалению, исходный код модуля, уже давно не поддерживается и те кто будут пытаться установить код на новых версиях ядра (более 2.6.22) получат нижеследующую ошибку:
Проблема заключается в больших изменениях в ядре ABI. И к счастью, эти изменения не так обширны, чтобы нельзя было изменить ipp2p, так чтобы он не мог работать на новых версиях ядра. Существует патченная версия для новых ядер. Скачать можно отсюда: http://burnachurch.com/download/5/
Установка
Необходимо скачать исходные коды ядра, заголовочные файлы и исходные коды iptables`а. Как вы их будете получать оставляю за вашей совестью, главное, чтобы они были и были рабочими.
Здесь необходимо подправить файл Makefile, где необходимо указать пути к исходным файлам ядра и фаервола.
Чтобы избежать ошибки (kernel: ip_tables: ipp2p match: invalid size 16 != 8) которая возникает после установки модуля необходимо в файле ipt_ipp2p.c закоментировать строки с 838 по 841:
и заменить строку 861:
на
На этом изменения заканчиваются.
Модуль загружен! Можно работать с P2P трафиком.
Иногда приходится отфильтровать и блокировать трафик пиринговых сетей, таких например как BitTorrent и eDonkey. Я думаю это головная боль не одного системного администратора так как в большинстве случаев заблокировать его не так то просто как может показаться на первый взгляд. Зачастую этот трафик не привязывается к определенному порту, поэтому появляется необходимость искать более интеллектуальные способы определения трафика нежели просто блокирование одного порта на фаерволе. Здесь описан модуль к iptables который автоматически обнаруживает сигнатуру пирингового трафика, который в дальнейшем можно блокировать. Модуль называется ipp2p
Ipp2p
iptables -i eth0 -A FORWARD -m ipp2p --ipp2p -j LOG --log-level=6 --log-prefix “p2p_net: ” "ipp2p: "
iptables -i eth0 -A FORWARD -m ipp2p --ipp2p -j DROP
iptables -i eth0 -A FORWARD -p udp -m ipp2p --bit -j DROP
iptables -i eth0 -A FORWARD -p tcp -m ipp2p --edk -j DROP
Перейду ближе к установке
Что имеется:
Операционная система: Ubuntu 10.04 server LTS (Ядро версии 2.6.32.24)
Фаервол: iptables v 1.4.6 (По умолчанию стоит фаервол версии 1.4.4, я обновил его используя исходники с официального сайта)
К сожалению, исходный код модуля, уже давно не поддерживается и те кто будут пытаться установить код на новых версиях ядра (более 2.6.22) получат нижеследующую ошибку:
router:~# /ipp2p-0.8.2$ make
Makefile:36: You need to install iptables sources and maybe set IPTABLES_SRC
make -C /lib/modules/2.6.26-2-686/build SUBDIRS=/root/ipp2p-0.8.2 modules
make[1]: Entering directory `/usr/src/linux'
CC [M] /root/ipp2p-0.8.2/ipt_ipp2p.o
/usr/src/ipp2p-0.8.2/ipt_ipp2p.c: In function 'match':
/usr/src/ipp2p-0.8.2/ipt_ipp2p.c:751: error: 'const struct sk_buff' has no member named 'nh'
/usr/src/ipp2p-0.8.2/ipt_ipp2p.c: At top level:
/usr/src/ipp2p-0.8.2/ipt_ipp2p.c:871: warning: initialization from incompatible pointer type
/usr/src/ipp2p-0.8.2/ipt_ipp2p.c:874: warning: initialization from incompatible pointer type
/usr/src/ipp2p-0.8.2/ipt_ipp2p.c: In function 'init':
/usr/src/ipp2p-0.8.2/ipt_ipp2p.c:883: error: implicit declaration of function 'ipt_register_match'
/usr/src/ipp2p-0.8.2/ipt_ipp2p.c: In function 'fini':
/usr/src/ipp2p-0.8.2/ipt_ipp2p.c:888: error: implicit declaration of function 'ipt_unregister_match'
make[2]: *** [/usr/src/ipp2p-0.8.2/ipt_ipp2p.o] Error 1
Проблема заключается в больших изменениях в ядре ABI. И к счастью, эти изменения не так обширны, чтобы нельзя было изменить ipp2p, так чтобы он не мог работать на новых версиях ядра. Существует патченная версия для новых ядер. Скачать можно отсюда: http://burnachurch.com/download/5/
Установка
Необходимо скачать исходные коды ядра, заголовочные файлы и исходные коды iptables`а. Как вы их будете получать оставляю за вашей совестью, главное, чтобы они были и были рабочими.
tar zxfv ipp2p-0.8.2+2.6.22.tar.gz
cd ipp2p-0.8.2-patch
Здесь необходимо подправить файл Makefile, где необходимо указать пути к исходным файлам ядра и фаервола.
Чтобы избежать ошибки (kernel: ip_tables: ipp2p match: invalid size 16 != 8) которая возникает после установки модуля необходимо в файле ipt_ipp2p.c закоментировать строки с 838 по 841:
struct ipp2p_match_info {
long int dunno_what_this_is_for;
long int i_also_dunno_what_this_is_for;
};
и заменить строку 861:
.matchsize = sizeof(struct ipp2p_match_info),
на
.matchsize = XT_ALIGN(sizeof(struct ipt_p2p_info)),
На этом изменения заканчиваются.
make
cp ipt_ipp2p.ko /lib/modules/`uname -r`/kernel/net/ipv4/
cp libipt_ipp2p.so /lib/xtables/
depmod -a
modprobe ipt_ipp2p
Модуль загружен! Можно работать с P2P трафиком.