On autorise les accès ("blocage" géré par DNAT)

aurore
jeltz 3 years ago committed by root
parent e77eff1c8d
commit 1b8e3c9fb2

@ -540,22 +540,45 @@ class iptables:
triggered = f"accueil_{iface}_triggered"
allowed = f"accueil_{iface}_allowed"
triggers = accueil["triggers"]
ip_redirect = accueil.get("ip_redirect", {})
self.add_mac_ipset(allowed, accueil.get("grace_period", 120))
self.add_mac_ipset(triggered, accueil.get("retry_period", 240))
self.add_accueil(iface, allowed, triggered, triggers)
self.add_accueil(iface, allowed, triggered, triggers, ip_redirect)
def add_accueil(self, iface, allowed_set, triggered_set, triggers):
def add_accueil(self, iface, allowed_set, triggered_set, triggers, ip_redirect):
subtable = f"ACCUEIL-{iface}"
self.init_mangle(subtable, decision="-")
# on laisse passer les machines qui sont temporairement
# autorisées
self.add_in_subtable("mangle", subtable, f"-m set --match-set {allowed_set} src -j RETURN")
# on interdit les machines qui ont accédé à un "trigger" récemment
# mais qui ne sont plus autorisées (règle précédente)
self.add_in_subtable("mangle", subtable, f"-m set --match-set {triggered_set} src -j DROP")
# on autorise l'accès aux "triggers" pour les machines qui n'y ont
# pas accédé récemment, et on les ajoute aux ensembles pour signaler
# l'accès récent
for iptype, proto, addr, port in triggers:
match = f"-p {proto} -d {addr} --dport {port}"
for s in (allowed_set, triggered_set):
self.add_in_subtable("mangle", subtable, f"{match} -j SET --add-set {s} src", iptype)
self.add_in_subtable("mangle", subtable, f"{match} -j RETURN", iptype)
self.add_in_subtable("mangle", subtable, "-j DROP")
# ATTENTION: on n'interdit toutes les autres connexions, car c'est géré
# via le profil de ports de re2o + par la redirection configurée
subtable_redir = f"ACCUEIL-REDIR-{iface}"
self.init_nat(subtable_redir, decision="-")
# on redirige les machines non temporairement autorisées vers les
# portails captifs
self.add_in_subtable("nat", subtable_redir, f"-m set --match-set {allowed_set} src -j RETURN")
self.ip_redirect(subtable_redir, {"0.0.0.0/0": ip_redirect})
self.jump_traficfrom("mangle", iface, "PREROUTING", subtable)
self.jump_traficfrom("nat", iface, "PREROUTING", subtable_redir)
def nat_prive_ip(self, nat_type):
"""Nat filaire en v4"""

Loading…
Cancel
Save