73 lines
1.9 KiB
Text
73 lines
1.9 KiB
Text
#!/usr/sbin/nft -f
|
|
|
|
## Variables
|
|
|
|
# Interfaces
|
|
define if_net1_v4_wan = "net1"
|
|
define if_net2_v6_wan = "net2"
|
|
define if_net0_2_v4_nat = "net0.2"
|
|
define if_net0_3_ci_runner = "net0.3"
|
|
|
|
# Interface Groups
|
|
define wan_ifs = { $if_net1_v4_wan,
|
|
$if_net2_v6_wan }
|
|
define lan_ifs = { $if_net0_2_v4_nat,
|
|
$if_net0_3_ci_runner }
|
|
|
|
|
|
## Rules
|
|
|
|
table inet reverse-path-forwarding {
|
|
chain rpf-filter {
|
|
type filter hook prerouting priority mangle + 10; policy drop;
|
|
|
|
# Only allow packets if their source address is routed via their incoming interface.
|
|
# https://github.com/NixOS/nixpkgs/blob/d9d87c51960050e89c79e4025082ed965e770d68/nixos/modules/services/networking/firewall-nftables.nix#L100
|
|
fib saddr . mark . iif oif exists accept
|
|
}
|
|
}
|
|
|
|
table inet host {
|
|
chain input {
|
|
type filter hook input priority filter; policy drop;
|
|
|
|
iifname "lo" accept comment "allow loopback"
|
|
|
|
ct state invalid drop
|
|
ct state established,related accept
|
|
|
|
ip protocol icmp accept
|
|
ip6 nexthdr icmpv6 accept
|
|
|
|
# Allow SSH access.
|
|
tcp dport 22 accept comment "allow ssh access"
|
|
|
|
# Allow DHCP server access.
|
|
iifname $if_net0_3_ci_runner udp dport 67 accept comment "allow dhcp server access"
|
|
}
|
|
}
|
|
|
|
table ip v4nat {
|
|
chain prerouting {
|
|
type nat hook prerouting priority dstnat; policy accept;
|
|
}
|
|
|
|
chain postrouting {
|
|
type nat hook postrouting priority srcnat; policy accept;
|
|
|
|
oifname $if_net1_v4_wan masquerade
|
|
}
|
|
}
|
|
|
|
table inet forward {
|
|
chain forward {
|
|
type filter hook forward priority filter; policy drop;
|
|
|
|
ct state invalid drop
|
|
ct state established,related accept
|
|
|
|
# Allow internet access.
|
|
meta nfproto ipv6 iifname $lan_ifs oifname $if_net2_v6_wan accept comment "allow v6 internet access"
|
|
meta nfproto ipv4 iifname $lan_ifs oifname $if_net1_v4_wan accept comment "allow v4 internet access"
|
|
}
|
|
}
|