Transformations
darcs-hash:20041107170216-41617-3eaa6b023d8b6825f77378049cbf48f35e66bd39.gz
This commit is contained in:
parent
4b5d8a312d
commit
32448ee029
1 changed files with 97 additions and 46 deletions
|
@ -61,7 +61,47 @@ class ErrorNoSuchIp(ErrorIp):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class firewall:
|
class firewall:
|
||||||
|
"""
|
||||||
|
Structure du firewall :
|
||||||
|
table nat :
|
||||||
|
PREROUTING (policy par defaut : DROP)
|
||||||
|
1) passage par TEST_VIRUS
|
||||||
|
2) passage dans RESEAUX_NON_ROUTABLES_DST
|
||||||
|
3) passage est paquets venant de l'extérieur dans RESEAUX_NON_ROUTABLES_SRC
|
||||||
|
4) on laisse passer vers filter les paquets suivants :
|
||||||
|
source ou destination les serveurs de serveurs_crans
|
||||||
|
ce qui vient de l'extérieur
|
||||||
|
7) passage par TEST_MAC-IP_FLOOD
|
||||||
|
8) passage par TEST_FLOOD
|
||||||
|
|
||||||
|
TEST_VIRUS droppe les paquets contenant des virus
|
||||||
|
RESEAUX_NON_ROUTABLES_DST droppe les paquets dont la destination est non routable
|
||||||
|
RESEAUX_NON_ROUTABLES_SRC droppe les paquets dont la source est non routable
|
||||||
|
TEST_MAC-IP_FLOOD envoi les bon paquets vers CRANS_VERS_EXT
|
||||||
|
CRANS_VERS_EXT
|
||||||
|
ACCEPT pour les paquets venant des machines du crans (test port-ip)
|
||||||
|
REJECT pour le reste
|
||||||
|
TEST_FLOOD log puis drop des paquests avec bonne mac-ip (donc les floods)
|
||||||
|
|
||||||
|
table filter :
|
||||||
|
FORWARD (policy par defaut : ACCEPT)
|
||||||
|
1) passage par BLACKLIST
|
||||||
|
2) ce qui a pour source les serveurs de serveurs_crans est dirigé vers SERVEURS_VERS_EXT
|
||||||
|
3) ce qui a pour destination les serveurs de serveurs_crans est dirigé EXT_VERS_SERVEURS
|
||||||
|
4) tout ce qui vient de l'interface externe est dirigé vers EXT_VERS_CRANS
|
||||||
|
5) ce qui a pour source les serveurs de serveurs_crans est dirigé vers EXT_VERS_CRANS
|
||||||
|
|
||||||
|
BLACKLIST fitre des ip blacklistées (reject)
|
||||||
|
EXT_VERS_CRANS
|
||||||
|
ACCEPT pour les paquets vers les machines du crans (test port-ip)
|
||||||
|
REJECT pour le reste
|
||||||
|
EXT_VERS_SERVEURS et SERVEURS_VERS_EXT
|
||||||
|
ACCEPT pour bon mac-ip-port
|
||||||
|
REJECT pour le reste
|
||||||
|
"""
|
||||||
zone_serveur="138.231.136.0/28"
|
zone_serveur="138.231.136.0/28"
|
||||||
|
eth_ext = "eth2"
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.file_log=open("/var/log/fw.log","a")
|
self.file_log=open("/var/log/fw.log","a")
|
||||||
|
|
||||||
|
@ -74,6 +114,62 @@ class firewall:
|
||||||
raise IptablesError(cmd,status,output)
|
raise IptablesError(cmd,status,output)
|
||||||
self.file_log.write(time.time+": "+cmd)
|
self.file_log.write(time.time+": "+cmd)
|
||||||
|
|
||||||
|
def __base(self) :
|
||||||
|
""" Construction de PREROUTING et FORWARD"""
|
||||||
|
anim('\t Construction base firewall')
|
||||||
|
# table nat
|
||||||
|
for chaine in [ 'TEST_VIRUS' , 'EXT_VERS_SERVEURS', 'SERVEURS_VERS_EXT' , 'EXT_VERS_CRANS', 'TESTS_MAC-IP_FLOOD' , 'RESEAUX_NON_ROUTABLES_SRC', 'RESEAUX_NON_ROUTABLES_DST', 'TEST_FLOOD'] :
|
||||||
|
iptables('-t nat -N %s' % chaine)
|
||||||
|
|
||||||
|
iptables("-t nat -P PREROUTING ACCEPT")
|
||||||
|
iptables("-t nat -A PREROUTING -j TEST_VIRUS")
|
||||||
|
iptables("-t nat -A PREROUTING -j RESEAUX_NON_ROUTABLES_DST")
|
||||||
|
iptables("-t nat -A PREROUTING -i %s -j RESEAUX_NON_ROUTABLES_SRC" % self.eth_ext )
|
||||||
|
iptables("-t nat -A PREROUTING -d %s -j ACCEPT" % self.zone_serveur )
|
||||||
|
iptables("-t nat -A PREROUTING -s %s -j ACCEPT" % self.zone_serveur )
|
||||||
|
iptables("-t nat -A PREROUTING -i %s -j ACCPET" % self.eth_ext )
|
||||||
|
iptables("-t nat -A PREROUTING -j TESTS_MAC-IP_FLOOD")
|
||||||
|
|
||||||
|
# table filter
|
||||||
|
for chaine in [ 'BLACKLIST_OUTPUT', 'BLACKLIST_INPUT' ] :
|
||||||
|
iptables('-N %s' % chaine)
|
||||||
|
|
||||||
|
for reseau in config.NETs['all'] :
|
||||||
|
iptables("-A FORWARD -s %s -j BLACKLIST_DST" % reseau )
|
||||||
|
iptables("-A FORWARD -d %s -j BLACKLIST_SRC" % reseau )
|
||||||
|
iptables("-A FORWARD -d %s -j EXT_VERS_SERVEURS" % self.zone_serveur )
|
||||||
|
iptables("-A FORWARD -s %s -j SERVEURS_VERS_EXT" % self.zone_serveur )
|
||||||
|
iptables("-A FORWARD -i %s -j EXT_VERS_CRANS" % self.eth_ext )
|
||||||
|
|
||||||
|
def log_chaines(self) :
|
||||||
|
""" Construction des chaines de log (LOG_VIRUS et LOG_FLOOD) """
|
||||||
|
for filtre in [ 'VIRUS', 'FLOOD' ] :
|
||||||
|
# Vidage de la chaîne
|
||||||
|
iptables('-F LOG_%s' % filtre)
|
||||||
|
iptables('-t nat -A LOG_%s %s %s:' % (filtre, self.log_template, filtre.capitalize()) )
|
||||||
|
iptables('-t nat -A LOG_%s -j DROP' % filtre )
|
||||||
|
|
||||||
|
def reseaux_non_routables(self) :
|
||||||
|
""" Construction de RESEAUX_NON_ROUTABLES_{DST,SRC} """
|
||||||
|
self.anim = anim('\t Filtrage ip non routables',len(self.reseaux_non_routables))
|
||||||
|
for reseau in self.reseaux_non_routables :
|
||||||
|
iptables("-t nat -A RESEAUX_NON_ROUTABLES_DST -d %s -j DROP" % reseau)
|
||||||
|
iptables("-t nat -A RESEAUX_NON_ROUTABLES_SRC -s %s -j DROP" % reseau)
|
||||||
|
self.anim.cycle()
|
||||||
|
self.anim.reinit()
|
||||||
|
print OK
|
||||||
|
|
||||||
|
def test_virus(self) :
|
||||||
|
""" Construction de la chaîne TEST_VIRUS """
|
||||||
|
iptables('-t nat -F TEST_VIRUS')
|
||||||
|
self.anim = anim('\t Filtrage virus',len(self.ports_virus))
|
||||||
|
for port in self.ports_virus :
|
||||||
|
iptables('-t nat -A TEST_VIRUS -p tcp --dport %s -j LOG_VIRUS' % port)
|
||||||
|
self.anim.cycle()
|
||||||
|
self.anim.reinit()
|
||||||
|
print OK
|
||||||
|
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
"""
|
"""
|
||||||
Construit le firewall
|
Construit le firewall
|
||||||
|
@ -96,21 +192,6 @@ class firewall:
|
||||||
iptables("iptables -t nat -F")
|
iptables("iptables -t nat -F")
|
||||||
iptables("iptables -X")
|
iptables("iptables -X")
|
||||||
|
|
||||||
def create_defaults(self):
|
|
||||||
"""
|
|
||||||
Crée la chaîne par laquelle tous les adhérents passent par défault
|
|
||||||
Pas d'argument
|
|
||||||
"""
|
|
||||||
for proto in ["tcp","udp"]:
|
|
||||||
for i in range(len(config.port_default["%s_input" % proto])):
|
|
||||||
iptables("iptables -A DEFAULT_INPUT -p %s --dport "%proto+\
|
|
||||||
config.port_default["%s_input" % proto][i]+\
|
|
||||||
" -j ACCEPT")
|
|
||||||
for i in range(len(config.port_default["%s_output" % proto])):
|
|
||||||
iptables("iptables -A DEFAULT_OUTPUT -p %s --sport "%proto+\
|
|
||||||
config.port_default["%s_output" % proto][i]+\
|
|
||||||
" -j ACCEPT")
|
|
||||||
|
|
||||||
def add_machines(self,machine):
|
def add_machines(self,machine):
|
||||||
__serveurs_vers_ext__(machine)
|
__serveurs_vers_ext__(machine)
|
||||||
__ext_vers_serveurs__(machine)
|
__ext_vers_serveurs__(machine)
|
||||||
|
@ -142,6 +223,7 @@ class firewall:
|
||||||
%(ip,i))
|
%(ip,i))
|
||||||
|
|
||||||
def __crans_vers_ext__(self,machine):
|
def __crans_vers_ext__(self,machine):
|
||||||
|
ip=machine.ip()
|
||||||
|
|
||||||
def __ext_vers_crans__(self,machine):
|
def __ext_vers_crans__(self,machine):
|
||||||
|
|
||||||
|
@ -245,27 +327,6 @@ class firewall:
|
||||||
iptables("iptables -t nat -A PREROUTING -i %s -p udp"%int_crans+\
|
iptables("iptables -t nat -A PREROUTING -i %s -p udp"%int_crans+\
|
||||||
" -j DROP")
|
" -j DROP")
|
||||||
|
|
||||||
def komaz(self):
|
|
||||||
"""
|
|
||||||
Crée les règles spécifiques à la machine komaz
|
|
||||||
"""
|
|
||||||
ports=komaz_ports['portTCPin']
|
|
||||||
for i in ports.split(' '):
|
|
||||||
iptables("iptables -A INPUT -d 138.231.136.4 -p tcp --dport %s"%i+\
|
|
||||||
" -j ACCEPT")
|
|
||||||
ports=komaz_ports['portTCPout']
|
|
||||||
for i in ports.split(' '):
|
|
||||||
iptables("iptables -A OUTPUT -s 138.231.136.4 -p tcp --dport %s"%i+\
|
|
||||||
" -j ACCEPT")
|
|
||||||
ports=komaz_ports['portUDPin']
|
|
||||||
for i in ports.split(' '):
|
|
||||||
iptables("iptables -A INPUT -d 138.231.136.4 -p udp --dport %s"%i+\
|
|
||||||
" -j ACCEPT")
|
|
||||||
ports=komaz_ports['portUDPout']
|
|
||||||
for i in ports.split(' '):
|
|
||||||
iptables("iptables -A OUTPUT -s 138.231.136.4 -p udp --dport %s"%i+\
|
|
||||||
" -j ACCEPT")
|
|
||||||
|
|
||||||
|
|
||||||
def blacklist(self):
|
def blacklist(self):
|
||||||
"""
|
"""
|
||||||
|
@ -302,16 +363,6 @@ class firewall:
|
||||||
iptables("iptables -A BLACKLIST_INPUT -j DEFAULT_INPUT")
|
iptables("iptables -A BLACKLIST_INPUT -j DEFAULT_INPUT")
|
||||||
iptables("iptables -A BLACKLIST_OUTPUT -j DEFAULT_OUTPUT")
|
iptables("iptables -A BLACKLIST_OUTPUT -j DEFAULT_OUTPUT")
|
||||||
|
|
||||||
def create_forward(self):
|
|
||||||
"""
|
|
||||||
Différencie ce qui arrive et ce qui part dans la chaîne FORWARD
|
|
||||||
"""
|
|
||||||
iptables("iptables -N BLACKLIST_INPUT")
|
|
||||||
iptables("iptables -N BLACKLIST_OUTPUT")
|
|
||||||
iptables("iptables -A FORWARD -s 138.231.136.0/21 -j BLACKLIST_OUTPUT")
|
|
||||||
iptables("iptables -A FORWARD -s 138.231.136.0/22 -j BLACKLIST_OUTPUT")
|
|
||||||
iptables("iptables -A FORWARD -d 138.231.148.0/21 -j BLACKLIST_INPUT")
|
|
||||||
iptables("iptables -A FORWARD -d 138.231.148.0/22 -j BLACKLIST_INPUT")
|
|
||||||
|
|
||||||
def create_adherents(self):
|
def create_adherents(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue