LINUX @ JEZGRA.NET

Linux experts @ work

iptables filter po stringu i xt_TEE
Zadnje modificirano na: 13/10/2010 @ 3:33 pm

AUTOR: DARKMAN

Kako mi je wireless network trenutno primarni cjelodnevni posao, sve sto se tice mreza direktno me zanima. Necu pisati za laike, ovo je expert blog, ako ne razumijete nesto ja vam nisam kriv, malo tko ce uopce i razumijeti (nazalost).

Situacija

Imate mrezu sa puno subneta i glavnih nodova.
Na svima je linux slackware.
Preko 300 racunala prelazi preko glavnog servera koji odvaja dvije internet konekcije.

Problem

Korisnici igraju igru (BC2).
Neki korisnik radi upload na youtube.
– Igra zapinje jer je lag velik.

Rijesenje

Rijesenja ima vise.
QOS .. po mome .. ne radi dobar posao (bar meni) jer izgleda ima previse paketa za obradit i tako se dodatno stvara lag. Mozda sam u krivu ali ne radi kako treba. Radi ok donekle, ali na full uploadu korisnika recimo na port 80 (http, koji je takodjer prioritet ali iza igre) ipak se javlja lag. Postavljanjem pred-servera stvar se dodatno stabilizira, ali idalje nije to full-proof.

Od ostalih ideja pada mi na pamet da recimo podomene se klasificiraju i “uspore” u QOS-u. Tipa “upload.youtube.com” i slicne. Medjutim ni to nije rijesenje.

Trazeci zgodne iptables dodatke naletio sam na xt_string . Jako zgodna stvar. Moze recimo analizirati paket i ako nadje (recimo) string “upload” da uradi neku akciju s tim. Medjutim uz sva testiranja ipak dolazim do zakljucka da nece ici. Razlog je da iptables uhvati string recimo u html fajlu i onda recimo da tu konekciju onda zelimo oznacit (mark) i poslati je u QOS ili cak na drugi gateway… stvar je da to nije konekcija, vec je to samo dio konekcije i preusmjeravanjem/usporavanjem toga necete dobiti bas nista.

# Analiziraj sve pakete na portu 80 koji imaju string “upload” i odbaci ih.
iptables -t mangle -I PREROUTING -p tcp –dport 80 -m string –string “upload” –algo bm –icase -j DROP

Jedino sto se moze sa “string” je DROP i u tome posao radi jako dobro. Sve ostalo je upitno i klimavo, medjutim i time mozete network zastititi od recimo exploita i crva. Za string mozete staviti “cmd.exe” kao sto mnogi IDS-ovi rade. Stvar korisna za QOS bi bila -j CLASSIFY –set-class 1:20 gdje bi klasa 20 u QOS-u bila limitirana, medjutim kako se ne radi o cjelokupnoj konekciji, radi se samo o stranici koja sadrzi tu rijec. Trenutno nalazim nacin kako poslati ovaj paket na analiziranje u -j QUEUE i tamo sastaviti naredbu da conntrack sve ostale vezane pakete vremenski (MATCH_TIME) prebaci na drugi net ili u QOS.

Postoji xt_ROUTE koji nazalost nisam uspio kompajlirati na 2.6.35 kernelu medjutim dobra zamjena je xt_TEE koja zapravo radi kloniranje paketa na odredjenu destinaciju. Ako to kombiniramo za –mark i DROP u “-t filter FORWARD” mozemo dobiti ono sto xt_ROUTE zapravo radi, a to je slanje konekcije na drugaciji gateway. Ukoliko imate vise konekcija na internet ovo moze biti toliko korisno da necete moci bez toga. Mozete primjerice poslati sve UDP pakete na drugi net. Ili primjerice troublemaker korisnika poslati na drugi net skupa sa ostalima koji vole previse nereda unositi u optimiziranu mrezu za brzinu.

evo jedan brzi primjer:

# Flushaj chainove (nepotrebno, ali eto..)
iptables -t mangle -F
iptables -F FORWARD

# Neke adrese su dozvoljene preko ovog interneta (koji je recimo brzi)
iptables -t mangle -A PREROUTING -m mark –mark 5 -d jezgra.org -j TEE –gateway 192.168.10.1
iptables -t mangle -A PREROUTING -m mark –mark 5 -d jezgra.org -j RETURN
iptables -t mangle -A PREROUTING -m mark –mark 5 -s jezgra.org -j TEE –gateway 192.168.10.1
iptables -t mangle -A PREROUTING -m mark –mark 5 -s jezgra.org -j RETURN

# Sve pakete koji su oznaceni sa –mark 5 preusmjeri na 192.168.70.1 gateway (drugi net)
iptables -t mangle -A PREROUTING -m mark –mark 5 -j TEE –gateway 192.168.70.1
# Vrati paket natrag da ne ide kroz cijeli chain
iptables -t mangle -A PREROUTING -m mark –mark 5 -j RETURN

# Dozvoli odlazak na dvije adrese (192.168.10.1 i 192.168.2.1)
iptables -A FORWARD -m mark –mark 5 -d 192.168.10.1 -j ACCEPT
iptables -A FORWARD -m mark –mark 5 -d 192.168.2.1 -j ACCEPT
iptables -A FORWARD -m mark –mark 5 -s 192.168.10.1 -j ACCEPT
iptables -A FORWARD -m mark –mark 5 -s 192.168.2.1 -j ACCEPT

# Dropaj duplikate koji su oznaceni sa –mark 5 i koji su u prijasnjem prebaceni na dr. gateway
iptables -A FORWARD -m mark –mark 5 -o eth0 -j DROP

To je samo jedan dio skripte koji je potreban … e sad. Da bi neki IP/MAC/Subnet/Paket ili nesto trece prebacili na taj gateway treba znaci izabrati paket i oznaciti ga sa gore spomenutim “–mark 5”.

# Oznaci pakete korisnika sa IP 192.168.29.8 na mark 5
iptables -t mangle -I PREROUTING -s 192.168.29.8 -j MARK –set-mark 5

S time ste poslali tog korisnika u gornju tabelu i na njemu se izvrsava ona u potpunosti od vrha do dna.

Na pamet mi sad pada jedna jako dobra kombinacija, a to je kombinacija ovih dodataka za iptables: IP_NF_MATCH_TIME , ipt_QUEUE , xt_STRING i L7 filtera. Znaci da rule bude — ako je nadjen “string” u L7/http onda ga ubaci u userspace queue na odredjeno vrijeme. S tim da ce userspace aplikacija napraviti dodatan rule gdje ce cijeli taj ip usporiti sa qos limitiranim uploadom. Medjutim kako saznati IP kojeg treba usporiti? jer ovo se odnosi na sve pakete koji prolaze kroz taj firewall… na nikoga posebno. Znaci u toj iptables liniji koda mi treba jos jedan module kojeg nisam nasao ali hocu.

Komentiraj
Share

One Response to “iptables filter po stringu i xt_TEE”

  • r3ctor says:

    Odlican clanak!

  • Leave a Reply