From 1134e3485d035991ff77f3fcf844cc11542d9aa0 Mon Sep 17 00:00:00 2001 From: salles Date: Tue, 25 Apr 2006 14:38:33 +0200 Subject: [PATCH] On modularise davantage l'arbre des filtres darcs-hash:20060425123833-72cb0-30279ef26027dd2053885fa5758c76eaca751ab3.gz --- gestion/gen_confs/firewall.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/gestion/gen_confs/firewall.py b/gestion/gen_confs/firewall.py index 66bccec8..d589b413 100755 --- a/gestion/gen_confs/firewall.py +++ b/gestion/gen_confs/firewall.py @@ -32,7 +32,7 @@ from ldap_crans import crans_ldap, ann_scol, hostname from ldap_crans import AssociationCrans, Machine, MachineWifi from affich_tools import * from commands import getstatusoutput -from iptools import AddrInNet +from iptools import AddrInNet, subnets, IpSubnet from config import mac_komaz, mac_wifi, conf_fw, p2p syslog.openlog('firewall') @@ -404,7 +404,7 @@ class firewall_komaz(firewall_crans) : 2) marquage des paquets bittorrent POSTROUTING (policy par défaut : ACCEPT) - 1) passage dans le sous-réseau 24 de l'ip crans : SUBNET + 1) passage dans un sous-réseau de l'ip crans : SUBNET SUBNET classe pour chaque ip de son réseau dans la classe htb correspondante table nat : @@ -492,15 +492,14 @@ class firewall_komaz(firewall_crans) : iptables("-t mangle -A PREROUTING -m mark --mark %s -j ACCEPT" % conf_fw.mark['proxy']) # On crée les chaines de sous-réseaux - #TODO : utiliser une variable de config pour la liste des /24 - for subnet in range(136,145)+range(148,152) : + for subnet in subnets('138.231.136.0/21', conf_fw.mask) + subnets('138.231.148.0/22', conf_fw.mask) : try : - iptables("-t mangle -N SUBNET-%s_24" % subnet) + iptables("-t mangle -N SUBNET-%s" % subnet) except IptablesError : - iptables("-t mangle -F SUBNET-%s_24" % subnet) + iptables("-t mangle -F SUBNET-%s" % subnet) # On redirige les paquets dans la chaine appropriée - iptables("-t mangle -A POSTROUTING -o ens -s 138.231.%s.0/24 -j SUBNET-%s_24" % (subnet, subnet)) - iptables("-t mangle -A POSTROUTING -o crans -d 138.231.%s.0/24 -j SUBNET-%s_24" % (subnet, subnet)) + iptables("-t mangle -A POSTROUTING -o ens -s %s -j SUBNET-%s" % (subnet, subnet)) + iptables("-t mangle -A POSTROUTING -o crans -d %s -j SUBNET-%s" % (subnet, subnet)) print OK # On marque les paquets bittorrent uniquement @@ -543,10 +542,10 @@ class firewall_komaz(firewall_crans) : # Classification des adhérents dans leur classe respective for machine in adherent.machines() : ip = machine.ip() - subnet = machine.ip().split('.')[2] - iptables("-t mangle -A SUBNET-%s_24 -o crans -d %s -m mark " % (subnet, ip) + + subnet = IpSubnet(machine.ip(), conf_fw.mask) + iptables("-t mangle -A SUBNET-%s -o crans -d %s -m mark " % (subnet, ip) + "--mark %s -j CLASSIFY --set-class 1:%s" % (conf_fw.mark['bittorrent'], class_id)) - iptables("-t mangle -A SUBNET-%s_24 -o ens -s %s -m mark " % (subnet, ip) + + iptables("-t mangle -A SUBNET-%s -o ens -s %s -m mark " % (subnet, ip) + "--mark %s -j CLASSIFY --set-class 1:%s" % (conf_fw.mark['bittorrent'], class_id)) # Par défaut on envoit les paquets dans la classe 9998 iptables("-t mangle -A POSTROUTING -o crans -m mark " + @@ -626,8 +625,8 @@ class firewall_komaz(firewall_crans) : if not recherche : # Il faut supprimer cette entrée option = '-D' - subnet = ip.split('.')[2] - regles = iptables("-t mangle -L SUBNET-%s_24 -n | grep %s" % (subnet, ip)).split('\n') + subnet = IpSubnet(ip.split, conf_fw.mask) + regles = iptables("-t mangle -L SUBNET-%s -n | grep %s" % (subnet, ip)).split('\n') # On sélectionne la première qui doit contenir ce que l'on veut regle = regles[0].split() mark = regle[7] @@ -638,13 +637,13 @@ class firewall_komaz(firewall_crans) : machine = recherche[0] adherent = machine.proprietaire() ip = machine.ip() - subnet = ip.split('.')[2] + subnet = IpSubnet(ip, conf_fw.mask) class_id = int(adherent.id())+1 # On ne peut pas reprendre le numéro 1 else : warn += "Plusieurs machines avec l'IP %s\n" % ip - iptables("-t mangle %s SUBNET-%s_24 -o ens -s %s -m mark " % (option, subnet, ip) + + iptables("-t mangle %s SUBNET-%s -o ens -s %s -m mark " % (option, subnet, ip) + "--mark %s -j CLASSIFY --set-class 1:%s" % (conf_fw.mark['bittorrent'], class_id)) - iptables("-t mangle %s SUBNET-%s_24 -o crans -d %s -m mark " % (option, subnet, ip) + + iptables("-t mangle %s SUBNET-%s -o crans -d %s -m mark " % (option, subnet, ip) + "--mark %s -j CLASSIFY --set-class 1:%s" % (conf_fw.mark['bittorrent'], class_id)) except IptablesError, c: warn += str(c) + '\n'