diff --git a/gestion/gen_confs/firewall4.py b/gestion/gen_confs/firewall4.py index ecf4a725..bde7c519 100755 --- a/gestion/gen_confs/firewall4.py +++ b/gestion/gen_confs/firewall4.py @@ -412,8 +412,40 @@ class firewall_base(object) : try: self.test_mac_ip_dispatch(lambda set, data: self.ipset['mac_ip'][set].delete(data.split(',',1)[0]), {'ipHostNumber' : [ip], 'macAddress':[''] }) except IpsetError: pass +class firewall_base_routeur(firewall_base): + """Associe mac-ip pour les machines voyant plusieurs réseaux (wifi, filaire, personnel, ...)""" + def test_mac_ip_dispatch(self, func, machine): + """Détermine à quel set de mac-ip appliquer la fonction func (add, delete, append, ...)""" + ips = machine['ipHostNumber'] + for ip in ips: + # Si la machines est sur le réseau des adhérents + if AddrInNet(str(ip), NETs['wifi']): + func('adh', "%s,%s" % (ip, machine['macAddress'][0])) + elif AddrInNet(str(ip), NETs['fil']): + func('adh', "%s,%s" % (ip, machine['macAddress'][0])) + # Si la machine est sur le réseau admin + elif AddrInNet(str(ip), NETs['adm']): + func('adm', "%s,%s" % (ip, machine['macAddress'][0])) + # Si la machine est sur le réseaux des appartements de l'ENS + elif AddrInNet(str(ip), NETs['personnel-ens']): + func('app', "%s,%s" % (ip, machine['macAddress'][0])) -class firewall_komaz(firewall_base): +class firewall_base_wifionly(firewall_base): + """Associe mac-ip pour les machines wifi only : les machines filaires sont vues avec la mac de komaz""" + def test_mac_ip_dispatch(self, func, machine): + """Détermine à quel set de mac-ip appliquer la fonction func (add, delete, append, ...)""" + ips = machine['ipHostNumber'] + for ip in ips: + # Si la machines est sur le réseau des adhérents + if AddrInNet(str(ip), NETs['wifi']): + func('adh', "%s,%s" % (ip, machine['macAddress'][0])) + elif AddrInNet(str(ip), NETs['fil']): + func('adh', "%s,%s" % (ip, mac_komaz)) + # Si la machine est sur le réseau admin + elif AddrInNet(str(ip), NETs['adm']): + func('adm', "%s,%s" % (ip, machine['macAddress'][0])) + +class firewall_komaz(firewall_base_routeur): def __init__(self): super(self.__class__, self).__init__() @@ -500,23 +532,6 @@ class firewall_komaz(firewall_base): self.add(table, chain, '-j %s' % self.connexion_appartement(table)) return - - def test_mac_ip_dispatch(self, func, machine): - """Détermine à quel set de mac-ip appliquer la fonction func (add, delete, append, ...)""" - ips = machine['ipHostNumber'] - for ip in ips: - # Si la machines est sur le réseau des adhérents - if AddrInNet(str(ip), NETs['wifi']): - func('adh', "%s,%s" % (ip, machine['macAddress'][0])) - elif AddrInNet(str(ip), NETs['fil']): - func('adh', "%s,%s" % (ip, machine['macAddress'][0])) - # Si la machine est sur le réseau admin - elif AddrInNet(str(ip), NETs['adm']): - func('adm', "%s,%s" % (ip, machine['macAddress'][0])) - # Si la machine est sur le réseaux des appartements de l'ENS - elif AddrInNet(str(ip), NETs['personnel-ens']): - func('app', "%s,%s" % (ip, machine['macAddress'][0])) - def test_mac_ip(self, table=None, fill_ipset=False, apply=False): chain = super(self.__class__, self).test_mac_ip() @@ -1037,22 +1052,34 @@ class firewall_routeur(firewall_base): self.add(table, chain, '-p tcp -s %s --destination-port 80 -j DNAT --to-destination 10.51.0.10' % net) self.add(table, chain, '-p udp -s %s --dport 53 -j DNAT --to 10.51.0.10' % net) self.add(table, chain, '-p tcp -s %s --dport 53 -j DNAT --to 10.51.0.10' % net) + print OK if apply: self.apply(table, chain) return chain + +#: Associe à un ``hostname`` la classe du pare-feu correspondant +firewall = { + 'komaz' : firewall_komaz, + 'zamok' : firewall_zamok, + 'routeur' : firewall_routeur, + 'gordon' : firewall_base_routeur, + 'eap' : firewall_base_wifionly, +} + +if hostname in firewall.keys(): + #: Classe du pare-feu pour la machine ``hostname`` ou :py:class:`firewall_base` si non trouvé + firewall = firewall[hostname] +else: + #: Classe du pare-feu pour la machine ``hostname`` ou :py:class:`firewall_base` si non trouvé + firewall = firewall_base + if __name__ == '__main__' : - firewall = { - 'komaz' : firewall_komaz, - 'zamok' : firewall_zamok, - 'routeur' : firewall_routeur, - } + + fw = firewall() + # Chaînes pouvant être recontruites - if hostname in firewall.keys(): - fw = firewall[hostname]() - else: - fw = firewall_base() chaines = fw.reloadable.keys() def __usage(txt=None) :