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
|
||||
|
||||
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):
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue