Encore.
darcs-hash:20060617095413-68412-06cae856eaf4d13a3c37d50ccddf0dcb620f2cc0.gz
This commit is contained in:
parent
d25251392f
commit
5c103abe57
1 changed files with 34 additions and 25 deletions
|
@ -505,26 +505,32 @@ class firewall_komaz(firewall_crans) :
|
||||||
iptables("-t mangle -A PREROUTING -m mark --mark %s -j ACCEPT" %
|
iptables("-t mangle -A PREROUTING -m mark --mark %s -j ACCEPT" %
|
||||||
conf_fw.mark['proxy'])
|
conf_fw.mark['proxy'])
|
||||||
|
|
||||||
|
# Parametres pour iptables/tc
|
||||||
|
mark = conf_fw.mark['bittorrent']
|
||||||
|
debit_adh = p2p.debit_adh
|
||||||
|
debit_max = p2p.debit_max
|
||||||
|
eth_ext = self.eth_ext
|
||||||
|
eth_int = self.eth_int
|
||||||
|
|
||||||
# On ne va pas plus loin si il ne s'agit pas de bittorrent
|
# On ne va pas plus loin si il ne s'agit pas de bittorrent
|
||||||
iptables("-t mangle -A POSTROUTING -m mark ! --mark %s -j ACCEPT" %
|
iptables("-t mangle -A POSTROUTING -m mark ! --mark %s -j ACCEPT" % mark)
|
||||||
conf_fw.mark['bittorrent'])
|
|
||||||
|
|
||||||
# On marque les paquets bittorrent uniquement
|
# On marque les paquets bittorrent uniquement
|
||||||
iptables("-t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark")
|
iptables("-t mangle -A PREROUTING -p tcp -j CONNMARK --restore-mark")
|
||||||
iptables("-t mangle -A PREROUTING -p tcp -m mark ! --mark 0x0 -j ACCEPT")
|
iptables("-t mangle -A PREROUTING -p tcp -m mark ! --mark 0x0 -j ACCEPT")
|
||||||
iptables("-t mangle -A PREROUTING -p tcp -m ipp2p --bit "
|
iptables("-t mangle -A PREROUTING -p tcp -m ipp2p --bit "
|
||||||
"-j MARK --set-mark %s" % conf_fw.mark['bittorrent'])
|
"-j MARK --set-mark %s" % mark)
|
||||||
iptables("-t mangle -A PREROUTING -p tcp -m mark --mark %s "
|
iptables("-t mangle -A PREROUTING -p tcp -m mark --mark %s "
|
||||||
"-j CONNMARK --save-mark" % conf_fw.mark['bittorrent'])
|
"-j CONNMARK --save-mark" % mark)
|
||||||
|
|
||||||
warn = ''
|
warn = ''
|
||||||
|
|
||||||
# Par défaut, on envoit les paquets dans la classe 9998
|
# Par défaut, on envoit les paquets dans la classe 9998
|
||||||
for net in NETs['all']:
|
for net in NETs['all']:
|
||||||
iptables("-t mangle -A POSTROUTING -o crans -d %s "
|
iptables("-t mangle -A POSTROUTING -o %(eth_int)s -d %(net)s "
|
||||||
"-j CLASSIFY --set-class 1:9998" % net)
|
"-j CLASSIFY --set-class 1:9998" % locals())
|
||||||
iptables("-t mangle -A POSTROUTING -o ens -s %s "
|
iptables("-t mangle -A POSTROUTING -o %(eth_ext)s -s %(net)s "
|
||||||
"-j CLASSIFY --set-class 1:9998" % net)
|
"-j CLASSIFY --set-class 1:9998" % locals())
|
||||||
|
|
||||||
# On crée les chaînes de sous-réseaux
|
# On crée les chaînes de sous-réseaux
|
||||||
for net in NETs['all']:
|
for net in NETs['all']:
|
||||||
|
@ -545,7 +551,7 @@ class firewall_komaz(firewall_crans) :
|
||||||
self.anim = anim('\tGénération des classes de filtrage p2p', len(adherents))
|
self.anim = anim('\tGénération des classes de filtrage p2p', len(adherents))
|
||||||
|
|
||||||
# Création des classes et qdisc
|
# Création des classes et qdisc
|
||||||
for interface in [self.eth_ext, self.eth_int]:
|
for interface in [eth_ext, eth_int]:
|
||||||
# On vide les classes et qdisc
|
# On vide les classes et qdisc
|
||||||
try:
|
try:
|
||||||
tc("qdisc del dev %s root" % interface)
|
tc("qdisc del dev %s root" % interface)
|
||||||
|
@ -553,12 +559,13 @@ class firewall_komaz(firewall_crans) :
|
||||||
warn += str(c) + '\n'
|
warn += str(c) + '\n'
|
||||||
# On construit les classes et qdisc de base
|
# On construit les classes et qdisc de base
|
||||||
# La partie principale qui définit le comportement par défaut
|
# La partie principale qui définit le comportement par défaut
|
||||||
tc("qdisc add dev %s root handle 1: htb r2q 1" % interface)
|
tc("qdisc add dev %(interface)s root handle 1: htb r2q 1" % locals())
|
||||||
tc("class add dev %s parent 1: classid 1:1 htb rate %s ceil %s" %
|
tc("class add dev %(interface)s parent 1: classid 1:1 "
|
||||||
(interface, p2p.debit_max, p2p.debit_max))
|
"htb rate %(debit_max)s ceil %(debit_max)s" % locals())
|
||||||
tc("class add dev %s parent 1:1 classid 1:9998 htb rate %s ceil %s" %
|
tc("class add dev %(interface)s parent 1:1 classid 1:9998 "
|
||||||
(interface, p2p.debit_adh, p2p.debit_adh))
|
"htb rate %(debit_adh)s ceil %(debit_adh)s" % locals())
|
||||||
tc("qdisc add dev %s parent 1:9998 handle 9999: sfq perturb 10" % interface)
|
tc("qdisc add dev %(interface)s parent 1:9998 "
|
||||||
|
"handle 9999: sfq perturb 10" % locals())
|
||||||
|
|
||||||
# On construit ensuite les classes et qdisc pour chaque adhérent
|
# On construit ensuite les classes et qdisc pour chaque adhérent
|
||||||
for adherent in adherents:
|
for adherent in adherents:
|
||||||
|
@ -568,10 +575,10 @@ class firewall_komaz(firewall_crans) :
|
||||||
# Il nous faut un n° inférieur à 9998 unique
|
# Il nous faut un n° inférieur à 9998 unique
|
||||||
qdisc_id = class_id + 5000
|
qdisc_id = class_id + 5000
|
||||||
for interface in [self.eth_ext, self.eth_int]:
|
for interface in [self.eth_ext, self.eth_int]:
|
||||||
tc("class add dev %s parent 1:1 classid 1:%d htb rate %s ceil %s" %
|
tc("class add dev %(interface)s parent 1:1 classid 1:%(class_id)d "
|
||||||
(interface, class_id, p2p.debit_adh, p2p.debit_max))
|
"htb rate %(debit_adh)s ceil %(debit_max)s" % locals())
|
||||||
tc("qdisc add dev %s parent 1:%d handle %d: sfq perturb 10" %
|
tc("qdisc add dev %(interface)s parent 1:%(class_id)d "
|
||||||
(interface, class_id, qdisc_id))
|
"handle %(qdisc_id)d: sfq perturb 10" % locals())
|
||||||
|
|
||||||
# Classification des adhérents dans leur classe respective
|
# Classification des adhérents dans leur classe respective
|
||||||
for machine in adherent.machines():
|
for machine in adherent.machines():
|
||||||
|
@ -643,16 +650,18 @@ class firewall_komaz(firewall_crans) :
|
||||||
|
|
||||||
print OK
|
print OK
|
||||||
|
|
||||||
## Traitement
|
# Parametres pour iptables/tc
|
||||||
# MAJ des règles de classification de l'IP
|
|
||||||
def procedure():
|
|
||||||
self.anim = anim('\tMise à jour des classes p2p')
|
|
||||||
warn = ''
|
|
||||||
mark = conf_fw.mark['bittorrent']
|
mark = conf_fw.mark['bittorrent']
|
||||||
debit_adh = p2p.debit_adh
|
debit_adh = p2p.debit_adh
|
||||||
debit_max = p2p.debit_max
|
debit_max = p2p.debit_max
|
||||||
eth_ext = self.eth_ext
|
eth_ext = self.eth_ext
|
||||||
eth_int = self.eth_int
|
eth_int = self.eth_int
|
||||||
|
|
||||||
|
## Traitement
|
||||||
|
# MAJ des règles de classification de l'IP
|
||||||
|
def procedure():
|
||||||
|
self.anim = anim('\tMise à jour des classes p2p')
|
||||||
|
warn = ''
|
||||||
try:
|
try:
|
||||||
for ip in ip_list:
|
for ip in ip_list:
|
||||||
recherche = db.search('ip=%s&paiement=ok' % ip)
|
recherche = db.search('ip=%s&paiement=ok' % ip)
|
||||||
|
@ -666,7 +675,7 @@ class firewall_komaz(firewall_crans) :
|
||||||
iptables_option = '-D'
|
iptables_option = '-D'
|
||||||
tc_option = 'del'
|
tc_option = 'del'
|
||||||
subnet = IpSubnet(ip, conf_fw.mask[-1])
|
subnet = IpSubnet(ip, conf_fw.mask[-1])
|
||||||
regles = iptables("-t mangle -L SUBNET-%s -n | tee `tempfile -s _firewall`date -u +%y%m%d%H%M%S`` | grep %s" % (subnet, ip)).split('\n')
|
regles = iptables("-t mangle -L SUBNET-%(subnet)s -n | tee `tempfile -s _firewall`date -u +%y%m%d%H%M%S`` | grep %(ip)s" % locals()).split('\n')
|
||||||
# On sélectionne la première qui doit contenir ce que l'on veut
|
# On sélectionne la première qui doit contenir ce que l'on veut
|
||||||
regle = regles[0].split()
|
regle = regles[0].split()
|
||||||
class_id = int(regle[7].split(':')[1])
|
class_id = int(regle[7].split(':')[1])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue