An advantage of using a directory server to store policy information as opposed to more traditional methods of locally stored configuration is the ability to make a change in one place and have that change applied across all the devices in the extended network. This includes devices in the local administrative domain as well as devices across public boundaries. Take for example, a IPSEC Transform definition that resides in the directory. To change the corporate policy for encryption from DES to 3DES normally would require a change in the configuration of each device in the extended network. If the directory server is used to deploy the policies then one IPSEC transform would need to be changed in the LDAP server and then each policy enabled device in the network would need to rebuild the internal policy database. Another good example would be if a DiffServ action named "GoldService" needed to be changed from 40% of bandwidth to 45% of bandwidth. The LDAP server and policy infrastructure allows these types of configuration changes to scale much better and reduce configuration mismatches.
To take advantage of this feature a LDAP server operating at RFC Version 2 or 3 is required. IBM's SecureWays LDAP server is the recommended implementation, however any LDAP server should work. There are a couple of LDAP packages freely available on the internet (namely OpenLdap and the University of Michigan implementation).
LDAP Schema is the set of rules and information that comprise the class and attribute definitions that define the entries that ultimately exist in the directory. LDAP schema is typically written in ASN1 syntax similar to SNMP MIBs. The Policy Schema developed for the IBM routers is based on pre-standard efforts being worked on in the IETF by the IPSEC and Policy Working Groups. Every class definition consists of a set of attributes that define the class. The attributes are either required attributes or allowed attributes. Required attributes are ones which must be present when the object is added or modified in the LDAP server. Allowed attributes are ones which may or may not be included in the object definition. If they are not included then the default value will be used by the policy search agent in the router when parsing the object from the LDAP server. The default values for each attribute can be found in the ibmPolicySchema.txt file included in this package.
Two key objects in the Policy schema that allow the Policy Search Agent to search for and find the necessary policies for the device are the DeviceProfile and the DevicePolicyRules. The DeviceProfile has information about the device's mandatory DevicePolicyRules reference. Devices can be grouped together into one DeviceProfile or each device in the network can have it's own DeviceProfile. This really will depend on whether more than one box in the network needs to fetch the same set of rules. Typically for Security Gateways this will not be true since every gateway will have a different tunnel endpoint. For QOS only boxes, it would be conceivable that a group of devices would all read the same set of policies.
The DevicePolicyRules object will be retrieved based on the value in the DeviceProfile that is fetched for the device. Once the DevicePolicyRules object has been retrieved, then the list of PolicyRules for that device can be retrieved. If any of the objects are not found or if an error is detected during a consistency check on a object then the search is aborted and messages will be displayed for the PLCY ELS subsystem denoting the error detected.
The Policy Schema closely matches the configuration objects in the Policy Feature on the router. Perform the configuration steps to add a policy in talk 6, feature policy to acquaint yourself with the policy objects and their relationships.
Two files are included in this package to help the administrator get started deploying policies in the LDAP server.
An easy way to manage the information residing in the LDAP server is
to keep a master LDIF file which represents all the definitions residing
in the LDAP server. Any modifications or additions are made directly to
this file and the ldapmodify command may be used to apply these changes
to the
LDAP server. This also allows the administrator to have a text file
backup in the event that the LDAP server needs to be restored.
To make modifications use the following syntax of the ldapmodify command:
ldapmodify -h <hostname> -D <user dn> -w <password> -rc -f out.ldif
Primary Server Address: 11.0.0.1
Secondary Server Address: 0.0.0.0
Search timeout value: 3 sec(s)
Retry interval on search failures: 1 min(s)
Server TCP port number: 389
Server Version number: 2
Bind Information:
Bind Anonymously: No
Bind Name: cn=root
Base DN for this device's policies: cn=deviceProfileForSG1, o=ibm,
c=us
Retrieve policies from LDAP Server Only
*
*TALK 5
+EVENT
Event Logging System user console
ELS>NODISPLAY SUBSYSTEM all all
Complete
ELS>DISPLAY SUBSYSTEM PLCY ERROR
ELS>DISPLAY EVENT PLCY.22
ELS>DISPLAY EVENT PLCY.26
ELS>EXIT
+FEATURE Policy
IP Network Policy console
Policy console>RESET LDAP-CONFIG
LDAP Policy Configuration reset successfully
Policy console>RESET DATABASE
Policy Database reset successful
Policy console>
A sample ELS message output is shown below:
21:09:03 PLCY.022: Found object (DN: cn=policySecure11to12,
o=ibm, c=us), parse using class def PolicyRule
21:09:03 PLCY.022: Found object (DN: cn=11to12, o=ibm,
c=us), parse using class def TrafficProfile
21:09:03 PLCY.022: Found object (DN: cn=allTheTime,
o=ibm, c=us), parse using class def PolicyValidityPeriod
21:09:03 PLCY.022: Found object (DN: cn=secure11to12,
o=ibm, c=us), parse using class def IPSecSecurityAction
21:09:03 PLCY.022: Found object (DN: cn=generalPhase1Action,
o=ibm, c=us), parse using class def IPSecISAKMPAction
21:09:03 PLCY.022: Found object (DN: cn=strongP2EspProp,
o=ibm, c=us), parse using class def IPSecProposal
21:09:03 PLCY.022: Found object (DN: cn=strongP2EspAhProp,
o=ibm, c=us), parse using class def IPSecProposal
21:09:03 PLCY.022: Found object (DN: cn=veryStrongP2EspProp,
o=ibm, c=us), parse using class def IPSecProposal
21:09:03 PLCY.022: Found object (DN: cn=veryStrongP2EspAhProp,
o=ibm, c=us), parse using class def IPSecProposal
21:09:03 PLCY.022: Found object (DN: cn=veryStrongP1PropRSACert,
o=ibm, c=us), parse using class def ISAKMPProposal
21:09:03 PLCY.022: Found object (DN: cn=strongP1PropRSACert,
o=ibm, c=us), parse using class def ISAKMPProposal
21:09:03 PLCY.022: Found object (DN: cn=veryStrongP1PropSharedKey,
o=ibm, c=us), parse using class def ISAKMPProposal
21:09:03 PLCY.022: Found object (DN: cn=strongP1PropSharedKey,
o=ibm, c=us), parse using class def ISAKMPProposal
21:09:03 PLCY.022: Found object (DN: cn=espTunnelMD5andDES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:03 PLCY.022: Found object (DN: cn=espTunnelSHAandDES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:03 PLCY.022: Found object (DN: cn=espTunnelDES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:03 PLCY.022: Found object (DN: cn=ahTunnelMD5,
o=ibm, c=us), parse using class def IPSecTransform
21:09:03 PLCY.022: Found object (DN: cn=ahTunnelSHA,
o=ibm, c=us), parse using class def IPSecTransform
21:09:03 PLCY.022: Found object (DN: cn=espTunnelSHAand3DES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:03 PLCY.022: Found object (DN: cn=espTunnelMD5and3DES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:03 PLCY.022: Found object (DN: cn=espTunnel3DES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:03 PLCY.022: Found object (DN: cn=ahTunnelSHA,
o=ibm, c=us), parse using class def IPSecTransform
21:09:03 PLCY.022: Found object (DN: cn=ahTunnelMD5,
o=ibm, c=us), parse using class def IPSecTransform
21:09:03 PLCY.022: Found object (DN: cn=gatewayToLdapServerPolicy,
o=ibm, c=us), parse using class def PolicyRule
21:09:04 PLCY.022: Found object (DN: cn=gatewaysToLDAPServer,
o=ibm, c=us), parse using class def TrafficProfile
21:09:04 PLCY.022: Found object (DN: cn=secureLdapServer,
o=ibm, c=us), parse using class def IPSecSecurityAction
21:09:04 PLCY.022: Found object (DN: cn=strongP2EspProp,
o=ibm, c=us), parse using class def IPSecProposal
21:09:04 PLCY.022: Found object (DN: cn=strongP2EspAhProp,
o=ibm, c=us), parse using class def IPSecProposal
21:09:04 PLCY.022: Found object (DN: cn=veryStrongP2EspProp,
o=ibm, c=us), parse using class def IPSecProposal
21:09:04 PLCY.022: Found object (DN: cn=veryStrongP2EspAhProp,
o=ibm, c=us), parse using class def IPSecProposal
21:09:04 PLCY.022: Found object (DN: cn=espTunnelMD5andDES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=espTunnelSHAandDES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=espTunnelDES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=ahTunnelMD5,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=ahTunnelSHA,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=espTunnelSHAand3DES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=espTunnelMD5and3DES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=espTunnel3DES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=ahTunnelSHA,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=ahTunnelMD5,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=remoteAccessto11,
o=ibm, c=us), parse using class def PolicyRule
21:09:04 PLCY.022: Found object (DN: cn=remoteUserto11,
o=ibm, c=us), parse using class def TrafficProfile
21:09:04 PLCY.022: Found object (DN: cn=secureRemoteAccessUsersTo11,
o=ibm, c=us), parse using class def IPSecSecurityAction
21:09:04 PLCY.022: Found object (DN: cn=strongP2EspPropXport,
o=ibm, c=us), parse using class def IPSecProposal
21:09:04 PLCY.022: Found object (DN: cn=strongP2EspAhPropXport,
o=ibm, c=us), parse using class def IPSecProposal
21:09:04 PLCY.022: Found object (DN: cn=veryStrongP2EspPropXport,
o=ibm, c=us), parse using class def IPSecProposal
21:09:04 PLCY.022: Found object (DN: cn=veryStrongP2EspAhPropXport,
o=ibm, c=us), parse using class def IPSecProposal
21:09:04 PLCY.022: Found object (DN: cn=espTransportMD5andDES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=espTransportSHAandDES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=espTransportDES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=ahTransportMD5,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=ahTransportSHA,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=espTransportSHAand3DES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=espTransportMD5and3DES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=espTransport3DES,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=ahTransportSHA,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=ahTransportMD5,
o=ibm, c=us), parse using class def IPSecTransform
21:09:04 PLCY.022: Found object (DN: cn=dropPublicTrafficSG1,
o=ibm, c=us), parse using class def PolicyRule
21:09:04 PLCY.022: Found object (DN: cn=inOutPublicSG1,
o=ibm, c=us), parse using class def TrafficProfile
21:09:04 PLCY.022: Found object (DN: cn=ipsecDrop,
o=ibm, c=us), parse using class def IPSecSecurityAction
21:09:04 PLCY.026: Completed building policy DB,
13 rules loaded
An alternative way to cause the policy database in the router to reload the policies from the LDAP server is to perform an SNMP set. Please refer to the vpnpolicy.mib file which can be found under the MIB download page (http://www.networking.ibm.com/support/code.nsf/mibscode). The name of the object in the vpnpolicy MIB to set is the "vpSysRefreshConfig". It may be useful to build a script which sets this object for each policy enabled router in the network.
LDAP server information:
This should return exactly one result. If this step fails then make sure the authentication information is correct and check the error logs on the LDAP server for other information. Also make sure that the LDAP server is listening on port 389 (the default). Resolve this errors before moving on to step 3.
dn: cn=deviceProfileForSG1, o=ibm, c=us
objectclass: deviceprofile
cn: deviceProfileForSG1
devicerulesreference: cn=rulesForSG1, o=ibm, c=us
creatorsname: cn=root
modifiersname: cn=root
createtimestamp: 19990524193651Z
modifytimestamp: 19990524193651Z
1 results returned from ldap search
-----------------------------------------------------------
If no results are returned then make sure that no access controls are
turned on preventing you from reaching the LDAP server on port 389.
Also increasing the LDAP search timeout value may help if the LDAP server
lies across an extremely slow speed connection or you are experiencing
significant congestion in your network. Do not proceed to step 4 until
this operation completes.
In the policy feature in talk 5, type "reset database" and then proceed
to the monitoring process (talk 2) and determine which error the policy
subsystem is encountering. Resolve the configuration issue in the LDAP
directory and repeat step 4 until there are no more errors.