HOGYAN Packet Shaping - Gentoo Linux Wiki



Hasonló dokumentumok
A Sangoma Technologies Intelligens

HBONE rendszergazdák tanácsa

Tűzfal építés az alapoktól. Kadlecsik József KFKI RMKI

Számítógépes Hálózatok GY 8.hét

A netfilter csomagszűrő tűzfal

Számítógépes Hálózatok GY 9.hét

IPTABLES. Forrás: Gregor N. Purdy: Linux iptables zsebkönyv

Hálózati sávszélesség-menedzsment Linux rendszeren. Mátó Péter Zámbó Marcell

Sávszélesség szabályozás kezdőknek és haladóknak. Mátó Péter

T?zfalak elméletben és gyakorlatban. Kadlecsik József KFKI RMKI

Netfilter. Csomagszűrés. Összeállította: Sallai András

Netfilter: a jó, a rossz és a csúf. Kadlecsik József KFKI RMKI <kadlec@mail.kfki.hu>

URL-LEL ADOTT OBJEKTUM LETÖLTÉSE (1) URL-LEL ADOTT OBJEKTUM LETÖLTÉSE

Számítógépes hálózatok

Ethernet/IP címzés - gyakorlat

IBM i. Szerviz és támogatás 7.1

nftables Kadlecsik József MTA Wigner FK

Department of Software Engineering

Fábián Zoltán Hálózatok elmélet

Forgalmi grafikák és statisztika MRTG-vel

Számítógépes Hálózatok. 8. gyakorlat

Internet-hőmérő alapkészlet

ERserver. iseries. Szolgáltatási minőség

Novell Nterprise Branch Office: a távoli iroda felügyeletének leegyszerűsítése

Számítógép hálózatok

2016 UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Hálózatok építése és üzemeltetése

2014 UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

CSOMAGSZŰRÉS CISCO ROUTEREKEN ACL-EK SEGÍTSÉGÉVEL PACKET FILTERING ON CISCO ROUTERS USING ACLS

Windows hálózati adminisztráció

TORLÓDÁSVÉDELMI MÓDSZEREK ÉS TECHNIKÁK ELEMZÉSE

Számítógépes Hálózatok

IPTABLES II. Jelenlegi tűzfalunk így néz ki (IPTABLES I. rész):

4. Az alkalmazások hatása a hálózat tervezésre

Az adott eszköz IP címét viszont az adott hálózat üzemeltetői határozzákmeg.

Hálózati sávszélesség-menedzsment

Internet ROUTER. Motiváció

A TechSon Prémium kategóriás DVR-ek beállítása távoli betekintéshez

AC1600 intelligens WiFi router

Számítógépes Hálózatok 2011

Linux iptables csomagszűrési gyorstalpaló, kezdőknek...

Rétegezett architektúra HTTP. A hálózatfejlesztés motorját a hálózati alkalmazások képezik. TCP/IP protokoll készlet

Using the CW-Net in a user defined IP network

Heterogén MPLS hálózat QoS alkalmazásával

OpenBSD hálózat és NAT64. Répás Sándor

átvitt bitek számával jellemezhetjük. Ezt bit/s-ban mérjük (bps) vagy ennek többszöröseiben (kbps, Mbps).

IPv6 alapú otthoni LAN hálózat kialakítása

Foglalkozási napló. Informatikai rendszergazda 14. évfolyam

Szolnoki Főiskola Szolnok

Dr. Wührl Tibor Ph.D. MsC 04 Ea. IP kapcsolás hálózati réteg

Számítógépes Hálózatok GY 8.hét

SyscoNet Kereskedelmi és Szolgáltató Kft.

Témák. Betörés megelőző rendszerek. Mire használhatjuk az IDS-t? Mi az IDS? (Intruding Detection System)

Javaslat egy Iptables tűzfal konfigurációjára Számítógép hálózatok esszé Készítette : Veress Krisztián

Hálózatok építése és üzemeltetése

Számítógépes hálózatok

IBM Business Monitor 7. változat 5. alváltozat. IBM Business Monitor telepítési kézikönyv

KÉPZETT VILLANYSZERELŐ SZAKEMBER

Kiterjedt hálózatok. 8. Hálózatok fajtái, topológiájuk. Az Internet kialakulása 1

Vezeték nélküli IP kamera / Vezetékes kamera. (Windows operációs rendszerekhez)

Konfiguráljuk be a TCP/IP protokolt a szerveren: LOAD INETCFG A menüpontokból válasszuk ki a Proctcols menüpontot:

Kiskapu Kft. Minden jog fenntartva

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

SACColni pedig kell Szolgáltatás tudatos kontroll és számlázás Service Aware Control and Charging

A B C E F G H. I J K L M N O P I M: LAN 3. port N: LAN 4. port O: Tápfeszültség csatlakozó P: Tápfeszültség kapcsoló

Hálózatkezelés: Távoli elérés szolgáltatások - PPP kapcsolatok

1. oldal, összesen: 29 oldal

Tankönyv-választás. igazgató és tankönyvfelelős kérdőív. A válaszadás önkéntes! Ki válaszol a kérdőívre? nap... óra...

Organizáció. Számítógépes Hálózatok Gyakorlati jegy. Vizsga. Web-oldal

Cisco Alkalmazásközpontú Application Centric Infrastructure

Hálózati architektúrák és Protokollok PTI 5. Kocsis Gergely

Lokális hálózatok. A lokális hálózat felépítése. Logikai felépítés

applikációs protokollok

(NGB_TA024_1) MÉRÉSI JEGYZŐKÖNYV

Hálózatkezelés Szolgáltatási minőség (QoS)

Hálózati architektúrák és Protokollok GI 7. Kocsis Gergely

DIGITÁLIS ELOSZTÓ (SPEEDPORT ENTRY 2i) FELHASZNÁLÓI ÚTMUTATÓ

További lehetőségek. Nighthawk X6 AC3200 Tri-Band WiFi-router. R8000-as modell

Hálózati réteg, Internet

P-GRADE fejlesztőkörnyezet és Jini alapú GRID integrálása PVM programok végrehajtásához. Rendszerterv. Sipos Gergely

[SZÁMÍTÓGÉP-HÁLÓZATOK]

Hálózati informatikus Mérnökasszisztens

Adathálózati (Internet) szolgáltatás Általános Szerzıdési Feltételek (v1.2) Érvényes : tól. Tartalomjegyzék

Magyar változat. A termék bemutatása. A modem elöl- vagy felülnézetben. MO251V2 Sweex vezeték nélküli ADSL 2/2+ Annex A modem/útválasztó, 54 Mb/m,

Előnyei. Helyi hálózatok tervezése és üzemeltetése 2

Bevezető. Az informatikai biztonság alapjai II.

Tűzfalak működése és összehasonlításuk

IPv6 Biztonság: Ipv6 tűzfalak tesztelése és vizsgálata

Csak felvételi vizsga: csak záróvizsga: közös vizsga: Mérnök informatikus szak BME Villamosmérnöki és Informatikai Kar január 4.

Windows hálózatok. IP cím. Hálózati kapcsolatok nyomonkövetése. < Windows

2014 UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Számítógépes Hálózatok ősz 2006

Organizáció. Számítógépes Hálózatok ősz Tartalom. Vizsga. Web-oldal

Hálózati architektúrák és Protokollok GI 8. Kocsis Gergely

Mérési útmutató a Secure Shell (SSH) controll és audit című méréshez

EMTP, EGY ÚJ LEVELEZÕ PROTOKOLL ÉS IMPLEMENTÁCIÓJA

Gyarmati Andrea: A tevékenységadminisztráció informatizálásának lehetőségei a gyermekvédelemben

Összefoglaló az SMS Center által nyújtott szolgáltatásokról

Gyors üzembe helyezés

Sprint International Hungary Kft. Általános Szerződési Feltételek. Az üzleti előfizetők részére nyújtott elektronikus hírközlési szolgáltatásokra

Átírás:

Page 1 of 8 HOGYAN Packet Shaping A Gentoo Linux Wiki wikibıl HOGYAN Telepítési módok -- Portage -- Kernel és rendszerindítás -- Hálózat -- X-szel kapcsolatos -- Egyéb Ez a leírás az angol nyelvő Gentoo Wiki-bıl lett átemelve. Tartalomjegyzék 1 Bemutatkozás 2 A Megoldás 3 Elıfeltételek 4 Kernel 5 Szabályzási stratégia 6 Priorizálás 7 Iptables 8 A HTB megértése 8.1 Qdisc-ek 8.2 Classes (Osztályok) 8.3 Rates (Ráták) 8.4 Ceil 8.5 Bursts 8.6 Quantum 8.7 r2q 8.8 Prio 9 Az SFQ megértése 10 Iproute2 10.1 l7-filter 11 Tesztelés 11.1 Grafikonok 11.2 Feltöltési ráta beállítása 12 Hivatkozások Informatikai rendszerek, rendszergazdai szolgáltatások, adatmentés, adatbiztonság. digisoft.hu Válts ADSL szolgáltatót. Korlátlan ADSL 2990 Ft/hó+áfa Jelentkezz 2008. június 30.-ig. www.nordtelekom.hu Usenet for Providers Usenet for Resellers and Providers. 160 days retention. Only Wholesale. News-Service.com/Usenet Linux oktatás, tanfolyam Felhasználói és rendszergazdai szintő Linux tanfolyamok www.iqjb.hu Windows Hotspot Software FirstSpot Wi-Fi Hotspot Management Software for Windows - Free Trial patronsoft.com/firstspot Bemutatkozás Ahogy errıl beszélünk a peer-to-peer programok egyre népszerőbbek lesznek. Ezek a programok telítik az internet kapcsolatokat, és megnehezítik más forgalmakat átjutását a kapcsolaton keresztül. Ha egy felhasználó lefoglalja az egész sávszélességet, akkor az internet böngészés is könnyen kínszenvedéssé válhat. Olyan programok mint a bittorrent és más P2P kliensek többnyire a kapcsolatunk feltöltési részét telítik és bár a kliensek képesek limitálni a feltöltési sebességet, mégsem teszik mindig. A megoldás a forgalom szabályzás. A Megoldás Mielıtt nekiállnánk elıbb megkell értenünk mi az a sorbanállás (queueing). Ez a magyarázat erısen leegyszerősített, de megérthetı benne az egész lényege. Felállásunk most egy 2048/128 sebességő internet kapcsolat, egy linuxos gép két ethernet kártyával, valamint egy hálózat néhány klienssel. A DSL-modem belsı ip címe: 192.168.2.1 A linuxos gép ip címei: eth0 192.168.1.1, eth1 192.168.2.2 és 192.168.2.1 az átjáró A kliensek a következı címekkel rendelkeznek: 192.168.1.16, 192.168.1.17, 192.168.1.18 és 192.168.1.1 az átjárójuk (tehát a linuxos gép) A következı folyamat játszódik le amikor egy kliens egy csomagot küld az internet felé: A csomag elhagyja a klienst (192.168.1.16) A csomag megérkezik az átjáró eth0 interfészére (192.168.1.1) Az átjáró a csomagot átereszti és berakja a kimenı sorba (output queue) A csomag elhagyja az átjárót az eth1-en keresztül (192.168.2.2) A csomag megérkezik a DSL-modemre (192.168.2.1) A csomag belép a DSL-modem kimenı sorába A csomag elhagyja a DSL-modemet Fontos, hogy megértsük ennél a lépésnél, hogy mi a különbség a sávszélesség és a késleltetés között. A késleltetés az az idıtartam amennyire szüksége van egy csomagnak ahhoz, hogy A pontból B pontba jusson. A szávszélesség pedig az az adatmennyiség amely A pontból érkezik B-be adott idı alatt. Tehát ha egy szótárat átvinnék a város másik végén lakó barátomhoz a sávszélességem jó lenne, de a késleltetésem elég rossz lenne (hogy pontosak legyünk, az utazással töltött idı). Azonban ha felhívnám a barátom telefonon és elkezdeném felolvasni neki a szótárt, a késleltetésem jó lenne, de a sávsélességem az elsı példánál is kevesebb lenne. Továbbá fontos megjegyezni, hogy a sávszélesség és a késleltetés nem kapcsolódnak közvetlenül. Ha ugyanannyi idıbe kerülne nekem felolvasni a szótárt, mint átutazni vele a városon, akkor a sávszélességem mindkét esetben ugyanannyi lenne. Azonban a késleltetés nem változna meg! Vissza a DSL-modem példához. Ahogy már tudjuk a DSL-modem feltöltési sebessége csak 128kbit. Ez azt jelenti, hogy a modem másodpercenként csak 128kbits adatot képes küldeni (sávszélesség). Ha az átjáró ennél több adatot küld, akkor azok egy vonalban a kimenı sorba kerülnek és kivárják a sorukat míg elküldésre kerülnek, létrehozva egy várólistát. Ekkor az történik, hogy a DSL modem kimenı sora megtelik. Ha egy csomagnak 5 másodpercre van szüksége, hogy a sor legaljáról a legtetejére kerüljön, akkor a késleltetésünk 5 másodperc lesz. Ez rosz az interaktivitásnak. Mivel nincs befolyásunk a DSL-modem mőködésére ezért a sort a DSL-modemrıl elıre kell hoznunk a linuxos gépre. A linuxos gépen az eth1 kimenı sebességét lecsökkentve a DSL-modem feltöltési sebességénél kicsivel alacsonyabbra, elérhetjük, hogy a csomagok a linuxos gépen kerülnek a várakozósorba mielıtt átkerülnének a DSL-modemre, amelynek így üres lesz a kimenı sora, tehát a beesı csomagokat remélhetıleg rögvest kézbesíteni tudja az Internet felé. Amint a várólista sor átkerül a linuxos gépre, képesek leszünk beavatkozni, képesek leszünk szabályozni. Elıfeltételek Nos sokmindenre nem lesz szükségünk. Egy számítógép amelyen fut gentoo/linux, és kettı hálózati csatolóval rendelkezik. A szerzınek sikerült gond nélkül futtatnia egy 200 MHz-es gépen és úgy gondolja ennél lassabb is képes megbírkózni a feladattal. Kernel Figyelem: (Nem optimális) A legtöbb említett elıfeltétel nem biztos, hogy mindenféleképpen szükséges, mert a beállításoktól és az egyedi igényektıl függenek. Elıször is szerezd be a legutóbbi 2.4-es vagy 2.6-os kernelt és rakd a /usr/src könyvtárba, majd készíts egy szimbolikus linket róla /usr/src/linux néven.

Page 2 of 8 Ha 2.4-es kernelt használsz, szükséged lesz a POM patchekre a http://netfilter.org/ oldalról, amivel meg kell foltozni a kernelt. A jelszó: cvs. (cvs-en keresztüli hozzáférés jelen pillanatban nem mőködik...) cvs -d :pserver:cvs@pserver.netfilter.org:/cvspublic login cvs -d :pserver:cvs@pserver.netfilter.org:/cvspublic co netfilter/userspace netfilter/patch-o-matic./netfilter/patch-o-magic/runme extra Ha kész vagy a patcheléssel, akkor még néhány módosítást kell eszközölnöd a kernelben. Ha az alábbi opció nem létezik, akkor alkalmazd a POM patchet mégegyszer. Linux Kernel Beállítás: Kernel 2.4 Networking options ---> QoS and/or fair queueing ---> [*] QoS and/or fair queueing <M> HTB packet scheduler <M> SFQ queue [*] QoS support [*] Rate estimator [*] Packet classifier API <M> Firewall based classifier [*] Traffic policing (needed for in/egress) IP: Netfilter Configuration ---> <M> Connection tracking (required for masq/nat) <M> IP tables support (required for filtering/masq/nat) <M> limit match support <M> MAC address match support <M> Packet type match support <M> netfilter MARK match support <M> Multiple port match support <M> TOS match support <M> random match support <M> recent match support <M> ECN match support <M> DSCP match support <M> AH/ESP match support <M> LENGTH match support <M> TTL match support <M> tcpmss match support <M> Helper match support <M> Connection state match support <M> Connection mark match support <M> Connection tracking match support <M> Unclean match support (EXPERIMENTAL) <M> Owner match support (EXPERIMENTAL) <M> Packet filtering <M> REJECT target support <M> MIRROR target support (EXPERIMENTAL) <M> Full NAT <M> MASQUERADE target support <M> REDIRECT target support <M> Basic SNMP-ALG support (EXPERIMENTAL) <M> Packet mangling <M> TOS target support <M> ECN target support <M> DSCP target support <M> MARK target support <M> LOG target support <M> CONNMARK target support <M> ULOG target support <M> TCPMSS target support <M> ARP tables support <M> ARP packet filtering <M> ARP payload mangling Linux Kernel Beállítás: Kernel 2.6 (Ex. gentoo-sources 2.6.11-gentoo-r6) Device Drivers ---> Networking support ---> Networking options ---> QoS and/or fair queueing ---> <M> HTB packet scheduler <M> SFQ queue [*] QoS support [*] Rate estimator [*] Packet classifier API <M> Firewall based classifier [*] Traffic policing (needed for in/egress) [*] Network packet filtering (replaces ipchains) ---> IP: Netfilter Configuration ---> <*> Connection tracking (required for masq/nat) <*> Userspace queueing via NETLINK <*> IP tables support (required for filtering/masq/nat) <*> limit match support <*> IP range match support <*> MAC address match support <*> Packet type match support <*> netfilter MARK match support <*> Multiple port match support <*> TOS match support <*> recent match support <*> ECN match support <*> DSCP match support <*> AH/ESP match support <*> LENGTH match support <*> TTL match support <*> tcpmss match support <*> Helper match support <*> Connection state match support <*> Connection tracking match support <*> Owner match support <*> Packet filtering <*> REJECT target support <*> LOG target support <*> ULOG target support <*> TCPMSS target support <*> Full NAT <*> MASQUERADE target support <*> REDIRECT target support <*> NETMAP target support <*> SAME target support <*> Packet mangling <*> TOS target support <*> ECN target support <*> DSCP target support <*> MARK target support <*> CLASSIFY target support <M> raw table support (required for NOTRACK/TRACE) <M> NOTRACK target support <*> ARP tables support <*> ARP packet filtering <*> ARP payload mangling A beállítások kicsit máshova kerültek. Itt van, hogy engedélyezd. Linux Kernel Beállítás: Kernel 2.6.14 (és újabb)

Page 3 of 8 Networking ---> Networking options ---> [*] Network packet filtering (replaces ipchains) ---> IP: Netfilter Configuration ---> <*> Connection tracking (required for masq/nat) <*> Userspace queueing via NETLINK <*> IP tables support (required for filtering/masq/nat) <*> limit match support <*> IP range match support <*> MAC address match support <*> Packet type match support <*> netfilter MARK match support <*> Multiple port match support <*> TOS match support <*> recent match support <*> ECN match support <*> DSCP match support <*> AH/ESP match support <*> LENGTH match support <*> TTL match support <*> tcpmss match support <*> Helper match support <*> Connection state match support <*> Connection tracking match support <*> Owner match support <*> Packet filtering <*> REJECT target support <*> LOG target support <*> ULOG target support <*> TCPMSS target support <*> Full NAT <*> MASQUERADE target support <*> REDIRECT target support <*> NETMAP target support <*> SAME target support <*> Packet mangling <*> TOS target support <*> ECN target support <*> DSCP target support <*> MARK target support <*> CLASSIFY target support <M> raw table support (required for NOTRACK/TRACE) <M> NOTRACK target support <*> ARP tables support <*> ARP packet filtering <*> ARP payload mangling QoS and/or fair queueing ---> <M> HTB packet scheduler <M> SFQ queue [*] QoS support [*] Rate estimator [*] Packet classifier API <M> Firewall based classifier [*] Traffic policing (needed for in/egress) Fordítsd le a kernel, telepítsd és bootold be. Szabályzási stratégia Ha egy csomag beérkezik, az iptables segítségével több dolgot is tudsz csinálni vele. Álljon itt néhány példa, hogy mi alapján tudsz szabályozni: Port Csomag méret Forgalom típusa Mondjuk szeretnél a bittorrentnek alacsonyabb prioritást adni. Tudjuk, hogy a 6881-tól 6889-ig terjedı portokat használja. Iptables-szel könnyen nyomonkövethetjük ezt, de amint a felhasználó rájön, hogy ezeknek a portoknak alacsonyabb prioritásuk van, egyszerően átállítja a bittorrentet, hogy más portokat használjon. Nincs SEMMILYEN LEHETİSÉG arra, hogy megtudjuk a P2P programok milyen portokat használnak. A csomag méret alapján történı szabályzásnak is vannak elınyei. A kisebb csomagoknak magasabb prioritást tudsz adni, mint a nagyobb csomagoknak. Mivel sok adatot küldeni célszerő nagymérető csomagok formájában küldeni, nem meglepı, hogy a P2P programok is így tesznek. De ismét, a kliens megváltoztathatja az MTU értékét a kimenı interfészen, így kisebb csomagokat küldve megkerülheti a szabályzást. Amit igazából szeretnénk, az hogy felismerjük a csomagokat tartalmuk alapján. Szükségünk van arra, hogy az iptables belenézzen minden egyes csomagba és analizálja a tartalmát, hogy kiderítse vajon P2P programtól származik vagy sem. Jelenlegi állás szerint két projektrıl tudok, amely képes erre. ipp2p http://www.ipp2p.org l7-filter http://l7-filter.sourceforge.net/ Mindkettı jó projekt, én csak a ipp2p-t használom. Eddig csak bittorrenten alkalmaztam és remekül mőködik. Lesd meg az utolsó részt bıvebb infókért vagy kövesd a linkeket. Priorizálás Ebben a hogyanban négy prioritási szintet fogunk létrehozni: 1. Interaktív 2. Egyéb 3. Böngészés 4. P2P Interaktívat a kismérető csomagokhoz használjuk, amelyeknek nagyon alacsony késleltetésre van szükségük. Ilyen csomagok lehetnek például az icmp vagy ssh csomagjai. (ez magában foglalja a ACK-s TCP csomagokat is) Egyebet azoknak a csomagoknak, amelyek egyik kategóriába se fértek be. Böngészést azoknak a csomagoknak, amelyeknek alacsonyabb késleltetés szükséges a P2P csomagokénál, de nem igazán szabadna nagyobb prioritást élvezniük az ssh-nál. Ez lehet például http vagy smtp. P2P-t a P2P programoknak illetve olyan programoknak, amelyek sok adatot akarnak feltölteni. Ezek a lehetı legkisebb prioritást kapják. Jegyezzük meg, hogy például ha a P2P-nek alacsonyabb prioritást adunk mint a Böngészésnek, az nem jelenti azt, hogy a P2P kevesebb sávszélességet is kapna. Annyit jelent, hogy a rendszer elınyben részesíti a Böngészı csomagjait a P2P csomagjainál. Csak ha kitöltötted a feltöltési streamet, akkor rughat labdába a P2P a rendelkezésre álló sávszélességgel. Átgondolhatod, hogyan használod a hálózatodat és a prioritásokat annak megfelelıen definiálhatod, vagy megváltoztathatod a sorrendet, de ez a példa mindenféleképpen egy jó kiindulási alapot jelent. Iptables Gondolom már nem okozok meglepetést, hogy iptables-re lesz szükségünk:

Page 4 of 8 emerge net-firewall/iptables Arra fogjuk használni az iptables-t, hogy megjelöljük a csomagokat a késıbbi szabályzás érdekében. Azonban elıbb egy alap NAT-os routert kell beállítanunk. Ez a beállítás egyátalán NEM biztonságos, ez csupán csak egy példa, amely bemutatja, hogyan állítsunk be NAT-ot: File: insecure_firewall.sh # Konstansok LOCALNET="192.168.1.0/255.255.255.0" # Policy beállítása (az alapértelmezett policy az ACCEPT, így nem igazán # van szükséged erre a részre, hacsak nem állítottad az alap policyt DROP-ra; # utóbbi NEM ajánlott más láncra kivéve az INPUT és FORWARD láncokra # a filter táblában és ESETENKÉNT az OUTPUT láncon) iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P PREROUTING ACCEPT # Összes tábla kiürítése iptables -t filter -F iptables -t mangle -F iptables -t nat -F iptables -t raw -F # (opcionális) # Maszkolás iptables -t nat -A POSTROUTING -s $LOCALNET -o eth1 -j MASQUERADE iptables -A FORWARD -m state --state ESTABLISHED,RELATED -d $LOCALNET -j ACCEPT # Kernel forward engedélyezése echo 1 > /proc/sys/net/ipv4/ip_forward Mégegyszer, nem igazán ajánlom, hogy a fenti scriptet használd. Csak a teljesség érdekében raktam be. Jobban teszed ha elolvasod a "Linux 2.4 alapos tőzfal tervezés"(jó a 2.6-os kernelhez is) leírást a gentoo.org-on, amely végigvezet egy megfelelıen biztosított tőzfal létrehozási folyamatán. A tőzfal tervezéses linket blokkolta a wiki spamfiltere, az eredeti oldalon megtaláljátok. A Shorewall pedig egy olyan csomag amely bekonfigurálja az iptables-t neked. Ajánlott ezt használni (vagy valami hasonlót) ha nem szeretnél könyékig turkálni az iptables szintakszisában. Következı lépés a csomagok megjelölése a prioritásokkal: File: marking_packets.sh MARKPRIO1="1" MARKPRIO2="2" MARKPRIO3="3" MARKPRIO4="4" # Prioritás jelek beállítása # Prio 1 # icmp iptables -t mangle -A FORWARD -p icmp -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark $MARKPRIO1 # ssh iptables -t mangle -A FORWARD -p tcp --dport 22 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark $MARKPRIO1 # nem tcp iptables -t mangle -A FORWARD -p! tcp -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A OUTPUT -p! tcp -j MARK --set-mark $MARKPRIO1 # Prio 2 # Prio 3 # http iptables -t mangle -A FORWARD -p tcp --dport 80 -j MARK --set-mark $MARKPRIO3 iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark $MARKPRIO3 # https iptables -t mangle -A FORWARD -p tcp --dport 443 -j MARK --set-mark $MARKPRIO3 iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark $MARKPRIO3 # smtp iptables -t mangle -A FORWARD -p tcp --dport 25 -j MARK --set-mark $MARKPRIO3 iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark $MARKPRIO3 # Prio 4 # packets > 1024 bytes iptables -t mangle -A FORWARD -p tcp -m length --length 1024: -j MARK --set-mark $MARKPRIO4 # bittorrent iptables -t mangle -A FORWARD -i eth0 -p tcp --sport 6881:6889 -j MARK --set-mark $MARKPRIO4 iptables -t mangle -A FORWARD -i eth0 -p tcp --dport 6881:6889 -j MARK --set-mark $MARKPRIO4 # A kimaradt csomagokat pedig megjelöljük a TOS-nek megfelelıen ('''T'''ype '''O'''f '''S'''ervice) iptables -t mangle -A FORWARD -p tcp -m tos --tos Minimize-Delay -m mark --mark 0 -j MARK --set-mark $MARKPRIO1 iptables -t mangle -A FORWARD -p tcp -m tos --tos Maximize-Throughput -m mark --mark 0 -j MARK --set-mark $MARKPRIO2 iptables -t mangle -A FORWARD -p tcp -m tos --tos Minimize-Cost -m mark --mark 0 -j MARK --set-mark $MARKPRIO4 Magyarázatok és megjegyzések: -t mangle: Szeretnénk módosítani (mangle) a csomagokat, azzal, hogy megjelöljük ıket. -A FORWARD/OUTPUT: A szabály láncok, amelyen a csomagok átutaznak. Az OUTPUT ahol a csomagok kilépnek ebbıl a gépbıl, míg a FORWARD amin keresztül más gépeknek küldünk csomagokat -p icmp: csak icmp csomagok (ugyanez tcp-re stb.) -p! tcp: csomagok amelyek nem csak tcp-k. Jegyezzük meg, hogy az icmp sem tcp, most mégis külön kezeljük. Ez valójában szükségtelen, de növeli az olvashatóságot -dport 22: Egyezés (tcp, nyílvánvalóan) azokra a csomagokra amelyek a 22 portra mennek (cél port) -j MARK --set-mark $MARKPRIO1: -j jelöli azt a mőveletet amelyet alkalmazni akarunk, és a --set-mark jelzi az iptables-nek mivel jelöljön -m tos --tos... : Egyezés a csomag tos-se szerint a TOS-rıl bıvebben olvashatsz itt: Type of Service -m mark --mark 0: Egyezik azokra a csomagokra, amelyek még nem lettek megjelölve A mellékelt bittorrent példa valószínőleg nem fog úgy mőködni, ahogy kellene. Ezenkívül fixen bedrótozzuk az eth0 interfészt, hogy a DSL modem felıl 6881-6889 portokon érkezı átmenı forgalmat megjelöljük, azonban fontos megjegyezni, hogy a bittorrent nem mindig a 6881-6889 portokat használja. Nézd meg a layer7 és ipp2p programokat, velük könyebben megoldhatod ezt a problémát. Alternatív módszer: CLASSIFY target Ahelyett, hogy a MARK célt használnánk a FORWARD vagy OUTPUT láncokon, használhatjuk helyette a CLASSIFY célt is a POSTROUTING láncban. A következı egy példa a kimenı ssh forgalom osztályozására (22-es port) a HTB 1:101 osztályba (magas prioritást jelent, ahogy késıbbiekben is láthatod ebben a hogyanban): iptables -t mangle -A POSTROUTING -p tcp --sport 22 -j CLASSIFY --set-class 1:101

Page 5 of 8 Bıvebb információkat a CLASSIFY célról az alábbi hivatkozáson találhatsz: Iptables Tutorial: CLASSIFY Target A HTB megértése Valójában mit is csinál a HTB? HTB egy rendszer, amely szétosztja a sávszélességet különálló sorokra. Fontos emlékezni arra, hogy a HTB azért készítették, hogy garantálja a sávszélességet, és NEM arra, hogy garantálja az interaktivitást. A HTB nem számolja a csomagokat, hanem byteokat számol! Ezért szükséges némi okoskodás, hogy kicsikarjuk belıle az interaktivitást. Álljon itt egy rövid magyarázat a belsı mőködésérıl. Qdisc-ek Qdisc a Queue Discipline rövidítése, amely egy speciális stratégiát takar, amellyel a várósorokat lehet menedzselni. Egy sor a postán és egy sor a kórházban ugyanúgy sorok abban az értelemben, hogy "elemek" sorát alkotják, de a stratégia (vagy qdisc) amelyet a menedzselésükhöz használnak teljesen különbözıek. A legegyszerőbb qdisc a pfifo, amely egy sima FIFO tároló, amely nem végez feldolgozást, csak tárolást, amikor a hálózati csatoló leterhelt. r2q 1 Finally I understood the r2q value. I defined 'r2q 2'. And for the classes that gave me the warning I bound out that rate / r2q was < 1500. For this case I use 'quantum 1500'. In the other classes that had warning; rate / r2q was > 60000, so I use 'quantum 60000'. Classes (Osztályok) Egy HTB Qdisc a csomagokat osztályokba rendezi szőrık segítségével. A mi példánkban szőrıként a megjelöléseket fogjuk használni. Minden osztály egy várólista, amely egy saját menedzsert használ (SFQ a példánkban). Úgy gondolhasz az osztályokra mint ajtókra, amin keresztől halad a sávszélesség. Be kell "terelned" a forgalmat a megfelelı ajtóba, amely limitálja majd azt a fajta forgalmat. Rates (Ráták) A ráta az a sávszélesség mennyiség, amelyet egy qdisc garantál. Például egy ideális világban a 128kbit/s feltöltési ráta azt jelentené, hogy az internet szolgáltató (ISP) mindig legalább ennnyi sávszélességet ad nekünk, vagy többet ha elérhetı Ceil "Ceil" (Bandwidth Ceiling) az a maximum sávszélesség mennyiség amivel egy qdisc rendelkezhet. Az elızı példa folytatásaként, egy valós világban, a 128kbit/s "feltöltési ráta" valójában azt jelenti, hogy az ISP beállított egy limitet, a maximum szávszélességet amelyet használhatunk, még ha több is elérhetı lenne. Bursts A "burst" afféle kitörést jelent az angol nyelvben. Talán úgy fordítanám, hogy "megszalad, túlszalad", azonban a fordításban az eredeti kifejezést fogom használni. Két féle burst létezik - burst, és cburst. A "burst" olyan bájtban megadott mennyiség, amennyivel egy qdisc túlléppheti a rátáját, míg a "cburst" ugyanezt jelöli, csak a ceil túllépésekor. A http://lartc.org/manpages/tc-htb.html oldalon eléggé szőkszavúan magyarázzák. Azt mondják, hogy a burst az, hogy hány bájt küldhetı azután, hogy egy osztály elérte a ceil-t, túllépve a beállított rátát. Hogy lehet ez? Hiszen a ceil magasabb érték a rátánál, tehát már alapból gyorsabban küldünk adatokat a rátánál. Vagy tévedek? A burst az a bájt mennyiség, amelyet az osztály számára engedélyezünk, hogy a ceil sebességén küldjön. Fontos emlékezni arra, hogy a ceil egy "ráta" tehát bytes/sec-ben mérik, míg a burst egy bájtban mért mennyiség. Úgy is tekinthetsz a burstre mint egy kosár méretre, ekkor a ceil az a maximum amennyivel kivehetsz tokeneket a kosárból, a ráta pedig az a sebesség amennyivel a kosár újratöltıdik. Tehát ha van egy 5000-es burst értékünk, a rátánk 1000, a ceil értékünk pedig 2500, akkor képesek leszünk fenntartani egy 1000 bytes/sec kapcsolatot, így amikor valamely ponton hirtelen "megszaladt" adat érhetı el, képesek leszünk azt 2500-tel elküldeni (5000/2500=) 2 másodpercen keresztül. Miután a "kosár" kiürült, elkezd újratöltıdni 1000 bytes/sec sebességgel. also in the comments you posted, you say you do ok with bursts below half a k. you re the only one, that sais that. a lot of ppl are using htb-tools, and there the use a minimum burst of 2k. they recomend 30% of ceil now. Quantum A quantum az a bájt mennyiség, amennyit egy osztály még elküldhet, ha már elérte az elıre bekonfigutált rátáját. Ennek az értéknek nagyobbnak kell lennie 1500-nél (MTU) és kisebbnek 60000-nél. Ez az érték felülbírálható, ha egy htb osztályt hozzáadunk. A Quantum lényegében leírja azt, hogy a sávszélesség hogyan oszlik el a qdisc-ek között. Körülbelül így mőködik: Tételezzük fel, hogy van két osztályunk azonos szülıvel: Szülı : ceil = rate = 100 osztály 1 : rate = 40 és ceil = 100 osztály 2 : rate = 20 és ceil = 100 (a megadott számok csak tájékoztató jellegőek, a megértést segítik) Mindkét osztály annyi adatot küld, amennyit csak bír. Elıször engedélyezve van nekik, hogy elég csomagot küldjenek ahhoz, hogy kitöltsék a beállított rátát, függetlenül az esetleg különbözı beállított prio-knak. De a szülınek van még maradék sávszélessége : 100-40 - 20 = 40. A maradék sávszélesség a quantumoknak megfelelıen oszlik szét. Mindegyik osztály "quantum" mennyiségő bájtot küldhet felváltva. A quantumokat ekkor rátaként számítják ki. Az összes qdisc összes quantumja összeadódik és az összeget jegyzik meg Mindegyik qdisc a prioritását az következı képlet alapján kapja <math>\frac{quantum}{sum}</math> A képlet: (quantum / (összes quantum)) Ezt akkor használjuk amikor két qdisc-ed van ugyanakkora rátával és ceil értékkel, de különbözı prioritást akarsz adni nekik. SFQ használatakor, az adatmennyiséget bájtokban mérik, nem csomagokban, ezért a quantum érték megegyezik azzal a bájt mennyiséggel, amennyit az adott qdisc engedélyezett elküldeni egy körben.

Page 6 of 8 r2q Az r2q értéket használják a quantumok kiszámításához. Az alapértelmezett értéke: 10. A quantum rate-ként kerül kiszámításra (bájtban) / r2q. Ez felülbírálható, ha hozzáadunk egy htb qdisc-et. Példa: A szülı rate értéke 30 és 3 gyerek osztálya van, c1, c2 és c3. A három osztály rate értéke 10. Az osztályok quantumjai: class2-nek 1 és class3-nak 2. A class1 quantumja nem ismert, de 4 egységet küld. C2 és c3 annyit küldenek, amennyit csak tudnak, esetünkben 10-et, 10-et (a ráta limit mindig teljesül). A szülınek ekkor még mindig lesz 6 egysége, amit szétoszthat c2 és c3 között. Ekkor a quantumoknak megfelelıen fogja szétosztani a megmaradt egységeit, így c2 kap 2 egységet, c3 pedig 4 egységet. Lásd 1. ábrát! 1. ábra class rate traffic quantum bandwidth c1 10 4? 4 c2 10 +++ 1 10+2=12 c3 10 +++ 2 10+4=14 Prio Pont azt jelenti, ahogy hangzik. Rendeljünk prioritásokat az osztályokhoz. Ez határozza meg azt a sorrendet, ahogy az osztályok több sávszélsséget kérhetnek a szülıtıl miután már az elıre beállított rátán forgalmaztak. Minél kisebb a szám, annál nagyobb a prioritás. A legalacsonyabb prio érték kapja a legkisebb késleltetést. De ha az alacson prio-val rendelkezı osztály több adatot küld a beállított rátánál, akkor a késleltetés növekedni fog. Prio értéke 0 és 7 között változhat. Az SFQ megértése Egy megjegyzendı dolog, hogy az SFQ önmagában is remek munkát végez azzal, hogy eloszt "mindent" mindenféle konfigurálás nélkül. A legjobb ha az SFQ qdisc-eket ugyanolyan adattípusú osztályokhoz csatoljuk, pl. HTTP forgalmat, hogy elkerüljük a különbözı típusú adatfolyamok közötti elosztást. "Csomagok átvitelét ütemezi, 'folyamokon' alapján." "A cél az, hogy biztosítsák a korrektséget, így mindegyik folyam képes adatokat küldeni felváltva, ezáltal meggátolva, hogy egyetlen folyam leszívja az egész sávszélességet." http://lartc.org/manpages/tc-sfq.html Iproute2 A HTB beállításához szükséged lesz az iproute2-re. emerge sys-apps/iproute2 Valójában a tc nevő programra van szükséged, az viszont az iproute2 csomagban található meg. Futtasd ezt a szkriptet, hogy létrehozd a 4 qdisc-et és beállítsad ıket: File: iptables_quotas.sh #Konstansok # Interfész, amelyiken szabályozni akarsz: # eth2, eth1 a közvetlen kapcsolatokhoz; ppp0 vagy hasonló a DSL-hez # és más betárcsázós kapcsolathoz (lásd ifconfig kimenetét) IFACE=eth2 # Prioritás jelzık MARKPRIO1="1" MARKPRIO2="2" MARKPRIO3="3" MARKPRIO4="4" # Ráták (a qdics-ek számára elérhetı maximális sávszélesség) UPRATE="152kbit" #P2PRATE=$UPRATE P2PRATE="128kbit" PRIORATE1="65kbit" PRIORATE2="46kbit" PRIORATE3="27kbit" PRIORATE4="8kbit" # Quantum (adott qdisc által egy körben elküldhetı adatok mennyisége) QUANTUM1="12187" QUANTUM2="8625" QUANTUM3="5062" QUANTUM4="1500" # Burst BURST1="6k" BURST2="4k" BURST3="2k" BURST4="0k" CBURST1="3k" CBURST2="2k" CBURST3="1k" CBURST4="0k" #reset (töröljük a meglévı qdisc-te) tc qdisc del dev $IFACE root htb # Várólista hosszának beállítása IFACE számára # (ezzel veszi át a belsı interfész a várósort, ezáltal kicsit lassabb lesz az áteresztıképessége az eth0-nál) ifconfig $IFACE txqueuelen 16 # queue discipline specifikálása (lásd r2q megjegyzést) tc qdisc add dev $IFACE root handle 1:0 htb default 103 r2q 1 # Osztályok deklarálása # root osztály megadása (ez rendelkezik a net kapcsolat maximumával) tc class add dev $IFACE parent 1:0 classid 1:1 htb rate $UPRATE burst $BURST1 cburst $CBURST1 # alosztályok megadása (1:1 osztály ID szülıosztálynak az alosztályai -> fa szerkezetet képzeljünk el) tc class add dev $IFACE parent 1:1 classid 1:101 htb rate $PRIORATE1 ceil $UPRATE quantum $QUANTUM1 burst $BURST1 cburst $CBURST1 prio 0 tc class add dev $IFACE parent 1:1 classid 1:102 htb rate $PRIORATE2 ceil $UPRATE quantum $QUANTUM2 burst $BURST2 cburst $CBURST2 prio 1 tc class add dev $IFACE parent 1:1 classid 1:103 htb rate $PRIORATE3 ceil $UPRATE quantum $QUANTUM3 burst $BURST3 cburst $CBURST3 prio 2 tc class add dev $IFACE parent 1:1 classid 1:104 htb rate $PRIORATE4 ceil $P2PRATE quantum $QUANTUM4 burst $BURST4 cburst $CBURST4 prio 3 # Csomagok szőrése tc filter add dev $IFACE parent 1:0 protocol ip prio 0 handle $MARKPRIO1 fw classid 1:101 tc filter add dev $IFACE parent 1:0 protocol ip prio 1 handle $MARKPRIO2 fw classid 1:102 tc filter add dev $IFACE parent 1:0 protocol ip prio 2 handle $MARKPRIO3 fw classid 1:103 tc filter add dev $IFACE parent 1:0 protocol ip prio 3 handle $MARKPRIO4 fw classid 1:104 # queuing discipline-ek hozzáadása tc qdisc add dev $IFACE parent 1:101 sfq perturb 16 quantum $QUANTUM1 tc qdisc add dev $IFACE parent 1:102 sfq perturb 16 quantum $QUANTUM2 tc qdisc add dev $IFACE parent 1:103 sfq perturb 16 quantum $QUANTUM3 tc qdisc add dev $IFACE parent 1:104 sfq perturb 16 quantum $QUANTUM4

Page 7 of 8 l7-filter A L7-filter sokkal általánosabb osztályozó próbál lenni mint a ipp2p. A minta definíciók user space-ben tárolódnak, szóval kernel újrafordítás nélkül lehet ıket módosítani. Ahogy feljebb is említettem, nem próbáltam a l7-filter-t. Ettıl függetlenül telepítheted ıket: emerge l7-protocols emerge l7-filter Amint telepítve van, megkell tanulnod, hogyan állítsd be ıket és írd meg a tapasztalataidat ebbe a hogyanba ;-) Miután telepítetted a l7-filter-t, tedd a következıt echo "net-firewall/iptables extensions" >> /etc/portage/package.use emerge --newuse iptables A megosztott objektumok eléréséhez szükséges használni a l7-filter-t. Továbbá aktiválni kell a l7 egyezést a kerneledben (pl. modulként) Linux Kernel Beállítás: Device Drivers --> [*] Network support Network options --> [*] Network packet filtering --> IP: Netfilter configuration --> [*] Connection tracking flow accounting <M> FTP protocol support <M> Userspace queueing via NETLINKa <M> Layer 7 match support (EXPERIMANTAL) Utána újra kell fordítanod a kernelt (pl. genkernellel): genkernel --no-clean --no-mrproper all Ezekután hozzá kell adni a szabályokat. De légy óvatos, úgy kell a szabályokat hozzáadni, hogy a csomagok mindkét irányban áthaladjanak a l7-filter szabályon. Ez azt jelenti, hogy benne kell lennie az INPUT-ban és az OUTPUT-ban is. Ez az egyik legtrükkösebb dolog amit megkell oldanod ;-) Itt egy példa aminek mőködnie kell. iptables -t filter -A INPUT -m layer7 --l7proto edonkey -j ACCEPT iptables -t filter -A OUTPUT -m layer7 --l7proto edonkey -j ACCEPT Vagy azoknak a rendszergazdáknak, akik egyátalán nem akarnak p2p-t engedélyezni: iptables -t filter -A FORWARD -m layer7 --l7proto edonkey -j DROP Ez veszélyes, mert van esély fals pozitív esetre, amikor hasznos forgalmat dobunk el. Olvasd el a l7-filter oldalán a protokollok részt, hogy képben legyél arról, hogy vállalod-e a rizikót vagy sem. Biztonságosabb a sávszélességet limitálni helyette. Elıször jelöljük meg a csomagokat: iptables -t mangle -A FORWARD -m layer7 --l7proto edonkey -j MARK --set-mark 123 Aztán használjuk a tc-t hogy elkapjuk az egyezéseket. Bıvebb információkért http://l7-filter.sourceforge.net Jó szórakozást. Emlékeztetı: l7-filter nem mőködik a hardened-sources 2.6.11-r15-val. Tesztelés Grafikonok Mostanra készek vagyunk, azonban vajon mőködik is? Ez valóban jó kérdés. Hogy megválaszoljam, készítettem egy perl szkriptet, amely néhány grafikont rajzol ki. Ezt mindig futtatom a szerveremen, ahol meg is nézheted a saját szemeddel a grafikonokat és le is töltheted a szkriptet script A szkriptnek szüksége van a gnuplot-ra a grafikonok rajzolásához emerge media-gfx/gnuplot Szerkesztheted is a szkriptet, beállíthatod hogy mekkora idıközönként rajzolja ki a grafikonokat és azt is, hogy hány grafikont rajzoljon meg. Valójában nem igényel webszervert, de a legjobban úgy mőködik ha van webszerver is. Feltöltési ráta beállítása Egyik legfontosabb dolog, hogy a feltöltési rátánkat megfelelıen állítsuk be. Ha túl magasra állítod, akkor a várósor a linuxos géprıl a DSL modemre megy át. Ha túl alacsonyra állítod, akkor nem használod ki a sávszélességed. Pontosan megfelelınek kell lenni. Így teszteld: Izzíts be egy bittorrent-et Kezdj el pingelni egy szervert Ssh-val lépj be egy szerverre Most figyeld meg a ping idıket miközben állítod a feltöltési rátádat bittorretben. Próbálj beírni valamit közben az ssh sessionba. Ígérem rögtön látni fogod, ha a feltöltési rátád túl magas. Végül tesztként futtass le egy játékot, pl. Enemy Territory. A játékok az interaktivitás érdekében rengeteg kismérető csomagot kell elküldenie rendkívül rövid idı alatt. Tartsd lenyomva a Tab billentyőt, hogy lásd a késleltetésed. Hivatkozások

Page 8 of 8 Össze vagy kavarodva, vagy csak szeretnél többet megtudni a témáról? Teljesen érthetı. A QOS dokumentációja teljesen szétvan szórva az interneten és több helyen is elavult. Miközben a QOS-t saját magam tanultam (eredeti szerzı), a következı linkeket győjtöttem össze: iptables Linux Advanced Routing & Traffic Control l7-filter ipp2p QOS graphs combined with Munin combined with Nagios QOS graphs HTB Linux queuing discipline manual http://www.docum.org/docum.org/ ADSL Bandwidth Management HOWTO Jim digriz's QoS Script Fair NAT for Linux Routers http://www.ssi.bg/~ja/ The WRR scheduler http://www.adsl-optimizer.dk/ Traffic Control HOWTO Thinking of traffic shaping multiple interfaces as one in kernel 2.6? Or want to packet shape ingress? IMQ could be the answer, but it might not be stable. Or is it? There is next to no online documentation. IMQ ported to 2.6 discusion http://groups.google.com/group/linux.kernel/browse_thread/thread/31ba3f19dc66c4ef/2e755f4dc73da1c5? lnk=st&q=intermediate+queueing+device+patrick+mchardy&rnum=1&hl=en#2e755f4dc73da1c5 IMQ usage example http://www.lartc.org/howto/lartc.imq.html A lap eredeti címe: Gyere a Vodefone-hoz Internetezz akár 3 hónapig féláron! Fizess elı július 8-ig www.vodafone.hu/internet Free SMTP Redirection Run your own mail server on any ISP blocking port 25! rollernet.us A lap utolsó módosítása 13:55, 2008. január 18..