Może komuś się przyda. Aby wszystko ładnie działało wymagane jest mieć zainstalowane dodatek QOS L7 (http://dolly.czi.cz/coyote/ )
Najlepiej do tego jeszcze squid (viewtopic.php?t=59855)
Squid powinien byc skonfigurowany jako transparentny.
Cały skrypt jest przeliczony dla łącza 4Mbit, jeśli dysponujemy innym to trzeba przeliczyć niektóre wartości i pozamieniać. Ważne aby zrobić to mniej więcej tak jak jest poniżej.
Skrypt wklejamy w QOS Configuration > Edit Custom QOS Script
nastepnie zaznaczmy QOS Configuration > [zaznaczyc]Custom QOS Script
U mnie taka konfiguracja spisuje sie jak na razie najlepiej. Fajnie by było coś jeszcze poprawić, jak się tylko da.
Wcześniej były problemy ze squidem. Nawet jak było coś w cache to i tak nie dało się tego pobrać szybciej niż może łącze. Wykorzystałem L7 do rozpoznawania trafien w cache, nie jest to super rozwiązanie, jednak inaczej sie nie da. Squid w brazilfw nie ma markowania pakietow, iptables nie obsluguje wyrazen string, wiec można było to zrobić tylko za pomocą L7.
Prędkość pobierania danych ze squida ograniczyłem do 16Mbit/s, spowodowane jest to tym że przy większych wartościach komputer nie wyrabiał i potrafiło lekko przyciąć. Każdy ustawi w zależności jaki ma sprzęt.
Na dole skryptu jest jeszcze mała namiastka filtru antyspamowego oraz blokowanie niektórych wirusów.
Skrypt można by rozbudować o automatyczne przeliczanie transferu dla klas, ale na razie nie mam czasu.
- Código: Selecionar todos
#!/bin/sh
TC=/usr/sbin/tc
IPTABLES=/usr/sbin/iptables
#TC="echo tc"
#IPTABLES="echo iptables"
# Nazwa interfejsu LAN
LAN=eth0
# Nazwa interfejsu WAN
WAN=eth1
# adres sieci
NETWORK=192.168.0.0/24
# IP serwera
SERVER=192.168.0.1
echo "0. Kasowanie starych klas i filtrow dla LAN i WAN"
echo "- kasowanie root"
$TC qdisc del dev $LAN root 2>/dev/null
$TC qdisc del dev $WAN root 2>/dev/null
echo "- kasowanie 1: 1:1 1:10"
$TC filter del dev $LAN parent 1:1 pref 100 2>/dev/null
$TC filter del dev $LAN parent 1: pref 100 2>/dev/null
$TC filter del dev $WAN parent 1:1 pref 100 2>/dev/null
$TC filter del dev $WAN parent 1: pref 100 2>/dev/null
$TC filter del dev $LAN parent 1:10 pref 100 2>/dev/null
$TC filter del dev $WAN parent 1:10 pref 100 2>/dev/null
$TC filter del dev $LAN parent 1: pref 50 2>/dev/null
$TC filter del dev $WAN parent 1: pref 50 2>/dev/null
$TC filter del dev $LAN parent 1:2 pref 100 2>/dev/null
echo "1.Tworzenie nowych klas"
echo "- tworzenie root DW 4096, UP 512"
$TC qdisc add dev $LAN root handle 1: htb default 102 r2q 10
$TC class add dev $LAN parent 1: classid 1:1 htb rate 3900kbit burst 16k
$TC qdisc add dev $WAN root handle 1: htb default 102 r2q 1
$TC class add dev $WAN parent 1: classid 1:1 htb rate 460kbit burst 8
echo "- tworzenie klasy 16mbit dla Squid cache_hit"
# squid cache hit class
# jesli jest cos w cache to pobierane jest wlasnie z ta predkoscia
$TC class add dev $LAN parent 1: classid 1:2 htb rate 16mbit burst 16k
echo "- tworzenie klasy 1:10 DW 3900, UP 460"
$TC class add dev $LAN parent 1:1 classid 1:10 htb prio 1 rate 3705kbit ceil 3900kbit burst 16k
$TC class add dev $WAN parent 1:1 classid 1:10 htb prio 1 rate 414kbit ceil 460kbit burst 8k
echo "- tworzenie klas priorytetow dla download"
$TC class add dev $LAN parent 1:10 classid 1:100 htb prio 0 rate 1800kbit ceil 3900kbit burst 16k
$TC class add dev $LAN parent 1:10 classid 1:101 htb prio 1 rate 1200kbit ceil 3900kbit burst 8k
$TC class add dev $LAN parent 1:10 classid 1:102 htb prio 2 rate 600kbit ceil 3900kbit burst 4k
$TC class add dev $LAN parent 1:10 classid 1:103 htb prio 3 rate 300kbit ceil 3900kbit burst 2k
$TC qdisc add dev $LAN parent 1:100 handle 100: sfq perturb 10
$TC qdisc add dev $LAN parent 1:101 handle 101: sfq perturb 10
$TC qdisc add dev $LAN parent 1:102 handle 102: sfq perturb 10
$TC qdisc add dev $LAN parent 1:103 handle 103: sfq perturb 10
echo "- tworzenie klas priorytetow dla upload"
$TC class add dev $WAN parent 1:10 classid 1:100 htb prio 0 rate 160kbit ceil 460kbit burst 8k
$TC class add dev $WAN parent 1:10 classid 1:101 htb prio 1 rate 128kbit ceil 460kbit burst 4k
$TC class add dev $WAN parent 1:10 classid 1:102 htb prio 2 rate 112kbit ceil 460kbit burst 2k
$TC class add dev $WAN parent 1:10 classid 1:103 htb prio 3 rate 60kbit ceil 256kbit burst 2k
$TC qdisc add dev $WAN parent 1:100 handle 100: sfq perturb 10
$TC qdisc add dev $WAN parent 1:101 handle 101: sfq perturb 10
$TC qdisc add dev $WAN parent 1:102 handle 102: sfq perturb 10
$TC qdisc add dev $WAN parent 1:103 handle 103: sfq perturb 10
echo "2. Tworzenie filtrow przechwytujacych zaznaczone pakiety"
echo "- LAN (1100, 1101, 1102, 1103)"
$TC filter add dev $LAN parent 1: protocol ip handle 1100 pref 50 fw classid 1:100
$TC filter add dev $LAN parent 1: protocol ip handle 1101 pref 50 fw classid 1:101
$TC filter add dev $LAN parent 1: protocol ip handle 1102 pref 50 fw classid 1:102
$TC filter add dev $LAN parent 1: protocol ip handle 1103 pref 50 fw classid 1:103
#Squid HIT
$TC filter add dev $LAN parent 1: protocol ip handle 1000 pref 50 fw classid 1:2
echo "- WAN (2100, 2101, 2102, 2103)"
$TC filter add dev $WAN parent 1: protocol ip handle 2100 pref 50 fw classid 1:100
$TC filter add dev $WAN parent 1: protocol ip handle 2101 pref 50 fw classid 1:101
$TC filter add dev $WAN parent 1: protocol ip handle 2102 pref 50 fw classid 1:102
$TC filter add dev $WAN parent 1: protocol ip handle 2103 pref 50 fw classid 1:103
echo "3. Tworzenie filtrow ACK, ICMP, DNS, default"
#ACK
$TC filter add dev $LAN protocol ip parent 1: pref 100 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:100
$TC filter add dev $WAN protocol ip parent 1: pref 100 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:100
#ICMP
$TC filter add dev $LAN protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:100
$TC filter add dev $WAN protocol ip parent 1: prio 1 u32 match ip protocol 1 0xff flowid 1:100
#DNS
$TC filter add dev $LAN protocol ip parent 1: pref 100 u32 match ip dport 53 0xffff flowid 1:100
$TC filter add dev $WAN protocol ip parent 1: pref 100 u32 match ip sport 53 0xffff flowid 1:100
#default
$TC filter add dev $LAN protocol ip parent 1: pref 100 u32 match ip dst 0.0.0.0/0 flowid 1:102
$TC filter add dev $WAN protocol ip parent 1: pref 100 u32 match ip src 0.0.0.0/0 flowid 1:102
echo "4. Markowanie pakietow L7"
$IPTABLES -F PREROUTING -t mangle
$IPTABLES -A PREROUTING -t mangle -s $NETWORK -j MARK --set-mark 10
$IPTABLES -F OUTPUT -t mangle
$IPTABLES -F l7-filter -t mangle
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto edonkey -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -m layer7 --l7proto edonkey -j MARK --set-mark 2103
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto bittorrent -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -m layer7 --l7proto bittorrent -j MARK --set-mark 2103
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto skypeout -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -m layer7 --l7proto skypeout -j MARK --set-mark 2101
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto skypetoskype -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -m layer7 --l7proto skypetoskype -j MARK --set-mark 2101
#squid cache hit
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -m layer7 --l7proto httpcachehit -j MARK --set-mark 1000
echo "4. Markowanie pakietow po portach"
echo "- LFS game(29339,63392)"
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p tcp --sport 63392 -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p tcp --dport 63392 -j MARK --set-mark 2101
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p udp --sport 63392 -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p udp --dport 63392 -j MARK --set-mark 2101
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p tcp --sport 29339 -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p tcp --dport 29339 -j MARK --set-mark 2101
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p udp --sport 29339 -j MARK --set-mark 1101
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p udp --dport 29339 -j MARK --set-mark 2101
echo "- EMULE (4662,4672)"
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p tcp --sport 4662 -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p tcp --dport 4662 -j MARK --set-mark 2103
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p udp --sport 4672 -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p udp --dport 4672 -j MARK --set-mark 2103
echo "- TORRENT (6881:6889)"
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p tcp --sport 6881:6889 -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p tcp --dport 6881:6889 -j MARK --set-mark 2103
$IPTABLES -A l7-filter -t mangle -o $LAN -d $NETWORK -p udp --sport 6881:6889 -j MARK --set-mark 1103
$IPTABLES -A l7-filter -t mangle -o $WAN -m mark --mark 10 -p udp --dport 6881:6889 -j MARK --set-mark 2103
echo "5. Blokowanie trojanow i wirusow"
$IPTABLES -A l7-filter -t mangle -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
$IPTABLES -A l7-filter -t mangle -p udp -m multiport --dports 135,137,138,139,445 -j DROP
echo "6. Aktywacja antyspamu"
# troche niezbyt ladny sposob na pozbycie sie problemu wysylania spamu
# wystarczy tylko pogadac z userami jakiej poczty uzywaja
# proste i skuteczne, na razie dziala.
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.poczta.onet.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.poczta.gazeta.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.tlen.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst poczta.strefa.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst poczta.fm -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst poczta.vip.interia.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.wp.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.o2.pl -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 --dst smtp.gmail.com -j ACCEPT
$IPTABLES -A l7-filter -t mangle -p tcp --dport 25 -j DROP