[firewall4] On utilise la hiérarchie des classes POO pour classer les bon couple (mac,ip) dans les sets
This commit is contained in:
parent
703bf964a9
commit
6b0f322716
1 changed files with 54 additions and 27 deletions
|
@ -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':[''] })
|
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
|
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):
|
def __init__(self):
|
||||||
super(self.__class__, self).__init__()
|
super(self.__class__, self).__init__()
|
||||||
|
@ -500,23 +532,6 @@ class firewall_komaz(firewall_base):
|
||||||
self.add(table, chain, '-j %s' % self.connexion_appartement(table))
|
self.add(table, chain, '-j %s' % self.connexion_appartement(table))
|
||||||
return
|
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):
|
def test_mac_ip(self, table=None, fill_ipset=False, apply=False):
|
||||||
chain = super(self.__class__, self).test_mac_ip()
|
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 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 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)
|
self.add(table, chain, '-p tcp -s %s --dport 53 -j DNAT --to 10.51.0.10' % net)
|
||||||
|
print OK
|
||||||
|
|
||||||
if apply:
|
if apply:
|
||||||
self.apply(table, chain)
|
self.apply(table, chain)
|
||||||
return chain
|
return chain
|
||||||
|
|
||||||
if __name__ == '__main__' :
|
|
||||||
firewall = {
|
#: Associe à un ``hostname`` la classe du pare-feu correspondant
|
||||||
|
firewall = {
|
||||||
'komaz' : firewall_komaz,
|
'komaz' : firewall_komaz,
|
||||||
'zamok' : firewall_zamok,
|
'zamok' : firewall_zamok,
|
||||||
'routeur' : firewall_routeur,
|
'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__' :
|
||||||
|
|
||||||
|
fw = firewall()
|
||||||
|
|
||||||
# Chaînes pouvant être recontruites
|
# Chaînes pouvant être recontruites
|
||||||
if hostname in firewall.keys():
|
|
||||||
fw = firewall[hostname]()
|
|
||||||
else:
|
|
||||||
fw = firewall_base()
|
|
||||||
chaines = fw.reloadable.keys()
|
chaines = fw.reloadable.keys()
|
||||||
|
|
||||||
def __usage(txt=None) :
|
def __usage(txt=None) :
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue