Hello!
This was the first thing I checked.
But I think there was a deadly combo of two factors:
1) the continuation character
2) The nuance described in man pf.conf:
"Care should be taken when
commenting out multi-line text: the comment is effective until the end of
the entire block."

After continuous experimenting with the rules there are too many
commented lines mixed with real config blocks in my pf.conf.

I really have to do some cleaning.

Thank you everybody for all your help!

On Tue May 21 16:49:00 2024, Steve Williams wrote:
> A lot of Unix configuration files have an issue with the continuation
> character "\" IF THERE IS A SPACE AFTER IT!!
> 
> Make sure that the \ is the last character on the line!
> 
> S.
> 
> On 20/05/2024 11:01 p.m., Maksim Rodin wrote:
> > I solved the problem by copying the entire rule block right after
> > the old one and commenting out the old one.
> > 
> > New:
> > pass in on egress inet proto tcp to (egress) port $mail_ports \
> >     keep state (max-src-conn 20, \
> >     max-src-conn-rate 35/300, overload <bad_ips> \
> >     flush global) \
> >     rdr-to $mail_server
> > 
> > Old:
> > pass in on egress inet proto tcp to (egress) \
> >     port $mail_ports \
> >     keep state (max-src-conn 20, \
> >     max-src-conn-rate 35/300, overload <bad_ips> \
> >     flush global) rdr-to $mail_server
> > 
> > I only split one line and merged two other lines into one
> > but I think I did it correctly and I do not see any logical
> > changes in the block.
> > 
> > I still cannot understand what happened because there were no
> > uncommented excess lines within the old block.
> > 
> > Before copying the entire rule block I even occasionally made
> > a typo in the old rule and checked it with pfctl -nf /etc/pf.conf.
> > PF still did as if there were no block with the typo at all:
> > 
> > pass in on egress inet proto tcp to (egress) \
> >     pppport $mail_ports \
> >     keep state (max-src-conn 20, \
> >     max-src-conn-rate 35/300, overload <bad_ips> \
> >     flush global) rdr-to $mail_server
> > 
> > 
> > 
> > On Mon May 20 11:43:21 2024, Maksim Rodin wrote:
> > > Hello,
> > > I use OpenBSD 7.5 stable amd64.
> > > I uncommented an old rule and the corresponding macro in pf.conf
> > > which definitely worked when the
> > > machine was on version 7.3 and possibly 7.4.
> > > 
> > > After that:
> > > pfctl -nf /etc/pf.conf shows nothing
> > > pfctl -f /etc/pf.conf shows nothing
> > > So Packet Filter seems to be happy with the config as a whole.
> > > 
> > > pfctl -vvsr shows the old rules WITHOUT the uncommented one.
> > > pfctl -vvnf /etc/pf.conf warns that the uncommented macro
> > > used in the uncommented rule is NOT used.
> > > 
> > > The output of pfctl -vvnf /etc/pf.conf is appended as
> > > pfctl_vvnf file
> > > The output of pfctl -vvsr is appended as
> > > pfctl_vvsr file
> > > 
> > > 
> > > Did I miss something when changing the configuration?
> > > 
> > > The uncommented section 1 is:
> > > mail_ports = "{ submission imaps }"
> > > 
> > > The uncommented section 2 is:
> > > pass in on egress inet proto tcp to (egress) \
> > >   port $mail_ports \
> > >   keep state (max-src-conn 20, \
> > >   max-src-conn-rate 35/300, overload <bad_ips> \
> > >   flush global) rdr-to $mail_server
> > > 
> > > 
> > > My whole pf.conf (all uncommented lines):
> > > int_if = "{ vether1 em1 em2 em3 }"
> > > table <martians> { 0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 \
> > >     169.254.0.0/16 172.16.0.0/12 192.0.2.0/24 \
> > >     192.168.0.0/16 198.18.0.0/15 198.51.100.0/24 \
> > > }
> > > table <spamd-white> persist
> > > table <nospamd> persist file "/etc/mail/nospamd"
> > > table <bad_ips> persist file "/etc/pf/bad_ips"
> > > 
> > > transmission_server = "192.168.1.65"
> > > mail_server = "192.168.1.171"
> > > 
> > > mail_ports = "{ submission imaps }"
> > > 
> > > block log all
> > > set limit table-entries 1000000
> > > set block-policy drop
> > > set syncookies adaptive (start 29%, end 15%)
> > > set skip on lo
> > > 
> > > match in all scrub (no-df random-id max-mss 1440)
> > > match out on egress inet from (vether1:network) \
> > >   to any nat-to (egress:0)
> > > 
> > > block in quick on egress from <martians> to any
> > > block return out quick on egress from any to <martians>
> > > block quick from <bad_ips>
> > > 
> > > pass out quick inet
> > > pass in on $int_if inet
> > > 
> > > pass in on egress inet proto tcp  \
> > >   to (egress) port 22 keep state \
> > >   (max-src-conn 2, max-src-conn-rate 2/300, \
> > >   overload <bad_ips> flush global)
> > > 
> > > pass in on egress inet proto { tcp udp }  \
> > >   to (egress) port domain keep state \
> > >   (max-src-states 10) \
> > >   rdr-to 127.0.0.1 port 8053
> > > 
> > > pass in on $int_if inet proto { tcp udp } from \
> > >   (vether1:network) to (egress) port domain
> > > 
> > > pass in on egress inet proto { tcp udp } \
> > >   to (egress) port 50000 \
> > >   rdr-to $transmission_server
> > > 
> > > pass in on egress inet proto tcp to (egress) \
> > >   port $mail_ports \
> > >   keep state (max-src-conn 20, \
> > >   max-src-conn-rate 35/300, overload <bad_ips> \
> > >   flush global) rdr-to $mail_server
> > > 
> > > pass in on egress proto tcp to (egress) \
> > >   port smtp divert-to 127.0.0.1 port spamd
> > > pass in on egress proto tcp from <nospamd> to (egress) \
> > >   port smtp rdr-to $mail_server
> > > pass in log on egress proto tcp from <spamd-white> \
> > >   to (egress) port smtp \
> > >   rdr-to $mail_server
> > > pass out on egress proto tcp to (egress) port smtp
> > > 
> > > 
> > > -- 
> > > Best regards
> > > Maksim Rodin
> > > warning: macro 'mail_ports' not used
> > > Loaded 714 passive OS fingerprints
> > > int_if = "{ vether1 em1 em2 em3 }"
> > > table <martians> { 0.0.0.0/8 10.0.0.0/8 127.0.0.0/8 169.254.0.0/16 
> > > 172.16.0.0/12 192.0.2.0/24 192.168.0.0/16 198.18.0.0/15 198.51.100.0/24 }
> > > table <spamd-white> persist
> > > table <nospamd> persist file "/etc/mail/nospamd"
> > > table <bad_ips> persist file "/etc/pf/bad_ips"
> > > transmission_server = "192.168.1.65"
> > > mail_server = "192.168.1.171"
> > > mail_ports = "{ submission imaps }"
> > > set limit table-entries 1000000
> > > set block-policy drop
> > > set syncookies adaptive (start 29%, end 15%)
> > > set skip on { lo }
> > > @0 block drop log all
> > > @1 match in all scrub (no-df random-id max-mss 1440)
> > > @2 match out on egress inet from (vether1:network:*) to any nat-to 
> > > (egress:0:*) round-robin
> > > @3 block drop in quick on egress from <martians:0> to any
> > > @4 block return out quick on egress from any to <martians:0>
> > > @5 block drop quick from <bad_ips:0> to any
> > > @6 pass out quick inet all flags S/SA
> > > @7 pass in on vether1 inet all flags S/SA
> > > @8 pass in on em1 inet all flags S/SA
> > > @9 pass in on em2 inet all flags S/SA
> > > @10 pass in on em3 inet all flags S/SA
> > > @11 pass in on egress inet proto tcp from any to (egress:*) port = 22 
> > > flags S/SA keep state (source-track rule, max-src-conn 2, 
> > > max-src-conn-rate 2/300, overload <bad_ips> flush global, src.track 300)
> > > @12 pass in on egress inet proto tcp from any to (egress:*) port = 53 
> > > flags S/SA keep state (source-track global, max-src-states 10) rdr-to 
> > > 127.0.0.1 port 8053
> > > @13 pass in on egress inet proto udp from any to (egress:*) port = 53 
> > > keep state (source-track global, max-src-states 10) rdr-to 127.0.0.1 port 
> > > 8053
> > > @14 pass in on vether1 inet proto tcp from (vether1:network:*) to 
> > > (egress:*) port = 53 flags S/SA
> > > @15 pass in on em1 inet proto tcp from (vether1:network:*) to (egress:*) 
> > > port = 53 flags S/SA
> > > @16 pass in on em2 inet proto tcp from (vether1:network:*) to (egress:*) 
> > > port = 53 flags S/SA
> > > @17 pass in on em3 inet proto tcp from (vether1:network:*) to (egress:*) 
> > > port = 53 flags S/SA
> > > @18 pass in on vether1 inet proto udp from (vether1:network:*) to 
> > > (egress:*) port = 53
> > > @19 pass in on em1 inet proto udp from (vether1:network:*) to (egress:*) 
> > > port = 53
> > > @20 pass in on em2 inet proto udp from (vether1:network:*) to (egress:*) 
> > > port = 53
> > > @21 pass in on em3 inet proto udp from (vether1:network:*) to (egress:*) 
> > > port = 53
> > > @22 pass in on egress inet proto tcp from any to (egress:*) port = 50000 
> > > flags S/SA rdr-to 192.168.1.65
> > > @23 pass in on egress inet proto udp from any to (egress:*) port = 50000 
> > > rdr-to 192.168.1.65
> > > @24 pass in on egress inet proto tcp from any to (egress:*) port = 25 
> > > flags S/SA divert-to 127.0.0.1 port 8025
> > > @25 pass in on egress inet proto tcp from <nospamd:0> to (egress:*) port 
> > > = 25 flags S/SA rdr-to 192.168.1.171
> > > @26 pass in log on egress inet proto tcp from <spamd-white:0> to 
> > > (egress:*) port = 25 flags S/SA rdr-to 192.168.1.171
> > > @27 pass out on egress proto tcp from any to (egress:*) port = 25 flags 
> > > S/SA
> > > @0 block drop log all
> > >    [ Evaluations: 1331      Packets: 746       Bytes: 35871       States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @1 match in all scrub (no-df random-id max-mss 1440)
> > >    [ Evaluations: 1331      Packets: 21182     Bytes: 12745032    States: 
> > > 19    ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @2 match out on egress inet from (vether1:network:1) to any nat-to 
> > > (egress:0:1) round-robin
> > >    [ Evaluations: 1331      Packets: 20878     Bytes: 12693160    States: 
> > > 14    ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @3 block drop in quick on egress from <martians:9> to any
> > >    [ Evaluations: 973       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @4 block return out quick on egress from any to <martians:9>
> > >    [ Evaluations: 973       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @5 block drop quick from <bad_ips:8018> to any
> > >    [ Evaluations: 1331      Packets: 157       Bytes: 9756        States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @6 pass out quick inet all flags S/SA
> > >    [ Evaluations: 1174      Packets: 21152     Bytes: 12742195    States: 
> > > 19    ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 215   ]
> > > @7 pass in on vether1 inet all flags S/SA
> > >    [ Evaluations: 959       Packets: 21031     Bytes: 12722634    States: 
> > > 17    ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 170   ]
> > > @8 pass in on em1 inet all flags S/SA
> > >    [ Evaluations: 959       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @9 pass in on em2 inet all flags S/SA
> > >    [ Evaluations: 959       Packets: 54        Bytes: 8100        States: 
> > > 1     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 18    ]
> > > @10 pass in on em3 inet all flags S/SA
> > >    [ Evaluations: 959       Packets: 54        Bytes: 8910        States: 
> > > 1     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 18    ]
> > > @11 pass in on egress inet proto tcp from any to (egress:1) port = 22 
> > > flags S/SA keep state (source-track rule, max-src-conn 2, 
> > > max-src-conn-rate 2/300, overload <bad_ips> flush global, src.track 300)
> > >    [ Evaluations: 959       Packets: 19        Bytes: 3983        States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 1     ]
> > > @12 pass in on egress inet proto tcp from any to (egress:1) port = 53 
> > > flags S/SA keep state (source-track global, max-src-states 10) rdr-to 
> > > 127.0.0.1 port 8053
> > >    [ Evaluations: 599       Packets: 15        Bytes: 862         States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 2     ]
> > > @13 pass in on egress inet proto udp from any to (egress:1) port = 53 
> > > keep state (source-track global, max-src-states 10) rdr-to 127.0.0.1 port 
> > > 8053
> > >    [ Evaluations: 22        Packets: 3         Bytes: 194         States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 1     ]
> > > @14 pass in on vether1 inet proto tcp from (vether1:network:1) to 
> > > (egress:1) port = 53 flags S/SA
> > >    [ Evaluations: 325       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @15 pass in on em1 inet proto tcp from (vether1:network:1) to (egress:1) 
> > > port = 53 flags S/SA
> > >    [ Evaluations: 149       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @16 pass in on em2 inet proto tcp from (vether1:network:1) to (egress:1) 
> > > port = 53 flags S/SA
> > >    [ Evaluations: 149       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @17 pass in on em3 inet proto tcp from (vether1:network:1) to (egress:1) 
> > > port = 53 flags S/SA
> > >    [ Evaluations: 131       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @18 pass in on vether1 inet proto udp from (vether1:network:1) to 
> > > (egress:1) port = 53
> > >    [ Evaluations: 240       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @19 pass in on em1 inet proto udp from (vether1:network:1) to (egress:1) 
> > > port = 53
> > >    [ Evaluations: 149       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @20 pass in on em2 inet proto udp from (vether1:network:1) to (egress:1) 
> > > port = 53
> > >    [ Evaluations: 149       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @21 pass in on em3 inet proto udp from (vether1:network:1) to (egress:1) 
> > > port = 53
> > >    [ Evaluations: 131       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @22 pass in on egress inet proto tcp from any to (egress:1) port = 50000 
> > > flags S/SA rdr-to 192.168.1.65
> > >    [ Evaluations: 727       Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @23 pass in on egress inet proto udp from any to (egress:1) port = 50000 
> > > rdr-to 192.168.1.65
> > >    [ Evaluations: 20        Packets: 2         Bytes: 185         States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 2     ]
> > > @24 pass in on egress inet proto tcp from any to (egress:1) port = 25 
> > > flags S/SA divert-to 127.0.0.1 port 8025
> > >    [ Evaluations: 619       Packets: 4         Bytes: 164         States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 1     ]
> > > @25 pass in on egress inet proto tcp from <nospamd:20> to (egress:1) port 
> > > = 25 flags S/SA rdr-to 192.168.1.171
> > >    [ Evaluations: 1         Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @26 pass in log on egress inet proto tcp from <spamd-white:1> to 
> > > (egress:1) port = 25 flags S/SA rdr-to 192.168.1.171
> > >    [ Evaluations: 1         Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > > @27 pass out on egress proto tcp from any to (egress:1) port = 25 flags 
> > > S/SA
> > >    [ Evaluations: 21        Packets: 0         Bytes: 0           States: 
> > > 0     ]
> > >    [ Inserted: uid 0 pid 13268 State Creations: 0     ]
> > 
> 

-- 
Best regards
Maksim Rodin

Reply via email to