From 7a6a840c0f4264b63db5c13068e2d3cb314605e6 Mon Sep 17 00:00:00 2001 From: Olivier Huber Date: Tue, 8 Mar 2011 21:38:46 +0100 Subject: [PATCH] [firewall6] on rajoute l'ingress filtering Ignore-this: 70bb869f58f85e481e7a8329fcf80e06 darcs-hash:20110308203846-8fbb1-a2688cf00d420dc48de79c6cb5e22415d43e17f1.gz --- gestion/gen_confs/firewall6.py | 6 ++++++ gestion/ipt.py | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/gestion/gen_confs/firewall6.py b/gestion/gen_confs/firewall6.py index a26ea7c7..3f684f69 100755 --- a/gestion/gen_confs/firewall6.py +++ b/gestion/gen_confs/firewall6.py @@ -135,6 +135,12 @@ def main_router(): ip6tables.filter.forward('-m conntrack --ctstate RELATED,ESTABLISHED -j \ ACCEPT') + + # On filtre les réseaux non routable et aussi on accepte en entrée + # que les paquets dont la source n'est pas notre plage, pour éviter + # http://travaux.ovh.net/?do=details&id=5183 + ingress_filtering(ip6tables) + ip6tables.filter.forward('-j INGRESS_FILTERING') # Pour les autres connections for type_m in [i for i in ['fil', 'fil-v6'] if not 'v6' in i]: diff --git a/gestion/ipt.py b/gestion/ipt.py index 879429d7..e3a57472 100755 --- a/gestion/ipt.py +++ b/gestion/ipt.py @@ -103,6 +103,7 @@ class Table(object): self.blacklist_src = Chain() self.blacklist_dst = Chain() self.srv_out_adm = Chain() + self.ingress_filtering = Chain() class Ip6tables(object): ''' Classe pour ''' @@ -727,3 +728,23 @@ def macips(ipt, machines, types_machines): type_mm = re.sub('-', '', type_m) eval('ipt.filter.mac' + type_mm)('-j DROP') return 0 + +def ingress_filtering(ipt): + ''' Réalise un filtre sur les plages d'IP susceptibles d'être routées ''' + ip_proto = ipt.version() + if ip_proto == 6: + dev_ext = iface6('sixxs2') + # d'abord sur l'interface sur le réseau Cr@ns, on ne route que les + # paquet dans le bon subnet. + ipt.filter.ingress_filtering('-o %s -s %s -j RETURN' % (dev_ext, + prefix['subnet'][0])) + ipt.filter.ingress_filtering('-o %s -j LOG --log-prefix "BAD ROUTE "' % + dev_ext) + ipt.filter.ingress_filtering('-o %s -j DROP' % dev_ext) + # de l'extérieur, on ne veut que des paquet ne provenant pas de notre + # réseau à destination de notre réseau + ipt.filter.ingress_filtering('-i %s ! -s %s -d %s -j RETURN' % + (dev_ext, prefix['subnet'][0], prefix['subnet'][0])) + ipt.filter.ingress_filtering('-i %s -j LOG --log-prefix "BAD SRC "' % + dev_ext) + ipt.filter.ingress_filtering('-i %s -j DROP' % dev_ext)