Hodžův blog

10 Zář

Omezování P2P sítí – IPP2P & Ubuntu 7.04 (Feisty Fawn)

IPP2P patří asi mezi nejlepší (volně dostupné) filtry k omezování P2P sítí. Instalace se dá zvládnout za několik málo chvil a výsledek je velmi uspokojivý. Předpokladem pro úspěšné sestavení IPP2P je ovšem přítomnost hlavičkových souborů a modul CONNMARK v jádře.

Postup instalace:
1. Nainstalujeme si hlavičkové soubory kernelu a iptables
sudo apt-get install iptables-dev linux-headers-2.6.20-16-server

2. Stáhneme rozšíření IPP2P
cd /usr/src
wget http://ipp2p.org/downloads/ipp2p-0.8.2.tar.gz

3. Rozbalíme stažený archív
tar -xzf ipp2p-0.8.2.tar.gz
cd ipp2p-0.8.2/

Update: aplikujeme patch na Makefile

4. Spustíme kompilaci
make

5. Nakopírujeme moduly do standardních adresářů
cp libipt_ipp2p.so /lib/iptables
cp ipt_ipp2p.ko /lib/modules/`uname -r`/kernel/net/ipv4

6. Vygenerujeme novou mapu závislostí
sudo depmod

7. Načteme modul IPP2P do jádra
sudo insmod /lib/modules/`uname -r`/kernel/net/ipv4/ipt_ipp2p.ko

Samotné filtrování P2P sítí pak provádím takto:

1. Označkuju si veškeré P2P sítě (UDP pakety mimo CONNMARK!)
iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -p tcp -m mark ! --mark 0 -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m ipp2p --edk -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -m ipp2p --dc -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -p tcp -m ipp2p --gnu -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p tcp -m ipp2p --kazaa -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp -m ipp2p --bit -j MARK --set-mark 5
iptables -t mangle -A PREROUTING -p tcp -m ipp2p --apple -j MARK --set-mark 6
iptables -t mangle -A PREROUTING -p tcp -m ipp2p --winmx -j MARK --set-mark 7
iptables -t mangle -A PREROUTING -p tcp -m ipp2p --soul -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m ipp2p --ares -j MARK --set-mark 9
iptables -t mangle -A PREROUTING -p tcp -j CONNMARK --save-mark
iptables -t mangle -A PREROUTING -p udp -m ipp2p --edk -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p udp -m ipp2p --dc -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -p udp -m ipp2p --gnu -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p udp -m ipp2p --kazaa -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p udp -m ipp2p --bit -j MARK --set-mark 5
iptables -t mangle -A PREROUTING -p udp -m ipp2p --apple -j MARK --set-mark 6
iptables -t mangle -A PREROUTING -p udp -m ipp2p --winmx -j MARK --set-mark 7
iptables -t mangle -A PREROUTING -p udp -m ipp2p --soul -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p udp -m ipp2p --ares -j MARK --set-mark 9

2. Ve vhodnou dobu pak například pomocí démona CRON P2P sítě zakazuji
iptables -t mangle -F POSTROUTING
iptables -t mangle -A POSTROUTING -m mark --mark 1 -j DROP
iptables -t mangle -A POSTROUTING -m mark --mark 2 -j DROP
iptables -t mangle -A POSTROUTING -m mark --mark 3 -j DROP
iptables -t mangle -A POSTROUTING -m mark --mark 4 -j DROP
iptables -t mangle -A POSTROUTING -m mark --mark 5 -j DROP
iptables -t mangle -A POSTROUTING -m mark --mark 6 -j DROP
iptables -t mangle -A POSTROUTING -m mark --mark 7 -j DROP
iptables -t mangle -A POSTROUTING -m mark --mark 8 -j DROP
iptables -t mangle -A POSTROUTING -m mark --mark 9 -j DROP

nebo naopak povoluji:
iptables -t mangle -F POSTROUTING
iptables -t mangle -A POSTROUTING -m mark --mark 1 -j ACCEPT
iptables -t mangle -A POSTROUTING -m mark --mark 2 -j ACCEPT
iptables -t mangle -A POSTROUTING -m mark --mark 3 -j ACCEPT
iptables -t mangle -A POSTROUTING -m mark --mark 4 -j ACCEPT
iptables -t mangle -A POSTROUTING -m mark --mark 5 -j ACCEPT
iptables -t mangle -A POSTROUTING -m mark --mark 6 -j ACCEPT
iptables -t mangle -A POSTROUTING -m mark --mark 7 -j ACCEPT
iptables -t mangle -A POSTROUTING -m mark --mark 8 -j ACCEPT
iptables -t mangle -A POSTROUTING -m mark --mark 9 -j ACCEPT

12 Responses to “Omezování P2P sítí – IPP2P & Ubuntu 7.04 (Feisty Fawn)”

  1. 1
    lzap Says:

    Ty mas Ubuntu nekde na serveru?

  2. 2
    hodza Says:

    Pokud se budeme bavit o ciste produkcnich serverech tak ne. Tam je prevazne debian. Na testovacich serverech a „serverech“ zakazniku ho pouzivam bezne, nebot jsem liny instalovat debian na SATA disky apod.

  3. 3
    Vesela Houba Says:

    Zdravicko, nemohl bys me prosim odkazat na neco jako traffic shaper, ktery by umel bandwidth control? Neco jsem vygooglil, ale zajima me nazor nekoho se zkusenostmi z oboru. Pouzivam iptables a webmin pro jejich konfiguraci. Predem dekuji.

  4. 4
    admin Says:

    Na stránkách časopisu LE jsem vydal obdodbný článek včetne malé ukázky shapingu.
    http://www.linuxexpres.cz/praxe/ipp2p-kladivo-na-stahovace

  5. 5
    Gawein Says:

    Kdyz mame P2P site omerkovane, slo by je nacpat do HTB tridy, vsechny do 1 tridy? Popr. jak?

  6. 6
    admin Says:

    http://hodza.net/wp-content/files/p2plimit

  7. 7
    Gawein Says:

    Zdravím, udělal jsem si takový malý skript, dle tvých článků a rad, ale objevil se mi tu menší problém. Potřebuju nějakým způsobem omezit klienta, který si změní IP adresu. Ze souboru nacitam IP adresy a rozděluju do tříd. Když ale použiju něco takového:
    # propustnost ostatni
    # ————————————————————-
    # tc class add dev eth0 parent 1:1 classid 1:9999 htb rate 50kbit ceil 50kbit
    # tc class add dev eth1 parent 1:1 classid 1:9999 htb rate 50kbit ceil 50kbit
    # tc filter add dev eth0 parent 1 protocol ip prio 10 u32 match ip src 0.0.0.0/0 flowid 1:9999
    # tc filter add dev eth1 parent 1 protocol ip prio 10 u32 match ip dst 0.0.0.0/0 flowid 1:9999

    Tak se mi neskutečně zvednou pingy na lanu a je velký loss. Byla by nějaká rada odborníka?

  8. 8
    admin Says:

    Ahoj, mrknu se ti na to, ale k tomu mi musis poslat ten vypis kompletni….

    Jinak – co na to jit z druhe strany – zakazat klientovi menit IP?

  9. 9
    Gawein Says:

    Ahoj, prosím tě mám problém s kompilací IPP2P na debianu etch, verze jadra 2.6.18-4 končím na hlášce:
    In file included from ipt_ipp2p.c:5:
    /usr/include/linux/netfilter_ipv4/ip_tables.h:137: error: expected specifier-qualifier-list before ‘u_int8_t’
    /usr/include/linux/netfilter_ipv4/ip_tables.h: In function ‘ipt_get_target’:
    /usr/include/linux/netfilter_ipv4/ip_tables.h:225: error: ‘struct ipt_entry’ has no member named ‘target_offset’
    ipt_ipp2p.c:9:21: error: net/tcp.h: není souborem ani adresářem
    ipt_ipp2p.c:10:21: error: net/udp.h: není souborem ani adresářem
    ipt_ipp2p.c: In function ‘match’:
    ipt_ipp2p.c:769: warning: pointer targets in assignment differ in signedness
    ipt_ipp2p.c:776: error: dereferencing pointer to incomplete type

    Uz jsem vyzkousel milion kombinaci, ale stejne bez uspechu. Predtim jsem kompiloval ipp2p na nizsi verzi debianu a nebyl problem. Nemel bys radu? Díky

  10. 10
    admin Says:

    >Ahoj, prosím tě mám problém s kompilací IPP2P na debianu etch, verze jadra 2.6.18-4 končím na hlášce:

    Dyť ti to tady píše:
    > error: net/tcp.h: není souborem ani adresářem
    > error: net/udp.h: není souborem ani adresářeem

    Nemáš nainstalované hlavičkové soubory kernelu (balíček linux-headers-2.6….)

  11. 11
    Gawein Says:

    apt-get install linux-kernel-headers
    Čtu seznamy balíků… Hotovo
    Vytvářím strom závislostí… Hotovo
    linux-kernel-headers je již nejnovější verze.

    Právě že mám. Někde bude zakopany pes 🙁

  12. 12
    admin Says:

    >Právě že mám. Někde bude zakopany pes 🙁
    Pokud je tam máš, pak jsou nestandardně umístěné. Oprav to vytvořením symlinku nebo přímo ve zdrojovém kódu ipp2p. Odpovídají hlavičkové soubory (jejich verze) aktuálně běžícímu kernelu?

Leave a Reply

Hodžův blog is is proudly powered by Wordpress and the Magellan Theme