On Sun, Jul 16, 2017 at 08:15:38PM +0000, Robert Peichaer wrote: > > + ifconfig lo0 inet6 >/dev/null 2>&1 && > > Please leave the if-then-fi construct intact. This short form is > mostly used for on-line commands (with only a few exceptions). OK.
> > + RULES="$RULES"' > > What is the reason to use double quotes and single quotes here? > Why not just use double quotes like this? Personal preference to make clear nothing inside the rules gets substituted. Using double quotes only will work just fine here. > This is not equivalent to the existing code. > > > + pass in proto { tcp, udp } from any port { sunrpc, nfsd } to any > > + pass out proto { tcp, udp } from any to any port { sunrpc, nfsd > > } !received-on any' > > + print -- "$RULES" | pfctl -nf - Of course, fixed. Thanks! > Unless one of the pf people speaks up in favour of combining it, > I'd like to leave the two steps separated as you noted in your > original email too. Sure. This is hopefully the final version of my diff. After all it now only merges consecutive assignments of RULE into single ones. Feedback? Index: rc =================================================================== RCS file: /cvs/src/etc/rc,v retrieving revision 1.507 diff -u -p -r1.507 rc --- rc 4 Jul 2017 19:02:11 -0000 1.507 +++ rc 16 Jul 2017 21:10:48 -0000 @@ -402,28 +399,35 @@ wsconsctl_conf # Set initial temporary pf rule set. if [[ $pf != NO ]]; then - RULES="block all" - RULES="$RULES\npass on lo0" - RULES="$RULES\npass in proto tcp from any to any port ssh keep state" - RULES="$RULES\npass out proto { tcp, udp } from any to any port domain keep state" - RULES="$RULES\npass out inet proto icmp all icmp-type echoreq keep state" - RULES="$RULES\npass out inet proto udp from any port bootpc to any port bootps" - RULES="$RULES\npass in inet proto udp from any port bootps to any port bootpc" + RULES=' + block all + pass on lo0 + pass in proto tcp from any to any port ssh keep state + pass out proto { tcp, udp } from any to any port domain keep state + pass out inet proto icmp all icmp-type echoreq keep state + pass out inet proto udp from any port bootpc to any port bootps + pass in inet proto udp from any port bootps to any port bootpc' + if ifconfig lo0 inet6 >/dev/null 2>&1; then - RULES="$RULES\npass out inet6 proto icmp6 all icmp6-type neighbrsol" - RULES="$RULES\npass in inet6 proto icmp6 all icmp6-type neighbradv" - RULES="$RULES\npass out inet6 proto icmp6 all icmp6-type routersol" - RULES="$RULES\npass in inet6 proto icmp6 all icmp6-type routeradv" - RULES="$RULES\npass out inet6 proto udp from any port dhcpv6-client to any port dhcpv6-server" - RULES="$RULES\npass in inet6 proto udp from any port dhcpv6-server to any port dhcpv6-client" + RULES="$RULES + pass out inet6 proto icmp6 all icmp6-type neighbrsol + pass in inet6 proto icmp6 all icmp6-type neighbradv + pass out inet6 proto icmp6 all icmp6-type routersol + pass in inet6 proto icmp6 all icmp6-type routeradv + pass out inet6 proto udp from any port dhcpv6-client to any port dhcpv6-server + pass in inet6 proto udp from any port dhcpv6-server to any port dhcpv6-client" fi - RULES="$RULES\npass in proto carp keep state (no-sync)" - RULES="$RULES\npass out proto carp !received-on any keep state (no-sync)" + + RULES="$RULES + pass in proto carp keep state (no-sync) + pass out proto carp !received-on any keep state (no-sync)" + + # Don't kill NFS. if [[ $(sysctl vfs.mounts.nfs 2>/dev/null) == *[1-9]* ]]; then - # Don't kill NFS. - RULES="set reassemble yes no-df\n$RULES" - RULES="$RULES\npass in proto { tcp, udp } from any port { sunrpc, nfsd } to any" - RULES="$RULES\npass out proto { tcp, udp } from any to any port { sunrpc, nfsd } !received-on any" + RULES="set reassemble yes no-df + $RULES + pass in proto { tcp, udp } from any port { sunrpc, nfsd } to any + pass out proto { tcp, udp } from any to any port { sunrpc, nfsd } !received-on any" fi print -- "$RULES" | pfctl -f - pfctl -e