[config.py, firewall6.py, ipt.py] On passe la policy de FORWARD en ipv6 à accept, pour mise à jour des blacklistes, on ne réappliques que les chaines concernées. Possibilité de recharger les blacklistes en ligne de commande.
This commit is contained in:
parent
559583654b
commit
d8e716f22b
3 changed files with 59 additions and 9 deletions
|
@ -656,7 +656,7 @@ vlans = {
|
||||||
}
|
}
|
||||||
|
|
||||||
filter_policy = { 'komaz' : { 'policy_input' : 'ACCEPT',
|
filter_policy = { 'komaz' : { 'policy_input' : 'ACCEPT',
|
||||||
'policy_forward' : 'DROP',
|
'policy_forward' : 'ACCEPT',
|
||||||
'policy_output' : 'ACCEPT'
|
'policy_output' : 'ACCEPT'
|
||||||
},
|
},
|
||||||
'zamok' : { 'policy_input' : 'ACCEPT',
|
'zamok' : { 'policy_input' : 'ACCEPT',
|
||||||
|
|
|
@ -304,7 +304,7 @@ def stop():
|
||||||
# On les applique
|
# On les applique
|
||||||
apply_rules(6)
|
apply_rules(6)
|
||||||
|
|
||||||
disable_forwarding(6)
|
#disable_forwarding(6)
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
@ -318,6 +318,13 @@ def restart():
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
def blacklist_main():
|
||||||
|
fw6 = Update()
|
||||||
|
fw6.blacklist(6)
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
if len(sys.argv) != 2:
|
if len(sys.argv) != 2:
|
||||||
aide()
|
aide()
|
||||||
|
@ -325,6 +332,8 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
if sys.argv[1] in [ 'start', 'stop', 'restart' ]:
|
if sys.argv[1] in [ 'start', 'stop', 'restart' ]:
|
||||||
eval(sys.argv[1])()
|
eval(sys.argv[1])()
|
||||||
|
elif sys.argv[1] == 'blacklist':
|
||||||
|
blacklist_main()
|
||||||
else:
|
else:
|
||||||
aide()
|
aide()
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
|
|
|
@ -240,11 +240,33 @@ REJECT --reject-with icmp6-port-unreachable')
|
||||||
''' Permet de regénérer les diverses blacklistes '''
|
''' Permet de regénérer les diverses blacklistes '''
|
||||||
#TODO vérifier que la fonctionn est _vraiement_ ipv4 aware
|
#TODO vérifier que la fonctionn est _vraiement_ ipv4 aware
|
||||||
check_ip_proto(ip_proto)
|
check_ip_proto(ip_proto)
|
||||||
|
|
||||||
|
# On supprime les anciennes règles si elles existent.
|
||||||
|
try:
|
||||||
|
os.remove(output_file[ip_proto])
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# On initialise un pare-feu vide
|
||||||
|
ip6tables = Ip6tables()
|
||||||
|
blacklist(ip6tables)
|
||||||
|
|
||||||
|
# On écrit les données dans un fichier
|
||||||
|
write_rules(ip6tables)
|
||||||
|
|
||||||
|
#On vide les chaines des BLACKLIST_*
|
||||||
|
flush_chain(ip_proto, ['BLACKLIST_DST', 'BLACKLIST_SRC'])
|
||||||
|
# On les applique en concervant les chaines existantes
|
||||||
|
apply_rules(ip_proto, no_flush=True)
|
||||||
|
|
||||||
|
|
||||||
|
#### BACKWARD compatibilité
|
||||||
ipt_p = open_pickle(ip_proto)
|
ipt_p = open_pickle(ip_proto)
|
||||||
blacklist(ipt_p)
|
blacklist(ipt_p)
|
||||||
# On écrit et applique les règles
|
# On écrit et applique les règles <-- plus la peine de restorer tout, on ne traite que les chaines BLACKLIST_* ci dessus.
|
||||||
write_rules(ipt_p)
|
# On pickel toujours pour la compatibilité avec les autres fonctions de la classe Update
|
||||||
apply_rules(ip_proto)
|
#write_rules(ipt_p)
|
||||||
|
#apply_rules(ip_proto)
|
||||||
|
|
||||||
os.remove(file_pickle[ip_proto])
|
os.remove(file_pickle[ip_proto])
|
||||||
|
|
||||||
|
@ -582,7 +604,24 @@ def ip_attribut(attribute, cl, ip_proto = 4):
|
||||||
else:
|
else:
|
||||||
print "Error" + " host=%s.crans.org" % name
|
print "Error" + " host=%s.crans.org" % name
|
||||||
|
|
||||||
def apply_rules(ip_proto = 4):
|
def flush_chain(ip_proto = 4, chain_list = []):
|
||||||
|
check_ip_proto(ip_proto)
|
||||||
|
f = open(output_file[ip_proto], 'r')
|
||||||
|
if ip_proto == 4:
|
||||||
|
cmd = '/sbin/iptables'
|
||||||
|
elif ip_proto == 6:
|
||||||
|
cmd = '/sbin/ip6tables'
|
||||||
|
|
||||||
|
for chain in chain_list:
|
||||||
|
run = [cmd, '-F', chain]
|
||||||
|
try:
|
||||||
|
p1 = subprocess.Popen(run, stdin=f, stdout=subprocess.PIPE)
|
||||||
|
except OSError:
|
||||||
|
syslog.syslog(syslog.LOG_ERR,"La chaine %s n'existe pas" % chain)
|
||||||
|
print "La chaine %s n'existe pas" % chain
|
||||||
|
stdout, stderr = p1.communicate()
|
||||||
|
|
||||||
|
def apply_rules(ip_proto = 4, no_flush=False):
|
||||||
''' Applique les règles fournies dans le fichier passé en arguement '''
|
''' Applique les règles fournies dans le fichier passé en arguement '''
|
||||||
check_ip_proto(ip_proto)
|
check_ip_proto(ip_proto)
|
||||||
f = open(output_file[ip_proto], 'r')
|
f = open(output_file[ip_proto], 'r')
|
||||||
|
@ -590,6 +629,8 @@ def apply_rules(ip_proto = 4):
|
||||||
cmd = '/sbin/iptables-restore'
|
cmd = '/sbin/iptables-restore'
|
||||||
elif ip_proto == 6:
|
elif ip_proto == 6:
|
||||||
cmd = '/sbin/ip6tables-restore'
|
cmd = '/sbin/ip6tables-restore'
|
||||||
|
if no_flush:
|
||||||
|
cmd = [cmd, '--noflush']
|
||||||
try:
|
try:
|
||||||
p1 = subprocess.Popen(cmd, stdin=f, stdout=subprocess.PIPE)
|
p1 = subprocess.Popen(cmd, stdin=f, stdout=subprocess.PIPE)
|
||||||
except OSError:
|
except OSError:
|
||||||
|
@ -668,7 +709,7 @@ def write_rules(ipt):
|
||||||
for ichain in filter(not_private,
|
for ichain in filter(not_private,
|
||||||
dir(ipt.__getattribute__(itables))):
|
dir(ipt.__getattribute__(itables))):
|
||||||
if ichain.upper() not in default_chains:
|
if ichain.upper() not in default_chains:
|
||||||
if hasattr(ipt.__getattribute__(itables).__getattribute__(ichain),'items'):
|
if hasattr(ipt.__getattribute__(itables).__getattribute__(ichain),'items') and ipt.__getattribute__(itables).__getattribute__(ichain).items:
|
||||||
output[itables] += ":%s - [0:0]\n" % ichain.upper()
|
output[itables] += ":%s - [0:0]\n" % ichain.upper()
|
||||||
|
|
||||||
# On ajoute maintenant les règles
|
# On ajoute maintenant les règles
|
||||||
|
@ -746,10 +787,10 @@ def mac_ip(ipt, machines, types_machines):
|
||||||
'''Réalise une correspondance MAC-IP pour un réseau considéré
|
'''Réalise une correspondance MAC-IP pour un réseau considéré
|
||||||
On vérifie d'abord que la MAC est connue et ensuite on n'accepte que les
|
On vérifie d'abord que la MAC est connue et ensuite on n'accepte que les
|
||||||
adresses en eui64'''
|
adresses en eui64'''
|
||||||
|
tab = {'serveurs' : 'fil' }
|
||||||
macips(ipt, machines, types_machines)
|
macips(ipt, machines, types_machines)
|
||||||
for type_m in types_machines:
|
for type_m in types_machines:
|
||||||
if not '-v6' in type_m:
|
if not '-v6' in type_m and not type_m in tab.keys():
|
||||||
dev = iface6(type_m)
|
dev = iface6(type_m)
|
||||||
ipt.filter.input('-i %s -s %s -j %s' % (dev, prefix[type_m][0],
|
ipt.filter.input('-i %s -s %s -j %s' % (dev, prefix[type_m][0],
|
||||||
'MAC' + type_m.upper()))
|
'MAC' + type_m.upper()))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue