-
Notifications
You must be signed in to change notification settings - Fork 0
Bender - Manage Firewall Policy
License
tpbrisco/bender
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Bender Manage your firewall rules in a better way - track and maintain your policy. Most organizations try to manage firewall rules by involving their users in the low-level details, use technical staff to formulate, validate and assess firewall rules, manually determine where they should be implemented, craft the syntax, and install them during an infrequent maintenance window. Arcane naming schemes are used to try and associate these low-level details with applications, customers are tracked in spreadsheets or sharepoint. What is manageable chaos in small environments, quickly turns into a indecipherable mess of device configuration, and staff lose track of why or how a rule is used, why it is in the firewall, when or if it can be removed - and security is rapidly eroded. Ultimately, the business cannot accomplish their goals. The fundamental failures are (a) Policy (the high level statements) is lost in the device rules (the low level syntax), and (b) Devices implementing the rules are the wrong place to "store" all this information. If the above sounds like your current experience with firewalls, you should consider the approach here. Instead of the typical "access-list permit" approach, instead think of "TheseHosts" need to communicate to "ThoseHosts" for "ThisService" By understanding the systems involved (the "thesehosts" and "thosehosts") and the services provided by the applications (the "thisservice"), the rest of what is needed can be easily derived, changed, updated and validated -- all before you even lay a hand on a firewall. "TheseHosts" want to communicate to "ThoseHosts" for "ThisService" Groups Of Hosts use a Service Template to gain access to Groups Of Hosts. A Policy group defines the current and allowable sets of rules A simple policy might include Host Groups Group Member Type Owner workstation huey user walt workstation louie user walt server pluto genpop jerri server goofy genpop jerri Service Template Name Port Protocol Transport Owner domain 53 tcp dns daffy domain 53 udp dns daffy time 123 udp ntp scrooge Policy Groups Name Source Destination Template basic_service workstation server domain basic_service workstation server time The above say that "workstations can access basic_service on server". From this data, the basic data for various firewalls is available (see "Policy Rendering"), and correct syntax can be easily generated. Day to Day Policy Management: Manage and maintain the host groups Manage and maintain the service template Manage and maintain policy statements This is the basis of it all. These group/group/template approaches allow management of policy at a higher level - enabling tracking of all relationships back to the original policy statement. The policy statement (the "allow TheseHosts to access ThoseHosts for ThatService") is managed in the policy database. Using the host and service templates, the policy can be "rendered" to the source, destination and protocols -- the set of end-to-end permissions can be determined - this looks a lot more like the traditional <source,destination,protocol> tuples that people who manage firewalls are used to seeing. However, these only describe the end-to-end state, and don't describe all devices in the path. The rendered policy (or "SDP" - source/destination/protocol) rules can then be mapped to the network topology to determine the actual configuration statements that are necessary to enable the original policy statement. But I also need to ... There is a lot of meta-data that needs tracking to understand the provenance (the history and control) of policy, rules and services and host groups. This tends to vary widely across different organizations, and may include date/age of the policy or rule, who made the change, who the various owners are (service, server, risk), and so forth. The approach to resolve this is to make the system data-driven, rather than control driven. WHATEVER fields you define in the databases will be tracked and managed. Need to add a new field? Stop the system, and update the database with a new column that you need. It will then be available in all matching/searching operations. Some recommended fields: start/stop dates - this allows tracking of history of rules by never actually deleting data from the system. If a rule needs to be "deleted", simply set the end date to the current date. If a rule needs to be updated, then set the end date on the old record, and start a new record. In this approach, policy statements can be set to "reconfirm" at some date, and the entire history of the policy is available by looking at records without regards to the dates. owners and risk party - track the owner of the server or service separately from the party that signs off on the risk. This is the bases for the control gates in work-flows to allow sign-offs and cross-checking and audit functionality. Some required fields: To work generically, a minimum set of fields are required (though matching/searching operations can occur across all available fields). Note that the required fields are _not_ enough to generate valid configuration in a running network - just enough to tell different things apart. For example; the SDP database doesn't require protocol (tcp or udp), but those would be necessary to generate valid ACLs. Required fields for databases (the column names are capitalized)- * Host Groups: NAME of the group, and MEMBER of the group * Service Templates: NAME of the service, and PORT that it uses, PROTOCOL and DIRECTION * Policy Database: NAME, SOURCE, DESTINATION, TEMPLATE * SDP Database: GROUP, NAME, SOURCE, DESTINATION, DIRECTION PORT, PROTOCOL, SOURCE_IP, DESTINATION_IP Does it work on a Juniper/Cisco/etc? Since only the data is stored and manipulated, the last steps of generating valid configuration involve (a) determining the topology and devices, (b) translating the SDP sets into configuration language. From a <source, destination, port, protocol> tuple, it is pretty trivial to generate valid configuration for IOS ACLs, IP Tables, or what have you. An example "ios-genpol.py" is included as an example of reading the SDP tuples, and wrapping platform syntax around it. Getting Started Bender is written as a python class library - but includes some example code at the bottom of the "bender.py" for some trivial examples. For a more complete demonstration, consider the examples using Flask in either "bender_ui" (using CSV formatted files), or "benders_ui" (using MariaDB). Example policy-generating code is in asa-genpol[s].py, and ios-genpol[s].py. Once the demonstration is running, you can use these programs to generate configuration for the indicated platform. ;; Local Variables: ;; mode: text ;; fill-column: 78 ;; End:
About
Bender - Manage Firewall Policy
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published