Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[IPTABLES] NAT et QoS : un coup de main ?
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
CryoGen
Veteran
Veteran


Joined: 11 Feb 2004
Posts: 1426
Location: Bamako - Mali - Afrique

PostPosted: Sun Jan 21, 2007 5:07 pm    Post subject: [IPTABLES] NAT et QoS : un coup de main ? Reply with quote

Bonjour @tous,

Je refais actuellement mes règles poussiéreuses d'iptables avec lesquelles "ca marche, mais c'est pas top" et je voudrai y ajouter un peu de QoS :)

Évidement je ne touche à iptables que très rarement et j'ai donc un peu de mal à me dépatouiller de tous ca :roll:

Voici les infos:

Internet <-> ppp0 +SERVEUR+ eth0 <-> LAN

Mon Lan est en 192.168.0.0/24

-Il y a un serveur apache sur mon serveur qui doit etre accessible de l'extérieur.
-Les applications p2p mldonkey et rtorrent sont sur mon serveur (piloté respectivement via Webgui et ssh/screen)
-Sur les PC de mon LAN il faut pouvoir surfer, envoyer/recevoir ses mails, msn, IRC, skype.

Ce que je voudrais :
- Etre sécurisé (pas non plus comme le pentagone :lol:, mais assez pour résister à des scripts kiddies "évolués" XD)
- Mettre des priorités (QoS) afin d'être un peu moins gêné par le p2p


Je me suis donc inspiré du wiki Howto Packet Shaping et j'ai déjà pondu ceci:

Code:
VOIR POST SUIVANT


Je ne l'ai pas encore testé :oops: je voudrais d'abord vos avis dessus :)
Je sais qu'il manque la partie nat, et pour cause :lol: je ne l'ai pas encore réalisé... (à part le masquerading, mais je ne pense pas que cela suffise...)

Merci :)

EDIT : Hum je pense aussi que j'ai pas ouvert les ports .... en gros je ne sais pas trop où j'en suis XD
_________________
- CryoGen` on #gentoofr@irc.freenode.net
- ~amd64 / KDE4
- I'm the bone of my sword...


Last edited by CryoGen on Sun Jan 21, 2007 10:51 pm; edited 1 time in total
Back to top
View user's profile Send private message
CryoGen
Veteran
Veteran


Joined: 11 Feb 2004
Posts: 1426
Location: Bamako - Mali - Afrique

PostPosted: Sun Jan 21, 2007 7:46 pm    Post subject: Reply with quote

Bon j'ai un peu continué et je l'ai testé, c'est une horreur :lol:
J'ai perdu ma connexion ssh, impossible à partir du serveur d'envoyer des ping vers l'exterieur, resolution dns impossible ... bref, un brin trop puissant :oops:

Voici le script actuel, il devrait normalement me laisser tout faire en LAN -> serveur (pas encore testé) par contre je ne sais pas encore où est le probleme qui m'empeche de sortir (ping, resolution dns..)

Code:
VOIR POST SUIVANT -_-"


En avant !


Merci :)
_________________
- CryoGen` on #gentoofr@irc.freenode.net
- ~amd64 / KDE4
- I'm the bone of my sword...


Last edited by CryoGen on Sun Jan 21, 2007 10:52 pm; edited 1 time in total
Back to top
View user's profile Send private message
CryoGen
Veteran
Veteran


Joined: 11 Feb 2004
Posts: 1426
Location: Bamako - Mali - Afrique

PostPosted: Sun Jan 21, 2007 9:03 pm    Post subject: Reply with quote

Bon je continue ... tout seul :(

Alors maintenant je ne perds plus la connexion à mon serveur en local :)
Internet fonctionne aussi toujours. Mais impossible de pinguer l'exterieur ou de faire une requete dns...

Code:
####################################
# Init
iptables -F
iptables -X
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F

#####################################

#####################################
#Ifaces
LAN_IF="eth0"
NET_IF="ppp0"


#Network
LAN_NET="192.168.0.0/255.255.255.0"


#Port
ED2K="6200"
OVERNET="16129"
BITTORENT="7000:7500"
HTTP="80"
HTTPS="443"
IDENTD="113"
IRCDCC="9000:9050"
MSNFILE="6891:6900"

#Computer on LAN
INNERSTORM="192.168.0.2"

#QoS
MARK_P1="1" # Interactive (ICMP, SSH)
MARK_P2="2" # Misc
MARK_P3="3" # Browsing
MARK_P4="4" # P2P

######################################

######################################
# -- RULES --

#Default policies
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

#All services should be avialable from LAN
iptables -I INPUT 1 -i $LAN_IF -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -p UDP --dport bootps -i ! $LAN_IF -j REJECT
iptables -A INPUT -p UDP --dport domain -i ! $LAN_IF -j REJECT

#MASQUERADING and NAT
iptables -I FORWARD -i $LAN_IF -d $LAN_NET -j DROP
iptables -A FORWARD -i $LAN_IF -s $LAN_NET -j ACCEPT
iptables -A FORWARD -i $NET_IF -d $LAN_NET -j ACCEPT
iptables -t nat -A POSTROUTING -o $NET_IF -j MASQUERADE
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -d $LAN_NET -j ACCEPT


#Opening some ports into the firewall
#identd
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $IDENTD -j ACCEPT
#Bittorent
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $BITTORENT -j ACCEPT
#mldonkey ed2k+overnet
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $ED2K -j ACCEPT
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $OVERNET -j ACCEPT
#msn - transfert
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $MSNFILE -j ACCEPT
#IRC DCC
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $IRCDCC -j ACCEPT


#Ports
#irc DCC -> innerStorm
iptables -t nat -A PREROUTING -i $NET_IF -p tcp --dport $IRCDCC -j DNAT --to $INNERSTORM

########################################

########################################
#QoS
# icmp
iptables -t mangle -A FORWARD -p icmp -j MARK --set-mark $MARK_P1
iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark $MARK_P1
# ssh
iptables -t mangle -A FORWARD -p tcp --dport 22 -j MARK --set-mark $MARK_P1
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark $MARK_P1
# non tcp
iptables -t mangle -A FORWARD -p ! tcp -j MARK --set-mark $MARK_P1
iptables -t mangle -A OUTPUT -p ! tcp -j MARK --set-mark $MARK_P1

# http
iptables -t mangle -A FORWARD -p tcp --dport $HTTP -j MARK --set-mark $MARK_P3
iptables -t mangle -A OUTPUT -p tcp --dport $HTTP -j MARK --set-mark $MARK_P3
# https
iptables -t mangle -A FORWARD -p tcp --dport $HTTPS -j MARK --set-mark $MARK_P3
iptables -t mangle -A OUTPUT -p tcp --dport $HTTPS -j MARK --set-mark $MARK_P3
# smtp
iptables -t mangle -A FORWARD -p tcp --dport 25 -j MARK --set-mark $MARK_P3
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark $MARK_P3

#Bittorent
iptables -t mangle -A OUTPUT -p tcp --sport $BITTORENT -j MARK --set-mark $MARK_P4
iptables -t mangle -A OUTPUT -p tcp --dport $BITTORENT -j MARK --set-mark $MARK_P4

#mldonkey ed2k proto port 6200 + overnet proto port 16129
iptables -t mangle -A OUTPUT -p tcp --sport $ED2K -j MARK --set-mark $MARK_P4
iptables -t mangle -A OUTPUT -p tcp --dport $ED2K -j MARK --set-mark $MARK_P4
iptables -t mangle -A OUTPUT -p tcp --sport $OVERNET -j MARK --set-mark $MARK_P4
iptables -t mangle -A OUTPUT -p tcp --dport $OVERNET -j MARK --set-mark $MARK_P4

#######################################

#######################################


Quelqu'un a une idée ?

EDIT: refonte du script :)
_________________
- CryoGen` on #gentoofr@irc.freenode.net
- ~amd64 / KDE4
- I'm the bone of my sword...
Back to top
View user's profile Send private message
MaKKrO
Apprentice
Apprentice


Joined: 04 Oct 2005
Posts: 265
Location: Paris - FRANCE

PostPosted: Mon Jan 22, 2007 5:58 am    Post subject: Reply with quote

Salut,

Essaie d'ajouter un NEW dans le state du FORWARD, ca devrait marcher.

Autrement ca tombe tres bien... Je vais me lancer aujourd'hui dans la QoS.

Je vais risquer de revenir ici ... :wink:
_________________
Loisirs = Gentoo / Taff = Gentoo / Pourtant Taff != Loisirs
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Mon Jan 22, 2007 8:18 am    Post subject: Reply with quote

salut, j'me glisse ici, (il fait chaud et tout..), bon attention je débute avec iptables, donc mes questions peuvent paraitre, euh..hum.. connes? :)

Bref, pourquoi rajouter NEW dans FORWARD? il a la règle:
Code:
ptables -A FORWARD -i $LAN_IF -s $LAN_NET -j ACCEPT

donc il accepte déjà tous venant de son LAN non? et puis d'ailleurs, j'comprends pas pourquoi la naviguation internet marche (par @IP tu veux donc dire?) et pas le ping ni la résolution de noms? :/ (tuparles bien de la navigation depuis le routeur ou depuis le LAN?)

voili-voilou, merci à ceux qui vont lui répondre, ça va bien m'aider :twisted: :P

EDIT: pour la QoS question comme ça, vous marquez les paquets là, mais c'est ou et quand que le traitement à lieu?:/
_________________
The End of the Internet!
Back to top
View user's profile Send private message
MaKKrO
Apprentice
Apprentice


Joined: 04 Oct 2005
Posts: 265
Location: Paris - FRANCE

PostPosted: Mon Jan 22, 2007 9:12 am    Post subject: Reply with quote

truc wrote:

Bref, pourquoi rajouter NEW dans FORWARD? il a la règle:
Code:
ptables -A FORWARD -i $LAN_IF -s $LAN_NET -j ACCEPT

donc il accepte déjà tous venant de son LAN non? ...


Oui... c'est vrai ! Mais moi je sais que j'avais le meme genre de problemes et ca l'a resolu en ajoutant le status NEW !

truc wrote:

EDIT: pour la QoS question comme ça, vous marquez les paquets là, mais c'est ou et quand que le traitement à lieu?:/


Pour ma part ca sera configurable dans l'interface Web, donc j'execute le fichier au "submit".
Et puis ca sera baser sur les IP, et non les ports... mais ca ne change pas grand chose !
_________________
Loisirs = Gentoo / Taff = Gentoo / Pourtant Taff != Loisirs
Back to top
View user's profile Send private message
CryoGen
Veteran
Veteran


Joined: 11 Feb 2004
Posts: 1426
Location: Bamako - Mali - Afrique

PostPosted: Mon Jan 22, 2007 12:08 pm    Post subject: Reply with quote

truc wrote:
pour la QoS question comme ça, vous marquez les paquets là, mais c'est ou et quand que le traitement à lieu?:/


Effectivement, j'ai seulement marqué les paquets pour le moment ;) J'ai pas encore fait la partie QoS car je voulais d'abord avoir la partie routeur/firewall en place pour ensuite faire des test QoS ;)

J'en suis au point 7 du wiki: Howto Packet Shapping ;) Fixer le Qos est au point 8 :)

MaKKrO wrote:
Essaie d'ajouter un NEW dans le state du FORWARD, ca devrait marcher.


Oki je vais essayer ! C'est bien dans cette ligne là que je dois le rajouter ? :oops:
Code:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -d $LAN_NET -j ACCEPT


truc wrote:
et puis d'ailleurs, j'comprends pas pourquoi la naviguation internet marche (par @IP tu veux donc dire?) et pas le ping ni la résolution de noms? :/ (tuparles bien de la navigation depuis le routeur ou depuis le LAN?)

Quand j'applique mes règles, les connections existantes fonctionnent toujours : par exemple je ne perds pas ma connexion à IRC :) , mais par contre impossible dans établir une nouvelle que ce soit via IP ou Nom
Clairement le NEW à FORWARD devriat donc arranger les choses ^_^ (je l'espère, sinon ca va être la crise de nerf XD)

EDIT: j'ai ajouter NEW dasn la ligne citée plus haut, ca ne marche pas :/
EDIT2 : :oops: bon alors je rectifie :: en ajoutant le NEW j'ai le ping via IP qui marche depuis ma machine LAN , la résolution DNS ne marche pas, ce qui est normal puisque c'est mon serveur qui fait DNS (dnsmasq) et que lui (mon serveur) n'arrive toujours pas à pinguer l'exterieur , meme en IP (en gros il n'arrive pas à sortir OU on arrive pas à lui repondre) ...
Ca va , vous arrivez à décoder ? :lol:
_________________
- CryoGen` on #gentoofr@irc.freenode.net
- ~amd64 / KDE4
- I'm the bone of my sword...
Back to top
View user's profile Send private message
nimli
n00b
n00b


Joined: 08 Oct 2004
Posts: 21

PostPosted: Mon Jan 22, 2007 12:56 pm    Post subject: Reply with quote

C'est plus sur les parties INPUT qu'il faut gérer le new/established que sur la partie FORWARD.
Il faut faire attention qu'avant de forwarder le paquets il teste les règles firewall. Donc si le INPUT bloque le paquet, il sera pas forwarder.
Sinon ce qui peut aider c'est de regarder les logs, comme ca tu vois ce qui est bloqué et qui ne devrait pas l'être.

Bon je sais c pas très clair, je suis pas sur mon PC alors c'est juste de mémoire.
Back to top
View user's profile Send private message
nimli
n00b
n00b


Joined: 08 Oct 2004
Posts: 21

PostPosted: Mon Jan 22, 2007 1:00 pm    Post subject: Reply with quote

Ah oui sinon juste comme ca, pour mon firewall/router (pentium 200MMX), j'utilise IPCOP comme distrib vu que mettre une gentoo sur ce type de machine c'est pas super. Et je trouve que comme distrib c'est parfait pour ce genre de machine, une fois que t'as tout configurer, tu vire le clavier, la souris et l'écran, t'accède grâce à l'interface web et/ou ssh et t'entend plus parler de la bécane :wink:
Back to top
View user's profile Send private message
CryoGen
Veteran
Veteran


Joined: 11 Feb 2004
Posts: 1426
Location: Bamako - Mali - Afrique

PostPosted: Mon Jan 22, 2007 1:03 pm    Post subject: Reply with quote

Effectivement, on en discutait sur IRC avec truc et le probleme etait bien sur les inputs ! J'ai donc rajouté la ligne
Code:
#We want anwsers to our questions :D
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


et ca marche !

Voici donc mon script d'iptables ! il est pas encore testé à fond et niveau sécurité je ne sais pas ce qu'il donne :oops:
Code:
 ####################################
# Init
iptables -F
iptables -X
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F

#####################################

#####################################
#Ifaces
LAN_IF="eth0"
NET_IF="ppp0"


#Network
LAN_NET="192.168.0.0/255.255.255.0"


#Port
ED2K="6200"
OVERNET="16129"
BITTORENT="7000:7500"
HTTP="80"
HTTPS="443"
IDENTD="113"
IRCDCC="9000:9050"
MSNFILE="6891:6900"

#Computer on LAN
INNERSTORM="192.168.0.2"

#QoS
MARK_P1="1" # Interactive (ICMP, SSH)
MARK_P2="2" # Misc
MARK_P3="3" # Browsing
MARK_P4="4" # P2P

######################################

######################################
# -- RULES --

#Default policies
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

#We want anwsers to our questions :D
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#All services should be avialable from LAN
iptables -I INPUT 1 -i $LAN_IF -j ACCEPT
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -p UDP --dport bootps -i ! $LAN_IF -j REJECT
iptables -A INPUT -p UDP --dport domain -i ! $LAN_IF -j REJECT

#MASQUERADING and NAT
iptables -I FORWARD -i $LAN_IF -d $LAN_NET -j DROP
iptables -A FORWARD -i $LAN_IF -s $LAN_NET -j ACCEPT
iptables -A FORWARD -i $NET_IF -d $LAN_NET -j ACCEPT
iptables -t nat -A POSTROUTING -o $NET_IF -j MASQUERADE
iptables -A FORWARD -m state --state NEW,ESTABLISHED,RELATED -d $LAN_NET -j ACCEPT


#Opening some ports into the firewall
#identd
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $IDENTD -j ACCEPT
#Bittorent
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $BITTORENT -j ACCEPT
#mldonkey ed2k+overnet
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $ED2K -j ACCEPT
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $OVERNET -j ACCEPT
#msn - transfert
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $MSNFILE -j ACCEPT
#IRC DCC
iptables -t filter -A INPUT -i $NET_IF -p tcp -m tcp --dport $IRCDCC -j ACCEPT


#Ports
#irc DCC -> innerStorm
iptables -t nat -A PREROUTING -i $NET_IF -p tcp --dport $IRCDCC -j DNAT --to $INNERSTORM

########################################

########################################
#QoS
# icmp
iptables -t mangle -A FORWARD -p icmp -j MARK --set-mark $MARK_P1
iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark $MARK_P1
# ssh
iptables -t mangle -A FORWARD -p tcp --dport 22 -j MARK --set-mark $MARK_P1
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark $MARK_P1
# non tcp
iptables -t mangle -A FORWARD -p ! tcp -j MARK --set-mark $MARK_P1
iptables -t mangle -A OUTPUT -p ! tcp -j MARK --set-mark $MARK_P1

# http
iptables -t mangle -A FORWARD -p tcp --dport $HTTP -j MARK --set-mark $MARK_P3
iptables -t mangle -A OUTPUT -p tcp --dport $HTTP -j MARK --set-mark $MARK_P3
# https
iptables -t mangle -A FORWARD -p tcp --dport $HTTPS -j MARK --set-mark $MARK_P3
iptables -t mangle -A OUTPUT -p tcp --dport $HTTPS -j MARK --set-mark $MARK_P3
# smtp
iptables -t mangle -A FORWARD -p tcp --dport 25 -j MARK --set-mark $MARK_P3
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark $MARK_P3

#Bittorent
iptables -t mangle -A OUTPUT -p tcp --sport $BITTORENT -j MARK --set-mark $MARK_P4
iptables -t mangle -A OUTPUT -p tcp --dport $BITTORENT -j MARK --set-mark $MARK_P4

#mldonkey ed2k proto port 6200 + overnet proto port 16129
iptables -t mangle -A OUTPUT -p tcp --sport $ED2K -j MARK --set-mark $MARK_P4
iptables -t mangle -A OUTPUT -p tcp --dport $ED2K -j MARK --set-mark $MARK_P4
iptables -t mangle -A OUTPUT -p tcp --sport $OVERNET -j MARK --set-mark $MARK_P4
iptables -t mangle -A OUTPUT -p tcp --dport $OVERNET -j MARK --set-mark $MARK_P4

#######################################

#######################################


Je vais pouvoir me lancer dans le point 8 : HOWTO Packet Shaping: Understanding HTB :twisted:
_________________
- CryoGen` on #gentoofr@irc.freenode.net
- ~amd64 / KDE4
- I'm the bone of my sword...
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Mon Jan 22, 2007 1:13 pm    Post subject: Reply with quote

nimli wrote:
Il faut faire attention qu'avant de forwarder le paquets il teste les règles firewall. Donc si le INPUT bloque le paquet, il sera pas forwarder.

là, vu ce qu'on m'a expliqué ici, je ne pense pas que ça soit exact. le INPUT et le FORWARD sont deux tables bien distinctes de par leur utilisation :S
_________________
The End of the Internet!
Back to top
View user's profile Send private message
zyprexa
Apprentice
Apprentice


Joined: 26 Dec 2004
Posts: 180

PostPosted: Mon Jan 22, 2007 8:07 pm    Post subject: Reply with quote

@ nimli : je confirme, ipcop c'est trop du ballon

Pour ma part, je me suis longtemps battu avec iptables.

Il y a la notion de stateful, qui est on va dire la fonction-clé d'iptables : c'est la base même de son fonctionnement ... que tu as déjà saisi.

Il y a deux choses qui me frappent :
- l'absence de règles de log des paquets (les logs m'ont permis d'analyser illico les résultats de mes actions ... avec un root-tail c'est un vrai plaisir ^^ ... ca a été l'illumination pour moi)
- dans les docs que j'ai lu, les auteurs insistaient lourdement sur le fait de ne pas essayer de faire du filtrage par la chaîne FORWARD.
Je ne me suis pas embarassé de règles dans la chaîne FORWARD : ca correspond à coller la destination en DMZ.

les meilleures docs que j'ai trouvées sont celles-ci :
- celle-ci, je l'ai trouvée sur DLFP http://olivieraj.free.fr/fr/linux/information/firewall/
- celui-là était lié au premier, très clair http://christian.caleca.free.fr/index.html
- très bonne doc aussi http://www.nbs-system.com/article/iptables_howto
_________________
enjoy
Back to top
View user's profile Send private message
CryoGen
Veteran
Veteran


Joined: 11 Feb 2004
Posts: 1426
Location: Bamako - Mali - Afrique

PostPosted: Mon Jan 22, 2007 11:41 pm    Post subject: Reply with quote

Bah si j'avais un serveur à mettre en "simple" routeur je mettrai plutôt pfSense qu' IPcop ;)


Bon sinon j'ai pas trop avancé, j'ai juste activé les règles fournis par le wiki mais légèrement modifiées

Code:
#Constants

# Interface you want to do shaping on
# eth2, eth1 for direct connection; ppp0 or so for dsl
# and other dialup connections (check ifconfig)
IFACE="ppp0"

# Priority marks
MARKPRIO1="1"
MARKPRIO2="2"
MARKPRIO3="3"
MARKPRIO4="4"

# Rates
UPRATE="128kbit"
#P2PRATE=$UPRATE
P2PRATE="108kbit"
PRIORATE1="65kbit"
PRIORATE2="46kbit"
PRIORATE3="27kbit"
PRIORATE4="8kbit"

# Quantum
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"

# Set queue length for IFACE
ifconfig $IFACE txqueuelen 16

# Specify queue discipline
tc qdisc add dev $IFACE root handle 1:0 htb default 103 r2q 1

# Set root class
tc class add dev $IFACE parent 1:0 classid 1:1 htb rate $UPRATE burst $BURST1 cburst $CBURST1
# Specify sub classes
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

# Filter packets
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

# Add queuing disciplines
tc qdisc add dev $IFACE parent 1:101 sfq perturb 10 quantum $QUANTUM1
tc qdisc add dev $IFACE parent 1:102 sfq perturb 10 quantum $QUANTUM2
tc qdisc add dev $IFACE parent 1:103 sfq perturb 10 quantum $QUANTUM3
tc qdisc add dev $IFACE parent 1:104 sfq perturb 8 quantum $QUANTUM4


Bon ca à l'air de marcher plus ou moins... pas facile de se rendre compte ^_^
_________________
- CryoGen` on #gentoofr@irc.freenode.net
- ~amd64 / KDE4
- I'm the bone of my sword...
Back to top
View user's profile Send private message
-KuRGaN-
Veteran
Veteran


Joined: 05 Dec 2004
Posts: 1142
Location: Besançon (25) [FRANCE]

PostPosted: Tue Jan 23, 2007 8:50 am    Post subject: Reply with quote

En effet, le FORWARD et le INPUT sont deux tables différentes.

Sinon, concernant des distributions spécialisées ds le firewalling, vous avec Monowall sous BSD qui est le grand frère de pfSense :wink:
_________________
Knight Gent00 Industries RiDeR !!!!
Back to top
View user's profile Send private message
nimli
n00b
n00b


Joined: 08 Oct 2004
Posts: 21

PostPosted: Tue Jan 23, 2007 10:30 am    Post subject: Reply with quote

Non mais j'ai jamis dit le contraire, ce que je dis c'est que si t'as une règle INPUT qui rejette la requete ben elle passera jamais dans les règles de FORWARD, c'est tout.

Sinon pour IPCOP, j'ai choisis ca (un peu au pif) y'a 4 ans et ca permet de gérer firewall/router avec les niveaux de securité internet/DMZ/LAN ce qui est ce que je cherchait. Il me semble meme que dans les dernières versions ils ont ajouté un niveau de sécurité pour le WIFI avec pas mal de règle par défaut. La gestion des DNS dynamique standard ...
Je viens de jeter un oeuil rapide sur fpsense et je vois pas trop de différence enfin bon moi en tout cas IPCOP me conviens.
Back to top
View user's profile Send private message
MaKKrO
Apprentice
Apprentice


Joined: 04 Oct 2005
Posts: 265
Location: Paris - FRANCE

PostPosted: Tue Jan 23, 2007 11:49 am    Post subject: Reply with quote

Je viens de me lancer dans la QoS (3 jours deja) !
Ca a l'air de marcher a correctement... les statistiques sont coherentes selon la priorite que je donne aux IP sources !
Car je ne fais pas ca specialement sur les ports, mais sur les IP sources, donc les utilisateurs !

Selon l'IP, je veux donner une certaines bande passante, et c'est la seule chose (mais plus importante) qui ne semble pas marcher...

Je ne sais pas si quelqu'un a deja fait ca ici, mais si oui, alors je veux bien un coup de main !!!

Ma conf :
Code:


#!/bin/bash
IFACE="eth1"

# Priority marks
MARKPRIO1="1"
MARKPRIO2="2"
MARKPRIO3="3"
MARKPRIO4="4"

# Rates
UPRATE="240kbit"
PRIORATE1="140kbit"
PRIORATE2="60kbit"
PRIORATE3="30kbit"
PRIORATE4="10kbit"

# Quantum
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"

# Set queue length for IFACE
ifconfig $IFACE txqueuelen 16

# Specify queue discipline
tc qdisc add dev $IFACE root handle 1:0 htb default 104 r2q 1

# Set root class
tc class add dev $IFACE parent 1:0 classid 1:1 htb rate $UPRATE burst $BURST1 cburst $CBURST1
# Specify sub classes
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 $UPRATE quantum $QUANTUM4 burst $BURST4 cburst $CBURST4 prio 3

# Filter packets
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

# Add queuing disciplines
tc qdisc add dev $IFACE parent 1:101 sfq perturb 10 quantum $QUANTUM1
tc qdisc add dev $IFACE parent 1:102 sfq perturb 10 quantum $QUANTUM2
tc qdisc add dev $IFACE parent 1:103 sfq perturb 10 quantum $QUANTUM3
tc qdisc add dev $IFACE parent 1:104 sfq perturb 8 quantum $QUANTUM4


IPtables :

Code:

#!/bin/bash
WAN=eth1

MARKPRIO1="1"
MARKPRIO2="2"
MARKPRIO3="3"
MARKPRIO4="4"

iptables -t mangle -F
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

iptables -t mangle -A PREROUTING -s 192.168.3.2 -j MARK --set-mark ${MARKPRIO4}
iptables -t mangle -A PREROUTING -s 192.168.3.2 -j RETURN

iptables -t mangle -A PREROUTING -s 192.168.3.4 -j MARK --set-mark ${MARKPRIO1}
iptables -t mangle -A PREROUTING -s 192.168.3.4 -j RETURN

iptables -t mangle -A OUTPUT -d 192.168.3.2 -j MARK --set-mark ${MARKPRIO4}
iptables -t mangle -A OUTPUT -d 192.168.3.2 -j RETURN

iptables -t mangle -A OUTPUT -d 192.168.3.4 -j MARK --set-mark ${MARKPRIO1}
iptables -t mangle -A OUTPUT -d 192.168.3.4 -j RETURN


Je suis en train de tester avec un seul poste client pour l'instant.
Quand je change son IP, il change de classe et je vois les stats qui semblent tout a fait correctes.
Je peux les checker avec
Code:
tc -s class show dev eth1

Mais ca devrait limiter sa vitesse de download, or elle ne change pas !

J'ai suivi ce Wiki, http://gentoo-wiki.com/HOWTO_Packet_Shaping, mais il ne parle pas de vitesse de download.

Si quelqu'un peut me filer un coup de main....
_________________
Loisirs = Gentoo / Taff = Gentoo / Pourtant Taff != Loisirs
Back to top
View user's profile Send private message
MaKKrO
Apprentice
Apprentice


Joined: 04 Oct 2005
Posts: 265
Location: Paris - FRANCE

PostPosted: Tue Jan 23, 2007 2:37 pm    Post subject: Reply with quote

Bon et bien en fait ca marche !!! meme si le debit souhaiter n'est pas vraiment le bon...
Le truc qu'il faut savoir c'est que quand les classes sont definies, il faut specifier quel est la vitesse maximun.

Code:


UPRATE="240"
PRIORATE1="140"
PRIORATE2="60"
PRIORATE3="30"
PRIORATE4="10"
........
MAX1=$(($PRIORATE1+(($PRIORATE1*20)/100)))'kbit'
MAX2=$(($PRIORATE2+(($PRIORATE2*20)/100)))'kbit'
MAX3=$(($PRIORATE3+(($PRIORATE3*20)/100)))'kbit'
MAX4=$(($PRIORATE4+(($PRIORATE4*20)/100)))'kbit'
......

#Set root class
tc class replace dev $IFACE parent 1:0 classid 1:1 htb rate $UPRATE burst $BURST1 cburst $CBURST1
# Specify sub classes
tc class replace dev $IFACE parent 1:1 classid 1:101 htb rate $PRIORATE1'kbit' ceil $MAX1 quantum $QUANTUM1 burst $BURST1 cburst $CBURST1 prio 0
tc class replace dev $IFACE parent 1:1 classid 1:102 htb rate $PRIORATE2'kbit' ceil $MAX2 quantum $QUANTUM2 burst $BURST2 cburst $CBURST2 prio 1
tc class replace dev $IFACE parent 1:1 classid 1:103 htb rate $PRIORATE3'kbit' ceil $MAX3 quantum $QUANTUM3 burst $BURST3 cburst $CBURST3 prio 2
tc class replace dev $IFACE parent 1:1 classid 1:104 htb rate $PRIORATE4'kbit' ceil $MAX4 quantum $QUANTUM4 burst $BURST4 cburst $CBURST4 prio 3




Genre la, sa vitesse maximal, si la bande passante n'est pas utiliser est de $PRIORATEx + 20%
Je ne sais pas trop si ca servira a quelqu'un, mais ca marche vraiment bien !

PS : juste un petit truc... si je limite a 10Kbit, la vitesse de download est de 40ko/s, et c'est proportionnel (20kbit=80ko/s)
_________________
Loisirs = Gentoo / Taff = Gentoo / Pourtant Taff != Loisirs
Back to top
View user's profile Send private message
El_Goretto
Moderator
Moderator


Joined: 29 May 2004
Posts: 3110
Location: Paris

PostPosted: Tue Jan 23, 2007 5:11 pm    Post subject: Reply with quote

Questions pour MaKKrO:
1- Es-tu sûr de vouloir limiter la vitesse de download? Normalement, c'est pour gérer le traffic sortant qu'on s'en sert.
2- Pourquoi gérer un traffic maximum (ceil) variable par file? Ca n'a pas d'intérêt lorsque la ligne n'est pas saturée, et quand c'est le cas, HTB s'en sort très bien en associant des ratios suivant le débit garanti (rate) configuré. Cf les docs parlant de HTB.
_________________
-FreeNAS: µ-serv Gen8 G1610T, 16Go ECC & µ-serv N40L, 8Go ECC
-FreeBSD 11/Vimage/Jails: DS61, i3 2100T, 16Go
-Réseau: ERL-3 + ESL-24 + GS108Tv2
-NAS: RN312
Back to top
View user's profile Send private message
MaKKrO
Apprentice
Apprentice


Joined: 04 Oct 2005
Posts: 265
Location: Paris - FRANCE

PostPosted: Wed Jan 24, 2007 8:35 am    Post subject: Reply with quote

Je comprend que cela paraisse un peu bizarre...
Il faut savoir sur quoi tourne cette QoS !
C'est un serveur qui authentifie les utilisateurs, et selon leur categorie, (selon le type de service acheter) leur fournis une vitesse de download specifique.
Donc meme si la bande passante n'est pas entierement prise, l'utilisateur dois avoir toujours la meme vitesse.
_________________
Loisirs = Gentoo / Taff = Gentoo / Pourtant Taff != Loisirs
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum