router: refactor firewall nftables config
This commit is contained in:
parent
8f7e00f27a
commit
05d558e836
@ -4,13 +4,7 @@ let
|
|||||||
links = vars.links;
|
links = vars.links;
|
||||||
ifs = vars.ifs;
|
ifs = vars.ifs;
|
||||||
pdFromWan = vars.pdFromWan;
|
pdFromWan = vars.pdFromWan;
|
||||||
in
|
nftIdentifiers = ''
|
||||||
{
|
|
||||||
networking.firewall.enable = false;
|
|
||||||
networking.nftables.enable = true;
|
|
||||||
networking.nftables.tables.firewall = {
|
|
||||||
family = "inet";
|
|
||||||
content = ''
|
|
||||||
define ZONE_WAN_IFS = { ${ifs.wan.name} }
|
define ZONE_WAN_IFS = { ${ifs.wan.name} }
|
||||||
define ZONE_LAN_IFS = {
|
define ZONE_LAN_IFS = {
|
||||||
${ifs.lan.name},
|
${ifs.lan.name},
|
||||||
@ -39,19 +33,67 @@ in
|
|||||||
2a06:98c0::/29,
|
2a06:98c0::/29,
|
||||||
2c0f:f248::/32,
|
2c0f:f248::/32,
|
||||||
}
|
}
|
||||||
|
'';
|
||||||
define ALLOWED_TCP_PORTS = { ssh, https }
|
in
|
||||||
define ALLOWED_UDP_PORTS = { bootps, dhcpv6-server, domain }
|
{
|
||||||
|
networking.firewall.enable = false;
|
||||||
map port_forward_v4 {
|
networking.nftables.enable = true;
|
||||||
|
# networking.nftables.ruleset = nftIdentifiers; #doesn't work because it's appended to the end
|
||||||
|
networking.nftables.tables.nat4 = {
|
||||||
|
family = "ip";
|
||||||
|
content = ''
|
||||||
|
${nftIdentifiers}
|
||||||
|
map port_forward {
|
||||||
type inet_proto . inet_service : ipv4_addr . inet_service
|
type inet_proto . inet_service : ipv4_addr . inet_service
|
||||||
elements = {
|
elements = {
|
||||||
tcp . 8006 : ${ifs.lan50.p4}.10 . 8006
|
tcp . 8006 : ${ifs.lan50.p4}.10 . 8006
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
chain prerouting {
|
||||||
|
# Initial step, accept by default
|
||||||
|
type nat hook prerouting priority dstnat; policy accept;
|
||||||
|
|
||||||
|
# Port forwarding
|
||||||
|
fib daddr type local dnat ip to meta l4proto . th dport map @port_forward
|
||||||
|
}
|
||||||
|
|
||||||
|
chain postrouting {
|
||||||
|
# Last step, accept by default
|
||||||
|
type nat hook postrouting priority srcnat; policy accept;
|
||||||
|
|
||||||
|
# Masquerade LAN addrs
|
||||||
|
oifname $ZONE_WAN_IFS ip saddr $RFC1918 masquerade
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# Optional IPv6 masquerading (big L if enabled, don't forget to allow forwarding)
|
||||||
|
networking.nftables.tables.nat6 = {
|
||||||
|
family = "ip6";
|
||||||
|
enable = false;
|
||||||
|
content = ''
|
||||||
|
${nftIdentifiers}
|
||||||
|
chain postrouting {
|
||||||
|
type nat hook postrouting priority srcnat; policy accept;
|
||||||
|
oifname $ZONE_WAN_IFS ip6 saddr fd00::/8 masquerade
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.nftables.tables.firewall = {
|
||||||
|
family = "inet";
|
||||||
|
content = ''
|
||||||
|
${nftIdentifiers}
|
||||||
|
define ALLOWED_TCP_PORTS = { ssh, https }
|
||||||
|
define ALLOWED_UDP_PORTS = { bootps, dhcpv6-server, domain }
|
||||||
set port_forward_v6 {
|
set port_forward_v6 {
|
||||||
type inet_proto . ipv6_addr . inet_service
|
type inet_proto . ipv6_addr . inet_service
|
||||||
# elements = {}
|
elements = {
|
||||||
|
# syncthing on alpina
|
||||||
|
tcp . ${ifs.lan.p6}::11:1 . 22000 ,
|
||||||
|
udp . ${ifs.lan.p6}::11:1 . 22000 ,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
set cloudflare_forward_v6 {
|
set cloudflare_forward_v6 {
|
||||||
type ipv6_addr
|
type ipv6_addr
|
||||||
@ -94,7 +136,7 @@ in
|
|||||||
# WAN zone input rules
|
# WAN zone input rules
|
||||||
iifname $ZONE_WAN_IFS jump zone_wan_input
|
iifname $ZONE_WAN_IFS jump zone_wan_input
|
||||||
# LAN zone input rules
|
# LAN zone input rules
|
||||||
iifname $ZONE_LAN_IFS accept
|
# iifname $ZONE_LAN_IFS accept
|
||||||
iifname $ZONE_LAN_IFS jump zone_lan_input
|
iifname $ZONE_LAN_IFS jump zone_lan_input
|
||||||
ip6 saddr $ZONE_LAN_EXTRA_NET6 jump zone_lan_input
|
ip6 saddr $ZONE_LAN_EXTRA_NET6 jump zone_lan_input
|
||||||
|
|
||||||
@ -160,25 +202,6 @@ in
|
|||||||
# NAT reflection
|
# NAT reflection
|
||||||
# oif lo ip daddr != 127.0.0.0/8 dnat ip to meta l4proto . th dport map @port_forward_v4
|
# oif lo ip daddr != 127.0.0.0/8 dnat ip to meta l4proto . th dport map @port_forward_v4
|
||||||
}
|
}
|
||||||
|
|
||||||
chain prerouting {
|
|
||||||
# Initial step, accept by default
|
|
||||||
type nat hook prerouting priority dstnat; policy accept;
|
|
||||||
|
|
||||||
# Port forwarding
|
|
||||||
fib daddr type local dnat ip to meta l4proto . th dport map @port_forward_v4
|
|
||||||
}
|
|
||||||
|
|
||||||
chain postrouting {
|
|
||||||
# Last step, accept by default
|
|
||||||
type nat hook postrouting priority srcnat; policy accept;
|
|
||||||
|
|
||||||
# Masquerade LAN addrs
|
|
||||||
oifname $ZONE_WAN_IFS ip saddr $RFC1918 masquerade
|
|
||||||
|
|
||||||
# Optional IPv6 masquerading (big L if enabled, don't forget to allow forwarding)
|
|
||||||
# oifname $ZONE_WAN_IFS ip6 saddr fd00::/8 masquerade
|
|
||||||
}
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user