Wifi Ruckus R700 Secure - Hotspot - Configuration PDF
Wifi Ruckus R700 Secure - Hotspot - Configuration PDF
Wifi Ruckus R700 Secure - Hotspot - Configuration PDF
Tech Note
Configuring
Hotspots
with
Secure
Hotspot
Table
of
Contents
Copyright
Notice
and
Proprietary
Information
................................................................................
3
Overview
........................................................................................................................................................
5
What Is Covered Here .......................................................................................................................... 5
Requirements for this Document .......................................................................................................... 5
Technical data contained in this publication may be subject to the export control laws of
the United States of America. Disclosure to nationals of other countries contrary to United
States law is prohibited. It is the readers responsibility to determine the applicable
regulations and to comply with them.
Disclaimer
Limitation of Liability
Trademarks
Ruckus Wireless is a trademark of Ruckus Wireless, Inc. in the United States and other
countries. All other product or company names may be trademarks of their respective
owners.
This document provides step-by-step procedures for configuration and testing. Some
knowledge of hotspots, Wi-Fi design and 802.11 principles is recommended. A detailed
and technical discussion of HTML, JavaScript, python and XML is included
here. Knowledge of these is highly recommended.
Instead of manually configuring each individual laptop with an encryption key and the
requisite wireless SSID, Dynamic PSK automates and centralizes this process. Once
enabled for the entire system, a new user simply connects to the Ethernet LAN and
authenticates via a captive portal hosted on the Ruckus ZoneDirector. Mobile devices like
the Apple iPhone can also be authenticated through a captive portal over wireless. This
information is checked against any standard back-end authentication (AAA) server such as
Active Directory, RADIUS, LDAP or an internal user database on the ZoneDirector.
Upon successful authentication, the ZoneDirector generates a unique encryption key for
each user. The lifetime of the key can be configured to align with appropriate policies. A
temporary applet with the unique user key and other wireless configuration information is
then pushed to the client. This applet automatically configures the users device without
any human intervention. The user then detaches from the LAN and connects to the wireless
network. Once associated, the Dynamic PSK is bound to the specific user and the end
device being used.
Restricted mode is similar to how many hotspots operate today. The user must enter a
username and password into a login form on a captive portal before gaining access as an
authorized user.
In each case, the user will receive a D-PSK that will provision their device and connect it to
the secure network.
ZD1100 1,000
ZD3000 5,000
ZD5000 5,000
Open network The initial provisioning SSID where a user authenticates and
receives a D-PSK
Secure network The encrypted network that a users D-PSK is activated to use
Information and resources can be found in the Appendices at the end of this document.
This document contains specific example files and code. These are offered as examples to illustrate
concepts and should not be used outside of a lab environment.
* The authentication server can be any of the types supported by the ZoneDirector. These
are the internal database of the ZoneDirector, RADIUS, Active Directory and LDAP. For
simplicitys sake, the internal database is used in this document, but any of the support
server types will work.
Configuration
Before beginning these steps, make sure the ZoneDirector is configured with an IP address
and is on a subnet that has connectivity to the AP and the captive portal server.
1. Go to Configuration->Hotspot Services
2. Click the Create New link
3. Give the profile a name
4. Enter the page on the captive portal to redirect new/authenticated clients
5. Select the authentication server from the drop-down box
1. Go to Configuration->WLANs
2. Click the Create New link
3. Enter the SSID name
4. Select Hotspot (WISPr) as the WLAN type
5. Select Open for the Authentication and Encryption Options
6. Select the hotspot service created previously from the drop-down box
1. Go to Configuration->WLANs
2. Click the Create New link
3. Enter the SSID name
4. Select Standard Usage as the WLAN type
5. Select Open for the Authentication Option
6. Select an Encryption Option WPA2/AES is highly recommended
7. Enter a passphrase for the SSID this should be considered the master PSK and not
given out
8. Select the box labeled Enable Zero-IT Activation
9. Select the box labeled Dynamic PSK and specify the length of the passphrase
Additional options are available for both the hotspot SSID and the open SSID. These
include features such as client isolation, ACLs, VLAN assignment, etc. For more
information, please refer to the Ruckus Wireless ZoneDirector User Guide.
This section describes how to create the basic code required for a web server to handle
captive portal requests. The procedure is broken down into the following steps:
Readers with their own web server may skip these steps. Unless using Apache, the process
for configuring other web servers may be different from the process described below.
Apache
Installation
Apache is an open source initiative that offers both pre-built binaries and full source code.
It is a full-fledged web server and supports a wide variety of authentication methods.
Installation steps:
1. Install Apache
2. Verify installation
3. Configure Apache
4. Test
Install
Apache
Apache installation is consists of two main steps: installing the software and editing
configuration files. The Apache software consists of the following Linux packages:
httpd
httpd-tools
apr-util
apr
python 2.7
mod_wsgi
mod_ssl*
openssl*
1
The examples in this document were developed with Apache 2.4.3 on a Fedora 17 server.
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 17
Install Apache: Step-by-Step
1. Launch the software manager. From the menu bar, select Applications->System Tools-
>Add/Remote Software
2. Enter apache in the search box to find Apache-related packages
/etc/httpd/conf/httpd.conf
Its a good idea to make backups of any files related to any existing services. If anything
goes wrong with the configuration, you can always go back to the original file and start
again. To backup these files open a Terminal window as root and enter the following
commands:
It is also recommended to backup these files after the configuration is complete as well.
Depending on the deployment environment, the following options may need configuration
in the httpd.conf file:
CGI Configuration
CGI is how a webserver interacts with executable scripts and files. Because this example
uses python scripts the server must be configured to use them. Find the line in httpd.conf
that starts with the following:
2
These
locations
are
based
on
a
Fedora
installation
different
distributions
may
install
in
different
locations.
For
simplicity,
only
the
default
Fedora
location
is
used
in
this
document
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 19
<Directory "/var/www/cgi-bin">
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI
AddHandler cgi-script .cgi .py
Order allow,deny
Allow from all
Require all granted
</Directory>
Next, add the python file extension (.py) to the AddHandler command. Find the line that
looks like this:
There is one last place where CGI executables need to be defined. Find this line:
If the client downloads the Zero-IT script from the web server instead of directly from the
ZoneDirector, the correct MIME types must be set. Edit the file /etc/mime.types and make
sure the supported platforms are included:
Note that the .exe extension is one of several mapped to the octet-stream type.
Hotspot
Flow
Before writing hotspot code for the captive port, it is useful to understand the workflow.
The basic workflow for a restricted user is shown below:
The workflow for an unrestricted user follows the same process except an authentication
server is not used.
3
Any
web
site
that
uses
encryption
(the
URL
starts
with
https://)
will
not
be
redirected.
This
is
because
the
AP
cannot
decrypt
the
traffic
to
see
the
session
information.
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 25
ort=3990&uamhttps=3992&challenge=418206b5a4f7af113d69884975d58eed&m
ac=14-10-9F-D5-71-3B&ip=192.168.40.150&ssid=hautespot1&called=C0-
8A-DE-2F-42-
40&nasid=nas01&locationdesc=RuckusKitchen&userurl=http%3a%2f%2fwww.
apple.com%2f
If the hotspot operator wants to make iOS devices behave the same way as other types of
computers, www.apple.com can be added to the walled garden settings. Allowing clients
access to their default URL will prevent triggering the previous behavior.
In this example, the following parameters are passed to the captive portal web server as
part of this redirect:
Parameter Description
Name
mac AP MAC
The following is snippet from an example login page for the web server . It loads JavaScript 4
to handle the login logic and a form that asks for the user to enter their credentials. A full
copy of this file is available in Appendix A: Web Logic.
Note that although the ZoneDirector originally sent the name of the open provisioning
SSID in the redirect URL, from here on references to the WLAN are for the secure SSID.
<script type="text/javascript">hotspot_login_form()</script>
4
Fully
working
examples
of
all
HTML
and
JavaScript
code
used
in
this
document
is
available
in
Appendix
A:
Web
Logic.
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 27
Parameter
parsing
The HTTP redirect that the ZoneDirector gives the client contains a query string with a
number of parameters. Some parsing is required to extract these values for use.
}
function get_param(name) {
if (location.href.indexOf("?") >= 0) {
var query=location.href.split("?")[1];
var params=query.split("&");
for (var i=0; i < params.length; i ++) {
value_pair=params[i].split("=");
if (value_pair[0] == name)
return unescape(value_pair[1]);
}
}
return "";
}
There are two key actions performed here: the user is prompted to enter their credentials
(username and password) and the redirect URL is parsed into its component variables by
get_param(). This information is required for the rest of the process. Note that all of the
parameters extracted from the redirect URL are sent as hidden fields. This information is
then posted to the python script: hotspot-restricted.py.
document.write('action="../cgi-bin/hotspot-restricted.py"');
Note that in order to communicate with the ZoneDirector, the captive portal must
authenticate itself with the northbound interface password.
All of the fields passed to this script by the JavaScript function are placed into local
variables for use.
# ZoneDirector IP address
tmp_sip = form["zip"].value
if len(tmp_sip) == 0:
return
sip = tmp_sip.strip()
The server must also be configured with the URLs required to interface with the
ZoneDirector. There are two. The northbound URL is used for all authentication messages:
https://zonedirector-address/admin/_portalintf.jsp
https://zonedirector-address/ user/user_extern_prov.jsp
Request Method:POST
Request URL: /admin/_portalintf.jsp
Post Data:
<ruckus>
<req-password>myPassword</req-password>
<version>1.0</version>
<command cmd="user-authenticate"
ipaddr="172.16.17.101" macaddr="00:22:FB:18:8B:26"
name="test" password="test"/>
</ruckus>
return xml_request
response = buf.getvalue()
buf.close
return response
The ZoneDirector will return a response code indicating if the authentication was successful
or if there was an error. If the authentication was successful, the script can request the
ZoneDirector generate a D-PSK for the user.
XML message:
Request Method:POST
Post Data:
<ruckus>
<req-password>myPassword</req-password>
<version>1.0</version>
<command cmd="unrestricted" ipaddr="172.18.110.221"
macaddr="c4:17:fe:03:0d:1b" name="frank"/>
</ruckus>
The information sent to the ZoneDirector is exactly the same as the restricted user example
except there is no password.
return xml_request
XML message:
<ruckus>
<req-password>myPassword</req-password>
<version>1.0</version>
<command cmd=generate-dpsk>
<dpsk expiration=HOURS key-length=LEN user=USER
mac=MAC_ADDR wlan=SSID vlan-id=VLAN_ID/>
</command>
</ruckus>
The key length is the number of characters in the generated DPSK. The length must be at
least 8 characters and no more than 62.
return xml_request
XML message:
Request Method:POST
Request URL: /admin/_portalintf.jsp
Post Data:
<ruckus>
<req-password>myPassword</req-password>
<version>1.0</version>
<command cmd=get-dpsk>
<dpsk mac=MAC_ADDR wlan=SSID"/>
</command>
</ruckus>
Note that the information provided by this call is also returned in the response to a
generate-dpsk request.
Note that the expiration returned by the ZoneDirector here is not the number of hours but
the actual date and time the key will expire.
At this point the user is authorized to use the secure SSID and can be given the D-PSK
information (passphrase and expiration date) just retrieved.
The user may also download the Zero-IT script to automatically configure their device and
move them to the new secure WLAN. There are two ways to do this: allow the client to
download the script directly from the ZoneDirector or have the captive portal download
the file and then offer it to the client.
https://192.168.252.253/user/user_extern_prov.jsp?mac=f0:b4:79:18:2
0:7f&wlan=secure-dpsk&key=782e99e46173ac5a4b18328cdac7087d181aba4f
Note that the base URL is different from what has been used in other examples. It uses the
following construction:
A new component of this URL is the key parameter. Since the client has never
authenticated itself directly to the ZoneDirector, some method must be used to let the
ZoneDirector know it can trust the client. The key is derived as follows:
client_string = client_mac&wlan&northboundPassword
key = SHA1(client_string)
req_url = ''
req_url += prov_url + "?"
req_url += "mac=" + client_mac + "&"
req_url += "wlan=" + wlan + "&"
req_url += "key=" + key
return req_url
This function returns the provisioning URL, which a client may use to directly download the
Zero-IT script from the ZoneDirector. It takes the form of a simple HTML post. The link can
displayed to the user to click or could be started automatically.
NOTE: If HTTPS is used, most clients will expect a valid SSL certificate from the
ZoneDirector. ZoneDirectors use a self-signed certificate by default that is not trusted. To
avoid problems, a commercial certificate issued by a known root or intermediary CA is
highly recommended. A certificate issued by a private CA may be used, however clients
must have this certificate installed and trusted beforehand. For more information on
building a private Certificate Authority, please see the Ruckus technical notes: Creating
Private PKIs with XCA and Creating Private PKIs with Windows Server.
The web server downloads the script via the following XML call:
XML message:
<ruckus>
<req-password>myPassword</req-password>
<version>1.0</version>
<command cmd="get-prov-file" ipaddr=""
macaddr="0f:a1:40:33:c0:00" username="test" platform="win61"
version="" user-agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows
NT 6.1; WOW64; Trident/5.0)">
<wlansvc name="open-dpsk" expiration="168" key-
length="20" vlan-id="1" />
</command>
</ruckus>
This message is similar to others already used in this document. However it does require
the client operating system (platform) and the browser user agent. Acceptable values for
platform are:
When the file is retrieved from the ZoneDirector, the web server must make sure the file is
written with the correct file extension. Otherwise both the server and the client may not
recognize the binary correctly.
# Some of these values may not be safe for use in HTTP and
# need to be encoded to remove unsafe characters
tmp_username = urllib.quote_plus(username)
username = tmp_username
tmp_expiration = urllib.quote_plus(expiration)
expiration = tmp_expiration
xml_list = ['<ruckus><req-password>']
xml_list.append(nbi_password)
xml_list.append('</req-password>')
xml_list.append('<version>1.0')
xml_list.append('</version>')
xml_list.append('<command cmd= "get-prov-file"')
xml_list.append(' ipaddr="')
xml_list.append(client_ip)
xml_list.append('"')
xml_list.append(' macaddr="')
xml_list.append(client_mac)
xml_list.append('"')
xml_list.append(' username="')
xml_list.append(username)
xml_list.append('"')
xml_list.append(' platform="')
xml_list.append(platform)
xml_list.append('"')
xml_list.append(' user-agent="')
xml_list.append(agent)
xml_list.append('"')
xml_list.append(' version="')
xml_list.append(version)
xml_list.append('"')
xml_list.append('>')
xml_list.append('<wlansvc name="')
xml_list.append(wlan)
xml_list.append('"')
xml_list.append(' expiration="')
xml_list.append(expiration)
xml_list.append('"')
xml_list.append(' key_length="')
xml_list.append(key_length)
xml_list.append('"')
xml_list.append(' vlan-id="')
xml_list.append(vlan)
xml_list.append('"')
xml_list.append('/>')
xml_list.append('</command>')
xml_list.append('</ruckus>')
xml_request = "".join(xml_list)
The web server is responsible for distributing the file to the client either upon request
(through a link) or directly after the client is authorized.
Network connectivity
DNS
Redirection
UAM Logic
NAS authentication
User Authentication
This is not an exhaustive list, but represents good places to start. Following these steps in
order starts with the most basic problem and works upward from there in OSI layers as well
as overall complexity.
Network
Connectivity
Symptoms
Client is able to connect to the WLAN, but is not redirected to the captive portal login
page.
What
to
Check
Problems with network connectivity typically occur because of one or more of the
following:
DNS
Symptoms
Client is able to connect to the WLAN, has the correct network connectivity, but is not
redirected to the captive portal login page.
What
to
Check
Before a client is sent to a captive portal page, the AP must see a DNS query from the
clients web browser. This can only happen if the client is configured with a valid, reachable
DNS server.
What
to
Check
SSL
If the client traffic is encrypted, the AP will be unable to understand the HTTP request and
respond to it. The initial HTTP request from the client must always be unencrypted.
Server Response
The client must able to communicate with the web server. Problems usually occur because
the redirection URL is misconfigured on the AP or the client cannot reach the server.
What
to
Check
Failure here tends to be a problem with how the POST is handled to the ZoneDirector. If
the URL is not constructed correctly the ZoneDirector not authorize the client. This could
be because:
If this type of error occurs, a message is typically logged on the authentication server and is
the first place to determine if this is occurring.
User
Authentication
Symptoms
Client enters credentials on the captive portal but cant get further access, i.e. get
redirected to the login page again.
What
to
Check
This is usually a simple error in the credentials entered by the user. A log on the
authentication server should reveal if the user credentials were accepted or denied.
What
to
Check
There are many reasons why an XML call can fail. For more information on specific error
codes and their meanings, please see Appendix B: XML APIs.
If you do not have a tool that reveals the actual XML messages between the web server
and the ZoneDirector, more information (including the exact XML messages) is available
using a network capture tool such as Wireshark.
The following steps configure Wireshark to decrypt SSL traffic to the ZoneDirector:
Once the key is installed, Wireshark will be able to view all encrypted data between the
web server and the ZoneDirector. Decryption takes effect immediately, including any
currently captured traffic on the screen.
The packet sending XML data from the captive portal to the ZoneDirector should look
something like this:
<ruckus><req-password>testme123</req-
password><version>1.0</version><command cmd= "unrestricted"
ipaddr="10.3.7.13" macaddr="4c:b1:99:35:5f:d7" name="Me"/></ruckus>
Example scripts and directions on how to use them are available on the Ruckus
SecureHotspot evaluation web site.
Authentication
Request
The procedure for authenticating or deleting a user is shown in the diagram below:
This is an example authentication request sent from the captive portal to the ZoneDirector.
Post Data:
<ruckus>
<req-password>myPassword</req-password>
<version>1.0</version>
<command cmd="user-authenticate"
ipaddr="172.16.17.101" macaddr="00:22:FB:18:8B:26"
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 49
name="test" password="test"/>
</ruckus>
The ipaddr and macaddr are the IP address and the MAC address of the end user.
Possible responses from ZD for this authentication requests are:
Status Description
Code
200 OK - success
Deletion
Request
After a user session is authorized, an external web server can terminate the user session via
an XML request to the ZoneDirector. The user will be disassociated from the network and
re-association and re-authentication is required. The workflow is shown in the previous
diagram.
Post Data:
<ruckus>
The ipaddr and macaddr are the IP address and the MAC address of the end user. Possible
responses from ZD for this authentication requests are:
Status Description
Code
200 OK - success
Generate
a
D-PSK
The procedure for generating a D-PSK is shown in the diagram below:
Post Data:
<ruckus>
<req-password>myPassword</req-password>
<version>1.0</version>
<command cmd="generate-dpsk"><dpsk expiration="24" key-
length="20" user="test" mac="11:22:33:44:33:22" vlan-id="2"
wlan="frank-dpsk" />
</command>
</ruckus>"
If the request succeeds, the ZoneDirector will reply with the D-PSK information.
<ruckus>
<version>1.0</version>
<response-code>0</response-code>
<message>OK</message>
<result><dpsk mac="11:22:33:44:33:22" user="test" dvlan-
id="2" expiration="2011/09/14 09:22:57" wlan="frank-dpsk"
passphrase="fa9iYFE7;,113|-n*b?_" created="2011/09/13 09:22:57" />
</result>
Status Description
Code
200 OK - success
Retrieve
a
D-PSK
The procedure for retrieving a users D-PSK is shown in the previous diagram.
Request Method:POST
Post Data:
<ruckus>
<req-password>myPassword</req-password>
<version>1.0</version>
<command cmd="get-dpsk"><dpsk mac="11:22:33:44:33:22"
wlan="frank-dpsk" />
</command>
</ruckus>
If successful, the ZoneDirector will respond with the status of the request.
<ruckus>
<version>1.0</version>
<response-code>0</response-code>
<message>OK</message>
<result><dpsk mac="11:22:33:44:33:22" user="test" dvlan-
id="2" expiration="2011/09/14 09:22:57" wlan="frank-dpsk"
passphrase="fa9iYFE7;,113|-n*b?_" created="2011/09/13 09:22:57" />
</result>
</ruckus>
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 53
Possible responses from ZD for this authentication requests are:
Status Description
Code
200 Success
Download
Zero-IT
The client can download the Zero-IT script directly from the ZoneDirector or the captive
portal may download the script and offer it to the client.
Post Data:
Request Method:POST
Post Data:
<ruckus>
<req-password>myPassword</req-password>
<version>1.0</version>
<command cmd="unrestricted" ipaddr="172.18.110.221"
macaddr="c4:17:fe:03:0d:1b" name="frank"/>
</ruckus>
Status Description
Code
200 Success
#
# This is the main Apache HTTP server configuration file. It
contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed
information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do. They're here only as hints or reminders. If you
are unsure
# consult the online docs. You have been warned.
#
# Configuration and logfile names: If the filenames you specify for
many
# of the server's control files begin with "/" (or "drive:/" for
Win32), the
# server will use that explicit path. If the filenames do *not*
begin
# with "/", the value of ServerRoot is prepended -- so
'log/access_log'
# with ServerRoot set to '/www' will be interpreted by the
# server as '/www/log/access_log', where as '/log/access_log' will
be
# interpreted as '/log/access_log'.
#
# ServerRoot: The top of the directory tree under which the
server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path. If you
point
# ServerRoot at a non-local disk, be sure to specify a local disk
on the
# Mutex directive, if file-based mutexes are used. If you wish to
share the
# same ServerRoot for multiple httpd daemons, you will need to
change at
# least PidFile.
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 58
#
ServerRoot "/etc/httpd"
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built
as a DSO you
# have to place corresponding `LoadModule' lines at this location
so the
# directives contained in it are actually available _before_ they
are used.
# Statically compiled modules (those listed by `httpd -l') do not
need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Include conf.modules.d/*.conf
#
# If you wish httpd to run as a different user or group, you must
run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd
as.
# It is usually good practice to create a dedicated user and group
for
# running httpd, as with most system services.
#
User apache
Group apache
#
# ServerAdmin: Your address, where problems with the server should
be
# e-mailed. This address appears on some server-generated pages,
such
# as error documents. e.g. [email protected]
#
ServerAdmin root@localhost
#
# ServerName gives the name and port that the server uses to
identify itself.
# This can often be determined automatically, but we recommend you
specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP
address here.
#
#ServerName www.example.com:80
#
# Deny access to the entirety of your server's filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
#
<Directory />
AllowOverride none
Require all denied
</Directory>
#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working
as
# you might expect, make sure that you have specifically enabled it
# below.
#
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this
directory, but
#
# Relax access to content within /var/www.
#
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
#
# AllowOverride controls what directives may be placed in
.htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Require all granted
Allow from all
Satisfy any
</Directory>
#
# DirectoryIndex: sets the file that Apache will serve if a
directory
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 61
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
#
# The following lines prevent .htaccess and .htpasswd files from
being
# viewed by Web clients.
#
<Files ".ht*">
Require all denied
</Files>
#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a
<VirtualHost>
# container, error messages relating to that virtual host will be
# logged here. If you *do* define an error logfile for a
<VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog "logs/error_log"
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
<IfModule log_config_module>
#
# The following directives define some format nicknames for use
with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-
Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\" %I %O" combinedio
</IfModule>
#
# The location and format of the access logfile (Common Logfile
Format).
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 62
# If you do not define any access logfiles within a
<VirtualHost>
# container, they will be logged here. Contrariwise, if you
*do*
# define per-<VirtualHost> access logfiles, transactions will
be
# logged therein and *not* in this file.
#
#CustomLog "logs/access_log" common
#
# If you prefer a logfile with access, agent, and referer
information
# (Combined Logfile Format) you can use the following
directive.
#
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
#
# Redirect: Allows you to tell clients about documents that
used to
# exist in your server's namespace, but do not anymore. The
client
# will make a new request for the document at its new location.
# Example:
# Redirect permanent /foo http://www.example.com/bar
#
# Alias: Maps web paths into filesystem paths and is used to
# access content that does not live under the DocumentRoot.
# Example:
# Alias /webpath /full/filesystem/path
#
# If you include a trailing / on /webpath then the server will
# require it to be present in the URL. You will also likely
# need to provide a <Directory> section to allow access to
# the filesystem path.
#
# ScriptAlias: This controls which directories contain server
scripts.
# ScriptAliases are essentially the same as Aliases, except
that
# documents in the target directory are treated as applications
and
# run by the server when requested rather than as documents
sent to the
# client. The same rules about trailing "/" apply to
ScriptAlias
# directives as to Alias.
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 63
#
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
#
# "/var/www/cgi-bin" should be changed to whatever your
ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI
AddHandler cgi-script .cgi .py
Order allow,deny
Allow from all
Require all granted
Satisfy any
</Directory>
<IfModule mime_module>
#
# TypesConfig points to the file containing the list of
mappings from
# filename extension to MIME-type.
#
TypesConfig /etc/mime.types
#
# AddType allows you to add to or override the MIME
configuration
# file specified in TypesConfig for specific file types.
#
#AddType application/x-gzip .tgz
#
# AddEncoding allows you to have certain browsers uncompress
# information on the fly. Note: Not all browsers support this.
#
#AddEncoding x-compress .Z
#AddEncoding x-gzip .gz .tgz
#
# If the AddEncoding directives above are commented-out, then
you
# probably should define those extensions to indicate media
types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
#
# AddHandler allows you to map certain file extensions to
"handlers":
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 64
# actions unrelated to filetype. These can be either built into
the server
# or added with the Action directive (see below)
#
# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add "ExecCGI" to the "Options"
directive.)
#
AddHandler cgi-script .cgi .py
#
# Filters allow you to process content before it is sent to the
client.
#
# To parse .shtml files for server-side includes (SSI):
# (You will also need to add "Includes" to the "Options"
directive.)
#
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
#
# Specify a default charset for all content served; this enables
# interpretation of all content as UTF-8 by default. To use the
# default browser choice (ISO-8859-1), or to allow the META tags
# in HTML content to override this choice, comment out this
# directive:
#
AddDefaultCharset UTF-8
#
# The mod_mime_magic module allows the server to use various hints
from the
# contents of the file itself to determine its type. The
MIMEMagicFile
# directive tells the module where the hint definitions are
located.
#
MIMEMagicFile conf/magic
#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
2013 Ruckus Wireless, Inc. Secure Hotspot v1.9 65
#ErrorDocument 402 http://www.example.com/subscription_info.html
#
#
# EnableMMAP and EnableSendfile: On systems that support it,
# memory-mapping or the sendfile syscall may be used to deliver
# files. This usually improves server performance, but must
# be turned off when serving from networked-mounted
# filesystems or if support for these functions is otherwise
# broken on your system.
# Defaults if commented: EnableMMAP On, EnableSendfile Off
#
#EnableMMAP off
EnableSendfile on
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf