Hi,
I use 'puppet' for this to manage over 20 OpenBSD firewalls now.
I don't know how I would manage without it to be honest ;)

Puppet manages all my pf's (by simply defining multiple files, each containing different common parts for different zones/roles etc, and then site specific files etc. Using puppet to 'include' each of the different parts as necessary, I only have to maintain one code base in git, make one change to just the one appropriate file, and then push out that pf change to every single/or group of firewalls using puppet to do the leg work.

This provides control and 'standardisation' across everything :)

I also use it to manage, and deploy many various different daemons including Snort etc which signals alerts via syslog to a central OSSIM server for event correlation.

Anyway, the main point I'm suggesting is it sounds like you need a change control and deployment system like puppet if you have that many and are growing.

It took me about 4 or 5 months to develop a complete puppet code base which manages every aspect of our OpenbSD firewalls, and as a result I can now keep up with change requests and deploy to the entire fleet in a matter of minutes without getting myself in a tangle trying to remember everything/special cases, and most importantly get close to the holly grail of 'standardisation' and 'normalisation' ;)

https://puppetlabs.com/
http://projects.puppetlabs.com/projects/1/wiki/Puppet_Books

Hope this helps, Andrew Lemin


On Thu 11 Jul 2013 12:18:13 BST, Jummo wrote:
Hi,

How do you manage your pf.conf?

My setup: I have 9 firewalls with carp and each with around 500 lines
of pf.conf, except one firewall, later more. I edit the pf.conf
manually. Every logical pf rule has a unique identifier (a number)
which I add manually and maps to the rule on a wiki page. The wiki
page has this format.

START WIKI PAGE

=== Firewall

This firewall is for ...

==  ID

A ID identify one or more rules for a particular service. Please use the
next free ID.

    Last used ID: 21

== Changelog

No | Date | Action | Executed by

== Tables

Table | Content

== NAT/Redirection

ID | Description | Source | Port | Destination | Port | NAT-To |
Redirect-To |
Protocol | Date

== Rules

ID | Description | Direction (outgoing/incoming/forwarded) | Source |
Port | Destination | Port | Protocol | Date

END WIKI PAGE

I use a script to manually copy the changed pf.conf to the
corresponding carp partner to keep the firewall pair in sync. Idea: To
check the sync state of pf.conf, Icinga cloud compare the file date of
the two pf.conf.

This works quiet good for me and my firewalls with one exception, my
big fat central router/firewall. This firewall has around 2000 lines
of pf.conf, is attached with 12 VLAN interfaces and get slowly
unmanageable with this concept.

How to you manage such big firewalls? Do you split the pf.conf into
logical parts? Do you use a base structure for every pf.conf? Do you
use a tool for automatic creation of pf.conf? How do you tests your
old rules after you changed something?

I'm happy about any feedback.

Best Regards,
Patrick

Reply via email to