iptables,Qos,traffic shaper

Fórumok

Hello!
Van egy DSL 3mbps vonalam amit egy P3 al osztok szét 20 windózos gépre.
A serveren van egy telepített Debian Sarge 2.6.8-3 gyári kernellel, de úgy nézem minden benne van ami kell a Qos és a traffic shaper megvalósításához.
Légyszi segítsetek ebből a vacakból valami használható tüzfalat kovácsolni ;)

#!/bin/sh
#
#eth0--ppp0--------->	ADSL MODEM
#eth1--(10.0.0.0/255.255.255.0=10.0.0.0/24)LAN
#
#MODULOK
modprobe ip_tables
modprobe iptable_nat
modprobe ip_queue
modprobe ipt_MARK
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_LOG
modprobe ipt_limit
modprobe ipt_MASQUERADE
modprobe iptable_filter
modprobe ipt_REJECT
modprobe iptable_mangle
#SZABÁLYOK TÖRLÉSE
iptables -X
iptables -Z
iptables -t nat -F
iptables -F
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z
#POLICY
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#MÁS HÁLÓZAT TILTÁSA
#CLASS_A="10.0.0.0/8"
#iptables -A INPUT -s 10.0.0.0/8 -j DROP
#iptables -A OUTPUT -s 10.0.0.0/8 -j DROP
#iptables -A FORWARD -s 10.0.0.0/8 -j DROP
#CLASS_B="172.16.0.0/12"
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A OUTPUT -s 172.16.0.0/12 -j DROP
iptables -A FORWARD -s 172.16.0.0/12 -j DROP
#CLASS_C="192.168.0.0/16
iptables -A INPUT -s 192.168.0.0/16 -j DROP
iptables -A OUTPUT -s 192.168.0.0/16 -j DROP
iptables -A FORWARD -s 192.168.0.0/16 -j DROP
#CLASS_D_MULTICAST="224.0.0.0/4"
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A OUTPUT -s 224.0.0.0/4 -j DROP
iptables -A FORWARD -s 224.0.0.0/4 -j DROP
#CLASS_E_RESERVERD="240.0.0.0/5"
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A OUTPUT -s 240.0.0.0/5 -j DROP
iptables -A FORWARD -s 240.0.0.0/5 -j DROP
#NETMEGOSZTÁS
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
iptables -t nat -A POSTROUTING -o ppp0 -s 10.0.0.0/24 -j MASQUERADE
#VÉDELEM
iptables -t mangle -A INPUT -p icmp -i ppp0 -j DROP
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -N syn-flood
iptables -A INPUT -i ppp0 -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
iptables -A INPUT -i ppp0 -m state --state NEW,INVALID -j DROP
iptables -A FORWARD -i ppp0 -m state --state NEW,INVALID -j DROP
iptables -A INPUT -i ppp0 -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -i ppp0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -A INPUT -i ppp0 -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -i ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -i ppp0 -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A INPUT -i ppp0 -p tcp -m tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A INPUT -i ppp0 -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
#Érvénytelen csomagok eldobása
iptables -A FORWARD -i eth1 -m state --state INVALID -j DROP
iptables -A FORWARD -i ppp0 -m state --state INVALID -j DROP
#localhost "engedélyezve minden"
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# ssh beengedese csak LAN felol
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
# portok engedese
# ftp, ftp-data, ssh, stp, fttp, pop3, https,neptun,msn
iptables -A INPUT -i eth1 -p tcp -m multiport --dport 20,21,22,25,80,110,443,3389,1863 -m state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp -m multiport --dport 20,21,22,25,80,110,443,3389,1863 -m state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp -m multiport --dport 20,21,22,25,80,110,443,3389,1863 -m state ESTABLISHED,RELATED -j ACCEPT
#Half-Life
iptables -A INPUT -i eth1 -p udp --dport 27010:27020 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -p udp --dport 27010:27020 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p udp --dport 27010:27020 -m state --state ESTABLISHED,RELATED -j ACCEPT
#DNS
iptables -A INPUT -i eth1 -p udp -m multiport --dport 53,54 -j ACCEPT
iptables -A FORWARD -i eth1 -p udp -m multiport --dport 53,54 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p udp -m multiport --dport 53,54 -j ACCEPT
#dhcp
iptables -A INPUT -i eth1 -p udp -m multiport --dport 67,68 -j ACCEPT
iptables -A FORWARD -i eth1 -p udp -m multiport --dport 67,68 -j ACCEPT
iptables -A OUTPUT -o eth1 -p udp -m multiport --dport 67,68 -j ACCEPT
iptables -A INPUT -i ppp0 -p udp -m multiport --dport 67,68 -j DROP
#80/tcp port átirányítva 3128 ra (SQUID PROXY)
iptables -A INPUT -p tcp --dport 3128 -s 10.0.0.0/24 -j ACCEPT
iptables -A PREROUTING -t nat -s 10.0.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
echo "START"
#
#
#
#host(OK)
iptables -t filter -A INPUT -i eth1 -s 10.0.0.2 -m mac --mac-source 00:AA:0A:F0:DA:E3 -j ACCEPT
iptables -t filter -A FORWARD -s 10.0.0.2 -m mac --mac-source 00:AA:0A:F0:DA:E3 -j ACCEPT
############################################################################################

Az lenne a cél hogy a server csak azokat az usereket engedje a netre akinél stimmel az IP és a MACADDRES.
Aztán szeretnék valami port prioritás szabályzót kreálni és egy olyan netlimitert ami hoszt szintü.
Azt tapasztaltam már rengetegszer , hogy valaki dc++ ozik vagy torrentezik akkor iszonyatos módon belassul az egész net.
Erre ideiglenesen betettem ezt egy tüzfal szkriptbe:

iptables -A FORWARD -p tcp --dport 6000:65535 -j DROP

De nem ez a helyes megoldás

Leszedtem a shaperd -t és találtam egy egész egyszerünek tünő szkriptet , csak az a baj vele hogy nem tudom beállítani:

# example.3.conf: shape masq'd hosts
#
# send a SIGHUP to reload this file with the command killall -HUP shaperd

# this is an "internal" log level (all logs are sent with facility daemon,
# priority info; see the syslog manpage for more information).
# valid levels are:
# alert   (1)
# error   (2)
# warning (3)
# info    (4)
# debug1  (5)
# debug2  (6)
# log levels beggining from warning (3) will log unmatched packets
log level = warning

# this is a required option. note that shaperd must have been built with
# the correct forwarding mechanism(s) in order for these to work
# see the README for further details
# packet forwarding = ipq
# packet forwarding = divert
packet forwarding = ipq

# this is useful for debugging
# shaperd will run detached if set to "yes"
daemon = yes

# full path to shaperd's pidfile
# it will be generated in daemon mode only
pidfile = /var/run/shaperd.pid

class A_up {
        bandwidth = 32 kbit/s
        ipv4 classifier out_if=ppp+ saddr=192.168.0.254
        borrow from B_up, C_up, D_up
        queue limits = 0 kb 150 packets
}

class A_down {
        bandwidth = 128 kbit/s
        ipv4 classifier inp_if=ppp+ daddr=192.168.0.254
        borrow from B_down, C_down, D_down
        queue limits = 0 kb 150 packets
}

class B_up {
        bandwidth = 32 kbit/s
        ipv4 classifier out_if=ppp+ saddr=192.168.0.253
        borrow from A_up, C_up, D_up
        queue limits = 0 kb 150 packets
}

class B_down {
        bandwidth = 128 kbit/s
        ipv4 classifier inp_if=ppp+ daddr=192.168.0.253
        borrow from A_down, C_down, D_down
        queue limits = 0 kb 150 packets
}

class C_up {
        bandwidth = 32 kbit/s
        borrow from A_up, B_up, D_up
        ipv4 classifier out_if=ppp+ saddr=192.168.0.252
        queue limits = 0 kb 150 packets
}

class C_down {
        bandwidth = 128 kbit/s
        borrow from A_down, B_down, D_down
        ipv4 classifier inp_if=ppp+ daddr=192.168.0.252
        queue limits = 0 kb 150 packets
}

class D_up {
        bandwidth = 32 kbit/s
        borrow from A_up, B_up, C_up
        ipv4 classifier out_if=ppp+ saddr=192.168.0.251
        queue limits = 0 kb 150 packets
}

class D_down {
        bandwidth = 128 kbit/s
        borrow from A_down, B_down, C_down
        ipv4 classifier inp_if=ppp+ daddr=192.168.0.251
        queue limits = 0 kb 150 packets
}

class wrz_up {
	bandwidth = 4.0 kbyte/s
	ipv4 classifier out_if=ppp+ proto=tcp sport=80
	queue limits = 0 kb 20 packets
}

Aztán amit végképp nem értek meg az a Qos.

#!/bin/bash
#
# myshaper - DSL/kabelmodem kimeno forgalmanak szabalyozasa.
#            Az ADSL/Cable wondershaper (www.lartc.org) szkripten alapszik.
#
# Irta: Dan Singletary (8/7/02)
#
# FIGYELEM: a szkript feltetelezi,  hogy a kernelt megfoltoztuk a megfelelo HTB
# sor és  IMQ foltokkal,  amik hozzaferhetok  itt (megj.:  az ujabb kerneleknel
# lehet, hogy nem kell folt):
#
#       http://luxik.cdi.cz/~devik/qos/htb/
#       http://luxik.cdi.cz/~patrick/imq/
#
# Konfiguracios beallitasok:
#  DEV    - ethX-re allitsuk, ami kapcsolodik a DSL/kabelmodemhez
#  RATEUP - allitsuk valamivel kisebbre, mint a modem kimeno savszelessege.
#           Nekem 1500/128  DSL vonalam  van, es a  RATEUP=90 jol mukodik a
#           128 kbps-os feltoltessel. De ahogy jonak latod.
#  RATEDN - allitsd valamivel kisebbre, mint a bejovo savszelesseg.
#
#
# Teoria az imq hasznalatarol a bejovo forgalom alakitasahoz:
#
#
# BEJOVO  TCP  KAPCSOLATOK  BEFOLYASOLASAT.  Ennek  ertelmeben  minden   nem-TCP
# forgalmat egy  magas prioritasu  osztalyba kell  sorolnunk, mivel  egy nem-TCP
# csomag eldobasa valoszinuleg a csomag  ujrakuldeset okozza. Ez semmi mast  nem
# jelent,  csak  a  savszelesseg  szuksegtelen  lefoglalasat,  hogy specifikusan
# valaszthatunk:  NEM  dobunk  el  bizonyos  tipusu  csomagokat, amiket magasabb
# prioritasu tarolokba  helyezunk el  (ssh, telnet  stb). Ez  azert van,  mert a
# csomagok  mindig  az  alacsonyabb  prioritasu  osztalybol  jonnek  elo azzal a
# kikotessel,  hogy  a  csomagok  meg  minden osztalybol egyforman egy minimalis
# mertekben jonnek ki (ebben a szkriptben minden tarolo legalabb a  tisztesseges
# 1/7 savszelessegnyivel A TCP csomag  eldobasa egy kapcsolaton belul a  fogadas
# alacsonyabb mertekehez vezet, a torlodas-elkerulo algoritmus miatt.
#
#     *  Semmit  nem  nyerunk  a  nem-TCP  csomagok  eldobasaval.  Valojaban, ha
#     fontosak  voltak,  ugyis  ujra  elkuldik  oket, igy megprobaljuk azt, hogy
#     sosem dobjuk el oket. Ez azt jelenti, hogy a telitett TCP kapcsolatok  nem
#     befolyasoljak  negativan  azokat  a  protokollokat,  amelyeknel  nincs   a
#     TCP-hez hasonlo beepitett ujrakuldes.
#     
#     * A TCP kapcsolatok lelassitasa  ugy, hogy a teljes bejovo  rata kevesebb,
#     mint az eszkoz  valos kapacitasa AZT  OKOZHATJA, hogy keves  vagy egyetlen
#     csomag   sem   all   varakozosorba   a   szolgaltatoi   oldalon    (DSLAM,
#     kabel-koncentrator  stb).   Mivel  ezek  a  sorok  kepesek  megtartani   4
#     masodpercnyi adatot 1500Kbps sebessegen  vagy 6 megabitnyi adatot,  ha egy
#     csomag sem all sorba, az alacsonyabb lappangast okoz.
#
# Kikotesek (kerdesfeltevesek a teszteles elott):
# * A bejovo forgalom ezen a modon valo korlatozasa gyenge TCP-teljesítmenyt ad?
#   - Az elozetes valsz: nem! Ugy nez ki, hogy az ACK csomagok prioritasanak
#   beallitasa (kicsi <64b) anelkul  maximaljuk a kimeno telesitmenyt,  hogy
#   nem  vesztunk  savszelesseget a mar meglevo ujrakuldott  csomagok miatt.

# Megjegyzes: a kovetkezo konfiguracio jol mukodik az en beallitasaimmal:
# 1.5M/128K ADSL a Pacific Bell Internet-en keresztul (SBC Global Services)

DEV=eth0
RATEUP=90
RATEDN=700     # Figyeld meg, hogy ez jelntosen kisebb mint az 1500-as kapacitas.
      # Emiatt nem kell a bejovo  forgalom korlatozasaval torodnod, amig
      # nem hasznalhatunk  jobb megvalositast,  mint például a TCP ablak
      # manipulacioja.
#
# konfiguracios beallitasok vege
#

if [ "$1" = "status" ]
then
        echo "[qdisc]"
        tc -s qdisc show dev $DEV
        tc -s qdisc show dev imq0
        echo "[class]"
        tc -s class show dev $DEV
        tc -s class show dev imq0
        echo "[filter]"
        tc -s filter show dev $DEV
        tc -s filter show dev imq0
        echo "[iptables]"
        iptables -t mangle -L MYSHAPER-OUT -v -x 2> /dev/null
        iptables -t mangle -L MYSHAPER-IN -v -x 2> /dev/null
        exit
fi

# Mindent visszaalitunk alapallapotba (torlunk)
tc qdisc del dev $DEV root    2> /dev/null > /dev/null
tc qdisc del dev imq0 root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D PREROUTING -i $DEV -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null
ip link set imq0 down 2> /dev/null > /dev/null
rmmod imq 2> /dev/null > /dev/null

if [ "$1" = "stop" ]
then
        echo "Shaping removed on $DEV."
        exit
fi

###########################################################
#
# Kimeno korlatozas (a teljes savszelesseg RATEUP-ra allitva)

# a varakozosor meretet ugy allitjuk be, hogy kb. 2 mp lappangas legyen az alacsony
# prioritasu csomagoknal
ip link set dev $DEV qlen 30

# a kimeno eszkozon MTU-t allitunk. Az MTU csokkentese alacsonyabb lappangast
# ad, de valamivel kisebb kimeno teljesitmenyt is az IP es TCP protokoll
# felulvezerlese miatt

ip link set dev $DEV mtu 1000

# a HTB-t gyoker qdisc-nek allitjuk be
tc qdisc add dev $DEV root handle 1: htb default 26

# hozzaadjuk a fobb korlatozo osztalyokat
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit

# hozzadjuk  az  alosztalyokat  -  garantaljuk  minden  osztalynak  LEGALABB   a
# "tisztesseges" osztozast  a savszelessegen.  Emiatt egy  osztalyt sem  fog egy
# masik kieheztetni.  Ezenkivul mindegyik  osztaly hasznalhatja  a rendelkezesre
# allo savszelesseget, ha a tobbi nem hasznalja.

tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 0
tc class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 2
tc class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 4
tc class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 5
tc class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/7]kbit ceil ${RATEUP}kbit prio 6


# az  alosztalyokhoz  qdisc-eket adunk - SFQ-t adunk  minden osztalyhoz. Az SFQ
# biztositja,  hogy minden osztalyon  belul a kapcsolatokat (majdnem) egyenloen
# kezeljuk.


tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10

# az fwmark-kal  szurjuk osztalyokba a   forgalmat - itt  a csomagon  beallitott
# fwmark-nak megfeleloen iranyitjuk a forgalmat az osztalyokba (az fwmark-ot  az
# iptables  segitsegevel  kesobb  allitjuk  be).  Figyeld  meg,  hogy fentebb az
# alapertelmezett  prioritasu  osztalyt  1:26-ra  allitottuk,  igy  a nem jelolt
# csomagok (vagy a nem  ismert ID-ju csomagok) alapertelmezesben  az alacsonyabb
# prioritasu osztalyba mennek.

tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 25 fw flowid 1:25
tc filter add dev $DEV parent 1:0 prio 0 protocol ip handle 26 fw flowid 1:26

#
# a MYSHAPER-OUT lanc hozzadasa az  iptables "mangle" tablajahoz - ez beallitja
# azt a tablat,   amit a csomagok szuresehez es megjelolesehez hasznalunk.

iptables -t mangle -N MYSHAPER-OUT
iptables -t mangle -I POSTROUTING -o $DEV -j MYSHAPER-OUT

# a fwmark ertekek  beallitasa a kulonbozo  tipusu forgalomhoz - a  fwmark-ot 20-26
# kozottire allitjuk a kivant osztalynak megfeleloen. A 20 a legmagasabb prioritas.

iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 0:1024 -j MARK --set-mark 23 # Alapertek az
# alacsony portokon zajlo forgalomhoz
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 0:1024 -j MARK --set-mark 23 # ""
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 20 -j MARK --set-mark 26     # ftp-data port, alacsony prioritas
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 5190 -j MARK --set-mark 23   # aol instant messenger
iptables -t mangle -A MYSHAPER-OUT -p icmp -j MARK --set-mark 20               # ICMP (ping) - magas prioritas, baratok ismertetojegye
iptables -t mangle -A MYSHAPER-OUT -p udp -j MARK --set-mark 21                # DNS nevfeloldas (kis csomagok)
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport ssh -j MARK --set-mark 22    # secure shell
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport ssh -j MARK --set-mark 22    # secure shell
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport telnet -j MARK --set-mark 22 # telnet (ew...)
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport telnet -j MARK --set-mark 22 # telnet (ew...)
iptables -t mangle -A MYSHAPER-OUT -p ipv6-crypt -j MARK --set-mark 24         # IPSec - viszont nem tudjuk, mi a "hasznos teher"...
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport http -j MARK --set-mark 25   # helyi webszerver
iptables -t mangle -A MYSHAPER-OUT -p tcp -m length --length :64 -j MARK --set-mark 21 # kis csomagok (valoszinuleg csak ACK-k)
iptables -t mangle -A MYSHAPER-OUT -m mark --mark 0 -j MARK --set-mark 26      # redundans- jeloljunk minden nem jelolt csomagot 26-tal (alacsony prioritas)

# vegeztunk a kimeno korlatozassal
#
####################################################

echo "Outbound shaping added to $DEV.  Rate: ${RATEUP}Kbit/sec."

# tavolitsd el a megjegyzest a kovetkezo sor elol, ha csak kimeno forgalomszabalyozast akarsz
# exit

####################################################
#
# Bejovo korlatozas (a teljes savszelesseg RATEDN-re allitva)

# megnezzuk, hogy az imq modul betoltodott-e

modprobe imq numdevs=1

ip link set imq0 up

# a qdisc hozzadasa - alapertelmezett alcsony prioritasu 1:21-es osztaly

tc qdisc add dev imq0 handle 1: root htb default 21

# a fo korlatozo osztalyok hozzaadasa
tc class add dev imq0 parent 1: classid 1:1 htb rate ${RATEDN}kbit

# alosztalyok hozzaadasa - TCP forgalom a 21-ben, nem-TCP forgalom a 20-ban
#
tc class add dev imq0 parent 1:1 classid 1:20 htb rate $[$RATEDN/2]kbit ceil ${RATEDN}kbit prio 0
tc class add dev imq0 parent 1:1 classid 1:21 htb rate $[$RATEDN/2]kbit ceil ${RATEDN}kbit prio 1

# az alosztalyokhoz qdisc-eket  adunk - SFQ-t adunk minden osztalyhoz. Az SFQ
# biztositja, hogy minden osztalyon belul a kapcsolatokat (majdnem) egyenloen
# kezeljuk.

tc qdisc add dev imq0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev imq0 parent 1:21 handle 21: red limit 1000000 min 5000 max 100000 avpkt 1000 burst 50

# az fwmark-kal  szurjuk osztalyokba  a forgalmat  - itt  a csomagon  beallitott
# fwmark-nak megfeleloen iranyitjuk a forgalmat az osztalyokba (az fwmark-ot  az
# iptables  segitsegevel  kesobb  allitjuk  be).  Figyeld  meg,  hogy fentebb az
# alapertelmezett  prioritasu  osztalyt  1:21-re  allitottuk,  igy  a nem jelolt
# csomagok (vagy a nem  ismert ID-ju csomagok) alapertelmezesben  az alacsonyabb
# prioritasu osztalyba kerulnek.


tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21


# a MYSHAPER-IN lanc hozzadasa az iptables "mangle" tablajahoz - ez beallitja azt a tablat,
#      amit a csomagok szuresehez es megjelolesehez hasznalunk.

iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I PREROUTING -i $DEV -j MYSHAPER-IN

# a fwmark ertekek beallitasa a kulonbozo tipusu forgalomhoz - a fwmark-ot 20-26 kozottire
#      allitjuk a kivant osztalynak megfeleloen. A 20 a legmagasabb prioritas.


iptables -t mangle -A MYSHAPER-IN -p ! tcp -j MARK --set-mark 20              # A nem-tcp csomagokat a legnagyobb prioritasura allitja
iptables -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -j MARK --set-mark 20 # rovid TCP csomagok, valoszinuleg ACK-k
iptables -t mangle -A MYSHAPER-IN -p tcp --dport ssh -j MARK --set-mark 20    # secure shell
iptables -t mangle -A MYSHAPER-IN -p tcp --sport ssh -j MARK --set-mark 20    # secure shell
iptables -t mangle -A MYSHAPER-IN -p tcp --dport telnet -j MARK --set-mark 20 # telnet (ew...)
iptables -t mangle -A MYSHAPER-IN -p tcp --sport telnet -j MARK --set-mark 20 # telnet (ew...)
iptables -t mangle -A MYSHAPER-IN -m mark --mark 0 -j MARK --set-mark 21              # redundans- minden nem jelolt csomagot 21-el jelolunk (alacsony prioritas)

# vegul utasitjuk ezeket a csomagokat, hogy menjenek keresztul a fent beallitott imq0-on

iptables -t mangle -A MYSHAPER-IN -j IMQ

# vegeztunk a bejovo forgalommal
#
####################################################

echo "Inbound shaping added to $DEV.  Rate: ${RATEDN}Kbit/sec."

Hígyjétek el. Rengeteg oldalt átböngésztem az iptables howoto kat a lartc.org ot és szinte az összes olyan fórumot ami ezzel foglalkozik de egyszerüen nem birom összehozni amit szeretnék.
Már több mint 6 hónapja küzdök vele :o(
A belsőhálózati DHCP servert és a SQUID ot pofon egyszerü volt összehozni.
Be is teszem ide őket , hátha ezzel segítek annak akinek erre van szüksége

DHCP3-SERVER:

ddns-update-style none;
option domain-name "local.lan";
#       option domain-name-servers 62.77.203.10,213.163.34.66;
option domain-name-servers 10.0.0.1;
default-lease-time 86400;
max-lease-time 604800;
#authoritative;
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 {
# range 10.0.0.1 10.0.0.255;
  option routers 10.0.0.1;
# option broadcast-address 10.0.0.255;
}
host fischer {
    hardware ethernet 00:E0:7D:FB:E7:4A;
    fixed-address 10.0.0.2;
}
host leitold {
    hardware ethernet 00:0E:2E:4F:80:15;
    fixed-address 10.0.0.3;
}

És ime a SQUID om:

http_port 10.0.0.1:3128
icp_port 3130
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 16 MB
maximum_object_size 30096 KB
minimum_object_size 1 KB
cache_dir ufs /var/spool/squid 2000 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
client_netmask 255.255.255.0
hosts_file /etc/hosts
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern .		0	20%	4320
acl all src 0.0.0.0/0.0.0.0
#hostok
acl fisher src 10.0.0.2/32
acl leitold src 10.0.0.3/32
#
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563	# https, snews
acl SSL_ports port 873		# rsync
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443 563	# https, snews
acl Safe_ports port 70		# gopher
acl Safe_ports port 210		# wais
acl Safe_ports port 1025-65535	# unregistered ports
acl Safe_ports port 280		# http-mgmt
acl Safe_ports port 488		# gss-http
acl Safe_ports port 591		# filemaker
acl Safe_ports port 777		# multiling http
acl Safe_ports port 631		# cups
acl Safe_ports port 873		# rsync
acl Safe_ports port 901		# SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
#host
http_access allow fischer
http_access allow leitold
#
http_reply_access allow all
icp_access allow all

Köszi szépen minden segíttséget!

Hozzászólások

Legyszíves zárd már a kódot "[ code ] ... [ /code ]" jelek közé!
(a szögletes zárójeleken belül ne legyen szóköz!)

néhány hónapja még problémák voltak bizonyos dolgokkal.
Pl hogy csak azok férhessenek hozzá a nethez akiknek jogosultságuk van
ezt a köv képp. csináltam:

 iptables -A INPUT -m mac --mac-source 00:01:02:03:04:05 -s 10.0.x.x -j ACCEPT
iptables -A INPUT -i eth1 -j DROP 

Jó, jó meggoldás de valahogy kevésnek tűnik.
Biztos van komolyabb megoldás is.
A másik gond a NEPTUN és az MSN MESSENGER volt-
mindent végigpróbáltam és végül a következő 2 sor beírása utánn minden működött:

iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ppp0 -j TCPMSS --set-mss 1452 

Hogy ez mit jelent pontosan , azt nem tudom , de működik az MSN és a NEPTUN :o)
A p2p vel voltam még szörnyü nagy gondban, hogy valaki elkezdett dc++-zni vagy torrentezni akkor vége volt a netezésnek.
A sourceforge.net ről szedtem le egy ipp2p-0.8.2.tar.tar akármit aztán:

iptables -A INPUT -i ppp0 -m ipp2p --ipp2p -j DROP
iptables -A INPUT -i eth1 -m ipp2p --ipp2p -j DROP
iptables -A FORWARD -i eth1 -o ppp0 -m ipp2p --ipp2p -j DROP
iptables -v -A PREROUTING -i eth1 -t mangle -m ipp2p --ipp2p -j MARK --set-mark fuck 

így oldottam meg.
Ezzel totál letiltottam a P2P -t
A probléma amivel most küzdök ,hogy ezt a markolt fuck csomagot kéne valahogy egy másik GATEAY re átlökni ,hogy azért fusson a P2P de ne ezen a vonalon hanem egy másikon.
Ha van szakértő ebben a témában az lécci írja le az ötleteit.

Próbálkoztam én is azzal, hogy egyenlően osztozzanak a kliensek a torrentezésre kiszabott szávszélességgel. Ez működik is jól, az alábbi configgal: (layer7 patch kernelen és iptablesen)

tc qdisc del dev eth0 root &> /dev/null
tc qdisc del dev eth1 root &> /dev/null
tc qdisc add dev eth1 root handle 1: htb default 10

tc class add dev eth1 parent 1: classid 1:1 htb rate 2mbit ceil 2mbit
tc class add dev eth1 parent 1:1 classid 1:10 htb rate 100kbps ceil 100kbps

tc qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 10

tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:10

iptables -F -t mangle
iptables -F FORWARD
iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 6

---

Viszont arra nem jöttem rá, hogy lehetne azt elérni, hogy legyen 2 csoport. Egyikbe azok tartoznak, akik 100kbps-el torrentezhetnek, a másikba pedig azok akik 200kbps-el.

tc qdisc del dev eth0 root &> /dev/null
tc qdisc del dev eth1 root &> /dev/null
tc qdisc add dev eth1 root handle 1: htb default 10

tc class add dev eth1 parent 1: classid 1:1 htb rate 2mbit ceil 2mbit
tc class add dev eth1 parent 1:1 classid 1:10 htb rate 200kbps ceil 200kbps
tc class add dev eth1 parent 1:1 classid 1:30 htb rate 100kbps ceil 100kbps

tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 5 fw flowid 1:10
tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:30

iptables -F -t mangle
iptables -F FORWARD

iptables -t mangle -A POSTROUTING -p tcp -s 192.168.1.0/28 -m layer7 --l7proto bittorrent -j MARK --set-mark 5
iptables -t mangle -A POSTROUTING -p tcp -d 192.168.1.0/28 -m layer7 --l7proto bittorrent -j MARK --set-mark 5
iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 6

(az SFQ-t kivettem, hogy ne osztozzanak egyenlően)

Van valakinek ötlete?

A megoldás ez: (csak az utolsó 3 sor helyett)

iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 6
iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 6
iptables -t mangle -A POSTROUTING -p tcp -s 192.168.1.0/28 -m layer7 --l7proto bittorrent -j MARK --set-mark 5
iptables -t mangle -A POSTROUTING -p tcp -d 192.168.1.0/28 -m layer7 --l7proto bittorrent -j MARK --set-mark 5