Good point. Thank you. I have removed set skip lo0

Why did the antispoof not work for vio0?






On Monday 10 November 2025 at 06:27:59 pm AWST, Zé Loff <[email protected]> 
wrote: 





On Mon, Nov 10, 2025 at 09:42:57AM +0000, dirk coetzee wrote:
> Hi All,
> 
> I am seeing ssh authentication attempts on my lo0 interface (127.0.0.1). I 
> have antispoofing configured. Unfortunately due to unchangeable 
> circumstances, SSH (TCP/50022) is exposed.
> 
> Any idea if my antispoofing configuration is incorrect? Or any other 
> suggestions to mitigate SSH connections from lo0?
> 
> Please note - SSH is configured to listen on TCP/50022. Not TCP/5273, so i 
> have no idea how or why SSH is responding on TCP/5273.

sshd isn't responding on port 5273, that's the source port.  I.e., the
connection is coming from a client running on the host itself.

Also, you have "set skip on lo" at the top of your ruleset, so your not
doing any (pf) filtering on loopback interfaces.  All your "pass/block
on lo0" rules are useless.

> 
> 
> Regards
> dirk
> 
> 
> ###############################################################################
> 
> ### Logs ###
> ### /var/log/authlog ###
> Nov  3 21:27:46 server-1 sshd-session[46091]: Connection from 127.0.0.1 port 
> 48186 on 127.0.0.1 port 50022 rdomain "0"
> Nov  3 21:27:46 server-1 sshd-session[46091]: User root from 127.0.0.1 not 
> allowed because a group is listed in DenyGroups
> Nov  3 21:27:48 server-1 sshd-session[46091]: Connection closed by invalid 
> user root 127.0.0.1 port 48186 [preauth]
> Nov  3 21:27:48 server-1 sshd[30737]: srclimit_penalise: ipv4: new 
> 127.0.0.1/32 deferred penalty of 30 seconds for penalty: failed authentication
> Nov  3 21:33:19 server-1 sshd-session[42309]: Connection from 127.0.0.1 port 
> 5273 on 127.0.0.1 port 50022 rdomain "0"
> Nov  3 21:33:19 server-1 sshd-session[42309]: User root from 127.0.0.1 not 
> allowed because a group is listed in DenyGroups
> Nov  3 21:33:23 server-1 sshd-session[42309]: Connection closed by invalid 
> user root 127.0.0.1 port 5273 [preauth]
> Nov  3 21:33:23 server-1 sshd[30737]: srclimit_penalise: ipv4: new 
> 127.0.0.1/32 deferred penalty of 30 seconds for penalty: failed authentication
> 
> ###############################################################################
> 
> ### /etc/pf.conf
> #       $OpenBSD: pf.conf,v 1.55 2017/12/03 20:40:04 sthen Exp $
> #
> # See pf.conf(5) and /etc/examples/pf.conf
> 
> # ---=== Global Config ====----
> set skip on lo
> set block-policy drop
> set syncookies adaptive (start 33%, end 12%)
> set reassemble yes no-df
> set ruleset-optimization none
> set optimization aggressive
> set limit { states 20000, frags 20000, src-nodes 5000, table-entries 2000000 }
> match in all scrub (no-df random-id max-mss 1440)
> 
> # ---=== Macros ===---
> ports_dns      = "{ 53, 853 }"
> icmp_useful    = "{ echoreq, unreach, timex, timereq }"
> icmp6_useful   = "{ echoreq, unreach, timex, routersol, neighbrsol, 
> routeradv, neighbradv }"
> ip_ext1        = "{ vio0:0 }"
> 
> # ---=== Tables ===---
> table <bruteforce>     persist
> table <sshguard>       persist
> table <sshd_block>     persist file "/etc/pf.files/table_sshd_block.txt"
> table <script1_block>  persist file "/etc/pf.files/script1_block.txt"
> table <geoblock>       persist file "/etc/pf.files/zones/pf.geoblock.master"
> table <githubblkdips>  persist file "/etc/pf.files/github_blkd_ips.txt"
> table <martians>       persist file "/etc/pf.files/martians.txt"
> table <snortips>       persist file "/etc/pf.files/snortips.txt"
> table <wwlogpf>        persist file "/etc/pf.files/wwwintrusions.txt"
> 
> # ---=== Block: IPv6 rules ===--- 
> block in  quick log on egress inet6 from any  to self  label "Rule:$nr on 
> $if. Block IPv6 Inbound."
> block out quick log on egress inet6 from self to any   label "Rule:$nr on 
> $if. Block IPv6 Outbound."
> 
> # ---=== AntiSpoof rules ===--
> antispoof log quick for { lo0, vio0, wg0, tun0 } label "Rule:$nr $if $proto 
> $dstaddr $dstport. Antispoof rule."
> block     quick log on lo0 inet  proto tcp from any to self port { 
> 22,80,443,50022 }  label "Rule:$nr $if $proto $dstaddr $dstport. URPF 
> Failure."
> block     quick log on lo0 inet  proto udp from any to self port   51820      
>         label "Rule:$nr $if $proto $dstaddr $dstport. URPF Failure."
> block     quick log on lo0 inet6 proto tcp from any to self port { 
> 22,80,443,50022 }  label "Rule:$nr $if $proto $dstaddr $dstport. URPF 
> Failure."
> block     quick log on lo0 inet6 proto udp from any to self port   51820      
>         label "Rule:$nr $if $proto $dstaddr $dstport. URPF Failure."
> block     quick log                        from urpf-failed            label 
> "Rule:$nr $if $proto $dstaddr $dstport. URPF Failure."
> block     quick log inet proto tcp         from any port <1024 to self port 
> {80,443,50022} label "Rule:$nr $if $proto $dstaddr $dstport. Reflection 
> Attack" 
> block     quick log inet proto udp         from any port <1024 to self port 
> 51820          label "Rule:$nr $if $proto $dstaddr $dstport. Reflection 
> Attack" 
> 
> # ---=== Block: Martians ===--- 
> block in  quick log on egress inet from <martians>     to self             
> label "Rule:$nr on $if. Block Martians Inbound."
> block out quick log on egress inet from self           to <martians>       
> label "Rule:$nr on $if. Block Martians Outbound."
> 
> # ---=== Default OpenBSD Rules ===---
> block return in on ! lo0 proto tcp to port 6000:6010 label "Rule:$nr on $if. 
> Default OpenBSD rule - X11"
> block return out log proto {tcp udp} user _pbuild    label "Rule:$nr on $if. 
> Default OpenBSD rule - pbuild"
> 
> # ---=== Block: SSH Guard ===--- 
> block in  quick log on egress from <sshguard>     to self             label 
> "Rule:$nr on $if. SSH Guard Inbound."
> block out quick log on egress from self           to <sshguard>       label 
> "Rule:$nr on $if. SSH Guard Outbound."
> block in  quick log on egress from <sshd_block>   to self             label 
> "Rule:$nr on $if. SSH Block Script Inbound."
> block out quick log on egress from self           to <sshd_block>     label 
> "Rule:$nr on $if. SSH Block Script Outbound."
> 
> # ---=== Geo Fencing ===---
> block in         quick log from <geoblock> to self                    label 
> "Rule:$nr on $if. GeoBlock Inbound."
> block return out quick log from self       to <geoblock>              label 
> "Rule:$nr on $if. GeoBlock Outbound."
> 
> # ---=== Block: Snort Intrusion Prevention ===--- 
> block in  quick log on egress from <snortips>     to self             label 
> "Rule:$nr on $if. Snort IPS Block Inbound."
> block out quick log on egress from self           to <snortips>       label 
> "Rule:$nr on $if. Snort IPS Block Outbound."
> 
> # ---=== Block: WWW log file parsed offenders ===--- 
> block in  quick log on egress from <wwlogpf>      to self             label 
> "Rule:$nr on $if. WWW offenders Inbound."
> block out quick log on egress from self           to <wwlogpf>        label 
> "Rule:$nr on $if. WWW offenders Outbound."
> 
> # ---=== Block: Scripted Block Lists ===--- 
> block in  quick log on egress from <script1_block> to self            label 
> "Rule:$nr on $if. Bad IPs Block List Inbound." 
> block out quick log on egress from self            to <script1_block> label 
> "Rule:$nr on $if. Bad IPs Block List Outbound."
> block in  quick log on egress from <githubblkdips> to self            label 
> "Rule:$nr on $if. GitHub Repo Banned IPs Inbound."
> block out quick log on egress from self            to <githubblkdips> label 
> "Rule:$nr on $if. GitHub Repo Banned IPs Outbound."
> 
> # ---=== Block: Bruteforce Protection ===--- 
> block in  quick log on egress from <bruteforce>   to self             label 
> "Rule:$nr on $if. Bruteforcers Inbound."
> block out quick log on egress from self           to <bruteforce>     label 
> "Rule:$nr on $if. Bruteforcers Outbound."
> 
> # ---=== Inbound Access: SSH Allow and Source Track ===--- 
> pass in quick log on egress inet  proto tcp from any port >1023 to $ip_ext1 
> port = 50022 flags S/SA synproxy state (source-track rule, max-src-conn 3, 
> max-src-conn-rate 3/10, overload <bruteforce> flush global, src.track 600) 
> label "Rule:$nr on $if interface. Inbound SSH."
> 
> # ---=== Inbound Access: HTTP/S ===--- 
> pass  in quick log on egress inet  proto tcp from any port >1023 to $ip_ext1 
> port = 80  flags S/SA synproxy state (source-track rule, max-src-conn 64, 
> max-src-conn-rate 64/300, overload <bruteforce> flush global, src.track 3600) 
> label "Rule:$nr on $if interface Inbound HTTP."
> pass  in quick log on egress inet  proto tcp from any port >1023 to $ip_ext1 
> port = 443 flags S/SA synproxy state (source-track rule, max-src-conn 64, 
> max-src-conn-rate 64/300, overload <bruteforce> flush global, src.track 3600) 
> label "Rule:$nr on $if interface Inbound HTTPS."
> 
> # ---=== Inbound Access: Wireguard ===--- 
> pass  in quick log on egress inet proto udp  from any         port >1023 to 
> $ip_ext1 port = 51820 keep state (source-track rule, max-src-conn 30, 
> overload <bruteforce> flush global, src.track 3600) label "Rule:$nr on $if 
> interface. Inbound Wireguard VPN." 
> pass  in quick log on wg0    inet proto tcp  from wg0:network port >1023 to 
> wg0:0 port = 50022 label "Rule:$nr on $if interface. Inbound WG SSH."
> pass  in quick log on wg0    inet proto icmp from wg0:network            to 
> $ip_ext1              label "Rule:$nr on $if interface. Inbound WG ICMP."
> block in quick log on egress inet proto udp  from any                    to 
> self  port = 51820 label "Rule:$nr on $if interface. Inbound Wireguard VPN."
> 
> # ---=== User Oubound Rules: dhcp ===---
> pass  out quick log          inet proto udp       from self port {67,68}      
> to 255.255.255.255 port {67,68} user  _dhcp label "$nr: Allow DHCP service on 
> ports 67 68"
> block out quick log          inet proto {tcp udp} from self                   
> to any                          group _dhcp label "$nr: Block DHCP service"
> 
> # ---=== Outbound Access: NTP ===---
> pass  out quick log inet  proto udp from self port >1023 to any port 123 user 
> _ntp set tos ef label "Rule:$nr on $if interface. NTP Outbound."
> pass  out quick log inet6 proto udp from self port >1023 to any port 123 user 
> _ntp label "Rule:$nr on $if interface. NTP Outbound."
> pass  out quick log inet  proto tcp from self port >1023 to any port 443 user 
> _ntp label "Rule:$nr on $if interface. NTP Outbound."
> pass  out quick log inet6 proto tcp from self port >1023 to any port 443 user 
> _ntp label "Rule:$nr on $if interface. NTP Outbound."
> block out quick log inet  proto { tcp udp } from self group _ntp              
>      label "Rule:$nr on $if interface. Block NTP Out."
> block out quick log inet6 proto { tcp udp } from self group _ntp              
>      label "Rule:$nr on $if interface. Block NTP Out."
> 
> # ---=== Outbound Access: UnWind ===---
> pass  out quick log inet  proto { tcp udp } from self to any port $ports_dns 
> group _unwind label "Rule:$nr on $if interface. Unwind Outbound ipv4"
> pass  out quick log inet6 proto { tcp udp } from self to any port $ports_dns 
> group _unwind label "Rule:$nr on $if interface. Unwind Outbound ipv6"
> pass  out quick log inet  proto   tcp       from self to any port 443        
> group _unwind label "Rule:$nr on $if interface. Unwind HTTP Check"
> pass  out quick log inet6 proto   tcp       from self to any port 443        
> group _unwind label "Rule:$nr on $if interface. Unwind HTTP Check"
> block out quick log inet  proto { tcp udp } from self to any port $ports_dns 
> group _unwind label "Rule:$nr on $if interface. Block any service DNS Out4"
> block out quick log inet6 proto { tcp udp } from self to any port $ports_dns 
> group _unwind label "Rule:$nr on $if interface. Block any service DNS Out6"
> block out quick log inet  proto { tcp udp } from self                        
> group _unwind label "Rule:$nr on $if interface. Unwind Service Cleanup Rule,"
> block out quick log inet6 proto { tcp udp } from self                        
> group _unwind label "Rule:$nr on $if interface. Unwind Service Cleanup Rule,"
> 
> # ---=== Outbound Access: DHCPD ===---
> pass  out quick log inet  proto { tcp udp } from self to any port 67:68 group 
> _dhcp label "Rule:$nr on $if interface. DHCPD."
> pass  out quick log inet6 proto { tcp udp } from self to any port 67:68 group 
> _dhcp label "Rule:$nr on $if interface. DHCPD."
> block out quick log inet  proto { tcp udp } from self                   group 
> _dhcp label "Rule:$nr on $if interface. DHCPD."
> block out quick log inet6 proto { tcp udp } from self                   group 
> _dhcp label "Rule:$nr on $if interface. DHCPD."
> 
> # ---=== Outbound Access: from pkgfetch ===---
> pass  out quick log inet  proto { tcp } from self port >1023 to any port 443 
> user _pkgfetch label "Rule:$nr on $if interface. Pkg Outbound"
> pass  out quick log inet6 proto { tcp } from self port >1023 to any port 443 
> user _pkgfetch label "Rule:$nr on $if interface. Pkg Outbound"
> block out quick log inet  proto { tcp udp } from self to any group _pkgfetch 
> label "Rule:$nr on $if interface. Block Pkg."
> block out quick log inet6 proto { tcp udp } from self to any group _pkgfetch 
> label "Rule:$nr on $if interface. Block Pkg."
> 
> # ---=== Outbound Access: from syspatch ===---
> pass  out quick log inet  proto { tcp } from self port >1023 to any port 443 
> user _syspatch label "Rule:$nr on $if interface. Syspatch Outbound."
> pass  out quick log inet6 proto { tcp } from self port >1023 to any port 443 
> user _syspatch label "Rule:$nr on $if interface. Syspatch Outbound."
> block out quick log inet  proto { tcp udp } from self to any group _syspatch 
> label "Rule:$nr on $if interface. Block Syspatch"
> block out quick log inet6 proto { tcp udp } from self to any group _syspatch 
> label "Rule:$nr on $if interface. Block Syspatch"
> 
> # ---=== Outbound Access: from freshclam ===---
> ## pass  out quick log inet  proto { tcp } from self port >1023 to any port 
> 53  user _clamav label "Rule:$nr on $if interface. Freshclam DNS Out."
> ## pass  out quick log inet6 proto { tcp } from self port >1023 to any port 
> 53  user _clamav label "Rule:$nr on $if interface. Freshclam DNS Out."
> pass  out quick log inet  proto { tcp } from self port >1023 to any port 443 
> user _clamav label "Rule:$nr on $if interface. Freshclam HTTP Out."
> pass  out quick log inet6 proto { tcp } from self port >1023 to any port 443 
> user _clamav label "Rule:$nr on $if interface. Freshclam HTTP Out."
> block out quick log inet  proto { tcp udp } from self to any group _clamav 
> label "Rule:$nr on $if interface. Block Freshclam."
> block out quick log inet6 proto { tcp udp } from self to any group _clamav 
> label "Rule:$nr on $if interface. Block Freshclam."
> 
> # ---=== Outbound Access: from root ===---
> pass  out quick log inet  proto { tcp } from self port >1023 to any port 80  
> user root label "Rule:$nr on $if interface. Root HTTP Out."
> pass  out quick log inet6 proto { tcp } from self port >1023 to any port 80  
> user root label "Rule:$nr on $if interface. Root HTTP Out."
> pass  out quick log inet  proto { tcp } from self port >1023 to any port 443 
> user root label "Rule:$nr on $if interface. Root HTTPS Out."
> pass  out quick log inet6 proto { tcp } from self port >1023 to any port 443 
> user root label "Rule:$nr on $if interface. Root HTTPS Out."
> block out quick log inet  proto { tcp udp } from self to any user  root  
> label "Rule:$nr on $if interface. Block root out."
> block out quick log inet6 proto { tcp udp } from self to any user  root  
> label "Rule:$nr on $if interface. Block root out."
> block out quick log inet  proto { tcp udp } from self to any group wheel 
> label "Rule:$nr on $if interface. Block wheel out."
> block out quick log inet6 proto { tcp udp } from self to any group wheel 
> label "Rule:$nr on $if interface. Block wheel out."
> 
> # ---=== Outbound Access: from dirk ===---
> pass  out quick log inet  proto { tcp } from self port >1023 to any port 22  
> user dirk label "Rule:$nr on $if interface. Dirk SSH Out."
> pass  out quick log inet6 proto { tcp } from self port >1023 to any port 22  
> user dirk label "Rule:$nr on $if interface. Dirk SSH Out."
> pass  out quick log inet  proto { tcp } from self port >1023 to any port 43  
> user dirk label "Rule:$nr on $if interface. Dirk Whois Out."
> pass  out quick log inet6 proto { tcp } from self port >1023 to any port 43  
> user dirk label "Rule:$nr on $if interface. Dirk Whois Out."
> pass  out quick log inet  proto { tcp } from self port >1023 to any port 80  
> user dirk label "Rule:$nr on $if interface. Dirk HTTP Out."
> pass  out quick log inet6 proto { tcp } from self port >1023 to any port 80  
> user dirk label "Rule:$nr on $if interface. Dirk HTTP Out."
> pass  out quick log inet  proto { tcp } from self port >1023 to any port 443 
> user dirk label "Rule:$nr on $if interface. Dirk HTTPS Out."
> pass  out quick log inet6 proto { tcp } from self port >1023 to any port 443 
> user dirk label "Rule:$nr on $if interface. Dirk HTTPS Out."
> block out quick log inet  proto { tcp udp } from self to any group dirk label 
> "Rule:$nr on $if interface. Block Dirk."
> block out quick log inet6 proto { tcp udp } from self to any group dirk label 
> "Rule:$nr on $if interface. Block Dirk."
> 
> # ---=== ICMP Outbound Rules ===---
> pass  out quick log inet  proto icmp  from self  to any icmp-type  
> $icmp_useful   label "Rule:$nr on $if interface. ICMP Outbound."
> pass  out quick log inet6 proto icmp6 from self  to any icmp6-type 
> $icmp6_useful  label "Rule:$nr on $if interface. ICMP6 Outbound."
> block out quick log inet  proto icmp  from self  to any                       
>     label "Rule:$nr on $if interface. ICMP Outbound."
> block out quick log inet6 proto icmp6 from self  to any                       
>     label "Rule:$nr on $if interface. ICMP6 Outbound."
> 
> # ---=== ICMP Inbound Rules ===---
> pass  in  quick log inet  proto icmp  from any to self icmp-type 8 code 0 
> keep state label "Rule:$nr on $if interface. ICMP Inbound."
> block in  quick log inet  proto icmp  from any to self                        
>        label "Rule:$nr on $if interface. ICMP Inbound."
> block in  quick log inet6 proto icmp6 from any to self                        
>        label "Rule:$nr on $if interface. ICMP6 Inbound."
> 
> # ---=== Block Reverse Path Verify Fail ===---
> block in  quick log inet  from urpf-failed     label "Rule:$nr on $if 
> interface. Block reverse patch verify failures."
> block in  quick log inet6 from urpf-failed     label "Rule:$nr on $if 
> interface. Block reverse patch verify failures."
> block in  quick log inet  from no-route to any label "Rule:$nr on $if 
> interface. Block non routable traffic."
> block in  quick log inet6 from no-route to any label "Rule:$nr on $if 
> interface. Block non routable traffic."
> 
> # ---=== Cleanup Rules ===---
> block  in quick log inet6 from any label "Rule:$nr on $if interface - Cleanup 
> IPv6 *in* Rule."
> block  in quick log inet6 to   any label "Rule:$nr on $if interface - Cleanup 
> IPv6 *in* Rule."
> block out quick log inet6 from any label "Rule:$nr on $if interface - Cleanup 
> IPv6 *out* Rule."
> block out quick log inet6 to   any label "Rule:$nr on $if interface - Cleanup 
> IPv6 *out* Rule."
> block  in quick log inet  from any label "Rule:$nr on $if interface - Cleanup 
> IPv4 *in*  Rule."
> block  in quick log inet  to   any label "Rule:$nr on $if interface - Cleanup 
> IPv4 *in*  Rule."
> block out quick log inet  from any label "Rule:$nr on $if interface - Cleanup 
> IPv4 *out* Rule."
> block out quick log inet  to   any label "Rule:$nr on $if interface - Cleanup 
> IPv4 *out* Rule."
> block     quick log            all label "Rule:$nr on $if interface - Last 
> match Cleanup Rule."
> block           log                label "Rule:$nr on $if interface - 
> Stateless  Cleanup Rule." 
> 

-- 
 

Reply via email to