Security Policy Best Practices
Version 0.3
A good starting point for good firewall policy is good network design. The ability to use network objects instead of many node objects will result in a more supportable policy. Establish an architecture to your network. Allocate blocks for each part of you network. Use a different IP block for you DMZ than you use for you Internal users, and a different block for Internal servers. Think about potential usage 10 years out. Allocate more IP space for each need than you believe you'll ever use in a decade. A nice roomy network design will allow for flexibility and easier management over time. This will not only help you make efficient, supportable firewall policy, but also nice small summarized and human recognizable routing tables.
Guide lines:
1. Don't use 'Any' in the Source, Destination, or Service fields for Accept rules. There may be good reasons, but they are few and far between.
2. Create a group object that represents either the DMZ subnets, or a network object for the larger network block from which DMZ subnets are allocated.
3. Create a group object that represents either the Internal subnets, or a network object for the larger network block from which Internal subnets are allocated.
4. Create a group object that contains the Internal and DMZ subnets/blocks. Use this group in it's negated form to represent the Internet. A group with exclusion will work as well. Many people don't realize that when they use 'Any' for source or destination, they are including their Internal and DMZ subnets. Do you really need some DMZ server to http/ftp to all Internal servers and workstations? Do you really mean all other DMZ servers can http/ftp/etc. to the publicly accessible DMZ server?
5. Utilize a naming convention. It will make finding/using/reading/supporting objects and policy easier.
6. Use those section titles and description fields. Even you will forget why, and for whom, you wrote that rule 18 months from now.
Firewall Policy; Major Sections
Firewall Management
Allow the firewall(s) to be managed. Allow any service to the firewall from various management platforms. Depending on your environment, you may want to allow the firewalls to connect to each other.
Example:
Code:
[Source] [Destination] [Service] [Action]
Denver-Firewalls (Group) VRRP-MCAST vrrp Accept
Denver-Firewalls (Group) Denver-Firewalls (Group) ssh Accept
Firewall-Admins (Group) Denver-Firewalls (Group) ssh,https Accept
FirewallManagementServer Denver-Firewalls (Group) ssh Accept
NetworkManagementServer Denver-Firewalls (Group) snmp Accept
Stealth Rule
. Any to Firewall, Drop
A staple in the firewall community. Protect the firewalls.
Example:
Code:
[Source] [Destination] [Service] [Action]
Any Denver-Firewalls (Group) Any Drop
Client VPN Rules (SecuRemote/SecurClient)
I've found that putting the user vpn rules directly following the stealth prevents so many future problems. If you plan to manage the firewalls via a VPN, then you'll need to place a specific rule in Firewall Management section of the policy.
Here, we want to be specific about the source IPs a VPN will use. If you're using SecuRemote, then IP Pool NAT is assumed to be in use.
At the end of this section
Example:
Code:
[Source] [Destination] [Service] [Action] [VPN]
SecureClientUsers@ClientVPN-IP-Pool Internal-Servers (Group) TCP-3389 Accept SecurRemote
SecureClientUsers@ClientVPN-IP-Pool Internal-DNS (Group) dns (Group) Accept SecurRemote
SecureClientUsers@Any Any Any Drop Any
ClientVPN-IP-Pool Any Any Drop Any
Any ClientVPN-IP-Pool Any Drop Any
Site-to-Site VPN rules
. Specific hosts/networks within Encyption Domains to other hosts/network in Encryption Domains, Accept
. VPN Encryption Domains to VPN Encryption Domains, Drop
. Any to Remote VPN Encryption Domains, Drop
Example:
Code:
[Source] [Destination] [Service] [Action] [VPN]
LocalServer RemoteServer TCP-12132_WackyDevGuys Accept Customer1-VPN
LocalEncryptionDomain RemoteEncryptionDomain Any Drop Any
RemoteEncryptionDomain LocalEncryptionDomain Any Drop Any
Any RemoteEncryptionDomain Any Drop Any
High Traffic Rules
Example:
Code:
[Source] [Destination] [Service] [Action]
DNS-Servers(Group) ! Internal-Subnets(Group) dns(Group) Accept
{Negated}
Network Management
. Network Admins to Management subnets, Accept
. Network Management server to Internal/DMZ subnets, Accept
Example:
Code:
[Source] [Destination] [Service] [Action]
NetworkManagementServer Internal-Networks (Group) snmp,icmp Accept
NetworkManagementServer DMZ-Networks (Group) snmp,icmp Accept
ServerAdmins (Group) Internal-Server-Nets (Group) ssh,TCP-3389 Accept
NetworkAdmins (Group) Internal-Networks (Group) ssh,telnet Accept
DMZ Rules (Part 1 of 3, Inter-DMZ)
. DMZ to DMZ Rules, Accept
. Inside to DMZs, Accept
. DMZs to Inside, Accept
There are many schools on creation of DMZ rules. Your preference should be influenced by the supportability and scalability within your environment. Smaller environments may combine the first two DMZ sections together. Larger environments will likely further divide by Application, DMZ, Application components, DMZ purpose, among other criteria. Below, I'll given basic examples for both small and large environments.
Example (small):
Code:
[Source] [Destination] [Service] [Action]
Internet (Negated Group of Internal/DMZ subnets) WebServer http,https Accept
WebServer Internal-Database oracle2 Accept
Internet (Negated Group of Internal/DMZ subnets) MailServer-Inbound smtp Accept
MailServer-Inbound Internal-MailServer smtp Accept
MailServer-Outbound Internet smtp Accept
Example (large):
Code:
[Source] [Destination] [Service] [Action]
SECTION TITLE - E-Mail
MailServer-Inbound Internal-MailServer smtp Accept
MailServer-Outbound Internet smtp Accept
OWA-WebMail ExchangeServer http,AD-Group Accept
SECTION TITLE - Ecommerce App
WebServerFarm(Group) DMZ-Database-Server oracle2 Accept
SECTION TITLE - SSL VPN App
SSLvpnApplicance Resources(Group) ServicesGRP Accept
DMZ Rules (Part 2 of 3, Internet to/from DMZs)
. DMZ Hosts/Subnets to Internet (Negated Group of Internal/DMZ subnets), Accept
. Internet (Negated Group of Internal/DMZ subnets) to DMZ Hosts/Subnets, Accept
Example (large):
Code:
[Source] [Destination] [Service] [Action]
SECTION TITLE - E-Mail_Internet
Internet (Negated Group of Internal/DMZ subnets) MailServer-Inbound smtp Accept
Internet (Negated Group of Internal/DMZ subnets) OWA-WebMail https Accept
SECTION TITLE - Ecommerce App Internet
Internet (Negated Group of Internal/DMZ subnets) WebServerFarm(Group) http,https Accept
SECTION TITLE - SSL VPN App Internet
Internet (Negated Group of Internal/DMZ subnets) SSLvpnApplicance https Accept
DMZ Rules (Part 3 of 3, Drop all DMZ traffic)
. DMZ subnets to Any, Drop
. Any to DMZ subnets, Drop
Example:
Code:
[Source] [Destination] [Service] [Action]
DMZ-Subnets(Group) Any Any Drop
Any DMZ-Subnets(Group) Any Drop
Internal Out - Specific
. Internal Hosts/Subnet to Specific Internet Hosts, Accept
Example:
Code:
[Source] [Destination] [Service] [Action]
Internal-Server Microsoft-Updates(Group) http Accept
workstation_rpeterman remote-extranet-server ftp Accept
restrictedUsers@UsersSubnet remote-server telnet ClientAuth
UsersSubnet remote-server telnet Drop
Internal Out - General
. Internal Hosts/Subnet to Internet (Negated Group of Internal/DMZ subnets), Accept
Example:
Code:
[Source] [Destination] [Service] [Action]
UserSubnet Internet (Negated Group of Internal/DMZ subnets) http,https Accept
Executives Internet (Negated Group of Internal/DMZ subnets) YahooIM Accept
Clean up
. Any to Any, Drop
Example:
Code:
[Source] [Destination] [Service] [Action] [Log]
Any Any NetBIOS Drop Don't_Log
Any Any Any Drop Log
---
* This post will be edited with additional content and documentation over time.
** For those of you who disable implied rules, I'll be happy add your standard policy to the Firewall Management section if submitted.
Changes:
. Corrected Site-to-Site VPN section.
Bookmarks