On modularise davantage l'arbre des filtres

darcs-hash:20060425123833-72cb0-30279ef26027dd2053885fa5758c76eaca751ab3.gz
This commit is contained in:
salles 2006-04-25 14:38:33 +02:00
parent 53380bb1d5
commit 1134e3485d

View file

@ -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'