diff options
| -rw-r--r-- | modules/foundation/vpn.nix | 3 | ||||
| -rw-r--r-- | modules/tunnel/ingress.nix | 9 |
2 files changed, 10 insertions, 2 deletions
diff --git a/modules/foundation/vpn.nix b/modules/foundation/vpn.nix index 1a7524d..f4a5d21 100644 --- a/modules/foundation/vpn.nix +++ b/modules/foundation/vpn.nix @@ -83,6 +83,9 @@ in type filter hook forward priority 0; policy accept; iifname "${interface}" oifname "${cfg.externalInterface}" accept iifname "${cfg.externalInterface}" oifname "${interface}" ct state established,related accept + + # drop vpn-sourced traffic headed anywhere but external + iifname "${interface}" drop } ''; }; diff --git a/modules/tunnel/ingress.nix b/modules/tunnel/ingress.nix index a62e931..f1b7991 100644 --- a/modules/tunnel/ingress.nix +++ b/modules/tunnel/ingress.nix @@ -122,12 +122,17 @@ in family = "inet"; content = '' chain forward { - type filter hook forward priority 0; policy drop; + # default accept so forwarding unrelated to the tunnel passes + type filter hook forward priority 0; policy accept; - tcp flags syn tcp option maxseg size set rt mtu + iifname { "${ingressInterfaces}" } tcp flags syn tcp option maxseg size set rt mtu iifname { "${ingressInterfaces}" } oifname "${egressName}" accept iifname "${egressName}" oifname { "${ingressInterfaces}" } accept + + # drop route packets that weren't accepted, pass everything else + iifname { "${ingressInterfaces}", "${egressName}" } drop + oifname { "${ingressInterfaces}", "${egressName}" } drop } ''; }; |
