Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/share/examples/npf Provide a simpler config for a host which...
details: https://anonhg.NetBSD.org/src/rev/0d0d113ea82e
branches: trunk
changeset: 998349:0d0d113ea82e
user: sevan <sevan%NetBSD.org@localhost>
date: Mon Apr 15 22:38:48 2019 +0000
description:
Provide a simpler config for a host which permits any traffic from the host out,
and small subset of traffic in (DHCP (v4 and v6), All ICMPv6, ICMP echo
requests, traceroute, mDNS).
diffstat:
share/examples/npf/host-npf.conf | 155 +++++++++++---------------------------
1 files changed, 45 insertions(+), 110 deletions(-)
diffs (180 lines):
diff -r d4eb61c2325c -r 0d0d113ea82e share/examples/npf/host-npf.conf
--- a/share/examples/npf/host-npf.conf Mon Apr 15 22:37:13 2019 +0000
+++ b/share/examples/npf/host-npf.conf Mon Apr 15 22:38:48 2019 +0000
@@ -1,131 +1,66 @@
-# $NetBSD: host-npf.conf,v 1.8 2014/08/04 22:13:23 szptvlfn Exp $
+# $NetBSD: host-npf.conf,v 1.9 2019/04/15 22:38:48 sevan Exp $
+#
+# Simple ruleset for a host with (i.e., not routing) two interfaces,
+# ethernet and wifi.
#
-# this is an example of NPF rules for a host (i.e., not routing) with
-# two network interfaces, wired and wifi
+# DHCP (v4 and v6), SLAAC, ICMPv6, ICMP echo requests, traceroute, mDNS traffic
+# are permitted, inbound, on either interface.
#
-# it does both IPv4 and IPv6 and allows for DHCP in v4 and SLAAC in v6
-# it also does IPSEC on the wifi
+# SSH to the host is allowed in via the ethernet interface.
+# blacklistd(8) is used to prevent SSH bruteforce attempts.
+#
+# No specific rules for the wifi interface.
+#
+# All traffic from the host is permitted, outbound, on either interface.
#
$wired_if = "wm0"
-$wired_v4 = { inet4(wm0) }
-$wired_v6 = { inet6(wm0) }
-
-$wifi_if = "iwn0"
-$wifi_v4 = { inet4(iwn0) }
-$wifi_v6 = { inet6(iwn0) }
-
-$dhcpserver = { 198.51.100.1 }
-
-# sample udp service
-$services_udp = { ntp }
+$wifi_if = "iwn0"
+$wired_addrs= ifaddrs(wm0)
+$wifi_addrs = ifaddrs(iwn0)
-# sample mixed service
-$backupsrv_v4 = { 198.51.100.11 }
-$backupsrv_v6 = { 2001:0DB8:404::11 }
-$backup_port = { amanda }
+alg "icmp"
-# watching a tcpdump of npflog0, when it only logs blocks,
-# can be very helpful for building the rules you actually need
procedure "log" {
- log: npflog0
+ log: npflog0
}
-# make a service running on a high port on 127.0.0.1 available on $wired_if
-# see also the pass rules below
-map $wired_if dynamic 127.0.0.1 port 8080 <- $wired_v4 port 80
-
group "wired" on $wired_if {
-
- # not being picky about our own address here
- pass in final family inet6 proto ipv6-icmp all
- pass out final family inet6 proto ipv6-icmp all
- pass in final family inet4 proto icmp all
-
- pass in final family inet4 proto tcp \
- from $dhcpserver port bootps to $wired_v4 port bootpc
- pass in final family inet4 proto udp \
- from $dhcpserver port bootps to $wired_v4 port bootpc
-
- pass in final family inet6 proto tcp to $wired_v6 port ssh
-
- # the port mapping
- # Note the filter sees packets before translation
- pass in final family inet4 proto tcp from any to $wired_v4 port 80
- pass out final family inet4 proto tcp from 127.0.0.1 port 8080 to any
+# Placeholder for blacklistd (configuration separate) to add blocked hosts
+ruleset "blacklistd"
- pass in final family inet4 proto tcp flags S/SA \
- from $backupsrv_v4 to $wired_v4 port $backup_port
- pass in final family inet4 proto udp \
- from $backupsrv_v4 to $wired_v4 port $backup_port
- pass in final family inet6 proto tcp flags S/SA \
- from $backupsrv_v6 to $wired_v6 port $backup_port
- pass in final family inet6 proto udp \
- from $backupsrv_v6 to $wired_v6 port $backup_port
-
- pass stateful in final family inet6 proto udp to $wired_v6 \
- port $services_udp
- pass stateful in final family inet4 proto udp to $wired_v4 \
- port $services_udp
-
- # only SYN packets need to generate state
- pass stateful out final family inet6 proto tcp flags S/SA \
- from $wired_v6
- pass stateful out final family inet4 proto tcp flags S/SA \
- from $wired_v4
- # pass the other tcp packets without generating extra state
- pass out final family inet6 proto tcp from $wired_v6
- pass out final family inet4 proto tcp from $wired_v4
-
- # all other types of traffic, generate state per packet
- pass stateful out final family inet6 from $wired_v6
- pass stateful out final family inet4 from $wired_v4
+# Allow SSH on wired interface
+pass in on $wired_if proto tcp to $wired_addrs port ssh apply "log"
}
group "wifi" on $wifi_if {
- # linklocal
- pass in final family inet6 proto ipv6-icmp to fe80::/10
- pass out final family inet6 proto ipv6-icmp from fe80::/10
- # administrative multicasts
- pass in final family inet6 proto ipv6-icmp to ff00::/10
- pass out final family inet6 proto ipv6-icmp from ff00::/10
-
- pass in final family inet6 proto ipv6-icmp to $wifi_v6
- pass in final family inet4 proto icmp to $wifi_v4
-
- pass in final family inet4 proto tcp \
- from any port bootps to $wifi_v4 port bootpc
- pass in final family inet4 proto udp \
- from any port bootps to $wifi_v4 port bootpc
-
- pass in final family inet6 proto tcp flags S/SA to $wifi_v6 port ssh
-
- pass in final family inet6 proto udp to $wifi_v6 port $services_udp
- pass in final family inet4 proto udp to $wifi_v4 port $services_udp
-
- # IPSEC
- pass in final family inet6 proto udp to $wifi_v6 port isakmp
- pass in final family inet4 proto udp to $wifi_v4 port isakmp
- pass in family inet6 proto esp all
- pass in family inet4 proto esp all
-
- # only SYN packets need to generate state
- pass stateful out final family inet6 proto tcp flags S/SA \
- from $wifi_v6
- pass stateful out final family inet4 proto tcp flags S/SA \
- from $wifi_v4
- # pass the other tcp packets without generating extra state
- pass out final family inet6 proto tcp from $wifi_v6
- pass out final family inet4 proto tcp from $wifi_v4
-
- # all other types of traffic, generate state per packet
- pass stateful out final family inet6 from $wifi_v6
- pass stateful out final family inet4 from $wifi_v4
}
group default {
- pass final on lo0 all
- block all apply "log"
+# Default deny, otherwise last matching rule wins
+block all apply "log"
+
+# Don't block loopback
+pass on lo0 all
+
+# Allow incoming DHCP server responses
+pass in family inet4 proto udp from any port bootps to any port bootpc
+pass in family inet6 proto udp from any to any port "dhcpv6-client"
+
+# Allow IPv6 ICMP
+pass family inet6 proto ipv6-icmp all
+
+# Allow incoming IPv4 pings
+pass in family inet4 proto icmp icmp-type echo all
+
+# Allow being tracerouted
+pass in proto udp to any port 33434-33600
+
+# Allow incoming mDNS traffic from neighbours
+pass in proto udp to any port mdns
+
+# Allow all outbound traffic
+pass stateful out all
}
Home |
Main Index |
Thread Index |
Old Index