Cisco ACNS Software Caching and Streaming Configuration Guide, Release 5.1
Chapter 8: Configuring Content Authentication and Authorization

Table Of Contents

Configuring Content Authentication and Authorization

Understanding Content Authentication and Authorization

Understanding HTTP Request Authentication

Understanding Proxy Server Mode HTTP Request Authentication

Understanding Transparent Mode HTTP Request Authentication

Configuring HTTP Request Authentication

Usage Guidelines

Configuring the Authentication Cache Size

Configuring Authentication Cache Size Using the Content Engine GUI

Configuring Authentication Cache Size Using CLI Commands

Configuring RADIUS Authentication for HTTP Requests

Enabling RADIUS Authentication of HTTP Requests Using the Content Engine GUI

Configuring RADIUS Authentication of HTTP Requests Using CLI Commands

Configuring TACACS+ Authentication of HTTP Requests

Configuring LDAP Authentication of HTTP Requests

Default Settings for LDAP Authentication of HTTP Requests

Understanding the Structure of the LDAP Database

About LDAP Directory Searches

Querying LDAP Servers for User Membership Information

Searching for User Account Information for Individuals in an LDAP Database

Searching for User Account Information for LDAP Direct Static Groups

Searching for User Account Information for LDAP Nested Static Groups

Configuring LDAP Authentication of HTTP Requests Using the Content Engine GUI

Configuring LDAP Authentication of HTTP Requests Using CLI Commands

Configuring NTLM Authentication for HTTP Requests

Configuring Group-Based Authorization

Configuring the LDAP Acceptable Use Policy Feature

Configuring the LDAP Password Expiration Feature

About Group Name-Based Access Lists

Configuring Group-Based Authorization Using the Content Engine GUI

Configuring Group-Based Authorization Using CLI Commands

LDAP Group-Based Authorization

Configuring LDAP Group Authorization with Access Lists

NTLM Group-Based Authorization

Active Directory Group Searches

Configuring NTLM Group Authorization with Access Lists

Configuring End-to-End Authentication

Basic End-to-End Authentication

NTLM End-to-End Authentication

Example of End-to-End NTLM Authentication


Configuring Content Authentication and Authorization


This chapter describes how to configure content authentication and authorization for a locally deployed Content Engine. This chapter contains the following sections:

Understanding Content Authentication and Authorization

Configuring HTTP Request Authentication

Configuring Group-Based Authorization

Configuring End-to-End Authentication


Note Content authentication and authorization is independent of the login (user) authentication and authorization. For information about login authentication and authorization, see "Configuring Login Authentication and Authorization."

For complete syntax and usage information for the CLI commands used in this chapter, refer to the Cisco ACNS Software Command Reference, Release 5.1.


Understanding Content Authentication and Authorization

As organizations extend the use of web applications and Internet access to their employees, they are confronted with the following challenges:

How to manage employee use of the Internet

How to restrict access to online content

Organizations can use content authentication and authorization to address these concerns. For example, organizations can use HTTP request authentication (content authentication) as a mechanism to restrict access to online content. If HTTP authentication is configured on a locally deployed Content Engine, the Content Engine checks a remote database (for example, a RADIUS, TACACS+, or LDAP database) for user password authentication to determine if the user should be granted or denied access to the requested content.

For more granular control, organizations can use group-based authorization (for NTLM and LDAP users) in addition to HTTP authentication. If the Content Engine is configured for group-based authorization, then the Content Engine checks its access control lists (ACLs) to determine if the group that the user belongs to should be granted or denied access to the requested content. Figure 8-1 shows how HTTP request authentication and group-based authorization can be used as mechanisms to control access to content.

Figure 8-1 HTTP Request Authentication and Group-Based Authorization


Note Note that group-based authorization occurs only after HTTP request authentication has occurred.


Content authentication and authorization can be implemented through various protocols, as summarized in Table 8-1.



Note Other ways to restrict access to online content include defining URL filters (for example, through local filters or through an external Websense server) or using a combination of password access and URL filters. The Content Engine can be configured as a proxy caching engine that will store and serve authorized and filtered content to authorized users only.


Understanding HTTP Request Authentication

ACNS 5.x software supports TACACS+, Microsoft NT LAN Manager (NTLM), Lightweight Directory Access Protocol (LDAP), and RADIUS server for HTTP request authentication. In the case of NTLM, HTTP request authentication authenticates a user's domain, username, and password with a preconfigured primary domain controller (PDC) before allowing requests from the user to be served by the Content Engine.

With an HTTP query, the Content Engine obtains a set of credentials from the user (user ID and password) and compares them against those in the authentication server database. When the Content Engine authenticates a user through an authentication server, a record of that authentication is stored locally in the Content Engine RAM (authentication cache). As long as the authentication entry is kept, subsequent attempts to access restricted Internet content by that user do not require authentication server lookups.

The Content Engine supports HTTP request authentication for both proxy mode and transparent (WCCP) mode access.

In proxy mode, the Content Engine uses the client's user ID as a key for the Content Engine's authentication cache.

In transparent mode, the Content Engine uses the client's IP address as a key for the Content Engine's authentication cache.

If you are using HTTP request authentication in transparent mode, we recommend that the AuthTimeout interval configured with the http authentication cache timeout command be short. IP addresses can be reallocated, or different users can access the Internet through an already authenticated device (PC, workstation, and the like). Shorter AuthTimeout values help reduce the possibility that individuals can gain access using previously authenticated devices. When the Content Engine operates in proxy mode, it can authenticate the end user with the user ID and password.

Understanding Proxy Server Mode HTTP Request Authentication

In some cases, users are located at branch offices. A Content Engine (CE1) can reside with them in the branch office and be configured in proxy mode. Another Content Engine (CE2) in proxy mode or another HTTP-compatible proxy device can reside upstream, with a TACACS+, RADIUS, NTLM, or LDAP server available to both Content Engines or proxy devices for login authentication.


Note The http append proxy-auth-header command must be configured on the downstream Content Engines to ensure that proxy authorization information, required by upstream Content Engines, is not stripped from the HTTP request by the downstream Content Engines. Up to eight upstream IP addresses can be configured on each downstream Content Engine.


If branch office user 1 accesses the Internet, and content is cached at CE1, then this content cannot be served to any other branch office user unless that user is authenticated. CE1 must authenticate the local users.

Assuming that both CE1 and CE2 are connected to the server and authenticate the users, when branch office user 2 firsts requests Internet content, CE1 responds to the request with an authentication failure response (either HTTP 407 if in proxy mode, or HTTP 401 if in transparent mode). User 2 enters the user ID and password, and the original request is repeated with the credentials included. CE1 contacts the HTTP request authentication server to authenticate user 2.

Assuming authentication success, and a cache miss, the request along with the credentials is forwarded to CE2. CE2 also contacts the authentication server to authenticate user 2. Assuming authentication success, CE2 either serves the request out of its cache or forwards the request to the origin server. (This credential forwarding capability is not configured by default. If you want credential forwarding, you must explicitly configure it through the http append proxy-auth-header host CE2ipaddress command.)

User 2 authentication information is now stored in the authentication cache in both CE1 and CE2. Neither CE1 nor CE2 needs to contact the authentication server for user 2's subsequent requests (unless user 2's entry expires and is removed from the authentication cache).

This scenario assumes that CE1 and CE2 use the same method for authenticating users. Specifically, both Content Engines must expect the user credentials (user ID and password) to be encoded in the same way.


Tip If you wish to avoid authentication on an upstream Content Engine after authentication is performed downstream, you can use the rule no-auth command to exclude the downstream Content Engine IP address.


When the Content Engine is operating in proxy server mode and is configured for HTTP request authentication, the following events occur if one of the following two scenarios is true: (1) the Content Engine receives a proxy-style request from a client, or (2) the Content Engine receives a transparent (WCCP-style) request from a client and the Content Engine http authentication header command option is set to 407 (Proxy Authorization Required) because there is an upstream proxy.

1. The Content Engine examines the HTTP headers of the client request to find user information (contained in the Proxy-Authorization header).

2. If no user information is provided, the Content Engine returns a 407 message (Proxy Authorization Required) to the client.

3. The client resends the request, including the user information.

4. The Content Engine searches its authentication cache (based on user ID and password) to see whether the client has been previously authenticated.

5. If a match is found, the request is serviced normally.

6. If no match is found, the Content Engine sends a request to the authentication server to find an entry for this client.

7. If the server finds a match, the Content Engine allows the request to be serviced normally and stores the client user ID and password in the authentication cache.

8. If no match is found, the Content Engine again returns a 407 message to the client.

Understanding Transparent Mode HTTP Request Authentication

When the Content Engine is operating in transparent mode, the user IP address is used as a key to the authentication cache. The Content Engine will always first look for an X-forwarded-For header, then the source IP address. Consequently, use the http append x-forwarded-for-header command to configure the append x-forwarded-for header on the Content Engine named CE1 so that Content Engine named CE2 will be able to see the client's IP address instead of just the IP address of CE1.


Note If CE1 does not create an X-Forwarded-For header (for example, if it is not a Cisco Content Engine and does not support this header), then authentication on CE2 will not work.


In a topology with two Content Engines, assume that CE1 is operating in transparent mode and CE2 is operating in proxy mode, with the browsers of all users pointing to CE2 as a proxy.

Because the browsers are set up to send requests to a proxy, an HTTP 407 message (Proxy Authorization Required) is sent from CE1 back to each user to prompt for credentials. By using the 407 message, the problem of authenticating based on source IP address is avoided. The username and password can be used instead.

This mode provides better security than using the HTTP 401 message. The Content Engine examines the style of the address to determine whether there is an upstream proxy. If there is, the Content Engine uses an HTTP 407 message to prompt the user for credentials even when operating in transparent mode.

When the Content Engine is operating in transparent mode and is configured for HTTP request authentication, the following events occur if either of the following is true: (1) the Content Engine receives a redirected request from a client, or (2) the http authentication header command parameter is set to 401 (Unauthorized) because there is no upstream proxy.

1. The Content Engine searches its authentication cache to see whether the user's IP address has been previously authenticated.

2. If a match is found, the Content Engine allows the request to be serviced normally.

3. If no match is found in the first step, the Content Engine examines the HTTP headers to find user information (contained in the Authorization header).

4. If no user information is provided, the Content Engine returns a 401 (Unauthorized) message to the client.

5. The client resends the request, including the user information.

6. The Content Engine sends a request to the authentication server to find an entry for this user.

7. If the server finds a match, the Content Engine allows the request to be serviced normally and stores the client IP address in the authentication cache.

8. If no match is found, the Content Engine again returns a 401 (Unauthorized) message to the client.

In transparent mode, the Content Engine uses the client IP address as a key for the Content Engine authentication cache.

Configuring HTTP Request Authentication

You can configure one of the following authentication and authorization methods to control HTTP request authentication on a locally deployed Content Engine:

Configuring RADIUS Authentication for HTTP Requests

Configuring TACACS+ Authentication of HTTP Requests

Configuring LDAP Authentication of HTTP Requests

Configuring NTLM Authentication for HTTP Requests


Note NTLM support on the Content Engine includes the following three types of support: (1) NTLM end-to-end authentication support, (2) NTLM authentication of HTTP requests, and (3) NTLM group information query for authorization purposes. For HTTP request authentication, the ACNS 5.x software supports NTLM Version 1. For end-to-end NTLM authentication, both NTLM Version 1 and Version 2 are supported.


Usage Guidelines

When configuring HTTP request authentication on a locally deployed Content Engine, note the following guidelines:

At any time, only one HTTP request authentication scheme can be enabled on the Content Engine. For information about configuring HTTP request authentication on a Content Engine, see the "Configuring HTTP Request Authentication" section.

If the authentication cache is not large enough to accommodate all authenticated users at the same time, the Content Engine purges older entries that have not yet timed out. For information about adjusting the size of the authentication cache, see the "Configuring the Authentication Cache Size" section.

As long as the authentication entry is retained, subsequent attempts to access restricted Internet content by that user do not require server lookups. The http authentication cache timeout command specifies how long an inactive entry can remain in the authentication cache before it is purged. Once a record has been purged, any subsequent access attempt to restricted Internet content requires reauthentication.

To exclude domains from HTTP authentication servers, use the rule no-auth domain command. TACACS+, NTLM, RADIUS, or LDAP authentication takes place only if the site requested does not match the specified pattern.


Note HTTP authentication featuring RADIUS and LDAP existed in Cache software 2.x releases and was configured through the radius-server and ldap commands, respectively.

For ACNS 5.x software, the radius-server authtimeout option and the ldap authcache max-entries and ldap authcache auth-timeout options have been removed and are now configurable through the http authentication cache max-entries and timeout commands, respectively. The ldap client auth-header option has been removed and is now configurable through the http authentication header command. The multi-user-prompt has been removed and replaced by the http avoid-multiple-user-prompts option. In addition, the radius-server command option exclude has been removed. The rule no-auth domain command replaces radius-server exclude; however, there is no replacement available for the multi-user-prompt option. The ldap server command has the following added options: enable and version.


The Content Engine uses simple (nonencrypted) authentication to communicate with an LDAP authentication server.

When the Content Engine communicates with a TACACS+ authentication server, the same secret key (for example, tackey) has to be configured on the TACACS+ server and each of the TACACS+ clients (Content Engine, routers, and so forth) that want to communicate with this TACACS+ server.

ContentEngine(config)#tacacs key "tackey"

The TACACS+ server uses this common client key to encrypt or decrypt. The TACACS+ authentication server does not require the TACACS+ client to be registered.

When the Content Engine communicates with a RADIUS authentication server, the RADIUS server requires the RADIUS client (Content Engine) to be registered. Additionally, the RADIUS client and server use the secret key. This secret key has to be configured on both the RADIUS server and RADIUS client (Content Engine); the RADIUS client uses this RADIUS key to encrypt and decrypt the authentication packets.

Authentication servers can be specified with the host option for NTLM, RADIUS, and LDAP servers, or server hostname option for TACACS+ servers.

NTLM allows two authentication servers to be specified.

LDAP allows two authentication servers to be specified.

RADIUS allows five authentication servers to be specified.

TACACS+ allows three authentication servers to be specified.

These additional authentication servers act as backup authentication servers and will only be used when the primary authentication server is not available. If the Content Engine cannot connect to any of the authentication servers, no authentication takes place, and users who have not been previously authenticated are denied access.

Once a user has been authenticated through a TACACS+, LDAP, NTLM, or RADIUS server, all transaction logs generated by the Content Engine for that user contain user information.

If the Content Engine is acting in proxy mode, the user ID is included in the transaction logs. If the Content Engine is acting in transparent mode, the user IP address is included instead.

If the transaction-logs sanitize command is invoked, the user information is suppressed. For more information on transaction logging, see "Monitoring and Troubleshooting."

The following are some examples of using the CLI to configure HTTP authentication on a locally deployed Content Engine.

In this example, the host for the LDAP server daemon is configured:

ContentEngine(config)# ldap server host www.someDomain.com port 390

In this example, the host for the RADIUS authentication server is configured:

ContentEngine(config)# radius-server 172.16.90.121

In this example, the length of time that entries are valid in the authentication cache is set:

ContentEngine(config)# http authentication cache timeout 1000

The following example specifies that the Content Engine should use the header 407 when asking the end user for authentication credentials (user ID and password).

ContentEngine(config)# http authentication header 407
ContentEngine(config)# ldap server host www.someDomain.com port 390

Note For more information about configuring HTTP request authentication on a locally deployed Content Engine, see the "Configuring HTTP Request Authentication" section.


For information on the various types of HTTP request authentication methods supported by a locally deployed Content Engine, see the following sections:

Configuring RADIUS Authentication for HTTP Requests

Configuring TACACS+ Authentication of HTTP Requests

Configuring LDAP Authentication of HTTP Requests

Configuring NTLM Authentication for HTTP Requests

Configuring the Authentication Cache Size

If the authentication cache is not large enough to accommodate all authenticated users at the same time, the Content Engine purges older entries that have not yet timed out. The Content Engine has a timeout value range from 1 to 1440 minutes (24 hours). Its default timeout value is 480 minutes.

The default time interval between the user's last Internet access and the removal of that user's entry from the authorization cache is 480 minutes. The minimum time interval is 1 minute, and the maximum is 1440 minutes (24 hours). The Content Engine forces reauthentication with the access control server once this time interval expires.

When LDAP, RADIUS, and TACACS+ are used in proxy redirection mode, the authentication record kept in the authentication cache is indexed by the username and the password entered. When LDAP, RADIUS, or TACACS+ is used in WCCP-enabled router redirection mode, the authentication record indexed is the IP address of the Content Engine that is sending the request in transparent mode.

When an NTLM server is used in either proxy redirection mode or WCCP-enabled router redirection mode, all authentication records are indexed by using the IP address of the requesting Content Engine.

The http authentication command has a header option that can be set to display a message to the client when authorization has failed. You can choose http authentication header 401 (Unauthorized) or http authentication header 407 (Proxy Authorization Required). By default, the Content Engine authenticates cache loads based on the URL syntax of the incoming request.

You can configure the size of the authentication cache on a locally deployed Content Engine using the Content Engine GUI or CLI.

Configuring Authentication Cache Size Using the Content Engine GUI

To configure the size of the Content Engine authentication cache, follow these steps:


Step 1 From the Content Engine GUI, choose Caching >  Auth. Cache. The Authenticated Caching window appears. (See Figure 8-2.)

Figure 8-2 Authenticated Cache Window

Step 2 In the Max entries field, specify the maximum number of entries that are to be maintained in the cache on this Content Engine. The range is from 500 to 32000. The default value is 16000.

Step 3 In the Timeout field, specify the amount of time between last access and cache removal on the Content Engine. The range is from 1 to 1440 minutes. The default value is 480 minutes.

Step 4 Choose a header type from the Header type drop-down list.

If you choose 401, a 401 unauthorized header message can be sent to the client when authorization fails.

If you choose 407, a 407 proxy authorization required message can be sent to the client when authorization fails.

By default, Based on URL syntax is selected as the header type.

Step 5 Click Update to save the changes.


Configuring Authentication Cache Size Using CLI Commands

Use the http authentication cache command to configure the authentication cache size parameters if necessary. The maximum number of entries that is maintained in the authentication cache is 32,000. The minimum number is 500. The default value is 16,000. Use the http authentication max-entries command to configure this parameter if necessary.

Use the show http authentication command in EXEC mode to display the authentication cache parameters.

Configuring RADIUS Authentication for HTTP Requests

RADIUS authentication clients reside on the Content Engine running ACNS 5.x software. When enabled, these clients send authentication requests to a central RADIUS server, which contains user authentication and network service access information.

To configure RADIUS authentication for HTTP requests on a locally deployed Content Engine, follow these steps:

1. Configure the RADIUS server settings on the Content Engine, as described in the "Specifying RADIUS Authentication Settings for a Content Engine" section.

2. Enable RADIUS authentication for HTTP requests on the Content Engine, using the Content Engine GUI or CLI:

Enabling RADIUS Authentication of HTTP Requests Using the Content Engine GUI

Configuring RADIUS Authentication of HTTP Requests Using CLI Commands

Enabling RADIUS Authentication of HTTP Requests Using the Content Engine GUI

To enable RADIUS authentication of HTTP requests on a locally deployed Content Engine, follow these steps:


Step 1 From the Content Engine GUI, choose Caching > RADIUS. The RADIUS window appears.

Step 2 Click the Enable RADIUS On radio button to enable RADIUS authentication on this Content Engine.


Note No RADIUS authentication will be performed if no RADIUS servers are configured, as described in the "Specifying RADIUS Authentication Settings for a Content Engine" section.


Step 3 Click Update to save the settings.


Configuring RADIUS Authentication of HTTP Requests Using CLI Commands

To use the CLI to configure RADIUS for HTTP request authentication on a locally deployed Content Engine, use the radius-server command in global configuration mode. To disable RADIUS authentication settings, use the no form of this command. For more information on the radius-server command, refer to the Cisco ACNS Software Command Reference, Release 5.1.


Note The rule command is relevant to RADIUS only if the radius-server redirect option has been configured.


RADIUS Authentication Redirection

The redirect option of the radius-server command redirects an authentication response to a different authentication server if an authentication request using the RADIUS server fails.

The following example enables the RADIUS client, specifies a RADIUS server, specifies the RADIUS key, accepts retransmit defaults, and excludes the domain name mydomain.net from RADIUS authentication. The configuration is displayed and verified with the show radius-server and show rule all commands.


Note The rule command is relevant to RADIUS only if the radius-server redirect option has been configured.


ContentEngine(config)# radius-server enable
ContentEngine(config)# radius-server host 172.16.90.121 
ContentEngine(config)# radius-server key myradiuskey
ContentEngine(config)# rule enable 
ContentEngine(config)# rule no-auth domain mydomain.net 

ContentEngine# show radius-server
Radius Configuration:
---------------------
Radius Authentication is on
    Timeout       = 5
    Retransmit    = 3
    Key           = ****
    Servers
    -------
    IP 172.16.90.121 Port =   1645    State: ENABLED

ContentEngine# show rule all
Rules Template Configuration
----------------------------
Rule Processing Enabled
rule no-auth domain mydomain.net

The following example disables RADIUS authentication on the Content Engine.

ContentEngine(config)# no radius-server enable

Configuring TACACS+ Authentication of HTTP Requests

The TACACS+ database validates users before they gain access to a Content Engine. TACACS+ is derived from the United States Department of Defense (RFC 1492) and is used by Cisco Systems as an additional control of nonprivileged and privileged mode access. ACNS 4.1 or later software supports TACACS+ only and not TACACS or Extended TACACS.

To enable TACACS+ for HTTP request authentication, use the tacacs enable global configuration configuration command.


Note Before you can enable the TACACS+ authentication method, you must configure a TACACS+ server with the tacacs server global configuration command (as described in the "Configuring TACACS+ Authentication Settings Using CLI Commands" section).


The User page of the Content Engine GUI (from the Content Engine GUI, choose System > Users) or the user global configuration commands provide a way to add, delete, or modify usernames, passwords, and access privileges in the local database. The TACACS+ remote database can also be used to maintain login and configuration privileges for administrative users. The tacacs global configuration command or the TACACS+ GUI page allows you to configure the network parameters required to access the remote database.

For more information about specifying the TACACS+ authentication settings on a locally deployed Content Engine, see the "Understanding TACACS+ Authentication and Authorization" section.

Configuring LDAP Authentication of HTTP Requests

To address the issue that the X.500 protocol Directory Access Protocol (DAP) was too complex for many directory implementations, the University of Michigan developed the Lightweight Directory Access Protocol (LDAP). LDAP is a directory service protocol that is simpler than the TCP/IP-based version of DAP, and can be used to access information directories.

A locally deployed Content Engine can be configured to restrict user Internet access by using an LDAP server for authentication purposes, which provides most of the services of the X.500 protocol with less complexity and overhead.


Note To exclude domains from LDAP authentication, use the rule no-auth domain command. Authentication challenges from LDAP, RADIUS, TACACS+, or SSH take place only if the request does not match the specified no-auth pattern.


Typically, an LDAP client (the Content Engine) queries an LDAP server and obtains the user's credentials such as user's account expiration, privileges, and group membership from the remote LDAP directory on an OpenLDAP or third-party LDAP server. In ACNS 5.1 software, the Content Engine can also authenticate and authorize a user who is configured in a remote Active Directory user database on a Microsoft Active Directory server.

Figure 8-3 shows how the Content Engine (an LDAP client) works with any of the following types of servers to perform LDAP authentication of HTTP requests:

OpenLDAP servers (shareware servers)

Third-party LDAP servers (for example, a Sun Microsystems iPlanet server)

Microsoft Active Directory (AD) servers


Note Figure 8-3 shows how the Content Engine performs HTTP request authentication with LDAP if the Content Engine is operating in proxy mode. If the Content Engine were operating in transparent mode, there would also be a WCCP-enabled router between the web clients and the Content Engine (LDAP client).


Figure 8-3 LDAP Authentication of HTTP Requests in Proxy Mode


Note ACNS 5.x software supports LDAP Version 2 and Version 3 and supports all LDAP features except for Secure Authentication and Security Layer (SASL). The Content Engine uses simple (nonencrypted) authentication to communicate with the LDAP server. Future expansion may allow for more security options based on Secure Socket Layer (SSL), SASL, or certificate-based authentication.

The Active Directory group attribute is an LDAP Version 3 extension. Consequently, the Content Engine must use LDAP Version 3 to query a Microsoft Active Directory server separately for this information.


Table 8-2 lists the features that are supported on the different types of LDAP servers (shown in Figure 8-3). An "x" indicates support of a particular feature.

Table 8-2 Supported Features on LDAP Servers 

Feature
Third-party LDAP servers
OpenLDAP servers
Microsoft Active Directory servers

LDAP Version 2

x

x

 

LDAP Version 3

x

x

x

Organizational units (ou)

x

x

x

Active Directories (AD)

   

x

Static groups

x

x

x


To configure LDAP authentication of HTTP requests, you must configure the following settings for the LDAP client on the Content Engine:

1. Specify the IP address or host name of the LDAP authentication server that the Content Engine should use.

ContentEngine(config)# ldap server host 10.1.1.1

2. Configure the Content Engine to use LDAP Version 3 versus LDAP Version 2 (the default), if necessary.

Figure 8-3 shows that the LDAP client on the Content Engine can send LDAP Version 2 or Version 3 requests to an OpenLDAP server or a third-party LDAP server. However, the Content Engine must use LDAP Version 3 to communicate with a Microsoft Active Directory server. By default, the Content Engine uses LDAP Version 2. To change this default, use the ldap server version 3 global configuration command.

ContentEngine(config)# ldap server version 3

3. By default, LDAP authentication of HTTP requests is disabled on a Content Engine. Enable LDAP authentication on the Content Engine, as follows:

ContentEngine(config)# ldap server enable

4. Specify the search criteria.

These search criteria are passed to the LDAP server, which uses these criteria to search through its user database. The LDAP server retrieves the user's password for authentication. If the user is authenticated, then the LDAP server searches through its database for the requested user membership information, and returns this information to the Content Engine.

Search criteria can include such information as the group attribute (for example, organizationUnit or Active Directory), the name of the user identification (UID) attribute, and the starting point of the search. You can also specify a filter (for example, "objectclass=users") to restrict the scope of the database search. If the Content Engine is configured for group-based authorization, then the Content Engine will use the retrieved group names to perform group-based authorization for the authenticated users. For more information on group-based authorization, see the "Configuring Group-Based Authorization" section.

In order to specify the search criteria, you must understand the structure of the user database being queried. For example, the Content Engine by default will request that the authentication server search its database for organizational unit (ou) group membership.


Note You can search an OpenLDAP server, a third-party LDAP server, or a Microsoft Active Directory server for organizational unit group membership information. You can only search for Active Directory group membership if the authentication server is a Microsoft Active Directory server.

The organizational unit option and the Active Directory option are independent parameters. You can configure a Content Engine to search a Microsoft Active Directory server database for organizational unit group membership as well as Active Directory group membership.


You can change this default. The following example shows how to configure the Content Engine to query a Microsoft Active Directory server for only the Active Directory group membership and not the organizational unit group membership for authenticated users.

Content Engine(config)# ldap server group active-directory enable

The following sample output shows that the Content Engine is now configured to search the Microsoft Active Directory server database for Active Directory group membership (memberOf) for authenticated users:

ContentEngine# show ldap 
LDAP Configuration:
-------------------
 LDAP Authentication is enabled
        Allow mode:     disabled
        Base DN: 	"DC=cisco,DC=com"
        Filter:         <none>
        Retransmits:    2
        Timeout:        5 seconds
        UID Attribute:  uid
        Group Attribute:
           organizationUnit: 	 disabled  (ou)
           Custom Attribute:     disabled
           Active Directory:	 enabled (memberOf)


Note For more information on the structure of the LDAP Database, see the "Understanding the Structure of the LDAP Database" section.

For more information about the default configuration settings for LDAP authentication of HTTP requests, see the "Default Settings for LDAP Authentication of HTTP Requests" section.


You can also configure the Content Engine to perform group-based authorization after a user has been successfully authenticated. If the Content Engine is configured for group-based authorization, then the Content Engine checks its access lists to determine whether the groups that the authenticated user belongs to should be granted or denied access to the requested content. Based on the results of this LDAP group-based authorization, the Content Engine grants or denies user access to the requested content (see Figure 8-1).

In order for LDAP group-based authorization to occur, you must have completed the following prerequisite tasks on the Content Engine:

Enabled and configured group name-based access lists, as described in "Configuring LDAP Group Authorization with Access Lists" section.

Configured the Content Engine to request that the LDAP server retrieve the names of the groups that the authenticated user belongs to (for example, "Marketing" or "Engineering"). You must understand the structure of the user database being queried in order to configure the Content Engine to request this information retrieval. For more information on this topic, see the "Understanding the Structure of the LDAP Database" section.

Default Settings for LDAP Authentication of HTTP Requests

Table 8-3 lists the Content Engine's default configuration for LDAP authentication of HTTP requests.

Table 8-3 Default Configuration for LDAP Authentication of HTTP Requests

Feature or Setting
Default Value

LDAP authentication

Disabled

Allow mode

Disabled

Base distinguished name

None specified (an empty string)

Filter for database searches

None specified

LDAP retransmit attempts

2 times

LDAP server timeout

5 seconds

User ID attribute

uid

Group attribute

Organization unit (ou)

Custom attribute

Active Directory (member of)

Enabled

Disabled

Disabled

Static group database queries

Group attribute

Group member

Nested groups

Nested level

Disabled

None specified

None specified

Disabled

1 level

Administrative distinguished name

None specified

Administrative password

None specified

LDAP version

LDAP Version 2

LDAP port

Port 389

Policy redirect feature

Disabled

Password expiry feature

Disabled

Primary LDAP server

None specified

Secondary LDAP server

None specified


You can change these defaults on a locally deployed Content Engine, as described in the "Configuring LDAP Authentication of HTTP Requests" section.

Understanding the Structure of the LDAP Database

In order to configure the LDAP client on the Content Engine to query a remote user database, you must understand the structure of the user database being queried.

LDAP database entries are arranged in a hierarchical directory tree that reflects logical or geographic boundaries. The LDAP directory has the following structure. (See Figure 8-4.).

The topmost node of the LDAP directory tree is named "root."

Below the root, there are organization nodes (o) for companies, states, or national organizations (for example, "o=cisco," "o=texas," and "o=redcross").

Below organization nodes, there are LDAP group nodes for such organizational units as departments (for example, "ou=Marketing" and "ou=Engineering") and branch offices.

At the bottom of the tree, there are individual nodes (cn) for common names of people (for example, "cn=Jane Smith), documents, and such shared resources as printers.

Figure 8-4 LDAP Database Structure


Note Because the groups named "Hardware Engineers" and "Software Developers" are nested under the parent group named "Engineering," they are called "nested groups." Nested groups allow the LDAP server administrator to create hierarchical relationships that can be used to define inherited group membership.


An LDAP directory can contain such information as text, photographs (JPEGs), URLs, binary data, and public key certificates.

About LDAP User Database Entries

An entry in an LDAP user database (an LDAP directory) is a collection of attributes that has a name, called a distinguished name (dn). Each of the entry's attributes has a type, name, and one or more values.

Attribute type—An integer, string, or character

Attribute name—Name of the attribute (for example, "cn" for a common name, "givenName" for a given name [first name], or "mail" for an e-mail address)

Attribute value—Value of the attribute (for example, "Jane Smith," "Jane," or "jsmith50@cisco.com")

The following example shows the complete database entry for Jane Smith in an OpenLDAP or third-party LDAP server database.

# Jane Smith, cisco, com
dn: cn=Jane Smith,dc=cisco,dc=com
telephoneNumber: (408) 123-9100
mail: jsmith50@cisco.com
uid: jsmith50
givenName: Jane
sn: Smith
cn: Jane Smith

The following example shows the complete entry for Jane Smith in a Microsoft Active Directory server database.

# Jane Smith, cisco, com
dn: CN=Jane Smith,DC=cisco,DC=com
memberOf: CN=Users,DC=cisco,DC=com
telephoneNumber: (408) 123-9100
mail: jsmith50@cisco.com
uid: jsmith50
givenName: Jane
sn: Smith
cn: Jane Smith

An entry in an LDAP user database is referenced by its distinguished name (dn). A distinguished name is constructed by taking the name of the entry itself and concatenating the names of its ancestor entries in the hierarchical directory structure of the LDAP database. For example, if the common name (cn) is "Jane Smith" and this individual belongs to the organization named "cisco," then the distinguished name for this LDAP directory entry is:

"cn=Jane Smith,dc=cisco,dc=com" for an OpenLDAP server or a third-party LDAP server

"CN=Jane Smith,DC=cisco,DC=com" for a Microsoft Active Directory server

About User Groups in an LDAP Directory

An LDAP directory can contain groups of users that are part of an LDAP group (for example, groups named "Marketing" and "Engineering"). An LDAP group is a list, a collection of names. An LDAP group has an objectclass attribute of groupOfNames, and consists of one or more members. (A group cannot be empty.)

As part of an LDAP database search, the LDAP server can be instructed to retrieve the group names of the authenticated user. The Content Engine uses the retrieved group names and its group name-based access lists to perform group-based authorization for these LDAP users.


Note LDAP allows you to control which attributes are required and allowed in an entry through the special attribute named objectclass. The values of the objectclass attribute determine the schema rules the entry must obey. For more details on LDAP, refer to RFC 1777 Lightweight Directory Access Protocol.


There are multiple ways to support LDAP grouping in a user database:

Grouping LDAP Users into Organizational Units

Grouping LDAP Users into Static Groups

Grouping Users into Active Directory Groups

The method that the database administrator used to group users in a database determines how you must configure the Content Engine to query that database for user membership information. For examples of how to use the CLI to configure the Content Engine to perform LDAP directory queries, see the "Querying LDAP Servers for User Membership Information" section.

In LDAP Version 3, groups can be defined as either static, dynamic, or organizationUnit (organizational units). The groups can be nested. ACNS 5.1 software supports static and organizationUnit groups; it does not support dynamic groups.

Grouping LDAP Users into Organizational Units

When the LDAP server administrator groups LDAP users based on organizational units (for example, "Marketing"), the administrator can assign a user to any group, and can nest groups. An organizational unit is synonymous with a native LDAP group. This method is also referred to as native LDAP group configuration. All conventional LDAP Version 3 servers support native LDAP group configuration in the user database.

By default, the Content Engine is configured to query an LDAP server for organizational unit group membership. The following example shows the two entries in the LDAP database that are used to assign the LDAP user named "Penny Gold" to the organizational unit named "Marketing."

In the first database entry, the LDAP server administrator defines the group node for the organizational unit named "Marketing."

dn: cn=Marketing,dc=cisco,dc=com
cn: Marketing
objectclass: groupOfNames

In the second database entry, the administrator defines the individual node for Penny Gold. This node contains all of Penny Gold's user membership information.

# Penny Gold, marketing, cisco, com
dn: cn=Penny Gold,ou=Marketing,dc=cisco,dc=com
telephoneNumber: (408) 123-4444
mail: pgold@cisco.com
uid: pgold
givenName: Penny
sn: Gold
cn: Penny Gold

Because Penny Gold's organizational unit (ou) is specified as "Marketing," she is assigned the group privileges of this particular group. If you have configured the Content Engine for group-based authorization (for example, configured an access list that permits the members of the Marketing group to access content that is served through the Content Engine), then the Content Engine authenticates Penny Gold it will grant her access to the requested content because she is a member of the Marketing group.

Based on the above database structure, the following example shows how you would configure the Content Engine to query this database for user membership information for such users as Penny Gold. The OpenLDAP server or the third-party LDAP server (server with an IP address of 172.16.1.1) is instructed to start the database search at the node named "Marketing," to search for the user identification (user name and user password), and to retrieve the group names of the authenticated user.

ContentEngine(config)# ldap server 172.16.1.1
ContentEngine(config)# ldap server userid-attribute uid
ContentEngine(config)# ldap server organizationUnit enable
ContentEngine(config)# ldap server base "dc=cisco,dc=com"
ContentEngine(config)# ldap server enable

Because the organizationUnit option is enabled, the LDAP server queries the database for the organizationUnit configuration (ou attribute) of the user account. If the user belongs to more than one organizational unit, the LDAP server will return a string that contains all of the group names to which the user belongs. If the Content Engine is configured for LDAP group-based authorization, it uses the retrieved group names and its access lists to perform group-based authorization on the authenticated user.

Grouping LDAP Users into Static Groups

When the LDAP server administrator uses static groups to group LDAP users in a user database, the administrator explicitly specifies each member of the static group individually. LDAP administrators assign users to an LDAP static group in order to set up a user's authorization privileges. A user's access to the Internet is allowed or denied based on the privileges that have been assigned to the static group (for example, "Engineering" or "Hardware Engineers").

A static group defines each member individually using the object class attribute of groupOfNames or groupOfUniqueNames. These object classes require the attribute member (groupOfNames) or uniqueMember (groupOfUniqueNames). There is a one-to-one correspondence between the object class name and the member name attribute. A static group that uses these structural object classes must have at least one member; it cannot be empty.

The Content Engine LDAP static group feature allows you to query both object classes (groupOfNames and groupOfUniqueNames) for group members.

The following example shows how to query the database for the object class named groupOfNames.

ContentEngine(config)# ldap server group static member-attribute member
ContentEngine(config)# ldap server group static enable

The following example shows how to query the database for the object class named groupOfUniqueNames.

ContentEngine(config)# ldap server group static member-attribute uniquemember
ContentEngine(config)# ldap server group static enable


Note ACNS 5.x software now supports static group queries of an LDAP user database. Static groups are supported on OpenLDAP servers, third-party LDAP servers, and Microsoft Active Directory servers.


The following example describes how an LDAP server administrator can configure static groups in an LDAP database.

1. The LDAP server administrator defines the following nodes in the LDAP database:

The root node named ".com"

The organization node named "cisco"

A node for the organizational unit (ou) named "Engineering"

A node for the "Hardware Engineers" group that is nested under the "Engineering" group

A node for the "Software Developers" group that is nested under the "Engineering" group

An individual node for the user named "Jay Doe"

An individual node for the user named "Don Smith"

The following example shows how the LDAP server administrator defines a node for the user "Jay Doe."

# Jay Doe, Engineers, cisco, com
dn: cn=Jay Doe,ou=Engineering,dc=cisco,dc=com
telephoneNumber: (408) 123-8910
mail: jdoe8@cisco.com
uid: jdoe8
givenName: Jay
sn: Doe
cn: Jay Doe

The following example shows how the LDAP server administrator defines a node for the user "Don Smith."

# Don Smith, Engineers, cisco, com
dn: cn=Don Smith,ou=Engineering,dc=cisco,dc=com
telephoneNumber: (408) 123-4567
mail: dsmith7@cisco.com
uid: dsmith7
givenName: Don
sn: Smith
cn: Don Smith

2. The LDAP server administrator assigns specific members to static groups.

The following example shows how the LDAP server administrator explicitly specifies that the parent group named "Engineering" has two static members (the groups named "Hardware Engineers" and "Software Developers"). The groups named "Hardware Engineers" and "Software Developers" are nested static groups; they are nested under the parent group.

dn: cn=Engineering,dc=cisco,dc=com
cn: Engineering
objectclass: groupOfNames
member: cn:Hardware Engineers,dc=cisco,dc=com
member: cn:Software Developers,dc=cisco,dc=com

The following example shows how the LDAP server administrator explicitly assigns Jay Doe and Don Smith to the static group named "Hardware Engineers". This is a one-way link between the two connected nodes because the member attribute is used. If the member of attribute were used; a two-way link would be created between the two connected nodes. When nodes are connected with a two-way link, it reduces the number of TCP requests that are required to search through the database for user membership information.

dn: cn=Engineers,dc=cisco,dc=com
cn: Hardware Engineers
object: groupOfNames
member: cn:Jay Doe,ou=Engineering,dc=cisco,dc=com
member: cn:Don Smith,ou=Engineering,dc=cisco,dc=com

By default, static group queries and nested group queries are disabled on the Content Engine (as shown in the following excerpt of a sample output of a show ldap EXEC command).

ContentEngine# show ldap 
LDAP Configuration:
-------------------
Static Groups:           disabled
           Group Attribute:
           Group Member:
           Nested Groups:        disabled
           Nested Level:         1

However, you can use the CLI to enable and configure such queries on a locally deployed Content Engine, as described in these sections:

Searching for User Account Information for LDAP Direct Static Groups

Searching for User Account Information for LDAP Nested Static Groups

Grouping Users into Active Directory Groups

Microsoft Active Directory is a software application that runs on a Windows 2000 server. An Active Directory (AD) database is a user database that resides on a Windows 2000 server that is running the Microsoft Active Directory program.

In ACNS 5.1 software, the LDAP client on a Content Engine now provides LDAP support for Active Directory groups. Microsoft Active Directory only supports LDAP Version 3. By default, the Content Engine uses LDAP Version 2. Therefore, use the ldap server version 3 global configuration command to configure the Content Engine to use LDAP Version 3 before enabling the LDAP Active Directory feature on the Content Engine.

ContentEngine(config)# ldap server version 3

To request that the LDAP server query the Active Directory group membership, enter this command:

Content Engine(config)# ldap server group active-directory enable


Note The Active Directory group attribute is an LDAP Version 3 extension, and therefore must be queried separately.


The following is an entry sample from a user account in an Active Directory database.

dn: CN=Penny Gold,CN=Users,DC=cisco,DC=local 
memberOf: CN=Marketing,DC=cisco,DC=local

The memberOf attribute and a group name for each individual group were added to the user's account configuration. The memberOf attribute does not support the nested group structure.

About LDAP Directory Searches

The LDAP directory service is a global directory service that allows LDAP clients (Content Engines) to access information that is stored in an LDAP directory, as follows:

1. The Content Engine connects to the specified LDAP server and queries the LDAP server for specific user membership information (for example, user identification "userid" and user password "userpassword").

The following example shows how to configure the Content Engine to query a standard LDAP server for user identifications (user ID and password), and to ask the LDAP server to retrieve the names of any organizational units (groups) that a user belongs to:

ContentEngine(config)# ldap server userid-attribute uid 

ContentEngine(config)# ldap server organizationUnit enable

The Content Engine administrator configures the search criteria on the Content Engine. For more information on this topic, see the "Querying LDAP Servers for User Membership Information" section.

2. The LDAP server searches its user database (an LDAP directory) for any entry that matches the specified search criteria.

a. The LDAP server checks whether the organizationUnit option is enabled on the Content Engine.

If the organizationUnit option is enabled, the LDAP server queries the database for the organizationUnit configuration (ou attribute) of the user account. If the user belongs to more than one organizational unit, the LDAP server returns a string that contains all of the group names that the user belongs to (for example, "Marketing,Engineering").

If the organizationUnit option is disabled, then the LDAP server does not perform the query.

b. The LDAP server checks whether the Active Directory group (memberOf) option is enabled.

If the memberOf option is disabled, then the LDAP server (the Microsoft Active Directory server) does not perform the query.

If the memberOf option is enabled, then the LDAP server queries the Microsoft Active Directory server database for the Active Directory group configuration of the user account. The Microsoft Active Directory server collects the group names from the memberOf attribute of the user account, and returns this information to the Content Engine.


Note The Active Directory group attribute is an LDAP Version 3 extension, and therefore must be queried separately.


c. The LDAP server checks whether the custom group option is enabled on the Content Engine.

If the custom group option is disabled, then the LDAP server does not perform this query.

If the custom group option is enabled, the LDAP server collects the group names from the custom attribute of the user account, and returns this information to the Content Engine.

d. The LDAP server checks whether the static group option is enabled on the Content Engine.

If the static group option is disabled, the LDAP server does not perform the query.

If the static group option is enabled, the LDAP server queries the database for the static group configuration. The server collects the names of the groups, and returns this information to the Content Engine.

3. The LDAP server responds to the query from the Content Engine with the requested information or with a message that it was unable to find the requested information.

If the user is not a valid user, then HTTP authentication fails. In this case, the Content Engine denies the user's request to access the content.

If the user is a valid user, then HTTP authentication succeeds. If group-based authorization has not been enabled on the Content Engine, then the Content Engine grants the user access to the content at this point. If the Content Engine is configured for group-based authorization (for example, the access-lists 300 enable global command has been specified and the access lists have been defined), then the Content Engine uses the retrieved group names to determine whether the user should be granted access to the requested content.


Note The retrieved user membership information is used for group-based authorization only. For more information about group-based authorization for LDAP users, see the "Configuring LDAP Group Authorization with Access Lists" section.


You use the ldap server global configuration command to configure the Content Engine to perform an LDAP database search.

Querying LDAP Servers for User Membership Information

This section provides some examples of how to configure the Content Engine to perform LDAP directory queries.

Searching for User Account Information for Individuals in an LDAP Database

Searching for User Account Information for LDAP Direct Static Groups

Searching for User Account Information for LDAP Nested Static Groups


Note All of these examples assume that the LDAP directory that is being queried has the structure depicted in Figure 8-4.


Searching for User Account Information for Individuals in an LDAP Database

The following example shows how to configure a Content Engine to search for user account information for individuals (for example, Jane Doe) in an LDAP user database:

1. Specify the LDAP server that the Content Engine should use for this database search.

ContentEngine(config)# ldap server 172.16.1.1

By default, port 389 is configured as the TCP port for the LDAP authentication server. To specify another port for the LDAP server, use the ldap server port port-num command. Valid port numbers are 1 through 65535.

2. Specify the base distinguished name that specifies the starting point for this database search.

ContentEngine(config)# ldap server base "dc=cisco,dc=com"

3. Enable LDAP authentication on the Content Engine, as follows:

ContentEngine(config)# ldap server enable

4. Specify the search criteria.

a. In this case, the LDAP server is requested to search for user IDs (username and user password).

ContentEngine(config)# ldap server userid-attribute uid 

b. Enable the organizationUnit option on the Content Engine. This instructs the LDAP server to retrieve the group name from the ou attribute of the user account.

ContentEngine(config)# ldap server organizationUnit enable

Searching for User Account Information for LDAP Direct Static Groups

The following example shows how to configure the Content Engine to request that the specified LDAP server perform a direct (non-nested) static group database query. This type of query enables the Content Engine to perform HTTP request authentication for users who have been assigned to a direct static group (a parent static group).

In this scenario, the LDAP database is queried for user account information for the direct static group named "Engineering."

1. Specify the LDAP server that the Content Engine should use for this database search.

ContentEngine(config)# ldap server 172.16.1.1

2. Specify the group attribute to query. In this example, the LDAP server will search the static group configurations for the group attribute named "cn" for common name.

ContentEngine(config)# ldap server group static group-attribute cn

3. Specify the group member attribute to query. In this example, the LDAP server searches the static group configurations for the group member attribute named "member."

ContentEngine(config)# ldap server group static member-attribute member

4. Specify the base distinguished name that specifies the starting point for this database search.

ContentEngine(config)# ldap server base "dc=cisco,dc=com"

5. Enable LDAP authentication on the Content Engine, as follows:

ContentEngine(config)# ldap server enable

6. Enable static group queries of an LDAP user database.

ContentEngine(config)# ldap server group static enable

Searching for User Account Information for LDAP Nested Static Groups

The following example shows how to configure the Content Engine to request that the specified LDAP server perform a nested static group database query. In this case, the LDAP directory is searched for user account information for any static groups that are nested under the parent group named "Engineering."

1. Specify the LDAP server that the Content Engine should use for this database search.

ContentEngine(config)# ldap server 172.16.1.1

2. Specify the nested level of the static group that you want to search for in the LDAP directory.

By default, the LDAP server searches the LDAP directory one level down from the starting point of the search. In this case, the two nested static groups "Hardware Engineers" and "Software Developers" are nested two levels down from the starting point of the search (the organizational node named "cisco"). Therefore, in this example the LDAP server is instructed to search two levels down.

ContentEngine(config)# ldap server group static nested level 2

3. Specify the group attribute to query. In this example, the LDAP server searches the nested static group configurations for the group attribute named "cn" for common name.

ContentEngine(config)# ldap server group static group-attribute cn

4. Specify the group member attribute to query. In this example, the LDAP server searches the static group configurations for the group member attribute named "member."

ContentEngine(config)# ldap server group static member-attribute member

5. Specify the base distinguished name that specifies the starting point for this database search.

ContentEngine(config)# ldap server base "dc=cisco,dc=com"

6. Enable LDAP authentication on the Content Engine.

ContentEngine(config)# ldap server enable

7. Enable nested static group queries of the LDAP database.

ContentEngine(config)# ldap server group static nested enable

Configuring LDAP Authentication of HTTP Requests Using the Content Engine GUI

To configure LDAP authentication of HTTP requests on a locally deployed Content Engine, follow these steps:


Step 1 From the Content Engine GUI, choose Caching > LDAP. The LDAP window appears. (See Figure 8-5.)

Figure 8-5 LDAP Window

Step 2 Click the Enable LDAP On radio button to enable LDAP authentication.

Step 3 Use the set of LDAP Version radio buttons to specify the LDAP protocol version to be used.

Step 4 In the Time to wait field, specify the number of seconds that the Content Engine is to wait for a response before timing out on a connection to a particular LDAP server. The default value is 5 seconds.

Step 5 In the Number of Retransmits field, specify the number of connection attempts that are allowed to an LDAP server. The default is two attempts.

Step 6 In the User-id Attribute field, enter the user ID attribute. By default, "uid" is specified.

Step 7 In the Filter field, enter the filter string (for example, "objectclass=user") to be used in the database search. There is no default.

Step 8 In the Base Distinguished Name field, enter the base distinguished name string for the database search. There is no default value for this field.

Step 9 In the Administrative DN field, enter the administrative distinguished name for the database search. There is no default value for this field.

Step 10 In the Administrative DN Password field, enter the administrative password. There is no default value for this field.

Step 11 Specify the LDAP server that the Content Engine should use for authentication. (A primary and secondary LDAP server can be specified.)

a. To designate an LDAP server as the primary server, click the Primary radio button and enter the IP address or host name of the primary LDAP server in the Server field.

b. To designate an LDAP server as the secondary server, enter the IP address or host name of the secondary LDAP server in the Server field and do not click the Primary radio button.

c. In the Port field, enter the port number on which the LDAP servers will be listening. The default LDAP port is 389.


Note No LDAP authentication will be performed if no LDAP servers are configured.


Step 12 Click Update to save the settings.


Table 8-4 describes the parameters in the LDAP window and the corresponding CLI command.

Table 8-4 LDAP Authentication Key Parameter Settings 

Parameter
Description
CLI Command

Enable LDAP Servers

Enables HTTP authentication using LDAP servers.

ldap server enable

LDAP Version

LDAP protocol version to be used: Version 2 or Version 3.

ldap server version ver_num

Time to wait

Number of seconds that the Content Engine waits for a response before timing out on a connection to a particular LDAP server. The default value is 5 seconds.

ldap server timeout seconds

Number of Retransmits

Number of connection attempts allowed to an LDAP server. The default is 2 attempts.

ldap server retransmit retries

User-id Attribute

Name of the user ID attribute in the directory. The default user ID attribute is "uid."

ldap server userid-attribute useridword

Filter

LDAP filter string. There is no default value.

ldap server filter filterword

Base Distinguished Name

Base distinguished name of the starting point for the directory search. This allows for a directory search on a particular string, such as the domain "com."

ldap server base baseword

Administrative DN

Administrative distinguished name. This allows for a directory search on a particular user belonging to the specified administrative distinguished name.

ldap server administrative-dn name

Administrative DN Password

Password for the administrative distinguished name.

ldap server administrative-passwd passwd

Server Port

Port number on which the LDAP server is listening. The default port number is 389.

ldap server port port-num

Primary Server

IP address of the primary LDAP server.

ldap server host {hostname | hostipaddress} primary

Secondary Server

IP address of the secondary LDAP server.

ldap server host {hostname | hostipaddress} secondary


For more information about using the CLI to configure LDAP authentication of HTTP requests on a locally deployed Content Engine, see the next section, "Configuring LDAP Authentication of HTTP Requests Using CLI Commands." To retrieve group names from the LDAP database for group-based authorization (as shown in Figure 8-1), you must use the CLI (the ldap server group option).

Configuring LDAP Authentication of HTTP Requests Using CLI Commands

Use the ldap server global configuration command to configure LDAP authentication of HTTP requests on a locally deployed Content Engine.

Use the ldap server group option to instruct the LDAP server, which is performing the database query, to retrieve the names of the groups that the authenticated user belongs to (for example, "Marketing" or "Engineering"). The Content Engine uses these retrieved group names to perform LDAP group-based authorization by checking its access lists to determine whether the groups should be granted or denied access to the requested content.


Note ACNS 5.1 software supports LDAP Version 2 and Version 3 and supports all LDAP features except for Secure Authentication and Security Layer (SASL).


The syntax of the ldap command is as follows:

ldap server {administrative-dn name | administrative-passwd passwd | allow-mode | base baseword | enable | filter filterword | group {active-directory enable | custom uid enable | organizationUnit enable | static {enable | group-attribute gid | member-attribute {custom-member memid | member | uniquemember} | nested {enable | level 1-100}}} | host {hostname | hostipaddress} [primary | secondary] | password-expiry {enable | redirect-url url} | policy-redirect {attribute name | enable | redirect-url url | version-number num} | port port-num | retransmit retries | timeout seconds | userid-attribute useridword | version ver_num}

Table 8-5 describes the parameters of the ldap server global configuration command for LDAP HTTP request authentication and group-based authorization.

Table 8-5 Parameters for the ldap server Command 

Parameter
Description

server

Configures LDAP server parameters on the locally deployed Content Engine.

administrative-dn

Sets the administrative distinguished name. This allows for a directory search on a particular user belonging to the specified administrative distinguished name.

name

Administrative distinguished name.

administrative-passwd

Sets the administrative password.

passwd

Administrative password.

allow-mode

Allows users to access requested content when the LDAP server is unavailable.

base

Sets the base distinguished name of the starting point for the directory search.

baseword

Base value (for example, "dc=cisco,dc=com"). There is no default.

enable

Enables HTTP request authentication with the LDAP server.

filter

Sets the filter for the directory search.

filterword

Text for the LDAP search filter (for example, "objectclass=user"). There is no default.

group

Configures LDAP group queries.

active-directory

Obtains the group name from the member of attribute of the user account.

enable

Enables Active Directory group membership queries.

custom

Obtains group name from the custom attribute of the user account.

uid

Custom attribute name of the user account.

enable

Enables customized attribute name group membership.

organizationUnit

Obtains the group name from the ou attribute of the user account.

enable

Enables organizationUnit group queries for user membership information.

static

Configures LDAP static group queries.

enable

Enables static group queries for user membership information.

group-attribute

Name of static group attribute.

gid

Static group attribute name (for example, "cn" or "gid").

member-attribute

Name of the group member attribute to query.

custom-member

Enables queries of custom static group member attribute name.

memid

Name of the custom static group member attribute to query.

member

Configures the static group member attribute name.

uniquemember

Static group member attribute name.

nested

Obtains the names of the nested static groups.

enable

Enables nested group queries for user membership information.

custom

Obtains group name from the custom attribute of the user account.

uid

Custom attribute name of the user account.

enable

Enables nested static group queries for user membership information.

level

Level of nested static group to query.

1-100

Specifies the nested level of the static group. The default is 1.

host

Sets host parameters.

hostname

Host name of the LDAP server. Up to two servers can be named.

hostipaddress

IP address of the LDAP server.

primary

(Optional) Specifies the LDAP server as the primary server.

secondary

(Optional) Specifies the LDAP server as the secondary server. The additional server provides authentication redundancy and improved throughput, especially when Content Engine load-balancing schemes distribute the requests evenly between the two servers. If the Content Engine cannot connect to either of the two LDAP servers, no authentication takes place, and users who have not been previously authenticated are denied access.

password-expiry

Configures authorization password expiration.

enable

Enables support for expiry of authorization passwords.

redirect-url

Defines URL that allows a user to reset their expired password.

url

URL to redirect to if the user password has expired.

policy-redirect

Configures policy redirection support.

attribute

Defines LDAP attribute name that determines if a user has accepted the site policy.

enable

Enables policy redirection support.

name

LDAP attribute name under which the policy version value is stored.

redirect-url

Defines URL to redirect to for acceptable usage policy acknowledgement.

url

URL to redirect to if the user still has accepted the usage policy.

version-number

Defines current policy version number.

num

Policy version number (1—99999999)

port

Sets the TCP port for the LDAP authentication server.

port-num

LDAP server port number (1-65535). The default is 389.

retransmit

Specifies the number of transmission attempts to an active LDAP server.

retries

Number of transmission attempts for a transaction (1-3). The default is 2.

timeout

Sets the time to wait for an LDAP server to reply.

seconds

Waiting time in seconds (1-20). The default is 5 seconds; minimum is 1 second and maximum is 20 seconds.

userid-attribute

Sets the user ID attribute for the database search for user membership information.

useridword

Value for the user ID attribute. The default is "uid."

version

Sets the LDAP version number on the locally deployed Content Engine.

ver_num

LDAP version number (2-3). The default is 2.


Configuration Examples of LDAP Authentication of HTTP Requests

This example shows how to specify two LDAP servers as primary and secondary HTTP request authentication servers:

ContentEngine(configure)# ldap server 172.16.1.1 primary
ContentEngine(configure)# ldap server 172.16.1.2 secondary

This example shows how to specify the LDAP timeout interval:

ContentEngine(config)# ldap server timeout 10

This example shows how to specify the LDAP retransmit count:

ContentEngine(config)# ldap server retransmit 3

This example shows how to specify the base distinguished name that specifies the starting point for this database search.

ContentEngine(config)# ldap server base dc=cisco,dc=com

This example shows how to enable LDAP authentication on the Content Engine, as follows:

ContentEngine(config)# ldap server enable

Configuring NTLM Authentication for HTTP Requests

The NTLM protocol can be used to authenticate and block user access to the Internet. When a user logs in to a Windows NT or a Windows 2000 domain and starts a browser, the authentication information is stored by the browser and later used as NTLM credentials to access the Internet. The browser sends the NTLM credentials with the domain name to the Content Engine, which in turns sends a request to the Windows NT domain controller to check the validity of the user in the domain. If the user is not a valid user in the domain, then the request to access the Internet is denied. If authentication succeeds, the source IP address is entered in the Content Engine authentication cache. Future requests from this IP address are not challenged until the authentication cache entry expires or is cleared.

You can use the Content Engine GUI or CLI to configure a locally deployed Content Engine to use an NTLM server for HTTP request authentication.

Use the ntlm server command to enable NTLM authentication; configure the NTLM server domain name, and NT primary domain controller (PDC) name or IP address; and optionally set the host name or address as primary or secondary.

The following is an example of how to use the CLI to configure a locally deployed Content Engine for NTLM authentication of HTTP requests.

ContentEngine(config)# ntlm server domain cisco_abc
ContentEngine(config)# ntlm server host 172.16.10.10 primary
ContentEngine(config)# ntlm server host 172.16.10.12 secondary
ContentEngine(config)# ntlm server enable 

ContentEngine# show ntlm
NTLM parameters:
Primary:       172.16.10.10 
Secondary:     172.16.10.12 
State:          Enabled
Domain name: cisco_abc

From the Content Engine GUI, choose Caching > NTLM to access the NTLM window. (See Figure 8-6.) Use the NTLM window to specify NTLM server settings on the Content Engine, and click Update. For more information about the fields on the NTLM window, click the HELP button.

Figure 8-6 NTLM Authentication Window

Before invoking an NTLM authentication request, make sure that the following conditions exist.

The NTLM primary domain controller has an entry in the Domain Name System (DNS) that matches its NetBIOS-named computer account.

The primary domain controller is both forward and reverse DNS-resolvable.

The domain name configured on the Content Engine matches the domain of which the primary domain controller is a part.

In the following example, server1 must be in the cisco.com domain and must have an entry in DNS that matches its NetBIOS-named computer account.

ip domain-name cisco.com
ntlm server host server1

For clients within the domain using the Internet Explorer browser in proxy mode, authentication is "popless"; this is, the user is not prompted with a dialog box to enter a username and password. In transparent mode, authentication is transparent only if the Internet options security settings are customized and set to User Authentication > Logon > Automatic logon with current username and password.

For clients outside the domain using the Netscape browser, a dialog box appears and the first authentication request asks the client to enter a username and password. Once the client is successfully authenticated, the entry is placed in the cache, and no reauthentication requests are made to the client until the lease expires.

Configuring Group-Based Authorization

In Windows NT and Windows 2000 domains, administrators can use the Windows group feature to create groups in order to organize security principles, including user and other resources. An Active Directory (AD) database is a user database of a Windows 2000 server. This database can be queried for authentication purposes when LDAP or NTLM is used.

Configuring the LDAP Acceptable Use Policy Feature

In ACNS 5.1 software, an LDAP acceptable use policy feature has been implemented. When a user opens a browser session, the Content Engine queries a specific LDAP attribute to determine whether the user has viewed and accepted the acceptable use policy (AUP). If a user has not accepted this policy, then the Content Engine will redirect the user to an internal web page with the AUP, which the user must read and accept before being allowed to browse content through the Content Engine. Once the user accepts the policy, the Content Engine sets an LDAP attribute that allows the user full access to browse through the proxy (the Content Engine).

This LDAP attribute is configurable and is an integer stored in the user's database that represents the version of the policy that the user has accepted. This value is compared against the current version set in the Content Engine. If these values are equal, the user is given access to browse; otherwise, the use is redirected to the configured URL that sends the user to the internal web page that allows the user to read and accept the AUP.

Use the ldap server policy-redirect enable command to enable the AUP. Use the ldap server policy-redirect redirect-url url command to specify the URL to which the user is redirected to view and accept the policy. Use the ldap server policy-redirect attribute attribute to define the LDAP attribute that is to be queried for the version that the user has accepted.

To configure the AUP on a locally deployed Content Engine, follow these steps:


Step 1 Enable the AUP on the Content Engine.

ContentEngine(config)# ldap server policy-redirect enable

Step 2 Specify the URL that the user is redirected to in order to view and accept the policy.

ContentEngine(config)# ldap server policy-redirect redirect-url url

Step 3 Specify the LDAP attribute that the Content Engine should query to determine the version of the AUP that the user has accepted.

ContentEngine(config)# ldap server policy-redirect attribute aup-attribute

Step 4 Specify the current version of the AUP on the Content Engine. This is a global value that is used for all users to view so that they can determine whether they have accepted this version of the AUP.

ContentEngine(config)# ldap server policy-redirect value latest-policy-version


Configuring the LDAP Password Expiration Feature

The LDAP password feature allows you to configure the Content Engine to redirect users to a web page, which will prompt them for a username and password. To configure the LDAP authorization password expiration feature, use the ldap server password-expiry global configuration command. For more information about the ldap server command, see Table 8-4.

About Group Name-Based Access Lists

In ACNS 5.x software, you can use group-based access lists to control whether members of a particular group should be denied or granted access to the content that is served by the Content Engine. Figure 8-7 shows an example of an access list that will grant any user access to the requested content other than those users who belong to the group named "Marketing." The members of the Marketing group are denied access because the access list explicitly denies access to this particular group.

Figure 8-7 Group Name-Based Access Lists


Note In ACNS releases prior to 5.1, group name-based access lists were supported, but they did not support static groups. This group name-based access lists feature is referred to as group-based authorization.


When working with group name-based access lists, note the following guidelines:

By default, the access lists option is disabled on a Content Engine. To enable this option on a locally deployed Content Engine, perform one of these tasks:

Use the access-lists enable global configuration command.

From the Content Engine GUI, choose System > Access Lists, and click the Enable access lists On radio button.

You can use the Content Engine GUI or CLI to define these access lists. To define these access lists, perform one of these tasks:

Use the access-lists 300 command to permit or deny a group from accessing the Internet using a locally deployed Content Engine. For more information on this topic, see the "Configuring Group-Based Authorization Using CLI Commands" section.

From the Content Engine GUI, choose System > Access Lists, and use the displayed Access Lists window to define the entries for the access list. For more information on this topic, see the "Configuring Group-Based Authorization Using the Content Engine GUI" section.

Group information will be checked and applied only if the access lists feature is enabled on the Content Engine.

If a user does not belong to any group defined in the access lists, then the default policy is to allow the user access to the requested content.

If group-based authorization has been enabled on a Content Engine, it can be disabled on the Content Engine without losing any of the configured access lists. To disable the access list feature without losing configured access lists, perform one of these tasks:

From the Content Engine GUI, choose System  > Access Lists. Click the Enable access lists Off radio button in the Access Lists window, and then click Update.

From the CLI, use the no access-lists command.

For Windows-based user groups, you must append the domain name in front of the group name in the form domain\group.

For Windows NT-based user groups, use the domain NetBIOS name.

For Windows 2000-based user groups, use the domain DNS name.

Configuring Group-Based Authorization Using the Content Engine GUI

To configure a locally deployed Content Engine to support group-based authorization for LDAP and NLTM users, follow these steps:


Step 1 From the Content Engine GUI, choose System > Access Lists. The Access Lists window appears. (See Figure 8-7.)

Step 2 In the Access Lists window, click the Enable access lists On radio button to enable the group name-based access list option on this Content Engine.

Step 3 In the List 300 Group Name field, enter the name of the group (for example, Engineering) that you want to add to this access list. A group name can have spaces.

Step 4 Click the appropriate Group permissions radio button to indicate whether the group should be permitted or denied access to the Internet through this Content Engine. For example, to allow any user from the Engineering group to access content through this Content Engine, click the permit radio button.

Step 5 In the Position in the list field, enter a positive integer that denotes the position of the group name in the access list. The valid range is 1 to 4294967294. The default value zero (0) adds the item at the end. A negative value is not allowed.

Step 6 Click Update to save the group name-based access list on this Content Engine.

Step 7 To add additional entries to this access list, repeat Step 3 through Step 6.

For example, to deny access to any user who does not belong to the Engineering group, click the Any check box, and then click the Group permission deny radio button.


Note For more information about the fields in the Access Lists window, click the HELP button.


Step 8 Click Update again to save the group name-based access list on this Content Engine.


Configuring Group-Based Authorization Using CLI Commands

When using the CLI to configure group-based authorization for LDAP and NTLM users on a locally deployed Content Engine, note the following guidelines:

Use the access-lists 300 command to define these group-based access lists. These lists determine which groups will be allowed or denied access to the Internet using this Content Engine.

By default, group name-based access lists are disabled on a Content Engine. Use the access-lists enable global configuration command to enable these access lists on a locally deployed Content Engine. If the access list feature has been enabled, you can disable it on a locally deployed Content Engine without losing the configured access lists. Use the no access-lists command to disable the access list feature without losing the configured access lists.

To use the CLI to configure group name-based access lists on a locally deployed Content Engine, follow these steps:


Step 1 From global configuration mode, use the access-lists 300 permit groupname command to configure the entries for the group name-based access list on the Content Engine.

For example, permit access to groups within the base string cisco based on organizational units such as Marketing or Engineering using the access-lists 300 permit groupname command.

In this example, group access is allowed for any user in the Marketing and Engineering groups. A user who does not belong to any of these groups is denied access with the access-lists 300 deny groupname any command.

ContentEngine(config)# access-lists 300 permit groupname Marketing
ContentEngine(config)# access-lists 300 permit groupname Engineering
ContentEngine(config)# access-lists 300 deny groupname any

Step 2 Enable the group name-based access list option on the Content Engine.

ContentEngine(config)# access-lists enable


LDAP Group-Based Authorization

In ACNS releases prior to 5.1, group name-based access lists were supported but did not support static groups. To ensure interoperability of the Content Engine group authentication support with the Microsoft Active Directory database, the ACNS 5.1 software now supports LDAP group-based authorization for static groups.

Configuring LDAP Group Authorization with Access Lists

In this scenario, group access to the Internet is allowed to the following users:

Any user who belongs to the "Marketing" organizational unit of the company named "cisco."

Any user who belongs to the organizational unit named "Engineering" except for those users who belong to the group named "Hardware Engineers." Members of the nested group named "Hardware Engineers" will be denied access because they belong to a group that has been explicitly denied access.


Note This scenario assumes the LDAP directory has the structure depicted in Figure 8-4.


This scenario assumes that the LDAP administrator has defined the group named "Engineering" as the 
parent of the "Hardware Engineers" and "Software Developers" groups in the LDAP directory, as 
follows:
dn: cn=Engineering,dc=cisco,dc=com
cn: Engineering
objectclass: groupOfNames
member: cn:Hardware Engineers,dc=cisco,dc=com
member: cn:Software Developers,dc=cisco,dc=com

dn: cd=Hardware Engineers,dc=cisco,dc=com
cn: Hardware Engineers
object: groupOfNames
member: cn=Jay Doe,ou=Engineering,dc=cisco,dc=com
member: cn=Don Smith,ou=Engineering,dc=cisco,dc=com

dn: cn=Software Developers,cd=cisco,cd=com
cn: Software Developers
objectclass: groupOfNames
member: cn=John Gold,ou=Engineering,dc=cisco,dc=com
member: cn=John Smith,ou=Engineering,dc=cisco,dc=com

To configure a locally deployed Content Engine for LDAP group-based authorization, follow these steps:


Step 1 In global configuration mode, enter the ldap server host command to enable access to the LDAP server. Enter a host name or an IP address for the LDAP server.

In the following example, the IP address of the LDAP server is used.

ContentEngine(config)# ldap server host 10.1.1.1

Step 2 Use the ldap server base command to specify the base distinguished name (dn) as the starting point for the directory search.

In this example, the strings "cisco" and "com" are used for the directory search.

ContentEngine(config)# ldap server base "dc=cisco,dc=com"

Step 3 Use the ldap server enable command to enable LDAP authentication on this Content Engine.

ContentEngine(config)# ldap server enable

Step 4 Use the access-lists 300 groupname command to define which groups are granted or denied access to content that is served by this Content Engine.

In this example, the access-lists 300 permit groupname command is used to grant group access to any user who is not a member of the nested static group named "Hardware Engineering."

ContentEngine(config)# access-lists 300 deny groupname Hardware Engineering
ContentEngine(config)# access-lists 300 permit groupname any

Step 5 Use the access-lists enable global configuration command to enable group name-based access lists on the Content Engine.

ContentEngine(config)# access-lists enable


NTLM Group-Based Authorization

In ACNS software releases prior to 5.1, the Content Engine only supported local groups with a global group for NTLM group-based authorization. To ensure interoperability of the Content Engine NTLM group authentication support with the Microsoft Active Directory database, the ACNS 5.1 software now supports static groups.

Active Directory Group Searches

ACNS 5.1 software can retrieve nested group names using an LDAP recursive search and apply all the access control lists (ACLs) configured for the nested groups. When you use nested groups with Active Directory servers, the policies configured for parent groups are automatically applied to members in subgroups.


Note There are three kinds of groups in an Active Directory: universal, global, and domain local.


The following are the different operations that occur during an Active Directory group search:

1. The user is authenticated with the NTLM scheme, and the direct global group names are retrieved.

2. The LDAP server is checked for information about the user host domain.

3. The username and user host domain information are used to search for the user LDAP entry in the global catalog (GC) server and to obtain the user distinguished name.

A global catalog server is a server that stores a partial copy of all the objects in the entire Active Directory.

4. Direct groups to which the user belongs are discovered by looking at the memberOf attribute on the global catalog server.

Direct groups are those groups to which a user directly belongs.

5. If the user does not belong to the host domain of the global catalog server, the LDAP server is searched for the user's direct global and domain local groups in the user host domain.

6. For each of the direct groups, a recursive query is performed until no new group can be found or until the maximum recursive search limit (100) is reached.

To perform a recursive query, an enumeration user's credentials must be provided to query the primary domain controller for a complete list of group names. An enumeration user is an account defined on the Content Engine to allow the Content Engine to perform a search on an Active Directory server. This enumeration user needs to have read privileges throughout the whole directory.

You can configure a primary and a secondary global catalog server. When the primary global catalog server is not reachable, the Content Engine will try to contact the secondary global catalog server.

When you enable Active Directory search groups, the access list must be configured with the correct domain name. The group name should look like this:

DNS domain name\group name

The following is an example of the access list that must be configured to enable Active Directory search groups:

ContentEngine(config)# access-lists 300 permit groupname mydomain.local\univ11_sec
ContentEngine(config)# access-lists 300 deny groupname any
ContentEngine(config)# access-lists enable 

To configure the Active Directory groups searches on a Content Engine, use the ntlm server ad-group-search global configuration command.

ntlm server ad-group-search {enable | enum-user {domain domain-name | password pass | username user-name} | gc-server {host {host-name | ip-address} domain domain-name {primary | secondary}} | port port-num} | groupname-attribute group-name| ldap-search-server {host {host-name | ip-address} {primary | secondary} | port port-num} | membership-attribute member | user-objectclass object | username-attribute user}

Table 8-6 Parameters of the ntlm server ad-group-search Command 

Parameter
Description

server

Configures NTLM server-related parameters.

ad-group-search

Configures the Active Directory group search options.

enable

Enables an Active Directory group search.

enum-user

Configures the enumeration user parameters.

domain

Specifies the enumeration user domain.

domain-name

Enumeration user domain name.

password

Specifies the enumeration user password.

pass

Enumeration user password.

username

Specifies the enumeration user username.

user-name

Enumeration useruser name.

gc-server

Specifies the global catalog (GC) server parameters.

host

Specifies the global catalog server host name or IP address.

host-name

Global catalog host name.

ip-address

Global catalog IP address.

domain

Specifies the host domain name for this global catalog server.

domain-name

Host domain name.

primary

Identifies this server as the primary global catalog server.

secondary

Identifies this server as the secondary global catalog server.

port

Specifies the global catalog server port. The default is 3268.

port-num

Port for the global catalog server (1-65535).

groupname-attribute

Specifies the group name attribute in the Active Directory. The default is "cn" for common name.

group-name

Group name attribute in the Active Directory.

ldap-search-server

Configures LDAP search server parameters.

host

Specifies the IP address or the host name of the LDAP server.

host-name

Host name of the LDAP server.

ip-address

IP address of the LDAP server.

primary

Identifies this server as the primary LDAP search server.

secondary

Identifies this server as the secondary LDAP search server.

port

Specifies the LDAP search server port. The default is 389.

port-num

LDAP search server port (1-65535).

membership-attribute

Specifies the membership attribute in the Active Directory. The default is memberOf.

member

Membership attribute in the Active Directory.

user-objectclass

Specifies the object class for the user object. The default is user.

object

Object class for the user object.

username-attribute

Specifies the username attribute in the Active Directory. The default is sAMAccountName.

user

Username attribute in the Active Directory.

connection-retry

Specifies the maximum number of attempts to connect to the server. The default is 2.

number

Maximum number of attempts to connect to the server.


The following example shows how to enable and implement Active Directory search groups on a locally deployed Content Engine:

ContentEngine(config)# ntlm server host 10.77.157.163 primary
ContentEngine(config)# ntlm server domain cache
ContentEngine(config)# ntlm server enable
ContentEngine(config)# ntlm server domain cache
ContentEngine ntlm server ad-group-search enum-user username administrator
ContentEngine(config)# ntlm server domain cache
ContentEngine ntlm server ad-group-search enum-user password ***
ContentEngine(config)# ntlm server ad-group-search enum-user domain cache.acns
ContentEngine(config)# ntlm server ad-group-search gc-server host 10.77.157.213 domain 
acns primary
ContentEngine(config)# ntlm server ad-group-search ldap-search-server host 10.77.157.163 
primary
ContentEngine(config)# ntlm server ad-group-search enable

The following example shows the output of the show ntlm command when the Active Directory search groups option has been enabled:

ContentEngine# show ntlm
NTLM parameters:
        Primary :       10.77.157.163
        Secondary :     <none>
        State:          Enabled
        Default domain: cache
        Connection Timeout:     5
        Connection Retries:     2

Configuring NTLM Group Authorization with Access Lists

To configure NTLM-based group authorization on a Content Engine, follow these steps. In this scenario, NTLM group access is allowed to the Engineering and Marketing groups in the company named "cisco."


Step 1 In global configuration mode, enter the ntlm server host command to enable access to the NTLM server. Enter either a host name or an IP address for the NTLM server.

In the following example, the IP address of the NTLM server is used.

ContentEngine(config)# ntlm server host 10.1.1.1 primary

Step 2 Use the ntlm server domain command to configure the NTLM server domain name for this Content Engine.

ContentEngine(config)# ntlm server domain domain

Step 3 Enable NTLM authentication on this Content Engine with the ntlm server enable command.

ContentEngine(config)# ntlm server enable

Step 4 Permit access for groups within the base string cisco, based on organizational units such as Marketing and Engineering, using the access-lists 300 permit groupname command.

In this example, group access is granted to any user in the Marketing and Engineering groups. A user who does not belong to either of these groups is denied access with the access-lists 300 deny groupname any command.

ContentEngine(config)# access-lists 300 permit groupname Marketing
ContentEngine(config)# access-lists 300 permit groupname Engineering
ContentEngine(config)# access-lists 300 deny groupname any

Step 5 Enable group name-based access lists on this Content Engine with the access-lists enable global configuration command.

ContentEngine(config)# access-lists enable


Configuring End-to-End Authentication

The ACNS 5.x software supports both basic and NTLM end-to-end authentication. End-to-end NTLM authentication includes pass-through servicing and the caching of web objects that require NTLM authentication.

HTTP request authentication authenticates a user's domain, username, and password with a preconfigured NTLM domain controller before allowing requests from the user to be served by the Content Engine. NTLM authentication works only in a Microsoft environment (for instance, Microsoft Internet Explorer clients accessing Microsoft Internet Information Services [IIS] servers).


Note End-to-end NTLM authentication is supported with WCCP Version 2 transparent caching only.

For HTTP request authentication, if NTLM authentication is used but the browser does not support NTLM authentication, the username and password information is passed to the Content Engine in clear text with a basic authentication header. The Content Engine then uses this information to authenticate the user against the preconfigured Windows NT domain controller.


Basic End-to-End Authentication

The ACNS software can strip NTLM authentication headers to allow fallback to a basic-style authentication challenge against IIS servers. Basic authentication is designed to allow browsers to authenticate entered user IDs against a Microsoft IIS web server that issues an NTLM-based challenge.

NTLM is proprietary and undocumented. Removing the NTLM headers allows the browser to fall back on the basic authentication method. If IIS is configured to still accept basic authentication, IIS authentication credentials can proceed through a Content Engine, but with reduced security.

Use the http authenticate-strip-ntlm global configuration command to enable stripping of NTLM headers.

NTLM End-to-End Authentication

The two levels of NTLM end-to-end support can be summarized as follows:

NTLM pass-through service

If NTLM pass-through service is set on the server, the Content Engine sets up a secure persistent connection between the client and the server through the Content Engine. NTLM authentication messages pass through this virtual persistent connection. The Content Engine does not cache any object transferred on the virtual connection. All the client requests are served by the origin server.

NTLM object caching

The ACNS 5.x software can be configured to cache objects that require NTLM authentication. The server puts a "no-store" flag on a reply object to prevent the reply from being cached. If no such flag is present, the object is cacheable. When the Content Engine receives a request from a client already connected with the intended NTLM server, the Content Engine searches the cache.

For a cache miss, the request is forwarded to the origin server. The reply object is then sent to the client and a copy is cached.

On a cache hit, the Content Engine checks for a secured connection between this client and the server. If the object requires NTLM authentication and there is no virtual persistent connection set up between the client and the server, the Content Engine establishes the secured connection between client and server and forwards the request to the server. If there is a virtual persistent connection between the client and the server, an if-modified-since (IMS) message is sent to the server to verify the validity of the object and the user's access rights to this object before the cached copy is served to the client.

Example of End-to-End NTLM Authentication

This example configures a Content Engine for end-to-end NTLM authentication. By default, basic and NTLM authenticated objects are not cached.

ContentEngine(config)# no http authenticate-strip-ntlm
ContentEngine(config)# http cache-authenticated ntlm
ContentEngine# show http cache-authenticated ntlm
Basic authenticated objects are not cached.
NTLM authenticated objects are cached.