Transformations

darcs-hash:20041107170216-41617-3eaa6b023d8b6825f77378049cbf48f35e66bd39.gz
This commit is contained in:
pauget 2004-11-07 18:02:16 +01:00
parent 4b5d8a312d
commit 32448ee029

View file

@ -61,7 +61,47 @@ class ErrorNoSuchIp(ErrorIp):
pass
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"
eth_ext = "eth2"
def __init__(self):
self.file_log=open("/var/log/fw.log","a")
@ -74,6 +114,62 @@ class firewall:
raise IptablesError(cmd,status,output)
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):
"""
Construit le firewall
@ -96,21 +192,6 @@ class firewall:
iptables("iptables -t nat -F")
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):
__serveurs_vers_ext__(machine)
__ext_vers_serveurs__(machine)
@ -142,6 +223,7 @@ class firewall:
%(ip,i))
def __crans_vers_ext__(self,machine):
ip=machine.ip()
def __ext_vers_crans__(self,machine):
@ -245,27 +327,6 @@ class firewall:
iptables("iptables -t nat -A PREROUTING -i %s -p udp"%int_crans+\
" -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):
"""
@ -302,16 +363,6 @@ class firewall:
iptables("iptables -A BLACKLIST_INPUT -j DEFAULT_INPUT")
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):
"""