Hi,

I would start by naming your internal interface variables in a meaningful way.  
It would make things much more readable for yourself and reduce the risk of a 
mental mistake.

Eg:
int_lan1
int_lan2
int_dmz

And similarly with int_net1.

Just a thought...

Cheers,
Steve W


On April 27, 2025 5:25:07 p.m. PDT, Sha'ul <sh...@riseup.net> wrote:
>I am trying to write my first ruleset for router and firewall, how can I
>trim the ruleset?
>
>set skip on lo
>
>block return    # block stateless traffic
>pass            # establish keep-state
>
># By default, do not permit remote connections to X11
>block return in on ! lo0 proto tcp to port 6000:6010
>
>block return out log proto {tcp udp} user _pbuild
>
>ext_if = "igc0"         # External interface (WAN)
>int_if1 = "igc1"        # Internal LAN 1
>int_if2 = "igc2"        # Internal LAN 2
>int_if3 = "igc3"        # DMZ
>wifi_if = "iwx0"        # Wireless interface
>
># External (WAN) IP and Internal network definitions
>ext_ip = "your.external.ip"   # Public IP address (replace with actual)
>int_net1 = "192.168.1.0/24"   # LAN 1 subnet
>int_net2 = "192.168.2.0/24"   # LAN 2 subnet
>int_net3 = "192.168.3.0/24"   # DMZ subnet
>wifi_net = "192.168.4.0/24"   # Wireless network subnet
>
>scrub in all
>
>block all
>
>pass quick on lo0 all
>
>pass quick on $int_if1 from $int_net1 to any keep state
>pass quick on $int_if2 from $int_net2 to any keep state
>pass quick on $int_if3 from $int_net3 to any keep state
>pass quick on $wifi_if from $wifi_net to any keep state
>
># NAT rules for outbound traffic from internal networks
>nat on $ext_if from $int_net1 to any -> ($ext_if)
>nat on $ext_if from $int_net2 to any -> ($ext_if)
>nat on $ext_if from $int_net3 to any -> ($ext_if)
>nat on $ext_if from $wifi_net to any -> ($ext_if)
>
>pass in on $ext_if proto tcp from any to $ext_ip port { 80, 443 } keep
>state
>
>pass in on $ext_if proto tcp from { 192.168.1.0/24, 192.168.2.0/24 } to
>$ext_ip port 22 keep state
>
>pass in on $ext_if proto tcp from any to $int_net3 port 80 keep state
>pass in on $ext_if proto tcp from any to $int_net3 port 443 keep state
>
>pass in on $int_if1 from $int_net1 to $int_net2 keep state
>pass in on $int_if2 from $int_net2 to $int_net1 keep state
>
># Allow internal networks to access wireless network
>pass in on $int_if1 from $int_net1 to $wifi_net keep state
>pass in on $int_if2 from $int_net2 to $wifi_net keep state
>
>pass in on $wifi_if from $wifi_net to $int_net1 keep state
>pass in on $wifi_if from $wifi_net to $int_net2 keep state
>pass in on $wifi_if from $wifi_net to $int_net3 keep state
>
>pass in on $int_if1 from $int_net1 to $int_net3 keep state
>pass in on $int_if3 from $int_net3 to $int_net1 keep state
>
>pass in on $ext_if proto icmp all icmp-type echoreq keep state
>pass in on $int_if1 proto icmp all icmp-type echoreq keep state
>pass in on $int_if2 proto icmp all icmp-type echoreq keep state
>pass in on $int_if3 proto icmp all icmp-type echoreq keep state
>pass in on $wifi_if proto icmp all icmp-type echoreq keep state

Reply via email to