LINUX-BG Адрес : http://www.linux-bg.org |
iptables с layer7 и pp2p под slackware 11 new! |
От: Вальо Публикувана на: 30-01-2007 Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=389443812 |
Статията има за цел да Ви покаже едно от решенията за ограничаване на трафика генериран от peer-to-peer (p2p).Най удачния начин за това е като ползваме l7-filter и
ipp2p. А каво е p2p (peer-to-peer): Peer to Peer (P2P) е термин, описващ технология, която изгражда мрежа от потребители, които свободно могат да разменят помежду си файлове без нуждата от сървър, който да играе ролята на посредник. Наместо един потребител да трябва да качи дадена информация на сървър, а всички останали да я изтеглят оттам, при P2P мрежите, трансферът се осъществява директно от хард диска на потребителя, към всички, които са заинтересувани от този файл. Това става с помощта на програма, наричана P2P или file sharing (анг. споделяне на файлове) клиент. Стартирайки тази програма на компютъра си, потребителят определя част от съдържанието на своя хард диск като "споделено", т.е. достъпно за всички останали, използващи съответния клиент.Малко повече за iptables: IPTABLES е firewall с невероятни възможности.. С него можете да филтрирате пакети или да маскирате ip адреси или портове(ip masquerade, NAT, PAT) и тн.. За да извършва филтриране на пакети или маскиране iptables се води по така наречените вериги(chains)- логически групиран списък от правила. Всяко правило от веригата е тест, на който ip хедърът се подлага. Веригите съдържат правила започващи от едно. Можете да задавате правилата или чрез спецификация, или чрез номер. Спецификацията на правило( rule specification ) е правилото или ( наборът от правила ), на което пакетът трябва да отговаря - тестът. Едно и също основно правило може да съществува в няколко вериги, така че аргументът верига(вижте по-долу) обикновено е задължителен. Ако целта на веригата е една от следните: ACCEPT (пропускане на пакета), DROP (отхвърляне на пакета), REJECT (отхвърляне на пакета и връщане на съобщение за грешка) или MASQUERADE (маскиране на пакета), тази цел завършва веригата, така че в тази верига няма да бъдат изпълнявани повече правила.Що е l7-filter: L7-филтъра е класификатор за линукския Netfilter който идентифицира пакети на база на данните от апликейшън леъра (оси модела). Той може да класифицира пакети като Kazaa, HTTP, Jabber, Citrix, Bittorrent, FTP, Gnucleus, eDonkey2000, и т.н. без значение от порта. Той Допълва съществуващи класификатори които са фиксирани по IP адреси, номер на порт и т.н. За какво служи IPP2P и що за животно е: Целта на IPP2P е да идентифицира peer-към-peer(p2p) данните в IP трафика. За тази цел е разширена iptables/netfilter архитектурата чрез нов сходен модул. В следствие на което IPP2P се интегрира лесно в Линукските защитни стени (Firewall) и функционалността му може да се използва чрез задаване на подходящи правила за филтриране. Let's go... Първото нещо което трябва да направим е да де-инсталираме iptables. Това можем да направим по следният начин: removepkg iptables или removepkg /var/log/packages/iptables* Следва да свалим пакетите които ще ни трябват, а те са: kernel-source-2.4.3.33 - cd1 Извлечаме архивите със следните команди: installpkg kernel-source-2.4.33.3-noarch-1.tgz Компилиране и пачване на ядрото: Що е то ядрото и какво е компилиране ? Има хора, които това не е ясно, така че ще обясня тук. Конфигурираме ядрото: cd /usr/src/linux След това избираме следният модул: Networking options ---> Запазваме конфигурацията на ядрото... Компилация на ядрото и модулите, инсталиране на модулите Проверява за зависимости make dep Компилира самото ядро като bzip имидж. Ще го намерите като файл bzImage в директорията 'arch/i386/boot'. make bzImage Компилира модулите. make modules Инсталира модулите make modules_install Знаем, че по начало lilo търси и зарежда /boot/vmlinuz. Можем да преименуваме старото ядро: mv /boot/vmlinuz /boot/vmlinuz.old Да копираме новото: cp arch/i386/boot/bzImage /boot/vmlinuz Да добавим в /etc/lilo.conf опция за зареждане на старото ядро по избор, в случай че не тръгне новото: image=/boot/vmlinuz.old Името на файла-ядро label=OldLinux Произволно наименование на ядрото root = /dev/hda1 root-дяла на вашата Linux-инсталация И да изпълним командата: lilo Инсталираме iptables-1.3.7 cd /usr/src/iptables Копираме протокола: cp /usr/src/l7-protocols-2007-01-08 /etc/l7-protocols Инсталираме pp2p: cd /usr/src/ipp2p-0.8.1_rc1 кадето е реда: IPTABLES_SRC = /usr/src/iptables-1.2.9го заменяме по следният начин: IPTABLES_SRC = /usr/src/linux-2.4.33.3/include/config/ip/nf и пишем: make На края можем да проверим дали всичко е миналко като хората по следният начин: iptables -m layer7 --help Ето и един примерен вариант за ползване: # kbps = KByte/sek # Ограничаване на скоростта на канала ---------------------------------------------------------------- $ipr qdisc add dev eth1 root handle 1: htb default 2 $ipr qdisc add dev eth0 root handle 1: htb default 2 $ipr class add dev eth1 parent 1: classid 1:1 htb rate 200kbps burst 250k $ipr class add dev eth0 parent 1: classid 1:1 htb rate 100kbps burst 250k #unclassified-------------------------------------------------------------------------------- $ipr class add dev eth1 parent 1:1 classid 1:2 htb rate 20kbps ceil 30kbps burst 1k prio 7 $ipr class add dev eth0 parent 1:1 classid 1:2 htb rate 10kbps ceil 20kbps burst 1k prio 7 $ipr qdisc add dev eth1 parent 1:2 handle 2: esfq perturb 10 $ipr qdisc add dev eth0 parent 1:2 handle 2: esfq perturb 10 #web------------------------------------------------------------------------------------------ $ipt -t mangle -A POSTROUTING -m layer7 --l7proto http -j MARK --set-mark 3 $ipr class add dev eth1 parent 1:1 classid 1:3 htb rate 150kbps ceil 200kbps burst 150k prio 2 $ipr class add dev eth0 parent 1:1 classid 1:3 htb rate 70kbps ceil 100kbps burst 150k prio 2 $ipr qdisc add dev eth1 parent 1:3 handle 3: esfq perturb 10 hash dst $ipr qdisc add dev eth0 parent 1:3 handle 3: esfq perturb 10 $ipr filter add dev eth1 protocol ip parent 1:0 prio 1 handle 3 fw flowid 1:3 $ipr filter add dev eth0 protocol ip parent 1:0 prio 1 handle 3 fw flowid 1:3 #p2p---------------------------------------------------------------------------------------- $ipt -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 4 $ipt -t mangle -A POSTROUTING -m layer7 --l7proto directconnect -j MARK --set-mark 4 $ipr class add dev eth1 parent 1:1 classid 1:4 htb rate 10kbps ceil 20kbps burst 1k prio 3 $ipr class add dev eth0 parent 1:1 classid 1:4 htb rate 5kbps ceil 10kbps burst 1k prio 3 $ipr qdisc add dev eth1 parent 1:4 handle 4: esfq perturb 10 $ipr qdisc add dev eth0 parent 1:4 handle 4: esfq perturb 10 $ipr filter add dev eth1 protocol ip parent 1:0 prio 1 handle 4 fw flowid 1:4 $ipr filter add dev eth0 protocol ip parent 1:0 prio 1 handle 4 fw flowid 1:4 #ADMINxxx.xxx.xxx.gw------------------------------------------------------------------------ $ipt -t mangle -A OUTPUT -d xxx.xxx.xxx.adm1 -j MARK --set-mark 5 $ipt -t mangle -A OUTPUT -d xxx.xxx.xxx.adm2 -j MARK --set-mark 5 $ipr class add dev eth0 parent 1:1 classid 1:5 htb rate 30kbps burst 15k prio 1 $ipr qdisc add dev eth0 parent 1:5 handle 5: sfq perturb 100 $ipr filter add dev eth0 protocol ip parent 1:0 prio 1 handle 5 fw flowid 1:5 #----------------------------------------------------------------------------- Е просто не ми е останало време за да напиша всичко и да я направя читава статията, но надявам се тоз път да сте доволни.... Първоначално статията имаше за цел да да покаже на тези които си имат поне малка представа как се работи с Гну/Линукс, но явно трябва да се пише като на първокласници... Е надявам се този път да ви хареса.... ако ли пък не то здраве да е! << Инсталация и настройка на Trac и SVN | Как да компилираме Фалкон поддръжка в MySQL 5 >> |
Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук,
но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора,
както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.
All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
|