Copyright © 2006-2011 BalaBit IT Ltd.
The information in this documentation is subject to change without notice and describes only the product defined in the introduction of this documentation. This documentation is intended for the use of BalaBit's customers only for the purposes of the agreement under which the documentation is submitted, and no part of it may be reproduced or transmitted in any form or means without the prior written permission of BalaBit. The documentation has been prepared to be used by professional and properly trained personnel, and the customer assumes full responsibility when using it. BalaBit welcomes customer comments as part of the process of continuous development and improvement of the documentation.
The information or statements given in this documentation concerning the suitability, capacity, or performance of the mentioned hardware or software products cannot be considered binding but shall be defined in the agreement made between BalaBit and the customer. However, BalaBit has made all reasonable efforts to ensure that the instructions contained in the documentation are adequate and free of material errors and omissions. BalaBit will, if necessary, explain issues which may not be covered by the documentation.
BalaBit's liability for any errors in the documentation is limited to the documentary correction of errors. BALABIT WILL NOT BE RESPONSIBLE IN ANY EVENT FOR ERRORS IN THIS DOCUMENTATION OR FOR ANY DAMAGES, INCIDENTAL OR CONSEQUENTIAL (INCLUDING MONETARY LOSSES), that might arise from the use of this documentation or the information in it.
This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/). This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)
This documentation and the product it describes are considered protected by copyright according to the applicable laws.
The Zorp™ name and the Zorp™ logo are registered trademarks of BalaBit.
The BalaBit Shell Control Box™ name and the BalaBit Shell Control Box™ logo are registered trademarks of BalaBit.
The Syslog-NG™ name and the Syslog-NG™ logo are registered trademarks of BalaBit.
The BalaBit™ name and the BalaBit™ logo are registered trademarks of BalaBit.
Linux™ is a registered trademark of Linus Torvalds.
Debian™ is a registered trademark of Software in the Public Interest Inc.
Windows™ 95, 98, ME, 2000, XP are registered trademarks of Microsoft Corporation.
CryptoCARD™ is a registered trademark of CryptoCARD Corporation.
The Kaspersky module of the Zorp Content Vectoring framework is Powered by Kaspersky Anti-Virus. Kaspersky Anti-Virus™ is a registered trademark of Kaspersky Labs Ltd. (http://www.kaspersky.com).
ClamAV™ and Clam AntiVirus™ are registered trademarks of Tomasz Kojm (http://clamav.net).
VirusBuster™ is a registered trademark of VirusBuster Ltd. (http://vbuster.hu).
Nod32™ is a registered trademark of ESET, LLC (http://www.eset.com).
All other product names mentioned herein are the trademarks of their respective owners.
All rights reserved.
DISCLAIMER
BalaBit is not responsible for any third-party Web sites mentioned in this document. BalaBit does not endorse and is not responsible or liable for any content, advertising, products, or other material on or available from such sites or resources. BalaBit will not be responsible or liable for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods, or services that are available on or through any such sites or resources.
March 11, 2011
Abstract
This document is the primary guide for Zorp Gateway administrators.
Table of Contents
List of Examples
List of Procedures
Welcome to Zorp 3.3 Administrator's Guide!
This document teaches you how to administer one or more Zorp firewalls via Zorp Management System (ZMS) and its graphical user interface (GUI) frontend, the Zorp Management Console (ZMC). Besides the basic administrative tasks it also describes Zorp Authentication System (ZAS) and some other technologies closely related to Zorp, like syslog-ng.
This book does not teach you basic Linux, IPTables, networking and firewall skills. If you need more information on these, please refer to Appendix A for useful additional reading list.
Although the guide contains as many configuration examples as possible, it definitely cannot cover all the possible network setups where Zorp can be used. It cannot deal with esoteric protocols that are rarely used on proprietary networks either.
Giving a complete theoretical background on modern networking concepts is out of the scope of this guide. However, technical support statistics of BalaBit who developed Zorp show that it cannot be completely avoided, so many of the chapters start with theory primers of various length.
You can safely ignore these primers if you consider them a nuisance and even use this guide as a handbook reading only those chapters that you really need. Alternatively, you can use the final chapter only where a growing collection of step-by-step configuration examples are given with occasional background lexical information.
Chapter 1, Zorp administration introduces the different approaches to administering Zorp firewalls.
Chapter 2, Components of Zorp firewall solution describes the features and capabilities of the different components of Zorp.
Chapter 3, Architectural overview discusses general firewalling concepts, as well as Zorp specific topics.
Chapter 4, Installation and getting started guides you through the installation of Zorp and ZMS, the Zorp Management System.
Chapter 5, ZMS configuration management describes the main configuration utility of Zorp.
Chapter 6, Registering new hosts explains how to manage several firewalls using a single management server.
Chapter 7, Networking, routing, and name resolution describes the management of network interfaces, such as Ethernet cards.
Chapter 8, Creating Zorp policies describes how to customize the firewall system for optimal security.
Chapter 9, Logging with syslog-ng introduces the capabilities of syslog-ng.
Chapter 10, FreeText plugin discusses how to manage external services from ZMC.
Chapter 11, Native services describes the built-in DNS, NTP and mailing services of Zorp.
Chapter 12, Local firewall administration explains how to manage Zorp from a local console.
Chapter 13, Key and certificate management in Zorp introduces the use and management of certificates.
Chapter 14, Advanced ZMS and Agent configuration discusses various advanced topics.
Chapter 15, Clusters and high availability introduces the use and management of Zorp clusters.
Chapter 16, Virus and content filtering using ZCV discusses the concepts, configuration, and use of the Zorp Content Vectoring framework and the related modules.
Chapter 17, Connection authentication and authorization details the authentication and authorization services provided by Zorp and the Zorp Authentication Server.
Chapter 18, Monitoring hosts and servers describes how to monitor the state of hosts and servers from Zorp.
Chapter 19, Virtual Private Networks how to build encrypted connections between remote networks and hosts using virtual private networks (VPNs).
Appendix 1, Packet Filtering discusses how to configure and manage the built-in packet filter of Zorp.
Appendix 2, Keyboard shortcuts in ZMC describes the keyboard shortcuts available in ZMC.
Appendix 3, Further readings is a list of suggested reference materials in different Zorp and network security related fields.
Appendix 4, Zorp Application Level Gateway End-User License Agreement includes the text of the End-User License Agreement applicable to Zorp products.
This guide is intended for use by system administrators and consultants responsible for network security and whose task is the configuration and maintenance of Zorp firewalls. Zorp gives them a powerful and versatile tool to create full control over their network traffic and enables them to protect their clients against Internet-delinquency.
This guide is also useful for IT decision makers evaluating different firewall products because apart from the practical side of everyday Zorp administration, it introduces the philosophy behind Zorp without the marketing side of the issue.
The following skills and knowledge are necessary for a successful Zorp administrator.
| Skill | Level/Description |
|---|---|
| Linux | At least a power user's knowledge. |
| Experience in system administration | Certainly an advantage, but not absolutely necessary. |
| Programming language knowledge | It is not an explicit requirement to know any programming language though being familiar with the basics of Python may be an advantage, especially in evaluating advanced firewall configurations or in troubleshooting misconfigured firewalls. |
| General knowledge on firewalls | A general understanding of firewalls, their roles in the enterprise IT infrastructure and the main concepts and tasks associated with firewall administration is essential. To fulfill this requirement a significant part of Chapter 3, Architectural overview in the Zorp Administrator's Guide is devoted to the introduction to general firewall concepts. |
| Knowledge on Netfilter concepts and IPTables | In-depth knowledge is strongly recommended; while it is not strictly required it definitely helps understanding the underlying operations and also helps in shortening the learning curve. |
| Knowledge on TCP/IP protocol | High level knowledge of the TCP/IP protocol suite is a must, no successful firewall administration is possible without this knowledge. |
Table 1. Prerequisites
The Zorp Distribution CD-ROM contains the following software packages:
actual version of Zorp 3.3 packages;
ZorpOS 3.3, the operating system hardened for security, based on Ubuntu Dapper Drake;
actual version of ZMS 3.3, the Zorp Management system;
actual version of ZMC 3.3, the Zorp Management Console (GUI) for both Linux and Windows operating systems, and all the necessary software packages;
actual version of ZAS 3.3, the Zorp Authentication System;
actual version of the Zorp Authentication Agent 3.3, the ZAS client for both Linux and Windows operating systems.
For a detailed description of hardware requirements of Zorp, refer to Chapter 3, Preparing for the installation of the Zorp Installation Guide.
For additional information on Zorp and its components visit BalaBit's Zorp product specific website containing white papers, tutorials, and online documentations on the above products at http://www.balabit.com/products/zorp/.
Before you start using this guide, it is important to understand the terms and typographical conventions used in the documentation. For more information on specialized terms and abbreviations used in the documentation, see the Glossary at the end of this document.
The following kinds of text formatting and icons identify special information in the document.
![]() |
Tip |
|---|---|
Tips provide best practices and recommendations. |
![]() |
Example 1. Examples |
|---|---|
Examples provide detailed information on an issue, usually with a working example. |
![]() |
Note |
|---|---|
Notes provide additional information on a topic, and emphasise important facts and considerations. |
![]() |
Warning |
|---|---|
Warnings mark situations where loss of data or misconfiguration of the device is possible if the instructions are not obeyed. |
Commands you have to execute.
Reference items, additional readings.
/path/to/file
File names.
Parameters
Parameter and attribute names.
GUI output messages or dialog labels.
A submenu in the menu bar.
Buttons in dialog windows.
Zorp is developed and maintained by BalaBit IT Security Ltd. We are located in Budapest, Hungary. Our address is:
BalaBit IT Security Ltd.
1464 Budapest P.O. BOX 1279
Hungary
Tel: +36 1 371-0540
Fax: +36 1 208-0875
E-mail: info@balabit.com
Web: http://www.balabit.com/
You can directly contact us with sales related topics at the e-mail address
<sales@balabit.com>.
You can register your copy of Zorp online on the BalaBit website or by sending the filled registration form. Registration is a prerequisite for all of our Zorp related services. Your product can be registered online at the http://www.balabit.com/form/registration/ website.
Online and telephone support is available for registered users of Zorp, please write or call us for details.
Support hotline: +36 1 371 0540 (available from 9 AM to 5 PM CET on weekdays)
For online support, sign up for an account at http://www.balabit.com/mybalabit/ and request access to the BalaBit Online Support System (BOSS). Online support is available 24 hours a day. BOSS is available only for registered Zorp users.
This guide is a work-in-progress document with new versions appearing periodically. The contents of this guide in this edition are upgraded to cover the features and technologies available in Zorp 3.3.
A version of the guide is included on Zorp 3.3 product CD-ROMs. The most up-to-date versions are downloadable from BalaBit's website at http://www.balabit.com/support/documentation/.
Any feedback is greatly appreciated, especially on what else this document should cover,
including protocols and network setups. General comments, errors found in the text, and any suggestions about
how to improve the documentation is welcome at
<documentation@balabit.com>.
There are two main approaches to administering a Zorp firewall.
using the graphical user interface (GUI) developed for Zorp, the Zorp Management Console (ZMC)
directly editing the configuration files
Zorp together with ZMS is designed to be fully configurable from the graphical user interface of ZMC. The GUI-based configuration is easy and comfortable to use therefore this administration guide focuses primarily on the preferred ZMC-based administration method.
To edit the configuration files, which is the original and traditional method, you have to know what files to edit and how. With advanced Linux skills you can manually accomplish all the management and configuration tasks using a simple, character based terminal console connection.
For more information on this procedure, see Chapter 12, Local firewall administration.
![]() |
Note |
|---|---|
You cannot mix the two administration approaches, that is, once you start editing configuration files manually, you cannot continue or revert back to graphical, ZMC-based work, unless you rebuild the configuration from scratch. |
The typical Zorp based firewall solution consists of the following components.
Zorp, the firewall software itself
Zorp Management System (ZMS)
Transfer and monitoring agents
Graphical management console, the Zorp Management Console (ZMC)
Zorp Authentication System (ZAS)
Zorp Content Vectoring framework (ZCV)
This chapter introduces these “Z-letter-words” and gives you the big picture to Zorp and also explains the relations among the various components. The interaction and relation of the components is also summarized on the following figure:
The heart of the Zorp–based firewall solution is the firewalling software itself, which is a set of proxy modules acting as application layer gateways. Zorp is an application proxy firewall. The characteristics of firewalls of this type, together with a historical overview of the evolution of firewalling technologies are available in Chapter 3, Architectural overview.
Zorp must be installed on the ZorpOS operating system which installs automatically when booting from the Zorp CD-ROM.
The Zorp Management System (ZMS) and its GUI front-end fulfills today's requirements for centralisation on both system administration and firewall administration level. System administrators need be able to administer as much of their networks as possible from one administration console, either GUI-based or not. The same is true for firewall administrators: the bigger the company, the more firewalls and related technologies it has; for example, clustered, load balanced configurations, backup machines, firewalls on backup lines, firewalls for remote sites or dedicated VPN servers which require exact supervision.
The ZMS and its GUI front-end provides a totally new way of administering Zorp. With ZMS, only one server is needed to handle all the configuration tasks — the ZMS server itself — and a machine to fancy the GUI, which is called Zorp Management Console (ZMC), is also required. ZMS and ZMC must be on separate machines. A single ZMS server can manage the configuration of many Zorp firewalls, it is only a matter of licensing. ZMS alone, without Zorp firewall(s) registered under its authority, has no real function: it serves as a central command center which stores and manages the configuration of Zorp firewalls that belong under its dominion. Besides creating new firewall configurations and navigating them to the Zorp nodes, ZMS also stores these configurations in its XML-based database for subsequent administrative operations.
The real power of ZMS surfaces when more than one Zorp firewalls need to be administered in the same networking environment (which typically means the same corporate network): instead of configuring the many Zorp nodes individually and manually, the configuration can be constructed with ZMS once and than sent down to the firewalls with the click of a single button. ZMS is useful in single–firewall setups as well. Since ZMC talks to a ZMS host only and never directly to a Zorp machine, the ZMC–based graphical management is only possible via ZMS. Besides, since ZMS stores firewall configurations in its XML database, it is an ideal candidate for firewall configuration backups: in case of emergency the entire firewall configuration can be restored from this database with the click of a single button.
In small business scenarios where there is only one Zorp firewall a combined setup is possible: the ZMS engine can be installed on the firewall itself, thereby saving the costs of a dedicated ZMS host. If you implement this single-hosted solution the bootstrapping process that is described later is not necessary. If, on the other hand, you have more than one firewall managed by the same ZMS host — or if security policies explicitly forbid installing any auxiliary service on the firewall — you should separate these two roles, installing ZMS on a separate ZorpOS machine. Regardless of whether the ZMS and firewall functions are separated to different machines or not, configurations that are created for, and may be downloaded to firewall nodes are always stored in the ZMS configuration database; the modification of these stored configurations is in effect the same as the modification of the firewalls themselves.
Technically, ZMS does not communicate with the Zorp software or ZorpOS directly. The communication is done via Management Agents. During Zorp installation, agents install themselves on the firewall and can later communicate with the ZMS host. The communication is secure using Secure Socket Layer (SSL) encryption. The connection establishment and authentication between the parties is done using certificates. For more information, see Chapter 14, Advanced ZMS and Agent configuration.
Agents are responsible for reporting firewall configuration and related information to ZMS and also for accepting configuration commands and executing them. Communication between the agents and ZMS uses TCP port 1311 and 1313.
![]() |
Warning |
|---|---|
Agent connections must be enabled on every managed host, otherwise ZMS is not able to control the hosts. For details, see Appendix 1, Packet Filtering. |
Agents can be functionally divided into two types:
| Agent name | Functionality | Port used |
|---|---|---|
| zms-transfer-agent | Responsible for transporting and executing configuration files and running ZMS initiated commands. | TCP 1311 |
| zms-monitor-agent | Responsible for executing various monitoring tasks on the firewall node. | TCP 1313 |
Table 2.1. Agent types and their functions
![]() |
Note |
|---|---|
Note that at least the transfer agent is required to be present on all firewall nodes that is to be managed by ZMS. |
By default, the ZMS host initiates the communication channel to the agents, but the agents can also be configured to start the communication, if required.
Agents are still required if Zorp and ZMS is installed on the same host. Communication between the transfer agent and the ZMS server happens using UNIX domain sockets.
The Zorp Management Console (ZMC) is the graphical frontend to ZMS. A single ZMS engine can manage many different Zorp firewalls and the GUI component need not necessarily be installed on it. There is a Microsoft Windows and a Linux version of ZMC.
![]() |
Note |
|---|---|
ZMC can connect to the ZMS host remotely, even over the Internet and from the data exchanged between them a malicious third party could gain all the sensitive firewall configuration information. Thus high security settings for the communication and the establishment of the communication are required. Therefore, all connections between the components are SSL encrypted. |
The ZMC can be installed on the following platforms.
Microsoft Windows 2000/XP or later
Linux
ZMC is designed so that almost all administration tasks of Zorp can be accomplished with it and thus no advanced Linux skills are needed to administer the firewall.
The ZMC communicates with the ZMS on TCP port 1314.
![]() |
Note |
|---|---|
It is important that ZMC can only alter configurations stored in the ZMS database. It never communicates directly with the firewall hosts. |
Zorp provides possibilities to authenticate all transit connections. During authentication Zorp communicates with the Satyr authentication client.
However, Zorp does not have database access for authentication information such as usernames, passwords, access rights. It operates indirectly with the help of authentication backends through an authentication middleware, the Zorp Authentication Server (ZAS). Whenever authentication is performed, Zorp connects to ZAS which based on its configuration data and the information received from Zorp connects to the appropriate backend.
Backends contain all the necessary information on users for authentication, and send them to ZAS which executes the entire authentication process. Zorp is informed of only the outcome of the authentication, together with some additional data on users enabling the authorization of the user in Zorp, if needed.
Currently, ZAS supports the following backends and technologies.
Backends:
plain file in Apache htpass format
Pluggable Authentication Module (PAM) framework
RADIUS server
LDAP server (plain BIND, password authentication, or with own LDAP scheme)
Microsoft ActiveDirectory
Methods:
plain password-based authentication
challenge/response method (s/key, CryptoCard RB1)
X.509 certificates
Kerberos 5
The overall function of ZAS is to provide Zorp a single point for authentication and mask the authentication databases, their features and the authentication methods operating in the background.
ZCV is a framework to manage and configure various third-party content vectoring modules (engines) from a uniform interface. Zorp uses these modules to filter the traffic. These modules run independently from Zorp; they can run either directly on the Zorp firewall host, or on a remote machine. Zorp can send the data to be inspected to these modules, along with configuration parameters appropriate for the scenario. For example, a virus filtering module can be used to inspect all files in the traffic, but different parameters can be used to inspect files in HTTP downloads and e-mail attachments. Also, different scenarios can use a different set of modules for inspecting the traffic; using the above example, HTTP traffic could be inspected with a virus filter, a content filter, and all client-side scripts could be removed. E-mails could be scanned for viruses using the same virus filtering module (but possibly with stricter settings), and also inspected by a spam filtering module.
ZCV currently supports the following modules:
Virus filtering modules:
Spam filtering modules:
Other modules
HTML filtering module : Capable of general content filtering, as well as filtering JavaScript, ActiveX, Java, and Cascading stylesheets (CSS).
Mail header filtering : Capable of filtering and manipulating mail headers in SMTP traffic.
Mime filtering : Capable of filtering, removing, and adding MIME headers and objects in HTML, POP3, and SMTP traffic.
General stream editing module : Capable of replacing strings in data streams.
Custom application : ZCV provides a general interface to inspect the data with other third-party applications.
Some of the listed modules must be licensed separately from Zorp/ZCV. Please contact your distributor for details.
The term firewall is so common within the IT community today that it became a generic term for any device that examines/filters/blocks some network traffic. There is even a strong misconception that if you or the company you work for have a firewall we are protected from everything harmful coming from “the Internet”. To avoid these mistakes and eliminate these disbeliefs it is beneficial to define exactly what a firewall is, what it is capable of, what levels of firewall protection are available and which level of protection should you seek for the networks.
A firewall is a network perimeter security device that is used to filter network traffic that is intended to pass through it in either direction according to some predefined rule set. Perimeter device means that the firewall is a boundary between two or more network segments and typically the only place where traffic from one of these network segments can — theoretically — can get to another one. Whether the traffic in question reaches its destination depends on the firewall — more exactly on the rules firewall administrators define. It is very important to note that firewalls do not necessarily sit between the Internet and some corporate intranet; in many cases firewalls are placed between segments of a company's own intranet or connect not just two but many networks.
Firewall devices have other roles, such as being the endpoint of Virtual Private Network (VPN) connections or hosting Intrusion Detection Systems (IDS), for example. These are legal and typical auxiliary tasks besides its original role, that is, filtering traffic. This filtering, however, is not an ad-hoc decision; the firewall is a device whose task is to implement the rules dictated by the IT Security Policy of the organization. In other words, firewalls can only be implemented successfully in organizations where a valid and effective IT Security Policy is in place.
Firewalls have undergone a significant evolution in terms of functionality, sophistication and the level of protection they can provide. Today two main branches of firewalls dominate the field: packet filters and application proxies. Although they are build with the same intent — to protect by filtering — they are fundamentally different technologies. For the understanding and successful administration of Zorp, which is an application proxy firewall it is very important to know how these two technologies work and how they differ from each other.
Packet filters always work at the packet level. Packets, which are basically IP datagrams, enter the packet filter on an interface and the same packets leave on another interface, depending on predefined rules. Packet filters analyze packet header information such as addressing, port numbers, protocol options. Rules that administrators create operate mainly on this information. A typical packet filter rule translated would look something like this: 'open port 80 on the internal interface of the firewall and let the internal clients access webservers on the Internet'.
Packet filters are fairly easy to understand for firewall administrators with a solid knowledge of TCP/IP. Traffic monitoring and analyzing software, sniffers help in analyzing what is going on on packet level. Originally, packet filters were unaware of TCP sessions, that is, they were unable to pair packets going out as a request and packets coming in as responses to that request. Therefore, to create a rule to permit, for example, web access for internal clients, two separate packet filter rules were needed: one that permitted traffic going out on port 80 and another one permitting traffic coming in on the dynamic port range, 1024-65535. This solution was both inconvenient and fairly insecure: it essentially opened wide the majority of TCP/UDP ports.
To eliminate this problem a new generation of packet filters were developed, the stateful packet filters. Stateful means that these packet filters are aware of the TCP sessions that the communicating parties build up using the 3-way TCP handshake mechanism. Using stateful packet filters it is sufficient to specify allowed traffic in one direction and the firewall — storing the session buildup and state information — automatically allows packets belonging to that same session in either direction.
Today almost all operating systems have a built-in stateful packet filter, some of which, like IPTables under Linux is quite sophisticated and allows for a lot of packet inspection and modification techniques. However, they can only investigate packet headers and make decisions based on this and on state information. Though some form of application filtering exists in advanced packet filters as well, this feature is very difficult to implement at this level. Due to the unreliable nature of IP protocol, packets arriving at the packet filter cannot be expected to be in correct order, packets lost in transit are retransmitted and thus must be handled accordingly, and so on. These problems together make it extremely difficult for packet filters to analyze streams of packets as complete communication sessions. Therefore, typical packet filters do not perform application filtering.
Attacks coming from the Internet today, however, are becoming ever more sophisticated and in most cases cannot be stopped by packet filters. They are targeting legal services that are allowed at the packet filter level, for example, a public webserver on port 80, and try to exploit vulnerabilities in the given services. Code Red and Nimda were typical examples for this type of attack: they sent malicious URI requests to web servers that, when processed by Microsoft IIS servers, resulted in buffer overflow situations and allowed for arbitrary code execution. Since packet filters can only investigate protocol header information like source and destination address and port number, which were correct in these attacks, they had no means to stop these worms. This level of protection can be realized by application proxy firewalls.
Application proxy firewalls work a level higher than packet filters and in general add more intelligence to the filtering process. Regardless of the level of their sophistication or their extra features, at a minimum they always form the end point of a communication flow and a starting point of another one. That is, when computers on different sides of an application proxy firewall start building up a communication channel between each other, they can only communicate directly with the application proxy. It is the application proxy that maintains the two different communication channels towards the parties and decides, based on its implementation or the rules specified, whether to communicate with either parties at all. This is in sharp contrast with packet filters that do not create new packets, just let through and possibly alter the original ones.
Application proxies do not pass unaltered packets from one of their interfaces to another one. They do not work with packets at all. Although it is true that packets enter and leave the firewall, by the time the application proxies get involved with the communication flow these packets have been dissembled and handled by kernel components of the underlying operating system. Application proxies leave packet management to the kernel-level services and as an input they get continuous data streams. This way they only need to focus on application data. These data streams contain application-specific control information, such as HTTP request headers, and end user/process data. Based largely on this information, the direction of traffic and the rules defined application proxies then decide what to response to the incoming data stream. If, based on the rule set specified by a given application proxy, the incoming data stream is acceptable for service, the proxy component initiates the establishment of a new communication channel towards another machine — possibly, but not necessarily the computer the requesting party originally wanted to talk to.
Application proxies analyze the data stream they get according to their preset and administrator specified settings. In Zorp application proxies (except for the Plug proxy) always check Requests for Comments (RFC) conformance. RFCs are documents defining various Internet-related protocols and services. For more information on them, see Appendix 3, Further readings. RFCs clearly define what is actually allowed within the scope of the given service or protocol and how should the parties using the given protocol/service communicate with each other. For example, in case of HTTP there is a limit on the length of URLs supplied in a client request and the character set that can be used in those URLs.
As a general rule, application proxies mainly focus on the actual data part of the communication, the real content, unlike packet filters that focus on protocol header fields.
Application proxy firewalls may seem superior to packet filters, still, they should not replace packet filters everywhere where network security is implemented on a professional level. Indeed, with their protocol and data stream analysis capabilities application proxy firewalls provide a significantly higher level of security than packet filtering ones, but at some performance cost.
Packet filters and application proxies differ in the following three main aspects:
Operation
Level of traffic checking
Performance
If traffic is allowed to pass through, packet filters do not interfere with the communication: they let it pass through packet-by-packet. In other words, the same packets entering the packet filter firewall leave it on — presumably — another interface. In contract, application proxies always mean an endpoint of the incoming connection and are the starting point of another connection related to the incoming one. Application proxies create two separate connections for each requested service. This operation mode, however, is completely transparent for the user: as long as permitted operations are performed it cannot be recognized that the actual communication takes place with an application proxy module instead of the desired server.
Packet filters typically work with individual packets or streams of packets as the targets of analysis. They do not investigate contents of communication. Application proxies focus on content, the actual data and traffic direction mainly. They do not work with packets or packet streams; by the time traffic reaches an application filter it has already been processed by the operating system's TCP/IP stack and it is a continuous data stream without any packet-level information.
The work of application proxies is more complex than that of the packet filters. Additionally, by the time application proxies receive data streams, they are processed by a number of operating system services, while packet filters work with traffic at an earlier stage of processing. Therefore, packet filters usually provide better performance in terms of throughput and connection delays.
Zorp is an application proxy firewall with some unique capabilities described below that make it outstanding in its category.
Zorp is not just a service component to be installed on top of a user–preconfigured operating system, but a complete solution rather, that features its own operating system, ZorpOS. It is a hardened, Ubuntu Linux-based operating system that contains only those components and packages that are essential for the operation of the firewall machine and many other hardening steps are also in effect, like the removal of setuid and setgid bits, for instance. In addition to the core components, it has some custom parts as well such as the firewall software. Although this is a fully functional operating system, it is not meant to be used as an ordinary server or workstation system, its primary function is to provide a secure and stable foundation for the firewall (and ZMS host) platforms.
ZorpOS is dedicatedly developed for Zorp. The Zorp firewalling solution is only complete together with ZorpOS.
Using ZorpOS has many advantages over having an off-the-shelves Linux distribution installed.
ZorpOS contains only essential software components and it is a reasonably secure platform for the firewall software.
If bugs appear in one of the components of the operating system tested patches are provided which allow easy and quick update of the installed ZorpOS.
ZorpOS contains a modified, hardened and tested Linux kernel that includes all the security patches that are published officially.
Since ZorpOS is built to serve as the foundation of Zorp firewall solution it is guaranteed to work with it seamlessly, avoiding software version incompatibilities and missing dependencies that are otherwise quite common in custom–built Linux systems.
All application proxy firewall products have a packet filtering component. Starting from Zorp 3.3, packet filtering is handled by the kzorp kernel module. When Zorp starts, it sends all information about the traffic permitted to pass the gateway (i.e., configured services, zones, and dispatchers) to the kzorp module.
Packet-filtering services are completely handled in the kernel.
Application-level services (also called proxy services) are handled on two levels: the kzorp kernel module receives and accepts the connections (this was handled by listeners and receivers in earlier Zorp versions, but these objects have been merged into a single entity called Dispatcher), while all other functionality is performed by Zorp in the userspace.
For both service types the kzorp kernel module makes the client-side access control (DAC) decision. Both service types can be configured from a uniform interface using ZMC.
Handling packet filtering in the kernel has the following important consequences:
Zones have been extended to the packet filter: packet-filtering rules can match on zones as well, not only on IP addresses.
The tproxy table of the IPTables utility that earlier Zorp versions used to perform transparent proxying is empty. Zorp does not use it, but it is available if for some reason you want to add rules manually. The tproxy table is also useful when upgrading Zorp from an older version to 3.3.
As a result of using the kzorp kernel module, the dummy interface and the autobind
IP address (1.2.3.4) are not necessary, although they make
upgrading from earlier Zorp versions to 3.3 easier. After the upgrade is completed, they
are not used and can be deleted.
Network Address Translation (NAT) is available also in the kernel, so it is possible to NAT packet-filtering services. However, not every type of NatPolicy can be used with packet-filtering services. See Section 8.9.2, NAT policies for details.
Proxying can take two basic forms.
Nontransparent
Transparent
In case of nontransparent proxying clients are aware that they do not talk to the actual server but a proxy machine instead; this solution usually requires some client-side setup before communication is possible. Supplying proxy settings in Web browsers is a good example for this setup requirement. In some cases entire software modules must be installed on the clients which is not always feasible or optimal.
With transparent proxying, however, both the client and server sides of the communication are totally unaware that there is a proxy component involved; all the information that can be gained from protocol headers, for example, show that they directly talk to each other. In case of transparent proxying no client side setup is required.
Zorp uses the TPROXY kernel module for achieving transparency. For more information on TPROXY, see Section 8.8, Proxy classes.
Although not strictly a firewall task, most application proxy firewalls today are bundled with Virtual Private Network (VPN) support. Zorp uses Openswan (the most widely accepted IPSec implementation) to support native Linux IPSec solutions, and also supports OpenVPN (an SSL-based VPN solution). OpenVPN is more user friendly, but somewhat less supported by other systems, that might cause interoperability issues. Using Zorp it is possible to establish both transport and tunnel mode VPN channels. Tunnel authentication is possible with X.509 certificates and with preshared keys. IPSec settings can be negotiated manually or using Internet Key Exchange (IKE). Zorp's VPN solution is compatible with most other vendors' VPN technologies.
Native proxies or otherwise known as native services are responsible for providing a limited number of server–like features in Zorp, or more exactly, in ZorpOS. Their use is optional and depends on the needs and security requirements of the given organization; the use of Network Time Protocol (NTP) and Bind is recommended, while Postfix is useful for managing mail traffic from various firewall components locally.
They are called native because they come bundled with ZorpOS and are available by default. They are implementations of the actual Linux services of the same names. These services are intended to provide networking services that are either hard to implement with application proxies (or at the packet filter level) or provide services for the firewall itself. For enhanced security they can optionally be jailed into a chrooted environment.
For more information on these services, see Chapter 11, Native services.
The firewall can function both as a Network Time Protocol (NTP) client and server. Time synchronization among others is very important for registering correct log entries that can later be analyzed by exact date and time. Therefore, it is advisable to synchronize the system's time with a reliable time source, possibly on the Internet. Once the firewall's time is correctly synchronized, it can act as the authentic time source for its internal networks.
![]() |
Tip |
|---|---|
This feature is especially useful in small and mid-size network environments where installing a standalone, dedicated time server is not an option. |
An ISC NTP daemon is bundled with ZorpOS.
Zorp features a fully functional DNS server based on the ISC BIND 9 implementation. It is optional and definitely not mandatory to use if security regulations explicitly prohibit the installation of non-firewall software on the firewall machine. In small and mid-sized networks, however, it may be beneficial to have a built-in nameserver, if it is solely used as a forward–only DNS server.
Zorp uses Postfix as the built-in SMTP server component. Postfix is used for SMTP queuing; Zorp also has an application proxy for inspecting SMTP traffic, while ZCV can be used to perform virus, spam, and content-based filtering on the SMTP traffic. The primary role of this Postfix service is to provide a Mail Transport Agent (MTA) for the firewall itself: a number of mail messages may originate from the firewall (e.g.: from syslog-ng), and these messages are delivered using the Postfix service. Although the Postfix service is a fully functional MTA in Zorp, it is not intended to be a general purpose mail server solution for any organization.
Logging firewall activities is a crucial task that is usually regulated by the companies' IT Security Policy. All competitive firewall products must provide advanced logging capabilities, a task that Zorp solves using BalaBit's state-of-the-art and widely respected syslog-ng technology. Syslog-ng is a replacement for Unix/Linux original syslog utility with more features, configuration and fine-tuning options. Syslog-ng is a separate product from Zorp and is available for most Linux and Unix platforms.
For more details, see Chapter 9, Logging with syslog-ng.
In large enterprise environment it is often required to cluster two or more firewall nodes together for high availability purposes. Zorp supports multi-node (2+) fail-over clustering. Load-balance clusters are also supported, but such configurations usually require external devices as well. Clustering support must be licensed separately.
For more information see Chapter 15, Clusters and high availability.
The first line of defense can be a packet filter that blocks traffic that is to be prohibited by IP address or TCP/UDP port number. It is unnecessary to submit traffic to the proxy level which is more expensive in terms of performance if its fate can be decided at the packet handling level also. Thus, proxy components need only deal with traffic that is permitted at the IP and TCP/UDP levels. That traffic can then be proxied and proxies will be responsible for deciding whether the traffic in question should be allowed or not. This technology using both packet filtering and application proxying together is called multilayer filtering. Although the two filtering components can be implemented on two separate devices linked together, in practice they are typically implemented within the same device for practical and performance reasons. All application proxy firewall products currently on the market have a built-in packet filtering component and Zorp is no exception. The decision levels for filtering are the following.
Traffic that can be filtered out based on IP and TCP/UDP header information can be blocked at the packet filter level. Likewise, it is possible to forward traffic at the packet filter level without sending it to user-mode application proxies for analysis. For such traffic, Zorp operates like an ordinary packet filtering firewall. Although this may seem a downgrade, in practice traffic forwarding at the packet filter level may be desirable or even the only choice for special protocols that cannot be proxied. Zorp provides a number of built-in, protocol-specific proxy classes for the most typical protocols, and it has a generic proxy as well to be used for protocols not supported by the built-in proxies. Still, there may be protocols, typically non-TCP/UDP or bulk traffic that are not supported even by this generic proxy, in which case the only choice is to forward them at the packet filter level. Packet filter level forwarding is not recommended, unless it is absolutely unavoidable.
Application proxies provide a higher level of security. Packet filters are the first line of defense; they can be used to block unwanted traffic. What is not blocked by default, on the other hand, should be filtered by the appropriate application proxies.
Application-level services inspect the traffic on the protocol (Layer 7 in the OSI model) level. For protocols supported natively by Zorp it is a logical choice to use the dedicated proxy components instead of simply deciding things at the packet filter level. Even for protocols not having a dedicated proxy, Zorp provides a generic proxy, called PlugProxy that — although it does not perform special data analysis — can be used to proxy the traffic in question.
![]() |
Note |
|---|---|
Application proxies always provide an additional level of filtering over packet filters. |
A firewall must always provide a mechanism to control which networks and network nodes are accessible and from where (networks and machines) they are accessible. In other words, in order to create traffic rules, the networking environment of the firewall must be defined accurately. Then, if all the elements of the networking environment are in place, access control can be applied on them. This type of access control is provided by the concept of Zones in Zorp.
By definition Zones consist of one or more IP subnets that are to be handled together
from an administrative aspect. This aspect is completely up to you or your systems' security
regulations. By default there is only a single Zone defined as the IP network
0.0.0.0/0 which practically means every available IP addresses
(i.e., the Internet). Zones can be organized into a hierarchy which becomes important when
we discuss policy inheritance.
Although Zones consist of IP subnets and/or individual IP addresses, zone organization is independent of the subnetting practices of the company and can follow an arbitrary logic, thus helping in mapping the human, administrative regulations in place to an actual firewall configuration. For example, we can define a zone that contains the 192.168.7.0/24 subnet and it can have a subzone with IP addresses from the 10.0.0.0/8 range, and the single IP address of 172.16.54.4/32. Since Zones are the Zorp specific representations of the organizations security hierarchy in terms of network access, their design should be deducible from the organization's IT Security Policy. Therefore, ideally you define zones before the very first access policy is created but networking reconstructions or smaller changes are common in any company so you are likely to return to zone creation and configuration when needed.
For more information on zones, see Section 8.4, Zones.
A good firewall product while maintains the highest level of security achievable it should cause as few inconveniences for users as possible. This is usually provided by transparency.
Transparency means that the existence and operations of the firewall are totally invisible for the end user, and no client–side configuration is necessary. A non–transparent firewall, on the other hand, typically requires some client–side setup: either an entire client–side software component is needed, or special settings are necessary such as configuring a proxy server address and port number in the web browser. Since the client–side remains untouched, transparent proxying usually has lower TCO, especially when the number of clients is high and/or network reconstructions happen frequently. Transparency is very important on the server side, too, that is servers contacted by the firewall in response to client requests are also unaware that they are actually visited by the firewall and not by the original clients.
The primary goal of traffic filtering with Zorp is to know about and account for every bit passing through the firewall. A significant measure of application proxies is how skilled they are in analyzing the data they receive. Apart from checking the given protocol header for prohibited options, for example FTP PUTs, they should apply fine grained analysis on the data in question. Zorp has outstanding abilities on this field; checking full RFC compliance of protocol information automatically prevents a large number of attacks from reaching internal targets (Code Red and Nimda worms).
Zorp has dedicated proxies for a number of frequently used protocols/traffic types, including:
FTP
HTTP
IMAP
NNTP
POP3
RDP
SIP
SMTP
SQLNet
SSH
SSL
Telnet
VNC
Some protocols, like HTTP and FTP are supported with more than one special purpose proxies.
For more information on supported protocols and for a complete list of proxies, see the Zorp Reference Guide available at http://www.balabit.com/support/documentation/.
The built-in, dedicated proxies operate according to the hard-coded default security configurations which, at a minimum, means full RFC compliance for the given protocol. However, often there are specific security or configuration needs that cannot be satisfied by default configurations. For these scenarios Zorp provides proxy customization options which means that a broad range of protocol–specific options (like HTTP header content modifications/limitations in case of HttpProxy) are available. These options are fully configurable via ZMC. For information on, see Zorp Reference Guide.
In addition to changing preset properties, proxy configurations in Zorp are fully customizable: they can be programmed, (scripted) to perform an arbitrary number of custom functions.
![]() |
Note |
|---|---|
With scripting changes are made to the configuration of the proxy only and not to the proxy software module itself. |
Many types of Internet traffic today use more than a single protocol, usually in embedded form. A good example is HTTPS: this is Secure Socket Layer (SSL) protocol with standard HTTP protocol embedded in it. SSL encrypts HTTP traffic and most firewalls simply let this encrypted traffic pass through without serious inspection. This is not an optimal solution from a security aspect and Zorp has a much better solution to this problem: it has a proxy for SSL traffic and it is possible to embed (“stack”) other proxies into it, because proxies can pass data streams to each other. This modular architecture (that is, proxies can be stacked into each other, or even chained together for sequential protocol analysis) allows for sophisticated inspection of complex communications, like virus filtering in HTTPS, POP3 traffic.
Several possible proxy combinations are possible, allowing for a more complete control over traffic passing through the firewall. This ability to build complex filtering systems from proxy modules makes Zorp unique on the application proxy firewall market.
This chapter is a step-by-step guide for installing Zorp from the install CD. Zorp has a text-based installer similar to the installer application of many Linux distributions, such as Debian GNU/Linux.
![]() |
Note |
|---|---|
|
Before starting the installation, advance planning is necessary for a successful firewall implementation. All the critical network parameters, such as firewall IP addresses, routing topology, DNS hierarchy, etc. must be known in advance. The following IP addresses are particularly important: address of the Zorp host; address of the ZMS host; address of ZMC. In addition, firewall administration roles must be defined with a corresponding password policy. A number of passwords that protect various elements of the system have to be defined. These passwords must be recorded (according to the security policy of your organization) and kept safe for later use. |
Zorp is not a standalone firewall software, but part of a complex solution. Zorp must be installed on ZorpOS, BalaBit's hardened operating system tailored for security. The install CD contains Zorp itself, along with the corresponding packages and a specially configured and modified operating system based on GNU/Linux.
The installation process can be divided into three main parts:
Installation of ZorpOS and the Zorp modules to the Zorp host: This phase includes setting up network access for the computer, the preparation (partitioning) of the hard disks, and the installation of ZorpOS. A user account is also created in this phase. See Section 4.2, Installing ZorpOS for details.
Configuring native services and the Zorp modules: This phase installs and configures the components of Zorp (e.g., ZMS, monitoring, ZAS, etc.). Numerous other services (like the mail transfer agent (Postfix), Secure Shell and IPSec access, etc.) are also configured in this phase. See Section 4.3, Configuring the Zorp modules for details.
Installing ZMC: In order to access the Zorp Management Server (ZMS) remotely using the Zorp Management Console (ZMC), ZMC has to be installed on the machine from which Zorp hosts will be administered. The IP address of this machine has to be known in advance, as during the installation ZMS has to be configured to accept connections from this machine. See Section 4.6, Installing the Zorp Management Console for details.
![]() |
Note |
|---|---|
The Zorp Installation CD is available in both 32-bit (i386) and 64-bit (amd64) versions. Unless your hardware does not support running a 64-bit operating system, use the amd64 version. |
The ZorpOS operating system can be auto-booted from the Zorp CD-ROM and the installation starts automatically.
![]() |
Note |
|---|---|
The BIOS settings of the computer may have to be modified to enable booting from the CD-ROM. If unsure how to do it, please consult the documentation of your motherboard. After successfully adjusting the boot sequence, insert the CD-ROM and restart the computer. |
![]() |
Warning |
|---|---|
It is highly recommended to install Zorp on a dedicated computer. If there is any data on the computer that has to be retained, be sure to use manual partitioning during the installation (see Section 4.8, Manual partitioning), else all data will be lost when the installation process overwrites the whole hard disk. |
After booting from the CD-ROM, the installer menu is displayed. The menu is visible both from a local terminal and from a serial console, allowing remote installations.
Select one of the available installation modes:
: Install Zorp in Normal mode — starts the standard installation using default parameters at many installation steps. It is recommended for most users.
: Install Zorp in Expert mode — provides additional flexibility and control over the installation. However, it also requires a higher level of knowledge about networking, the hardware, and Linux in general.
During normal configuration the installation steps follow each other automatically; in Expert mode they are displayed as a list.
![]() |
Note |
|---|---|
The Zorp Installer automatically uses the 2.6.22 kernel during the installation process. However, version 2.6.17 of the kernel can be selected and installed for Zorp, if needed. |
![]() |
Note |
|---|---|
In Expert mode, some of the menuitems do not have any parameters that can be modified. Nevertheless, these steps must be executed as well, as they are configured using default parameters, or they represent distinct steps of the installation that cannot be influenced, but must be completed. |
After the kernel has been loaded, the installer displays the End-User License Agreement.
The following options useful for troubleshooting are also available from the installer menu:
: Test the memory modules of the hardware. See http://www.memtest86.com/ for details.
: Boot the master boot record of the primary hard drive.
: Boot the first partition of the primary hard drive.
: Modify the boot parameters of the kernel. As the Zorp installer is based on the current installer of Debian GNU/Linux, the Debian boot parameters can be used. See the online documentation (http://www.debian.org/releases/stable/i386/ch05s02.html.en) of the Debian installer for details.
: Displays the architecture
supported by the installer media (e.g., i386,
amd64) and the version of the following
components: Zorp, libzorp,
ZMS, kernel, and
installer.
: Boot a selected partition from a hard drive.
![]() |
Warning |
|---|---|
Expert installation and the modifying kernel parameters is recommended only for advanced users. Do not experiment with it unless you know exactly what you are doing. |
The End-User License Agreement must be accepted before the actual installation is started. The complete text of the EULA is also available in Appendix 4, Zorp Application Level Gateway End-User License Agreement. After reading and understanding the license accept its terms and conditions.
Zorp has an easy-to-use text-based installer requiring only a keyboard (mouse is not needed nor supported by the installer). Navigation between the different options of a screen is possible using the cursor buttons. Selected actions (e.g., Go back or Continue) is highlighted in red. When multiple selection is possible use space to select/deselect a given item (e.g., when selecting the Zorp modules to be installed).
The following additional options and utilities are available in Expert mode. They can be selected from the installation menu and are located above the Abort installation menu item.
Save debug logs : It is possible to save the logs
of the installation to floppy. The logs are saved into the
/var/log/debian-installer folder as well. USB
floppy drives are currently not supported.
![]() |
Tip |
|---|---|
This option can be useful when requesting support from BalaBit in case the installation has failed for some reason. |
Check the CD-ROM's integrity : In rare cases it is possible that the installation media gets damaged during the delivery. Use this option to determine if the CD is still error-free.
![]() |
Tip |
|---|---|
It is recommended to perform this check if the installation has previously failed because of an I/O error. |
Execute a shell: Run a shell
(ash) during the installation. The root partition in
the shell is a RAM disk used during the installation, the partitions of
the hard disk are mounted under the /target
directory. In the shell, use the help command to get
a list of the available commands. The nano text
editor can be used to edit configuration files manually if needed. To
return to the installation menu, type exit.
Abort the installation: Use this option if the installation has to be aborted for some reason. The machine is automatically rebooted.
Select the region or country from the list where the installed machine will be located.
Expert mode: Select your locale. Additional locales can also be selected.
Expert mode: Select the type (PS2, USB, or no keyboard) of the keyboard used.
Select the layout of the keyboard used.
The installer tries to detect the CD/DVD drive containing the Zorp Installation disk.
Expert mode: Select which kernel modules to load from the ones that were detected as matching your hardware. If requested, the installer can prompt when a module that is accepting load-time parameters is about to be loaded, enabling the customization of the given module.
Expert mode: Configure hdparm if you want to optimize CD-ROM access. Leave the field blank to continue without using hdparm.
This step is available in expert mode only. Most components are loaded automatically, the ones listed here are low priority and are optional. Select the ones you wish to load. Dependencies will be loaded automatically.
The installer tries to detect the network card(s) automatically. If no network card is found, a list of modules is displayed where you can specify the module to use for your hardware. Optionally, other modules can also be loaded from floppy.
Expert mode: A list of the modules found to be matching the hardware is displayed. Unselect any modules you deem unnecessary. If requested, the installer can prompt when a module that is accepting load-time parameters is about to be loaded, enabling the customization of the given module. At the end of this step a list is displayed showing the modules that were not properly loaded and the hardware components that do not have a matching module yet.
If there are multiple network interfaces in the computer, the installer displays a list of the recognized ones. At the time of the installation only one interface can be configured, the other ones have to be configured via the Networking component of ZMC (see Chapter 7 of the Zorp Administrator's Guide).
![]() |
Warning |
|---|---|
Configure the interface that will be used for the communication between ZMS and the host. It is not possible to configure the host using ZMC if ZMS cannot access the host. |
Networking can be configured either automatically using DHCP, or manually. To configure networking manually, answer NO to the Auto-configure network with DHCP question and provide the following information:
IP address: IP address of the machine (e.g., 192.168.1.10). The IP address can be chosen from the range of the corresponding physical subnet.
Netmask: The IP netmask of the given range in IP format. For example, general class C networks have the 255.255.255.0 netmask.
Default gateway: IP address of the default gateway. When using several network cards the default gateway is usually the external interface.
Name servers: IP address of the name servers used for domain name resolution. Specify maximum three servers, separating their addresses by a space.
After configuring the IP addresses (either statically or dynamically), enter the hostname of the machine and the domain it belongs to.
Hostname: Name of the machine (e.g,: firewall).
Domain name: Name of the domain used on the network.
![]() |
Warning |
|---|---|
If networking is not properly configured, it will not be possible to access the machine remotely. Networking misconfiguration can be corrected after the installation is finished by logging in locally to the machine and running ifconfig. See the manual pages of ifconfig for additional information. Alternatively, interface parameters can also be configured later using ZMC. However, it is very important for ZMS to be able to reach the firewall, otherwise ZMC-based configuration is not possible at all. |
The installer detects the available hard disks automatically. The next step of the installation is to prepare, partition and format the hard disk(s). The minimal storage capacity required by Zorp is 1GB.
Partitioning can be performed either automatically or manually. Automatic partitioning is described below, for the details of manual partitioning, see Section 4.8, Manual partitioning.
Automatic partitioning utilizes the total capacity of a single hard disk. The hard disk is partitioned as follows:
Root partition: 1/3 of the total capacity but maximum 2GB.
Swap: The swap partition's size is two times the size of the available RAM. (E.g. 512MB in case of 256MB physical RAM.)
/var: This partition takes up the remaining storage capacity.
The default filesystem used by ZorpOS is ext3. In order to use another filesystem, partitioning must be performed
manually.
Please note that automatic partitioning partitions only a single hard disk; any additional disks have to be partitioned manually.
![]() |
Note |
|---|---|
The hard disk DMA has to be supported by the kernel. If the kernel does not support your chipset the writing of the partition table and formatting the hard disk can take several minutes. |
Select the time zone corresponding to your location.
Expert mode: Set the system clock. If the hardware clock of the computer is set to GMT, hit .
Provide and verify passwords for the root (superuser) account and a normal user account. The full name of the user with the normal account is also required.
![]() |
Tip |
|---|---|
|
Root is the most powerful user of the system, therefore it is suggested to use the following guidelines for the root password. It should:
|
![]() |
Note |
|---|---|
Zorp uses SHA-1 password encryption and shadow passwords. |
![]() |
Tip |
|---|---|
Remote root access in Zorp is automatically disabled by default, therefore it is highly recommended to create a normal user account that can be used to access the machine remotely (i.e. via SSH) if needed. |
Add the normal user account you have just created to the
/etc/sudoers account. This step is required if you want to
manage Zorp remotely using SSH.
In this step the base components of ZorpOS are copied to the hard drive. Depending on the hardware, this can take several minutes.
Expert mode: Select the kernel to be installed from the list of available kernel images. Zorp 3.3 installs the 2.6.17 or the 2.6.22 version of the Linux kernel.
kernel-image-2.X-686-smp: Kernel image for Pentium Pro/Celeron/Pentium II/Pentium III/Pentium 4 processors with SMP (Symmetric Multi-Processing) support. Should be used on hosts having multiple processors or processor cores.
kernel-image-2.X-386: Kernel image for general i386 processors.
![]() |
Note |
|---|---|
In Normal mode, the installer attempts to identify the type of processor in the host machine and installs the most fitting kernel image. If it cannot determine the type of the processor, the i386 version is installed. |
The Zorp modules to be installed can be selected on the following screen. The following modules are available on the installation media:
Zorp Management Server: The Zorp Management Server (ZMS) and its corresponding packages. ZMS - depending on the license - can be installed to the Zorp firewall host or to a separate machine.
Zorp Pro Firewall: The packages required for a firewall host.
Zorp Authentication Server: The Zorp Authentication Server (ZAS) enables the authentication of network traffic on the user level at the firewall using password, CryptoCard, S/key, or X.509 methods. Integration to existing Microsoft Active Directory, LDAP, PAM, and Radius databases are supported. The module can be installed either together with the Zorp and ZMS modules or separately at a later date.
Monitor and Transfer ZMS Agents: This module includes the monitoring and transfer agents used to communicate between the components of the Zorp firewall system. This module is required on all Zorp, ZMS, ZCV or ZAS machines. It will be automatically installed as a dependency even if unselected.
Zorp Content Vectoring System: The Zorp Content Vectoring System (ZCV)is a framework and a uniform interface to manage various built-in and third party content vectoring modules (i.e. virus and spam filtering engines). The content vectoring modules to be installed (in addition to the ZCV framework) can be selected from the following list:
![]() |
Warning |
|---|---|
The ZCV framework and the content vectoring modules must be installed on the same host. |
ClamAV Antivirus Scanner: This module contains the libraries and virus signature databases needed for using the ClamAV antivirus engine.
Commtouch ASAP spam filter: This module contains the libraries and databases needed for using the Commtouch content filtering engine.
Kaspersky: This module contains the libraries and virus signature databases needed for using the Kaspersky antivirus engine.
Eset NOD32: This module contains the libraries and virus signature databases needed for using the Eset NOD32 antivirus engine.
![]() |
Note |
|---|---|
During the installation of the Nod32 module, the username and password received with the license file will be required. |
VirusBuster: This module contains the libraries and virus signature databases needed for using the VirusBuster antivirus engine.
SpamAssassin: This module contains the libraries and databases needed for using the SpamAssassin spam filtering engine.
For further information on the different modules see the Introduction chapter of the Zorp Installation Guide and the relevant chapters of the Zorp Administration Guide.
Below are some guidelines about which modules should be installed on the different types of machines.
When installing a single firewall (or a node of a cluster) that will be placed under the authority of a separate ZMS host, select only the Zorp Pro Firewall and Monitor and Transfer ZMS Agents components.
The third-party modules that can be used by ZCV must be licensed separately from Zorp. Select them only if you have a valid license for them.
When installing a ZMS host that will manage one or more Zorp firewalls, but the machine itself will not provide firewalling capabilities, select the Monitor and Transfer ZMS Agents and Zorp Management Server (ZMS) components.
If the firewall and ZMS functions are to be integrated on a single machine, select the Zorp Management Server, Zorp Pro Firewall, and Monitor and Transfer ZMS Agents components. Also select Zorp Content Vectoring System and the required modules as well if needed.
Zorp Authentication Server (ZAS) is an optional, central authentication service that can be installed on a Zorp machine. If you have license for ZAS select it together with the Zorp Pro Firewall component. This service must be licensed separately.
For an all-in-one system, select all the components available.
![]() |
Note |
|---|---|
The Zorp Management Console and the Zorp Authentication Agent (also called Satyr) applications are client–side components that cannot be installed on Zorp hosts. Their installation is discussed in Section 4.6, Installing the Zorp Management Console and Section 4.7, Installing the Zorp Authentication Agent (Satyr), respectively. |
After choosing the modules to be installed hit .
![]() |
Note |
|---|---|
When you continue the installation, some steps may not appear for you, depending on the components you have selected to install. |
Several services of Zorp run in chrooted jails. When the jailed services are updated, it is necessary to update the jails as well. This can be (and is recommended to be) performed automatically by ZorpOS. However, if the jail configurations have been manually modified, automatic updates should be disabled, because they will not preserve the manual changes.
Zorp uses Postfix as a native service for handling emails. A mail transferring agent (MTA) must be installed on the machine at least for delivering the locally generated messages.
The basic operation of mail handling on the host should be specified. The following options are available:
No configuration: No configuration changes will be done. Use this option if a working Postfix configuration is already available on the host, or if you wish to configure Postfix manually from ZMC.
Internet site: Send and receive mail directly using SMTP. This option is suitable in most common scenarios.
Internet site using smarthost: Mail is received either using SMTP directly or by running a utility such as fetchmail. Outgoing messages are sent via another machine (a smarthost).
Satellite system: No mail is received locally. Root and
postmaster mails are handled according to /etc/aliases.
All messages are sent to a smarthost for delivery.
Local delivery only: Mail is only delivered locally on the machine.
Set the name that should appear in the domain part of outgoing mail (i.e., after
the @ sign).
zorp-utils includes tools used by Zorp:
zavupdate is a tool that updates the databases of the virus
filtering engines. In this step these tools are configured.
zavupdate has the following options:
FTP proxy: The zavupdate
application can download database updates via FTP or HTTP. Enter the URL of
the FTP proxy to be used (or NONE if no if the
updates can be downloaded direclty without using a proxy server).
HTTP proxy: The zavupdate
application can download database updates via FTP or HTTP. Enter the URL of
the HTTP proxy to be used (or NONE if no if the
updates can be downloaded direclty without using a proxy server).
Send update logs in e-mail:
zavupdate can send the update logs to the administrator
via e-mail. Enter the address of the administrator and the subject to be
used in these e-mails. Enter NONE if no e-mail
notification should be sent.
Specifying e-mail prefix:
zavupdate can add a prefix to the subject of the
e-mails it sends to make sorting the messages easier for the administrator.
Enter a prefix (e.g., the name of the host in square brackets), or leave
these fields blank.
Verbosity level of zavupdate: Select the level of
verbosity of zavupdate. The available options are:
No logging, Errors only,
Successful updates,
Normal, and Everything. Each
level includes the logs of the levels above, i.e.
Normal will include all errors and successful update
messages as well.
The section below describes the configuration options of the Kaspersky virus filtering module.
![]() |
Note |
|---|---|
This module is installed only if it was selected in Section 4.3.1, Installing Zorp modules. |
The Kaspersky module can download the virus database from a local mirror server,
via a proxy server, or directly from an official server. If the updates will be
downloaded from a local server, enter its URL. Otherwise, enter
NONE.
If the updates will be downloaded via a proxy server, enter its URL. Otherwise,
enter NONE.
When the Kaspersky module is removed for some reason (reinstalling, etc.) it is
possible to retain the virus database files by selecting No
to the Delete virus signatures on purge? question.
If the machine has network access during the installation, the virus database can
be instantly updated. Answer Yes to the Download
virus signatures database? question, and select the server to use.
Otherwise, an update can be manually initiated by issuing the
zavupdate command.
The section below describes the configuration options of the Nod32 virus filtering module.
![]() |
Note |
|---|---|
This modules is installed only if it was selected in Section 4.3.1, Installing Zorp modules. |
Provide the username and password received from your distributor. If not available
at the time of installation, it can be entered later by issuing the
dpkg-reconfigure nod32ls command, or by manually editing the
/etc/nod32/nod32.auth file.
The databases of the Nod32 module can be instantly updated from the official Nod32 webserver if the machine being installed has network access. Otherwise, an update can be manually initiated by issuing the zavupdate command.
Configure the e-mail notification sending of the Zorp Management Server monitoring subsystem. Provide the e-mail address of the administrator who will receive the notifications.
Openswan is an IPSec implementation used in Zorp for building VPN connections.
Expert mode: Select when should Openswan be started. The following options are available:
Earliest: This is the default, and recommended if nothing restricts its use.
After NFS: This option should be used if
/usr is mounted via NFS, but no PCMCIA network
card is used in the system.
![]() |
Warning |
|---|---|
The NFS mount of |
After PCMCIA: If a PCMCIA network card is used for IPSec connections, or the keys will be fetched from a locally running DNS server with DNSSec support, Openswan has to be started after PCMCIA.
Openswan should be restarted in order to activate a security fix.
During normal installation, Openswan is configured to start at the earliest possible time and is automatically restarted to activate the security fix.
Select if Opportunistic encryption should be enabled. Opportunistic encryption
stores IPSec authentication information (i.e. RSA keys) in secure DNS records.
However, since this is not yet widely used, it may introduce significant
slowdown for new outgoing connections and may break existing connections when
pluto, the Openswan keying daemon is started.
The section below describes the configuration options of Zorp Management Server.
ZMS stores the configurations of the managed hosts in a database. This database can be automatically deleted (Yes option) when purging ZMS.
The hosts managed by ZMS are organized into sites. When installing ZMS, the name of the site that the ZMS host will belong to has to be defined. Use a descriptive for the site, e.g., the name of the organization.
The name of the host the ZMS will be installed on. It is recommended to use the normal name of the host, but do not use FQDN here. This name is stored in the ZMS database and is complicated to modify later.
ZMS includes PKI management as well to ensure that each element of the firewall system (ZMS module, VPNs, users) can be authenticated with X.509 keys. During this stage of the installation the root CA is created and configured. To achieve this the install program requests the following parameters:
Country ID (two characters only, e.g., US, HU, DE)
State (e.g., Nevada), optional field
City (e.g., Las Vegas), optional field
Corporate name (e.g., BalaBit Ltd.), optional field
Organization unit name (e.g., HQ), optional field
Answer the questions without accents according the X400/X500 standard.
ZMS monitoring can store the data in a PostgreSQL database. This database can be created either manually or automatically. Answer also if ZMS monitoring should not store the data.
The database used can be either local or remote. The database server has to allow MD5 encrypted password authentication and ident authentication using Unix sockets. The database installed by Zorp is automatically configured that way; when using a custom server, this has to be performed manually.
When setting up the local database, Zorp installer will automatically create a database and set a password for the ZMS database user.
In this section the ZMS engine will be configured. Various passwords and the parameters of the local Certificate Authority will be set.
The ZMS administrator password is used to login to ZMS from the Zorp Management Console as an administrator. The username of the administrator by default is admin, which can be modified later. Assign a password which conforms to the secure password generation standards of your organization. The password can be changed any time later.
In this stage a secure password for the formerly initialized CA of ZMS has to be set. Assign a password which conforms to the secure password generation standards of your organization. It is possible, though difficult to change the CA password later.
The system date of the computer will be displayed. Check the date carefully and verify that it is correct.
![]() |
Warning |
|---|---|
If the system date is incorrect, it is possible that the validity of the certificates used by ZMS to communicate with the Zorp hosts cannot be verified and the system will not operate correctly. |
After the configuration procedure is finished, the Zorp packages will be installed according to the data obtained during the configuration. This is the final step of the installation, after that you can start to use the host.
The configuration of the system can be repeated at a later date by running base-config new from a command prompt. If only a single package has to be corrected, it is recommended to use the dpkg-reconfigure packagename command (e.g., dpkg-reconfigure openswan).
License keys can be downloaded from the BalaBit website using a MyBalaBit account (http://www.balabit.com/mybalabit/). The installer can copy them from a 3.5" floppy disk, an USB drive, or it can download them from a webserver using HTTP if network connection for the machine is available during the installation. Beside the license file(s), no online activation or similar is required.
Attach the USB drive to an USB port of the host, or insert the floppy containing the license file into the 3.5'' drive of the computer. Choose the USB or Floppy drive option. If not detected automatically, select the drive containing the license, or select the Re-scan devices option.
![]() |
Note |
|---|---|
|
When accessing the licenses, the directory structure is important: for
each Zorp component licensed there is a separate subdirectory named after
the component (for example, Zorp, ZMS, ZAS) containing a license file named
The license files of 3rd-party engines are not necessary called
|
If the computer does not contain a 3.5" floppy drive, or the installation program does not recognize it for some reason, it is possible to install the licenses via HTTP from your local webserver. BalaBit does not provide online access to license keys. Choose the HTTP option and enter the URL where the license is accessible. The URL may use the domain name or IP address of the server. If the installation of the licenses fails for any reason, they may also be installed manually at a later date.
![]() |
Note |
|---|---|
|
When accessing the licenses, the directory structure is important: for
each Zorp component licensed there is a separate subdirectory named after
the component (for example, Zorp, ZMS, ZAS) containing a license file named
The license files of 3rd-party engines are not necessary called
|
The iptables utility included in ZorpOS is configured by default to deny any traffic going through or to the machine. During the installation process the role of the host has to be defined: iptables will be configured according to the role of the host. This selection has effect only during the first installation of the host, it will not modify an existing iptables configuration. The following roles are available:
FIREWALL: ZMS agent and remote shell (SSH) communication will be enabled. This technically means ports TCP/1311 and TCP/22.
ZMSHOST: ZMC to engine communication and remote shell communication will be allowed on ports TCP/1314 and TCP/22, respectively.
NONE: All IP traffic will be dropped by default, therefore all remote administration attempts will fail. All allowed traffic has to be enabled manually from a local terminal.
If installing the Zorp firewall suite and ZMS on the same host, choose ZMSHOST as the host role.
Depending on the selected host role, the following IP addresses also have to be provided:
FIREWALL: The IP address of the ZMS host used to manage the firewall.
ZMSHOST: The IP address(es) of the ZMC console(s) used to manage the ZMS host (i.e. the machines from where the firewall administrators will connect to Zorp or ZMS). If managing ZMS is allowed from multiple ZMCs, list the IP addresses separated by spaces.
![]() |
Warning |
|---|---|
The IP adresses of the ZMS/ZMC hosts must be typed correctly, otherwise the machine will not be accessible from ZMS/ZMC. In this case, the configuration of iptables must be corrected manually. See man iptables-utils for details. |
Install a boot loader to the selected partition of the hard drive. By default, the GRUB boot loader is installed to the machine.
![]() |
Tip |
|---|---|
Usually the easiest and most convenient solution is to install the boot loader to the master boot record of the primary hard drive. |
Expert mode: Enter a password for the boot loader if you wish.
![]() |
Warning |
|---|---|
Password-protecting the boot loader means that the password must be entered locally after every reboot. This means that the host will not boot (thus it will not function) until the password is entered, therefore it is not recommended on firewall host. |
This step is available in Expert mode only. When using RAID devices, the mdadm management utility has to be configured. The following options are available:
Start RAID devices automatically: If enabled, all RAID devices are detected and assembled automatically on system startup. The md driver required for this task is available in ZorpOS as a kernel module.
Start RAID monitor daemon: If running, the RAID monitoring daemon sends an e-mail to the user specified if a device belonging to a RAID array fails or changes its status.
Recipient for daemon e-mail notifications: The user receiving e-mail notifications when a device belonging to a RAID array fails or changes its status.
In normal mode, RAID devices and the RAID monitor daemon are started automatically, e-mail notifications are sent to the root user.
After the installation is finished, the computer is rebooted.
If the installation was finished successfully and you have installed the licenses via HTTP, do not forget to delete the electronic license(s) from the web server to prevent unauthorized downloads.
The installation instructions above followed a typical installation cycle. It is a largely automatic process requiring as few user interaction as possible but at the same time allowing the control of installation details. In some cases, however, it may be necessary to manually install components of the system individually by using the standard Debian apt tools.
In particular, apt-get install can be used to install the following components.
zmc (the Linux version of Zorp Management Console)
zms-engine (the ZMS itself)
both types of agents: zms-transfer-agent and
zms-monitor-agent
Install the statically or dynamically linked version of the
zms-transfer-agent.
apt-get install zms-transfer-agent (or zms-transfer-agent-dynamic)
Install the statically or dynamically linked version of the
zms-monitor-agent .
apt-get install zms-monitor-agent (or zms-monitor-agent-dynamic)
Install the zms-engine.
apt-get install zms-engine
Install the zmc graphical administration tool to a client.
zmc cannot be installed on a Zorp host.
apt-get install zmc
![]() |
Note |
|---|---|
Note that |
Other components can be installed similarly.
All the components of Zorp can be upgraded using the standard apt tools. When used on Debian GNU/Ubuntu Linux systems, the Zorp Management Console (ZMC) and Zorp Authentication Agent (Satyr) client-side applications can be upgraded using apt as well. On Microsoft Windows and other Linux platforms, upgrades to these applications must be downloaded manually from http://www.balabit.com/network-security/zorp-gateway/.
To perform an upgrade follow the procedure below.
4.5.1.1. Procedure – Upgrading Zorp hosts using apt
Login to the host locally, or remotely using SSH.
Before the first upgrade, complete the following steps:
Execute the apt-setup command.
Select Edit the configuration by hand
To download always the latest Zorp release and security fixes, replace the contents of the file with the following (replace the USERNAME:PASSWORD part with your actual username and password)
:deb https://USERNAME:PASSWORD@apt.balabit.com/zorp-os zorp-os-3.3/zorp-3.3latest zorp-os zorp-os-extra deb https://USERNAME:PASSWORD@apt.balabit.com/zorp-os zorp-os-3.3/zorp-3.3latest zorp zas zcv zms deb https://USERNAME:PASSWORD@apt.balabit.com/zorp-os zorp-os-3.3/3.3security zorp-os zorp-os-extra
The first source is for the upgrades of the ZorpOS operating system; the second is for normal product upgrades; while the third source contains security updates of the ZorpOS operating system. For more information refer to the Zorp Upgrade Page at https://www.balabit.com/network-security/zorp-gateway/upgrades/
![]() |
Tip |
|---|---|
|
If for some reason you do not want to upgrade your Zorp
components to the latest version (for example, your organization
requires extensive testing before every upgrade), it is possible
to use a selected Zorp release, and download only the security
fixes of the ZorpOS packages. To accomplish this, replace
deb https://USERNAME:PASSWORD@apt.balabit.com/zorp-os zorp-os-3.3/zorp-3.3R3 zorp-os zorp-os-extra deb https://USERNAME:PASSWORD@apt.balabit.com/zorp-os zorp-os-3.3/zorp-3.3R3 zorp zas zcv zms deb https://USERNAME:PASSWORD@apt.balabit.com/zorp-os zorp-os-3.3/3.3security zorp-os zorp-os-extra |
Issue the following commands: apt-get update; apt-get -u dist-upgrade. The host will download and install the new and updated packages.
![]() |
Note |
|---|---|
|
The username and password required to perform the upgrade are provided for you by BalaBit upon registering your copy of Zorp. You can register either online (http://www.balabit.com/support/registration/) or by phone. If you are using your MyBalaBit account to access the apt repository, the
deb https://smith-at-example.com:PASSWORD@apt.balabit.com ... |
After successfully installing the server–side components, the management console on
the client needs to be installed. The Zorp Management Console (ZMC) is available for
Windows and Linux platforms. The Windows version comes as a single
.exe install file, while there is a generic installer for Linux (a
.run package). Both versions are available on the Zorp
Installation CD, and can also be downloaded from the BalaBit website. Updates for ZMC
are also available on our website at: https://www.balabit.com/downloads/files/zorp-pro/3.3latest/setups/
The Windows and Linux versions are identical in look and feel, they are both built with the GTK Toolkit, so it is only a matter of preference which platform you choose.
There are no license restrictions on the number of ZMC consoles you can install, so multiple management locations are possible.
![]() |
Note |
|---|---|
It is important to remember that the ZMC machine must always connect to the ZMS host and not the Zorp Firewall itself, so it is the ZMS host that must be reachable. The ZMS host, in turn, must be able to communicate with the management agents installed on the Zorp machine. |
![]() |
Note |
|---|---|
Before you start installing ZMC, the X graphical tool must already be configured and running on the machine on which you install ZMC. |
Start the installer for your platform:
zmc-<version_number>-linux-i386.run for 32-bit systems
zmc-<version_number>-linux-amd64.run for 64-bit systems
To install ZMC from the command line, navigate to the directory where the installation package is located, and issue the ./zmc-<version_number>-linux-i386.run command.
The installer allows you to set the installation path, and optionally to install the Zorp Administrator's Guide and the Zorp Reference Guide.
Zorp Management Console installation starts simply by running
zmc-setup-3.3.X.exe. Make sure you have Administrator
privileges or the necessary rights to perform the installation.
After the setup wizard welcomes you, it is required to agree the End-User License Agreement (EULA). Please read it carefully before accepting it.
The following step is to define the installation path. By default the setup wizard
offers "C:\Program Files\Zmc" but this can be modified.
During and after the installation process, you can monitor the files and drivers the setup wizard installed.
When the installation process is finished, Zorp Management Console can be started from Windows Start menu. The Windows version of ZMC automatically installs the HTML version of the Zorp Administrator's Guide and Zorp Reference Guide.
To download the latest Windows version of ZMC, log on to BalaBit's website.
Use the same username/password pair that is used with apt.
ZMC can be downloaded from the following URLs.
![]() |
Note |
|---|---|
Version numbers can differ according to the product development cycle. |
The Zorp Authentication Agent is a desktop authentication client for Zorp Authentication System (ZAS). It runs on the client desktop and mediates between the firewall and the user. It is available for both Microsoft Windows and Linux platforms at https://www.balabit.hu/downloads/files/zorp-pro/3.3latest/setups/.
![]() |
Note |
|---|---|
For details on installing and configuring the Zorp Authentication Agent, see the Satyr Manual available at the BalaBit Documentation Page at http://www.balabit.com/support/documentation/. |
During the installation of the Satyr Client 3.3 the pre-configured Debian system will be amended with certain packages and their dependencies. If the dependencies are already installed or an online Debian repository is accessible the Satyr Client can be installed from the Zorp Install CD as well.
Insert the Zorp Installation CD into the CD-ROM and mount it. In the root of the
Install CD you find an install.sh script, which can be used to
install Satyr on the host. Do not use apt-cdrom to setup the
sources.list as it will mix up the apt database.
Finally you need to install the necessary CA certificates into your
/etc/satyr/ca/ directory. The Satyr client and the Satyr
multiplexer will start automatically.
Satyr is available for Debian etch and Ubuntu 8.04 from the following repositories:
Make sure the following lines are in your /etc/apt/sources.list file:deb https://USERNAME:PASSWORD@apt.balabit.com/zorp-os debian-etch/zorp-3.3latest satyr
deb https://USERNAME:PASSWORD@apt.balabit.com/zorp-os ubuntu-hardy/zorp-3.3latest satyr
Installation of Satyr client can be started by running
satyr-setup-3.3.X.exe. The installation requires
administrator privileges.
After Satyr Client setup wizard welcomes you, it is required to accept End-User License Agreement (EULA). Please read it carefully before accepting it.
The following step is to define the installation path. By default the setup wizard
offers "C:\Program Files\Satyr Client", but this can be
modified as needed. The Satyr client requires about 4MB of free disk space.
During and after the installation progress, you can monitor the files and drivers that the setup wizard installs.
When the installation process is finished, the Satyr client and the Satyr multiplexer will start automatically.
Finally you need to install the CA Certificate which was used to sign the
firewall's certificate. You need to export the certificate in Definite Encoding
Rules (DER) format from ZMS (using the Zorp Management Console) and install it under
Satyr using addcert.exe, which is distributed with the Satyr
Client. Please refer to the PKI chapter of the Zorp Administration Guide for further
details.
Manual partitioning enables the full customization of the hard disk(s) used in the computer. The following options are available on the main screen:
Configure software RAID: Software RAID can be configured here after all the required partitions have been created. RAID configuration is discussed later in Section 4.8.3, Configuring software RAID.
Guided partitioning: Use this option to revert to automatic partitioning.
Help on partitioning: Displays a brief help on partitioning. This text is also summarized below.
List of detected hard disks and partitions
Undo changes to partitions: This option erases all modifications done to the partition tables of the hard disk(s) and restores the original state.
![]() |
Note |
|---|---|
Obviously, changes already written to the disk cannot be undone. |
Finish partitioning and write changes to disk: Select this option after configured the partitions to suit your needs. The actual partitioning will be performed only when selecting this option. A confirmation will also be requested before the changes are performed.
![]() |
Warning |
|---|---|
Select this option only when you have verified that the hard disk does not contain any important information. Modifying the partition table irrevocably erases all data on the system. |
The hard disk to be partitioned can be selected from the list displaying the available hard disks and their existing partitions (if any), and the available free space on each drive.
By selecting a device, it is possible to create a new, empty partition table on it (this action removes all existing partitions from the drive). This is an essential step when a new hard disk is used for the first time. After the partition table is created, the capacity of the hard drive becomes available for partitioning as free space. The available free space is indicated in a separate line.
To create a new partition, select the line indicating the free space of the hard disk and hit , and select the Create a new partition option.
The following parameters of the partition have to be specified:
Size: The size of the partition. It can be specified in Gigabytes, or as a percentage value (i.e. 20% will create a partition using 20% of the available free space).
Type of the partition: Select if the partition should be a primary or a logical partition.
Location of the partition: When the partition created is smaller than the available free space, it can be placed either at the beginning or at the end of the available free space.
The exact use of the partition can be configured on the next screen.
Use as: The filesystem used on the partition. Zorp supports the use of the following filesystems: EXT3 (default), EXT2, ReiserFS (version 3), XFS, FAT16, FAT32. The partition can also be used as swap area, or as a physical volume for RAID. It is also possible to retain the partition for later use by selecting the Do not use the partition option.
Mount point: The mount point of the partition can be selected from a list or entered manually.
Mount options: Mount options common to Linux can be specified here, e.g., mounting the partition as read-only.
Label: Volume label of the partition. The default name is the mount point.
Bootable flag: Turn it on if it should be possible to
boot from the partition. At least one bootable partition (the root partition
with the mount point /) is required for the machine to
be usable.
Size: The size of the partition can be modified here.
Done setting up the partition: Finish configuring the partition and return to the main partitioning screen.
Copy data from another partition: Copy the data stored on an enxisting partition to this partition.
![]() |
Warning |
|---|---|
This option writes the changes to the disk. |
Delete the partition: Remove the partition from the disk. The disk space used by the partition becomes available as free space for further partitioning.
After you have finished the configuration select from the main partitioning screen.
![]() |
Warning |
|---|---|
Important! Without the root and the swap partitions the system cannot work,
thus creating them is compulsory. The root partition must also physically
contain |
There is no required partitioning schema for ZorpOS: the number and size of partitions depend on the future role of the machine.
![]() |
Tip |
|---|---|
If the machine is intended to be a Zorp firewall with the native Postfix
service configured and used for mail delivery, it is recommended to create a
large |
To modify an existing partition, select it from the main partitioning screen. A menu identical to the one discussed in Section 4.8.1, Creating a partition will appear, allowing you to modify the different parameters of the partition.
RAID (Redundant Array of Independent Disks) is a solution of combining multiple hard disks in order to achieve fault tolerance and/or high performance. ZorpOS supports three versions of RAID, RAID 0 (data striping), RAID 1 (mirroring), and RAID 5 (distributed data storage with distributed parity). RAID 0 and 1 require at least two hard disks, while RAID 5 needs at leasts three.
![]() |
Note |
|---|---|
Software RAID can be very CPU intensive and might reduce the general performance of the system. |
After the successful installation of Zorp the real configuration work can start. The main tools and procedures of Zorp graphical management are described below.
ZMC itself is just a graphical frontend to ZMS. It is ZMS that stores configuration information and manages connections with the agents on managed hosts. The ZMS-based firewall management can only be performed via ZMC; there is no console alternative. ZMC is not “bound” to a particular ZMS host, as long as the proper username/password pair is known, it can be used to connect to any ZMS host.
ZMC can be started the following way:
Windows: Locate the Zorp folder in the menu
and click on the icon. If no such folder has been created when
ZMC was installed, start zmc.exe manually from the installation
folder.
Linux: Issue the zmc command from a command line
terminal. It is located under /usr/bin.
When you first start ZMC after the installation, the list of reachable ZMS hosts is empty,
so you must define a new entry with the button. ZMC configurations
are stored in a folder named .zmsgui. This folder (for the Windows
version of ZMC) is created in the installing user's profile directory, which is typically
%systemroot%\Documents and Settings\%username% The name of the file
that stores ZMC configurations is zmsgui.conf. The Linux version of ZMC
stores configuration information in the same manner, within the user's home directory.
5.1.1. Procedure – Define a new host and start up ZMC
Define a new entry in the list of reachable ZMS hosts with the button.
The name parameter, Engine can be an arbitrary string and need not be the same as the hostname of the ZMS Host.
Fill the IP address field correctly.
Fill the Port field or leave it empty to use the default TCP port 1314.
Port assignment can be changed later if needed.
Click and the newly created server gets listed in the Engine text box.
Continue with authentication by clicking .
By default, the built-in administrator account of ZMS and thus Zorp is called admin, whose ZMS password was defined during installation.
The name of the administrator can be changed or additional administrators can be added later via ZMC. To modify existing users or add new ones, see Section 14.1.1, Configuring user authentication and privileges. To create user accounts with limited privileges (e.g., users who can only look at the configuration for auditing purposes, but cannot change anything) see Section 14.1.1.4, Configuring user privileges.
After supplying the correct password, if network connectivity is provided, the ZMC main screen greets you.
![]() |
Note |
|---|---|
When ZMC connects to a ZMS engine for the first time, the SSH-style fingerprint of the ZMS host is displayed. During later connections, the fingerprint is checked automatically. |
![]() |
Warning |
|---|---|
ZMC and the ZMS to be accessed should have matching version numbers, i.e. ZMS 3.3.1 should be accessed with ZMC 3.3.1. Login is not permitted if the version of ZMS and ZMS is different. |
The graphical real estate of ZMC is divided into three main parts.
menu bar
configuration tree
main workspace
![]() |
Note |
|---|---|
You can give commands using the configuration buttons in the button bar below the menu bar. For more information on the button bar, see Section 5.3.2, Configuration buttons. |
The following sections introduce ZMC components and highlight their main purposes.
The configuration tree is the placeholder for the configurable components of a Zorp system. Whenever you select an item in the configuration tree, the main workplace changes and shows the configurable parameters of the selected item. The configuration tree is organized hierarchically and this hierarchy maps the management philosophy of Zorp.
The topmost item in the configuration tree is the Site's name that you have entered during ZMS host installation. There are usually one or more items below it: ZMS and/or Zorp hosts.
In the simplest scenario, where ZMS is installed on the Zorp machine there is only one machine listed. Note that in this case the name that appears here is the name of the ZMS host given during installation. Under each host, a varying number of configuration components are listed.
By default two components are available for each host:
Management agents
Networking
Since the ZMS host is a Management server as well,
it has a third component for configuring management server parameters.
Each site, host, and component has status icons or leds on its left; these are described in Section 5.3.6, Status indicator icons.
The number of components increases as you start the real work: many services have standalone configuration components that you have to add to the configuration tree to use them.
The forthcoming chapters deal with these components in detail.
The biggest configuration entity most Zorp systems consist of is the Site. A Site is a collection of network entities that belong together from a networking aspect.
From firewall administration point of view, the site is the collection of the machine nodes. If the company is big and/or has geographically separated subdivisions, more than one firewall may be needed. If they are all administered by a single (team of) administrator(s), they can all fall under the supervision of a single ZMS host, in which case the Site consists of a ZMS Host and n firewalls
The reverse of this setup is not possible: a single Zorp firewall cannot be managed by more than one ZMS hosts, because this setup would cause indefinite and confused firewall states.
If you purchased the High Availability (HA) module for Zorp as well and thus have two firewall nodes clustered, they can be administered as a single ZMS host. Clusters are described in detail in Chapter 15, Clusters and high availability.
ZMC machines do not belong to the site(s) they administer technically, though physically they are located in close proximity to them.
Site is a typical container unit and components of a site (i.e. the hosts) share only few but important properties:
Zone configuration
All hosts (firewalls) belonging to the same site share a common zone configuration. For more information on zones, see Chapter 8, Creating Zorp policies.
public key infrastructure (PKI) settings
Zorp makes heavy use of PKI, for example in securing communication between ZMS and the firewalls, in authenticating IPSec VPN tunnels, proxying SSL-encrypted traffic.
Although a site can be managed by a single ZMS host only, a ZMS host can manage more than one sites.
![]() |
Tip |
|---|---|
|
A possible reason for a company to create more than one site may be to maintain different Zone structures for different sets of firewalls. This is a frequent requirement for geographically distributed corporations who have separated network segments defended by Zorp firewalls, but who want to maintain central (ZMS-based) control over their firewalls. Another possible user of multi-site, single-ZMS setups is a support company who performs outsourced Zorp administration for a number of clients. In this scenario all business clients are ordered into separate sites but all these sites are managed by the support company's single ZMS host. |
A site is composed of one or more hosts. Hosts can be the following items:
Zorp firewalls,
ZCV hosts,
ZAS hosts, and
ZMS managed hosts.
At the very minimum setup, when Zorp and ZMS are installed on the same machine, there is one host registered for the given site. The number of Zorp firewall nodes per site is only limited by the number of licenses purchased. With the exception of Zone and PKI settings, configuration parameters are always per host.
For a host component (ZMS or Zorp) the main workspace shows system statistics for the given machine, including hardware parameters, memory usage, uptime, and — on Zorp hosts — the version number of Zorp, and the number of running Zorp instances and threads. The validity and size of the licenses (Zorp, ZMS, etc.) available on the host are also shown. ZMC displays a warning if a license expires soon.
![]() |
Note |
|---|---|
To access license information from the command line, login to the host and execute the /usr/lib/zms-transfer-agent/zms_program_status hoststat command. |
The statistics auto refresh every 30 seconds by default.
![]() |
Tip |
|---|---|
Although host statistics may seem a less important, auxiliary service, it is extremely useful when firewalls operate under continuous heavy load and you want to optimize resource allocation. |
The actual configuration of hosts is performed using configuration components. These components are bound to given firewall services. For example, there are separate components for Postfix, for NTP and for Zorp itself. The list of usable components depend on the type of host under configuration. Most components belong to Zorp firewall hosts.
By default, there are two components added for each host: Networking and Management Agent. For
ZMS hosts the Management Server component is added
automatically. New configuration components can be added to a host using the following
procedure.
5.2.1.3.1. Procedure – Adding new configuration components to host
Highlight the desired host in the configuration pane.
Click at the bottom of the Host tab (below the Components in use subwindow).
Select the desired configuration component icon from the window appearing, and click .
OPTION
Depending on the component, give default values for the component in the appearing new window or select a default configuration template.
These built-in templates are configuration skeletons with some default values and options preset. Creating new configuration templates is also possible.
![]() |
Note |
|---|---|
For managing Zorp firewall hosts, it is essential to add the |
The configuration components are strictly focused on the service they manage and all have a distinctive graphical management interface accordingly. For more information on these components, see chapters Working with the Networking component and IPSec VPN and its configuration.
Most of the graphical real estate in ZMC is occupied by the main workspace where various components of the component tree are managed. The majority of configuration tasks are performed here. The contents of this pane depends on which component is highlighted (active) in the configuration tree.
The bottom part of the main workspace when a host is highlighted in the configuration tree is the place where new administrative components can be added to the given host.
If you change focus in the configuration tree, the contents of the main workspace change as well.
![]() |
Tip |
|---|---|
ZMC has many keyboard shortcuts for accessing certain functions quickly. These are listed in Appendix 2, Keyboard shortcuts in ZMC. |
Although most options of the menu bar are available as buttons on other parts of the ZMC window there are some special menu points that have no corresponding button in the main workspace. The buttons are described in the section which deal with the corresponding ZMC part where they appear.
The menu has two important items.
Import
Export
Using import and export commands it is possible to import and export ZMC “skeleton” configuration from and to XML files. “Skeleton” means the basic structure of ZMC covering, for example:
site-wide settings (Zones and PKI),
hosts present on the given site,
components added for the hosts,
configuration files manipulated by these components.
![]() |
Note |
|---|---|
You are recommended to use the export/import functions with extreme care because improper addition or removal of files can break the existing links the Zorp components uses, for example to a zone or interface. |
The menu has two items that are especially useful:
Preferences, and
Servers.
Under some confirmation settings can be turned on and off, a feature that greatly improves user experience.
Global settings related to monitoring can be configured from the Monitoring tab of the menu item.
![]() |
Tip |
|---|---|
and can be combined into a single action, which means that if you want configuration changes to reach the firewall immediately – and not just the ZMS database – you can do it with a single click. |
With the menu item it is possible to configure new ZMS engine connections for ZMC.
![]() |
Tip |
|---|---|
ZMC cannot connect to more than one ZMS host simultaneously but there can be more ZMS hosts configured and then one selected for connection upon ZMC startup. |
PKI settings are always site-wide and can be configured graphically using the PKI menu only. For more information on PKI usage under Zorp, see Chapter 13, Key and certificate management in Zorp.
To clarify management it is possible to define system variables for ZMS. These variables all have a scope, depending on which component is selected in the configuration tree when they are declared.
By using variables it is simpler and error-free to change a value which is present at many different places. Modifying a corresponding variable results in changed values everywhere they are used.
![]() |
Note |
|---|---|
Instead of variables, you are recommended to use links. |
Variables can be defined and changed under the in the menu. By default there are two host variables defined:
Hostname, and
autobind-ip.
5.2.3.4.1. Procedure – View or modify variables
Select a host in the configuration tree.
Click from the menu.
5.2.3.4.2. Procedure – Define site-wide variables
Select a site in the configuration tree.
Click from the menu.
Altogether, variables can work in three scopes that correspond to configuration levels in the configuration tree: site, host and component.
![]() |
Tip |
|---|---|
Using variables is especially useful in sophisticated, enterprise Zorp environments where complex configurations have to be maintained. When referencing variables inside configuration windows, “$” signs must precede and follow their names. For example, $autobind-ip$. |
The Zorp Administrator's Guide and Zorp Reference Guide are automatically installed with ZMC in HTML format and are accessible from the menu. The guides are opened in the default system browser. Alternative browsers can be specified in the Browser section of the / menu: select the radio button and type the name (including full path name) of the browser to start into the Browser path field.
![]() |
Tip |
|---|---|
The latest version of the above documentations, as well as additional whitepapers and tutorials are available from the BalaBit Documentation Page at http://www.balabit.com/support/documentation/. |
The bottom line of ZMC is called the status bar. When working with configuration components it can be used to check whether changes have already been Committed or there are Unsaved changes. This information tells whether what you see on the ZMC interface is the same as the information currently stored in the ZMS configuration database (committed status) or not.
Most configuration tasks concerning Zorp are component– based and even those that are site-wide, such as Zone manipulation, must be individually uploaded to all firewalls of the given site. Therefore, configuration tasks can be organized into cycles and most elements of these cycles are the same regardless of the component configured. In fact, most of the configuration is repetitive and thus can easily be procedurized.
In this section, after a brief overview of the most typical steps, the configuration process and the tools (buttons) that are used to perform each task are presented.
When you log on to ZMS via ZMC, first an SSL encrypted channel is built, then firewall configurations currently stored in the ZMS database are downloaded into ZMC. When you finish doing configuration changes they are committed back into the ZMS database. At this point no changes are made to the firewall(s); only the database on the ZMS host is modified. It takes a separate action, an upload issued to actually propagate changes from the database down to the firewall(s). With this upload action the configuration changes get integrated into the configuration files on the Zorp machine(s). For final activation, a reload or restart (depending on the situation and the service being modified) is needed to activate the changes.
A complete configuration cycle consists of the following steps.
5.3.1.1. Procedure – The general process of configuring Zorp
Highlight the component to be configured in the configuration tree at the left side of the main ZMC window.
Perform the actual configuration changes on the component. See details in the relevant chapters.
Commit changes to the ZMS database. Otherwise the changes are lost when you leave the component. ZMS stores the modified configuration information in its XML database.
Write a brief summary about the changes into the Changelog.
Activate changes first by uploading them to the affected Zorp firewall hosts from the ZMS database. ZMS converts changes to the proper configuration file format and sends them to transfer agents on the firewall nodes. There the changes are applied.
Reload the altered configurations on the firewalls, or restart the corresponding services.
![]() |
Note |
|---|---|
Not all of these steps are performed in each configuration cycle; service reloads or restarts are typically postponed as long as possible and are likely to be performed only after all configuration tasks with the various service components are finished. |
Most administration commands for the configuration tasks can be issued from either the various menus or by clicking a number of dedicated buttons. These buttons are grouped in a line under the menu bar in the button bar. The number of buttons visible varies based on the component selected in the configuration tree.
The
and
buttons are always visible, at the minimum.
Commit is used when you finish a (set of) configuration
changes and want these changes to enter the database on the ZMS host.
Revert serves the opposite purpose: before committing
changes to the ZMS database, it is possible to clear, to undo them in ZMC.
![]() |
Note |
|---|---|
It is very important to remember that is limited to ZMC, it cannot clear configuration changes already committed to the ZMS database. Those changes can be undone by performing a new round of changes in ZMC and then committing these changes again. |
Both and are component–focused controls meaning that before you select a new component from the configuration tree, changes in the current component must be committed – otherwise they are lost. The following dialog box warns you in such cases.
Upload is used to upload the configuration changes
committed to the configuration database on the ZMS Host further to the corresponding Zorp
firewall(s).
![]() |
Tip |
|---|---|
The button has a comfortable property, configurable under of the menu. It is possible to set that if you click it without a prior commit action, upload first performs a commit automatically and then performs the upload action. |
Service control is a combobutton for performing Reload or Restart to have services re-read the new configuration files that are already on the corresponding Zorp firewalls after a successful commit/upload cycle.
Restarting the given service or reloading depends on the type of service – some cannot be reloaded, only restarted – and the intended outcome.
Clicking the button brings up the following dialog box.
![]() |
Note |
|---|---|
Besides and , there are also and functions available here to start or stop services. |
View current configuration and Check current configuration are both used to get information on the current state of the Zorp firewall(s).
The button presents the configurations of
the component selected in the configuration tree on the selected host. This information
comes from the ZMS configuration database which is not necessarily the same as the actual
settings on the selected host – when changes are already committed, but not yet uploaded.
For example, highlighting the Networking Networking
component under ZMS_Host and then clicking brings up the following window.
It is a file-by-file listing of the active configuration on the selected host. Note that it is not necessarily the same configuration that is stored in the ZMS database: after a commit but prior to an upload event they can differ significantly. This difference can be queried with the button. Using the Linux diff utility by default, it compares configurations stored in the ZMS database with the configurations currently active on the selected host.
The differences are marked in red, otherwise you see the normal output of diff, with + and – signs designating data from the host and
from the database, respectively. The diff command can
be replaced with another utility of your choice under the Management Server component (see Chapter 14, Advanced ZMS and Agent configuration for
details).
Files gives further information and configuration options of the files and attributes described in the output window of the button and the diff command.
The button serves two purposes. It gives vital information about which configuration files a component (of the configuration tree) uses and gives chance to modify file properties listed.
In case of Networking, for example, the list of
used files is the following.
Apart from the name and location of files, you can get information about owner, owner group, access rights and file type parameters. The Manage column is very important and has a corresponding checkbox immediately below the file listing: this can be used to control what files ZMS manipulates on the host machine, if needed.
![]() |
Note |
|---|---|
Although certain files can be taken out of the authority of ZMS using the checkbox in the Manage column, you are not recommended to do it because it can severely limit the effectiveness of ZMS–based administration. |
To modify the file properties, click on the listed items. The following subwindow opens.
![]() |
Warning |
|---|---|
There must be a solid reason for changing these properties and you must be prepared for the possible consequences of such actions. A good understanding of Linux is recommended before making changes in file properties. |
The third part of the window is for configuring the work of the comparison utility which is diff by default. You can define what file properties you are interested in when checking for changes.
![]() |
Tip |
|---|---|
Checking for configuration file differences is beneficial from a security aspect as well: it is an additional tool for making sure nobody altered critical files on the firewall. |
At the bottom of the Configuration files tab you can specify a postprocess command that is to be run after the corresponding configuration file is uploaded to the firewall host. Some services rely heavily on this option. For example, Postfix that runs / usr/sbin/postmap %f as a postprocess command to transport virtual domains and set various access restrictions are properly.
Configuration files under Linux are re-read during service reloads or restarts. These
actions are performed by running the corresponding scripts exclusively from the
/etc/init.d directory. The Scripts tab of the
Files window provides an interface where you can check starting
scripts and alter and fine-tune them with special Pre upload and
Post upload commands. With simple components, such as Networking, these options are rarely used but in some cases
might prove especially useful.
Some components, for example, Text Editor, can manage configuration files that are automatically reloaded; they cannot be restarted after a Commit. To set the status icon of these components to Running, check the Configuration runs automatically checkbox on the Scripts tab.
Some components are related to or dependent upon each other, meaning that modifying one modifies the other as well. A typical example is the Zorp and Packet Filter component: after modifying a listener, the skeleton of the Packet Filter must be regenerated: its status changes to Invalidated in the configuration tree. ZMC automatically handles related components, all actions (Commit, Reload, etc.); just select the Apply action for the dependent components checkbox in the confirmation dialog of the action.
When reloading or restarting a component related to the Packet Filter, the skeleton of the Packet Filter is automatically regenerated. See Appendix 1, Packet Filtering for details on generating skeletons.
ZMS now records the history of configuration changes into a log file. The logs include who, when modified which component of the Zorp gateway system. Component restarts and other similar activities are also logged, and the administrators can add comments to every action to make auditing easier. By default, ZMC displays a dialog to comment the changes every time the ZMS configuration is modified, or a component is stopped, started, or restarted. The changelogs cannot be modified later.
Every changelog entry includes the following information:
Date : The date when the action was performed.
Administrator: The ZMC username of the administrator who performed the action.
Host: The Zorp hosts affected by the action.
Component: The ZMC components affected by the action.
Action: The type of change that was performed: commit, command execution, etc.
Summary: The comments of the administrator.
The behavior of the changelog window can be set in the section after selecting : it can be displayed after every action that can be recorded in the changelog (), when the administrator closes ZMC (), or it can be turned off ().
To review the existing changelog entries, select from the main menu. The appearing View Changelogs window contains two filter bars: one on the top of the window to search for changelog entries, and another one in the middle to use if a single changelog entry contains many actions(see Section 5.3.10, Filtering list entries for details).
Most firewalls are administered by a group of responsible persons and not just by a
single, dedicated individual. In a Zorp system each administrator can have an own ZMC
console and administrators can be separated geographically. Regardless of their locations
they administer the same set of Zorp firewalls via a single ZMS host machine. Therefore, to
avoid configuration errors caused by more than one administrator working with the same
component simultaneously, a configuration lock mechanism is in place that ensures that a
component's configuration can only be modified by a single administrator at a given time
instant. Note that locking in ZMC is per component: as soon as for example you change, for
example, a setting in a component, the status bar writes Unsaved
changes and that component is locked for you. Active locks can be seen at
the item of the menu:
The Owner column can take two values:
Other
meaning that someone else is working with the given component
Self
indicating your own locks.
Lock placement is automatic. The first administrator starting modifying a component's settings gets the lock. In the Active locks column the exact name of the locked component (Site/Host/Component) can be seen. Locks are cooperative, meaning any administrator can release any other administrator's locks by highlighting the desired component in the Lock management window and then clicking the button. The administrator whose lock is released this way is immediately notified in a warning dialog.
![]() |
Note |
|---|---|
Since this is a rather radical interaction, concurrent administrators should discuss lock situations before possibly devastating each other's work. |
It is not possible to edit a component already locked by someone else because a warning dialog immediately appears upon trying to change anything inside the given component:
As soon as the locking administrator commits the changes the lock is released and the information box above disappears.
A component can be locked by multiple administrators at once; there is a lock queue mechanism implemented in ZMS, meaning administrators can preregister for future locks while the current lock is active. Since there is no hierarchy among Zorp administrators from ZMS's aspect and anyone can release anyone else's locks, it is crucial for administrators to cooperate well and respect each other's work – and each other's locks.
The Configuration tree in ZMC displays various indicators to provide a quick overview about the status of the managed sites, hosts, and components. Site and host-level status is indicated by leds, while icons are used to display component-level status information. Positioning the mouse cursor over a led or icon displays a tooltip with the full description of the status.
![]() |
Tip |
|---|---|
Status tooltips are displayed for the period set in the (see Section 5.2.3, Menu & status bars and Preferences). It is also possible to disable the tooltips altogether. |

![]() |
Note |
|---|---|
Similar leds are also used throughout ZMC to display information about the state of various objects, such as network interfaces, Zorp instances, NTP servers, Heartbeat resources, etc. These are described in their respective sections. |
The site-level led displays the validity of the certificates used by the PKI system of the site (see Chapter 13, Key and certificate management in Zorp for details). The led has the following three different states:
Green
: All certificates are valid.
Yellow
: One or more certificate will expire soon.
Red
: One or more certificate has expired.
![]() |
Note |
|---|---|
Expired or soon-to-expire certificates are displayed in bold on in the PKI management tabs. |
The status of the host is displayed by four different leds. From left to right, these are the following:
All four leds can be blue
, indicating a partial or unknown status: this
appears when the status of the nodes of a cluster differs from each other. E.g.: the
transfer agent led is blue if the agent could establish the connection to only one of the
nodes, or if the state of the agent is unknown.
Hovering the mouse pointer above the leds displays a tooltip containing detailed information of the leds, including a summary of the committed/uploaded/etc. components.
These leds indicate the status of the transfer and monitoring agent connections, respectively. Green indicates that the agent is connected to the host, red means it is disconnected, while yellow shows that a connection attempt is in progress.
The management connection leds display unknown status if the
given connection is not enabled on the host and is in the disconnected state.
This led shows the availability of the necessary certificates and keys on the host. Green signs the normal state, while red shows that the cetificates have been modified (e.g.: refreshed), but the new certificates have not been distributed yet to the host.
![]() |
Warning |
|---|---|
This status led is especially important, because if the certificates are not distributed properly, ZMS will not be able to communicate with the host. See Section 13.3.5.2, Distribution of certificates for details on distributing certificates. |
The status of each component on a host (or cluster) is indicated by a single icon. The components can have the following state:
Modified
: The component has been modified, but the changes have not been
commited to the ZMS database yet.
Invalidated
: This status indicates that the component has to be updated because
of a modification performed in another component. For example, committing modifications of
the Zorp component invalidates the Packet filter
component, because the packet filtering rules have to be regenerated. Invalidated
components automatically become modified when they are selected from the configuration
tree.
Committed
: The modifications of the component have been saved in to the ZMS
database, but the new configuration has not been uploaded to the host. See Section 5.3.2.1, Commit and Revert for details.
Uploaded
: The new configuration has been successfully uploaded to the host.
See Section 5.3.2.2, Upload for details.
Running
: The uploaded configuration has been successfully activated on the
host (e.g.: the service/instance has been restarted/reloaded, etc.). See Section 5.3.2.3, Control for details.
Partial
: These states appear when the status of the nodes in a cluster
differs from each other. E.g.: the partial uploaded icon indicates that the new
configuration was not successfully uploaded to all nodes.
Locked: The component is in use (and has been modified) by another
user (see Section 5.3.5, Multiple access and lock management). This status is indicated by the above icons having
faded colors, e.g.: 
Occassionally it might be required to manually modify the status of a component. This can be accomplished from the menu via the and menu items.
![]() |
Note |
|---|---|
Only uploaded components can be marked as running. |
ZMC provides two graphical aids that can help administration when parts of a host's configuration settings need to be recreated on another host.
Copy/Paste
Elements of the configuration (e.g., network interfaces, proxies, policies, etc.) can be copied and then pasted to another host. This method can also duplicate an element on the same host. All settings of the element are copied to the target host.
![]() |
Warning |
|---|---|
Make sure to verify the settings of the pasted element, especially the parameters that used links. |
Multiple select
If multiple components are selected, the , , and operations are permitted on them. Clicking one of the buttons causes all configuration files belonging to the selected components be batch processed.
Additionally, a program, for example an archiving script, can be run on the configuration files of all selected components.
![]() |
Note |
|---|---|
Multiple selected components can also be copy/pasted. |
You have two options to refer to components involved in network configurations.
Create links
Use variables
If you use links, you can manually enter IP addresses or select the link target from a drop-down menu. Using links has the advantage that future changes in the network setup does not influence the operability of the connection.
You can delete the existing links with the and options. If you choose it ceases the link connection totally, meaning that the link field is left empty while deletes the link but leaves the target IP address in the field which will then behave as a manually added address.
You can refer to components by variables. By using variables you change values appearing
in several places at once. If you modify a variable, all corresponding values are changed.
Variables are denoted with “$” signs preceding and following their names. For example,
$autobind-ip$.
During the management and maintenance of the firewall host it is often useful to be able
to temporarily turn off certain rules, policies, etc. In Zorp this feature is implemented
via the / options of the local menus.
(The local menu of a rule or object can be invoked by right-clicking on the object.) For
example, a packet filter rule that is only rarely used can be simply disabled when it is not
needed, to be enabled again when it is required. Disabled rules and objects are generated
into the configuration file as comments with the # prefix.
Disabled objects can be edited, modified as any other object. However, their validity (e.g.: the required parameters are filled, their name is unique, etc.) is checked only when they become enabled. The following objects can be disabled in the various ZMC components:
Host: Quarantine cleanup rules.
Packet filter : Rules , Groups , Tables , and Chains can be disabled. Disabling a group automatically disables its childrens as well.
![]() |
Note |
|---|---|
Generated rules do not remain disabled after skeleton generation. |
Zorp : Instances , Dispatchers , Policies (including matchers).
Networking : Interfaces and Routes can be disabled.
Date and time : NTP time servers can be disabled.
Content vectoring : Routers and rule groups can be disabled.
ZAS: Routers can be disabled.
Heartbeat: Resources can be disabled.
IPSec VPN: Connections can be disabled.
Mail transport : Listen interfaces , Transport maps, Virtual maps, Sender address restrictions, and Recipient address restrictions can be disabled.
ZMC displays information in several places as tables of entries having various parameters or meta-information. Such filter windows are used to display Zorp logs, active connections, etc. The common properties and handling of these tables is summarized in this section.
Filter windows consist of three main parts: a filter bar, a table showing the entries, and a command bar to perform various actions on the selected entries. The actions available in the command bar are described at the documentation of the actual component using the filter window (e.g.: Log viewer).
Each entry of the table consist of a single row, with the various parameters displayed in labeled columns. The entries can be sorted by clicking on the column headers. The order of the columns can be modified by simply dragging the column header to its desired place. The columns to be displayed can be selected from the local menu of the column headers.
The entries can be filtered using the filter bar located above the table. The Filter type combobox specifies the column to search for the expression (string or regular expression) typed into the textbox. Clicking the icon executes the search command, while restores the full list. Selecting the Advanced option as Filter type opens up a dialog box where custom filter expressions can be created. The filter expressions can also be combined using the logical AND (if all criteria are met) and OR (if any criteria are met) operations. Custom filters can be run once (by clicking ), or can be bookmarked for repeated use ().
![]() |
Tip |
|---|---|
Clicking brings up the Advanced filter editor dialog with the latest advanced filter. |
Saved filters are also displayed in the Filter type combobox, and can be managed (deleted, renamed and edited) by clicking the button.
In some cases (for example in the Log viewer), advanced filters can be set to highlight the entries matching the filter expression. Just select the Color matching checkbox and set the color of the highlighting.
![]() |
Tip |
|---|---|
By assigning different colors to different bookmarked filters, the important elements of the table can be highlighted in several colors. |
Logs provides a simple interface for inspecting the log messages
collected on a host. It can be accessed from the Host component by
clicking on the
button.
![]() |
Tip |
|---|---|
Zorp can also create reports about the transferred traffic. See Section 8.11, Traffic reports for details. |
The log viewer interface consists of a filter bar to select the messages to be displayed, a list of the actual log entries (including meta-information such as timestamp, etc.), and a command bar.
The following information is displayed about the messages:
Timestamp: The exact date when the message was received.
Host: The host sending the message.
Program: The application sending the message (e.g.: cron, zms-engine, etc.).
Pid: Process ID of the application sending the message.
Message: The message itself.
The Log viewer window is a Filter window, thus various simple and advanced filtering expressions can be used to display only the required information. For details on the use and capabilities of Filter windows, see Section 5.3.10, Filtering list entries.
The command bar offers various operations to display and export the logs of the host. The following operations are available:
Jump to: Select a time interval and display the log messages received within this interval. To specify an interval, enter its starting date and time, and either the ending date, or the length of the interval. The name of the log file also has to be specified here.
Previous: Display the log messages of the previous period (using the same interval length).
Next: Display the log messages of the next period (using the same interval length).
Follow: Start the follow mode and monitor the log messages real-time. The list is updated every second.
Stop: Stop the follow mode.
Export: Export the currently displayed log messages into a file on the local machine running ZMC, using either simple text or CSV file format.
Type of messages: The rightmost combobox selects the type of
messages that are displayed (e.g.: zms , packet
filter, etc.)
Zorp and ZMS can be used in several network scenarios. In the most simple possible case there is only a single firewall host having both Zorp and ZMS service installed. In this case the communication between ZMS and the Zorp management agents takes place locally, using Unix domain sockets and no network communication setup is required. However, when the two functions, that is firewalling and management, are separated and installed on two different machines, the initial communication channel between the two needs manual setup. After successful setup all further communication is initiated automatically without manual interaction. This channel setup is a one-time action, though it must be accomplished separately for each new Zorp firewall under the authority of a ZMS host. This process is called bootstrapping and can be performed similarly to running a wizard. By the end of the bootstrapping process the new host is added to the host configuration database of the ZMS host machine.
The connection between ZMS and Zorp can be established in the following ways.
Using bootstrap
Manually via the Recovery Connection function
Fully manually
Bootstrapping a Zorp host is one of the most simple methods. Bootstrapping is similar to running a Wizard, that is, answering relatively simple questions and allowing the wizard to carry out the necessary configurations. Alternatively, the connection can be established manually. This method may especially be needed in troubleshooting scenarios with the help of the button. Hosts can be added on a fully manual way, selecting a site and then clicking the button in the main workspace. For more details, see the Zorp Reference Guide.
6.1.1. Procedure – Bootstrap a new host
Select the desired site in the configuration tree.
Click the button at the bottom of the screen which starts the wizard.
![]() |
Note |
|---|---|
The button next to can be used for manual host registration. |
Choose a host template.
The default templates are the following. New templates can be created later.
Cluster minimal template
for configuring clustered solutions.
Host minimal
for adding only the two default components, Management agents and Networking.
Host default
for automatically adding the NTP, Zorp and Packet Filter components to the configuration tree under the name of the newly added host.
The NTP, Zorp and Packet filter components are described in Chapter 11, Native services, Chapter 8, Creating Zorp policies, and Appendix 1, Packet Filtering respectively.
![]() |
Tip |
|---|---|
|
You are recommended to select the Host default template since it has some preconfigured component already configured for it. If you work with several Zorp hosts it may be comfortable to create predefined templates, saving repetitive work. For instructions on creating templates manually, see Chapter 8, Creating Zorp policies. |
Enter the details of the new host.
is the hostname is the name of your Zorp firewall.
is a special IP address (by default 1.2.3.4) used by the TPROXY component. You are recommended to leave it as it is if there is no particular reason to change it.
Component variable parameters refer to the name of the different components with the exception of the NTP server: you can specify a time server with which Zorp synchronizes its system time. Usually, but not necessarily it is an external time source. The up-to-date list of publicly available timeservers on the Internet can be found at the following address: http://support.ntp.org/bin/view/Servers/WebHome. For more information on NTP see Chapter 11, Native services.
Configure monitoring.
Host monitoring is described in Chapter 18, Monitoring hosts and servers in detail. By default, monitoring is not configured.
Enter the IP address and configuration port number of the transfer agent.
![]() |
Note |
|---|---|
|
Before you start, discover which network interface and IP address is reachable from your network location. Firewalls almost always have more than one of these. Ensure that the IP address you type in is reachable from your location and that packets will find their way back from the firewall – in other words all routing information is correctly configured. You can configure other interfaces of Zorp to be reachable for configuration purposes later. |
Type in IP address.
Refer to the Firewall's installation documentation for the IP address information.
Leave the Port field default.
Click keycap .
Create a certificate for SSL communication establishment
Firewalls are administered from a protected, inside interface and while this method is highly recommended, it is not necessarily required. All the configuration traffic is encrypted, using SSL.
The administrative connection is encrypted using SSL, which requires a certificate, especially the public key it contains. This certificate and the private key used for encryption/decryption are sent to the management agent on the firewall node that uses it to encrypt the session key it generates. For more information on SSL communication establishment see the chapter PKI.
This certificate is generated automatically but you must supply the following parameters for it.
Give a name for the certificate.
Enter a Common Name that describes you or your subdivision.
Alternatively, you can use the defaults supplied — the name of your Zorp firewall node.
Click the button.
![]() |
Tip |
|---|---|
There are no particular requirements for the two certificate name fields other than trivial string length and restricted character issues but it is advisable to supply a name that will later — when there will possibly be many certificates in use in your system — uniquely and easily identify this certificate as the one used for agent communication establishment. |
Enter ZMS Agent CA password.
Manually supplied passwords protect private keys against possible unauthorized access so that even if an attacker has read access to your hosts your private keys cannot be stolen (read). These passwords are used to encrypt the private keys and therefore they are never stored in unencrypted format at all. Certificates are issued by Certificate Authorities (CA) and it is actually the CA's private key that needs this protection. The certificate used by the management agents are issued by the ZMS_Agent_CA. You have to enter the password for this CA that you defined for this purpose when installing ZMS service. See also chapter PKI.
![]() |
Tip |
|---|---|
Take detailed logs of the installation process, including the bootstraps where all these passwords are recorded. |
Enter the one-time password.
The one-time password is the one that had to be given during the installation of zms-transfer-agent on the Zorp host. It is a one-time operation: to establish an SSL channel between the management agents of Zorp and the ZMS host, certificates are required. Yet there are no certificates to use so you have to give the zms-transfer-agent on Zorp a certificate to use for communication channel buildup purposes. This password is used to establish a preliminary encrypted communication channel between Zorp and the ZMS host, on which channel the certificate can be sent. All communication among the parties is done using SSL.
Click the final button if all password phases were successful to build up the connection.
A standalone text informs you what is actually happening behind the scenes. Save the output with the button so that you or a support person can analyze it later, if needed. The text window should look similar to this.
![]() |
Note |
|---|---|
If anything goes wrong the wizard takes you back to the window you made a mistake in, giving a chance to correct it. |
After the bootstrap process finished successfully the new host is ready to be configured.
When you start up ZMC and select a host in the configuration tree, the connection with the host is automatically established. If, for some reason it breaks, you have to reconnect the host manually.
6.2.1. Procedure – Reconnect ZMS to a host
Click in the menu.
This window accurately shows that it is not the Zorp host that directly communicates with ZMS, but the management agents installed on it.
Agents are responsible for reporting firewall configuration and related information to the ZMS station and are also responsible for accepting configuration commands and executing them. Communication between the agents and the ZMS station uses TCP port 1311.
There are two different agents: the zms-transfer-agent is responsible for transporting and executing the configuration commands while the zms-monitor-agent does all the monitoring on the firewall node. The transfer agent must be present on all firewall nodes to be managed with ZMS. By default, the ZMS station establishes the communication channel with the agents, but the agents can also be configured to start the communication if required. This latter configuration might especially be useful for the monitor agents.
Connect and/or disconnect the appropriate agents with the corresponding buttons.
ZMS is a complex central management facility for Zorp firewalls. Besides firewall–centric configuration settings, such as firewall policies, packet filter rules, it allows for the configuration of several basic parts of ZorpOS, the operating system of Zorp. In fact, one of the design goals of ZMS was to eliminate the need for command–line configuration of ZorpOS and Zorp as much as possible. Therefore tools are provided to perform basic, operating system–level configuration tasks.
The Networking component that is present by default for each host in the configuration tree serves this purpose by providing access to all the relevant network–related configuration areas of the host's operating system. The possible settings in the Networking component are mostly related to ordinary network configuration issues and there are hardly any variables directly related to firewalling functions.
The main window of the Networking component is divided into the following four tabs.
Interfaces tab for generic interface configurations
Routing tab for managing network routes
Naming tab for configuring name resolution
Resolving tab for setting client-side DNS resolution
The configuration of network interfaces can be performed on the Interfaces tab of the ZMC component. These tasks fall into the following categories.
General and special interface configuration features are available for all ZorpOS hosts, while spoof protection is intended for Zorp gateways or other hosts that have an active packet filter installed.
The Interfaces tab of the Networking ZMC component lists the network interfaces available on the host, along with their type, IP addresses, and connected zones.
![]() |
Tip |
|---|---|
|
If you do not see one or more physical interfaces of your host listed here, it is most likely because they were not configured before bootstrapping took place. The bootstrapping process not only establishes the connection between ZMS and the host (management agents on it), but it also queries host configuration and inserts this information into the ZMS database. When selecting a host entry in ZMC, the information is read from the ZMS database, and not from the host directly. Therefore, ZMC does not see parameters that were unavailable for ZMS during bootstrapping. To correct this situation, simply define the missing interface(s): click and configure them as required. |
7.1.1.1. Procedure – Configuring a new interface
To define a new interface, complete the following steps.
Interfaces tab of the Networking ZMC component.
Click on , enter a name for the interface (e.g.,
eth0), and select its type.
Configure the parameters of the interface: enter the IP address, netmask, and other data as required. The list of type-specific parameters depend on the type of interface you are configuring.
![]() |
Warning |
|---|---|
As with all firewalls, you can specify only one gateway address in the network configuration and only for a single interface; the gateway box for all other interfaces must be empty. |
![]() |
Note |
|---|---|
|
If the configuration information you enter in ZMC is not the same as the current settings on the host, the settings of the host are overwritten during the next action. For static interfaces, that is, regular Ethernet interfaces give the
|
If you change interface settings, restart the modified network interface to activate the changes. Additionally, it may be required to temporarily stop an interface for security or maintenance reasons with the button under the network interface listing.
![]() |
Note |
|---|---|
The interfaces are controlled individually. |
In case of Zorp hosts there is one special interface in the list:
dummy0. This interface is required by the TPROXY kernel module. For
more information, see Section 8.8, Proxy classes. The unique IP address of
dummy0 is $autobind-ip$ which refers to a system
variable (actually to the 1.2.3.4 IP address). For more information
on variables, see Section 5.3.8, Links and variables.
Dynamic interfaces are interfaces that are either created dynamically, or obtain IP
configuration information dynamically from a designated server (e.g.:
dhcp, bootp, ppp).
Since their IP configuration is not known when Zorp boots up (and may be different at each
booting), the services using these interfaces cannot include the IP address of the
interface in the definition of the listener related to the service. To overcome this
problem, Zorp can bind to interfaces instead of IP addresses. Dynamic interfaces are
referenced by their name in the listener definitions. ZorpOS automatically notifies the
running Zorp instances when the IP configuration information of the interface is received
from the server. IP address changes are also automatically handled within Zorp. For more
information on the configuration of listeners see Section 8.7, Zorp dispatchers.
![]() |
Example 7.1. Referencing static and dynamic interfaces in listener definitions |
|---|---|
|
In some cases it may be useful to fine-tune the network for special purposes. For example for Virtual Local Area Network (VLAN) technology: many organizations use it for security and network traffic separation purposes. VLANs are logically separated components of physical networks. Logical separation means that although they are on the same physical network (otherwise known as broadcast domain) hosts on separate VLANs cannot communicate with each other unless a router is set up that provides the interconnection. Routing functions for VLAN, and VLAN creation in general, are typically performed by Layer 3 Ethernet switches. Provided that VLAN–capable network cards are installed in the machine, ZorpOS fully supports VLANs and ZMS provides a control for configuring it.
VLAN interfaces are named in the following manner:
ethx.n where
is the number of the physical interface
is the ID of the VLAN. The ID of the VLAN is usually a number (e.g.,
0 for the first VLAN of the interface, 1
for the second, etc.)
![]() |
Note |
|---|---|
|
If you define an interface as a VLAN interface, it cannot operate as a real, physical interface at the same time. For example, the |
7.1.2.1. Procedure – Creating a VLAN interface
To create a VLAN interface, complete the following steps.
Every VLAN interface must be connected to a physical interface. If not already configured, configure the physical interface that will be used as the VLAN interface. See Section 7.1.1, General interface configuration for details.
![]() |
Warning |
|---|---|
If you define an interface as a VLAN interface, it cannot operate as a real, physical interface at the same time. |
Click to create a new interface.
Set the Type of the interface. The type of the VLAN interface and the physical interface can be different.
Enter a name for the VLAN interface and click . The name
must include the name of the physical interface, the period character, and a number that
identifies the VLAN interface (because a physical interface can have several VLAN
interfaces). For example, eth1.0.
ZMC creates the new interface and automatically selects the VLAN option and the sets the parent interface of the VLAN.
Configure other options of the interface (e.g., connected zones) as needed.
To activate the changes, click the and icons. Then select the physical interface of the VLAN, click the icon, and the interface.
![]() |
Warning |
|---|---|
Restarting the interface terminates all ongoing connections of the interface. |
Using alias interfaces allows you to configure multiple IP addresses to a physical device. Alias interfaces are named in the following manner:
ethx:n where
is the name of the corresponding physical or VLAN interface
is the ID of the alias interface. The ID is usually a number (e.g.,
0 for the first alias of the interface,
1 for the second, etc.), but it be a more informative name as
well.
An alias can be defined for existing physical and VLAN interfaces.
7.1.2.2. Procedure – Creating an alias interface
To create an alias interface, complete the following steps.
Every alias interface must be connected to a physical or a VLAN interface. If not already configured, configure this interface.
Click to create a new interface.
Set the Type of the interface. The type of the alias interface and the physical interface can be different.
Enter a name for the alias interface and click . The name
must include the name of the physical or VLAN interface, the colon character, and the a
number or name that identifies the alias interface (because an interface can have
several alias interfaces). For example, eth1:0.
ZMC creates the new interface and automatically selects the alias option and the sets the parent interface of the alias.
Configure other options of the interface (e.g., connected zones) as needed.
To activate the changes, click the and icons. Then select the parent interface of the alias, click the icon, and the interface.
![]() |
Warning |
|---|---|
Restarting the interface terminates all ongoing connections of the interface. |
Spoof protection means that the packet filter module of a firewall checks to ensure that packets arriving on an interface have source IP addresses that are legal in networks reachable via that given interface and accepts only those packages that match this criterion.
For example, if eth0 connects to the Intranet(10.0.0./8) and it
is spoof protected, the firewall does not accept datagrams on this interface with source IP
addresses other than the 10.0.0.0/8 range. It does not accept datagrams with source IP
address from the 10.0.0.0/8 range on interfaces other than eth0
either.
7.1.3.1. Procedure – Setting spoof protection
Select the network interface and click the ... button next to the field.
Select the zones the configured interface is connected to either directly or indirectly via routers.
![]() |
Note |
|---|---|
The Zone tree in the dialog window is organized IP addresses, starting from the
most generic (0.0.0.0/0) to the most specific. There is an implicit inheritance in the
Connects specification: if the 10.0.0.0/8 address ranges is specified to connect to
|
Select the Spoof protection option.
![]() |
Note |
|---|---|
The Packet Filter ruleset must be regenerated after modifying any interface settings. It is not done automatically. |
For further details on zones, see Section 8.4, Zones. For more information on Spoof control in relation with packet filter rules, see section Section 1.4.3.3, Spoof protection.
The bottom part of the Interfaces tab can be used to specify activation scripts, and various other parameters of the network interfaces. The following options can be set:
Interface activation scripts may be useful for scenarios where special procedures are needed to initialize networking.
For example, changing the Media Access Control (MAC) address of a network card before bringing it up can be done with a pre-up script. Such scripts should also be used for configuring bridge interfaces.
The following types of activation scripts can be set:
pre-up scripts are executed before the interface is activated.
up scripts activate the interface.
post-up scripts are executed after the interface is activated.
pre-down scripts are executed before the interface is deactivated.
down scripts deactivate the interface.
post-down scripts are executed after the interface is deactivated.
7.1.4.1.1. Procedure – Creating interface activation scripts
To create an interface activation script for an interface, complete the following steps.
Navigate to the Interfaces tab of the Networking ZMC component and select the interface to configure.
Click to add a new option to the interface.
Select the type of the script from the Option field.
(pre-up, up,
post-up, pre-down,
down, post-down).
Enter the command to execute in the script into the
Attributes field. Use full path name, e.g.,
/sbin/ifdown.
To execute multiple commands, repeat Steps 2-4.
Use the arrow buttons below the list of options to set the order of commands.
![]() |
Tip |
|---|---|
If you have to use complex scripts, create a script file on the Zorp host using a text editor, and add an option to execute it when needed. |
To simplify the management of services that are available from multiple zones and interfaces, interfaces can be grouped. Interfaces belonging to an interface group can be controlled together: the ifup and ifdown commands support interface groups as well. Dispatchers can listen not only on a single IP address or an interface, but also on interface groups (see Chapter 8, Creating Zorp policies for details on zones, services, and dispatchers).
7.1.4.2.1. Procedure – Creating interface groups
Complete the following steps to assign interfaces to an interface group.
Navigate to the Interfaces tab of the Networking ZMC component.
Select the interface to add to the group from the lost of interfaces.
Click the button located under the list of options.
Select group from the Option
combobox.
Groups are identified by a number between 1–255.
To assign the interface to a group, enter a number into the
Attribute field.
Click .
Repeat Steps 2–5 to add other interfaces to the group.
Commit and upload your changes. Restart the interface to activate the changes
The following miscellaneous options can be set for a network interface.
![]() |
Note |
|---|---|
It is rarely required to use these options in common scenarios. Modify them only if you know exactly what you are doing. |
hwaddress: Sets the MAC address of the interface.
metric: Sets the metric used by the interface.
mtu: Sets the Maximum Transfer Unit (MTU) of the inter‐ face.
media: Sets the media type of the interface.
ttl: Sets the time-to-live (TTL) parameter of the interface.
7.1.4.3.1. Procedure – Configuring interface parameter
To configure an interface parameter, complete the following steps.
Navigate to the Interfaces tab of the Networking ZMC component and select the interface to configure.
Click to add a new option to the interface.
Select the parameter you want to set from the Option field.
Enter the value of the parameter into the Attributes field.
Commit and upload your changes. Restart the interface to activate the changes
The state of the configured interfaces is indicated by leds of different colors before the name of the interface (Green — Up, Red — Down, Blue — Unknown). The state of the interface is automatically updated periodically; its frequency can be set in the Program status refresh section of the General tab under the / menu. Status update can also requested manually from the local menu of the interface (right click and select ). Hovering the mouse over an interface displays a tooltip with status information and detailed statistics about the interface. The following status information is displayed:
State: Status of the interface. Possible values:
Up, Down,
Unknown.
qdisc: Queuing discipline. See the Traffic control Manual pages (man tc) for details.
flags: Flags applicable to the interface. Possible values:
UP, BROADCAST,
MULTICAST, PROMISC,
NOARP, ALLMULTI,
LOOPBACK.
mtu: Maximum transfer unit: the maximum size (in bytes) of a packet allowed to be sent from the interface.
The statistics about the traffic handled by the interface is divided into Received and Sent sections, relevant for the received/sent packets, respectively.
Errors: Number of errors encountered.
Bytes: Amount of data received.
Packets: Number of packets received.
Mcast: Number of received multicast packets.
Dropped: Number of dropped packets.
Overruns: Number of overrruns. Receiver overruns usually occur when packets come in faster than the kernel can service the last interrupt.
Collisions: Number of collisions encountered.
Bytes: Amount of data sent.
Packets: Number of packets sent.
Errors: Number of errors encountered.
Dropped: Number of dropped packets.
Carrier: The number of carrier losses detected by the device driver. Carrier losses are usually the sign of physical errors on the network.
Variables on the Naming tab directly correspond to the contents of
/etc/hosts and /etc/networks files. Their use
is mostly optional – name resolution is faster if most important name – IP address pairs are
listed in /etc/hosts. A correctly configured resolver can provide the
same service.
![]() |
Note |
|---|---|
If you intend to use the Postfix native proxy on the Zorp host, you exceptionally have
to supply the |
The client-side of DNS name resolution information can be configured on the Resolver tab.
![]() |
Note |
|---|---|
The Bind native proxy of Zorp cannot be configured here. For information, see Chapter 11, Native services. |
In DNS terminology, the client initiating a name resolution query is called a resolver. For details about configuring a resolver correctly, refer to a good DNS documentation, see Appendix 3, Further readings.
7.3.1. Procedure – Configure name resolution
List the nameservers to be used by your host in the right pane.
Set a priority order among the nameservers. The first one on the list is queried first.
Set up domain search order in the left pane.
Use the buttons with triangles on the right.
This information is used when you issue a name query for a hostname but without supplying the domain name parts: for example, telnet myserver. In this case the resolver automatically tries to append domain suffices to the hostname in the order you specify, before sending queries to nameservers.
In the example above, this would be example.com and
then if the query is unsuccessful
myserver.example.com.
OPTION
Define the preferred interface in the Sortlist.
The sortlist directive specifies the preferred interface you wish to communicate on when, as a result of a query, you receive more than one IP address for a given host. The value of Sortlist can be a network IP address or a host IP address/subnet mask pair, where subnet mask is in the classic dotted decimal format and not in CIDR notation.
![]() |
Tip |
|---|---|
|
The optimization using the Sortlist might be useful for firewalls with many interfaces installed or in the following special network setup. The firewall is connected to the Internet with two interfaces: one for a broadband, primary connection and another, lower–bandwidth backup connection through a different ISP. If you want to reach a server on the Internet and the DNS query returns two IP addresses for the same server. From its routing table your firewall deduces that both IP addresses are reachable, but by default it uses the IP address that was listed first in the DNS response, even if that IP address is reachable via the – slower — backup line. To avoid this situation, you can explicitly tell your resolver with the Sortlist feature that whenever possible, it must prefer the interface that connects to the higher–bandwidth primary line. |
Note that sortlist is just a preference and not an exclusive setting: if the targeted server cannot be reached via the interface designated by the sortlist parameter, the other interface(s) and IP addresses are tried.
If a packet has to be delivered to a remote network, Zorp consults the routing table to determine the path it should be sent. If there is no information in the routing table then the packet is sent to the default gateway. For maintaining and managing the routing table Zorp offers a simple yet effective user interface on the Routing tab of the ZMC component. It can be used to define static routes to specific hosts or networks via a selected interface.
The Routing tab contains the following elements:
A list of routing table entries in the middle of the panel.
A filter bar on the top for searching and filtering the entries.
A control bar on the bottom for managing the entries of the list and for activating the modifications of the routing table on the Zorp firewall hosts.
A route has the following parameters:
Address: IP address of the network.
Netmask: Netmask of the network.
![]() |
Note |
|---|---|
The IP address and netmask parameters are displayed in the Network column of the routing entries list. |
Gateway: IP address of the gateway to be used for transmitting the packages.
Interface: The Ethernet interface to be used for transmitting the packages. This parameter must be selected from the combobox listing the configured interfaces.
Metric: An optional parameter to define a metric for the route. The
metric is an integer from the 0 – 32766 range.
Description: Notes describing what this entry is used for.
The
above parameters are interpreted the following way: messages sent to the
Address/Netmask network should be delivered via
Gateway using Interface.
New entries into the routing table can be added by clicking the button of the control bar; existing entries can be modified by clicking . The updated routing tables take effect only after the new configuration is uploaded to the host, and the routing tables are reloaded using the buttons of the control bar.
The list of routing table entries can be sorted by all of its parameters (network, gateway, etc.) by clicking on the header of respective column. By default, the list is displayed according to the general listing policy of the routing tables, i.e. the networks connecting via a gateway are listed after the directly connected networks.
The list can be filtered using the filter bar above the list. Type the search pattern into the textbox, specify the elements to be searched using the combobox on the left, and click . The list will only display the routes matching the search criteria. Click to return to the full list.
Routes can be temporarily disabled by right-clicking the selected route and selecting from the appearing local menu.
![]() |
Note |
|---|---|
The route becomes disabled only after the routing table is reloaded. |
When the Zorp host is administered via a terminal, the routes have to be entered
manually by editing the /etc/network/static-routes configuration file.
Each line of this file corresponds to a route, and has the following format:
interface_name to address/netmask via
gateway metric [metric]
For the modifications to take effect, the routing tables have to be reloaded by issuing the /usr/lib/zms-transfer-agent/zms-routing params="reload" command.
This chapter describes how to allow traffic to pass the Zorp firewall. It gives detailed explanation of the many features and parameters of Zorp.
This section provides an overview of how Zorp handles incoming connections, and the task and purpose of the different Zorp components.
Zorp permits and examines connections between zones. Zones are groups of IP networks. When a client tries to connect a server, a dispatcher receives the connection request. The dispatcher selects a service to handle the connection request based on the client's zone, the target port, and the server's zone. The service determines what happens with the connection, including the following:
The protocol permitted in the traffic. Zorp uses proxy classes to verify the type of traffic in the connection, and to ensure that the traffic conforms to the requirements of the protocol — e.g., downloading a web page must conform to the HTTP standards.
The address of the destination server. Zorp determines the IP address of the destination server using a router. Routers can also modify the target address if needed.
The content of the traffic. Zorp can modify protocol elements, and perform content vectoring. See Chapter 16, Virus and content filtering using ZCV for details.
How to connect to the server. Zorp chainers can connect to a backup server if the original is unreachable, or perform loadbalancing between server clusters.
Who can access the service. Zorp can authenticate and authorize the client to verify the client's identity and privileges. See Chapter 17, Connection authentication and authorization for details.
The operations and policies configured in the service definition are performed by a Zorp instance.
The Zorp Service Wizard is a tool that allows you to create the policies required to allow traffic through Zorp. It guides you through the process of defining services, dispatchers, and other components, offering simplified choices for the necessary service parameters. These service parameters can later be edited manually with ZMC.
Use the Service Wizard to create new services, and customize them manually if needed.
![]() |
Note |
|---|---|
The use of this wizard is optional and it does not interfere with neither differs from other, manually created services, zones, instances, and so on. |
Complete the following steps to create a new service.
8.2.1. Procedure – Creating new services with the Service Wizard
Navigate to the Zorp ZMC component and start the Service Wizard.
Select the service type you want to configure. Application-level services inspect the traffic on the protocol (Layer 7 in the OSI model) level. Packet-filter services simply forward the traffic on the packet level. For the highest available security, use application-level inspection whenever possible. See Section 8.6, Zorp services for details on application-level and packet-filter services.
![]() |
Note |
|---|---|
Application-level and packet-filter services are handled and configured identically in ZMC. From the management aspect, the only difference is that packet-filter services have fewer parameters, e.g., no proxy class, etc. |
Select the application-level proxy to inspect the traffic. Only traffic corresponding to the selected protocol and the settings of the proxy class can pass the firewall.
Preconfigured services contain an appropriate proxy class and are organized by functional areas: there are categories like Database, File transfer, etc. Short descriptions are also available.
If none of these preconfigured services are appropriate for you, select an individual proxy class as well. Scroll down this window and at the bottom click All proxies. Select a proxy class to be used in your service definition. See Section 8.8, Proxy classes for details on proxy classes.
This step is not available for packet-filter services.
Select the Source zones, from where the clients can access the service. Select the Destination zones. Only the servers located in the selected destination zones can be accessed using the service. At least one source zone and one destination zone must be selected.
Edit zones with the button or find Zones with the button if needed. See Section 8.4, Zones for details on zones.
Configure a Dispatcher.
For packet-filter services, provide the port number targeted by the client requests in the Port field.
![]() |
Note |
|---|---|
The Interface field is automatically filled based on the Zone information provided in the previous step. The port field is filled based on the selected protocol. |
Modify these setting only if needed. See Section 8.7, Zorp dispatchers for details on dispatchers.
Configure a router.
Modify these setting only if needed. See Section 8.6.2, Routing — selecting routers and chainers for details.
![]() |
Note |
|---|---|
The Use client address as source checkbox causes original client source IP addresses to be used in traffic leaving the firewall. In situations where Internet access has to be configured for internal clients, this is usually not possible, because internal clients are probably configured with private, non-Internet-routable IP addresses. |
Enter a name for the service and select an instance that carries the service.
A suggested name is provided automatically.
The tasks of the Service Wizard end here. At this point changes the Wizard made are neither uploaded nor committed. Perform these steps manually.
There are two methods to quickly find an existing service: the button on the Interfaces tab, and the Report Generator. To search for a service using a keyword or another parameter, complete the following steps.
8.3.1. Procedure – Finding services
Navigate to the Instances tab of the Zorp ZMC component.
Click the button located under the instance list.
Enter the search terms into the opening dialog. You can search for the following parameters:
Name: Enter the name of the service, or a part of the name. You can also use wildcards and regular expressions.
Proxy type: Select the proxy type from the combobox. Leave the box empty when searching for packet-filter services.
Bind to: Select the IP address, interface name, or interface group used in the service.
Port: Enter the port number used in the service.
Description: Enter a part of the description.
Uncheck the Case sensitive checkbox to ignore the difference between lowercase and uppercase letters in the service name.
Click . The services matching your search criteria are displayed in the next window.
Select a service from the results window and click to view the parameters of the service.
The Report generator is a tool to quickly find
services between selected zones. Essentially, it shows a summary view of your zones,
instances and services, displaying the traffic allowed from a zone to another one (outbound
and inbound) and the instance serving that traffic. It can also create reports about the
zone, service, and access structure of the managed sites. The Report generator can be accessed from the button bar of the Zorp ZMC component by clicking
.
Selecting a source and a destination zone immediately displays the traffic allowed between the zones, or more exactly, what services are defined between those zones. Multiple zones can also be selected. If the Include inherited services checkbox is not selected, only the services directly configured between the selected zones are displayed. (I.e. if this checkbox is selected, the services configured for the parents of the selected zones are also included in the search result. In other words, this checkbox causes inherited services to be shown for the searched zones.)
![]() |
Tip |
|---|---|
The Report generator can also be used to check if the direction of a traffic is configured correctly for a service. |
The services found between the zones are displayed as a table in the lower section of the Report generator window. The parameters of the services that are displayed can be selected by right-clicking the header of the table and selecting from the context menu. All important parameters can be displayed.
![]() |
Tip |
|---|---|
The configuration of a service can be quickly accessed by right-clicking the service and slecting . |
Click on to save the results of a search. The format of the report can be selected from the Report service format combobox. The following formats are available:
Service report: Contains the list of the services found between the selected zones, including all parameters of the services. Available in HTML and CSV (comma separated values) format.
Zone report: Contains the list of the selected zones, including all their parameters. Available in HTML and CSV (comma separated values) format.
Access control matrix: Contains the Service and Zone reports, as well as a table of the selected source and destination zones.
![]() |
Tip |
|---|---|
The Report generator is especially useful for large sites with complex Zorp configurations, having lots of zones, dispatchers, and services. |
Zones describe and map the networking environment on the IP level. IP addresses are grouped into zones; the access policies of Zorp operate on these zones. Zones specify segments of the network from which traffic can be received (source) or sent to (destination) through the firewall. Zones in Zorp are groups of IP networks, subnets and individual IP addresses. The actual implementation of a zone hierarchy depends on the network environment, and the placement and role of Zorp firewalls, the security policy, etc.
The Internet zone which covers all possible IP addresses is defined on every site by default. If an IP address is not included in any user-defined zones, it belongs to the Internet zone. Zorp policies permit traffic between two or more zones, so at least another zone — the intranet — must be created. Usually a special zone called demilitarized zone (DMZ) is defined for servers available from the Internet.
Zones in Zorp can have a hierarchy, with a zone containing many subzones that may have
there own subzones, and so on. From these zones an tree hierarchy can be constructed. This
hierarchy is purely administrative and independent from the IP addresses defined in the zones
themselves: for example, a zone that contains the 192.168.7.0/24 subnet
can have a subzone with IP addresses from the 10.0.0.0/8 range.
A network can belong only to a single zone, because otherwise the position of IP addresses in the network would be ambiguous.
The zone hierarchy is independent from the subnetting practices of the company or the physical layout of the network, and can follow arbitrary logic.
![]() |
Note |
|---|---|
It is recommended to follow the logic of the network implementation when defining zones, because this approach leads to the most flexible firewall administration. Plan and document the zone hierarchy thoroughly and keep it up-to-date. An effective and usable zone topology is essential for successful Zorp administration. |
When you first start up ZMC you have one zone defined, the Internet. It contains one
network, the 0.0.0.0 with the 0 subnet mask.
Zorp uses CIDR notation for subnetting. This special "`network"' can mean any network, so
all machines that have IP addresses belong to this zone. You cannot delete this zone, as it
is needed for the proper operation of Zorp.
The Internet zone is typically used in service definitions where one side of the communication channel cannot be defined more exactly.
![]() |
Example 8.1. Using the Internet zone |
|---|---|
The Internet zone identifies all external networks. To allow the internal users to
visit all web pages, simply set the destination zone of the HTTP service to
|
Zones are managed on the Site component in ZMC. The right side of the main workspace displays the zones defined on the site, their descriptions, and also indicates if a zone is an umbrella zone. IP networks that belong to the selected zone are displayed on the left side of the workspace.
![]() |
Note |
|---|---|
The Zorp ZMC component has a shortcut in its icon bar to the zone editor. The zone hierarchy applies to all firewalls of the site, so carefully consider every modification and its possible side-effect. |
Use the control buttons to create, delete, or edit the zone definitions and the IP networks. Use the arrow icons to organize the zones into a hierarchy (see Section 8.4.3, Zone hierarchies for details).
To create a new zone on the site, complete the following steps.
8.4.2.1. Procedure – Creating new zones
Select the site from the configuration tree and click .
Enter a name for the zone in the displayed window.
![]() |
Tip |
|---|---|
Use descriptive names, because even a modest network can have many zones, that
become difficult to maintain without a consistent naming convention. Zone names may
refer to the physical location of the network or the department using the zone (e.g,
|
Click New in the Networks pane to add an IP network to the zone. Fill the Network and Netmask fields, and click . Repeat this step to add other networks to the zone.
![]() |
Note |
|---|---|
The new zone has effect only if used in a service definition. |
![]() |
Example 8.2. Subnetting |
|---|---|
|
Suppose you have the following IP address range to put into a zone: 1.2.50.0 – 1.2.70.255. You can either define 21 IP subnets with /24 mask or you can define six subnets in the following manner: 1.2.50.0/23, 1.2.52.0/22, 1.2.56.0/21, 1.2.64.0/22, 1.2.68.0/23, 1.2.70.0/24. Whether you have a switched/routed network or you actually use /24 subnets is irrelevant from the zone's (Zorp's) point of view. As long as it encounters an IP address from the range 1.2.50.0 – 1.2.70.255, it will consider it a member of the given zone. Furthermore, if you define Zone A with the IP network 10.0.0.0/8 and Zone B consisting of the network 10.0.1.0/24 and the machine, Computer C with the IP address of 10.0.1.100/32, from an IP addressing point of view, belongs to both subnets, but the Zorp rule applied in this and similar cases is that the machine is always considered to belong to the network (and thus the zone) more specific in CIDR terms. In this example it is Zone B. |
Zones can be organized into a tree, much like the directories of a file system. Define a topmost zone and with many subzones, each for administratively different parts of your networks. A zone and its subzone have parent-child relationship: child zones automatically inherit all properties and settings of their parents. For example, Zone A is the parent zone of Zone B, and all clients in Zone A may browse the web via HTTP. Zone B inherits this setting, so all clients of Zone B have unrestricted HTTP access.
Zones can be reorganized as needed.
![]() |
Note |
|---|---|
Changing parent-child relations also changes the inheritance chain — which might cause unexpected results on your firewall policies. Make sure to keep up-to-date documentation of your firewall configuration. |
To organize zones into a hierarchy, complete the following steps.
8.4.3.1. Procedure – Organizing zones into a hierarchy
Select the site from the configuration tree in ZMC.
Using the up and down arrows located next to the button, move the child zone below its parent.
Click the right arrow to make the selected zone a children of the zone above it.
Commit the changes to the site.
![]() |
Note |
|---|---|
Zone definitions are site-wide, so modifications are effective on every firewall of the site. |
Select all hosts of the site and upload the configuration.
This step is required because changes in the zone hierarchy must be uploaded to all firewall nodes.
Select all hosts of the site, click the icon of the icon bar and reload the configuration.
To remove a child zone from the hierarchy, select the zone and click the left arrow.
To find a zone or a subnet, select the site in the configuration tree and click the button.
You can search for the name of the zone, or for the IP network it contains. When searching for IP networks, the only the most specific zone containing the searched IP is returned. If an IP address belongs to two different zones, the straitest match returns the most specific zone.
![]() |
Example 8.3. Finding IP networks |
|---|---|
|
Suppose there are three zones configured: This approach is used in the service definitions as well: when a client sends a
connection request, Zorp looks for the most specific zone containing the IP address of the
client. Suppose that the clients in |
![]() |
Tip |
|---|---|
The tool is especially useful in large-scale deployments with complex zone and subnet structure. |
Umbrella zones do not inherit the properties of their parent zones. The umbrella zone becomes a new inheritance root; child zones of the umbrella zone do inherit the properties of the umbrella zone.
![]() |
Warning |
|---|---|
Starting from Zorp 3.2, the umbrella property of a zone applies to the entire site. In earlier versions of Zorp the umbrella applied only to the host it was set. |
To set a zone to umbrella zone, complete the following steps.
8.4.5.1. Procedure – Setting the umbrella property for a zone
Select the site from the configuration tree in ZMC.
Select the zone that should not inherit the properties of its parents.
Select the Umbrella checkbox in the row of the zone.
Commit the changes to the site.
![]() |
Note |
|---|---|
Zone definitions are site-wide, so modifications are effective on every firewall of the site. |
Select all hosts of the site and upload the configuration.
Select all hosts of the site, click the icon of the icon bar and reload the configuration.
![]() |
Example 8.4. Umbrella zones and inheritance |
|---|---|
|
The following figure illustrates how rights are inherited in a zone hierarchy. A zone has the following properties:
|
Instances of Zorp are groups of services that can be controlled together. A Zorp firewall can run multiple instances of the Zorp firewall process. The main benefits of multiple firewall instances are the following:
Administration
A typical firewall handles many types of traffic, many different protocols. These protocols might have different administrative requirements. Inbound traffic is usually handled differently from outbound traffic. For these reasons, using multiple firewall instances can make administration more transparent.
Availability
If an error (e.g., misconfiguration) occurs and the firewall instance stops responding, no traffic can pass the firewall. However, an error usually affects a single instance; the other ones are still functional, so only the traffic handled by the crashed instance stops. Instances can be controlled (started, restarted, stopped) individually from each other. This is important, because stopping or restarting an instance stops all traffic handled by the instance.
Consider the following example. A firewall uses two instances:
Instance_A for all e-mail related traffic (the POP3, IMAP, and the
SMTP protocols) and Instance_B for everything else (HTTP, etc.). If
Instance_A stops because of an error, or is stopped by the
administrator, no e-mails can be sent or received. However, all other network traffic is
working.
Performance
Separate firewall instances have separate processes and separate sets of threads, significantly increasing the performance on multiprocessor systems (SMP or HyperThreading).
Thread model
All the connections inspected by a proxy requires a new thread within a Zorp instance. A process can only start 1024 threads (a limitation of the Linux kernel, Linux 2.4, libc2.2); if more than 1024 concurrent connections have to pass the firewall, additional instances are required.
Logging
Log settings are effective on the instance level; different instances can log in differently. For example, if higher than average logging level is required for a type of traffic, it might worth to create an instance for this traffic and customize logging only for this instance.
![]() |
Note |
|---|---|
|
Although creating instances is beneficial, the number of instances that can run on a system is limited. Each instance is a separate process and requires its own space in the system memory — quickly consuming the limited physical resources of the computer. More instances do not necessarily make configuration tasks easier, and complex configuration increases the chance of human errors. Keep instance number relatively low unless you have a solid reason to use many instances. |
Instances usually handle traffic based on the protocol used by the traffic, the direction of the traffic, or a special characteristic of the traffic (e.g.: requires authentication). It is common practice to define an instance for all inbound traffic that handles all services accessible from the Internet, and another one for all traffic that the clients of intranet are allowed to use. Consider creating a separate instance for:
special services, e.g., mission-critical traffic;
traffic accessing critical locations, e.g., your servers;
traffic that requires outband authentication.
Instances can be managed in the upper section of the Instances tab of the Zorp ZMC component.
The table displays the following information of each instance:
Instance: Name and state of the instance. The colored led shows the state of the instance: Green – Running; Red – Stopped; Blue – Unknown.
Services: The services handled by the instance.
Dispatchers: The dispatchers used by the services of the instance.
Description: A description of the instance, e.g., the type of traffic it handles.
Hover the mouse over an instance to display a tooltip with detailed information, including the number of threads running in the instance.
Use the button bar below the instances table to manage and configure the instances.
New: Create a new instance. On a freshly installed Zorp, there are no instances — you have to create one first. See Section 8.5.1.1, Creating instances for details.
Delete: Remove an instance.
![]() |
Warning |
|---|---|
Deleting an instance makes the services handled by the instance unaccessible. |
Edit: Rename an instance or change its description.
Parameters: Modify various parameters of the instance. See Section 8.5.1.3, Instance parameters — general for details.
Actions: Displays a drop-down menu to control the instances (e.g., reload, restart, stop, or start an instance). These functions are needed after modifying the configuration of an instance. sets the verbosity of logging. displays the connections currently handled by the instance (see Section 8.10, Monitoring active connections for details).
![]() |
Tip |
|---|---|
Use the Shift key to select and control multiple instances. |
Arrow buttons: Used to organize instances into a hierarchy. See Section 8.5.2, Instance hierarchies for details.
To create a new instance on a Zorp firewall host, complete the following steps:
8.5.1.1.1. Procedure – Creating a new instance
Navigate to the Instances tab of the Zorp ZMC component on the Zorp host.
![]() |
Note |
|---|---|
If the Zorp and the Packet Filter components are not available on the selected host, you have to create them first. See Procedure 5.2.1.3.1, Adding new configuration components to host for details. |
Click the button located below the Instances table.
Enter a name for the new instance.
![]() |
Note |
|---|---|
Use informative names containing information about the direction and type of
the traffic handled by the instance, e.g., |
Describe the purpose of the instance in the Description field.
Click .
Instances have many parameters that can be customized by completing the following steps:
8.5.1.2.1. Procedure – Configuring instances
Navigate to the Instances tab of the Zorp ZMC component on the Zorp host.
Select an instance and click . The Edit Instance Parameters window is displayed.
Instance parameters are grouped to four tabs. See Section 8.5.1.3, Instance parameters — general for details on the available parameters.
To modify the configuration of all instances on the site, click and adjust the settings as needed. These settings will be effective for every instance of your Zorp firewalls.
To modify the configuration of a single instance, unselect the Use default parameters checkbox and adjust the settings as needed.
Commit and upload the changes.
To activate the changes, use the button to restart or reload the instance.
Instance parameters can be set on the tabs of the Edit Instance Parameters window. The General tab has the following parameters:
Thread limit: The number of threads the instance can start. Set Thread limit according to the anticipated number of concurrent connections. Most of the active client requests requires its own thread. If the Thread limit is too low, the clients will experience delays and refused connection attempts.
![]() |
Warning |
|---|---|
Increasing the thread limit over 1000 on Zorp hosts running 2.4 kernel may result in deadlocks when the number of active threads reaches the limit. |
Thread stack limit: The amount of memory (in kilobytes) a thread is allowed to use.
Enable thread pooling: If thread pooling is enabled, Zorp starts Idle thread limit number of threads that wait for no incoming client requests, decreasing the response time of the firewall. Setting Idle thread limit to zero defaults to Thread limit/10.
![]() |
Note |
|---|---|
|
Thread pooling increases the memory used by Zorp, because the idle threads consume memory as well. Use thread pooling when many client requests must be served simultaneously, e.g., for large HTTP traffic. |
Automatically restart abnormally terminated instances:
Enable core dumps: Core dumps are special log files created when Zorp crashes for some reason.
Instance parameters can be set on the tabs of the Edit Instance Parameters window. The Logging tab has the following parameters:
Verbosity level: The general verbosity of the instance. Ranges from 0 to 9; higher value means more detailed logging.
![]() |
Note |
|---|---|
Setting a high verbosity level (above 6) can dramatically decrease the performance. On level 9 Zorp logs the entire passing traffic. |
![]() |
Tip |
|---|---|
|
The default verbosity level is 3, which logs every connection, error and violation without many details. Level 4 to 6 include protocol-specific information as well. Levels 7 to 9 are recommended only for troubleshooting and debugging purposes. |
Message filter expression: Sets the verbosity level on a
per-category basis. Each log message has an assigned multi-level category, where
levels are separated by a dot. For example, HTTP requests are logged under
http.request. A log specification consists of a wildcard
matching log category, a colon, and a number specifying the verbosity level of that
given category. Separate log specifications with a comma. Categories match from left
to right. E.g.: http.*:5,core:3. The last matching entry will
be used as the verbosity of the given category. If no match is found the default
verbosity is used.
Include message tags: Prepend log category and log level to each message.
Escape binary characters in log files: Replace non-printable
characters with XXto avoid binary log files. Characters with
codes lower than 0x20 or higher than
0x7F.
![]() |
Note |
|---|---|
Customized logging can be very useful, but should be used with caution. Too many log specifications can decrease the overall performance of Zorp. |
![]() |
Example 8.5. Customized logging for HTTP accounting |
|---|---|
The HTTP proxy logs accounting information into the |
Instance parameters can be set on the tabs of the Edit Instance Parameters window. The Rights tab has the following parameters:
![]() |
Warning |
|---|---|
Modify these settings only if you know what you are doing, because bad rights configuration can prevent Zorp from starting. |
User: Run Zorp as this user. By default, Zorp runs as the
normal user zorp.
Group: Run Zorp as a member of this group.
Chroot directory: Change root to this directory before reading the configuration file.
Manage capabilities:
Instance parameters can be set on the tabs of the Edit Instance Parameters window. The Miscellaneous tab has the following parameters:
File descriptor limit threshold:
File descriptor limit minimum:
Process limit minimum:
SSL Crypto engine: The OpenSSL crypto engine to be used for hardware accelerated crypto support.
Autobind IP: The IP address of a local interface, required by the kernel.
![]() |
Warning |
|---|---|
Do not modify this parameter unless absolutely necessary. |
Instances can be organized into a simple hierarchy — a parent– child relationship that makes instance administration more transparent. Child instances share the same process with their parent and can be managed, (e.g., stopped, started, restarted) only together.
![]() |
Tip |
|---|---|
A parent instance can have more than one children. |
Instances themselves are, in a sense, virtual instances only. They are placeholders for proxies and do not provide any functionality on their own. To actually use instances you need to specify service(s) that belong to a given instance.
![]() |
Example 8.6. An instance hierarchy |
|---|---|
|
On the following screenshot, |
To organize instances into a hierarchy, complete the following steps:
8.5.2.1. Procedure – Organizing instances into a hierarchy
Navigate to the Instances tab of the Zorp ZMC component. The existing instances are displayed in the upper section of the panel.
Using the up and down arrows located next to the button, move the child instance below its parent.
Click the right arrow to make the selected instance a children of the instance above it.
Commit your changes.
To remove a child instance from the hierarchy, select the instance and click the left arrow.
Services define the traffic that can pass through the firewall. A service is not a software component, but a group of parameters that describe what kind of traffic should Zorp accept and how to handle the accepted traffic. The service specifies how thoroughly the traffic is analyzed (packet filter or application level), the protocol of the traffic (e.g., HTTP, FTP, etc.), NAT policies applied to the connections, and man other parameters. The dispatchers using the selected service are displayed in the Dispatchers section of the tab (see Section 8.7, Zorp dispatchers for details).
Packet-filter services forward the incoming packets using the kzorp kernel module. Application-level services create two separate connections on the two sides of Zorp (client–Zorp, Zorp–server) different connections and analyze the traffic on the protocol level. Only application-level services can perform content filtering, authentication, and other advanced features.
![]() |
Note |
|---|---|
To allow IPSec traffic to pass Zorp, you must add packet-filtering rules manually. See Section 19.3.3, Forwarding IPSec traffic on Zorp for details. |
Services are managed from the Services sub-tab of the Instances tab on the Zorp ZMC component. The left side of the tab displays the services of the selected instance, while the right side shows the parameters of the selected service. Use this tab to delete unwanted services, and to modify existing ones. Use the Service Wizard to create new services, because it automatically configures most parameters as needed. Modifying services and creating new ones manually is recommended for advanced users only.
Services are usually created using the Service Wizard. Complete the following steps to modify an existing service, or to create a new one.
At least the following parameters are required:
Name of the service.
Type of the service: packet filter or application-level proxy.
For application-level proxies, the type of the application-level protocol (e.g., HTTP) used in the service.
The client-zones and server-zones allowed to communicate using the service.
8.6.1.1. Procedure – Creating a service manually
Navigate to the Instances tab of the Zorp ZMC component. Select the instance that will handle the new service from the Instances list.
Select the Services sub-tab and click .
Enter a name for the service into the opening dialog. Use clear, informative, and consistent service names. You are recommended to include the following information in the service name:
Source zones, indicating which clients may use the service (e.g.,
intranet).
The protocol permitted in the traffic (e.g.,
HTTP).
Destination zones, indicating which servers may be accessed using the service
(e.g., Internet).
![]() |
Tip |
|---|---|
Name the service that allows internal users to browse the Web
|
Select the type of service from the Select class combobox.
To inspect the traffic on the application level, select
Service. For the highest available security, use
application-level inspection whenever possible.
To inspect the traffic only on the packet level, select
PFService. Use packet-level filtering to transfer very large
amount of UDP traffic (e.g., streaming audio or video).
Select the Source zones, from where the clients can access the service.
Select the Destination zones. Only the servers located in the selected zones can be accessed using the service.
Using the Proxy class combobox, select the application-level proxy will inspect the traffic. Only traffic corresponding to the selected protocol and the settings of the proxy class can pass the firewall. Zorp has many proxy class available by default. These can be used as-is, or can be customized if needed. See Section 8.8, Proxy classes for details. The settings and parameters of the default proxy classes are detailed in the Zorp Reference Guide. This option is not available for PFServices.
Configure advanced options if needed.
The following options are available for both packet-filter and application-level services:
Routing: Select the method used to define the IP address of the destination server. See Section 8.6.2, Routing — selecting routers and chainers for details.
NAT: Select the Network Address Translation policy used to NAT the address of the client (SNAT), the server (DNAT), or both. See Section 8.9.2, NAT policies for details.
The following options are available only for application-level services:
Chainer: Select the method used to connect to the destination server. See Section 8.6.2, Routing — selecting routers and chainers for details.
Authentication: Select the authentication and authorization policies used to verify the identity of the client. See Chapter 17, Connection authentication and authorization for details.
Advanced: Select the how Zorp should resolve the addresses of the client requests. See Section 8.9.4, Resolver policies for details.
![]() |
Note |
|---|---|
To remove a policy from the service, select the empty line from the combobox. |
Commit your changes.
Routers define the target IP address and port for the traffic. The default router,
called TransparentRouter, uses the IP address requested by the client. The destination
selected by a router may be later overridden by the proxy (if the Target address
overridable by the proxy option of the router is enabled) and the chainer.
Routers suggest the destination IP; chainers establish the connection with the selected destination. The default ConnectChainer simply connects the destination selected by the router.
To set a router or a chainer for a service, complete the following steps:
8.6.2.1. Procedure – Setting routers and chainers for a service
Navigate to the Instances tab of the Zorp ZMC component.
Select the service to configure on the Services sub-tab.
Click Routing to display the router and the chainer assigned to the service.
Click in the Router row to select and configure a router.
Click in the Chainer row to select and configure a chainer.
Commit your changes.
All router classes have the following options:
Use client address as source: By default, Zorp uses its own IP address in the server-side connections: the server does not see the IP address of the original client. By selecting this option, Zorp mimics the original address of the client. Use this option if the server uses IP-based authentication, or the address of the client must appear in the server logs.
![]() |
Note |
|---|---|
This option was called Forge address in earlier versions of Zorp. |
![]() |
Note |
|---|---|
The IP address of the client is related to the source NAT (SNAT) policy used for the service: using SNAT automatically enables the Use client address as source option in the router. |
Modify source port: This option defines the source port that Zorp uses in the server-side connection. The following options are available:
Random port above 1024: Selected a random port between 1024 and 65535. This is the default behavior of every router.
Random port in the same group: Select a random port in the same group as the port used by the client. The following groups are defined: 0-513, 514-1024, 1025–.
Client port: Use the same port as the client.
Specified port: Use the port set in the spinbutton.
![]() |
Note |
|---|---|
This option was called Forge port in earlier versions of Zorp. |
Target address overridable by the proxy: If this option is selected and the data stream in the connection contains routing information, than the address specified in the data stream is used as the destination address of the server-side connection.
![]() |
Example 8.7. Overriding the target port SQLNetProxy |
|---|---|
The Oracle SQLNet protocol can request port redirection within the protocol. Configure a service using the SQLNetProxy and the Target address overridable by the proxy router option. When a client first connects to the Oracle server, the connection is established to the IP address and port selected by the router. However, the server can send a redirect request to the client, and the router has to reconnect to the port specified in the request of the Oracle server. This procedure is performed transparently to the client. |
![]() |
Note |
|---|---|
|
The Target address overridable by the proxy option cannot be used with InbandRouter. This option was called Overridable in earlier versions of Zorp. |
TransparentRouter does not modify the IP address and TCP/UDP port number requested by the client; the same paramters are used on the server side.
Use the Modify target port option to connect to a different port of the server. See Section 8.6.2.2, Common router options for other options of the TransparentRouter.
DirectedRouter directs all connections to fixed addresses, regardless of the address requested by the client.
To add a destination address, click , and enter the IP address and port number of the server to connect to. If you set additional addresses, and the first address is unreachable, Zorp tries to connect the next server. It is also possible to connect to the listed destinations in a round-robin fashion, see Section 8.6.2.9, RoundRobinChainer for details.
![]() |
Tip |
|---|---|
Use DirectedRouter for servers publicly available in the DMZ. That way outsiders do not know the real IP addresses of the servers — the servers are not even required to have public, routable IP addresses. |
InbandRouter determines the target address from information embedded in the transferred protocol. This is possible only for protocols that can have routing information within the data stream. Zorp can use InbandRouter with the HTTP and FTP protocols.
All chainer classes have the following options:
Connection timeout: Assume that the server is unreachable if it
cannot be connected for Connection timeout seconds.
Protocol action: The type of the protocol used in the server-side connection. The default is to use the same protocol as on the client side, but Zorp can enforce the use of the TCP or the UDP protocol.
ConnectChainer attempts to connect the destination defined by the router. It terminates the connection if the destination server is unreachable.
FailoverChainer is similar to ConnectChainer, and attempts to connect the destination defined by the router. However, if the destination is unreachable and the service uses DirectedRouter, Zorp attempts to connect the next destination set in the router.
Zorp does not try to connect to an unreachable server until the time set in the Keep availability state for option expires.
![]() |
Tip |
|---|---|
FailoverChainer can be used to implement a simple high availability support for the protected servers. |
RoundRobinChainer is similar to the FailoverChainer, but Zorp directs each incoming connection to the next available server. That way the load is balanced between the servers set in the destination list of the router. Use RoundRobinChainer together with DirectedRouter.
Zorp does not try to connect to an unreachable server until the time set in the Keep availability state for option expires.
![]() |
Tip |
|---|---|
RoundRobinChainer can be used to implement simple load balancing for the protected servers. |
SidestackChainer does not connect to the server, but passes the traffic to the specified proxy. The server is connected using a regular chainer after the proxy processes the traffic. It is possible to sidestack several proxies that way.
Dispatchers are the components of Zorp that waits (listens) for client connection requests. The dispatcher binds to a IP address and port and waits for connection requests. For each incoming request it creates a new session that handles the connection. Clients who communicate via Zorp actually connect to the dispatcher responsible for the used service.
The task of the dispatcher is to accept the incoming connection, and select the service that will transfer the traffic through Zorp. The service is selected based on the port targeted in the client request, and the zone that the client and the server belongs to. Dispatchers are the link between the data stream and the defined services.
Every service must have a dispatcher, but several services may use the same dispatcher. A dispatcher that is used by multiple services must be a CSZoneLDispatcher — see Section 8.7.4, CSZoneDispatcher for details.
![]() |
Note |
|---|---|
Dispatchers that listen only for packet-filtering services are not visible with the netstat command, because they do not run in userspace. |
![]() |
Note |
|---|---|
Earlier versions of Zorp used different objects (listeners and receivers) to receive TCP and UDP connections. In Zorp 3.3, these two objects have been merged into the dispatcher objects. Listeners and receivers are automatically converted into dispatchers when upgrading to Zorp 3.3. |
Dispatchers are managed from the Dispatchers sub-tab of the Instances tab on the Zorp ZMC component. The left side of the tab displays the existing dispatchers, while the right side shows the parameters of the selected dispatcher. Use this tab to delete unwanted dispatchers, and to modify existing ones. The Service Wizard creates new dispatchers automatically as needed. Modifying dispatchers and creating new ones manually is recommended for advanced users only.
Dispatchers are usually created automatically by the Service Wizard. Complete the following steps to modify an existing dispatcher, or to create a new one.
8.7.1.1. Procedure – Creating a Dispatcher manually
Navigate to the Instances tab of the Zorp ZMC component.
Select the Dispatchers sub-tab.
Click , and set the Dispatcher
combobox to Dispatcher.
Select the service that the dispatcher starts from the Service combobox.
When a connection arrives from a client, the dispatcher accepts it, performs the access control, and starts the selected service.
Select the type of the network interface that the dispatcher is listening on using the Bind Type combobox.
To accept connections arriving to a single interface of Zorp, select DBIface, then select the network interface from the Interface combobox.
To accept connections arriving to an interface group, select DBIfaceGroup, then select the interface group from the Interface Group combobox. See Procedure 7.1.4.2.1, Creating interface groups for details on creating interface groups.
To accept connections arriving to a single IP address of Zorp, select DBSockAddr, then enter the IP address into the Address field. You can also use the link button to select the IP address.
![]() |
Tip |
|---|---|
Use DBSockAddr if the network interface has multiple IP addresses, but the dispatcher should accept connections only on one of these IP addresses. |
![]() |
Note |
|---|---|
Select the interface, interface group, or IP address of Zorp that is connected to the clients. For example, to create a dispatcher for an HTTP service that enables the clients on the intranet to browse the Internet, you should select the interface connected to the intranet. |
Select the protocol accepted by the dispatcher from the Protocol combobox. The available protocols are TCP and UDP.
Enter the port number the dispatcher is listening on into the Port field. The clients send their requests to this port, for example, to port 80 in regular HTTP traffic.
ZMC automatically warns if the selected interface and port pair is already used in another dispatcher. In this case, select a different port, or consider using a CSZoneDispatcher.
![]() |
Note |
|---|---|
A dispatcher can listen on multiple ports. Separate the port numbers by commas,
e.g., |
Optional step: Set the advanced options of the dispatcher. Modifying these options is rarely needed. See the following sections for details: Section 8.7.3, Limiting the connection rate; Section 8.7.5, Non-transparent dispatchers; Section 8.7.4, CSZoneDispatcher; and Section 8.7.2, Advanced dispatcher options.
Commit your changes.
These parameters can be set in the Advanced section of the Dispatchers tab.
Separate to threads: Start a new thread for every client request. The proxy threads started by the dispatcher will start from the dispatcher's thread instead of the main Zorp thread. If this option is enabled, Zorp accepts incoming connections faster, and optimizes queuing. This improves user experience, but significantly increases the memory consumption of Zorp. Use it only if Zorp has to transfer a very high number of concurrent connections.
Backlog: This parameter sets the queue size (maximum number) of TCP
connections that are established by the kernel, but not yet accepted by Zorp. This queue
stores the connections that successfully performed the three-way TCP handshake with the Zorp
host, until the dispatcher sends the Accept package. The default
value of this parameter is good in virtually every situation.
Advanced redirection: This option is available only for transparent dispatchers. Transparent Zorp dispatchers do not listen on the port set in the Port field of the Dispatchers tab. The reason for this is the following:
To connect a remote server, clients address the IP address of the server and the port of
the application running on the server: e.g.: 192.168.0.25:80. Zorp's
packet filter redirects this traffic from port 80 to a different port that is automatically
assigned to the dispatcher, because only a single dispatcher can listen on an IP
address-port pair. If you have two different requirements for controlling HTTP traffic, for
instance, you must set up two different services that use different dispatchers. If Zorp has
only one IP address, both dispatchers would have to listen on the same IP address-port pair.
To overcome this problem, dispatchers listen on ports selected from the dynamic port range
(50000+), and the traffic is redirected to these ports. The Advanced
redirection option enables you to select this port manually.
![]() |
Warning |
|---|---|
It is not recommended to manually modify the Advanced redirection settings. |
Dispatchers can listen on an IP address, an interface, or on an interface group. See Chapter 7, Networking, routing, and name resolution for details on configuring interfaces and IP addresses, and Procedure 7.1.4.2.1, Creating interface groups for details on creating interface groups.
Use the Maximum average matching rate parameter of the dispatcher to limit the number of connections that the dispatcher accepts within a given time period. Connection requests above this maximum rate are denied.
![]() |
Tip |
|---|---|
Use maximum rates to prevent Denial of Service (DoS) attacks. |
A CSZoneDispatcher selects the service used to transfer the connection based on the zone that the client and the server belongs to. You can define client-zone–server-zone pairs, and assign a service to each pair.
The client zone is the zone where the traffic comes from; the server zone is the zone the client intends to connect. The server that is eventually connected is not necessarily in the server zone — the connection can be redirected ,for example — but the dispatcher selects the service based on the zone the client originally wanted to access.
Services created with the Service Wizard use CSZoneDispatchers. To create a CSZoneDispatcher manually, complete the following steps.
8.7.4.1. Procedure – Creating a CSZoneDispatcher manually
Navigate to the Instances tab of the Zorp ZMC component.
Select the Dispatchers sub-tab.
Set the Dispatcher combobox to
CSZoneDispatcher and click .
Click the button located in the Services section. A new dialog opens.
Click the button located next to the Client zone field, select the source zone, and click .
![]() |
Warning |
|---|---|
The button opens the zone editor dialog. It is possible to modify the zone structure of the site here. Make sure that you do not make accidental changes to the zone hierarchy. |
Click the button located next to the Server zone field, select the destination zone, and click .
![]() |
Warning |
|---|---|
The button opens the zone editor dialog. It is possible to modify the zone structure of the site here. Make sure that you do not make accidental changes to the zone hierarchy. |
Select the service that will be used to transfer the traffic between the zones selected in the last two steps from the Service combobox.
Repeat Steps 4–7 to add other zone-pairs to the dispatcher. Different zone-pairs may use different service within the same dispatcher.
Click .
Select the Follow parent checkbox from the Advanced section if needed. If this checkbox is selected, than the dispatcher handles also the connections coming from the child zones of the selected client zones. Otherwise, the dispatcher accepts traffic only from the explicitly listed client zones.
Configure the other parameters of the CSZoneDispatcher as needed. These options are identical to the parameters of normal Dispatchers; see Section 8.7.1, Creating a dispatcher manually for details.
Commit your changes.
By default, Zorp uses transparent dispatchers, meaning that the clients target the server directly using the IP address of the server, and Zorp's packet filter redirects the connections to the dispatchers.
When using non-transparent dispatchers, the clients connect to Zorp directly, using Zorp's own IP address.
To set a dispatcher to non-transparent mode, complete the following steps. See Section 8.7.1, Creating a dispatcher manually for general instructions on creating dispatchers.
8.7.5.1. Procedure – Configuring a non-transparent dispatcher
Navigate to the Instances tab of the Zorp ZMC component and select the Dispatchers sub-tab.
Select the dispatcher that you want to set to non-transparent mode.
Unselect the Transparent checkbox.
Select the interface connected to the clients from the Interface combobox and enter a port number into the Port field of the Bind section. Zorp will listen on this port of the selected interface for client requests. The client must address the IP address of the selected interface and the port set for the dispatcher to access the service.
Commit your changes.
A proxy component is responsible for analyzing, filtering and possibly modifying the data that is passed through it.
A proxy class is the low level proxy and its configuration settings. Proxy classes are responsible for analyzing and checking the data part of packets and passing it between the client and the server. Proxy classes can be used in service definitions. Together with the other components configured as service parameters (routers, dispatchers) they can be used to analyze/filter communication channels among network hosts. Most proxy classes are protocol-specific, meaning that they are aware of the protocol-specific information within the data stream they are processing.
There are built-in proxy classes for the most typical network traffic types, like HTTP, FTP, POP3, SMTP, telnet, and also for some less frequently used protocols, like NNTP and LDAP. They can be used in service definitions without modifications of the default class properties and their values. See the Zorp Reference Guide for details.
![]() |
Note |
|---|---|
Proxies in Zorp are fully RFC-compliant so a traffic that pretends to be of a certain type but violates RFC specifications concerning the given traffic type are not proxied but automatically denied instead. For example, the HTTP proxy enforces by default the RFCs for HTTP (2616 and 1945). |
![]() |
Example 8.8. RFC-compliant proxying in Zorp |
|---|---|
A good example for this rule is the CODE RED worm that infected so many IIS servers around the World: the heart of this worm was a specially formatted URL request which was not RFC-compliant but was nevertheless serviced by IIS servers that had not been patched against it. Most firewall products, even application proxy firewalls let it pass through and only the most accurate ones, like Zorp, stopped the worm, because its URL request violated RFC rules that everyone should accept and implement correctly. |
If using default proxy classes and property values is not enough, it is possible to derive new classes from the original ones. Derived proxy classes inherit all the properties of the original (parent) classes and these properties can then be altered. The number of configurable parameters varies among proxies; proxy for HTTP traffic has the most. It is completely up to you whether you use them in your firewall's policy settings.
![]() |
Note |
|---|---|
Whenever you start customizing a proxy, you do not actually create a new proxy, but derive a proxy class from the selected built-in proxy implementation and configure different settings for it. You only modify the configuration, not the proxy module itself. |
Proxies work with data streams they receive as input and emit another (possibly altered) data stream as output. They never actually see “traffic” in the traditional sense; the details of connection establishment and management are handled by separate software components such as dispatchers. Therefore, proxies can easily interoperate with each other or with other non-firewall software like virus filters, since data is passed among them as simple data stream.
Default proxy classes provide an adequate level of security. You typically derive your own classes if you want to change the values of certain attributes, like manually setting the contents (like browser type, operating system) of the request headers leaving the http proxy. Complex proxy setups – such as virus filtering of HTTP, SMTP, traffic or proxy stacking – also require derived classes.
This process is somewhat complex involving many steps; therefore will be demonstrated
using an example of changing the User-Agent HTTP request header output
by a custom HTTP proxy component.
The customized proxy class you are defining is based on an already defined proxy class.
There are quite a lot of predefined proxy classes that are available by default. For some
protocols (for example HTTP and FTP) there are more than one to choose from, each with a
specific intended purpose. FtpProxyRO, for instance, is
for read-only FTP access, while FtpProxyRW is for
read/write FTP access.
8.8.2.1. Procedure – Derive a new proxy class
Select the Proxies tab of the Zorp
component.
The Zorp class configuration window that appears is, by default, empty.
Click .
Select a predefined proxy class template for the customized proxy class.
Proxy class names are typically descriptive, but most of them comes with a detailed description as well. For more details, see the Zorp Reference Guide. These descriptions either explicitly tell what the given proxy class is for or suggest attributes of the class that can be configured to achieve a special purpose.
Enter a name for the new proxy. You are recommended to use capital names that imply
the functions the proxy is responsible for, for example VirusHTTP
or HTTPSproxy.
Add the attributes to be configured and modify attribute values for the given class.
What attribute-level configuration is needed depends on the exact requirements: if
you simply need an FTP proxy that denies upload (write) requests, use the FtpProxyRO without modifications in your policy definitions
– deriving a new class is unnecessary in this case.
However, if you would like to hide the browser type and operating system version
information of your clients you can do it with a derived proxy class, by customizing
some of its attributes. To hide browser type and operating system version information
for instance, the creation of a custom User-Agent
header is required. Although this may be accomplished on the client side (modifying all
client web browsers), it is much easier to do with Zorp.
The attributes configuration screen is divided into two main parts.
The upper textbox shows the list of custom, derived proxies along with the classes
they were derived from (the Parent column). For the previous screenshot a simple
HttpProxy, called MyHttpProxy was derived from the
generic HttpProxy class.
Click under the lower textbox. It brings up the list of configurable attributes for the given proxy class.
![]() |
Note |
|---|---|
|
A short description for each attribute is also available. For a complete description of proxy classes and attributes see the Zorp Reference Guide. There are syntax rules for setting attributes properly. For more information on these rules, see the Zorp Reference Guide or, to a limited extent, read all the available descriptions on the class selection screen. |
![]() |
Tip |
|---|---|
AbstractProxy template descriptions are especially useful, since they contain the most information on syntax. To set HTTP request header leaving the firewall, for instance, first check the description for AbstractHttpProxy; see section Changing headers in requests or responses. There are even Python code examples based on a character-based Zorp configuration. |
Select self.request_header attribute.
The attribute appears in the Changed proxy attributes listing of the Zorp class configuration screen.
Set the Value of the attribute by clicking .
(Attribute Type is less relevant now.)
A new window opens which is, by default, empty.
Click the button to define the name of the parameter you want to change.
In this example HTTP request headers are configured. These are standardized in the corresponding RFC documentation or in any reliable book on web server administration/programming.
One of the request headers is called User-Agent which is the place to specify browser type and version and
operating system information. Popular statistics, such as the market share of web
browsers, are based on this request header.
By default, Zorp takes the original User-Agent header information it receives from clients and uses the same
value in http requests it generates.
Enter User-Agent in the small dialog box to
change the default behavior.
You can see the name of the header changing (Key column), but Type and Value columns still need to be changed.
Left-click on the Type column of the row containing the
previously entered User-Agent string. A drop-down list
appears. Remember, you are changing the value of an existing attribute, so select
type_http_hdr_change_value here which
changes the given header values.
Click to modify the Value column.
Set the actual value of the User-Agent
request header. The following window opens.
This window represents another view of the attribute you are modifying now. The Type column of Figure Selecting action type for the attribute is now the first row in this window, while the Value column became the second row here; it is currently empty.
Click to set the Value column and enter a string.
A string can be for example, My Browser.
![]() |
Note |
|---|---|
Web servers you visit from now on will see this information as the
|
The process of changing the desired proxy class attribute is complete, you can see the result in the Zorp class configuration window.
![]() |
Note |
|---|---|
To have the new proxy class fully functional, you have to configure it as a service parameter of the given service. |
The proxy class parameter configured in the service definition defines what traffic passes through with the help of the given service. Different services can have different proxy classes configured, even for the same traffic type. For example, a firewall can have a number of services configured to pass HTTP traffic, each with its own, derived and customized proxy class parameter. If these proxy classes are parameterized differently, the corresponding services also behave differently for the same HTTP traffic. A single service can only have a single proxy class value configured, although that proxy class parameter can refer to a stacked proxy setup as well.
The basic attributes such as the name and the parent class of a proxy can be modified by completing the following steps:
8.8.3.1. Procedure – Renaming proxy classes
Select the class and click .
To rename the class, edit the name of the proxy in the Proxy name field, then click .
To modify the parent class of the proxy, select the new class from the Proxy template tree on the left of the dialog, then click .
![]() |
Warning |
|---|---|
As a result of modifying the parent class, an already configured proxy (i.e. one that had its default values or attributes modified) looses the attributes not present in its new parent class. |
In most proxies, the proxy can pass that information which is only data for the serving proxy to another proxy for further analysis. This kind of complex data analysis is possible by placing a proxy inside another one. This process is called stacking. Stacking is especially useful in filtering compound traffic, a traffic that consists of two (or more) protocols or that needs to be analyzed in two different ways.
Usually protocols consist of two parts:
control information, and
data.
Protocol proxies analyze and filter the control part and except for some cases they are unaware of the data part. At this point, further screening of the data might be needed, therefore proxies are able to stack in other proxies capable of filtering the data part, so the external (upper) proxy passes that data traffic to the internal (lower) proxy.
![]() |
Example 8.9. Proxying compound traffic |
|---|---|
|
One typical example for compound traffic is HTTPS, that is HTTP with SSL encryption. SSL is an application layer encryption and works by encapsulating the protocol that needs encryption. Many application layer protocols can be SSL encrypted, HTTP is just one of the most typical examples. With stacking, a continuous data stream is always passed from one proxy (the 'external' one) to the other (the 'internal' one). It is not possible to pass only certain fields of a protocol header to the internal proxy. Since HTTPS traffic arrives at the firewall in encrypted form, a simple HTTP proxy cannot analyze it. Zorp, however, has a separate PsslProxy for SSL traffic. This proxy can be used to decrypt SSL encryption and also to encrypt traffic that leaves the firewall. After SSL decryption is done, the remaining, unencrypted traffic can be analyzed by the corresponding protocol proxy – in case of HTTPS traffic, it is one of the HTTP proxies. |
![]() |
Example 8.10. Virus filtering and stacked proxies |
|---|---|
Virus filtering is also a multiple analysis of traffic. This is typically performed in HTTP, POP3 and SMTP traffic, because these are the protocols viruses generally use for spreading over the Internet (using Zorp it is possible to filter for viruses in other protocols as well). When virus filtering is configured, a standard protocol proxy works in tandem with an antivirus engine and in this way both protocol specific and virus filtering is performed on the data if you stack the antivirus engine into some proxy. |
For each stacking scenarios there are a number of attributes that can be configured. For more information see the Zorp Reference Guide.
8.8.4.1. Procedure – Stack proxies
Derive a proxy class from one of the predefined ones.
See section Customizing proxies.
Derive a proxy class for the intended 'external' or container proxy.
In the case of HTTPS, for instance, derive from PsslProxy and supply a name for the derived proxy.
Configure stacking on the Zorp Class configuration screen.
Configuring stacking essentially means setting an attribute of the container proxy.
This attribute is called for example self.stack_proxy in case of
SSL and its value must be set to the name of the proxy to be stacked. For details, see
section Setting attributes in chapter Customizing
proxies.
The Policies tab provides a single interface for managing all the different policies used in Zorp service definitions.
Policies are independent from service definitions. A single policy can be used in several services or proxy classes. Policies must be created and properly configured before they are actually used in a service. When configuring a service, only the existing (i.e. previously defined) policies can be selected.
On the left side of the Policies tab the existing policies are displayed in a tree, sorted by policy type. If a policy is selected, its parameters are displayed on the right side of the panel.
The policies available from the Policies tab of the ZMC Zorp component are listed below. The subsequent sections describe the different policy types and their uses. The Authentication, Authentication Provider, and Authorization policies are discussed in Chapter 17, Connection authentication and authorization.
NAT Policy : Policies for source and destination network address translation.
Authentication Policy : Policies describing how clients should be authenticated in different scenarios. See Chapter 17, Connection authentication and authorization for details.
Authentication Provider : ZAS authentication backends: databases providing user information for authentication. See Chapter 17, Connection authentication and authorization for details.
Authorization Policy : Policies describing how clients should be authorized in different scenarios. See Chapter 17, Connection authentication and authorization for details.
Matcher Policy : Various matcher and filtering policies.
Resolver Policy : Simple domain name resolution policies.
Stacking Provider : External Zorp hosts providing content vectoring capabilities.
To create a new policy, click on the button under the policies list. Enter a name for the policy and select the type of the new policy from Policy type combobox. If a policy or a policy group (e.g.: NAT policy) is selected, the combobox is automatically set to the same type.
![]() |
Note |
|---|---|
Custom policy classes can be created using the . However, this is only recommended for advanced users. |
The parameters of the new class can be set on the right side of the panel. Existing policy classes can be modified here as well.
Policies and matchers can be disabled/enabled via the local menu (right-click the selected policy). Disabled policies will be generated into the configuration files as comments.
![]() |
Tip |
|---|---|
A policy class can be easily duplicated by using the and options of the local or the menu. |
Network Address Translation (NAT) is a technology that can be used to change source or destination addresses in a connection from one IP address to another one.
Today most corporate networks work with private, non-Internet-routable IP addresses from the 10.0.0.0/8, 172.16.0.0/12 or 192.168.0.0/16 ranges. These IP addresses are suitable for intranet communication (they can even be routed internally) but cannot be used on the Internet. Therefore a mechanism, NAT, is in place that, whenever an internal client wants to access Internet resources, uses a public IP address for this purpose.
Another use for NAT is address hiding. Towards the Internet only a limited number of public IP addresses are visible, while you may have thousands of internal clients and servers all “translated” to those few addresses.
![]() |
Tip |
|---|---|
Address hiding with the help of NAT is especially useful for published servers (usually located in a DMZ). The potential attackers only see a few public IP addresses (or even a single one) but from this information they have no way of knowing where your servers are actually located, how many of them there are and in what configuration. |
![]() |
Note |
|---|---|
Although address hiding can be considered as a security feature, NAT alone is not enough to protect a network from malicious intruders. Never use NAT in itself as a security solution. |
Based on whether source or destination IP addresses are transformed two kinds of NAT can be differentiated.
Source NAT (SNAT),
if source IP addresses are transformed.
Destination NAT (DNAT),
if address transformation is performed on destination IP addresses.
Basically, NAT in Zorp provides a possibility to modify the source and destination IP address at the server side before the connection is established. The source and destination IP address values are defined previously by the router on the basis of router type, its settings and the client request. In some cases, Proxy settings can also be involved, for example when the Target address overrideable by the proxy router option is enabled. NAT is responsible for changing IP addresses to some other addresses depending on the configuration of the NAT policy.
![]() |
Note |
|---|---|
This NAT is performed by the Zorp component and is totally different from the NAT offered by IPTables in the Packet Filter component. |
By default, when no NAT policy is set up, Zorp uses its own IP address configured for the corresponding network interface when sending out traffic in any direction. Although this results in many clients “using” the same (single) IP address, it is not considered as SNAT technically.
In Zorp NAT is performed on the application proxy level. In this case it is not strictly IP address replacement, since original packets do not appear in the traffic leaving the firewall. It is an IP address modification rule rather. If application proxying is used — meaning there is no traffic that is forwarded on the packet filter level — packet filter level NAT is neither required nor recommended.
Service definitions contain NAT policy settings to configure application proxy–level NAT.
![]() |
Note |
|---|---|
|
If some traffic is managed at the packet filter level, NAT must be performed at the packet filter level, too. In this case, NAT is really IP address replacement, since the packet filter – rules permitting – forwards the original packets it receives. You are not recommended to use NAT at the packet filter level. For more details on packet filter-level NAT solutions, see Appendix 1, Packet Filtering. |
Originally NAT meant only address translation, leaving port information travelling in TCP or UDP packets unmodified. This can lead to errors especially in large networks where thousands of clients are NATed by a single machine, therefore NAT technologies were modified to do port translation as well, guaranteeing that even if two internal clients try to use the same source port number in session establishments, the packets leaving the NAT server always have unique source IP address/port pairs.
![]() |
Note |
|---|---|
Port translating NAT devices are incompatible with IPSec encryption (which is a major drawback as IPSec is becoming increasingly popular) and may be incompatible with proprietary, two-channel protocols as well. |
Before you start NAT configuration you must decide whether you need it at all. If you need traffic redirection, for example a Web server in your DMZ, routers may serve your needs. By default, Zorp uses its own IP address (bound to the corresponding adapter) to all connections leaving it in any direction, unless the Use client address as source router option is set, in which case the original client IP address is used. Consequently, NAT may not be absolutely necessary.
![]() |
Note |
|---|---|
Configuring SNAT Policy for a Service automatically enables the Use client address as source router function, so during SNAT the client's address is used, not the firewall's. |
Unlike in firewall-less network configurations, where NAT is a universal setting for all clients communicating with any protocol, in Zorp different traffic can be NATed differently because NAT configurations are linked to services. It can happen that while outgoing HTTP traffic is SNATed to a single public IP address, SQL traffic from the same network is not SNATed at all, and finally FTP download traffic is SNATed to a separate NAT pool.
8.9.2.1.1. Procedure – Configuring NAT
Create the required NAT policies on the Policies tab of the Zorp ZMC component.
Click the button, select NAT Policy from the Policy type combobox and supply a name for the new policy.
Names should be descriptive and ideally contain information about the direction of NATing and/or about the type of traffic NATed.
In most network configurations NAT is typically not service-specific; a generic NAT policy may be adequate for most outgoing or incoming traffic. There are no compulsory rules for naming.
NAT policies can be renamed any time.
![]() |
Tip |
|---|---|
|
Remove NAT policies from the configuration set if they are no longer needed. NAT policies can be removed only if they are not used in any service definition. |
Configure a NAT solution.
Zorp supports several different NAT solutions.
In Zorp 3.3, GeneralNAT has three parameters: source address, destination address, and the translated address. Connections arriving from the source address that target the destination address are modified to use the translated address. If the NAT policy is used as Source-NAT (SNAT), the source address is translated to the translated address, if the policy is used as Destination NAT (DNAT), the target address is translated.
![]() |
Note |
|---|---|
The original and translated netmasks do not need to be the same: it is possible to map an entire /24 network onto a single IP address (/32 mask). However, the order of the pairs is important because the Zorp processes the list from top to bottom. |
Depending on the NAT type (SNAT, DNAT), Zorp evaluates the NAT rules one after the other. If a row containing the address to be NATed as the source network, the iteration stops and Zorp modifies the IP address as specified in that row. If no match is found, the original IP address is used.
When modifying the address, it calculates the host ID of the address using the target netmask and the source network address and adds it to the target network.
![]() |
Example 8.11. Address translation examples using GeneralNAT | |||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
The following two tables show a number of simple and special
GeneralNAT cases. The Destination Address in these cases is
set to
|
Configure caching.
Since the NAT decision may take a long time in some cases (e.g.: if there are many mappings in the list), the decisions can be stored in a cache. Storing the decisons in a cache accelerates future decisions. Caching can be enabled/disabled using the Cacheable checkbox in the configuration window of the NAT policy.
![]() |
Tip |
|---|---|
It is recommended to enable caching for complex NAT decisions. |
![]() |
Note |
|---|---|
Enabling caching can have interesting, but sometimes unwanted effects on some
NAT types, for example on |
Zorp supports the following types of NAT policies:
| NAT policy | Description |
|---|---|
| General NAT | Simple mapping based on the original and desired address(es). General NAT can be used to map a set of IP addresses (a subnet) to either a single IP address or to a set of IP addresses (a subnet). |
| ForgeClientSourceNAT | This solution is present for backward compatibility reasons. Its effects are practically the same as that of the Forge Address setting in router configurations: no address translation is performed and the addresses that were present in the traffic arriving from the client are used in the traffic leaving the firewall in response to the client's request. |
| StaticNAT | This option can be used to specify a single IP address/port pair to use in address transforms. It is mainly used in DNAT configurations where incoming traffic must be directed to an internal or DMZ server that has a private IP address. Specifying port translation is optional. When used in conjunction with SNAT, StaticNAT can be used to map to IP alias(es). |
| OneToOneNAT | In OneToOneNAT mapping you must configure IP address mappings for your address sets (domains) individually. In other words, OneToOneNAT maps networks to networks — with the possibility that your networks consist of single IP addresses. To use OneToOneNAT the two networks must be of the same size. |
| OneToOneMultiNAT | This option maps multiple IP address domains to multiple IP address domains. It is primarily useful for large-scale, enterprise deployments. It is like OneToOneNAT but can have multiple NAT mappings. |
| RandomNAT | It means that the firewall selects an IP address from the configured NAT pool randomly for each new connection attempt. Once a communication channel (a session) is established, subsequent packets belonging to the same session use the same IP address. The port number used in RandomNAT transforms can be fixed, even for each IP address used in the NAT pool separately. It is ideal when you want to distribute the load (use) of addresses in your NAT pool evenly and you do not have specific requirements for fixed address allocations such as IP based authentication. |
| HashNAT | It maps individual IP addresses to individual IP addresses very quickly, using hash values to determine mappings and storing them in hash tables. |
Table 8.1. NAT solutions
The NAT policies created in the Policies tab can be used in service definitions. Navigate to the Instances tab, select a service and choose a NAT policy as either the Source NAT policy or the Destination NAT policy service parameter.
Remember that NAT policies are independent configuration entities and come into effect only if they are used in service definitions. Also, SNAT and DNAT policies are two different and independent service parameters: it is not required to have either one or both in any service definition. One service can only use a single NAT policy (or none) as its Source and another one (or none) as its Destination NAT policy parameter. These two settings usually do not reference the same NAT policy (although this is not impossible).
In general, while all NAT policies are equal in that they are freely usable as either source or destination NAT policies in service definitions, they are typically created with their future use in mind. There is no specification on whether NAT policies are SNAT or DNAT policies: they are SNAT or DNAT policies only from the point of view of the services that are using them.
NAT policies can be reused. Any number of services can use them.
![]() |
Note |
|---|---|
Although it is often considered a security-enhancing feature, NAT is not intended for access control of any type. Instead, use proper Zone setups and service definitions for this purpose. |
NAT in Zorp is an option to change source/destination IP address information in the server side of connections of the firewall, immediately before the connection is started. Since NAT (if used) decisions are made after all other IP address related configurations, such as router, proxy configuration, NAT can override these previous settings. NAT in Zorp can be used to shift IP address ranges, to set IP addresses and to customize these operations.
In a service definition there are potentially two different components that directly deal with IP address setting:
a router (compulsory),
and a NAT policy (or two) (optional).
In the address setting procedure the following processes are involved.
Incoming connection is accepted and a new session is created.
Destination address is set by the Router and using the Use client address as source option the source address of the server side connection is also set.
Remember that the Router only gives a suggestion for the source/destination IP addresses as the proxy or the NAT can later override these suggestions.
Router settings can be altered by the proxy if the Target address
overrideable by the proxy option is set or
InbandRouter is selected and the proxy has some protocol based
information.
NAT is performed, depending on NAT types (SNAT/DNAT).
Access control check is performed based on the final destination IP address
decision. Check whether the service is allowed as an inbound
service into the zone where the destination IP address belongs to.
The connection to the server is established.
![]() |
Note |
|---|---|
When checking the inbound services of the zone, the IP address to which the firewall actually connects to is considered. In other words, the original destination address of the client may be overridden by the router, the proxy and DNAT as well. Zone access control uses only the final IP address, all interim addresses (set by the Router, Proxy, but not used as the final one) are ignored in the access control decision. |
If a service uses an SNAT Policy, the Use client address as source is implicitly set as well so that SNAT uses the client IP address instead of the firewall IP address. That is, if the NAT policy does not include SNAT modification, the client's IP address is used even if the Use client address as source is unset in the router.
![]() |
Tip |
|---|---|
The versatility of NAT policies is especially useful in large-scale, enterprise deployments or where a lot of NAT is used. |
In general, matcher policies can be used to find out if a parameter is included in a list (or which elements of a list correspond to a certain parameter), and influence the behavior of the proxy class based on the results. Matchers can be used for a wide range of tasks, for example, to determine if the particular IP address or URL that a client is trying to access is on a black or whitelist, or to verify that a particular e-mail address is valid. The matchers usable in a proxy class are described in the Zorp Reference Guide.
![]() |
Note |
|---|---|
Matchers can also be used in custom proxy classes created with the Class editor. |
Zorp has a number of predefined matcher classes; and it is also possible to make complex decisions from the results of individual matchers using the CombineMatcher class. The available predefined classes are listed below.
DNSMatcher : Retrieves the IP address(es) of a domain from the name server specified.
WindowsUpdateMatcher : Retrieves the IP addresses required for updating computers running Microsoft Windows from the name server specified.
RegexpMatcher : General regular expression matcher.
RegexpFileMatcher : Regular expression based matching on the contents of files.
SmtpInvalidRecipientMatcher : Consults a mail server to verify that an e-mail address is valid.
CombineMatcher : Makes complex decisions by combining the results of multiple simple matchers using logical operations.
Apart from the predefined ones, it is also possible to create custom matcher classes. The various matcher classes and their uses are described in the subsequent sections. The use of matchers in proxy classes is discussed in Section 8.9.3.7, Using matcher classes in proxy classes.
DNSMatcher retrieves the IP addresses of domain names. This can be used in domain name based policy decisions, for example to allow encrypted connections only to trusted e-banking sites. If the IP address of the name server is not specified in the DNS Server field, the name server set in the component is used (see Section 7.3, Managing client-side name resolution for details).
WindowsUpdateMatcher is actually a DNSMatcher used to retrieve the IP addresses
currently associated with the v5.windowsupdate.microsoft.nsatc.net,
v4.windowsupdate.microsoft.nsatc.net, and
update.microsoft.nsatc.net domain names; only the IP address of
the name server has to be specified. Windows Update is running on a distributed server
farm, using the DNS round robin method and a short TTL to constantly change the set of
servers currently visible, consequently the IP addresses of the servers are constantly
changing.
![]() |
Tip |
|---|---|
This matcher class is useful to create firewall policies related to updating Windows-based machines. Windows Update is running over HTTPS. For example, there is no real use in inspecting the HTTP traffic embedded into the SSL tunnel (since it is mostly file download), but it is important to verify the identity of the servers. |
A RegexpMatcher consists of two string lists, describing the regular expressions to be found (Match list) and, optionally, another list of expressions that should be ignored (Ignore list) when processing the input. By default, matches are case insensitive. For case sensitive matches, uncheck the Ignore case option.
![]() |
Note |
|---|---|
The string lists are stored in the |
![]() |
Example 8.13. Defining a RegexpMatcher |
|---|---|
|
The matcher below defines a RegexpMatcher called
|
RegexpFileMatcher is similar to RegexpMatcher, only the two lists are stored in separate files. The matcher itself stores only the paths and the filenames to the lists. The files themselves can be managed either manually, or using the FreeText plugin.
This matcher class uses an external SMTP server to verify that a given address (i.e. the recipient of an e-mail) exists. The following parameters have to be specified:
Server name and Server port: The domain name and the port used by the SMTP server to be queried.
Bind address: Zorp uses this IP address as the source address of the connection when connecting the SMTP server to be queried.
Cache timeout: The result of a query is stored for the period set as Cache timeout in seconds. If a new e-mail is sent to the same recipient within this interval, the stored verification result is used.
Force delivery attempt and Sender address:
Send an e-mail to the recipient as if it was sent by Sender
address. If the destination mail server accepts this mail, the original
e-mail is sent. This option is required because many mail server implementations do
not support the VRFY SMTP command properly, or it is not
enabled. (The default value for Sender address is
<>, which refers to the mailer daemon and is
recognized by virtually all servers.)
CombineMatcher uses the results of multiple matchers to make a decision. The results of the individual matchers can be combined using the logic operations AND, OR and NOT. Both existing matcher policies (Matcher policy) and policies defined only within the particular CombineMatcher (Matcher instance) can be used.
New matchers can be added with the button. Each line in the main window of the CombineMatcher configuration panel corresponds to a matcher. To use an existing matcher policy, set the combobox on the left to Matcher policy. After that, clicking the ... opens a dialog window where the matcher to be used can be selected.
![]() |
Tip |
|---|---|
Matchers can also be configured on-the-fly: set the combobox to , click on ..., and select and configure the matcher as required. |
Each matcher can be taken into consideration either with its regular, or with its inverted result using the checkbox. The individual matchers (or their inverses) can be combined with the logical AND, and OR operations. This can be set in the Logic combobox:
If all criteria are met: Corresponds to logical AND; the CombineMatcher will return the TRUE value only if all criteria are TRUE.
If any criteria are met: Corresponds to logical OR; the CombineMatcher will return the TRUE value if at least one criteria is TRUE.
If all criteria are the same: CombineMatcher will return the TRUE value if all criteria have the same value (either TRUE or FALSE).
![]() |
Tip |
|---|---|
A CombineMatcher can also be used to combine the results of other CombineMatchers, thus very complex decisions can also be made. |
![]() |
Example 8.14. Blacklisting e-mail recipients |
|---|---|
|
A simple use for CombineMatcher is to filter the recipients of e-mail addresses using the following process:
|
To actually use the defined matchers, they have to be specified in the proper attributes of the particular proxy class. The proxy classes can use matchers for a variety of tasks. The matchers to be used by the particular proxy class can be added as Changed class attributes.
For example, SmtpProxy can use three different matchers: one to check the relayed domains (e.g.: using a RegexpMatcher), and two SmptInvalidMatchers (one for sender, one for the recipient address verification). For the details of the matchers usable by a given proxy class see the attributes of the class in the Zorp Reference Guide.
![]() |
Example 8.15. SmtpProxy class using a matcher for controlling relayed zones |
|---|---|
|
Resolver policies specify how a given service should resolve the domain names in client requests. This capability is essential when non-transparent services are used, as in these cases the Zorp host has to determine the destination address, and the results of a name resolution are needed. Zorp is also able to store the addresses of often used domain names in a hash. Zorp supports DNS-based (DNSResolver) and Hash table-based (HashResolver) name resolution.
DNSResolver policies query the domain name server used by Zorp in general to resolve domain names. If a domain name is associated to multiple IP addresses (i.e. it has more than one 'A' records), these records can be retrieved by checking the Return multiple DNS records checkbox. (The DNS server used by the Zorp host can be specified on the Resolver tab of the component, see Section 7.3, Managing client-side name resolution for details.)
![]() |
Tip |
|---|---|
Retrieving multiple 'A' records is useful when Zorp is used to perform load balancing. |
![]() |
Example 8.16. Defining a Resolver policy |
|---|---|
|
Python: Below is a simple DNSResolver policy enabled to return multiple 'A' records.
|
HashResolver policies are used to locally store the IP addresses belonging to a domain name. A domain name (Hostname) and one or more corresponding IP addresses (Addresses) can be stored in a hash. If the domain name to be resolved is not included in the hash, the name resolution will fail. The HashResolver can be used to direct incoming connections to specific servers based on the target domain name.
![]() |
Example 8.17. Using HashResolver to direct traffic to specific servers |
|---|---|
|
If a Zorp host is protecting a number of servers located in a DMZ, the connections can be easily directed to the proper server without a DNS query if the hostname – IP address pairs are stored in a HashResolver. If multiple IPs are associated with a hostname, simple fail-over functionality can be realized by using FailOverChainer. The resolver policy below associates the IP addresses
|
Stacking providers are external hosts managed by the Zorp Content Vectoring System (ZCV) performing various traffic analysis and filtering (e.g.: virus and spam filtering). These hosts can be listed as Stacking providers, and easily referenced from multiple service definitions.
A Stacking provider includes the IPv4 or unix socket of the host performing the analysis of the traffic. If multiple hosts are set in a single policy, they will be used in a fail-over fashion, i.e. if the first host is down, the traffic will be directed to the second one for analysis, etc.
To specify an IPv4 socket, the IP address and port of the host has to be specified. To specify a unix domain socket, the full path (including the actual filename) has to be provided.
For details about ZCV and the configuration and use of stacking providers, see Chapter 16, Virus and content filtering using ZCV.
ZMC provides a status window to monitor the active connections of an instance (for information on instances, see Section 8.5, Zorp instances). This interface is accessible by selecting an instance and clicking the item of the drop-down button on the Instances tab of the Zorp ZMC component.
![]() |
Tip |
|---|---|
Multiple instances can also be selected. |
The Active connections window displays the following parameters of the active services within the instance:
Name: Name of the service (e.g.:
intra_HTTP_inter).
Proxy module: Name of the proxy (e.g.:
MyHttpProxy).
Proxy class: The proxy class from which the proxy module used in the service definition was derived (e.g.: HttpProxy).
Client address: IP address of the client.
Client port: Port number of the client.
Client local: The IP address targeted by the client.
Client local port: The port targeted by the client.
Client zone: The zone the client belongs to.
Server address: IP address of the server.
Server port: Port number of the server.
Server local: The IP address used by Zorp on the server-side (the server sees this address as client address).
Server local port: The port used by Zorp on the server-side (the server receives the connection from this port).
Server zone: The zone the server belongs to.
![]() |
Note |
|---|---|
The Proxy class and Proxy module parameters are empty for packet-filter services. |
The list of active connections is not updated real-time, it is only a snapshot. It can be updated by clicking . The displays the configuration of the selected service on the Services subtab of the Instances tab.
The Active connections window is a Filter window, thus various simple and advanced filtering expressions can be used to display only the required information. For details on the use and capabilities of Filter windows, see Section 5.3.10, Filtering list entries.
Zorp can automatically create daily, weekly, and monthly statistics about the transmitted traffic, and send them to an administrator or auditor via e-mail. The reports are in Adobe Portable Document (PDF) format. Note that these reports do not provide detailed statistics about every host on your network, rather they can be used to identify the most active hosts ("top-talkers") and to examine trends and sudden changes in the statistics (outliers).
In general, every section of the report consists of a table that details the ten most
active clients (e.g., the ten clients who transferred the most data in a zone) and a pie chart
that displays every client. Note that on the pie chart, only the clients responsible for at
least ten percent of the total value are labeled, all other clients are aggregated under the
Others label.
![]() |
Note |
|---|---|
Every Zorp host, and every node of a Zorp cluster creates and sends a separate report. Reporting options must be configured on every Zorp host separately. |
The reports include the following information:
Network Traffic: Traffic statistics for the entire network.
Zone Traffic: Traffic statistics for every zone defined in Zorp. Note that this report can be long if there are many zones defined.
Mail Delivery Traffic: Statistics for the total transferred SMTP traffic, as well as for the most active accounts. Top senders and recipients are listed separately.
Spam and Virus Reports: Statistics about spam and infected e-mails.
Access Control Reports: Statistics about connection-attempts that were blocked by Zorp.
URL Reports: List of websites generating more than a set amount of traffic, and a list of their top visitors. By default, ULR Reports are not included in the regular reports, see Procedure 8.11.1, Configuring Zorp reporting for details on configuring them.
8.11.1. Procedure – Configuring Zorp reporting
Login to the Zorp host locally, or via SSH, and edit the
/etc/zorp/reports/options.conf file. Alternatively you add this
file to the Text Editor plugin of ZMC (see Procedure 10.1.1, Configure services with the FreeText plugin for
details).
Enter the e-mail address where the reports should be sent into the
ADMINEMAIL field.
Enter a name for the daily, weekly, and monthly report files into the
TITLE_DAILY, TITLE_WEEKLY, TITLE_MONTHLY fields.
By default, the reports do not include statistics about visited websites. To include
statistics about visited websites and the clients who visited them, enter a positive
number into the URLS field. URLs that generate traffic higher than
this value in megabytes will be included in the reports. For example,
URLS=1024 will include every website that generates at least 1GB
traffic. The direction of the traffic does not matter, uploads and downloads are added
together.
Save the file.
![]() |
Warning |
|---|---|
The reports are only sent to the e-mail address set in
|
![]() |
Tip |
|---|---|
To generate reports manually for arbitrary time periods, use the report.py command-line tool. Run report.py without parameters to display the available options and parameters of the application. |
Firewall design and implementation generally require the presence of a subsystem that is responsible for accountability. This subsystem stores information on user and administrator activities performed on or via the firewall and must be configurable to provide exactly the amount and type of information needed which, on the other hand, is usually defined by the corporate IT Security policy.
This requirement in computer systems is typically fulfilled by a logging subsystem. Logging is the act of collecting information about events in the system. The result of logging can be the following.
one or more log files (binary or text-based files)
the console
rows in a database table if logging is set up to use a database as the output store
These log files are archived for event–tracking purposes. Apart from a simple, automated archiving procedure, however, these log files must be continuously analyzed. Logging records user and system activities in (quasi) real-time, so a continuous analysis is capable of detecting malicious user activities or system malfunctions as they happen, thereby allowing for an effective and quick response policy.
In security-sensible systems, such as the Zorp firewall, logging must be a system–wide action, that is, all the relevant components of the system provide logging information, or log entries. Then, there must also be a central component, a logging subsystem, that collects log entries from the various system components and organizes them into a log file of some format (the term file is used literally here and does not necessarily mean a text or binary file: it is simply the output of logging that can be a database, the console or some input queue on another machine as well). It would not be practical nor economical for all the components to manage their own log files. It would waste system resources (more open file handles, database connections or network sessions, depending on the output destination used) and would make analysis cumbersome (hunting for information in many separate log files that would probably be syntactically incompatible).
In Zorp, centralization is elevated to a higher level: the logs of the central logging subsystem on all machines are unified on a network–wide dedicated central logging machine. This way log analysis, reporting and archiving is more simple even for larger networks with many entities providing logging capabilities.
These requirements have, in part, long been targeted by the Unix syslog subsystem. For decades, syslog was the ultimate central logging subsystem for Unix and Linux machines. It is an old and rather unreliable technology and lacks some flexibility and security features that are required in today's demanding network and security environments. Therefore, a replacement service called syslog-ng, where ng stands for next generation, has been created. Syslog-ng inherited all the concepts, features and most of the naming convention from syslog and enhanced it with many new features targeting flexibility and security requirements. Zorp uses syslog-ng as its logging subsystem.
The following sections include a short introduction to the concepts of syslog-ng, and describe how ZMS works with syslog-ng and how this subsystem can be managed with ZMC.
Syslog-ng allows for very flexible logging scenarios, therefore its configuration requires some attention.
The syslog-ng runs as a daemon process and collects information from various log sources. Depending on the options and filters configured, syslog-ng saves the received log entries to destinations specified. The configuration of syslog-ng mainly means setting up its components correctly.
The components of syslog-ng are the following:
Sources
Options
Filters
Destinations
Syslog-ng configuration is stored in a text-based configuration file, which is typically
the /etc/syslog-ng/syslog-ng.conf file. ZMC hides the exact structure of
this configuration file and takes care of the correct syntax, thereby allowing you to
concentrate on the actual configuration tasks. Still, since syslog-ng is present in ever more
Linux/Unix distributions, it may be beneficial to know the syntax and contents of this
configuration file as well. In addition, syslog-ng allows for centralized logging from
machines not necessarily under the control of ZMS, in which case configuring syslog-ng means
manually editing the corresponding configuration file.
Syslog-ng.conf has a C-like syntax with curly braces ({}) separating
integral code parts and with semicolons (;) for closing expressions. Comments are marked with
hashmark (#).
It is possible to provide syslog-ng with global options that affect all the logging commands, although they can be overridden, if needed. For further details, see section Section 9.2.2.3, Configuring destinations.
There are several different options available, some of them especially useful when dealing with log entries coming from other machines on the network. By default, these entries are recorded using the sender host's IP address, but using options use_fqdn, use_dns, chain_hostnames and keep_hostname it is also possible to look up hostnames for servers generating log entries.
For a full list of the available options and their descriptions, see Appendix 3, Further readings.
Various system components do not output log entries in a unified format or method. Some of them output to files while others use a pipe, or use a unix-stream. Some can even be configured to use a certain output method. These output methods are used as sources for syslog-ng, from which it is able to accept log entries.
Syslog-ng supports seven different source types which are the following:
internal
This source can be used to catch log entries from syslog-ng itself.
file
This source is for log entries from a special file, like
/proc/kmsg.
![]() |
Note |
|---|---|
Note that a file source cannot be an ordinary text file, e.g. one generated by httpd. However, it is possible to feed syslog-ng with messages from such a file indirectly: a custom script is needed, for example, which uses tail -f to transfer messages from the desired logfile to the logger utility. |
pipe
This source is for messages from a pipe.
unix_stream
This source is for log entries from a connection–oriented socket.
unix_dgram
This source is for log entries from connectionless sockets.
tcp
Log entries from remote machines that use TCP for log entry submission.
![]() |
Note |
|---|---|
One of the advantages of syslog-ng over traditional syslog is that it can handle tcp connections. |
By default, syslog-ng uses TCP port 514.
udp
Log entries for remote machines that use udp for log entry submission.
By default, syslog-ng uses UDP port 514.
Of all the possible sources unix_stream and unix_dgram are probably the most important when dealing with local components' log entries because the most important system components, like the kernel and many of the daemon processes use one of them for recording log events.
Syslog-ng can send log messages to eight different destinations which are listed below.
file
This destination is an ordinary text file. It is possible to use macros in filenames, thus you can create dynamic file names.
tcp
This destination designates a host, specified by its IP address or FQDN. The default destination port is 514.
udp
This destination specifies a remote machine as the destination for log messages, using the udp protocol. The default destination port is 514.
pipe
This destination is a named pipe.
unix_stream
This destination specifies a connection–oriented unix socket as a destination for
log entries, for example, /dev/log.
unix_dgram
This destination is a connectionless unix socket destination.
usertty
This destination sends log messages to the terminal of a given user; username is given as a parameter of usertty.
program
This destination means the standard input of a given program.
To fine-tune what log entries are needed or how they are separated to different destinations, it is possible to use filters in syslog-ng configurations. Although their use is optional, they are highly recommended since they represent the real flexibility of syslog-ng.
Filtering can be set using seven different criteria that are summarized in the following list.
The type of messages referring to the nature of the log entry, like auth, cron, daemon, kern, mail.
The assigned priority level of the log message.
The possible priority levels are the following in order of severity: none, debug, info, notice, warning, err, crit, alert, emerg.
The same as priority.
The name of the software component that generated the log entry.
The machine from which the log message arrived.
A regular expression that is compared to the contents of the log message
Additional filter.
Combining these elements you can set up manually a fairly complex logging environment in a couple of lines of “code”, with basic knowledge on the syntax of syslog-ng rules. If you use ZMC, ZMC takes care of the correct syntax and allows you to focus on the actual rule creation process.
For more detailed information on syslog-ng, see Appendix 3, Further readings.
Syslog-ng has a separate configuration component, System logging in
ZMC that you can add like all the other components for hosts.
Before adding the component you have to create a template for it.
9.2.1. Procedure – Configure syslog-ng
Choose a template for the System Logging component.
Three templates are offered. The minimal template is fairly minimal. If you originally
jailed bind and/or ntp during Zorp installation, select the chroot template,
because a jailed bind or ntp logs into its chrooted environment, which is, by default,
/var/chroot/bind(or ntp)/dev/log. This is mirrored in the
syslog-ng.conf file that this template creates for you.
View this initial configuration file by selecting the system logging component of a given host and click the button.
![]() |
Tip |
|---|---|
Since syslog-ng is so popular in the Linux/Unix community and you are ever more likely to meet it in configurations where only character-based configuration is possible, it is a good idea to learn the syntax here, where ZMC autogenerates it correctly for us. |
As you can see in the figure above, the configuration starts with enlisting the sources of
log entries you are interested in. Here a source, s_base is defined,
which consists of four elements: internal, for syslog-ng's own log messages, a unix_stream for
/dev/log and two streams for the chrooted native proxies
bind and ntp. Next, a single destination is given,
named d_syslog, which is actually a file:
/var/log/syslog(if you check this file on a Zorp machine,
you can see that by default, it is not a real file, but only a link to
/var/log/messages, so all log messages by default end up there).
There are many different options configured for this file and some variables (macros) are used in the creation of it. After specifying the destination comes the actual logging command, log. Its parameters are simply the source and destination that have just been defined. At the end of the file there are some global options that give additional instructions to syslog-ng, for example not to resolve hostnames for machines submitting log entries, or not to change the timestamp of messages to the (local system) time of their arrivals.
Note that by default, no filters are used.
This syslog-ng configuration, though functional, is unlikely to satisfy most organizations' logging needs or requirements, so the following section shows how to fine-tune it with the help of ZMC.
The main configuration window of the system logging component consists of five tabs, corresponding to the five main components of a syslog-ng configuration.
The only tab that needs some explanation is the first one, Routers.
This tab is used to assemble the actual log commands from the other components, so a router
actually represents a log command entry in the syslog-ng.conf file.
Therefore, during a configuration cycle, you are recommended to visit and configure the
Routers tab last. First, configure the Global
options tab to set up system-wide defaults, then you can continue with the
Sources and Destinations tab.
9.2.2.1.1. Procedure – Set global options
Configure parameters for I/O operation optimization.
File I/O is always expensive in terms of system time needed, so theoretically the number of (log) write operations should be minimized, keeping a number of incoming log entries in a memory buffer and batch-write them out to disk.
![]() |
Note |
|---|---|
This buffer and thus the time between successive log write-outs cannot be too long because in case a hardware malfunction occurs and the machine has to be rebooted, the log messages that have not been written out yet are lost. |
Time-related parameters are given in seconds. Message size is in bytes, while message queue size is an item number.
Set system time usage.
Macro substitution is possible in syslog-ng, for example when creating filenames. If you use system time as a macro variable, the default is to use local system time on the syslog-ng server that processes the log entries. If, instead, you want to use time values received in the log messages themselves, check the Use received time in macros checkbox.
Configure file creation.
If you configure file creation to use many different directories that do not yet exist, the Create directories automatically checkbox can be used to create them as needed.
Configure the required parameters.
The list of other configurable parameters in this tab includes the following.
Defining the allowed maximum size for log messages.
Defining the allowed number of messages waiting to be processed.
Setting the syslog-ng's internal reporting interval. Syslog-ng reports a number of parameters on its own operations and statistics.
Setting the regularity of marking timestamps by the syslog daemon.
Defining how often log messages are written out from memory.
The default '0' means there is no time delay, messages are written out continuously.
Defining after how long non-usage time the log files are closed.
Setting how often a log file can be opened again.
Assign owner and permission parameters to log files and directories created by syslog-ng.
By default, syslog-ng runs as root, but can be configured to run as a limited user as well. In this case you have to set the appropriate permissions, or use the defaults.
Set name resolution for syslog-ng.
Machine identification in log entries is accomplished using IP addresses. If you want to use hostnames that are easier to remember and recognize, you can instruct syslog-ng to perform name resolution. This name resolution only works for resolving the IP addresses of hosts sending log entries.
If there are IP addresses within the log messages themselves they are not resolved this way. To perform name resolution for those addresses, a log analyzer utility is needed. Name resolution is a time-consuming process and to achieve the best results, use a DNS server that is “close” to the syslog-ng server in terms of response time.
On the other hand, log entries are typically coming from a limited number of machines (servers) and their IP addresses tend not to change. Therefore, it is reasonable for the syslog-ng server to cache their resolved names locally, thus easing the heavy reliance on a DNS server.
You can configure DNS caching as a global option. The time values are in seconds, cache size is in bytes. File options can be changed in individual file destination configurations, but name resolution options cannot, they are always global.
Sources are collections of communication channels where log entries can arrive. A source in syslog-ng can consist of one or more drivers. Driver is the actual communication channel that must be monitored for log messages.
By default, using one of the default templates, there is an internal driver for
syslog-ng's own log messages, and there are three unix-stream drivers for
/dev/log, , respectively.bind and
ntp
The default source is called base. To configure new drivers, either define them under this default source or create new sources. A source must always contain at least one driver.
9.2.2.2.2. Procedure – Create drivers
Click on the Drivers subwindow on
the Sources tab in System logging component.
The following window appears.
Select a driver type.
The rest of the options are based on this selection.
For unix_dgram, unix_stream, sun_stream and file driver types, set the filename.
![]() |
Note |
|---|---|
None of these driver types are ordinary text files. File is a binary file while the others are socket endpoints, actually. Nevertheless, they are identified by filenames. |
If you have a custom system component, a daemon, for instance, that sends its
log messages to a special socket and you want syslog-ng to collect this
component's log messages, set up a driver for it. Many of the Linux daemons and
other software components prefer /dev/log but it is not a
central requirement. Some software can even be told via its configuration file
where to log.
For TCP and UDP source drivers, specify an IP address and a port number.
The machine running syslog-ng waits for log messages from other servers on this IP address/port pair. In other words, here you do not specify where, that is, what machines, log entries arrive from, but on what IP address/port pair syslog-ng collects these log entries.
The default port for both TCP and UDP is 514.
For TCP drivers some additional parameters can be supplied.
Since TCP is a connection–oriented protocol, a virtual session is always established between the communicating parties. This session buildup takes time and bandwidth (three-way handshake), so to save on these resources, if a session is built between syslog-ng and the host sending log entries, it is kept alive with the help of keep alive messages. However, if the number of active TCP sessions is high, it can have negative effect on the performance of the host running syslog-ng. On the other hand, if the number of sessions is kept low, using the Connection limit setting, some log messages may be lost if the connection limit has already been reached.
Another small optimization setting is the Do not close during reload checkbox: it instructs the system not to close open TCP sessions while syslog-ng configuration is reloaded.
These two settings are available for the unix_stream driver type as well.
The logic behind destination configuration is the same as with sources configuration. You can create one or more destination directives and fill them with drivers specifying the actual channels on which log messages are recorded.
The available destinations are the following.
Filename
TCP
UDP
Pipe
Program
Program specifies the input of a software, typically a script, that can perform an action based on the input log message it receives.
![]() |
Tip |
|---|---|
This may be a good solution to set up an alerting mechanism. |
Unix_dgram
Unix_stream
Usertty
Usertty is a terminal to which log messages can be displayed; it is meaningful as a destination if there is someone actually monitoring that terminal, or the named terminal is routed to some other, special destination.
The UDP and TCP driver types need some explanation:
Host and Port define the destination of log messages on the network, while Bind IP and Bind port specify where (in which direction) the log messages are sent out from the host. This is especially important for firewalls which almost always have two or more interfaces and a number of IP addresses.
File destination also has some important properties that need some explanation:
Most properties are present also on the Global options tab: many of the global options can be overridden in file destination setup. For the descriptions of the properties, see section Section 9.1.1, Global options.
A special property is the Message template. This property can be
used to apply some basic formatting on log messages: according to the example given on
Figure 9.11, Macro substitution in file naming, all log messages that end up in
/var/log/syslog have a timestamp ($ISODATE) and
a hostname ($HOST) inserted before the actual log message
($MSG). This is the default behavior in Zorp.
![]() |
Note |
|---|---|
The Message template property is not to be confused with macro substitution in filename creation. Message templates can format actual log messages, while macro substitution can format log file names. |
For example, if you want to create a new logfile every day, modify the filename property on Figure 9.11, Macro substitution in file naming the following way.
An optional component of syslog-ng configuration is filter creation. Filters can be used to pick log entries from defined sources with the possible intent of sending selected log entries to different destinations.
![]() |
Example 9.1. Selecting log messages from Postfix using filter |
|---|---|
|
The following is a trivial filter to select log messages coming from Postfix: filter f_postfix{program(“postfix”);}; |
Filters can use regular expressions in a match criteria and a number of other criteria
as well. For a complete list of criteria, see Section 9.1.4, Filters. Due to
the flexible nature of filters, it is almost impossible to create a usable GUI to
interface them. Therefore, the Filter tab of the System
logging component is quite simple.
9.2.2.4.1. Procedure – Set filters
Create one or more filters.
See Section 9.2.2.2, Configuring sources and Section 9.2.2.3, Configuring destinations.
Set up a rule for each filter in the Filter rules textbox.
ZMC aids in filter creation by taking care of the necessary curly braces ({}) and semicolons (;).
So to create a syntactically correct postfix filter, only enter the filter rule textbox the following part:
program(“postfix”)
For further information on possible filters, see Appendix 3, Further readings.
Logging rules are called Routers in syslog-ng terminology. Rules consist of a source,
optionally a filter and a destination. The Routers tab of the
System logging component represents this philosophy well.
Just like sources, destinations and filters, more than one router can be present in the system. If you use several routers, you are recommended to apply a good naming strategy to easily identify your log rules.
9.2.2.5.1. Procedure – Configure routers
To create a router click on .
Provide a name for the new router.
Select the components from the list of available sources, filters and destinations.
![]() |
Example 9.2. Setting up a router |
|---|---|
|
If you select log { source(s_base); filter(f_postfix); destination (d_syslog);flags ( ); }; |
Specify flags for the router.
The flags component is empty. Use the checkboxes at the bottom to select the flag. Three possible flags are available.
Final flag, meaning that the processing of log statements ends at this point.
![]() |
Note |
|---|---|
Ending the processing of log statements does not necessarily mean that matching messages are stored once, as there can be matching log statements processed prior to the current one. |
Fallback flag, making a log statement 'fallback'. Being a fallback statement means that only those messages that do not match any 'non-fallback' log statements are dispatched.
Catchall flag, meaning that the source of the message is ignored, only the filters are taken into account when matching messages.
There are virtually endless possibilities for configuring a complex system logging architecture with syslog-ng. This chapter focused only on the basics and provided an architecture that not only means Zorp and ZMS host nodes, but syslog-ng architecture can also include practically any favor of Unix/Linux machines.
For further information and details, see Appendix 3, Further readingsfor additional Syslog-ng documentation.
All the essential parts of Zorp configuration have a corresponding custom configuration component in ZMC. For custom, auxiliary services that are not part of the default Zorp configuration but installed separately, for example, a Snort Intrusion Detection System (IDS) service, ZMC provides a generic tool, the FreeText plugin configuration component to edit text-based configuration files. Since practically all Unix services work with text-based configuration files, the Freetext plugin can be used to configure all of them remotely.
Although the FreeText plugin provides only a simple text editor functionality, if you use this tool to configure the custom services, they are placed under the control of ZMS. From ZMC, the configuration changes are first committed to the ZMS server and stored there. After an upload command, these configurations are handled by the zms-transfer-agent on the corresponding Zorp firewall. So any service installed over ZorpOS are, in effect, ZMS-managed.
The number of freetext plugins is not limited, you can add as many of them as needed. Furthermore, a single plugin can be used to edit more than a single text file.
The FreeText plugin in ZMC is called Text Editor. It can be added to
the list of configuration components the usual way.
10.1.1. Procedure – Configure services with the FreeText plugin
Select a configuration template.
By default, there are some predefined configuration templates available, these are actually configuration file skeletons for the given services.
Unless you want to configure DNS or NTP services, select Text editor minimal template.
The following configuration window appears.
Supply Text component name.
This parameters sets a label for the component.
Give Component configuration file name.
Component configuration file name refers to the actual configuration file on the host that you want to edit.
It is most likely a file in /etc or in one of its subdirectories
since this is the default location for configuration files under ZorpOS.
Set Component init script.
Component init script refers to the script file or a link to it that is used to start
and stop a given service. Without providing this file you cannot start/stop the service
from ZMC. These scripts are installed in /etc/init.d.
![]() |
Note |
|---|---|
You do not need to enter |
Click after setting the necessary parameters.
The main window of ZMC reappears with an empty component pane. This is normal; before working with the desired configuration file it is possible to download the content from the selected host.
Download and edit content from the selected host.
Use the following button in the button bar to download the file to ZMC: 
You can edit the configuration file.
Propagate the modifications to the firewall.
The steps are identical to that of the other components: commit the edited file to ZMS and then upload it to the host. Finally, the service can be started/stopped/restarted or reloaded the usual way.
Besides the file download option, the FreeText plugin provides some unique features compared to the other components.
10.1.2. Procedure – Use the additional features of FreeText plugin
To simplify working with configuration files, you can insert pre-created configuration
file segments with the help of the
button on the button bar.
![]() |
Note |
|---|---|
The file to be inserted must be present on the ZMC machine. If you insert more than one files, they appear concatenated in the main workspace. |
You can create new files with the button on the button bar.
If you create more than one file, they appear on different tabs in the main workspace of the freetext plugin. This way a single plugin can host several different files.
You can remove configuration files with the button.
By default, the button only removes the configuration file from the ZMS database. If you want to remove the file from the host as well, check the appropriate checkbox in the Remove dialog box.
You can also place links to linkable objects of the configuration in a file, if you right-click in the main workspace of the freetext plugin and select Link... from the local menu.
![]() |
Note |
|---|---|
There is no restriction on what file can be administered via the freetext plugin except that it must be a text-based file. |
Zorp is not just a firewall service to be installed on any Linux machine but a complex solution that also addresses other areas of security and networking. In particular, it is built on ZorpOS, a hardened Linux-based operating system that is supported just like the firewall software itself. ZorpOS includes some service components that are typically useful in networking environments where Zorp is introduced. These are BIND for DNS traffic, NTP, and Postfix for SMTP traffic. The use of these services is not mandatory, however, they can help solving three particularly problematic issues of network configuration. Once configured, access to these services (so called local services), as well as remote SSH access to the Zorp host must be enabled separately by adding a local service. See Section 11.4, Local services on Zorp for details.
For enhanced security, these services run in a chrooted environment, otherwise known as a
jail. A jail is a special, limited directory structure where the service executables and all the
accompanying files, such as configuration files, are installed. The service that is jailed can
only access this limited part of the file system hierarchy and is unaware of the rest of the
file system. The 'chrooted environment' is a virtual subtree of the full file system, and the
top of this subtree is seen by the chrooted (jailed) service as the root
'/' directory. From the service's point of view, the jail is a complete
file system in the sense that it contains all directories the service needs access to. For
example, if the service needs a library from /lib or from
/usr/lib, these two directories together with the actual
lib files needed are included (copied) in the jail environment. The jail
isolates the service from the rest of the system, so even if its security is compromised, it can
only destruct the jail and cannot affect the rest of the system.
BIND is the industry standard DNS solution used in the vast majority of Linux/Unix based name resolution services. It has three different “branches”, ISC BIND 4, 8 and 9, the most advanced development taking place in the ISC BIND 9 branch.
ZorpOS includes a ISC BIND 9 version installed. BIND in ZorpOS is a full implementation of the most up-to-date version of the 9 branch, so theoretically it is possible to configure it for any DNS server role. It is hosted on a firewall, however, such liberal use of BIND is not recommended. Instead, it should rather be used as a limited-purpose DNS server. The following two examples are such possible configurations.
![]() |
Example 11.1. Forward-only DNS server |
|---|---|
|
In this scenario, BIND does not store zone information of any kind, instead, it simply forwards all name resolution requests to a designated nameserver located elsewhere. This way, BIND configuration and maintenance is minimal while name resolution traffic is optimized: BIND caches resolved name-to-IP address mappings, thereby saving some bandwidth and improving name resolution speed. This setup is especially recommended for small to medium-sized networks where DNS zone information of the company is maintained off-site, typically at an ISP, and thus maintaining a dedicated nameserver only for Internet name resolution is not economical. In this setup BIND operates essentially as a DNS proxy. |
![]() |
Example 11.2. Split-DNS implementation |
|---|---|
|
In this setup two sets of records on the DNS server are maintained:
With this setup it is possible for the company to both maintain its own public DNS zone records (SOA, NS, MX and A records for hosts running popular services like www or ftp) and some internal DNS records for servers that are (and must be) available for internal users only. This setup is recommended for companies wishing to host their own DNS zone database but the number of external name resolution requests does not facilitate the use of a dedicated DNS server. |
Since BIND is always jailed in Zorp, its configuration on the firewall host is stored
under /var/chroot/bind9/etc/bind/, where the most important file is
named.conf. This is the general configuration file. Zone database
information is stored in db.domainname files under the same directory.
ZMC does not offer a dedicated component to edit BIND configuration, instead, the
Text editor component offers preconfigured templates for this task.
Add the Text editor as a new component.
Select a template to be used with the Text Editor.
Select one of the first two templates depending on whether your want a split DNS configuration or not.
Click .
Configure the basic settings in the opening window.
Provide Domain Name Service name.
This parameter simply specifies a label for the component that appears in the components pane.
Specify Query source.
This parameter defines where the outgoing name resolution requests originate on the firewall.
![]() |
Note |
|---|---|
|
Prior to BIND 8.1 the source port was 53 (just like the destination port), but since then BIND uses a port from the dynamic range, which, in ZorpOS, is 5300 by default. This might be important in back-to-back firewall configurations where there is another firewall in front of this instance of Zorp. To allow outgoing DNS requests, the front firewall must know the source port used by the BIND service. |
Besides supplying an alternate port number, you can supply a fixed IP address of Zorp if it has more than one in the required direction. If this setting is not relevant in your network environment, choose the IP address of the outside interface.
Define Forwarders.
This parameter is configurable mainly because the most common role of the BIND native service of ZorpOS is that of a forward-only nameserver. If you configure a forwarder, this BIND service does not resolve names recursively on the Internet but instead it forwards all name resolution requests to the DNS server specified as the forwarder.
After entering values for these parameters the first round of BIND configuration is ready, a functional forward-only nameserver is in place.
To permit access to the BIND service, enable the dns local
service. If you plan to host zone database information on the Zorp Gateway, enable the
dns-zonetrans local service as well. See Section 11.4, Local services on Zorp for details.
![]() |
Note |
|---|---|
If you use zone transfer, be careful with selecting which zones you accept zone transfer requests from. |
If you go back to the DNS configuration component you can see the
structure of the named.conf file with the values entered for
query-source and forwarders.
In addition, this tool is suitable for editing the named.conf file
only. If you want to host zone database files ( db.domainname) on the
firewall, you can edit the files separately if you create a new file in the Text
Editor component. However, for forward–only nameserver configurations editing
the named.conf file is generally sufficient.
Setting up a split DNS service is useful in networks where both external and internal name resolution is performed using the same DNS server – in this case the Zorp firewall. Since hiding the internal namespace from external visitors is a basic security requirement, you have to set up the DNS service in a way that it does not resolve internal names for external resolvers. In other words, for all DNS zones stored on the server you have to specify which networks can query for records in the given zone.
Add the Text Editor component.
Select the split-dns template.
Two skeleton files are created, a named.conf
and a named.conf.shared.
The named.conf.shared file holds records and
configuration settings that are shared between external and internal name resolution
operations, while named.conf has options to specify
internal and external networks ( internalips and
externalips). These networks can then be referenced in db.domainname file(s) to specify which networks can have
access to what records.
For more information on split-dns configuration and DNS configuration in general, see Appendix 3, Further readings.
Accurate timekeeping is very important for firewalls. Without reliable time data, security log analysis is very difficult and can lead to false results. Besides, if the firewall provides any auxiliary services that use timestamping, for instance, a mail service, false time values can be disturbing, too. One of the few things that are still operating in the original, free and liberal spirit of the Internet is the Network Time Protocol service. There are a number of timeservers on the Internet that allow free connections from anywhere. For a complete list, see Appendix 3, Further readings.
Companies typically connect to a Stratus 2–level timeserver on the Internet and then distribute time within their organization from a single time server source. Using the native NTP service Zorp can function as a central timeserver for the entire organization, if needed. This service generally does not put a heavy load on the machine, nor does it pose a significant security risk, so it is generally acceptable to use Zorp as a timeserver for the internal machines.
Unlike application proxy plugins, native services operate as feature–complete software components, so the NTP component in Zorp is a real NTP server. NTP is generally not suitable for proxying, since the latency of the proxy component would not be constant but load–dependent rather. Packet filtering could work for NTP but application–level handling of traffic generally offers a higher level of security. NTP is handled by a native service based on these reasons.
NTP has a separate configuration component in ZMC. Similarly to BIND, this service is always jailed.
Add the Time component to the Zorp host in ZMC. It is
recommended to select the Date and time chrooted template.
Name the component.
Specify a time server with which Zorp synchronizes its system time.
Configure the Time subcomponents. Date and time can be updated from the specified time server by clicking , or set manually.
Set date and time information manually, using the three-dotted (...) button.
If you click the buttons, a dialog box warns you that instead of setting date and time information manually, you should force an update from the configured timeserver with the ntpdate command. To synchronize the time to the time server, click the button in the bottom of the window.
You are recommended to use ntpdate instead of manually tuning date and time values because the Internet time is probably more accurate than other, local time sources.
If you want to permit your clients to synchronize their clocks to the Zorp host,
enable the ntp local service. See Section 11.4, Local services on Zorp for details.
List the NTP servers Zorp can communicate with.
For time synchronization fault tolerance, you are recommended to add at least two servers to the list. Click and enter the address of the NTP server, as well as the interval when the clock of the Zorp host should be synchronized to the NTP server.
The status of the configured time servers is indicated by leds of different colors before the name of the server. Hovering the mouse over a server displays the following statistics about the connection in a tooltip (for details on these values see Appendix 3, Further readings):
Tally code:
Ref. ID: The reference ID (0.0.0.0 if unknown).
Stratum: Place of the server in the 'clock strata' hierarchy. Stratum 1 systems are synchronised to an accurate external clock; stratum 2 systems derive their time from one or more stratum 1 systems, and so on.
Type: The type of the peer (local, unicast, multicast or broadcast).
Last arrived: The time when the last packet was received.
Polling interval: The period between two queries in seconds.
Reachablility: Register indicating the reachability of the peer. A peer is considered reachable if at least one bit in this register is set to one.
Delay: The current estimated delay in milliseconds.
Offset: The current estimated offset in milliseconds.
Jitter: The estimated time error of the peer clock (measured as an exponential average of RMS time differences).
SMTP mail handling in Zorp is very flexible and is designed to allow for as many different e-mail “needs” as possible. Based on the size, profile and security requirements of a company, there are a number of configurations possible for handling email traffic.
Very small companies trust their ISP to host SMTP service for them and only connect with a mail retrieval (post office) protocol (POP3 or IMAP) to download the mail and use the ISP's mail server as their outgoing SMTP server. Larger companies may have their own SMTP server but still use the ISP's mail server as their official mail exchanger and only relay mail between the two. Companies needing maximal protection have a fully functional, DNS-registered mailserver. The next level is companies with a sophisticated mail routing architecture, multiple domains and complex email traffic rules.
Zorp aims to provide protection support for all types of SMTP requirements. It has a proxy class for SMTP that is the primary tool for handling SMTP traffic. It is not a fully functional mail server but a fully transparent filter module rather. It does not send and receive SMTP mail messages and it does not have a local mail store either. This proxy can interoperate with antivirus software for filtering viruses in SMTP traffic. With the SmtpProxy or a customized, derived version of it most SMTP firewalling needs can be fulfilled.
There are, however, cases when simply proxying SMTP traffic is not enough and some more intelligent mail handling procedure is required due to the organization's special needs.
![]() |
Example 11.3. Special requirements on mail handling |
|---|---|
|
For such cases Zorp, more exactly ZorpOS, contains a fully functional Postfix service besides the SmtpProxy. Because it is fully functional, virtually any setups and configurations possible with a Postfix mail server are also possible here. It does not mean that Zorp should be operated as a generic mail server for users, only that sophisticated SMTP configurations are possible with it.
![]() |
Note |
|---|---|
There is no mailbox protocol server program in ZorpOS by design since the firewall is not intended to be operated as a POP3 or IMAP server. |
Another use of the postfix component is to provide SMTP delivery service for local services, like syslog-ng and others that need be able to send mail. Local delivery of e-mail, however, should not be allowed, if possible.
![]() |
Note |
|---|---|
The Postfix native service is not intended to replace the SmtpProxy application proxy in SMTP–handling configurations. |
Even if the configuration options of SmtpProxy are not adequate, it is still recommended to be the SMTP mail handling 'front-end' at the firewall which, after proxy-level filtering, passes SMTP traffic to the Postfix service.
Because possible uses of the Postfix component are so versatile, it is impossible to cover even the most typical ones in this chapter. Nor is it a firewall administrator's task to set up a complex mail routing architecture, therefore only a brief introduction of the configuration interface is presented. For more information and details on Postfix, see Appendix 3, Further readings.
You can accomplish Postfix configuration via a set of configuration files represented by
the Mail transport component. This plugin has five tabs, corresponding
to configuration files in /etc/postfix on the firewall.
Add the Mail transport component to the Zorp host in ZMC.
Select a template suitable for your needs, e.g.: the Mail transport
default template.
Open the configuration tabs.
Specify parameters in the General tab.
Give My domain.
It specifies the DNS domain of Zorp which, in turn, defines what domain it receives mail for. Receiving mail for other domains is also possible. For details, see Appendix 3, Further readings for a reference on mail administration.
Enter My Hostname.
It is obviously the name of Zorp, exactly as it is registered in DNS. The MX record in DNS must point to this name, so it is important to specify it correctly.
Give My networks.
It specifies what IP networks Postfix accepts outgoing mail from, in other words, for which networks it acts as a mail relay.
![]() |
Note |
|---|---|
Unless explicitly required by your networking requirements, do not to list all your internal networks, that can result in all your hosts being able to send mail individually and directly, which is a bad idea from a security aspect. Viruses, for instance, usually contain an SMTP component for sending mail that should not be let through the firewall. |
If you only have a single mail server for handling external SMTP messages, list the mail server's single IP address. Correspondingly, list only those network interfaces of Zorp as Listen interfaces, on which you want to handle incoming mail traffic.
The rest of the parameters on the General tab are more special settings and their use depends on the configuration needs.
Configure settings on the Master tab.
Configure the settings if you have a Mail Scanner or Amavisd-new–based antivirus solution.
The Master tab of the Mail transport component corresponds to
the /etc/postfix/master.cf file.
Configure settings on the Maps tab to add transport and virtual maps to Postfix.
In order to route incoming mail from Zorp to different, internal mail domains, an SMTP transport map can be provided, with the IP address of the real, internal mail servers serving the given mail domains.
Configure the Checks tab.
This tab covers two Postfix configuration files,
/etc/postfix/header_checks and
/etc/postfix/body_checks. The method of the address checking can be
either hash or regular expression (regexp). This can be selected from the
Lookup table type combobox.
Configure the Access tab.
In parallel with Checks, this tab covers
/etc/postfix/recipient_access and
/etc/postfix/sender_access.
To permit access to the Postfix service, enable the smtp
local service. See Section 11.4, Local services on Zorp for details.
![]() |
Note |
|---|---|
Choose the zones that are allowed to access the Postfix service carefully. |
Together these tabs, actually, the files they directly correspond to, make up the majority of typical Postfix configuration.
As you see, it is technically possible to create a full featured SMTP server on the Zorp machine, but it is definitely not recommended.
![]() |
Note |
|---|---|
Unless you have a definite reason to use the Postfix component, complex mail routing requirements, for instance, you should rather stick to using the SMTP proxy to perform mail proxying on your Zorp firewall. |
Local services run on the elements of the Zorp Gateway System: on Zorp, ZMS, and ZCV hosts. Zorp hosts can provide the following services locally:
ssh: Enables remote SSH access to the Zorp host. Opens port TCP/22.
smtp: Enables the transport of SMTP (e-mail) traffic. This local service must be enabled if you want to use the native Postfix service of Zorp to handle e-mail transfer (see Section 11.3, Postfix). Opens port TCP/25.
ntp: Enables clients to synchronize their system clocks to the clock of the Zorp host using NTP. This local service must be enabled if you want to use the native NTP service of Zorp (see Section 11.2, NTP). Opens port UDP/123.
identreject:
dns: Enables clients to use the Zorp host as a DNS server. This local service must be enabled if you want to use the native BIND9 service of Zorp (see Section 11.1, BIND). Opens port UDP/53.
dns-zonetrans: Enables clients to use the Zorp host as a DNS server. This local service must be enabled if you want to use the native BIND9 service of Zorp and enable zone transfer (see Section 11.1, BIND). Opens port TCP/53.
zmsgui: Enables administrators to connect to ZMS with ZMC, and manage the Zorp Gateway System. Opens port TCP/1314.
zmsengine: Enables communication between ZMS and the Zorp hosts. This local service must be enabled if a host is managed from ZMS. Opens ports TCP/1311 and Opens port TCP/1313.
zmsagent: Enables communication between the Zorp hosts and ZMS. This local service must be enabled on the ZMS host. Opens ports TCP/1310 and Opens port TCP/1312.
![]() |
Note |
|---|---|
Zorp automatically enables the services required for the management of the host:
|
Local services can be managed on the tab of the
ZMC component. For every local service, the name, used
ports, the protocol (TCP or UDP), and the parameters are
displayed. The target is ACCEPT is access to the service is permitted,
REJECT if it is denied. To enable access to a local service on a
host, complete the following steps.
11.4.1. Procedure – Enabling access to local services
Navigate to the tab of the ZMC component of the host and click .
Select the service from the combobox. The port number and the type of the protocol is set automatically. Modify them only if you have a special configuration.
Select the zones permitted to access the service, then click . The packet filter rule corresponding to the new service is automatically added to the ruleset.
To activate the new service, do not forget to and the changes to the host, and to the packet filter using the icon.
Zorp, in cooperation with the ZMS and ZMC software components, is designed to be fully configurable from the graphical user interface of ZMC. Though this graphical administration is definitely the preferred method of management, it is possible to manually accomplish all the management and configuration tasks using a simple, character–based terminal console connection. In addition, the console–based administration provides some useful tools for troubleshooting scenarios that are not available via ZMC.
Local firewall administration, in this sense, does not necessarily refer to administration that takes place physically at the firewall machine using its local console and keyboard, but it also refers to setups where the character terminal of the firewall is reached via a secure network connection using SSH. The described administration is local in the sense that the configuration files are directly manipulated on the firewall machine, and not via the ZMS database.
![]() |
Note |
|---|---|
|
ZMS reads the configuration files of the firewall host only once, when it is bootstrapped. For details, see Chapter 6, Registering new hosts. After that, configuration changes are only downloaded to the host with the help of the transfer agent and are not parsed again by ZMS. Therefore, if you make local changes to a configuration file which is otherwise managed by ZMS, your configuration changes are overwritten when you next issue an Upload command from ZMS. Configuration files that are not managed by ZMS, for example custom installed services on the firewall for which you do not define a Text Editor plugin, are not affected by this rule. |
ZorpOS, the underlying operating system of Zorp and ZMS is a (Debian) Linux–based operating system. Therefore, for local management, the tools and procedures available are more or less the same as for any other Linux installation. Since ZorpOS is optimized for security, performance and stability, only the most essential tools and services are installed by default. Although it is technically possible to install almost any kind of Linux software on it, it is not recommended because custom installed tools may have a negative effect on the system in terms of security and stability. In fact, all local administration tasks can be accomplished by using the software tools that are available by default.
Linux is a technically sophisticated operating system that allows full access to and total control over itself for system administrators. Therefore, it is vital to have the sufficient skills and experience before administering it locally in a production environment.
![]() |
Note |
|---|---|
Untrained/inexperienced use can render any Linux system inoperable quickly, so take extreme care when performing local administration. |
This chapter is by no means intended to be a Linux tutorial. If you are unfamiliar with the concepts of general administration of Linux, consult some form of documentation before proceeding. There are excellent documentation available for Linux, both in printed and online forms. To avoid scattering of resources and material, the Linux Documentation Project (LDP) which manages the documentation tasks of Linux, provides a central access point to a thematically organized set of Linux documentation. Visit LDP site ( http://www.ldp.org) for more information. Although the primary language of documentation is English, a substantial part of the material is either translated or in the process of translation to other languages. If you prefer traditional, paper–based documentation forms, books on Linux administration are also available from major publishers worldwide. For more information, see Appendix 3, Further readings.
A basic rule of working with any operating system is that only tasks that require system administrator (root) rights must be performed using a system administrator's account. All other tasks must be performed as a normal, non-privileged user. This is especially true for security–sensitive environments, such as a firewall.
Therefore, for every administrator of the firewall who needs local access, a normal user account must be created. Even if a firewall is managed by a team of administrators, typically only senior–level staff must be provided local logon rights. To preserve accountability and to maintain an adequate level of security, a separate account must be created for each administrator. These accounts are normal user accounts with no special privileges. However, to perform administrative tasks, special, root level access is needed to the services involved in the administrative action.
Linux provides the sudo tool to grant root level access to dedicated normal users. sudo allows the users to run only certain commands (specified by the root user) as root.
The sudo utility provides a secure method of having root level access
to parts of the system. It is especially useful if there are more than one users who are
potentially local administrators. To use sudo all users who
need root access must be listed in the file /etc/sudoers.
The sudo command then allows these users to run only
certain commands (specified by the root user) as root. This selective method is more secure
than providing full root level access for a user to all parts of the system. It also allows
for a more granular control over user activities on the system. sudo has configurable options as well as default settings; more information on
these can be found in its manual pages (man sudo).
![]() |
Tip |
|---|---|
You can access Linux/Unix manual pages easily from Windows environment as well. If you have a Mozilla or Firefox browser, type man sudo in the address line and the browser opens immediately the sudo project's homepage. |
Local administration of the firewall can be accomplished via either the local console itself, that is, physically sitting in front of the machine, or via a terminal session over the network. This network session obviously needs to be encrypted. Zorp uses the industry–standard SSH protocol to accomplish this. SSH is a client–server protocol that provides an encrypted communication channel between the parties. ZorpOS contains a native ssh server implementation, and SSH clients are freely available for most major operating systems. If you do not have one already installed on your system, visit http://www.freessh.org for a list of both free and payware ssh clients.
To establish an SSH session, the client must first authenticate itself to the server. A number of different authentication methods are defined in the ssh protocol standard. Currently, SSH version 2 is the latest standard version.
The simplest authentication method is password authentication: the user logging in to the ssh server provides a username/password pair that is a valid user in the server machine. The advantage of this method is its simplicity: no special configuration is needed and the user must know the username and password on the server anyway.
A more secure method of SSH login is the public key-based authentication: in this case the user possesses a public/private key pair and the server has a copy of the user's public key. The logon procedure using public keys is the following:
Using the private key, the user initiates a logon to the server with the help of a session identifier.
The server checks whether it has the matching public key for the user and grants access if both the key is found and the signature is correct.
The advantage of this method is enhanced security. No username and password have to be provided and the entire authentication session is secured with public key cryptographic procedures. The disadvantage is the extra setup needed: you have to generate user key pairs, place public keys of users on the server and the user have to carry the private keys to all client computers the user wishing to log on from, and upon leaving the client the user has to make sure to remove the private key from the computer. Although more complicated to set up, this method of authentication is preferred due to the enhanced security it provides.
By default, Zorp allows password-based SSH logins, too. During setup it had to be decided whether the root user can log in to the system via SSH connection. You are recommended not to allow roots to login through SSH for security reasons. You have to establish first an SSH session as a normal user and then perform a sudo action to gain special access permission for accomplishing administrative tasks.
For more information on SSH and its configuration, see Appendix 3, Further readings.
After successfully getting in to the system by either SSH-ing to it or logging on via the local console, real administration can begin. In Zorp, as in Unix/Linux in general, system configuration is typically performed by editing the appropriate configuration files and then reloading or restarting the corresponding service(s).
All important system components, such as daemons, services, have their own configuration
files, some have more than one. These files are generally stored in a common location, which
is the /etc directory structure. There are exceptions
from this rule, of course, but the majority of configuration files are in that directory. Some
files are directly stored under /etc, while most services
have a separate subdirectory in which the actual configuration files for the services are
stored. Zorp, for instance, has a subdirectory, /etc/zorp. These configuration files are almost always plain ASCII files. The
recently developed services may have advanced, XML format files, but even those are text-based
and can be edited with a text editor.
Most configuration files are richly commented. The comment lines usually start with a hashmark (#).
You can choose the text editor to be used freely. Since Zorp has only a character terminal
to work with, only character mode editors can be considered. A logical and trivial choice can
be the vi editor. Although it is definitely awkward for users accustomed
to WYSIWYG editors, it has some inevitable advantages. It is small, simple and universally
available: every single operating system contains a port of vi. Vi has
lots of commands for text editing, searching and formatting, but for the most basic
configuration file–editing purposes approximately ten commands are sufficient.
![]() |
Tip |
|---|---|
|
Before editing configuration files it is a good idea to create backup copies. The simplest method for backing up text files is the cp(copy) command. The correct syntax is the following.
|
Apart from special setups where you need to fine-tune various performance parameters, the
network configuration is a relatively simple task under Zorp. You have to provide
basic IP parameters, such as IP addresses, subnet masks, default gateway. The most important
configuration file for networking is /
etc/network/interfaces. This file contains separate sections for all network
interfaces available in the given system. The official installation procedure of Zorp
involves steps to configure these basic IP parameters, so in a properly installed
system this file is not empty.
![]() |
Note |
|---|---|
|
In all files editable under ZMC, after you first upload a configuration file edited in ZMC, a 3-line comment is added at the beginning of the file.
|
This text warns you about that even if you edit the file manually, it is overwritten next time you upload a change in ZMC. Of course, if you do not plan to work with this file from ZMC in the future, you can safely ignore this warning.
A typical interface configuration section in /etc/network/interfaces is the following.
auto eth0
iface eth0 inet static
address 192.168.1.253
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0
gateway 192.168.1.254
After editing this file and saving it, to activate your changes run the script: /etc/init.d/networking with the restart argument. This applies to all other network configuration files, too.
Another, less frequently modified file of network configuration is /etc/hostname. It contains the hostname parameter of the system.
It is important for the name resolution processes initiated by various system components.
Whenever a process needs name resolution, that is, to map a name to an IP address, the first
thing the system does is it checks this file to see whether its own hostname has been queried.
The Linux command hostname queries this file as well.
The file / etc/mailname is important for the proper
operation of the Postfix native service. It must not be empty and it gets filled
automatically. You can alter the value stored here, if needed.
Another network configuration file, /etc/hosts may be
used for static name resolution: it stores name to IP address mappings for network hosts.
Before DNS, this file was the only means to map hostnames to IP addresses. Today, most of its
functionality has been taken over by DNS, but it is still useful in some scenarios. When a
hostname needs be looked up, /etc/hosts is the third
place the system looks for a match – the first is /etc/hostname while the second is the in-memory DNS cache. So, if you have a
limited number of hosts the firewall visits often, a proxy server, for instance, you are
recommended to list these hosts in /etc/hosts:
#
# This file is generated by Zorp Management System. Do not edit!
#
127.0.0.1 localhost
192.168.1.253 proxy
192.168.1.100 mail
By default, there is only one entry in this file for the hostname localhost with the IP address 127.0.0.1. This entry is needed for system boot processes, so do not delete it.
Just as with hostnames, you can name networks with symbolic names. The file /etc/networks stores these mappings. By default, this file is
empty on the firewall and Zorp generally does not use it.
The /etc/resolv.conf file is used by the resolver
library to look up what DNS servers to query when a process needs to look up an IP address for
a given hostname, or vice versa. In other words, this file lists the known nameservers for the
firewall. Additionally, it contains an entry for the domain name of the firewall. This entry
is also important for name resolution purposes: if, instead of a fully qualified domain name
(FQDN) only a hostname is queried, the resolver automatically appends this domain name to the
hostname and tries to look up the FQDN created this way.
#
# This file is generated by Zorp Management System. Do not edit!
#
domain example.org
nameserver 192.168.1.200
This section introduces only briefly the network configuration files. For more detailed information and instructions on network configuration, see Chapter 7, Networking, routing, and name resolution, the references listed on networking in Appendix 3, Further readings, and the manual pages for the mentioned files (man filename – without full path, for example: man interfaces).
Syslog-ng is the native and recommended logging service for Zorp. Its
configuration is stored in the
/etc/syslog-ng/syslog-ng.conf file.
For more detailed information and instructions on system logging, see chapter Syslog-ng, the Syslog reference manual accessible from Appendix A, and the installed manual pages for both syslog-ng (the utility) and syslog-ng.conf (the configuration file).
After editing and saving the syslog-ng.conf file
manually, restart the service by running the /etc/init.d/syslog-ng script with the restart/reload arguments.
Its default configuration under Zorp routes all relevant system, ISC BIND 9 and
NTP messages to the /var/log/messages file and also to
the console, /dev/tty8.
If you have a separate, central syslog-ng server for collecting messages from critical network hosts, such as the firewall(s), you can route (log) messages using the following steps.
In syslog-ng.conf on the firewall, set up a new
destination of type tcp or udp, with the IP address of your syslog-ng server.
![]() |
Example 12.1. Specifying the target IP address of a TCP destination |
|---|---|
|
The IP address of the syslog-ng server is 10.20.30.40 in this example.
Supplying port information is optional; if you do not set port number, the default ports are used. |
Decide what sources (s1, s2 here) should be logged to the syslog-ng server and set up a log path accordingly. Note that filters are optional.
log { source(s1); source(s2); filter(f1); destination(d_tcp); };
Define a source on the syslog-ng server with the IP address of the firewall sending log messages.
![]() |
Note |
|---|---|
Specify the port numbers carefully. The corresponding ports must match on both sides. |
The Network Time Protocol (NTP) is used for synchronizing system time with reliable time
servers over the Internet. The synchronization is performed by a dedicated service, the ntp
daemon (ntpd). The configuration file of ntpd is the /etc/ntp.conf file. The ntp.conf
configuration file is read at initial startup by the ntp daemon in order to specify the
synchronization sources, modes and other related information.
Unlike the system logging and network configuration files, ntp.conf
does not have a manual page in the default installation of Zorp. However, there
are many useful sources available on NTP, see for details Chapter 11, Native services,
the website of NTP protocol/service link in Appendix 3, Further readings, RFC
1305 on NTP ver 3, and the manual page of ntp.conf for
accessing it on other Unix/Linux installations or on the Internet.
NTP itself can have a very sophisticated configuration with, for example, public key authentication, access control, or extensive monitoring options. At the very minimum, define a time server with which the firewall can synchronize time (the server key) .
Add the following line in the configuration file.
server 10.20.30.40
![]() |
Note |
|---|---|
If you supply more than one timeserver, the system time is more accurate, because during a time update all the listed servers are queried and a special algorithm selects the best (most accurate) of them. |
Additionally, since Zorp can be used as an authentic time source for the network, you can limit the number of concurrent client connections using the clientlimit key, and you can set a minimum time interval a client can synchronize time with the firewall using the clientperiod key.
After editing and saving the ntp.conf file manually, restart the
service by running the /etc/init.d/ntp script with the
restart argument. NTP can be chrooted as well, in which case the place of the configuration
file is /var/chroot/ntp/etc/. You can edit the
configuration here directly or you can work with the original configuration file. In the
latter case the jailer script updates the configuration inside the chrooted (jailed)
environment. The jailer update process involves the following three steps.
The original configuration file is modified.
Jailer is run.
The process (daemon) is restarted.
If you use ZMC for system configuration, the configuration files are automatically created inside the chrooted environment, so no special intervention is needed.
This method for updating jailed environments is the same for all other daemons that are to be jailed under Zorp, such as ISC BIND 9.
System time is updated with the ntpdate command. Run the command as root, as usually from a system startup script so that system time gets adjusted during bootup. You can run the command manually, if needed.
BIND 9 is the official DNS server solution in Zorp. BIND under Zorp
always runs in a chrooted environment, so its configuration file(s) are stored
under the /var/chroot/bind9/etc/bind/ directory.
BIND 9 introduced the notion of split-DNS installations where basic access control can be applied to DNS Zone records. That is, for each record in the DNS database file you can specify whether outside resolvers can query those records („public” records in DNS terminology) or they are only available to internal resolver clients („private” records).
Choosing split-DNS setup is optional. In this case there are two configuration files:
named.conf, and
named.conf.shared.
The named.conf.shared file hosts information that is
intended to be public, that is, accessible to outside resolvers.
![]() |
Tip |
|---|---|
Setting up a split-DNS configuration only makes sense if the firewall is going to be an authoritative nameserver for one or more domains. If it is only used as a forward-only, split-DNS is not necessary. |
In forward-only configurations, only the named.conf
file is used. Being a forward-only server, the nameserver under Zorp does not
perform recursive name resolution on the Internet for the internal clients, but instead it
forwards queries as-is to the nameserver(s) configured as its forwarder(s).
This is probably the simplest functional named configuration possible, as only a single entry has to be edited in the configuration file.
forwarders {
10.20.30.40; //IP address of the forwarder nameserver
};
You can use BIND 9 as a slave nameserver. In this setup, you do not maintain zone information on the firewall, instead, pull zone database records from an authoritative master nameserver via the zone transfer process. This setup provides fault tolerance, since if the master nameserver fails, the slave still contains a more or less up-to-date copy of the zone database.
The daemon running the BIND service is called named (hence the name for the configuration
file), but the directory of the configuration file is still called bind.conf, after the name of the original Berkeley Unix implementation of the
service. The startup script for the service is also called /etc/init.d/bind9.
For further information on BIND, see Chapter 11, Native services, and the references listed in Appendix 3, Further readings.
Zorp uses the reliable and popular apt mechanism of the Debian distribution to keep the system up-to-date. Both component updates such as security and other patches, and product upgrades involving version changes are performed with apt.
Apt is a command line utility and is designed to be a simple and convenient way of staying up-to-date. You do not need to worry about dependencies or incompatibilities during an update/upgrade because apt automatically handles them or at least provides detailed information about the issues that possibly arise during the update process. Apt is generally considered to be the best package management tool in the Linux market.
Edit the /etc/apt/sources.list configuration file
with the applicable sources of packages to download.
Enter the following two commands.
>:~#apt-get update
>:~#apt-get -u upgrade
The first command updates apt's package database and downloads changed packages, and the second command performs the upgrade itself.
The rest of the process is done automatically.
![]() |
Note |
|---|---|
Since the update usually takes place via the Internet, you need a working Internet connection. |
Update/upgrade Zorp from BalaBit's official source site only. There is an
apt-site, from which apt can be configured to download updates. The update is performed via a
secured https connection. Apt's configuration file for defining available sources is the
/etc/apt/sources.list file. For details on the required sources,
see Section 4.5, Upgrading Zorp.
For more information on apt, see the apt-get manual page.
If the upgrade affected the daemons running chrooted, the jails need to be upgraded as well after the upgrade. This part of the upgrade can be performed with the jailer script, as follows.
Run the updatejail script with the following parameters.
>updatejail <config.file> <jail.identifier>
where the config.file is typically /etc/jailer.conf and the identifier designates a section of
this configuration file. A section of the configuration file describes the jailing
configuration of a service, such as <ntp> or <bind> — the name of
the service enclosed in relation signs (<>) marks the beginning of a section.
![]() |
Tip |
|---|---|
You can also use the zorp-harden package to do the jailing and other hardening tasks. |
The packet filter configuration is stored in the /etc/iptables.conf
file. Although it is technically possible to edit this file manually, you are not recommended
to do so as the first two comment lines of the file warns you, even if you choose manual
configuration over ZMC-based graphical work.
#
# This file is generated automatically from iptables.conf.in and iptables.conf.var.
# Do not edit directly, regenerate it using iptables-gen.
To make packet filter configuration more error–resistant and easier, a frontend utility pack, the iptables-utils has been created where a couple of scripts help the creation and maintenance of packet filter rulesets. For more details on the iptables-utils, see chapter Packet Filtering.
![]() |
Tip |
|---|---|
Using iptables-utils is absolutely beneficial in the long term as the number of system closeouts, that is administrator lock-outs happens for example by activating an incorrect packet filter ruleset, can be dramatically decreased. It is favourable especially if you are far away from the firewall. |
After installing the firewall a default ruleset is active. Since Zorp acts as
a default-deny firewall, the ruleset allows only connections from the ZMS host machine
specified during installation to the firewall and the outgoing connections originating from
the firewall itself. Besides the iptables.conf file which stores the
currently active ruleset, the iptables.conf.in file is also present in
the system (/etc/iptables.conf.in) so you can see the differences between
the two. The / etc/iptables.conf.var file is also stored containing a
single statement.
#define ZMSHOST <ip_address>
This entry allows you to refer to the ZMS host machine by the name ZMSHOST rather than by
its IP address when editing the iptables.conf.in file. These tools and
the intermediate configuration files greatly help the administration of packet filter
rulesets. However, an in-depth knowledge of iptables is still needed for the successful
management of the packet filter.
For more information, see Appendix 1, Packet Filtering on Zorp-specific configuration of IPTables, the installed manual pages of iptables (userland utility), and the documentation of Netfilter/IPTables project including a detailed tutorial and HOWTO documents accessible from Appendix 3, Further readings.
The networking configuration of the firewall which involves IP addresses, hostnames, and resolver configuration, usually changes rarely. However, the daily administration of the firewall often requires the changing of the actual ruleset. For more information on this process, see section Creating Zorp Policies.
Basically, the process can be divided into the following two main parts.
Configuring the necessary service definition(s).
Creating the matching packet filter ruleset, that is generating a skeleton.
The latter packet filter manipulation procedure is detailed in section Packet filter, above. This section shows how to edit a service definition locally.
The key configuration files needed are stored in the /etc/zorp
directory. The following files play the most important roles in the configuration.
policy.py
containing complete service definitions
instances.conf
listing the instances used in the firewall together with their parameters
![]() |
Tip |
|---|---|
|
In the default installation of Zorp there are two commented sample files,
To learn command-line policy management it is a good idea to first use ZMC to graphically generate test-policies and then to check the generated policy files via a terminal connection. |
For background information on the possible contents of these files, see Chapter 8, Creating Zorp policies.
The configuration of Zorp is based on the Python programming language. The
configuration file ( policy.py) is a Python module in itself. This does
not mean, however, that you have to learn Python, knowing the syntax of the language and a few
semantic elements is sufficient. Though the configuration file may not seem like a complete
Python module, it is important to know that it is parsed as one. So the following syntactical
requirements of Python apply:
Indentation is important as it marks the beginning of a block, similar to what curly braces ('{}') do in C/C++/C#/Java. This means that the way you indent blocks must be consistent for that given block. The below example shows a correct syntax first followed by an incorrect syntax.
Correct:
if self.request_url == 'http://www.balabit.hu/':
print ('debug message') return HTTP_REQ_ACCEPT
return HTTP_REQ_REJECT
Incorrect:
if self.request_url == 'http://www.balabit.hu/':
print ('debug message')
return HTTP_REQ_ACCEPT
return HTTP_REQ_REJECT
Getting used to correct indentation is probably the most important Python task for a beginner, especially if you have not done any C or C-like programming before. Indentation in Python is the only way to separate blocks of code since there are no Begin and End statements or curly braces. Otherwise, the language itself is quite simple and easy to learn. Note that Python is case-sensitive.
For more information on Python, see Appendix 3, Further readings.
The Policy.py file has a strict structure that you
must obey when modifying the configuration manually. It consists of the following code
modules:
Import statements
Zone definitions
Class configurations
NAT policy settings
Authentication policy settings
Instance definitions
These modules are of varying length, depending on the complexity of the policy configuration.
12.10.1.1. Procedure – Edit the Policy.py file
Set the import statements.
If you look at the default-installed policy.py.sample file you
can see that it starts with the import statements:
from Zorp.Core import *
from Zorp.Plug import *
from Zorp.Http import *
from Zorp.Ftp import *
These statements mean that one or more required (Python) front-end modules are imported to the configuration. Zorp.Core is essential, the other three imports are there because the sample file contains references to these three proxy classes.
![]() |
Tip |
|---|---|
A good way of learning |
Provide the name of the firewall, and the zone definitions along with the access control you defined for them, that is, the allowed outbound and inbound services.
InetZone("site-net", "192.168.1.0/24",
# list of allowed outbound services, '*' matches anything
outbound_services=[ "intra_http", "intra_ftp", "intra_cvs"],
# list of allowed inbound services, '*' matches anything
inbound_services=[])
Note that comment lines start with a hashmark '#'.
As you can see, zone definitions here already reference one or more services as
outbound or inbound. Definition of these services are included later in policy.py.
Configure the classes used in service definitions.
These class definitions can be simple, with, in essence, naming the proxy class to be used, that is, to be derived from only; like the IntraFtp class in the sample file:
class IntraFtp(FtpProxy):
def config(self):
FtpProxy.config(self)
Or, they can be rather complex, customizing the derived proxy class with attributes, as in the case of the IntraHttp class in the sample file:
# Let's define a transparent http proxy, which rewrites the
# user_agent header to something different.
#
class IntraHttp(HttpProxy):
def config(self):
HttpProxy.config(self)
self.transparent_mode = TRUE
self.request_headers["User-Agent"] = (HTTP_HDR_CHANGE_VALUE, "Lynx/2.8.3rel.1")
self.request["GET"] = (HTTP_REQ_POLICY, self.filterURL)
# self.parent_proxy = "proxy.site.net"
# self.parent_proxy_port = 3128
# self.timeout = 60000
# self.max_keepalive_requests = 10
def filterURL (self, method, url, version):
# return HTTP_REQ_REJECT here to reject this request
# change self.request_url to redirect to another url
# change connection_mode to HTTP_CONNECTION_CLOSE to
# force kept-alive connections to close
log("http.info", 3, "%s: GET: %s" % (self.session.session_id, url))
Define the instances to be used.
Besides its name, the most important characteristic of an instance is the list of services it provides. Therefore, define services within the instances:
# zorp_http instance
def zorp_http () :
# create services
Service("intra_http", IntraHttp) Service("intra_ftp", IntraFtp)
Still within the instance definition code block, with correct indentation, specify the listeners. The sample file uses transparent listeners, so only proxy port is supplied, and the service name belonging to the given listener:
Listener(SockAddrInet ("192.168.1.1", 50080), "intra_http")
Listener(SockAddrInet ("192.168.1.1", 50021), "intra_ftp")
These three main blocks of zone definition, proxy class configuration and instance
definition make up the policy.py file. The default example provided is
necessarily simple, yet it provides a lot of information on the correct syntax and on the
possible contents of the policy.py file.
The other configuration file, instances.conf is much more simple:
it lists the instances to be run, and supplies some runtime arguments for them such as log
level. The only compulsory argument for running an instance is the name of the Python file
containing the corresponding instance definition. Although the example uses a single policy
file ( policy.py) to store all definitions, it is possible to separate
the policy to different .py files if it makes maintenance or archiving
easier.
In the following example instance definitions are separated into two files,
policy-http.py and :policy-plug.py
#instance arguments
#zorp_http --verbose=5 --policy /etc/zorp/policy-http.py
#zorp_plug --policy /etc/zorp/policy-plug.py
For more information on the configuration files, see the manual pages for
instances.conf and Zorp (man instances.conf and man zorp — installed
by default on Zorp) and Zorp Reference Guide,
published by BalaBit IT Ltd. It is available on the Zorp CD-ROM and can also be
downloaded from http://www.balabit.com/support/documentation/.
Starting and stopping firewall instances is performed automatically using the default
installation. However, you can control manually the firewall instances with the
zorpctl utility. Zorpctl starts and stops Zorp
instances using the instances.conf file. One or more instance names can
be passed to zorpctl as arguments. If an error occurs while starting or
stopping one of them, an exclamation mark ('?') is appended to the name of the instance as
the script processes requests.
To control Zorp with zorpctl, enter the following lines.
zorpctl start|stop <instance name> <instance name> <...>
Besides the start and stop parameters for controlling instances, zopctl has some other parameters as well.
zorpctl status <instance>
printing the status of the specified zorp instance
zorpctl szig <instance>
displaying some internal information about the specified zorp instance
zorpctl inclog <instance>
incrementing the logging level of the specified instance with one level
zorpctl declog <instance>
decrementing the logging level of the specified instance with one level
For a full list of the available parameters with short explanations type zorpctl at a command prompt, without parameters.
Zorpctl also has a manual page installed by default.
The use of cryptography, encryption and digital signatures is becoming more and more widespread in electronic communication. Nowadays they are an essential part of e-business and e-banking solutions, as well as other fields where the identity of the communicating parties has to be verified. Communication via secure (encrypted) channels is also becoming increasingly popular. This chapter offers a brief introduction into the fields of cryptography and the public key infrastructure (PKI), describing how they can be used for authentication and secure communication, and the PKI system developed for ZMS to support them.
The goal of using encryption in communication is twofold: to guarantee the privacy of the communication, so that no third party can acquire the information, and to verify its integrity — to make sure that it was not damaged (or deliberately modified) on the way. Privacy can be guaranteed by the use of encryption algorithms, while integrity protection requires the application of hashing algorithms. Secure communication utilizes both of these techniques.
The main concepts and requirements of secure communication are the following:
Both the sender and the receiver of the message have access to the algorithm (this is practically a piece of software, often used transparently to the actual user) that can be used to encrypt and decrypt the message.
Both have access to a special piece of information — so called key — that is required to encrypt and to successfully decrypt the message.
An encrypted message cannot be decrypted without the proper key, even if the encryption algorithm is known.
The receiver can identify if the encrypted message has been damaged or modified. (Remember, it is not necessary to understand the message to mess it up.)
Both the sender and the receiver can verify the identity of the other party.
There are two main categories of encryption methods for ensuring privacy: symmetric and asymmetric encryption.
Symmetric encryption algorithms use the same key for the encryption and decryption of a message, therefore the same key has to be available to both parties. Their advantage is their speed, the problem is that the key has to be transferred to the receiver somehow. The keys used in symmetric encryption algorithms nowadays are usually 128-256 bit long.
Asymmetric encryption methods use different keys for the encryption and the decryption of a message. The sender generates a keypair, messages encrypted with one of these keys can only be decoded with the other one. One of these keys will be designated as the private key, this will be used to encrypt the messages. The other key, called public key is made available to anyone the sender wishes to send messages to. Anyone having access to the encrypted message and the public key can read the encrypted message and be sure that it was created with the appropriate private key. Certain encryption algorithms (like RSA) make it also possible to encrypt a message using the public key, in this case only the owner of the private key can read the message. The disadvantage of asymmetric encryption is that it is relatively slow and computation intensive. A suitable infrastructure for exchanging public keys is also required; this is needed to verify the identity of the sender, confirming that the message is not a forgery. This topic is discussed in Section 13.1.1.3, Authentication and public key algorithms The length of the keys used in asymmetric encryption ranges from 512 to 4096 bits.
![]() |
Tip |
|---|---|
It is recommended to use at least 1024 bit long keys. |
Being able to decrypt a message using the appropriate public key guarantees only that it was encrypted with its matching private key. It does not mean that the person (or organization) who wrote the message is who he claims to be — that is, the identity of the sender cannot be verified this way. Without an external way to successfully verify the identity of the other party, this would make communication based on public key algorithms susceptible to man-in-the-middle attacks. To overcome this problem, the identity of the other party has to be confirmed by an external, trusted third party. Two models have evolved for that kind of identity verification: web of trust and centralized PKI.
In a web of trust based system (such as PGP), individual users can sign the certificate (including the public key and information on the owner of the key) of other users who they know and trust. If the certificate of a previously unknown user was signed by someone who is known and trusted, the identity of this new user can be considered valid. Continuing this scheme to many levels, large webs can be built. Web of trust does not have a central organization issuing and verifying certificates — this is both the strength and weakness of such systems.
In centralized PKI — as its name suggests — there are certain central organizations called Certificate Authorities (CAs) empowered to issue certificates. Centralized PKI systems are described in detail in Section 13.2, PKI Basics.
In real-world communication, the two types of encryption are used together: a (symmetric) session key is generated to encrypt the communication, and this key is exchanged between the parties using asymmetric encryption.
The general procedure of encrypted communication is the following:
13.1.1.4.1. Procedure – Procedure of encrypted communication and authentication
The sender and the receiver select a method (encryption algorithm) for encrypting the communication.
The sender authenticates the receiver by requesting its certificate and public key. Optionally, the receiver can also request a certificate from the sender, thus mutual authentication is also possible. During the handshake and authentication the parties agree on a symentric key that will be used for encrypting the data communication.
The sender encrypts his message using the symmetric key.
The sender transmits the message to the receiver.
The receiver decrypts the message using a symmetric key.
The communication between the parties can continue by repeating steps 3-5.
Another important aspect is that suitable keys have to be created and exchanged between the parties, which also requires some sort of secure communication. It also has to be noted that — depending on the exact communication method — the identity of the sender and the receiver might have to be verified as well.
The strength of the encryption is mainly influenced by two factors: the actual algorithm used, and the length of the key. From the aspect of keylength, the longer the key is, the more secure encryption it offers.
Hashing is used to protect the integrity of the message. It is essentially a one-way algorithm that is capable of creating a fixed-length extract of the message (or document). This extract (hash) is:
specific to the given document,
changing even a single bit in the document changes the hash,
it is not possible to predict how a certain change in the document modifies the hash (i.e. it is impossible to predict the hash),
it is not possible to recover the original document from the hash.
A digital signature is essentially the hash of the signed document, encrypted by the private key of the signer. The genuineness of the document can be verified by generating the hash of the document received, decrypting the signature using the public key of the sender, and comparing the hash contained in the signature to the one generated from the received document. If the two hashes are identical, the document received is the same as the one sent by the sender, and has not been modified on the way.
The purpose of PKI system is to provide a way for users to reliably authenticate each other. This requires the users to have private-public keypairs (as described in Section 13.1.1.2, Asymmetric encryption), some sort of certificate to verify the users identity, and a system to manage and distribute keys and certificates. For verifying the identity of a user, either centralized PKI systems, or webs of trust can be used.
The centralized model is based on authorizing institutes, so called Certificate Authorities (CA) to verify the identity of the user or organization and certify it in a digital certificate. Since there is no single, worldwide CA guaranteeing the identity of everyone, the identity of a party can be considered valid if its certificate was signed by a trusted CA. A trusted CA is a CA that has been decided to be trustworthy, there is no general algorithm or method to determine which CAs can be trusted. A 'trusted CA list' includes the certificates of all the CAs deemed trustworthy.
CAs themselves also have to certify their identity, meaning they also need certificates. These certificates are usually signed by another, higher level CA. This allows for hierarchies of CAs to be created, in a way that although a CA might not be explicitly trusted (because it is unknown, therefore it not on the list of trusted CAs), but the higher-level CA that signed its certificate might appear on the list (which makes the lower-level CA trustworthy).
Obviously, using this method alone is not sufficient, since it always requires a higher-level CA. Therefore, self-signed CA certificates also exist, meaning that the CA itself has signed its own certificate. This is not uncommon; a CA with a self-signed certificate is called a root CA, because there is no higher-level CA above it. To trust a certificate signed by this CA, it must necessarily be in the 'trusted CAs' list.
![]() |
Note |
|---|---|
To allow easier management, the trusted CA lists usually contain only root CAs. |
A digital certificate is a digital document conforming to the X.509 standard that certifies that a certain public key is owned by a particular user or organization. This document is signed by a third party (the CA). This data file contains the public key of its owner, as well as the following information:
Not before/Not after: Validity (from/to date) of the certificate.
Purpose: For what end may the certificate be used (e.g.: digital signature, data encryption, etc.).
Issuer: The Distinguished Name of the Certificate Authority that signed the certificate.
Subject: The Distinguished Name of the owner of the certificate.
Distinguished Name: The distinguished name (DN) usually contains the following information (not all the fields are mandatory, and other optional fields are also possible). A DN is often represented as a comma-separated list of fieldname-value pairs.
Country: 2-character country/region code.
State: State where the organization resides.
Locality: City where the organization resides.
Organization: Legal name of the organization.
Organizational Unit: Division of the organization.
Common Name: The common name is often the address of the website or the domain name of the organization, e.g. www.example.com, or the name of the user in case of personal certificates.
When an organization wishes to create a certificate, it has to perform the following:
Generate a private-public keypair.
![]() |
Tip |
|---|---|
The secure storage of private keys has to be solved. |
Prepare a certificate signing request (CSR). For filling the request form, the information contained in the distinguished name has to be provided (e.g. common name, organization, etc.).
The CSR is bundled together with the public key of the generated keypair.
The organization selects a CA to sign the certificate request. The CSR has to be submitted to a special department of the CA, called Registration Authority (RA).
The RA verifies the identity of the requestor.
![]() |
Note |
|---|---|
Submission of the CSR to the RA and the identity verification involves physically visiting the RA with all the papers it requires for verifying the identity of the organization and its representative (e.g. documents of incorporation, ID cards, etc.). |
If the RA confirms the identity of the requestor, the CA signs the request using its private key, and issues the certificate.
![]() |
Tip |
|---|---|
If the certificate is to be used only internally (as in the case of Zorp components), an own CA with a self-signed certificate can be set up to sign the certificates. |
The requestor can now import and use the certificate on his machines.
If a certificate loses its validity or becomes obsolete, it should not be accepted anymore and is to be revoked or refreshed.
Basically the CA has the following functions:
Checks the identity of everyone requesting a certificate.
Confirms the identity of a user by its signature.
Monitors the validity of issued certificates (see Section 13.2.4, CRLs below).
![]() |
Tip |
|---|---|
Although to efficiently use certificates over the Internet they need to be signed by well-known Certificate Authorities, this is not required if they are used only locally within an organization. For such cases, the organization itself can create a local (internal) CA and sign the certificate of this CA. This CA having a self-signed certificate (thus it becomes the local root CA) can then be used to sign the certificates used only internally. |
CRL stand for Certificate Revocation List: it is a list containing the serial numbers and distinguished names of certificates that cannot be trusted anymore and were hence revoked. If a certificate loses its validity for any reason (e.g. becomes compromised because its private key is stolen, etc.) the issuing CA revokes it. This is published on the website of the CA in a CRL. Obsolete or invalid certificates should be revoked even if they are used only internally.
CRLs can be obtained usually via HTTP, certificate authorities update and publish them on their website on a regular basis.
To decide whether a given certificate is valid or not, the followings have to be checked:
It was signed by a trusted CA.
![]() |
Note |
|---|---|
If the certificate of the CA signing the given certificate was signed by a trusted CA (or by another CA lower in the CA chain), the certificate can be trusted. Sometimes this CA chain can consist of several levels. |
It is not out-of-date.
It has not been revoked (i.e. it does not appear on the up-to-date CRL).
The purpose of the certificate is appropriate, i.e. it is used for the issued intention.
![]() |
Note |
|---|---|
It is possible to submit CSRs to more than one CA (and have them signed) using the same public key. However, it is considered to be highly unethical, likely resulting in the revocation of all of the certificates involved. |
Authentication with certificates is accomplished by checking the validity of the certificates of the communicating parties.
One-way authentication: One of the parties (typically the client) requests a certificate of the server and checks its validity.
Mutual (two-way) authentication: Both the client and the server check the validity of the other's certificate. Generally both parties must own a trusted certificate (i.e. a certificate signed by a trusted certificate authority).
SSL provides endpoint authentication and communications privacy, as well as possibility for one-way or mutual authentication using certificates. The protocol allows client/server applications to communicate without being subject to eavesdropping, tampering, or message forgery. SSL runs on layers beneath application protocols (e.g. HTTP, SMTP, etc.) and above the TCP transport protocol. SSL is able to use a number of symmetric and asymmetric encryption algorithms. The certificates used in the communication must conform to the X.509 standard.
IPSec is a set of protocols for securing packet flows and key exchange by encrypting and/or authenticating all IP packets. As IPSec is an obligatory part of IPv6 (and optional in IPv4), it can be expected that it will become increasingly widespread. IPSec provides end-to-end security for packet traffic — even for UDP packets, because it operates over the IP layer. In Zorp, IPSec is used to construct Virtual Private Networks (VPNs). Please refer to Chapter VPN for more details.
![]() |
Note |
|---|---|
Zorp supports the use of the Secure Sockets Layer (SSLv2 and SSLv3), Transport Layer Security (TLSv1) and IP Security (IPSec) digital encryption protocols. |
When importing/exporting keys and certificates, they can be stored in various file formats. ZMS supports the use of the PEM, DER, and PKCS12 file formats. The main differences between them are summarized below.
PEM: PEM (Privacy Enhanced Mail) is an ASCII text format that can store all parts of the certificate, i.e. certificate, CSR, CRL, private key (which can be optionally protected with a password). It is not necessary to store all parts in a single file.
![]() |
Tip |
|---|---|
If nothing restricts it, it is recommended to use the PEM format. |
DER: The DER (Distinguished Encoding Rules) format stores any single part of a certificate in a binary file.
PKCS12: The PKCS12 (Public Key Cryptography Standards) is a binary file format developed to provide an easy and convenient way to backup or transport certificates. The file always contains a password-encrypted private key and the associated certificate.
The purpose of including a light-weight PKI system in ZMS is to provide a convenient and efficient way to manage and distribute certificates and keys used by the various components and proxies of the managed Zorp hosts. It is mainly aimed at providing certificates required for the secure communication between the different parts of the firewall system, e.g. Zorp hosts and ZMS engine (the actual communication is realized by agents). The PKI of ZMS also provides a consistent and convenient tool to manage both internal and external certificates between the firewalls. ZMS can be set to perform the regular distribution of certificates and CRLs automatically, ensuring that no invalid or revoked certificate can be used.
![]() |
Note |
|---|---|
It has to be noted that the PKI of Zorp is not a general purpose PKI system, consequently it is not recommended to be used as such. It was designed and intended for internal use between the components of the firewall system (to secure the communication between Zorp hosts and ZMS servers, monitoring agents, etc.), and to manage external certificates available on the managed hosts. |
![]() |
Tip |
|---|---|
The PKI system of ZMS can also manage certificates signed by external CAs. This is useful because ZMS provides an efficient way to handle the distribution of certificates among the managed hosts. |
Management of the PKI system is slightly different from managing other components. Locking of the PKI component is site-based, i.e. when an administrator starts to modify the PKI settings of a host (either on one of the Edit Certificates panels or the Site preferences), the whole site is locked from other administrators. Changes are committed automatically.
ZMS manages the certificates, their accompanying keys, as well as the related CSR and CRL(s) as a single entity, therefore when using key, certificate, CSR or CRL in connection with ZMS, this single entity containing all of them referred. This is important to remember even if not explicitly stated in the text.
In ZMS, a certificate entity has two different names, these are:
Unique name: The unique name is the name used to unambiguously identify the certificate entity(and its different parts) in ZMS. This name does not appear in the certificate, it is required only for management purposes.
Distinguished name: The distinguished name (DN) of the owner of the certificate. (Sometimes only the Common Name part is showed.) See Section 13.2.2, Digital certificates.
The owner host is the machine allowed to use the private key. (E.g. when specifying on a host which certificate should be used for authentication to management agents, only the certificates owned by the given host can be selected.) It is important to set the owner host of a certificate otherwise it would be impossible to use that certificate entity for all purposes (like authentication).
Distribution of certificates can be handled automatically by ZMS. ZMS examines which certificates are used by the given host, and deploys only those. This ensures that certificates are not unnecessarily present on all machines.
Any part of the certificate entity has to be deployed to the proper host in order to be used. Two main rule governs the distribution (deployment) of certificate entities:
Every certificate entity is distributed only to those hosts that actually use it, and only the used parts are deployed.
The private key can be used only on the host(s) that are set as the owner host of the certificate entity. (Therefor the private key is only distibuted to the owner host of the certificate entity.)
![]() |
Note |
|---|---|
|
CAs do not belong to a single host, but to the whole site, therefore their certificate entity (including their private key) can be made available on each host. Certificates (not the full entity, only the certificate part) can be distributed everywhere. |
![]() |
Warning |
|---|---|
Distribution should only be performed for complete, consistent settings. Distributing incomplete or only partially refreshed configuration can lead to lockouts. This is especially true when regenerating the keys of transfer agents. To prevent such situations, it might be useful to disable the automatic distribution when making large modifications to the PKI system, and re-enable it only after the new configuration is finished. |
Trusted CAs can be organized into so called trusted groups for more convenient use, especially for configuring proxies using certificates for authentication. In ZMS policies, CAs are referenced through the trusted groups containing them.
![]() |
Tip |
|---|---|
The use of trusted groups is useful for example when configuring SSL proxying, especially if connection only to servers having a certificate issued by a well-known and trusted CA (i.e. not self-signed) is permitted. For more information on SSL, see the Zorp Reference Guide. |
The PKI system of ZMS can be accessed using the menu of the main menu bar. The following sections introduce the function and use of each menu item.
The menu can be used to apply site-wide parameters to the CAs. These parameters are:
Refresh base and refresh interval: Starting time and interval of the automatic certificate distribution, i.e. at what time should the distribution of certificates and CRLs start, and how often it should be performed.
![]() |
Tip |
|---|---|
It is recommended to perform automatic distribution every 4 or 6 hours. |
Default distinguished name: The fields of the DN filled here will be automatically filled when creating new CA certificates or CSRs, which is especially useful if a large number of certificates have to be created.
The automatic certificate distribution can be enabled from the menu, and will be performed based on the parameters set under the menu item. Manual distribution can be performed by selecting from in the main menu. When distributing CA certificates, the CRLs are also distributed.
Most of the actual PKI-related tasks can be performed using the menu item. Selecting this item displays the PKI management window of the selected site. This window has the following tabs:
PKI management is used for managing local CAs. This includes managing certificates and certificate signing requests, refreshing keys, etc.
Trusted CAs is for managing trusted certificate authorities, creating new ones, grouping them, etc.
Certificates is for managing certificates: creating new CSRs, as well as for importing/exporting certificate entities.
On all three tabs, information about the currently selected certificate (or CA certificate) is displayed in the lower section of the panel. This information includes data such as:
Distinguished name of the CA issuing the certificate.
Subject of the certificate.
Validity period of the certificate.
Information on the algorithm used to generate the keys, including the length of the key.
Any X.509 extensions used in the certificate.
![]() |
Note |
|---|---|
The X.509 standard for certificates supports the use of various extensions, e.g. to specify for which purposes the certificate can be used, etc. For details on the possible extensions, see Appendix 3, Further readings. |
Navigation window: a tree-like navigation window displaying the managed internal CAs. On a newly installed system only local CAs created by default are available.
The internal CAs have small arrows that can be used to display the certificates issued and revoked by the CA.
For a given certificate, the following information is displayed:
Common name of the certificate
Validity (not before and not after)
State: active (a) or pending (p). A certificate becomes pending if the certificate of the CA issuing it (or the certificate of a CA higher in the CA chain) is refreshed. A certificate has to be refreshed if its validity period has expired, even if its private key has not changed. This is because the hash of the refreshed certificate is different from the old one.
![]() |
Warning |
|---|---|
When the certificate of a CA is refreshed, all certificates issued by the CA has to be refreshed (re-issued) as well. If the CA has issued certificates for subCAs, then also the certificates issued by these subCAs have to be refreshed. |
Command bar: contains the different commands that can be issued for the certificate or CA selected. The available commands are:
: available only for internal CAs, used to sign CSRs. After clicking on it, a list of unsigned CSRs is displayed. The list shows the distinguished names of the CSRs. Parameters for the certificate to be signed can be overridden here (period of validity, X.509 extensions, etc.).
: This command can be used to refresh certificates, i.e. to renew them by extending their validity period if expired, or also to create new keys to the certificate. Key generation is only performed if the Regenerate private key checkbox is selected.
![]() |
Tip |
|---|---|
It is recommended to regenerate the keys as well when refreshing a certificate for any reason. |
: available only for CAs. The CRL of the CA is valid until the time specified. The refreshed CRL will only be used on the managed hosts after distribution. ZMS distributes certificate entities, i.e. when distributing certificates the corresponding CRLs are automatically distributed as well.
: available only for certificates signed by an internal CA. Marks the certificate as invalid and adds it to the CRL of the CA. CA certificates can also be revoked this way.
![]() |
Note |
|---|---|
Self-signed certificates (i.e. certificates of local root CAs) cannot be revoked. |
The table below briefly summarizes the CAs created and used by default in Zorp.
| Name of the CA | Purpose |
|---|---|
Zorp_Root_CA
|
The Root CA of Zorp, used to sign certificates of all other local CAs in Zorp. |
Zorp_Engine_CA
|
Signs the certificate of the ZMS engine. |
Zorp_Agent_CA
|
Signs certificates of the monitor and transfer agents. |
Table 13.1. Default CAs and their purpose
For details on configuring agent and engine certificates, please refer to Chapter 14, Advanced ZMS and Agent configuration.
This menu item is for managing certificate authorities. The upper section of the panel displays the list of available CAs, both internal and external. Apart from creating the default internal CAs, the certificates of a number of trustworthy external ones (e.g. VeriSign, NetLock) is imported as well. The following information is displayed on each:
Common name of the CA
Parts: Components of the certificate entity available for the CA.
c: certificate. Usually this is the only part available for external CAs.
k: private key of the certificate.
r: CSR.
l: CRL of the CA.
An internal CA is fully functional if all of its parts are available (CRL is optional) .
Trusted groups: Name(s) of the trusted groups that the CA is member of.
Not before/not after: Validity of the CAs certificate.
CRL expiry: Date until the CRL of the given CA is valid. If this field is empty, no CRL has been released by the CA so far.
The command bar contains various operations that can be performed with CAs. Some of them require a CA to be selected from the information window, in this case the given operation will be performed on the CA selected.
: Create a new local Certificate Authority.
1. Procedure – Creating a new CA
Navigate to the Trusted CAs tab of the , and click on .
Enter the required parameters for the subject of the new CA's certificate. It is recommended to give a descriptive common name to the CA, to make it easier to remember its function.
Select the encryption algorithm and key length to be used.
![]() |
Tip |
|---|---|
The key of the CA certificate should be longer than the ones that will be issued by the CA, e.g. if the CA will be used to sign certificates having 1024 bit keys, the key of the CA certificate should be at least 2048 bit long. |
Select the signature digest (hash) method to be used.
![]() |
Tip |
|---|---|
Use of the SHA1 algorithm is recommended, as it is considered to be more secure and not significantly more computation intensive. |
Provide a password to protect the private key of the CA. This is required so that only authorized users can sign certificates.
Click on , and specify for which purposes will the certificate be used.
![]() |
Note |
|---|---|
The use of extensions is optional. |
When creating a local root CA, check the Generate self-signed certificate checkbox and specify the validity period of the certificate.
![]() |
Tip |
|---|---|
If the CA is to be available on every site managed, do not forget to check the appropriate checkbox when creating the New CA. |
![]() |
Warning |
|---|---|
Making a CA certificate available on all sites cannot be reversed, i.e. once CA has been made available on all sites, later it cannot be limited to a single site. |
: Import a CA certificate from a PEM, DER, or PKCS12 formatted file.
: Export the certificate of the selected CA into file in PEM, DER, or PKCS12 format. The PKCS12 format is only available for internal CAs.
: A CA available on a site can be made available on all sites managed by ZMS by clicking this button and checking the Available on all sites checkbox. This has the same effect as checking the corresponding checkbox when creating a new CA.
![]() |
Warning |
|---|---|
This operation cannot be reversed or undone. |
: Self-sign the CSR of the selected local CA. Only certificates not yet signed by a CA can be self-signed.
![]() |
Note |
|---|---|
Local root CAs could be created by self-singing a so far unsigned CSR of a Trusted CA. |
: Set the parameters for refreshing the CRL of the selected external CA. Parameters to set are:
Refresh base: At what time should the retrieval of the CRL be started.
Refresh interval: How often should the CRL be retrieved.
By setting the Refresh base to 00:00 and the Refresh interval to 04:00, the CRL will be downloaded every four hours, starting from midnight.
Refresh URL: Location of the CRL to be retrieved. The CRL can be downloaded via HTTP.
![]() |
Note |
|---|---|
It is very important to set the refresh URL, otherwise the validity of the certificates issued by the CA cannot be reliably verified. The CRL should be downloaded and automatically distributed regularly. |
File format: File format of the CRL to be downloaded (PEM or DER).
: Change the password of the selected local CA.
: Revoke the certificate of the selected local CA that was signed by another local CA. Self-signed CA certificates cannot be revoked this way.
The Available groups are displayed on the right side of the panel, while the groups that the selected CA is member of are displayed on the left. Adding or removing a CA to a group can be performed using the arrow-shaped icons in the middle.
If the certificate of a local CA is to be signed by an external CA, the following steps have to be taken:
13.3.7.3.1. Procedure – Signing CA certificates with external CAs
Generate a private-public keypair and an associated CSR using the button of the Certificates tab.
Export this CSR into a file using the button.
Have the CSR signed.
If the CA approves your identity and signs the certificate, it to the PKI system of ZMS.
![]() |
Note |
|---|---|
Be sure to select the appropriate entity (i.e. to import the signed certificate to the proper CSR) and to check the Import into selected object option. |
The certificate entity can now be distributed and used on your machines.
All non-CA certificates available on the selected site can be managed here. Importing and exporting certificates is also possible.
The upper section of the panel displays the list of available certificates, along with the following information on each:
Unique name of the certificate entity.
Common name of the certificate.
Parts available from the certificate entity. For external certificates usually only their certificate (c) is available; for internal CAs their private key (k) and the CSR (r) can be available as well.
Issuer: The CA that has signed the certificate. This field is empty if the CSR is not yet signed.
Owner host: Determines which host can use the private key.
Not before/Not after: The certificate's period of validity.
The command bar contains buttons that can be used to perform various operations on the certificates available on the site. Some of them require a certificate to be selected from the information window, in this case the given operation will be performed on the selected certificate.
: Generate a new CSR.
: Import a certificate (or a part of it) from a PEM, DER, or PKCS12 formatted file.
: Export the selected certificate (or a part of it) into file in PEM, DER, or PKCS12 format.
: The owner site of the certificate can be specified here, or the certificate can be made available on all sites managed by ZMS. This latter operation cannot be undone.
: Revoke the selected certificate. This operation requires the password of the issuer CA.
In order to create a certificate do the following:
Navigate to the tab of the /.
Click on the button, and fill the Generate CSR form.
Enter a Unique name that will identify the object containing the certificate and the key in ZMS.
Select the host that will be the owner of the certificate from the combobox.
If the certificate is to be available on all sites, check the appropriate checkbox.
Fill the Subject section of the request as appropriate. Into the Country field, enter only a two-letter id (e.g. US). Enter a name for the certificate into the Common name field.
Select the encryption algorithm (RSA or DSA) to be used for key generation and specify the length of the key (512, 1024 or 2048 bit).
![]() |
Note |
|---|---|
The length of the key has to be carefully considered: the time needed to process key signing and verification operations (required for using encrypted connections) increases exponentially with the length of the key used. |
![]() |
Tip |
|---|---|
Usually the RSA algorithm with 1024 or 2048 bit encryption is a good trade-off between encryption strength and performance. Use of the RSA algorithm is also more widespread. |
![]() |
Warning |
|---|---|
If the certificates/keys have to be used on machines running older versions of the Windows operating system, using only 1024 bit long keys might be required, since these Windows versions typically do not support longer keys. |
Select the method (MD5 or SHA1) to be used for generating the Signature digest (hash). If the encryption algorithm is DSA, only the SHA1 hash can be used.
![]() |
Tip |
|---|---|
Use of the SHA1 algorithm is recommended, as it is more considered to be more secure and not significantly more computation intensive. |
By clicking on , the various purposes of the certificate can be specified. For details on X.509v3 extensions, see Appendix 3, Further readings.
After specifying all the required options, click .
Navigate to the tab, and in the navigation
window select the local CA to be used to sign the request (e.g.
ZMS_Agent_CA for transfer agents, etc.).
Click on . A window will be displayed listing the submitted but not yet signed CSRs. The list displays the distinguished name of the CSRs, this includes the various Subject fields (Country, locality, common name, etc.) specified when generating the request.
Set the validity period (Valid after/Valid before dates) of the certificate. A pop-up calendar is available via the button. Alternatively, after setting the Valid after date, the Length field can be used to specify the length of the validity in days, automatically updating the Valid before field.
By clicking on , various X.509 extensions can be specified. These extensions can be used to ensure in filters that only certificates used for their intended purpose are accepted.
Enter the password of the CA required for issuing new certificates, and click .
To revoke a certificate, the following procedure has to be performed:
13.3.8.3.1. Procedure – Revoking a certificate
Select the certificate to be revoked.
For general certificates, click on either on the PKI management or the Certificates tab. CA certificates can be revoked from either the PKI management or the Trusted CAs tab.
![]() |
Note |
|---|---|
|
Only certificates signed by local CAs can be revoked. Self-signed CA certificates cannot be revoked. |
Enter the password of the issuer CA. If the private key associated to the certificate is to be deleted as well, check the Archive CSR and private key checkbox. Click .
![]() |
Tip |
|---|---|
If the private key of a certificate has been compromised, the private key should be revoked along with the certificate. Generally it is recommended to generate new keys each time a certificate is refreshed. |
On the PKI management tab, the certificate will now appear in the Revocations list of its CA. On the Certificates tab, the dates of its validity will disappear, and the Parts section will indicate that only the CSR (r) and (if it has not been revoked) its private key (k) is available.
The CRL of the issuer CA is refreshed automatically.
The revocation will be effective on the Zorp hosts only when their CRL information is updated from ZMS. If ZMS is not configured to perform distribution automatically (or the update should be made available immediately), it can be performed manually via the menu item.
Various file formats can be used to export/import certificate entities or parts of them.
![]() |
Tip |
|---|---|
The Import and Export operations provide a convenient way to handle certificates signed by external CAs. |
13.3.8.4.1. Procedure – Exporting certificates
Select the CA certificate or certificate to be exported on the Trusted CAs or Certificates tab, respectively.
Click on .
Select the directory to save the file to, specify the file format to be used, and enter the filename, and click .
![]() |
Note |
|---|---|
|
File extension is NOT added automatically to the filename. The file will be saved to the local machine, i.e. the one that is running ZMC. |
Depending on the file format to be used, the part(s) to be saved can be specified. Naturally, only the parts that are available can be selected (e.g. only the CSR or the key if the certificate has not been signed yet).
If the private key is exported as well, the key can be password-protected by specifying an Export password.
13.3.8.4.2. Procedure – Importing certificates
Click on on the Trusted CAs tab for importing CA certificates, or on the Certificates tab for normal certificates.
![]() |
Note |
|---|---|
If the parts contained in the file are to be imported to be added to an existing certificate entity, select the given certificate entity before clicking on . This function is useful for importing certificates signed by external CAs. |
Specify the file format to be used, and select the file to be imported.
Select the part(s) to be imported.
There are two ways to handle the data imported from the file: creating a new entity or appending them to an existing one.
Creating a new entity: Select the Import as new object radio button, enter a Unique name and select the Owner host of the object. This method is useful especially for importing the certificates of external CAs.
Import parts to an existing certificate: It is possible to import the part(s) contained in the file into an existing certificate entity (i.e. the one that was selected before clicking on the button). This method should be used when importing your certificates that were signed by an external CA, so the certificate is imported to the entity containing the private key and the CSR. Select the Import into selected object radio button.
Enter the Export password if the private key is imported and the key has been password-protected.
Check the Certificate available on all sites checkbox if needed.
If you wish to have an external CA to sign your certificates and manage these certificates in Zorp, the following steps have to be taken:
.1. Procedure – Signing your certificates with external CAs
Generate a private-public keypair and an associated CSR using the button of the Certificates tab.
Export this CSR into a file using the button.
Have the CSR signed.
If the CA approves your identity and signs the certificate, it to the PKI system of ZMS.
![]() |
Note |
|---|---|
Be sure to select the appropriate entity (i.e. to import the signed certificate to the proper CSR) and to check the Import into selected object option. |
The certificate can now be distributed and used on your machines.
The Zorp Management Server (ZMS) is the central component of the Zorp Management System. It governs all configuration settings, manages the firewall services via agents and handles database functions.
ZMS provides a tool for the complete control and maintenance of the Zorp firewalls entirely. You can create new firewall configurations, and navigate them to the firewall nodes. ZMS stores these configurations in an associated XML database making them available for later administrative operations.
Communication with the Zorp firewall software is realized through Managements Agents. The agents are responsible for accepting and executing configuration commands (transfer agents) and also for reporting firewall functions and all related information (monitor agents).
For further information on ZMS and the basic architecture, see Chapter 2, Components of Zorp firewall solution.
To modify firewall settings you need to carry out the following procedure regardless of which component is configured.
Make the necessary changes in a component's configuration.
Changes can be undone with the option as long as they are not committed to the ZMS database
Commit the new configuration to the ZMS database.
The ZMS host stores the modified information in its XML database. Remember to commit the changes before leaving the component.
You can always view the new configuration and compare it with the current firewall configuration with the help of the and options, respectively.
Upload the configuration to propagate the changes from the ZMS database down to the firewalls(s).
During this process the ZMS converts the configuration data to the proper configuration file format and sends them to the transfer agents on the firewall nodes.
Reload the altered configuration or restart the corresponding services to activate the changes.
Typically, reloads or restarts are performed after finishing all configuration tasks with the various service components.
For more details, see Chapter 5, ZMS configuration management.
ZMS configuration is realized by setting the appropriate parameters of the Management server component. The following parameters can be configured.
| Parameter name | Description | |
|---|---|---|
auth
|
Authentication settings | For handling user data and passwords |
backup
|
Backup settings | For configuring backup |
bind
|
Listen address for GUI connections | For setting connection between ZMS and ZMC |
connection
|
Connection settings for agents | For defining connection parameters |
database
|
Database settings | For defining saving to disk |
diff
|
DIFF generator settings | For commanding configuration check |
http
|
http proxy for CRL settings | For defining proxy address |
log
|
Log settings | For configuring logging parameters |
ssl
|
SSL handshake settings | For configuring SSL settings for ZMS and agent connection |
uda
|
Monitoring parameters | For configuring monitor database |
Table 14.1. ZMS configuration parameters
By using global settings it is possible to apply default values to the parameter set.
![]() |
Note |
|---|---|
You are recommended to use the global settings when no special configurations are needed. |
Different configurations are possible for the following subsystems:
configuration database,
key management,
monitor database,
and transfer engine.
With the Authentication settings (auth) parameter you can
configure access to ZMS. Users are listed in the main textbox. You can perform the following
tasks:
![]() |
Note |
|---|---|
Only the |
14.1.1.1. Procedure – Add new users
Navigate to the component of the host running ZMS, and select the auth parameter from parameters.
Click to add new users to the system.
Enter username and password in the opening window.
Confirm password.
Click , commit and upload your changes, and reload the component.
14.1.1.2. Procedure – Deleting users
![]() |
Note |
|---|---|
Only the |
Navigate to the component of the host running ZMS, and select the auth parameter from parameters.
Select the user you want to delete and click .
Commit and upload your changes, and reload the component.
14.1.1.3. Procedure – Changing passwords
![]() |
Note |
|---|---|
Only the |
Navigate to the component of the host running ZMS, and select the auth parameter from parameters.
Select the username whose password you want to change.
Click .
Enter the current password and a new password in the opening window.
Confirm the new password.
Click , commit and upload your changes, and reload the component.
In order to help configuration auditing and the general process of Zorp administration, ZMC users can now have different access rights. That way different administrators can have different responsibilities — PKI management, log analysis and monitoring, Zorp configuration, etc.
![]() |
Note |
|---|---|
Only the |
14.1.1.4.1. Procedure – Editing user privileges
![]() |
Note |
|---|---|
Only the |
Navigate to the component of the host running ZMS, and select the auth parameter from parameters.
Select the username whose privileges you want to edit.
Click .
Select the privileges you want to grant to the user. A user can have none, any, or all of the following privileges:
Modify configuration: Modify and commit the configuration of the hosts. The user can perform any configuration change, and commit them to the ZMS database, but cannot activate the changes or control any services or components.
Modify monitoring configuration: Modify the monitoring settings of the host. Note that changes to the monitoring settings are effective immediately, you do not have to upload them to activate them.
Control services: Start, stop, reload, or restart any instance, service, or component. This right is required also to upload configuration changes to the hosts.
PKI: Manage the public key infrastructure of Zorp: generate, sign, import and export certificates, CAs, etc.
Log view: View the logs of the hosts.
To create a 'read-only' user account for auditing purposes, do not select any privileges.
To create a user account with full administrator rights, select every privilege.
Click , commit and upload your changes, and reload the component.
Users connecting to ZMS using ZMC must authenticate themselves. The following authentication methods are available:
Local accounts: ZMS stores the usernames and passwords in a local database. This is the default authentication method.
Local accounts and ZAS authentication: ZMS stores the usernames locally, but receives the authenticates the users against a ZAS instance. All users successfully authenticating against ZAS and having a local account can connect to ZMS.
14.1.1.5.1. Procedure – Modifying authentication settings
Navigate to the component of the host running ZMS, and select the auth parameter from parameters.
Select the desired authentication method in the Authentication method field.
If you selected Local accounts and ZAS authentication, you have to configure access to ZAS in the ZAS configuration section.
![]() |
Note |
|---|---|
Using these authentication methods requires an already configured ZAS instance. See Chapter 17, Connection authentication and authorization for details on using and configuring ZAS. |
Enter the IP address or the hostname of the Zorp Authentication Server into the
Provider host field. By default, ZAS accepts connections on
port 1317.
Select the certificate that ZMS will use to authenticate itself from the Certificate field.
Select the CA group that contains the CA that issued the certificate of ZAS from the CA group field. ZMS will use this group to verify the certificate of ZAS.
If you are running more than one authentication backends (more than one ZAS instances), create a new router in the Authentication server ZMC component that will direct the authentication requests coming from ZMS to the appropriate ZAS instance.
Add a new condition to the router, and enter
Authentication-Peer into the Variable
field, and zms into the value field.
For details on configuring ZAS routers, see Section 17.3.1.2, Configuring routers.
![]() |
Note |
|---|---|
ZMS sends also the username in the authentication requests. This can be used to direct authentication requests to different ZAS instances based on the username. |
Click , commit and upload your changes, and reload the component.
With the Backup settings (backup) parameter you can define the
automatic ZMS database backup method. You can enable automatic backup and then determine the
base time for the first backup and also the interval between all subsequent backup
processes. Additionally, you can define how many database backup copies are stored.
Alternatively, you can create scripts to handle the backup tasks.
![]() |
Note |
|---|---|
If you do not enable automatic backup you have to save the database manually, otherwise all database information might get lost. |
14.1.2.1. Procedure – Set backup method
Tick Enable automatic backup.
Enter Base time for the first backup.
Use hours:minutes format, for example, 08:00.
Define the Interval between the backups.
Use hours:minutes format, for example, 00:30. In most cases it is sufficient to backup once or twice daily.
Select the number in Keep generation field to define how many backup records are stored.
The default value is 10, meaning that only the last 10 database backups are available. The allowed values are ranging from 1 to 100.
The more backups you store, the more space it reserves. Since one record is only 1-2 Mb you can keep 20-50 records if needed without overloading the system.
(OPTIONAL)
Tick Use external script and give the path of the desired script if you want to use a special script for the backup.
With the Listen address for GUI connections (bind) parameter you
can configure the connection between the ZMS and the ZMC. You need to give the bind address
and the bind port to define where to listen for the GUI connection.
14.1.3.1. Procedure – Configuring the bind address and port for ZMS-ZMC connections
Provide the bind address. You have the following alternatives to define the bind address.
Enter IP address manually.
Select the needed IP address from the drop-down menu.
The menu shows the available IP interface addresses.
![]() |
Note |
|---|---|
Note that in case the IP address changes for some reason, you need to modify this data manually since changes are not propagated automatically. |
Use variables.
ZMS resolves variables during configuration generation (view, check and upload processes). For more information on using variables, see Chapter 5, ZMS configuration management.
Create link to an IP address.
![]() |
Note |
|---|---|
You are recommended to give the address this way so that future address changes will have no effects on the operability of the connection. |
1. Procedure – Using linking for the IP address
Click the link icon.
Select the link target in the opening window.
Click .
If you click and options you delete the existing links. If you choose it ceases the link connection totally, meaning that the link field is left empty while deletes the link but leaves the target IP address in the field which will then behave as a manually added address.
Provide bind port. You can define bind ports similarly to bind address.
Enter port number manually.
Use variables.
Create link to a port
With the Connection settings for agents (connection) parameter
you can determine which bind address and port you want to use for the connection between ZMS
and the agents. You can set awaiting time and the number of retry can be given too.
Defining bind address and ports for the agents is done similarly to defining address and ports between ZMS and ZMC. By default, the ZMS initiates the connection, but if you give ZMS port and address for the connection parameter at the agent's side, the agent can also establish the connection. In that case, the same port and address should be set for this parameter too.
14.1.4.1. Procedure – Configuring ZMS and agent connections
Define bind address. The bind address can be defined manually, selected from the available interface addresses, or using variables or links (these possibilities are described in Section 14.1.3, Configuring the connection between ZMS and ZMC in detail).
Set waiting time and the number of retries. These configure how long ZMS waits for live communication with the agents and in case the connection cannot be set up, how many times ZMS attempts to connect to the agents. Use the Wait and Retry fields.
![]() |
Note |
|---|---|
If you give too low value for waiting time or too high for retry you may overload the system and cause unnecessary network traffic. Default values are optimal in most cases. |
With the Database settings (database) parameter you can set how
frequently the ZMS database is saved to disk in both idle and active modes.
14.1.5.1. Procedure – Configure ZMS database save
Select the appropriate number in the Idle threshold field to determine the interval between two database backups when the ZMS XML database is not in use, that is, no changes are committed.
Give values in seconds. The default value is 10. All values are allowed.
Select the appropriate number in the Busy threshold field to determine the interval between two database backups when the ZMS XML database is used and changes are committed.
Give values in seconds. The default value is 120. All values are allowed.
![]() |
Note |
|---|---|
Since the XML database is constantly updated when the ZMS is in use you are recommended to keep busy threshold value not too low to decrease system load. On the other hand, when choosing high threshold values it is important to bear in mind that during any system breakdown or power outage data might get lost because the database is kept only in the memory and not saved to disk. |
By default, ZMS sends warnings a week before a certificate expires. You can modify this value here.
With the DIFF generator settings (diff) parameter you can give
the command to be executed when comparing the database on the host with the ZMS
configurations with the button.
With the http proxy for CRL settings (http) parameter you can
give the URL of the proxy you want to use to retrieve the CRL from.
With the Log settings (log) parameter you can determine which
type of messages should be logged. You can apply logtags to enable advanced message
filtering and also to determine where the messages should be logged to.
14.1.8.1. Procedure – Set logging level
Select the desired level of logging.
The default value is level 3 which means that all important events are logged but no detailed debug information. The higher the value the more information is logged. The levels from 0 to 10 are allowed.
(OPTIONAL)
Give log specification if you want to fine-tune for which logtags what level of
messages are logged, e.g., core.debug: 2, session.error:8,*. accounting:
5..
(OPTIONAL)
Tick Syslog if you want to log to syslog, otherwise the messages are logged to the standard output (STDOUT).
![]() |
Tip |
|---|---|
Logging on the console might be useful during troubleshooting. |
(OPTIONAL)
Tick Tags if you want to log the logtags as well.
![]() |
Tip |
|---|---|
This is beneficial if you need to search and analyse the log messages, but takes up more disk space. |
With the SSL handshake settings (SSL) parameter the certificate
verification parameter and other handshake-related information can be set.
14.1.9.1. Procedure – Configure SSL handshake
Select verification level in the Verify depths field to decide how many levels are verified in the certificate hierarchy.
Values from 0 to 100 are allowed.
Choose Groups or Advanced with the radio buttons.
![]() |
Note |
|---|---|
You are recommended to use the PKI groups configuration. |
In Groups settings select the certificate entity for the ZMS host.
For example: ZMS_engine. If you open the Certificate selector window you can see the unique identifier of the ZMS host and also certificate information, such as version, serial number, issue date and validity period, algorithms and keys. This information is useful when selecting which certificate to use.
Select agents validator CA group.
For example: ZMS_Host_CA. If you open the CA group selector window you can define the CA group which is used to verify the certificate of the agents during the handshake. Data is available on CA group name, certificate name and certificate information for the selected CA groups.
OR
In Advanced settings enter manually the following data.
full path of the file where the private key is stored,
certificate,
CA directory identifying the directory where the CA certificate entities are stored,
and CRL directory giving the place of the CRLs corresponding to the CA
screenshot
You can store the monitoring information in a database if you have a database server.
With the Monitoring parameters (UDA) parameter you can select which
type of database you want to use and define how the monitoring system can connect to this
database.
Currently only PostgreSQL is supported, which is part of ZorpOS.
14.1.10.1. Procedure – Define monitoring database
Select Provider.
The currently available values are PostgreSQL or no database. If no database is selected, no monitored data is stored.
Give the host name of the SQL database, e.g., localhost,
192.168.1.2.
Give the name of the SQL database in the Database field, e.g.,
zms_monitor.
Enter username in the user field.
Click , then give password and confirmation in the opening window.
Agent configuration, similarly to ZMS configuration, is realized by setting the appropriate parameters. The following parameters can be configured for the agents.
| Parameter name | Description | |
|---|---|---|
buffer
|
Monitoring data queue | For defining monitoring data |
connection
|
Connection settings for agents | For defining connection parameters |
engine
|
Engines to connect | For configuring connection to engines |
log
|
Log settings | For configuring logging parameters |
ssl
|
SSL handshake settings | For configuring SSL settings for ZMS and agent connection |
Table 14.2. Agent configuration parameters.
By using global settings it is possible to apply default values to the parameter set.
![]() |
Note |
|---|---|
You are recommended to use the global settings when no special configurations are needed. |
Different configurations are possible for monitoring and transfer mode.
With the Monitoring data queue (buffer) parameter you can set
specific features of monitoring data sending and collection. You can determine the length of
the monitoring data queue in which the monitor agent queues up the latest job results to be
sent to ZMS.
Normally, only one or two files are in the data queue since the agent is sending the files to the ZMS engine continuously. However, in case of slow data transmission or a failed TCP connection between the agent and the ZMS, more files can be congested depending on the allowed length of the queue. Additionally, you can set timeout period which determines for how long data files are kept after the connection is broken. If the reconnection is successful within the timeframe determined by the timeout parameter, all queued monitor data are available. However, if the connection is not resolved before the timeout period ends, the data queue, including all the monitor data files, is deleted.
![]() |
Tip |
|---|---|
If several monitor jobs are running, you are recommended to set higher values for length parameter. Also, if the quality of the connection is bad, either slow and / or instable set higher value for length and for timeout parameter too in order to reduce data loss. |
The longer the data queue, the more space it reserves. An average monitor record is between 10 and 100 bytes, so you can easily forecast the necessary memory need of the data queue.
14.2.1.1. Procedure – Define agent monitoring
Select the appropriate number in the Timeout field to determine the interval of data queuing.
Give values in seconds. The default value is 60. All values are allowed.
Select the appropriate number in the Length field to determine how many monitoring data files are queued.
The default value is 100. All values are allowed.
For example, if you set data queue length to 20, only the latest 20 records will be available. If the agent adds a new data file to the queue, the first file in the queue will be deleted.
With the Connection settings (connection) parameter you can
determine which bind address and port you want to use for the connection between the agent
and the ZMS. The agent receives or initiates the connection from / to the ZMS engine using
this address. You can set waiting time and the number of retries as well. Note that you are
recommended to allow ZMS to establish the connection towards the agent. The configuration
process is identical to the one described in Section 14.1.3, Configuring the connection between ZMS and ZMC.
For further information, see chapters Section 14.2.2, Configuring connections for agents and Section 14.3, Managing connections.
With the Engines to connect (engine) parameter you can configure
to which engine the agent connects to. Generally, it is the engine that connects to the
agent but if you set this parameter the agent initiates the connection based on these
settings.
![]() |
Note |
|---|---|
You are recommended to leave this parameter empty and allow the ZMS engine to establish the connection towards the agents. |
With the Log settings (log) parameter you can determine which
type of messages should be logged at the agent's side. You can apply logtags to enable
advanced message filtering and also determine where the messages should be logged to.
14.2.4.1. Procedure – Set agent logging
Select the desired level of logging.
The default value is level 3 which means that all important events are logged but no detailed debug information. The higher the value the more information is logged. The allowed levels are from 0 to 10.
(OPTIONAL)
Give log specification if you want to fine-tune for which logtags which level of
messages are logged, e.g., core.debug: 2, session.error: 8,*. accounting:
5..
(OPTIONAL) Tick Syslog if you want to log to syslog, otherwise the messages are logged to the standard output (STDOUT).
![]() |
Tip |
|---|---|
Logging on the console might be useful during troubleshooting. |
(OPTIONAL)
Tick Tags if you want to log the logtags as well.
![]() |
Tip |
|---|---|
This is beneficial if you need to search and analyze the log messages, but takes up more disk space. |
With the SSL handshake settings (SSL) parameter you can set
certificate verification parameters for the agent and other handshake-related information to
be used between the agent and the ZMS.
14.2.5.1. Procedure – Set SSL handshake for agents
Select verification level in the Verify depths field to decide how many levels are verified in the certificate hierarchy.
Values from 0 to 100 are allowed.
Choose Groups or Advanced with the radio buttons.
![]() |
Note |
|---|---|
You are recommended to use the PKI groups configuration. |
In Groups settings select the certificate entity for the agent.
For example: ZMS_engine.
If you open the Certificate selector window you can see the unique identifier of the ZMS host and also certificate information, such as version, serial number, issue date and validity period, algorithms and keys.
![]() |
Tip |
|---|---|
This information is useful when selecting which certificate to use. |
Select engine validator CA group.
For example: ZMS_engine_CA.
If you open the CA group selector window you can define the CA group which is used to verify the certificate of the agents during the handshake. Data is available on CA group name, certificate name and certificate information for the selected CA groups.
OR
In Advanced settings enter manually the following data.
full path of the file where the private key is stored,
certificate,
CA directory identifying the directory where the CA certificate entities are stored,
and CRL directory giving the place of the CRLs corresponding to the CA
screenshot
ZMS communicates with the Zorp firewall software through agents. The transfer agents and
the monitor agents have different connectivity in accordance with the different functionality
they provide. The zms-transfer-agents communicate using TCP port 1311,
while the zms-monitor-agents are using TCP port 1313.
The initial connection between the firewall and ZMS needs manual set up, but all subsequent communication channels are established automatically. By default, the ZMS host initiates the connection towards the agents but agents can also establish the communication if configured to do so. You can administer the connections through the ZMS host main workspace and with the help of the menu.
Give ZMS port and address for the Connection settings for agents
(connection) parameter, if you want that the agents initiate the connection
towards the ZMS using this port and address. The same port and address should be given at
the agent's side. If you give no values the default connection setup is carried out, that
is, the ZMS connects to the agents using the given port and address.
For further information, see chapter Section 14.2.2, Configuring connections for agents.
14.3.3.1. Procedure – Configure connections
Go to the main workspace of the ZMS host.
Set connection type by ticking the appropriate field: Management connection or Monitor connection.
Query connection status by choosing option from the menu.
The Last result field shows the outcome of the previous connect or disconnect operation.
(OPTIONAL)
Stop or Start the communication by selecting the connection and clicking or .
The configuration of a recovery connection is necessary when you want to set up the initial connection between ZMS and the Zorp firewall or when, for some reason, the connection needs to be established again. The authentication in this case is done using a One-Time-Password (OTP) instead of certificates. After successful authentication, the ZMS receives the configuration data of the agent together with the necessary PKI information (certificate, key and CRL). All further authentication procedures will use this data. After the agent is restarted, the ZMS initiates the reconnection. The administration can be done as normal afterwards.
![]() |
Tip |
|---|---|
|
Recovery connection is beneficial for example in the following cases:
|
![]() |
Note |
|---|---|
The agent needs to be in OTP mode to be able to receive the connection. |
The XML database in the ZMS is functionally divided into two parts and stores two basic types of information.
Predefined information
For example: proxies, packet filtering parameters or add-ons. This information is provided by BalaBit but other definitions can also be added freely.
Configuration settings of your sites, hosts or components. Practically, the settings that you have created in the ZMC. The configuration files are generated on the basis of this data.
ZMS loads the database information from the /var/lib/zms library and
places it in the appropriate part of the XML database. During database save ZMS carries out
the reverse process: takes the data from the XML database and saves it in the appropriate file
and folder of the library.
The /var/lib/zms is library is composed of the following folders and
XML files.
zms_userdatabase.xml
including your configuration settings created in the ZMC except for PKI information
zms_keymngt.xml
including all PKI information and related user settings.
configdb folder
storing templates, databases, definitions necessary for the ZMS such as built-in proxies or other settings provided by BalaBit (configuration settings are excluded).
![]() |
Note |
|---|---|
Do not change the files in this folder because during upgrade it is automatically
overwritten. Necessary modifications should be stored in the
|
configdb-user folder
containing your additional settings and templates for the ZMS in separate XML files
(These files are modified versions of the
configdb/zms_database.xml file). This data is not deleted during
upgrade.
keymngt folder
containing certificate entities (certificate, key and CRL files generated by PKI).
![]() |
Note |
|---|---|
Do not modify this folder. |
backup folder
storing by default the backup of the XML files and folders.
For further information, see chapter Section 14.1.2, Configuring backup.
A cluster is a group of computers dedicated to performing the same task. These computers (referred to as nodes of the cluster) use the same (or very similar) configuration files (policies, iptables, etc.). The goal of clustering in general is to integrate the resources of two or more devices (that could otherwise function separately) together for backup, high availability or load sharing purposes. In other words, clusters are computer systems in which more than one computer shares the tasks or the load in the network. A Zorp cluster usually consists of a group of firewall hosts that maintain the same overall security policy and share the same configuration settings.
Basically there are two types of clusters. In a fail-over cluster if a machine breaks down, a spare computer is started immediately to ensure that the service provided by the computers is continuously available (see Section 15.2.1, Fail-Over clusters). Load balancing clusters are used when the traffic generated by the provided service is more what a single computer can handle (see Section 15.2.2, Load balance clusters).
Clustering provides the following advantages:
ensures continuous service and decreased downtime,
contributes to High Availability (HA),
assists to satisfy service level agreements, and
improves load balance in the system.
The following terms will be frequently used in this chapter:
A single computer offering services to the clients.
A single computer belonging to a cluster, offering services to the clients exactly with the same functionality as the other nodes in the cluster.
A (logical and physical) group of computers offering services to the clients. Clusters are made up of nodes. In ZMS, the nodes of a cluster are handled together: from the administration point of view a cluster behaves similarly to a single host.
The aim of fail-over clustering is to ensure that the service is accessible even if one of the servers breaks down (for example, because of a hardware error). In fail-over clusters only one of the nodes is functioning and carries the whole traffic, the other(s) only monitor the active node. In case of system failure resulting in a loss of service, the service is started on the other node in the system. In other words, if the active component dies the other node takes over all the services.
![]() |
Note |
|---|---|
The service is failed over to the other component only in case of hardware failure, if you stop Zorp no backup mechanism is initiated automatically. |
Monitoring between the cluster nodes is realized with the help of Heartbeat messages. For more information, see section Heartbeat.
The transfer of services can be realized using one of the following methods:
Transferring the Service IP address
Transferring IP and MAC address
Sending RIP messages
In this case the servers use a virtual (alias) IP address (called Service IP), clients access the service provided by the servers by targeting this Service IP. The Service IP is carried by the active node only. If the node providing the service (i.e. the master node) fails, the Service IP is taken over by the slave node. As all clients send requests towards the Service IP, they are not aware of which device that address belongs to, and do not notice any difference when a takeover occurs.
When the cluster relocates the Service IP to the other node it sends a gratuitous arp request message to the whole network informing the clients that the Service IP belongs now to a different node. As a result, the clients flush their arp cache and record the new arp address of the Service IP. (A gratuitous ARP request is an AddressResolutionProtocol request packet where the source and destination IP are both set to the IP of the machine issuing the packet and the destination MAC is the broadcast address ff:ff:ff:ff:ff:ff. Ordinarily, no reply packet will occur.)
Service IP takeover is the most frequently used takeover method for Zorp clusters.
![]() |
Note |
|---|---|
Some clients may not take over the new Service IP address until the next automatic arp cache flush, which causes certain delay in Service IP transfers in the system. The problem is that the arp cache is refreshed relatively rarely, and it is not possible to notify the clients that they should update their arp cache. |
In some systems, usually in large networks it is disadvantageous to modify IP address – Media Access Control (MAC) pairs, because certain routers do not refresh their arp cache, causing problems in the network traffic. In this case the fail-over functionality is realized by taking over the Media Access Control (MAC) address.
In such systems, all nodes use the same fix IP and hardware MAC address in the network and the nodes are differentiated by the state of the servicing interface. The master (active) node has the interface in up state while the slave nodes' interfaces are kept down. If the service is failed over to the other node, the interfaces get into up state. Client requests are serviced by the node having the interface in up state.
Transferring MAC address is beneficial if the resources need to be relocated very quickly.
![]() |
Warning |
|---|---|
Multiple interfaces with the same IP or MAC address connecting to a network as a result of a failed takeover can destabilize the network. Consequently, it is important to monitor the takeover process and to completely remove (e.g.: power off) the failed server from the network. This can be accomplished by using a STONITH device. See Section 15.4, Heartbeat for details. |
In this case no Service IP is used. All nodes have their own IP addresses and the routing information is sent via Routing Information Protocol (RIP) messages using different metrics.
![]() |
Note |
|---|---|
RIP metrics are ranging from 1 to 6. You have to define the metrics for each node according to your network environment. |
Routers in the network select the destination components based on these metrics. They send the traffic to the node with lower metrics value. If a node fails, it is sufficient to remove it from the network and traffic is transferred through the other nodes without any further interaction.
![]() |
Note |
|---|---|
|
The router mediating the client requests towards the firewall has to support RIP message transfer. Desktop clients and common server machines usually do not support RIP messages. ZorpOS uses the Sendrip software for this purpose. |
In load balance configurations, all nodes of a cluster provide services simultaneously to distribute system load and enhance the overall quality of service. Clients access the service by targeting a single domain name, without knowing how many servers provide the actual service.
The amount of traffic handled by one node is determined by some logic. Currently Zorp does not provide any built-in tool for defining such criteria, therefore an external device has to be used. This can be either the DNS server, or a dedicated load balancer.
DNS load balancing is based on the native behavior of name resolution, that is when the DNS server resolves a domain name into more than one IP addresses the client chooses one IP from the answers using the round robin algorithm. Though for the decision the client disregards the actual load of the server, the solution results in balanced load in the system. In this case the firewalls offer a non-transparent service, because the client targets the firewall itself.
It is possible to use load balancer devices to distribute the traffic between the nodes. In this case the balancing method can be configured on the load balancer device. Of course, load balancing solutions also offer a native fail-over solution. If one node stops working and the load balancing device notices that, it does not direct traffic to that node until it is functioning again.
Load balancer devices offer load balancing only from the point of the client, it has no influence on the proxy at the other side of the firewall — in such case line load balancing must be solved on the firewall. If you need to share a load from several directions (physical networks), separate load balancer devices are needed in each direction.
![]() |
Note |
|---|---|
|
The firewall has to have a separate load balancer device towards all connected interfaces. From proxying point of view, all connections, and in case of multi-channel protocols, like FTP, all channels have to go through the same node. |
The third party device added to the system must be able to direct multi-channel protocols through the same node.
A simple load-balancing solution is to assign a multicast MAC address to the Service IP. In this case the clients target the Service IP, and a hub or switch before the firewall hosts forwards all requests to the multicast MAC address, resulting in all nodes of the cluster receiving all packets sent to the Service IP. The IP addresses of the clients are distributed between the nodes using some logic (e.g.: one nodes serves only clients with odd, the other one clients with even IP addresses), and the packet filter of each node is configured to accept only the packets of the clients they are responsible for.
![]() |
Note |
|---|---|
It is important that if in such a scenario one of the nodes fails, the remaining nodes have to take over the clients served by the failed node. This can be accomplished for example by using Heartbeat resources. |
The nodes of a cluster have identical configurations, only a few parameters are different. When configuring clusters, all nodes are configured simultaneously, as if the cluster were a single host. For each parameter that is different on the nodes of the cluster, links have to be used. It is also possible to link to a property of the cluster, in this case the link will be evaluated to a different value on each node. That way when the configuration is uploaded, each node will receive a configuration file containing the values relevant for the node.
Any parameter can be used as a property; usually parameters like the IP addresses of the interfaces are properties. New properties can be added any time to the cluster, not only during the initial configuration.
Naturally, not all links used in a cluster have to be links to cluster properties, regular
links can be used as well. However, keep in mind that links to cluster properties are resolved
to the corresponding property of the particular node. E.g.: a link to the
Hostname property of a cluster is resolved on each node to the hostname
of the node (e.g.: to node_1 on the first node, etc.).
![]() |
Note |
|---|---|
The PKI of the site considers the cluster to be a single host, there is no difference between the individual nodes. |
As a result of using properties, adding new nodes to a cluster is very easy, since only the properties have to be filled with values for the new node.
When uploading configuration changes, or viewing and checking configurations, you can select on which node the operation should be performed.
Controlling a service (e.g. restarting/reloading) is possible on all nodes simultaneously, or only on the nodes specified in the selection window.
Status indicator icons on clusters behave identically to hosts, except that a blue led indicates a partial status, meaning that the nodes of the cluster are not all in the same state (e.g.: the configuration was not successfully uploaded to all nodes).
When configuring a new cluster, there are several distinct steps that have to be completed. An overview of the general procedure is presented below. The main tasks are to create and configure the cluster nodes; to configure Heartbeat (required only for fail-over clusters and certain load-balancing solutions); and finally to create the policies, services, listeners, etc. on the cluster.
First the new cluster has to be created in ZMC. This can be either a cluster created from scratch, or (optionally) an existing host can be converted into a cluster. In both cases the initial cluster has only a single node, the additional nodes have to be added (and bootstrapped) manually. Bootstrapping a cluster node is very similar to bootstrapping a regular host. It is important to create properties for the parameters that are different on each node (e.g.: hostname, IP address, etc.) and use links during configuration when referring to these properties.
In case of fail-over and multicast load-balancing clusters, the Heartbeat component also has to be installed and configured. For load-balancing clusters where the load-balancing is performed by an external device (i.e. a load balancer, DNS server, etc.), this external device also has to be configured. Configuring Heartbeat has two main steps, first the communication between the nodes has to be configured, then the Heartbeat resources that are taken over when a node fails have to be created (see Section 15.4, Heartbeat for details).
After completing the above procedure, the cluster-specific configuration of the system is finished — later steps can be performed identically to managing the policies of regular hosts.
The individual steps of the above procedure are described in the following sections in detail.
![]() |
Note |
|---|---|
The procedures in the subsequent sections describe the configuration of a Zorp firewall cluster. Although this is the most common scenario, other components of the Zorp Application Level Gateway System (e.g.: ZCV, ZAS) can also be clustered. |
![]() |
Warning |
|---|---|
When creating a Zorp cluster, the ZMS managing the cluster must be on a dedicated machine, or on a Zorp host that is not part of the cluster. ZMS cannot be clustered. |
The cluster has to be created and bootstrapped by completing the following procedure:
15.3.1.1.1. Procedure – Creating a new cluster
Select the site that will include the new cluster from the configuration tree, and click on in the menu.
Select the Cluster minimal template and click on to start bootstrapping the first node of the cluster. (Bootstrapping cluster nodes is very similar to bootstrapping individual Zorp hosts. For more information see Chapter 6, Registering new hosts.)
Provide a name for the cluster (e.g.: Demo_cluster), as
well as an Agent Bind IP address, an Agent Bind IP
port and a Hostname (e.g.:
Demo_cluster_node1) for the first node of the cluster. The
node will accept connections from the ZMS agents on the specified Agent Bind
IP/Port pair.
The rest of the bootstrapping process is identical to bootstrapping a normal Zorp host, i.e. create a certificate for the cluster, supply a one-time-password, etc. For more information see Chapter 6, Registering new hosts.
As properties have to be used for all parameters that are different on each node, it is recommended to create all properties before adding the additional hosts to the cluster. Naturally, this is not required; properties can be defined any time. To add a new property to the cluster, complete the procedure below.
15.3.1.1.2. Procedure – Adding new properties to clusters
Click the button on the Nodes tab of the cluster to define a new property.
Enter a name for the new property, and select the type and subtype of the property.
The possible property subtypes are the following.
ip_address
port
ip_netmask
interface_name
hostname
You can set initial values for the properties as well.
The new property is added to all nodes automatically. (Properties can be manipulated both in Nodes and Properties view.)
Set the value of the new property for all nodes separately by clicking the button.
After bootstrapping the first node of the cluster, add the additional nodes as required. The procedure for adding new nodes is described in the next section.
![]() |
Note |
|---|---|
As an alternative to creating a cluster and bootstrapping its first node, an existing Zorp host can also be converted into a cluster. This procedure is described in Section Converting a host to a cluster. |
.1. Procedure – Adding a new node to a Zorp cluster
Click the button on the Nodes tab of the cluster.
Set the properties of the new node in the appearing window. Enter hostname, agent bind address and bind port, and any other properties that have been added to the cluster.
![]() |
Tip |
|---|---|
You are recommended to use the default port setting. |
Do not forget to check the Commit and activate checkbox to automatically commit the changes and connect to the new node. If this checkbox is not selected when the new node is created, the configuration must be committed into the ZMS database manually. Also, the node cannot be connected automatically, only via a recovery connection (see Section 14.3.4, Configuring recovery connection).
If you create a fail-over cluster, usually the second node is configured to be the slave node.
Enter the one-time password.
Click the button if the password is correct to build up the connection.
A standalone text informs you again of the background procedures. Save the output with the button so that it can be analyzed later if needed. The text window should look similar to this.
You can check the status and connections of cluster nodes by selecting the item in the menu.
After bootstrapping a cluster and adding new properties you can freely add the necessary components and configure the nodes according to your needs. Basically, the configuration procedure is similar to a Zorp host configuration. When configuring clusters using the Heartbeat component, proceed to Section 15.4.3, Configuring Heartbeat.
Existing Zorp hosts can also be converted into a cluster relatively easily. In this case the Zorp host will be converted into a node of the new cluster.
.1. Procedure – Convert host to a cluster
Select the host you want to convert to a cluster.
Select the in the menu.
Enter a name for the cluster.
You can handle the component and continue its configuration the same way as with newly created clusters.
![]() |
Warning |
|---|---|
When a host is converted into a cluster, it retains all parameters that were set
explicitely on the host. These parameters have to be replaced with links manually if
needed. Typically, properties have to be created and links used for the
|
In several cluster solutions (e.g.: in fail-over and multicast load-balancing clusters) the nodes in the cluster must monitor each other to detect if one of the nodes fails.
Heartbeat is a tool monitoring the status of the nodes in a cluster. The Heartbeat components of the nodes send keep alive messages to the other node(s). When the node stops sending heartbeat packets it is assumed to be dead, and any services (resources) it was providing are taken over by the other node(s). For this functionality, you need to define the master and slave nodes, set encryption for the communication between the nodes, and also establish and configure a dedicated interface for the communication.
![]() |
Note |
|---|---|
|
In order to use Heartbeat, the You are recommended to encrypt the Heartbeat signals even if you are using a dedicated interface. |
Heartbeat packets can be transferred through a serial null modem cable and / or Ethernet network, for example in case of geographically separated cluster nodes. If Ethernet is used, the heartbeat signals are UDP packets targeting a broadcast address.
Heartbeat instances are installed on all nodes. Both the master (active) and the slave (passive) nodes send heartbeat packets as a kind of keep-alive message across a dedicated interface. These messages enable the monitoring and, if needed, the takeover of each others' resources. When heartbeat packets are no longer received, the node is assumed to be dead, and any services (resources) it was providing are failed over to the other node.
![]() |
Note |
|---|---|
|
Unfortunately it is possible that the active node fails only partially, i.e. although it stops sending heartbeat messages, it still replies to ARP request or and retains the Service IP. Such situation results in two hosts — seemingly both functioning — owning the same IP on the LAN. To avoid such situation the death of the node has to be ensured by the integration of a STONITH (Shoot the Other Node In The Head) device, which practically turns off the power on the master node if it is dead. It is also possible to install a hardware watchdog into the nodes of a cluster. A hardware watchdog is a small device that periodically receives some kind of signal (for example the heartbeat messages) from the computer — either from the kernel, or from a specific application. If the computer stops sending these signals, it is assumed to be dead, and the watchdog reboots the node. |
![]() |
Tip |
|---|---|
Create a dedicated network for heartbeat messages using two Network Interface Cards (NIC) and a crossover Ethernet cable connecting them. |
Another important task of Heartbeat is that it manages the Resources of the cluster. A resource can be anything that is available on a node of the cluster and is relevant to the service it provides: it can be an IP address (e.g.: the Service IP of a fail-over cluster), a software running on the nodes (e.g.: Zorp), etc. Actually these resources are what is taken over when a node fails. Heartbeat manages the resources via resource scripts — regular shell script files that can start and stop the resource on the node (e.g.: bring an interface into up/down state), and can return status information about the resource (e.g.: indicate whether the interface is in up or down state). How to configure heartbeat resources is described in Section 15.4.4, Configuring Heartbeat resources.
To configure the Heartbeat component, add it to the
cluster first.
![]() |
Note |
|---|---|
The Heartbeat component can monitor multiple nodes, however, the Heartbeat ZMC component currently (version 3.3) supports only two nodes. It is possible to create and manage clusters containing three or more nodes in Zorp, but the Heartbeat configuration file has to be edited and managed manually in this case. |
15.4.3.1. Procedure – Configure Heartbeat
Select the cluster in the configuration tree and click the button below the Components
in use subwindow on the Cluster tab to add the
Heartbeat component.
Choose the Heartbeat default template and then change the component name, if needed.
The Heartbeat component appears in the
configuration tree.
Define the master and slave hosts in the Hosts field of the Heartbeat main window. Each node must have a unique hostname.
Define encryption method for the Heartbeat messages.
The default encryption is sha1, but md5 and CRC are also possible.
![]() |
Tip |
|---|---|
It is recommended to use the default sha1 encryption. |
Click the button and give a password.
Now the communication channel used to transfer heartbeat messages between the nodes has to be configured. The following steps describe how to configure an Ethernet interface for this purpose. This involves using resources as well; the use of resources is described in Section 15.4.4, Configuring Heartbeat resources in detail.
![]() |
Note |
|---|---|
When using a serial interface to transfer the heartbeat messages between the two machines, a serial null-modem cable has to be used. It is recommended to use the highest possible communication speed (baud rate). For further information see the documentation of Heartbeat at http://www.linux-ha.org/ConfiguringHeartbeat. |
Go to the Networking component of the cluster,
Interfaces tab. Create a new interface, for
example, eth1 for HA purposes using the button.
Link the cluster HA IP address in the Type specific parameters field using the link icon. Enter the broadcast address as well.
Set Netmask and the Network fields, if no defaults are provided.
Go to the Heartbeat component of the cluster
and click at the HA interface field. Click
and select the newly created interface as the HA interface
for Heartbeat using the link icon or the drop down list.
![]() |
Note |
|---|---|
Heartbeat can use two or more interfaces to avoid false takeovers when the HA interface of a node breaks down. If multiple HA interface are configured, the slave node becomes active only if all HA interfaces stop transmitting heartbeat messages. |
15.4.3.2. Procedure – Configure additional Heartbeat parameters
Set timers for Heartbeat in the Timers section.
You can define the following timers. Give all the values in seconds.
The interval in seconds between subsequent Heartbeat signals.
The interval in seconds after which the slave node gives warning of the dead master node.
The interval in seconds after which the node is assumed to be dead.
First deadtime after system reboot in seconds.
![]() |
Tip |
|---|---|
It may take a while in some machines to have a fully functional network after a reboot. It is recommended to set the dead time twice the warning time, and the initial deadtime twice the dead time. For example, if the warning time is 20 seconds, the optimal dead time is 40 seconds and the optimal initial dead time is 80 seconds. |
Set other Heartbeat options in the Misc subwindow.
You can select log target, watchdog device and decide about service re-acquiry in case of master node recovery.
This option determines the target device for logging.
This option determines which watchdog device is used, if any. For example, /dev/watchdog.
Watchdogs can monitor the heartbeat messages of a node and reboot the node if it fails.
This option prevents the master node from re-acquiring cluster resources after
a failover in case the master node gets functional again. Enabling
nice_failback can cause problems in certain situations.
Suppose there is a two-node cluster with a master (Node_A)
and a slave (Node_B) node. If Node_A
fails, Node_B acquires its resources and uses a STONITH
device to power off the Node_A. When
Node_A recovers, the resources remain on
Node_B if nice_failback is enabled.
However, if now Node_B seems to fail,
Node_A can power off Node_B only if
two STONITH devices are intalled to the system (one to power off
Node_A, one to power off Node_B).
![]() |
Tip |
|---|---|
It is recommended to enable |
Configuring Heartbeat resources has two main steps: creating the resource scripts and adding these resources to the Heartbeat component in ZMC. The general procedure is as follows.
15.4.4.1. Procedure – Configuring Heartbeat resources
Create a resource script, or modify an existing one. Heartbeat resource scripts have
to be placed into the /etc/ha.d/resource.d/ directory —
this directory contains a number of resource script samples that cover the most commonly
used scripts. You only have to edit the parameters of the selected script.
The resource scripts installed by default are described in Step 3.
Navigate to the Heartbeat component of the cluster. Resources can be managed in the Resources section of the panel. Click on to add a new resource.
Enter a name for the resource — this has to be the name of the resource script.
The following resource scripts are available by default (see the actual scripts in
the /etc/ha.d/resource.d directory of the nodes for details):
IPaddr: Adds/removes an alias IP address (i.e. the Service IP).
![]() |
Note |
|---|---|
If only an IP address is specified as the resource name, it is automatically
considered as an |
IPsrcaddr: Manages the preferred source address associated with packets which originate on the localhost and are routed through the default route.
MailTo: Sends an e-mail to the system administrator whenever a takeover occurs.
SendArp: An alternative to the IPaddr resource to send gratuitous arp for an IP address on a given interface without adding the address to that interface. It should be used if for some reason you want to send gratuitous arp for addresses managed by IPaddr on an additional interface.
The node on which the resource is active by default can be selected using the radio buttons.
15.4.4.2. Procedure – Configuring a Service IP address
The following example describes how to create an alias network interface and configure it as the Service IP of a cluster.
Navigate to the Networking component of the cluster and click on in the Network interface configuration section.
Enter a name for the alias interface (e.g.:eth1:1). For
further information on alias interfaces see Section 7.1.2, Configuring virtual networks and alias interfaces.
Enter the IP address, Netmask,
Broadcast address, etc. parameters into the respective fields.
The IP address specified here will be the Service IP of the
cluster, to be accessible by the clients.
![]() |
Warning |
|---|---|
Be sure to uncheck the Activate at boot time checkbox. |
Create a new resource by clicking the button in the Resources section of the Heartbeat component.
Enter the Service IP address. It is recommended to use linking to the IP address of the alias interface created in the previous steps. Also select the node where the resource is active using the master and slave radio buttons.
It is important that in case of fail-over clusters, Zorp itself should be a Heartbeat resource, and must not be started automatically when the machine is powered on. This is required because currently Zorp can only bind to interfaces that are in up state when Zorp is started.
To prevent Zorp from starting automatically when the machine boots, issue the following commands on the node from the command line:
update-rc.d -f zorp-pro remove
update-rc.d zorp-pro stop 20 0 1 2 3 4 5 6.
The resource script itself can use the standard zorpctl start,
zorpctl stop, and zorpctl status commands (see the
zorpctl manual pages for details).
When configuring listeners for Zorp clusters, use links to the interfaces. Listeners for transparent services must use their own IP addresses in this case, because a transparent listener cannot listen on an alias interface (such as on a Service IP). From the clients' point of view this makes no difference, as the clients do not target the IP of the Zorp host.
However, in case of non-transparent services, the listener must use the Service IP (i.e. a link to the Service IP), because that is where the clients will send their requests to.
![]() |
Note |
|---|---|
After resource relocation you have to restart Zorp — see Section 15.4.4.3, Zorp as a resource script. |
Virus, spam and other types of content filtering services are nowadays essential components of security solutions both in home and in production environments. Spam, viruses, trojans, malicious scripts pose a significant threat to the users via e-mails, downloadable files, or even simple webpages. Firewalls are a logical location for content filtering, as all traffic must travel across the firewall, and usually this is the earliest point where the incoming traffic can be examined and interacted with. ZCV provides an integrated framework to manage the various available content vectoring components using a single, uniform interface.
Content vectoring is basically the act of inspecting the transmitted data (downloaded by a web browser, sent over SMTP, etc.) to detect and reject unwanted content. Depending on the environment and the circumstances, unwanted content can mean viruses, ad- or malware, spam e-mails, client-side scripts (i.e. Java, JavaScript, etc.), or simply websites containing information not permitted for the users (such as adult sites, etc.).
![]() |
Note |
|---|---|
Content vectoring may seem to be similar to application level protocol inspection performed by Zorp proxies. However, it is essentially different: the proxies only analyze the elements of the protocol, not the transferred data itself. |
The main types of content filtering are summarized below.
Virus filtering: The most classical and well-known form of content vectoring is virus filtering: examining the files being transferred to verify that they do not contain any software that may harm the user's computer or infrastructure. Most virus filtering engines also detect adware and trojan programs. If a virus is detected, often it is possible to remove the virus (disinfect the file) without any side-effect.
Spam filtering: Spam filtering examines e-mails (usually in the SMTP traffic) to delete unwanted advertisements, viruses spreading via e-mails, etc.
Disabling client-side scripts in HTML: Client-side scripting is a popular method for decreasing the load of webservers. It means that certain actions are performed on the client machine (e.g., in a submission form a client-side script could check that all fields are filled, without having to connect the server). However, such scripts can be exploited to perform virtually any operation on the client machine. Therefore, often they are disabled and completely removed from the webpages as they are downloaded.
General HTML content filtering: Access to certain webpages is also often limited based on the contents of the page — usually based on the keywords occurring in the page. Most commonly this takes the form of blacklisting/whitelisting, to deny access to pages containing prohibited or illegal content, or simply to pages not related to the everyday work of the organization.
Content vectoring is possible using two approaches: file-based and stream-based filtering. File-based filtering is used when the complete object (file) is needed to perform the checking, such as in virus and spam filtering. (Virus filters cannot work on partial files.) Stream-based filtering monitors a continuous data flow (i.e. a webpage being downloaded) and removes the prohibited contents (such as JavaScripts, images, etc.).
Objects (infected files, spam e-mails) rejected by the content vectoring system are usually deleted. However, in some environments this is not acceptable: these objects might be temporarily stored in a location where they can do no harm (i.e. in the quarantine), until it can be verified that they do not contain any useful information. The reason for using a quarantine is that occasionally information in a file might be needed even though the file is infected (disinfecting a file is not always possible, and sometimes may damage the non-infected parts of the file as well). Also, virus and spam filters are not unerring; occasionally they might detect a file/e-mail as infected/spam even when it is not. If rejected objects are simply deleted, important information might be lost in these cases.
![]() |
Tip |
|---|---|
In production environments it is recommended to use multiple content filtering engines to examine the same traffic to reliably detect viruses. Zorp ZCV fully supports the use of multiple content vectoring engines to inspect the same content. |
ZCV is not a content vectoring engine: it is a framework to manage and configure various third-party content vectoring modules (engines) from a uniform interface. Zorp uses these modules to filter the traffic. These modules run independently from Zorp; they do not even have to run on the same machines. Zorp can send the data to be inspected to these modules, along with configuration parameters appropriate for the scenario. For example, a virus filtering module can be used to inspect all files in the traffic, but different parameters can be used to inspect files in HTTP downloads and e-mail attachments. Also, different scenarios can use a different set of modules for inspecting the traffic; using the above example, HTTP traffic could be inspected with a virus filter, a content filter, and all client-side scripts could be removed. E-mails could be scanned for viruses using the same virus filtering module (but possibly with stricter settings), and also inspected by a spam filtering module.
A Zorp proxy can send data for further inspection to a ZCV rule
group. A rule group is used to define a scenario (using a set
of router rules). The router rules of the scenario
are condition – action pairs that determine how a particular object should be
inspected. This decision is based on meta-information about the traffic or objects received
from Zorp and on information collected by ZCV. The condition can be any information that
Zorp/ZCV knows, e.g.: the client's IP, the MIME-type of the object, etc. The action is either
a default action (such as ACCEPT, REJECT), or a
scanpath — a list of content vectoring module
instances (the modules and their settings corresponding to the scenario) that
will inspect the traffic. Rule groups have a scanpath set as default, but the routers in the
group may select a different scanpath for certain conditions.
The examples shown on Figure 16.1, Content vectoring scenarios in ZCV at the beginning of this section can be translated to the ZCV terms defined in the previous paragraph as follows:
There are two rule groups (scenarios) defined, one for HTTP traffic, one for SMTP. Routers in the HTTP rule group call a scanpath that includes instances of a virus filtering, a content filtering, and an HTML module set to remove all scripts. Naturally, this is only a simple example; further routers could be used to optimize the decisions (e.g.: there is not much sense in trying to remove client-side scripts in non-html files that are downloaded, etc.). Similarly, another rule group corresponds to the SMTP scenario, with a scanpath including a virus filtering and a spam filtering module instance.
The whole process is summarized in the following procedure.
16.2.1. Procedure – Content vectoring with ZCV
A Zorp proxy sends the traffic to be inspected to an appropriate ZCV rule group.
ZCV evaluates the router conditions of the rule group. If no condition is fulfilled,
the action set as default (a default scanpath, or an ACCEPT/REJECT)
is performed. Otherwise, the action/scanpath specified for the condition is
followed.
The traffic is inspected by the module instances specified in the selected scanpath. A module instance can be used in multiple scanpaths, with different parameters in each one.
The processed traffic is returned to Zorp.
The ZCV framework was designed to allow the easy and fast integration of various third-party content vectoring tools. Currently the following modules are supported:
Virus filtering modules:
Spam filtering modules:
Other modules
HTML filtering module : Capable of general content filtering, as well as filtering JavaScript, ActiveX, Java, and Cascading stylesheets (CSS).
Mail header filtering : Capable of filtering and manipulating mail headers in SMTP traffic.
Mime filtering : Capable of filtering, removing, and adding mime headers and objects in HTTP, POP3, and SMTP traffic.
General stream editing module : Capable of replacing strings in data streams.
Custom application : ZCV provides a general interface to inspect the data with other third-party applications.
Some of the listed modules must be licensed separately from Zorp/ZCV. Please contact your distributor for details.
This section describes how to initialize and configure ZCV. It will be shown how rule groups, scanpaths, and other objects can be created and used to form content vectoring policies. Setting up the communication between ZCV and Zorp is described in Section 16.3.4, Configuring Zorp proxies to use ZCV. Before starting to configure ZCV, add the Content Vectoring component to the host that will be used for content vectoring (see Procedure 5.2.1.3.1, Adding new configuration components to host for details).
Module instances are the elements of the available ZCV modules configured for a particular content vectoring task. A data stream or an object can be inspected by one or more module instances. Module instances can be created and configured on the Modules tab of the Content Vectoring ZMC component. The panel has two distinct sections, the left one manages stream modules, the right one file modules. The functionality and handling of the two management interface is identical. Existing module instances are shown in the main section of the panel, organized into a tree based on the module they represent (kaspersky, html, etc.). Below this list are buttons to create, delete and edit module instances.
To create a new module instance, complete the following procedure:
16.3.1.1. Procedure – Creating a new module instance
Click on the button below the stream/file module instances list.
Select the module to be configured from the Module combobox.
Enter a name (and optionally a description) describing the instance.
![]() |
Tip |
|---|---|
It is recommended to use descriptive names (e.g.,
|
Set the parameters of the module using the Module options section of the dialog window. The available options are module specific and are described in Section 16.3.1.2, ZCV modules.
Some modules have global options that apply to all instances of the module. These options can be set on the tab. The global options available for the module are detailed in the description of the module.
Each module available in ZCV has its own parameters that can be set separately for each module instance. Some of modules have global options that apply to all instances of that module, these are also described at the particular module.
The clamav module uses the Clam AntiVirus engine to examine
incoming files. It supports only file mode and only detects infected files; it does not
attempt to disinfect them. The module has the following parameters:
Scan packed: Perform virus scanning on archived files.
The commtouch module uses the Commtouch filtering engine to
examine incoming files. It supports only file mode. The module has the following
parameters:
Phishing level: The level of phishing attack probability
above which the data is regarded as phishing attack. The possible values are:
off, confirmed.
Spam level: The level of spam probability above which the
mail is regarded as spam. The possible values are: off,
suspect, bulk,
confirmed.
Virus level: The level of virus spreading attack
probability above which the data is regarded as infected. The possible values are:
off, medium,
high.
The commtouch module also has global options that apply to
all instances of the module. These options can be set on the Module
global tab.
Phishing filter: Detect phishing attacks.
Spam filter: Detect spam.
Virus filter: Detect virus attacks.
Proxy: The Commtouch module communicates with the central Commtouch server via HTTP. Enable this option and enter the parameters of the proxy server if ZCV must use an HTTP proxy server to access the Commtouch server. Enter the name and port number of the proxy server into the Hostname and Port fields. If the proxy server requires authentication, provide username and password as well.
The HTML module can be used to filter various scripts and tags in HTML pages. It can operate both in file and stream mode. The HTML module has the following options:
Enable JavaScript filtering: Remove all JavaScripts.
Enabling this option removes all javascript and
script tags, and the conditional value prefixes (e.g.:
onclick, onreset, etc.).
Enable ActiveX filtering: Remove all ActiveX components.
Enabling this option removes the applet tags and the
classid value prefix.
Enable Java filtering: Remove all Java code references.
Enabling this option removes the java: and
application/java-archive inclusions, as well as the
applet tags.
Enable CSS filtering: Remove cascading stylesheet (CSS)
elements. Enabling this option removes the single link tags,
the style tags and options, as well as the
class options.
Filter HTML tags: Custom filters can be added to remove certain elements of the HTML code using the button. The filter can remove the specified values from HTML tags, single tags, options and prefixes (specified via the Filter place combobox). The Filter value specifies the name of the tag/header to be removed.
The options of the Filter place parameter have the following meanings:
In tags: Remove everything between the specified tag and its closing tag. Embedded structures are also handled.
In single tags: Remove all occurrences of the specified
single tag. A single tag is a tag that does not have a closing element, e.g.:
img, hr, etc.).
In options: Remove options and their values (e.g.:
width, etc.).
In prefixes: Remove all options starting with the string
set as Filter value. E.g.: on will
remove all options like onclick, etc.
![]() |
Note |
|---|---|
The HTML module is designed to process only text data. It cannot handle binary data, thus directing binary files to the module should be avoided. |
The kaspersky module uses the Kaspersky virus filtering
engine to examine incoming files. It supports only file mode. The module has the
following parameters:
Disinfect: Attempt to remove the virus from infected files.
Scan packed: Perform virus scanning on archived files.
Scan suspicious: Perform virus scanning on suspicious files (e.g.: suspicious files are often new variants of known viruses).
Heuristic scan level: Level of heuristic (non-database
based) sensitivity. The available levels are OFF, and
NORMAL.
The nod32 module uses the Nod32 virus filtering engine to
examine incoming files. It supports only file mode. The module has the following
parameters:
Disinfect: Attempt to remove the virus from infected files.
Scan packed: Perform virus scanning on archived files.
Scan suspicious: Perform virus scanning on suspicious files (e.g.: suspicious files are often new variants of known viruses).
Heuristic scan level: Level of heuristic (non-database
based) sensitivity. The available levels are OFF, and
NORMAL.
The nod32 module also has global options that apply to all
instances of the module. These options can be set on the Module
global tab.
Archive max size: Archived files larger than the specified value (in megabytes) are not scanned. For example, if a 2.5 MB .zip file contains a file that is 80 MB uncompressed, and the Archive max size option is set to 10 MB, the file will not be scanned for viruses. However, if the Archive max size option is set to 100 MB, ZCV will scan the file.
Socket timeout: Timeout value in secnds.
Socket: The domain socket used to communicate with the nod32 engine. Default value: /var/run/nod32/nod32d.sock
Temporary directory: Path to the temporary directory used by the Nod32 engine.
The mail-hdr module can filter and maniputale e-mail headers
in both stream and file mode. It scans the incoming e-mail (stream or file) using
regular expressions and deletes or modifies the matching headers. New headers can also
be inserted into the mails.
![]() |
Warning |
|---|---|
E-mail headers are processed and manipulated line-by-line. However, a header can span multiple lines. |
A single instance can include multiple filters; the order these filters are processed can be set using the arrow buttons. Each filter consists of a pattern, an action that is performed when the pattern is found, and an argument (e.g.: a replacement header). Note that not every action requires an argument.
A filter has the following parameters:
Header pattern: The search string to be found in the headers. Regular expressions can be used. The following options are also available for regular expressions:
Action: The action to be performed on the header line or the whole message if the pattern is found in the message. The following actions are available:
Append: Add the argument of the filter as a new header line after the match.
Discard: Discard the entire e-mail message. The argument is returned to the mail server sending the message as an error message.
Ignore: Remove the matching header line from the message.
Pass: Accept the matching header line. This action can be used to create exceptions from other filter rules.
Prepend: Add the argument of the filter as a new header line before the match.
Reject: Reject the entire e-mail message. The argument is returned to the sender of the message as an error message.
Replace: Replace the mathing header line to the argument of the filter.
Argument: The Regular expression will be replaced with this string if found in the stream. The replacement can contain \n (n being a number from 1 to 9, inclusive) references, which refer to the portion of the match which is contained between the nth \( and its matching \). Also, the replacement can contain unescaped & characters which will reference the whole matched portion of the pattern space.
Case insensitive: The case sensitive mode can be disabled by selecting this checkbox.
The mime module inspects and filters MIME objects (i.e., mail
attachments). It can check the MIME headers that describe the objects for validity, and
also call a virus filtering ZCV module to scan the object for viruses. The mime module
supports only file mode. The module has the following parameters:
Maximum number of headers: The maximal number of headers permitted in a MIME object. The object is removed if it exceeds this limit.
Maximum length of a header: The maximal length of a header in characters. Applies to the total length of the header. The header is removed if it exceeds this limit.
Maximum length of a header line: The maximal length of a header line in characters. Applies to every single line of the header. The header is removed if it exceeds this limit.
Ignore invalid headers: If enabled, headers not complying to the related RFCs or violating the limits set in the previous options are automatically removed (dropped).
![]() |
Warning |
|---|---|
If Ignore invalid headers is disabled and an invalid header is found, the entire object (e.g., e-mail) is rejected. |
Silently drop rejected attachment: By default, the
mime ZCV module replaces the removed objects (attachments)
with the following note that informs the recipient of the message about the removed
attachments: The original content of this attachment was rejected by local
policy settings. If the Silently drop rejected
attachment option is enabled, no note is added to the e-mail.
Enable rewriting messages: If disabled, the
mime module does not modify the messages.
Set mime entity to append: The mime
ZCV module can automatically add a MIME object to the inspected messages. To use
this feature, verify that the Enable rewriting messages option
is enabled, select Set mime entity to append, paste the MIME
object into the appearing dialog box, and select .
To scan the actual MIME objects (e.g., the attachments of an e-mail) for viruses,
you have to create a special rule group called mime-data. Use
this as the name of the rule group, and add a virus filtering module (e.g.,
clamav) to this rule group. When the
mime module is scanning an e-mail message, it will inspect the
attachments, then pass the attachment to the mime-data rule group
to scan for viruses. See Section 16.3.3, Routers and rule groups for details on creating rule
groups.
The program module is general wrapper for third-party
applications capable to work in stream or file mode. The stream or file is passed to the
application set in the Program field.
A single instance can include multiple filters; the order these filters are processed can be set using the arrow buttons.
A program module has the following parameters:
Program: The application to be executed.
Timeout: If the application set in the Program field does not provide a return value within this interval, it is assumed to be frozen.
The program may modify the data: The program may make changes to the data and return the modified version to ZCV.
The sed module is a stream editor capable to work in both
stream and file mode. It scans the target stream and replaces the string to be found
(specified as a regular expression) with another string.
![]() |
Warning |
|---|---|
This module is similar to, but not identical with the common UNIX sed command. |
A single instance can include multiple filters; the order these filters are processed can be set using the arrow buttons.
A filter has the following parameters:
Regular expression: The search string to be found in the stream. Regular expressions can be used. The following options are also available for regular expressions:
Replacement: The Regular expression will be replaced with this string if found in the stream. The replacement can contain \n (n being a number from 1 to 9, inclusive) references, which refer to the portion of the match which is contained between the nth \( and its matching \). Also, the replacement can contain unescaped & characters which will reference the whole matched portion of the pattern space.
Global: Replace all occurrences of the search string. If not checked, the filter will replace only the first occurrence of the string.
Case insensitive: Disable case sensitive mode.
The spamassassin module uses the Spamassassin spam filtering
engine to examine incoming e-mails. It supports only file mode. The module has the
following parameters:
Policy related options
Reject messages over the threshold: Reject the message
only if its spam status By default, SpamAssassin rejects all e-mails with a spam
status (called required_score in SpamAssassin
terminology) higher than 5 as spam. However, to minimize the impact of false
positive alarms, if the spam status of an email (as calculated by SpamAssassin)
is over the required_score, but below the value set in
threshold, ZCV only marks the e-mail as spam, but does reject it. If the spam
status of an e-mail is above the threshold, it is automatically rejected.
Reject messages as spamd dictates: Reject all e-mails detected as spam by SpamAssassin.
Add spam related headers to accepted messages: Append headers to the e-mail containig information about SpamAssassin, the spam status of the e-mail, etc. Sample headers are presented below.
X-Spam-Checker-Version: SpamAssassin 3.0.3 (2005-04-27) on mailserver.example.com
X-Spam-Level:
X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00 autolearn=ham
version=3.0.3
Server address
Local: SpamAssassin is running on the same host as ZCV. In this case, communication is performed via a UNIX domain socket.
Network: SpamAssassin is running on a remote machine. Specify its address and the port SpamAssassin is accepting connections in the Host and Port fields, respectively.
Other options
Profile name: The user under which SpamAssassin should
filter e-mails. Default value: not set, the user running SpamAssassin is used
(usually nobody).
Timeout: Timeout value for SpamAssassin.
The vbuster module uses the VirusBuster virus filtering
engine to examine incoming files. It supports only file mode. The module has the
following parameters:
Disinfect: Attempt to remove the virus from infected files.
Scan packed: Perform virus scanning on archived files.
Scan suspicious: Perform virus scanning on suspicious files (e.g.: suspicious files are often new variants of known viruses).
Infected action: Action to take
(ACCEPT/REJECT) if a non-killable virus is found.
Heuristic scan level: Level of heuristic (non-database
based) sensitivity. The available levels are OFF,
NORMAL, and HIGH.
Scan level: Level of the database based sensitivity. The
available levels are FAST, STRICT, and
FULL.
Remove all macros: Remove all macros from the files.
Remove all OLE objects: Remove all OLE objects from the files.
The vbuster module also has global options that apply to all
instances of the module. These options can be set on the Module
global tab.
Archive max size: Archives larger than the specified value (in megabytes) are not scanned.
Archive max ratio: Ratio used to detect archive exploits (i.e. archives that are very small, but become very large if uncompressed). E.g.: if an archive with a compression ratio better than 1:100 should be detected as an exploit, set the parameter to 100.
Continue on database load error: If enabled and the virus database cannot be read, all objects are accepted. Enabling this option prevents the loss of data if the virus database gets accidentally corrupted.
Scanpaths are lists of module instances and some settings (trickling mode, quarantining, etc.) specific to the given scanpath. Traffic directed to a scanpath is inspected by the module instances specified in the scanpath. Scanpaths can include both stream and file modules, but always the stream modules process the data first.
Scanpaths can be managed (created, deleted and edited) from the Scanpath section of the Configuration tab of the Content Vectoring ZMC component. To configure a new scanpath, the following procedure must be completed:
16.3.2.1. Procedure – Creating a new scanpath
Click on in the Scanpath section of the Configuration tab of the Content Vectoring ZMC component.
Enter a name (and optionally a description) for the scanpath.
Use the Add buttons and select the stream and/or file module instances to be added to the scanpath. It is not necessary to use existing module instances, they can be also created on-the-fly using the button of the Module instance selection dialog window.
The data is processed in the order the module instances are listed (starting always with the stream modules). The order of instances can be changed using the arrow buttons below the lists.
Set and configure the quarantine and trickling mode to be used for the scanpath. Also set the policy for large files. These options are described in Section 16.3.2.2, Scanpath options.
The following sections describe the options available for scanpaths. The options can be configured on the General, Trickle, Options tabs of the scanpath dialog.
Quarantine mode specifies when to store an infected in the quarantine. Always the original file is stored.
Always: Quarantine all objects rejected for any reason.
When rejected: Quarantine objects that could not be disinfected.
When modified or rejected: Quarantine only the original version of the files which were successfully disinfected. E.g.: if an infected object is found but it is successfully disinfected, the original (infected) object is quarantined. That way, the object is retained even if the disinfection damages some important information.
Never: Disable quarantining; objects rejected for any reason are dropped.
Bypass scanning of large files: By default, all files arriving to the scanpath are scanned. However, because of performance resons this might not be optimal, particularly if large files (e.g.: ISO images) are often downloaded via the firewall. Therefore it is possible to specify an Oversize threshold value and an Oversize action. If the Bypass scanning of large files checkbox is selected, then objects larger than Oversize threshold (in bytes) are not scanned, but accepted or rejected, as set in Oversize action. It is also possible to return an error message for oversized files.
Content filtering cannot be performed on partial files — the entire file has to be available on the firewall. Sending of the file to the client is started only if no virus was found (or the file was successfully disinfected). Instead of receiving the data in a continuous stream, as when connecting to the server “regularly”, the client does not receive any data for a while, then “suddenly” it starts to flow. This phenomena is not a problem for small files, since these are transmitted and checked fast, probably without the user ever noticing the delay, but can be an issue for larger files when the client application might time out. Another source of annoyance can be when the bandwidth of the network on the client and server side of the firewall is significantly different. In order to avoid time outs, a solution called trickling is used. This means that the firewall starts to send small pieces of data to the client so it feels that it is receiving something and does not time out. For further information on trickling, see the Virus filtering and HTTP Technical White Paper available at the BalaBit Documentation Page at http://www.balabit.com/support/documentation/. ZCV supports the following trickling modes. These can be set on the Trickle tab of the scanpath editor dialog.
No trickling: Trickling is completely disabled. This may result in many connection timeouts if the processing is slow, or large files are downloaded on a slow network.
Percent: Determine the amount of data to be trickled based on the size of the object. Data is sent to the client only when ZCV receives new data; the size of the data trickled is the set percentage of the total data received so far.
Steady: Trickle fixed amount of data in fixed time intervals. Trickling is started only after the period set in Initial delay before the first packet. If the whole file is downloaded and processed within this interval, no trickling is used.
![]() |
Tip |
|---|---|
It is recommended to use the percent-based trickling method, because the chance of an operable virus trickling through the system unnoticed is higher when steady trickling is used. |
ZCV can automatically decompress gzipped files and transmission and pass the uncompressed data to the modules. After the modules process the data, ZCV can recompress it and return it to Zorp. To enable the automatic decompressing, select the Transparently decompress gzipped data checkbox. The compression level of the recompressed data can be set using the Recompression level spinbutton.
![]() |
Note |
|---|---|
Compression level of 5 or higher can significantly increase the load on the CPU. |
The following actions can be set for the gzip headers via the Gzip header strip combobox:
Leave all gzip headers intact: Do not modify the headers.
Leave filename headers intact: Retain the headers containing filenames, remove all other ones.
Remove all gzip headers: Strip all headers.
In some cases it is possible that a module or ZCV cannot check an object for some reason (for example the file is corrupted, or the license of the module has expired). In such situations ZCV rejects all objects by default. Exemptions can be set for the errors described below: check the errors for which all objects should be accepted.
Corrupted file: The file is corrupt and cannot be decompressed. Certain virus scanning module handle encrypted or password-protected files as corrupted files.
Encrypted file: The file is encrypted or password-protected and cannot be decompressed.
Unsupported archive: The file is compressed with an unknown/unsupported compression method and cannot be decompressed.
Engine warning: The file is suspicious, heuristic virus scanning detected the file as possibly infected.
OS error: A low level error occurred (the module ran out of memory, or could not access the file for some reason).
Engine error: An internal error occurred in the module while scanning the file.
License error: The license of the module has expired.
![]() |
Tip |
|---|---|
For details on the behavior of the ZCV modules regarding the error exemptions, see the article of the module in the BalaBit Knowledge Base available at http://www.balabit.com/support/knowledge_base/. |
Routers are simple conditional rules (i.e. if-then expressions) that determine how the received object has to be inspected. They consist of a condition and a corresponding action: if the parameter of the traffic (or file) matches the set condition, then the action is performed. The condition consists of a variable and a pattern: the condition is true if the variable of the inspected object is equal to the specified pattern. The action can be a default action (e.g.: ACCEPT, REJECT, etc.) or a scanpath. Routers cannot be used on their own, they must belong to a rule group. A rule group is a list of routers, defining a set of conditions that are evaluated one-by-one for a given scenario. Rule groups also have a default action or scanpath that is performed if none of the set conditions match the received object. Rule groups are also important because a Zorp proxy can send data only to a rule group, and not to a specific router (see Section 16.3.4, Configuring Zorp proxies to use ZCV for details).
![]() |
Warning |
|---|---|
Only the action or scanpath corresponding to the first matching condition is performed, therefore the order of the routers in a rule group is very important. |
Routers and rule groups can be managed (created, deleted and edited) from the Router section of the Configuration tab of the Content Vectoring ZMC component. The defined rule groups and their corresponding routers (conditions and actions) are displayed as a sortable tree.
![]() |
Tip |
|---|---|
Rule groups and routers can be disabled from the local menu if they are temporarily not needed. |
To create and configure a set of routers, complete the following procedure:
16.3.3.1. Procedure – Creating and configuring routers
Navigate to the Configuration tab of the Content Vectoring ZMC component.
Click on . Enter a name for the rule group (scenario) and select a default action or specify a scanpath to be used as default.
Select the newly created rule group, and click on to add a new router to the group.
Select the action to be performed if the conditions match using the Target scanpath combobox. The available actions are described in Section 16.3.3.2, Router actions and conditions.
Click on New, and define a condition for the router. Select the variable to be used from the Variable combobox, and enter the search term to the Pattern field. Wildcards (e.g.: '*', '?') can be used in the pattern. If the Variable of the inspected object matches Pattern, the action specified in Target scanpath will be performed.
![]() |
Note |
|---|---|
A router can contain multiple conditions. In this case the target action is performed only if all specified conditions are true. |
Add as many routers to the rule group as required.
![]() |
Warning |
|---|---|
The routers are evaluated sequentially (much like packet filtering rules), therefore it is important to list them in a correct order. The order of the routers in a rule group can be modified using the arrow buttons below the routers tree. The object is only inspected with the scanpath of the first matching router. |
The following actions are available:
ACCEPT: Accept (allow it to pass the firewall) the object.
ACCEPT-QUARANTINE: Accept the object, but also store a copy of it in the quarantine.
REJECT: Drop the object.
REJECT-QUARANTINE: Drop the object, but store a copy of it in the quarantine. That way, it can be retrieved later if needed.
Scanpath: Inspect the object according to the specified scanpath.
The following table describes some of the variables that can be used in the conditions. This table does not list all such variables, as new variables are added periodically. For an up-to-date list of the available variables see Appendix C, Man pages — zcv.cfg in the Zorp Reference Guide, or issue the man zcv.cfg command from a shell on the ZCV host.
zorp_protocol: Protocol used to transfer the object.
file_name: File name or URL. of the object.
content_type: MIME type of the object as specified by the peer.
zorp_server_address.ip: IP address of the server.
![]() |
Tip |
|---|---|
The Variable combobox used to create new conditions lists all available variables. |
ZCV can only inspect files or streams it receives from Zorp proxies. Zorp proxies send data to ZCV as they would stack another proxy.
The following procedure describes how to configure the communication between Zorp proxies and ZCV.
16.3.4.1. Procedure – Configuring communication between Zorp proxies and ZCV
First, the connection settings of ZCV have to be configured in the Bind section on the Global tab of the Content vectoring ZMC component. Specify either the IP address/port pair on which ZCV should accept connections, or the Local radiobutton if ZCV will communicate with Zorp via UNIX domain sockets.
![]() |
Note |
|---|---|
The same bind settings will have to be used when the Stacking provider is configured in the Policies tab of the Zorp ZMC component (see Section 8.9.5, Stacking providers for details). These settings are required because Zorp and ZCV do not necessarily run on the same hosts. |
Navigate to the Policies tab of the Zorp ZMC component and create a new Stacking Provider. Specify the same connection settings to this stacking provider as set to ZCV in the previous step.
![]() |
Note |
|---|---|
A Stacking provider can contain the connection parameters (i.e. IP/port pair) of multiple ZCV hosts. If more than one hosts are specified, Zorp will automatically balance the load sent to these hosts using the round-robin algorithm. |
Navigate to the Proxies tab of the Zorp
ZMC component, and select the proxy class that will send the data to ZCV for inspection.
This can be an existing or a newly derived proxy class (e.g.:
MyFtpProxy).
Add the desired stack attribute of the proxy to the Changed config
attributes (e.g.: self.request_stack). For details
on the stack attributes of the different proxy classes see the section describing the
proxy class in the Zorp Reference Guide.
Select the stack attribute and click on . Click on
, and add a key identifying the element of the particular
protocol that should be sent over to ZCV for inspection (e.g.:
*). See the description of the proxy class in the Zorp
Reference Guide for details.
Enable stacking by setting the Type attribute to
type_ftp_stk_data of the key using the combobox of the
Type column, then click .
Click on , select the zorp_stack
attribute in the appearing window, and click again on Edit.
Set Stacking type to Stacking provider. Select the stacking provider configured in Step 2 from the Provider combobox, and the rule group to be used from the Stacking information combobox.
A number of global settings affecting the performance and resource use of ZCV can be configured on the Global tab of the Content vectoring ZMC component. These are discussed in the following sections.
The parameters related to logging in ZCV are the following:
Log level: Verbosity level of the logs. Level 3 is the default value, and is usually sufficient. Level 0 produces no logs messages, while 10 logs every small event, and should only be used for debugging purposes.
Use message tags: Enable the logging of message tags.
ZCV has a number of options governing the memory and hard disk usage behavior of ZCV. These resources are mainly used to temporarily store the objects while being inspected, decompress archived files, etc. The following memory usage settings are available:
Max. disk usage: The maximum amount of hard disk space that ZCV is allowed to use.
Max. memory usage: The maximum amount of memory that ZCV is allowed to use.
Low and high water mark: ZCV tries to store everything in the
memory if possible. If the memory usage of ZCV reaches high water
mark, it starts to swap the data onto the hard disk, until the memory
usage decreases to low water mark.
Max. non-swapped object size: Objects smaller than this value are never swapped to hard disk.
Content-type preview: This parameter determines the amount of data (in bytes) read from MIME objects to detect their MIME-type. Higher value increases the precision of MIME-type detection. Trying to detect the MIME-type of objects is required because there is no guarantee that a MIME object is indeed what it claims to be.
All ZCV modules use a common quarantine on each host. The contents of the quarantine on a
particular host can be accessed via the
icon that is available on the Host,
Zorp, and ZCV components. The main part of this
window shows a list of the quarantined files, including columns of meta-information like their
date, size, why they were quarantined, etc. For a detailed list of the possible
meta-information see Section 16.4.1, Information stored about quarantined objects. The objects in the quarantine
can be sorted by clicking on any of these columns. The order of the columns can be simply
modified by dragging the column header to its desired place.
The Quarantine contents window is a Filter window, thus various simple and advanced filtering expressions can be used to display only the required information. For details on the use and capabilities of Filter windows, see Section 5.3.10, Filtering list entries.
The lower section of the Quarantine contents window contains a command bar to manipulate the selected objects, and a preview box displaying the first 4 Kb of the file. The following options are available from the command bar:
View: Display the entire file in a new window.
Open with: Open the object with the specified application. The application will be started on the local machine running ZMC.
Save as: Save the object to the local machine running ZMC.
Send as e-mail: Send the selected object(s) as e-mail attachment to the destination address specified in the appearing dialog window.
Forward as e-mail: Forward the selected e-mail to the destination address specified in the appearing dialog window. This option is available only to quarantined e-mails.
Delete: Delete the selected object(s).
![]() |
Tip |
|---|---|
and can be used at once on multiple selected objects. |
In case of clusters, the command bar includes a node-selection combobox, that allows to display the contents of all nodes, or only a specified one.
The following meta-information is stored about the objects in the quarantine:
Client address: IP address and port of the client receiving the quarantined object.
Client zone: The zone that the client belongs to.
Date: Date when the object was quarantined.
Description: Detailed description of the verdict.
Direction: The direction the quarantined object was transferred
(i.e. upload or download).
Detected type: MIME-type of the quarantined object as detected by ZCV.
File: File name or URL of the quarantined object.
File ID: A unique identifier of the file in the quarantine.
From: The sender address (in case of e-mails).
Group: The user who tried to access the object belongs to the listed usergroups.
Kind: Kind of the quarantined content:
file, e-mail, or newsnet
post.
Method: The HTTP method (e.g.: GET,
POST) in which the quarantined object was detected.
Program: The program that quarantined the object (usually ZCV or Zorp).
Protocol: The protocol in which the quarantined object was found.
Proxy: Name of the proxy class that requested content vectoring on the quarantined object.
Recipient: The envelope recipient addresses of the object (only in SMTP).
Reason: The reason why the object was quarantined (e.g.: detected as virus, spam, etc.).
Rule group: The ZCV rule group that was stacked by the proxy.
Scanpath: The scanpath that quarantined the object.
Sender: The envelope sender address of the object (only in SMTP).
Server address: IP address and port of the server sending the quarantined object.
Server zone: The zone that the server belongs to.
Session ID: ID of the session which requested content vectoring on the quarantined object.
Size: Size of the object in bytes.
Spam status: Indicates if the e-mail is detected as spam.
Subject: The subject of the e-mail.
To: The recipient address (in case of e-mails).
Type: MIME-type of the quarantined object according to its MIME header.
User: Name of the user who tried to access (e.g.: download) the object.
Verdict: The decision that caused the object to be quarantined
(e.g.: REJECT, ACCEPT_QUARANTINE,
etc.)
Viruses: The virus(es) detected in the object.
Naturally, only the information relevant to the specific object is available, e.g.: an infected file downloaded via HTTP does not have subject, etc.
Quarantine cleanup on a host can be configured from the Quarantine tab of the given Host component in ZMC. This interface can be used to create rules that determine when are objects deleted from the quarantine.
The main section of the tab displays the currently effective rules (including disabled ones), and the control buttons for managing (creating, deleting, and editing) them. A rule consists of a filter that determines the scope (the effected objects) of the rule, and limitations on the storage of such objects. The available filtering expressions are the same as used in the Advanced filter optons of the Quarantine contents panel (see Section 16.4, Quarantine management in ZMC). The following options can be used to set limitations on the stored objects:
Size: Maximum hard disk space used to store the objects. Objects exceeding this limit are deleted (starting with the oldest object).
Number of objects: Maximum number of stored objects. Objects exceeding this limit are deleted (starting with the oldest object).
Maximum object age: Objects older than the specified value are deleted (starting with the oldest object).
The limitations only apply to the objects matching the set filter expression. E.g.:
setting the filter expression to Result-Virus matches X and the
Size limit to 256 MBytes means that a maximum of 256 MBytes of
objects will be stored in the quarantine that are infected with the X virus.
![]() |
Tip |
|---|---|
The limitations are global if no filter is specified. |
Rules are evaluated and executed sequentially; if contradicting rules are found, the strictest one will be effective.
User authentication verifies the identity of the user trying to access a particular network service. When performed on the connection level, that enables the full auditing of the network traffic. Authentication is often used in conjunction with authorization — allowing access to a service only to clients who have the right to do so.
Authentication is a method to ensure that certain services (access to a server, etc.) can be used only by the clients allowed to access the service. The process generally called as authentication actually consists of three distinct steps:
Identification: Determining the clients identity (e.g., requesting a username).
Authentication: Verifying the clients identity (e.g., requesting a password that only the real client knows).
Authorization: Granting access to the service (e.g., verifying that the authenticated client is allowed to access the service).
![]() |
Note |
|---|---|
It is important to note that although authentication and authorization are usually used together, they can also be used independently. Authentication verifies the identity of the client. There are situations where authentication is sufficient, because all users are allowed to access the services, only the event and the user's identity has to be logged. On the other hand, authorization is also possible without authentication, for example if access to a service is time-limited (e.g., it can only be accessed outside the normal work-hours, etc.). In such situations authentication is not needed. |
Verifying the clients identity requires an authentication method based on something the client knows (e.g., password, the response to a challenge, etc.), or what the client has (e.g., a token, a certificate, etc.). Traditionally, firewalls authenticate the incoming connections based on the source IP of the connection: if a user has access (can log in) to that computer, he has the right to use the services. However, there are several problems with this approach. IP addresses can be easily forged (especially on the local network), and are not necessarily static (e.g., when DHCP is used). Furthermore, this method cannot distinguish the different users who are using a single computer (e.g., in a terminal server or hot-desking environment). For these reasons, authentication is most commonly left to the server application providing the particular service. However, Zorp is capable to overcome these problems in a simple, user-friendly way.
Most protocols (e.g., HTTP, FTP) capable of authentication offer only inband authentication, meaning that the client must authenticate himself on the server. The advantage of inband authentication is that it is an internal part of the protocol, and most client applications support it. The disadvantage is that many protocols do not support any form of authentication, and those that do support only a few authentication methods. Usually in an organization it is desirable to use only a single (strong) authentication method, however, not all protocols are suitable for all methods.
![]() |
Note |
|---|---|
A few protocols support authentication on the firewall as well, in this case the client actually has to authenticate himself twice: once on the firewall, once on the server. |
Outband authentication is performed independently of the service and the protocol in a separate communication channel. Consequently, any protocol can be authenticated, and the authentication method does not depend on the protocol. That way every protocol can be authenticated with a single authentication method. The only disadvantage of outband authentication is that a special client application (e.g., the Zorp Authentication Agent) has to be installed and configured on all client machines.
The process of outband authentication using the authentication agent is illustrated on the figure below.
17.1.2.1. Procedure – Outband authentication using the Zorp Authentication Agent
The client tries to connect to the server.
Zorp connects to the authentication agent of the client.
The actual authentication is performed:
Username
Authentication method selection.
Authentication according to the selected method.
If the authentication is successful, the connection to the server is established.
ZAS is a tool that allows Zorp services to be authenticated against existing user databases (backends). ZAS does not itself provide authentication services, it only mediates between Zorp and the backends. The traditional access control model in Zorp is based on verifying that a connection requesting a service from a source zone is allowed to access the service, and that the service is allowed to enter the destination zone. That is:
The client must belong to a zone where the particular service can be initiated (outbound service).
The service must be allowed to enter (inbound service) the destination zone.
Using ZAS to authenticate the connections adds further requirements to this model: the client must successfully authenticate himself, and (optionally) must be allowed to access the service (i.e. authorization can be also required). The actual procedure is as follows:
When the client initiates a connection, it actually tries to use a Zorp service. Zorp
checks if an authentication policy is associated to the service. If an
authentication policy is present, Zorp contacts a ZAS server (the
authentication provider specified in the authentication
policy). The ZAS server can connect to a user database (a
backend) storing user information (passwords, certificates, etc.)
required for a particular authentication method. (The type of the database determines which
authentication methods can be used.) Each instance of a ZAS server can
connect to a single backend, but multiple instances
can be run from ZAS. When an authentication request arrives from Zorp, ZAS evaluates a number
of configured routers: rules that determine which
instance should be used to authenticate the connection. This decision is
based on meta-information of the connection received from Zorp (e.g.,
Client-IP, Username, etc.). The selected
instance connects the client and the authentication is performed. The
authentication can take place within the protocol (inband), or using a dedicated
authentication agent (outband).
If the authentication is successful, Zorp verifies that the client is allowed to access the service (by evaluating the authorization policy). If the client is authorized to access the service, the server-side connection is built. The client is automatically authorized if no authorization policy is assigned to the service.
ZAS currently supports the following database backends:
zas_db
: zas_db authenticates users against an LDAP database, supporting the following
authentication methods: username/password,
S/Key, CryptoCard RB1, LDAP
binding, GSSAPI/Kerberos5, and
x.509.
file
: Authentication via the traditional htpasswd file. Supports
the username/password authentication method.
PAM : Authentication using Pluggable Authentication Modules. Any authentication method supported in PAM can be used.
RADIUS
: Authentication using a RADIUS server. Supports the
username/password and challange/response
authentication methods.
This section describes how to initialize and configure ZAS, and how to create the required Zorp policies.
The various parameters of ZAS can be configured on the Authentication Server ZMC component. Before starting to configure ZAS, add this component to the host (see Procedure 5.2.1.3.1, Adding new configuration components to host for details).
ZAS instances using specific database backends can be configured in the Instances section of the Authentication Server ZMC component. The existing instances and the type of database they use are displayed in a list; instances can be created, deleted, and modified using the control buttons below the list.
![]() |
Note |
|---|---|
Only unused instances can be deleted; if an instance is used in a router, the router has to be modified or deleted first. |
To create a new instance, complete the following procedure:
17.3.1.1.1. Procedure – Creating a new instance
Navigate to the Authentication Server ZMC component, and click on in the Instances section.
Enter a name for the instance and select the type of the database this instance will connect to from the combobox. Options specific to the selected backend type will be displayed.
Configure the options of the backend. The available backends and their options are described in the following chapters. The permitted authentication methods can be also selected here.
The zas_db backend authenticates users against an LDAP
database using the Microsoft Active Directory, the POSIX, or the Novell eDirectory/NDS
scheme. The backend has the following settings:
Fake user: Enable authentication faking. This requires a valid user account in the LDAP database that is exclusively used for this purpose. The user name of this account has to be set in the corresponding textbox.
![]() |
Note |
|---|---|
All backends are capable of authentication faking. This is a method to hide the valid usernames, so that they cannot be guessed (for example using brute-force methods). If somebody tries to authenticate with a non-existing username, the attempt is not immediately rejected: the full authentication process is simulated (e.g., password is requested, etc.), and rejected only at the end of the process. That way it is not possible to determine if the username itself was valid or not. It is highly recommended to enable this option. |
LDAP connection settings
Host: IP address of the LDAP server.
Port: Port number of the LDAP server.
Use SSL: Enable SSL encryption to secure the communication between ZAS and the backend.
Bind DN: Bind to this DN before accessing the database.
Set Bind password: The password to use when binding to LDAP.
LDAP search settings:
Base DN: Perform queries using this DN as base.
Filter: Search for accounts using this filter expression.
Scope combobox: Specifies the scope of the search.
base, sub, and
one are acceptable values, specifying
LDAP_SCOPE_BASE, LDAP_SCOPE_SUB,
and LDAP_SCOPE_ONE, respectively.
Username is a DN: Indicate that the incoming username is a fully qualified DN.
Follow referrals: If this option is set, ZAS will respect the referral response from the LDAP server when looking up a user.
Scheme: Specify LDAP scheme to use: Active
Directory, POSIX, or
NDS style directory layout.
![]() |
Note |
|---|---|
Make sure to set |
Authentication methods: Select and configure the allowed authentication methods.
Password: Implements password authentication. Allow password authentication only if the connection between Zorp and ZAS is secured (see Section 17.3.2, Authentication of Zorp services with ZAS for details).
S/Key: S/Key based authentication.
CryptoCard RB1: CryptoCard RB1 hardware token based authentication.
LDAP Bind: Authentication against the target LDAP server. Only password authentication is supported by this method, therefore it is only available if the connection between ZAS and Zorp is secured with SSL.
GSSAPI/Kerberos5: GSSAPI based authentication. The Principal name representing this authentication service also has to be set.
x.509: Authentication based on x.509 certificates. To use this method, a number of further options have to be specified:
The CA issuing the client certificates. This can be
an internal CA group (managed by the Zorp PKI, see Chapter 13, Key and certificate management in Zorp for details), or an external one. In the latter
case the locations of the trusted CA certificates and the corresponding CRLs
have to be set as space-separated lists of file:// or
ldap:// URLs.
Compare to stored certificate: Compare the stored certificate bit-by-bit to the certificate supplied by the client. The authentication will fail when the certificates do not match, even if the new certificate is trusted by the CA.
Verify trust: Verify the validity of the certificate (i.e. the certificate has to be issued by one of the trusted CAs and must not be revoked). This verification is independent from the Compare to stored certificate, so if both parameters are set, both conditions must be fulfilled to accept the certificate.
Verify depth: The maximum length of the verification chain.
Offer trusted CA list: Send a list of trusted certificates to the client to choose from to narrow the list of available certificates.
The htpass backend authenticates users against an Apache htpasswd style password file. The name (including the path) of the file to be used has to be specified in the Filename textbox. Authentication faking can be enabled by selecting the Fake user checkbox.
The PAM backend implements authentication based on the local authentication settings of the host running ZAS. It basically authenticates the users against the local PAM installation and/or using GSSAPI/Kerberos5. The PAM backend has the following parameters:
Enable PAM authentication: Enable PAM authentication. For PAM authentication the PAM service used for authentication has to be specified.
GSSAPI/Kerberos5: Enable GSSAPI based authentication. The Principal name representing this authentication service also has to be set.
Use local accounts: Use the local passwd/group database to query group membership of a given account.
Authentication faking can be enabled by selecting the Fake user checkbox.
The RADIUS backend has the following parameters:
Host: Hostname of the RADIUS server.
Port: Port of the RADIUS server.
Secret: The shared secret between the authentication server and ZAS.
Authentication faking can be enabled by selecting the Fake user checkbox.
Routers are simple conditional rules (i.e. if-then expressions) that determine which instance has to be used to authenticate a particular connection. They consist of a condition and a corresponding instance: if the parameter of the connection matches the set condition, then the authentication is performed with the set instance. The condition consists of a variable and a pattern: the condition is true if the variable of the connection is equal to the specified pattern. Routers can be configured in the Routers section of the Authentication Server ZMC component. They are evaluated sequentially: if the incoming connection matches a router, authentication is performed according to the instance specified in the router, otherwise the next router is evaluated. Configuring a new router is very simple, only the condition has to be specified and the backend instance selected. The exact procedure is as follows:
Navigate to the Authentication Server ZMC component, and click in the Routers section of the tab.
Select the instance that will authenticate the connections matching this router from the Target instance combobox.
Click on New, and define a condition for the router. Select the variable to be used from the Variable combobox, and enter the search term to the Value field. If the Variable of the inspected connection matches Value, the instance specified in Target instance will authenticate the connection.
Currently the following variables can be used to create conditions:
Client IP, Client zone,
Service, and User.
ZAS can only authenticate connections for which Zorp services explicitly request authentication. To allow this, the connection between Zorp and ZAS has to be set up. This requires configuring some connection parameters both in Zorp and in ZAS. The procedure below describes how to configure these parameters.
17.3.2.1. Procedure – Configuring communication between Zorp and ZAS
First, the connection settings of ZAS have to be configured in the Bind section on the Authentication server ZMC component. Specify the IP address/port pair on which ZAS should accept connections.
![]() |
Tip |
|---|---|
If ZAS and Zorp are running on the same machine, use the local loopback interface
(IP: |
![]() |
Note |
|---|---|
The same bind settings will have to be used when the Authentication provider is configured in the Policies tab of the Zorp ZMC component. |
If Zorp and ZAS are running on separate machines, enable and configure SSL encryption. Check the Require SSL for incoming connections checkbox and click on next to the Certificate textbox and select a certificate. This certificate has to be available on the ZAS host and will be presented to Zorp to verify the identity of the ZAS server. For details about creating certificates, see Section 13.3.8.2, Creating certificates.
To enable mutual authentication (i.e. to verify the certificate of Zorp), check the Verify peer certificate checkbox and select the CA group containing the trusted certificates. Also make sure to set the Verify depth high enough so that the root CA certificate in the CA chain can be verified. The default value (3) should be appropriate for internal CAs.
The connection also has to be set up from the Zorp side. This can be accomplished by creating an Authentication provider on the Policies tab of the Zorp ZMC component. Click on New, select Authentication provider from the Policy type combobox, and enter a name for the provider into the Policy textbox.
Enter the IP address of the ZAS server into the Address field. This must be the same address as specified as Bind address for ZAS in Step 1.
If SSL encryption was enabled in Step 2, select the Certificate Zorp will show to ZAS. Zorp can also verify the certificate shown by ZAS using the CAs specified in CA group.
![]() |
Note |
|---|---|
Obviously, the CAs issuing the certificates of Zorp and ZAS must be members of the CA groups set to be used to perform the verification of the certificates, otherwise the verification will fail. |
Now an Authentication policy has to be set up. Authentication policies are used by Zorp services and specify which authentication provider is used by the service, the type of authentication (inband, outband), and caching parameters. An authentication policy can be used by multiple services.
17.3.2.2. Procedure – Configuring Zorp Authentication policies
Create an Authentication policy on the Policies tab of the Zorp ZMC component. Click on New, select Authentication policy from the Policy type combobox, and enter a name for the policy into the Policy textbox.
Select the Authentication provider combobox by clicking ... and selecting a provider.
Select the type of authentication to be used from the Class combobox. The following authentication types are available:
Inband authentication: Use the built-in authentication of the protocol to authenticate the client on Zorp.
ZAAuthentication: (Also called Satyr authentication in previous versions). Outband authentication using the Zorp Authentication Agent. This method can authenticate any protocol. For agent authentication the following additional parameters have to be set:
Certificate: Select the certificate that Zorp will show to the authentication agent running on the client. The certificate is required because the communication between the authentication agent and Zorp is SSL-encrypted. The certificate has to be issued by a CA trusted by the authentication agent. The process of installing CA certificates for the authentication agent is described in Section 4.7, Installing the Zorp Authentication Agent (Satyr).
Port: The port where Zorp accepts connections from the authentication agents running on the clients.
Timeout: The period of time the client has to complete the authentication after an authentication request is sent by Zorp.
Server authentication: Enable the client to connect to the target server, and extract its authentication information from the protocol.
Configure the authentication cache using the Class combobox of the Authentication cache section. The following options are available:
None: Disable authentication caching. The client has to re-authenticate each time when starting a new service.
AuthCache: Store the results of the authentication for the period specified in the Timeout field, i.e. after a successful authentication the client can use the service (and start new ones of the same type) for that period. e.g., once authenticated for an HTTP service, the client can browse the web for Timeout period, but has to authenticate again to use FTP.
If the Update timeout for each session checkbox is selected, timeout measuring is restarted each time the client starts service. Selecting the Consider all services equivalent checkbox means that Zorp does not make difference between the different services (protocols) used by the client, after a successful authentication he can use all available services without having to re-authenticate himself. e.g., if this option is enabled in the example above, the client does not have to re-authenticate for starting an FTP connection.
To actually use the authentication policy configured above, the Zorp services have to reference the policy.
The authentication policy to be used by the service can be selected from the Authentication policy combobox on the Instances tab of the Zorp ZMC component. The combobox displays all the available authentication policies.
Each Zorp service can use an Authorization policy to determine
whether a client is allowed to access the service. If the authorization is based on the
identity of the client, it takes place only after a successful authentication —
identity-based authorization can be performed only if the client's identity is known and has
been verified. The actual authorization is performed by Zorp, based on the authentication
information received from ZAS or extracted from the protocol. Zorp offers various
authorization models to ranging from simple (PermitUser) to advanced
(NEyesAuthorization). Both identity-based and indentity-independent
authorization models are available. The configuration of authorization policies is described
in the procedure below.
17.3.3.1. Procedure – Configuring authorization policies
Create an Authorization policy on the Policies tab of the Zorp ZMC component. Click on New, select Authorization policy from the Policy type combobox, and enter a name for the policy into the Policy textbox.
Select the authorization model to use in the policy from the Class combobox. The following models are available:
BasicAccessList : Authorize only users meeting a set of authorization conditions, e.g., certain users, users belonging to specified groups, or any combination of conditions using the other authorization models.
NEyesAuthentication : The client trying to access the service has to be authorized by one (or more) authorized clients. This model can be used to implement 4-eyes authorization solutions.
PairAuthentication : Authorize only userpairs — single users cannot access a service, i.e.: only two different users (with different usernames) can access the service.
![]() |
Tip |
|---|---|
|
Configuring pair |
PermitGroup
: Authorize only the members of the listed usergroups. This is a simplified
version of the BasicAccessList model.
PermitUser
: Authorize only the listed users. This is a simplified version of the
BasicAccessList model.
PermitTime : Authorize any user but only in the set time interval. This authorization model does not require authentication.
![]() |
Tip |
|---|---|
Use the |
Configure the parameters of the selected authorization class. See Section 17.3.3.2, Authorization models of Zorp for the detailed description of the classes.
Navigate to the Instances tab of the Zorp ZMC component, and select the service that will use the authorization policy.
In the Service parameters section, select the Authorization policy to use from the combobox.
The configuration parameters of the authorization models available in Zorp are described in this section.
BasicAccessList can be used to create complex authorization
scenarios by combining other authorization types into a set of
Required or Sufficient conditions. Each
condition refers to an authorization type (e.g., PermitUser,
PairAuthorization, etc.) and Authentication
task (Sufficient or Required). The conditions are
evaluated sequentially. A connection is authorized if a
Sufficient condition matches the connection, or all
Required conditions are fulfilled. If a
Required condition is not met, the connection is refused.
![]() |
Note |
|---|---|
Because of the sequential evaluation of the conditions,
|
To create a new condition click , and select the type of the condition from the Authentication task and Condition comboboxes. Then click on , and enter the value for the condition (e.g., the username or the name of the group).
![]() |
Example 17.1. BasicAccessList |
|---|---|
|
The following condition list allows the
|
When NEyesAuthorization is used, the client trying to access
the service has to be authorized by another (already authorized) client (this
authorization chain can be expanded to multiple levels).
NEyesAuthorization can only be used in conjunction with another
NEyesAuthorization policy. One of them is the
authorizer set to authorize the authorized
policy.
In a simple 4-eyes scenario the authorizer policy points to the
authorized policy in its Authorization policy parameter, and has
its Wait for other authorization policies to finish parameter
disabled. The authorized policy has an empty
Authorization policy parameter (meaning that it is at lower the
end of an N-eyes chain), and has its Wait for other authorization policies to
finish parameter enabled, meaning that it has to be authorized by another
policy.
NEyesAuthorization has the following parameters:
authorize_policy: The authorization policy authorized by
the current NEyesAuthorization policy.
Wait for other authorization policies to finish: If this
parameter is set, the client has to be authorized by another client. If set to
FALSE, the current client is at the top of an authorizing
chain.
![]() |
Note |
|---|---|
When setting this parameter, consider the timeout value set in the client application used to access the server. There is no use in specifying a longer time here, as the clients will time out anyway. |
Max time for the authorization to arrive: The time (in milliseconds) Zorp will wait for the authorizing user to authorize the one accessing the service.
When this authorization model is used, only two users simultaneously accessing the
service are authorized, single users are not permitted to access the service. Set the
time (in milliseconds) Zorp will wait for the second user to access the service using
the Max time for the pair to arrive spinbutton.
When setting this parameter, consider the timeout valuse set in the client application used to access the server. There is no use in specifying a longer time here, as the clients will time out anyway.
This model allows the members of the specified groups to access the service. Select
the grouplist parameter and click . In
the appearing list editor window click , then enter the name
of an authorized usergroup. Additional groups can be added by clicking
again.
![]() |
Note |
|---|---|
The elements of the list can be disabled via the local menu. |
This model allows the listed users to access the service. Select the
userlist parameter and click . In
the appearing list editor window click , then enter the name
of an authorized user. Additional users can be added by clicking
again.
![]() |
Note |
|---|---|
The elements of the list can be disabled via the local menu. |
The PermitTime policy stores a set of intervals specified by their starting and ending time — access to a service using such a policy is permitted only within this interval.
To configure an interval, click on , then click
. Select the first qstring value and
click on . Enter the starting time of the interval (e.g.,
8:30) and click . The ending time of
the interval can be set similarly via the second qstring value.
![]() |
Note |
|---|---|
A single policy can contain multiple intervals. |
The Zorp Authentication Agent has to be installed on the client machines when outband authentication is used on the network. For detailed instructions about how to install the authentication agent see Section 4.7, Installing the Zorp Authentication Agent (Satyr) and the Satyr Manual.
Logging in ZAS can be configured in the Logging section of the Authentication server ZMC component. The parameters related to logging in ZAS are the following:
Log level: Verbosity level of the logs. Level 3 is the default value, and is usually sufficient. Level 0 produces no logs messages, while 10 logs every small event, and should only be used for debugging purposes.
Use message tags: Enable the logging of message tags.
Apart from configuring computers for optimal performance, it is also very important to know that they are operating properly, and to receive notifications from any problems as soon as possible. This is especially important in business-critical production environments. Zorp offers an effective and flexible framework to monitor the state of Zorp, ZAS, or other hosts, including their availability, load, and other parameters.
The monitoring subsystem of ZMS collects numerical information about Zorp hosts and other machines and notifies the administrator if a monitored parameter (e.g., the amount of free memory, system load, etc.) exceeds or falls below a threshold value. The concept of the monitoring subsystem is the following:
ZMS communicates with the monitored hosts via monitoring agents using encrypted and mutually authenticated SSL channels. The monitoring agents control the monitoring-related settings of the hosts and also return the collected information to ZMS. Special scripts called jobs are periodically executed on the hosts to provide information about the state and various parameters of the host. The monitoring agents transfer the results of the jobs to the ZMS. ZMS compares the result to a set of conditions called triggers — if a parameter is higher or lower than it should be, ZMS sends an alert (in e-mail, SMS, etc.) to notify the administrator. Alerts have two importance levels: warning and critical. The actual state of jobs, triggers, etc. can also be monitored from ZMC. All data can be stored in a database and displayed graphically.
![]() |
Note |
|---|---|
The jobs running on the monitored hosts only collect information — all evaluation is performed by ZMS. |
In order to use monitoring, some components have to be installed and configured. These steps are usually performed during the installation of the ZMS host, but can be also performed manually at a later date. The following steps have to be completed:
Ensure that a Postgresql database and a database user is available either on the
host running ZMS, or on a remote machine. When installing the ZMS host, selecting the
Monitoring component and the Local database
options automatically creates a database called zmsmonitor and a
user called zms (with a default zms
password). See Section 4.3.9.5, ZMS monitoring database setup for details.
![]() |
Note |
|---|---|
If not performed during the initial installation, the database can be created by executing the dpkg-reconfigure zms-engine-plugins command from the command line on the ZMS host. If the package is not available on the host, install it by issuing the apt-get install zms-engine-plugins command. |
If the Agents component was not selected during the installation of the ZMS host, then the monitoring agent has to be installed. Issue the apt-get install zms-monitor-agent command from the command line on the ZMS host.
Navigate to the host to be monitored in ZMC and check the Monitor connection checkbox visible in Configuration view to enable monitoring. The monitoring agent will try to connect the host. The status of this connection is indicated on the second led of the host, and can also be checked from the / menu item.
In case of any problems, navigate to the uda parameter of the
Monitoring database in the Management server
ZMC component of the ZMS host and verify that the connection to the database is properly
configured.
Monitoring settings can be accessed from the main menu item after selecting from the menu.
The Monitoring view is similar to the Configuration view: a tree of the monitored hosts is displayed on the left, while the monitoring parameters of the hosts can be configured on the different tabs in the main part of the window.
On the Overview tab the most important information about the selected host is summarized, including the status of triggers, jobs, the connection to the database, and the recent alerts.
![]() |
Warning |
|---|---|
Monitoring settings do NOT have to be committed, all modifications are automatically executed and stored in the ZMS database. |
The monitoring tree has two different modes: Host hierarchy and Site hierarchy. Host hierarchy displays all monitored hosts, including the ones not managed from ZMC (e.g., routers, servers, etc., see Section 18.4, Nonmanaged hosts for details). Site hierarchy displays only managed hosts according to the hierarchy of the site. Hosts managed from ZMC are Zorp, ZAS, and ZCV hosts and clusters. Switching between the two modes is possible from the menu. Some additional parameters related to monitoring can be set on the Monitoring tab of the / menu.
Status information about managed hosts is indicated by two leds in the tree. The first led shows the state of the monitoring connection (i.e. the management agent) to the host, while the second one the worst state of the triggers of the host (i.e. the led is green if all triggers are in normal state, but red if one of the triggers is critical). This second led also displays the status of the site's PKI, changing to yellow if a key is about to expire, and to red if a key has already expired. Detailed information is displayed in tooltips.
Jobs are the actual scripts that collect information about a host. Jobs can be either local (providing information about the host the job is executed on, e.g., reporting the amount of free memory), or remote, when the monitored host executes a job that provides information about a third machine (e.g., testing the availability of a remote machine by pinging it).
Jobs can be monitored and managed on the Jobs tab (available in monitoring mode). The main section of the tab displays information about the existing jobs in a table (the same information is displayed in a compact form for each job in a tooltip). The columns of the table can be reordered by dragging the header of the columns to their desired place; the visible columns can be selected from the local menu of the table header. The following information is displayed about each job:
Owner: The host that the job is running on. To display the name of the site the host belongs to select the Show site name in host name checkbox on the Monitoring tab of the menu (under the main menu item).
Status: The status of the job. It can be
Running, Disabled, or
Error.
Job: Type of the job. Specifies the parameter monitored by the job. The job types available in Zorp are described in Section 18.3.1.2, Job types.
Target Host: The target of the job (only for remote jobs, e.g., the target of a ping).
Parameters: The parameters of the job (depends on the job type).
Scheme: The operation mode of the job. Currently the diskfree and the mysql jobs have multiple operation modes.
Status Change: The last time when the status of the job changed.
Last Run: The last time when the job was executed (exact date and time).
Output: The results returned by the job (e.g., the amount of available free memory).
Period (sec): The frequency the job is executed (in seconds).
I.e. 60 indicates that the job is run once every minute.
Calendar: Specifies the periods of the days/week when the job is
allowed to run. By default, the jobs are enabled all the time
(7x24, 24 hours a day, 7 days a week). See Section 18.3.2, Calendars for details.
Storage Time (day): Number of days the results are stored in the database.
Archive: Indicates if the results are archived or not.
![]() |
Note |
|---|---|
If the results are not archived, they are deleted if the Storage Time expires. |
Triggers using the output of a job can be displayed by selecting the job and clicking the button.
If the monitoring data are collected in a database, the data can be displayed graphically using the button.
To execute a job immediately, click .
Triggers are conditions (threshold values) assigned to the output of one or more jobs
(the output parameters of the jobs are described in the Zorp Reference
Guide). If the output of a job is outside the normal range specified in the
trigger, an alert can be sent to the specified user. Triggers send an alert only if the
output is out of the normal range for the number of times set in the Hard
state parameter of the trigger. Triggers can be related to a single job, or also
to a combination of the output of several different jobs connected to each other with
logical operations (see Section 18.3.1.5, Complex triggers for details).
Triggers can be monitored and managed on the Triggers tab (available in monitoring mode). The main section of the tab displays information about the existing triggers in a table (the same information is displayed in a compact form for each trigger in a tooltip). The columns of the table can be reordered by dragging the header of the columns to their desired place; the visible columns can be selected from the local menu of the table header. The following information is displayed about each trigger:
Name: Name of the trigger.
Status: Status of the trigger, one of the following:
Undefined: The initial state of the trigger, before the corresponding job is executed.
Normal: All related output parameters are within the allowed range.
Warning: The result of a related job met the
Warning conditions at least Hard State
number of times.
Critical: The result of a related job met the
Critical conditions at least Hard
State number of times.
Flap: The trigger enters the Flap state if it seems to
oscillate between two other states (e.g., it keeps changing from
Normal to Warning and back).
Error: The job related to the trigger could not be executed, or the returned output was invalid.
Status Change: The last time when the status of the trigger changed.
Last Alert: The last time when the trigger raised an alert.
Hardness: The number of times the trigger conditions were met.
If Hardness reaches the number set in the Hard
State parameter of the trigger, an alert is sent.
Last Status: The status of the trigger before it changed to the
current status. e.g., if after a normal operation period the status of the trigger
suddenly changes to critical, Last Status assumes the
Normal state, while Status becomes
Critical.
Owner: The host that the trigger belongs to.
Calendar: Specifies the periods of the days/week when the
trigger is allowed to raise an alert. By default, triggers are enabled all the time
(7x24, 24 hours a day, 7 days a week). See Section 18.3.2, Calendars for details.
Group: The group of administrators who are notified in case of an alert. See Section 18.3.1.6, Contacts and alerts for details.
Alert Interval: In case of an alert, a notification is sent to the administrators every Alert Interval seconds.
The jobs a trigger is based on can be displayed by selecting the trigger and clicking the button.
If the monitoring data are collected in a database, the data can be displayed graphically using the button. The and can also be displayed using the corresponding buttons.
The easiest way to create and configure a new monitoring job and a corresponding
trigger is to use the
available from the icon bar and the
menu. The procedure is the following:
18.3.1.1.1. Procedure – Creating new jobs and triggers
Change to view, and click on the
icon.
Select the host on which the new job will run from the combobox and click .
Configure the job on the Create job panel.
Select the type of the job from the Job combobox and set its parameters in the Parameters section. For details on the available jobs, see Section 18.3.1.2, Job types.
![]() |
Note |
|---|---|
In case of remote jobs, also enter the IP address of the remote machine into the Remote Host field. |
Set the frequency the job will be executed with the Period spinbutton. Also select a calendar for the job if needed (see Section 18.3.2, Calendars for details).
Specify whether the output of the job should be stored and archived or not, and click .
Configure the trigger associated with the job.
Modify the default name of the trigger if needed.
Select the calendar that will apply to the trigger: alert notifications will be sent only within this interval.
![]() |
Note |
|---|---|
The difference between the calendar set for jobs and triggers is the
following: the job calendar specifies when the job is executed, while the
trigger calendar specifies when the received outputs are evaluated. Consider the
following example: a job has a 7/24 calendar and is set to run once every hour
(Period is set to |
Select the group of administrators to be notified in case of an alert using the Group combobox.
Set the parameter. This parameter determines how many times the output parameter of the trigger has to meet the warning or critical trigger conditions to raise an alarm. Obviously, if it is set to 1, then a warning alert will be sent when the output meets the warning condition, and a critical alert when it meets the critical condition. If is set to a higher number, an alert will be sent only if the output parameter of the job meets the same kind of alert conditions number of times within a period.
![]() |
Example 18.1. Triggers and the Hard state parameter |
|---|---|
Suppose that ten consecutive outputs of a job give the following results
when compared to the trigger: |
Set Alert interval: after the initial alert notifications are sent every Alert interval seconds until the status of the trigger returns to Normal.
Set the conditions for issuing warnings and alerts.
Select the output parameter to evaluate from the Fields combobox. The available output parameters depend on the job type — see the Zorp Reference Guide for details.
Each output parameter is a numerical value, and warning and critical threshold levels can be assigned to a parameter. The relation (greater than, equal to, etc.) between the threshold value and the output parameter can be set using the comboboxes. Set the threshold values and relations as needed for the particular job and the scenario it is used in.
Use the button to select which status transitions of the trigger should generate an alert notification. The possible trigger statuses are displayed in a matrix, with each element of the matrix corresponding to the transition from status of the row to the status of the column. e.g., if the checkbox in the Warning column of the Critical row is checked, a notification is sent if the status of the trigger changes from Critical to Warning.
To assign additional triggers to other output parameters of the job click on and repeat the above steps to configure this new trigger.
Click . Check the Start job automatically checkbox and click . If this checkbox is not checked, the created job will be automatically disabled. (Disabled jobs can be started by right-clicking the job on the Jobs tab and selecting from the local menu. )
The created jobs and triggers can be modified using the buttons of the respective tabs. Complex triggers based on the outputs of multiple jobs can also be configured (see Section 18.3.1.5, Complex triggers for details).
Zorp hosts also have a number of jobs and related triggers automatically configured. These are described in Section 18.3.1.3, Default jobs and triggers.
The following job types are available by default in Zorp:
![]() |
Note |
|---|---|
The output parameters of the jobs are described in the Zorp Reference Guide. |
connect: Establishes a TCP connection with the specified remote host. The response of the host (i.e. the reply banner) can also be checked against a preset banner message. Parameters:
Port: The port of the remote host to establish the connection on.
Timeout: Connection timeout in seconds; if the connection cannot be established during this period, the remote host is assumed to be unreachable/dead.
Regexp: The first line of the reply sent by the remote host when the connection is established is compared to this expression. This feature can be used to check the banners of applications (e.g., check the type of the FTP server) running on the remote host.
Icase: Enable/disable case sensitive comparison of the host reply.
diskfree: Reports the amount of free disk space available on
a partition or mount point. The parameter of the job is the partition or the mount
point (e.g., /dev/hda2 or /var)
hastatus: Returns the status of the specified resource of a cluster, i.e. on which node is it active at the moment.
iface: Reports statistical information (e.g., number of bytes sent/received, errors encountered, etc.) about the specified interface.
load: Reports the average load of the host and the number of
running processes, as well as the total number of processes (i.e. the information
contained in /proc/loadavg).
mem: Reports information about the memory usage of the host
(i.e. the information contained in /proc/meminfo).
mysql: Establishes a mysql connection to the SQL server running on the specified remote host.
Port: The port number the remote mysql server is accepting connections on.
Username: Username used for authenticating the connection.
Password: Password for the username.
ping: Executes the ping command in every
Frequency second within the period set in
Interval and returns the average of the measured results.
(E.g., if Frequency=1 and Interval=5,
the target is pinged five times: once every second in a five-second period.)
postfix: Returns information about the status of Postfix on the monitored host, including the number of mails in the queue, the size of the queue, etc.
proc: Returns the number of processes running with the specified name.
raid: Executes the /proc/mdstat command for the specified volume and returns type and status information. See the manual pages of mdstat for details.
smtp: Establishes an SMTP connection to the specified remote host.
Port: The port number the remote SMTP server is accepting
connections on (usually port 25).
Timeout: Connection timeout in seconds; if the connection cannot be established during this period, the remote SMTP server is assumed to be dead.
urlcheck: Tests the availability of the specified
Url. Although the job is executed on the host selected for
the job, it also appears as a remote job on the host specified in the
Remote host field. This job supports ftp and http
connections; the Url has to be specified accordingly (i.e.
starting with ftp:// or http://).
vmstat: Reports information about processes, memory, paging, block IO, traps, and cpu activity using the vmstat utility. See the manual pages of vmstat for details.
zorp: Returns information about the status of the specified Zorp instance, e.g., the number of total/running threads, etc.
ZMS has the following monitoring jobs and triggers configured by default to monitor the global status of the ZMS host, the managed sites, and also the individual Zorp hosts.
![]() |
Note |
|---|---|
Global and site-level jobs and triggers are displayed only when the is selected form the menu. |
| Job name | Job description | Trigger name | Trigger description | |
|---|---|---|---|---|
| Global | backup | Monitors the automatic backup script of ZMS. | Backup result | Alerts if the backup has failed. |
| Global | db | Monitors the connection to the database storing the monitoring data. | Monitoring database | Alerts if the monitoring database is not accessible. |
| Site | pki | Monitors the status of the PKI on the site, i.e. the validity of the CAs, keys, and certificates. | PKI | Sends a warning if a certificate is soon to expire and alerts if it has expired. |
| Host | transfer and monitor | These two jobs monitor the status of the transfer and monitoring agent connections to the Zorp host. | Connections | Alerts if a connection to a Zorp host fails. |
| Host | distribute | Checks that the keys and certificates on the host are up-to-date. | KeyDistribute | Alerts if the keys in the ZMS have not been distributed to the host, or if the key distribution failed. |
| Host | jobcheck | Checks that the monitoring jobs were successfully executed. | MonitorJobs | Alerts if the execution of a monitoring job failed. |
Table 18.1. Default jobs and triggers
![]() |
Warning |
|---|---|
Modifying the default jobs takes effect immediately. |
It is possible that for some reason the default jobs are not available on a host, for example if monitoring was not configured when the host was bootstrapped. To automatically create these jobs and triggers, complete the procedure below. It is also possible to copy the monitoring configuration (all jobs and triggers) from another host within the site.
18.3.1.3.1. Procedure – Restoring default jobs and triggers
Select the item of the menu.
Select the host that has no monitoring jobs configured, and click on .
In the opening dialog select the Configure default monitoring radiobutton and click .
![]() |
Tip |
|---|---|
To copy the settings from another host, select the Migrate configuration from host radiobutton, select the source host from the combobox, and click . The names of the triggers can be modified in the next dialog. |
A confirmation dialog opens. Select to create the default jobs and triggers on the host.
![]() |
Warning |
|---|---|
This step restores the monitoring configuration of the host to the default, deleting all custom jobs and triggers created previously. |
If a host accidentally breaks down or becomes unreachable, all triggers become active at once, and a large amount of alert notifications is sent to the administrators. Obviously, this is not useful, i.e. if a host is not accessible, it is logical that its SMTP server and memory information is not accessible either, and a further alert about the status of the SMTP server only hinders the work of the administrator.
To avoid this situation, the triggers are organized into a hierarchy: if a high-level
trigger (e.g., a connect trigger) raises an alert, all other
lower-level triggers (e.g., the status of the SMTP server) are temporarily disabled. In
other words, a trigger can raise an alert only if all higher level triggers are in
Normal state. That way the administrator receives only the most
important alert notifications about the situation.
Each host managed by ZMS has an alive trigger by default (a
connect job monitoring the accessibility of the host); this
trigger is the highest level trigger in the trigger hierarchy of the host.
The hierarchy can be extended to the hosts as well: i.e. if
Host_B can be accessed (networkwise) only via
Host_A, it is recommended to move the triggers of
Host_B under Host_A. That way if
Host_A breaks down or becomes unreachable, only the alive trigger
of Host_A raises an alert. Host hierarchy can be set using the
arrow icons of the Host Editor panel. The is available from the menu. To include a
non-Zorp host (e.g., a router) in the host hierarchy follow the description of Section 18.4, Nonmanaged hosts.
![]() |
Tip |
|---|---|
It is highly recommended to include the router(s) between ZMS and the managed Zorp hosts in the host hierarchy. |
Trigger hierarchies can be configured by selecting the checkbox and using the arrows below the list.
![]() |
Warning |
|---|---|
Alive triggers can be deleted only if it does not have any other triggers below it in the hierarchy. |
Triggers can also be based on the outputs of multiple jobs, and/or multiple output parameters of a single job. To add a complex formula to a trigger, complete the following procedure.
![]() |
Note |
|---|---|
Results of local and remote jobs cannot be combined within a single trigger. |
18.3.1.5.1. Procedure – Creating complex triggers
Navigate to the Triggers tab and create a new trigger, or edit an existing one.
Enter a name for the trigger and set the parameters (i.e. Hard
state, Alert interval, etc.) just like for a simple
trigger.
Click on . Complex triggers can be configured in the appearing Formula Editor, which is very similar to the Filter Editors used throughout ZMC.
Select the job type (local or remote) this trigger will use with the respective radio buttons.
The editor has two tabs (Warning and Critical) to configure the conditions for alerts. Each condition is a mathematical or logical relation between a particular result of a job and a specified value. Set the conditions as required. New conditions can be added with the button.
![]() |
Warning |
|---|---|
Do not forget to configure the conditions both on the Warning and the Critical tab. |
Select the logical (AND/OR) operation that will connect the conditions using the Logic combobox.
Alert notification messages can be sent to groups of administrators, with each group containing the contacts of one or more administrators.
An administrator can be the member of several groups. Groups and group memberships can
be managed by selecting the
item of the menu and
selecting the Groups tab. By default, Zorp creates the
System group and the Admin user.
Contacts can be managed from the Contacts tab. A contact has the following parameters:
Name: Name of the administrator.
Calendar: The availability of the administrator. Alert notifications will only be sent to the administrator if he/she is available.
Groups: The groups that the administrator is member of. An administrator can belong to several groups.
Pagers: Contact information of the administrator. Alerts are sent to all available contacts. The different contact types can be enabled/disabled using the corresponding checkboxes and providing the required contact information.
E-mail: Send alerts via e-mail to the specified e-mail address.
SMS: Send alerts as a compact e-mail. Specify a valid e-mail address that your e-mail or phone provider forwards to a mobile phone as an SMS.
System log: Send the alert to the system log with the specified log prefix.
User defined: Run the specified custom script (e.g.,
/usr/bin/myscript.sh). Alerts are sent to the standard
input. Parameters can be also passed to the standard input (e.g.,
/usr/bin/myscript.sh username).
Calendars are timetables describing the availability of a job, a trigger, or an
administrator (contact). A calendar assigned to a job or trigger determines when the job is
executed or when a trigger can raise an alert. Each calendar includes a
period listing the type and order of days within
the period. For example, the Week period consists of five
Weekdays and two Weekends. Each day has one
or more intervals specifying the valid hours of the given day. The
intervals of a day can be different for each
calendar, e.g., Weekdays in the 5x8 calendar
have an interval from 9:00 to 17:00 (for normal working hours), while the interval is set
from 8:00 to 20:00 in the 5x12 calendar. It is important to note that
the days of a period are fixed, while the intervals of the days can be different between
calendars using the same period.
Calendars can be managed by selecting the
Calendar Editor from the icon bar or from the
menu while in view mode.
The available calendars along with the type of period they use are displayed in the upper part of the panel. The days of the selected calendar are displayed in the Days section of the panel. To configure the intervals for the days of the selected calendar, use the // buttons in below the Intervals section.
To create a custom calendar, complete the following procedure:
18.3.2.1.1. Procedure – Creating a custom calendar
Open the Calendar Editor.
If the new calendar will use a custom period, click on and follow the instructions below. Otherwise, skip this step.
Click on in the Calendar periods section and enter a name for the new period.
Click on in the Days section and enter a name for the day. Repeat this step and create all required days. Click when finished.
Click on in the Calendar section and enter a name for the new calendar.
Select the period to be used from the Period combobox and set the starting date if needed.
![]() |
Note |
|---|---|
For week-based periods that start on Monday the default Start at date is appropriate. |
Check the Default calendar checkbox if this new calendar should be assigned to every new item by default, and click .
Select this newly created calendar. The days of the period used in the calendar will be displayed in the Days section.
Select a day and assign an interval to the day by clicking in the Intervals section and setting the From and To values. Repeat this procedure for each day.
![]() |
Note |
|---|---|
If no interval is set for a day, the service using this calendar will not be available on that day (e.g., the job will not be executed, etc.). |
Configure exception dates if needed using the . See Section 18.3.2.2, Calendar exceptions for details.
Calendar exceptions are useful for example to prevent scheduled shutdowns from generating alerts, or administrators receiving alerts during their holiday, etc. Exceptions constitute of a beginning and ending date, and one or more intervals.
![]() |
Warning |
|---|---|
Exceptions are not global, they refer to a selected calendar. |
18.3.2.2.1. Procedure – Configuring calendar exceptions
Open the Calendar Editor and select the calendar to which the exception will apply to and click on .
Click on and set the beginning and end date of the exception in the From date, From time, To date, To time fields.
Click on and add the intervals when the exception will be effective. These intervals apply to every day between the beginning and end date, e.g., when the beginning date is May 1, the ending date is May 7, and the exception interval is from 8 AM to 9 AM, then triggers using the selected calendar will not produce any alerts in the mornings of the first week of May.
To illustrate the working of calendars and calendar exceptions, consider the example shown on the figure below.
A trigger related to a job can send alerts to two administrators (contacts), where one of the contacts (Contact 1) uses the same calendar as the trigger. Contact 2 uses a different calendar (Calendar 3) that has an exception set that is currently effective. This means that if an alert is raised by the trigger, only Contact 1 receives a notification. However, if an exception is set for the trigger (which uses Calendar 2), this results in the following effects:
If anything happens to the job, no one is notified, because the results of the job are not evaluated by the trigger.
Contact 1 will not receive any notifications during the exception period, since he/she also uses Calendar 2. This means that other triggers (that do not use Calendar 2) are also unable to send him/her notifications.
If any other jobs or triggers use Calendar 2, they will also be disabled for the exception period.
The above considerations should be observed when configuring the calendars and monitoring settings.
![]() |
Tip |
|---|---|
It is recommended to use different calendars for the jobs, triggers, and contacts when exceptions are used in order to avoid any side-effects. |
Jobs and triggers can be created on clusters just like on normal hosts, and they apply to all nodes of a cluster by default. However, it is possible to customize the jobs and triggers on the different nodes.
When creating or editing a job or a trigger, the target node can be selected by clicking the / button.
The window has multiple tabs for clusters, displaying node-specific information on the additional tabs.
By default, all hosts managed by ZMS can be monitored. However, in order to properly set
up the hierarchy of the hosts, it can be useful to add other machines (e.g., routers, etc.) to
monitor their status. To monitor such nonmanaged hosts, the host has to be added via the
(see Procedure 18.4.1, Adding nonmanaged hosts to monitoring), and a remote job
(e.g., connect, ping) running on a managed host,
monitoring the nonmanaged one. An alive trigger for the nonmanaged host can be assigned to
this job. The exact procedure is as follows:
18.4.1. Procedure – Adding nonmanaged hosts to monitoring
Select the item from the menu and click on .
Enter a name for the host and click on .
Enter a name (e.g., eth0) into the Address
name field to refer to the interface of the host. Enter the corresponding IP
address into the IP address field. To list multiple interfaces/IP
addresses for the same host, click on again. Otherwise click
and leave the Host Editor.
Select a managed host that will monitor the nonmanaged device set in the previous step
and create a job on it (either using the , or
individually without a trigger). The job should be either a connect
or a ping job.
Set the IP address of the nonmanaged host using linking in the Remote Host field of the job.
Select the nonmanaged host (change to in the menu if needed) and create a trigger on this host.
Enter a name for the trigger. The first trigger created on the host is automatically set to be the Alive trigger. Set other parameters as needed.
Click on , select the job created in the previous step, and configure the trigger conditions as needed.
Open the and arrange the new nonmanaged host in the host hierarchy as needed.
The monitoring data collected by ZMS about jobs and triggers can be displayed both graphically as histograms and as tables. The procedure below describes how to display the results of jobs; the results of triggers can be displayed identically from the Triggers tab.
18.5.1. Procedure – Displaying histograms
Navigate to the Jobs tab, select a job and click on .
Select the output parameters to display from the Fields section.
Select the mode of display using the View type radiobutton.
Set the interval to display using the radio buttons of the Set interval section and setting the corresponding parameters. The interval can be specified by setting the beginning of the interval, setting the beginning and the end of the interval, or by requesting the data from the last few minutes.
![]() |
Note |
|---|---|
For jobs, the histogram can be only displayed if the job is set to store the results of the job in a database. |
Lists of the trigger states and the sent alert notifications can be created via the and buttons of the Triggers tab. Set the queried interval on the top of the panel, select the triggers to display, and click on . In an additional combobox is available to display only the alerts sent to the selected administrator.
This chapter explains how to build encrypted connections between remote networks and hosts using Virtual Private Networks (VPNs).
Computers and even complete networks often have to be connected across the Internet, like in the case of organizations having multiple offices or employees doing remote work. In such situations it is essential to encrypt the communication to prevent anyone unauthorized from obtaining sensitive data. Virtual Private Networks (VPNs) solve the problem of communicating confidentially over an untrusted, public network.
VPNs retain the privacy, authenticity, and integrity of the connection, and ensure that the communication is not eavesdropped or modified. VPN traffic is transferred on top of standard protocols over regular networks (e.g., the Internet) by encapsulating data and protocol information of the private network within the protocol data of the public network. As a result, nobody can recover the tunneled data by examining the traffic between the two endpoints.
VPNs are commonly used in the following situations:
To connect the internal networks of different offices of an organization.
To allow remotely-working employees access to the internal network.
To transfer unencrypted protocols in a secure, encrypted channel — without having to modify the original protocol.
To secure Wi-Fi networks.
Different VPN solutions use different methods to encrypt the communication. The main VPN types are IPSec, SSL/TLS, PPTP, and L2TP, with each type having many different implementations. Zorp supports the following VPN solutions:
IPSec (Openswan)
SSL (OpenVPN)
The topology of a VPN determines what is connected using the VPN. The basic VPN topologies are the following:
Peer-to-Peer: Connects two hosts. (Also called Point-to-Point VPN.)
Peer-to-Network: Connects a single host to a network. This is the most common VPN topology, regularly used to allow remote workers access to the intranet of the organization. (Also called Point-to-LAN VPN.)
Network-to-Network: Completely connects two subnetworks. This solution is commonly used to connect the local networks of an organization having multiple offices. (Also called LAN-to-LAN VPN.)
In every case, the VPN tunnel is created between two endpoints: the connecting hosts, or the firewall of the connecting network. The IP addresses of the connected networks or hosts can be fix (Fix IP connections) or dynamic (so called Roadwarrior connections). Roadwarrior connections are typically Peer-to-Network connections, where many peers (roadwarrior clients) can access the protected network.
IP Security (IPSec) is a group of protocols that authenticate and encrypt every IP packet of a data stream. IPSec operates at the network layer of the OSI model (layer 3), so it can protect both TCP and UDP traffic. IPSec is also part of IPv6.
IPSec uses the Encapsulating Security Payload (ESP) and Authentication Header (AH) protocols to secure data packets, and the Internet Key Exchange (IKE) protocol to exchange cryptographic keys. IPSec has the following two modes:
Transport mode: Used to create peer-to-peer VPNs. Only the data part of the IP packet is encrypted, the header is not modified.
Tunnel mode: Builds a complete IP tunnel to create Network-to-Network VPNs.
The IPSec implementation used by Zorp has two main components. Pluto is a userspace application responsible for the key exchange when building VPN connections. KLIPS is a kernel module that handles the encryption and transmission of the tunneled traffic after the VPN connection has been established.
OpenVPN creates a VPN between the endpoints using an SSL/TLS channel. OpenVPN operates at the TCP layer of the OSI model (layer 4). The SSL channel is usually created using UDP packets, though it is possible to use TCP. Using SSL enables the endpoints to authenticate each other using certificates.
The OpenVPN server can 'push' certain parameters to the clients, for example, IP addresses, routing commands, and other connection parameters. OpenVPN transfers all communication using a single IP port.
The connecting clients receive an internal IP address, similarly to DHCP. This IP address is valid only within the VPN tunnel, and usually belongs to a virtual subnet.
OpenVPN creates VPN tunnels between virtual interfaces. These interfaces have internal IP addresses that are independent from the IP addresses of the physical interfaces, and are visible only from the VPN tunnels.
OpenVPN runs completely in userspace; the user does not need special privileges to use it. The kernel running on the host must support the virtual interfaces used to create the VPN tunnels.
VPN connections can be configured using the VPN ZMC component. Before starting to configure VPN connections, add this component to the host (see Procedure 5.2.1.3.1, Adding new configuration components to host for details).
![]() |
Note |
|---|---|
If you want only to forward IPSec traffic without terminating the tunnel on Zorp, see Section 19.3.3, Forwarding IPSec traffic on Zorp. |
Use the , , and buttons to create, remove, or rename VPN connections. Clicking on displays a drop-down menu to start, stop, or restart the selected connections.
The VPN ZMC component automatically creates the required ipsec and
tun interfaces for the configured VPN tunnels. Use these interfaces
to define Zorp services that can be accessed through the VPN tunnel. Listeners and Receivers
use these interfaces like a regular, physical network interface. The general procedure of
using VPNs is as follows:
19.2.1. Procedure – Using VPN connections
Create the certificates required for authentication using the Zorp PKI. See Section 13.3.8.2, Creating certificates for details.
Configure the VPN tunnel using the VPN ZMC component. See Section 19.3, Configuring IPSec connections and Section 19.4, Configuring SSL (OpenVPN) connections for details.
![]() |
Tip |
|---|---|
|
To create Peer to Peer or Network to Network connections, use IPSec. To create Roadwarrior servers, use SSL. |
Create services that can be accessed from the VPN tunnel using the Zorp ZMC component.
Configure the remote endpoints (e.g., roadwarrior clients) that will access the VPN tunnel. This process may involve installing VPN client software and certificates, etc.
This section explains how to configure IPSec VPN connections.
19.3.1. Procedure – Configuring IPSec connections
Navigate to the VPN component of the Zorp host that will be the endpoint of the VPN connection. Select the Connections tab.
Click and enter a name for the connection.
Select the IPSec protocol option.
On the General tab, set the VPN topology and the transport mode in the Scenario section.
To create a Peer-to-Peer connection, select the Peer to Peer and the Transport options.
To create a Peer-to-Network connection, select the Peer to Peer and the Tunnel options.
To create a Roadwarrior server, select the Roadwarrior server and the Transport options.
To create a Network-to-Network connection, select the Peer to Peer and the Tunnel options.
![]() |
Note |
|---|---|
When creating a Network-to-Network connection, the two endpoints of the VPN tunnel do NOT use the VPN to communicate with each other. To encrypt the communication of the endpoints, create a separate Peer-to-Peer connection. |
Configure the local networking parameters. These parameters affect the Zorp endpoint of the VPN connection. Set the following parameters:
Local address: Select the IP address that Zorp will use for the VPN connection.
Local ID: The ID of the Zorp endpoint in the VPN connection. Leave this field blank unless you experience difficulties in establishing the connection with the remote VPN application.
Local nexthop: The IP address of the default network gateway. Packets sent into the VPN tunnel are routed towards this gateway. This parameter defaults to the default gateway used by Zorp.
Local subnet: The subnet or zone protected by Zorp that is permitted to use the VPN tunnel, or that can be accessed using the VPN tunnel. This option is available only for Peer-to-Network and Network-to-Network connections.
Configure the networking parameters of the remote endpoint. Set the following parameters:
Remote address: The IP address of the remote endpoint. Does not apply for roadwarrior VPNs.
Remote ID: The ID of the remote endpoint in the VPN connection. Leave this field blank unless you experience difficulties in establishing the connection with the remote VPN application.
Remote subnet: The subnet or zone behind the remote endpoint that is permitted to use the VPN tunnel, or that can be accessed using the VPN tunnel. This option is available only for Peer-to-Network and Network-to-Network connections.
![]() |
Note |
|---|---|
|
Network-to-Network connections connect the subnets specified in the Local subnet and Remote subnet parameters. Do not specify the subnet parameter for the peer side of Peer-to-Network connections, leave either the Local subnet or the Remote subnet parameter empty. |
When configuring Peer-to-Peer or Network-to-Network connections, select the option so that Zorp initiates the VPN connection to the remote endpoint. If possible, enable this option on the remote endpoint as well.
Click on the Authentication tab and configure authentication.
To use password-based authentication, select the Shared secret option and enter the password in the Secret field.
![]() |
Note |
|---|---|
Authentication using a shared secret is not a secure authentication method. Use it only if the remote endpoint does not support certificate-based authentication. Always use long and complicated shared secrets: at least twelve characters containing a mix of alphanumerical and special characters. Remember to change the shared secret regularly. |
To use certificate-based authentication, select the X.509 option and set the following parameters:
Local certificate: Select a certificate available on the Zorp host. Zorp will show this certificate to the remote endpoint.
If the remote endpoint has a specific certificate, select the Verify certificate option and select the certificate from the Remote certificate field. Zorp will use this certificate to verify the certificate of the remote endpoint.
If there are several remote endpoints that can connect to the VPN tunnel, select the Verify trust option and select the trusted CA group containing the CA certificate of the CA that issued the certificates of the remote endpoints from the CA group field. Zorp will use this trusted CA group to verify the certificates of the remote endpoints. (See Section 13.3.7, Trusted CAs for details.)
Zorp sends the common name of the accepted CAs to the remote endpoint, so the client knows what kind of certificate is required for the authentication. Select a specific CA certificate using the CA hint option if you want to accept only certificates signed by the selected CA.
![]() |
Note |
|---|---|
See Chapter 13, Key and certificate management in Zorp for details on creating and importing certificates, CAs, and trusted CA groups required for certificate-based authentication. |
Click on the Options tab and set the Action
parameter of Dead peer detection to restart.
That way Zorp attempts to restart the VPN connection if the remote endpoint becomes
unavailable.
![]() |
Note |
|---|---|
Dead peer detection is effective only if enabled on both endpoints of the VPN connection. |
Set other options as needed. See Section 19.3.2, IPSec options for details.
Set special options of a particular IPSec VPN connection on the Options and Keying tabs. Global parameters that apply to every IPSec VPN connection of the Zorp host can be set on the Global options tab.
![]() |
Note |
|---|---|
Do not modify these options unless it is required and you know exactly what you are doing. |
The options of the Keying tab specify the encryption used in the connection. The Keying parameters section of the Options tab specifies key-handling and key-exchange parameters. Modify these parameters only if it is necessary for compatibility with the remote endpoint.
The following options apply to every IPSec VPN tunnel. These settings are available on the Global options tab.
NAT traversal: Enable Network Address Translation (NAT) of the encrypted packets. If this parameter is disabled, NAT cannot be used on the encrypted VPN packets, because NAT modifies the header of the packets. Modified packets will be rejected by the remote endpoint, because they were modified by a third party (the device performing the network address translation).
![]() |
Note |
|---|---|
Port UDP/4500 is automatically opened if the |
Verbose IKE: Include log messages of the IKE protocol in the logs.
Simultaneous start: Start building the configured VPN tunnels in parallel when Zorp starts. If this option is disabled, the VPN tunnels are built one after the other.
![]() |
Tip |
|---|---|
Enable Simultaneous start if you have many VPN tunnels on Zorp. This allows tunnels to be built even if the remote endpoint of another tunnel is not responding. |
Fragment notification: If enabled and the VPN interface needs to fragment a packet, then the VPN interface sends a notification to the sender in an ICMP message. This allows the sender to lower its PMTU to avoid packet fragmentation.
Hide ToS: Remove the Type of Service parameter from the tunneled packets.
For details on the other options, see the Openswan documentation available at http://wiki.openswan.org.
If you do not want to terminate IPSec traffic on Zorp, only to forward such connections, you have to create packet filtering rules for the ESP (protocol number 50) and AH (protocol number 51) protocols. Complete the following steps:
19.3.3.1. Procedure – Forwarding IPSec traffic on the packet level
Select the ZMC component from the configuration tree, and click on the tab.
In the Hierarchy column, open the table, and select the FORWARD chain.
Click , enter 50 into the
Protocol field, and click . Optionally,
you can also specify the source and destination interfaces
Select the FORWARD chain, click , enter 51 into the
Protocol field, and click .
Click .
Commit and upload the configuration changes and reload the Packet filter component.
This section explains how to configure SSL VPN connections.
19.4.1. Procedure – Configuring SSL connections
Navigate to the VPN component of the Zorp host that will be the endpoint of the VPN connection. Select the Connections tab.
Click and enter a name for the connection.
Select the SSL protocol option.
Set the VPN topology in the Scenario section.
To create a Roadwarrior server, select the Roadwarrior server option.
Select the Peer to Peer option for other topologies.
![]() |
Note |
|---|---|
When creating a Network-to-Network connection, the two endpoints of the VPN tunnel do NOT use the VPN to communicate with each other. To encrypt the communication of the endpoints, create a separate Peer-to-Peer connection. |
Configure the local networking parameters. These parameters affect the Zorp endpoint of the VPN connection.
Set the following parameters in the Listen options section:
Local address: Select the IP address that Zorp will use for
the VPN connection. If Zorp should accept incoming VPN connections on every interface,
enter the 0.0.0.0 IP address.
Port: The port Zorp uses to listen for incoming VPN
connections. Use the default port (1194) if nothing restricts
that.
![]() |
Note |
|---|---|
These parameters have no effect if Zorp is the client-side of a VPN tunnel and does not accept incoming VPN connections. |
Set the following parameters in the Tunnel settings section:
Interface: The name of the virtual interface used for the VPN connection. ZMS automatically assigns the next available interface.
Local: The IP address of Zorp as seen from the VPN tunnel.
The tun interface will bind to this address, so Zorp listeners
can use this address.
Remote: The IP address of the remote endpoint as seen from the VPN tunnel.
The Local and Remote addresses must be
non-routable virtual IP addresses (e.g., from the 192.168.0 0
range). These IP addresses are visible only on the tun interface,
and are needed for building the VPN tunnel.
![]() |
Warning |
|---|---|
The Local and Remote addresses must be specified even for roadwarrior scenarios. Use the first two addresses of the dynamic IP range used for the remote clients. |
Configure the networking parameters of the remote endpoint.
For Peer-to-Peer scenarios, set the following parameters:
Remote address: The IP address of the remote endpoint.
Remote port: The port that Zorp connects on the remote VPN
server. Use the default port (1194) if nothing restricts
that.
Pull configuration: Download the configuration from the remote endpoint. (Works only if the remote endpoint has its push options specified.)
No local bind: Select this option if the Zorp host that you are configuring should run in client-mode only, without accepting incoming VPN connections.
When Zorp acts as a roadwarrior server, set the IP address range using the Dynamic address from and Dynamic address to fields. Clients connecting to Zorp will receive their IP addresses from this range.
![]() |
Note |
|---|---|
|
The configured address range cannot contain more than 65535 IP addresses. Every Windows client needs a |
When configuring Peer-to-Peer or Network-to-Network connections, select the option so that Zorp initiates the VPN connection to the remote endpoint. If possible, enable this option on the remote endpoint as well.
Click on the Authentication tab and configure authentication. Set the following parameters:
Certificate: Select a certificate available on the Zorp host. Zorp will show this certificate to the remote endpoint.
CA: Select the trusted CA group that includes the certificate of the root CA that issued the certificate of the remote endpoint. Zorp will use this CA group to verify the certificate of the remote endpoint.
![]() |
Warning |
|---|---|
If several remote endpoints use the same certificate to authenticate, only one of them can be connected to Zorp at the same time. |
![]() |
Note |
|---|---|
See Chapter 13, Key and certificate management in Zorp for details on creating and importing certificates, CAs, and trusted CA groups required for certificate-based authentication. |
Configure routing for the VPN tunnel. Click on the Routing tab, and add a routing entry for every network that is on the remote end of the VPN tunnel (or located behind the remote endpoint). Zorp sends every packet that target these networks through the VPN tunnel. To add a new network, click , and enter the IP address and the netmask of the network.
Configure push options on the Push options tab.
![]() |
Tip |
|---|---|
Push options are most often used to set the configuration of roadwarrior clients. For example, it can be used to assign a fix IP address to a specific client. |
Click to add routing entries for the remote endpoint. These routing entries determine which networks protected by Zorp are accessible from the remote endpoint.
See Section 19.4.2.2, Push options for details.
Set other options as needed. See Section 19.4.2, SSL options for details.
Special options of a particular SSL VPN connection can be set on the Options and the Keying tabs.
![]() |
Note |
|---|---|
Do not modify these options unless it is required and you know exactly what you are doing. |
The following options can be set on the Options tab:
Keep-alive timeout: Zorp pings the remote endpoint periodically. This parameter specifies the time between two ping messages in seconds.
Keep-alive delay: The amount of time in seconds until Zorp waits for a response to the ping messages. If no response is received within this period, Zorp restarts the VPN connection.
Verbosity: The verbosity level of the VPN tunnel.
Propagate ToS: If enabled and the Type of Service (ToS) parameter of the packet transferred using the VPN is set, Zorp sets the ToS parameter of the encrypted packet to the same value.
Compress: Compress the data transferred in the VPN tunnel.
Persistent IP address: This option is available only in Zorp 3.3R6 or later. Preserve initially resolved local IP address and port number across SIGUSR1 or --ping-restart restarts.
Persistent TUN Interface: This option is available only in Zorp 3.3R6 or later. Create a persistent tunnel. Normally TUN/TAP tunnels exist only for the period of time that an application has them open. Enabling this option builds persistent tunnels that live through multiple instantiations of OpenVPN and die only when they are deleted or the machine is rebooted.
SSL engine: Use the specified SSL-accelerator engine.
The options of the Keying tab specify the encryption used in the connection. Modify these parameters only if it is necessary for compatibility with the remote endpoint.
19.4.2.1. Procedure – Configuring the VPN management daemon
This option is available only in Zorp 3.3R6 or later. For details on the OpenVPN management interface, see the management-notes.txt file in the management folder of the OpenVPN source distribution.
To enable the management daemon for a particular SSL VPN connection , select the VPN ZMC component, select the particular SSL connection, and click the Options tab.
Select Enable management daemon.
Enter the IP address where the daemon will accept management connections into the Server address field. It is strongly recommended that IP be set to 127.0.0.1 (localhost) to restrict accessibility of the management server to local clients.
Enter the port number where the daemon will accept management connections into the Server port field. Note that the IP address:port pair must be unique for every management interface.
Set the path to a file that will store the password to the management daemon. Clients connecting to the management interface will be required to enter the password set in the first line of the password file.
Save your changes and repeat the above steps for other VPN connections if needed.
Push options are settings that the remote clients can download from Zorp when the VPN tunnel is built.
To set push options that apply for every remote endpoint of the selected VPN connection, double-click the <default> entry.
The following push options can be set on the Push options tab:
Domain: The domain of the network.
DNS: Address of the Domain Name Server (DNS).
WINS: Address of the Windows Internet Name Service (WINS) Server.
NBDD: Address of the NetBIOS Datagram Distribution (NBDD) Server.
NBT: Type of the NetBIOS over TCP/IP node. Enter the number corresponding to the selected mode:
1: Send broadcast messages.
2: Send point-to-point name queries to a WINS server.
4: Send broadcast message and then query the nameserver.
8: Query name server and then send broadcast message.
Redirect gateway: Sends every network traffic of the remote endpoint through the VPN tunnel. See Section The Redirect gateway option for details.
![]() |
Note |
|---|---|
Using the Redirect gateway option means that the remote client will have access only to the services permitted by Zorp for the VPN tunnel when the VPN tunnel is active. For example, the client will not be able to surf the Internet using HTTP if Zorp allows only POP3 services for the clients connected using the VPN. |
Explicit exit notify: The remote endpoint sends a message to Zorp before closing the VPN tunnel. If this option is disabled, Zorp does not immediately notice that an endpoint became unavailable, and error messages might appear in the Zorp logs.
Route: Add routing entries for the remote endpoint. These routing entries determine which networks protected by Zorp are accessible from the remote endpoint.
To set push options for a specific remote endpoint, click and select the certificate of the remote endpoint.
In this case, the IP addresses visible in the tunnel can also be set, so you an assign a fixed IP address to the client using the Local parameter. Note that the Local and Remote directions are from the client's perspective: Local is the remote client's IP address in the VPN tunnel, while Remote is the IP address of Zorp in the VPN tunnel.
When assigning fixed IP addresses to Windows clients, remember that every Windows
client needs a /30 netmask (4 IP addresses). For every client, use
an IP pair of the following list as the last octet of the Local and
Remote IP addresses:
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]
Enabling the Redirect gateway push-option overrides the default gateway settings of the remote endpoint and sends every network traffic of the remote endpoint through the VPN tunnel. The remote endpoint can only access the Internet through the VPN tunnel. That way Zorp can control what kind of communication (protocols, etc.) can the remote client use while connected to the internal network using the VPN tunnel.
![]() |
Note |
|---|---|
This appendix appeared was a separate chapter in earlier Zorp releases. However, as of Zorp 3.3, packet filtering and application-level services are handled and discussed together in Chapter 8, Creating Zorp policies, therefore manually modifying the packet filtering rules is required only very rarely, and is not recommended unless absolutely needed. Local Zorp services are described in Section 11.4, Local services on Zorp. |
The key point of the Zorp firewall system is the Zorp-based application proxy suit. Besides the application layer gateways, the enclosed packet filter also plays a very important role. Although all of the traffic is handled by the Zorp proxies the packet filter also performs additional filtering and helps the proxies' work.
This chapter includes a short introduction on packet filter basics and technologies in general and also shows the main concepts of the Linux packet filter framework which is used with Zorp. It also covers the commonly used packet filter policy style which is the default of the ZMS-based configuration. For further reading on the Linux packet filter, see Appendix 3, Further readings.
In the world of computer networks each and every connection is based on packets. No communication takes place without packets. So if you want to filter traffic (connections) it is reasonable to filter the packets. Unlike proxies, packet filters operate with packets on the packet level. If the firewall drops the packets it would result in the drop of the connection.
![]() |
Note |
|---|---|
|
Packet filtering rules are created and managed automatically by ZMS. Usually it is not required nor recommended to modify them manually. If you want to transfer traffic without application-level inspection, create a packet filter service using the Service Wizard (see Section 8.2, Creating new services with the Service Wizard for details). To enable access to services running on Zorp hosts (e.g., SSH access), see Section 11.4, Local services on Zorp. Typically you have to modify the packet filtering rules when you want to forward a traffic without terminating it on Zorp, like forwarding IPSec VPN connections. |
As packet filters work with individual packets a decision is needed for each and every packet whether that specific packet can pass or should undergo some other action. Packet filters can work with incoming and outgoing packets as well, but the basic decision making procedure is the same. The basic steps of packet filtering are the following.
The filter system inspects the packet. It usually checks the following information in the packet header:
source/destination IP addresses,
IP options,
TOS/TTL fields,
source/destination port numbers,
TCP flags,
data part of packet,
and others.
Stateful packet filters can check the state of the given packet related to the known connections (whether this packet belongs to an already seen connection or it is a new packet or it is a packet related to an already established connection, like an ICMP control packet), or to other stateful information (whether this packet fits in the TCP window of the connection). This information provide the basis for the decision. Of course, the firewall can check whether the packets checksum and packets in general are adequate.
After inspecting the packet and collecting stateful information, the packet filter evaluates the policy for the given packet. The policy and the representation of the policy might be different between various implementations, but usually Access Control Lists (ACL) are used. ACLs are checked from the top of the list to the bottom. The list entries are usually called rules and these rules are evaluated after one another.
A rule usually contains a match and a verdict part. The match part is evaluated based on the information gathered from the packet before the policy check. If a packet matches the rule the rule's verdict is taken for that packet. The various implementations differ in how they run through the list. One stops evaluating at the first match, while others might take the last match's verdict.
After evaluating the ACL the packet filter can work with that packet according to the verdict. Usually, every ACL has a default verdict which controls what should happen with the packet if no match occurs. Based on the main security rule a default deny or default drop approach is a good choice, but as usual it depends on the implementation and on the administrator.
There are numerous verdicts, but usually all implementations support the following basic verdicts. The meaning of the verdicts, though, might differ slightly.
Accept,
allowing the packet to pass.
Deny/Drop,
denying the packet silently meaning that no error packet is sent back to the sender.
Reject,
denying the packet with sending back some kind of error packet (ICMP error message or TCP reset packet depending on the situation).
To understand, successfully deploy and easily troubleshoot any packet filter firewall you have to understand how the specific implementation handles the packets and how it evaluates its policy. It is also necessary to learn how the policy is represented and how the configuration is constructed. Knowing the deeper details of implementation helps in configuration.
Zorp is based on Linux and like most modern operating system it has some kind of packet filter solution. The Linux kernel has had serious filtering capabilities since version 2.0. Since then, the packet filter framework has been rewritten three times to improve its capabilities, features, speed and robustness. The latest packet filter system in Linux is called Netfilter/IPTables since version 2.4.
Netfilter belongs to the family of stateful packet filters and provides packet mangling and connection NATing capabilities as well. Netfilter is designed to be very flexible in configuration to cover all of the possible packet filtering situations. Although in Zorp Netfilter plays less significant role, it is necessarily to understand how it handles packets and how the configuration is organized.
Netfilter itself is a framework in the network subsystem of the Linux kernel. It allows packet filtering, network address translation, and various different packet mangling. It is very sophisticated and open enough to be able to satisfy all the potential needs, but it is a framework only. To be able to utilize its capabilities an easily configurable policy layer is required. This can be realized by IPTables which can be found in the kernel as well. IPTables is built on the Netfilter framework and extensively uses it, that is why it is impossible to use IPTables without knowing the basics of the underlying framework.
In real life scenarios, IPTables and Netfilter work very closely together. It is nearly impossible to separate them. From administration point of view, they do not need to be separated. In Zorp Netfilter works through the mediation of IPTables. Netfilter/IPTables is built from smaller blocks which cooperate with each other.
The key building blocks of Netfilter and their roles are presented in the following chapters.
All incoming, outgoing and passing packets must go through the TCP/IP stack of the Linux kernel and as Netfilter works with packets, the best way to influence the packet flow is to cooperate with the protocol stack. At some point of the packet flow, the Netfilter framework hooks in to the Linux kernel. These points are called hooks where the stack passes the packet to the framework, which evaluates the policy on the given packet.
Based on the result of the policy evaluation, the framework can response in the following three ways:
gives back the packet to the stack to allow it to be processed further,
gives back a modified packet,
or drops the packet preventing it from further processing.
Currently, Netfilter defines five hooks in the kernel.
Right after the arrival of the packet from the network and a simple sanity check but before any routing decision is made the packet is sent to this hook.
If the destination of the packet (based on the routing decision) is the host itself, the packet is sent to this hook after the routing decision, but before the delivery of the packet to any application.
If the destination of the packet (based on the routing decision) is not the host itself and if forwarding is enabled, the packet is sent to this hook after the routing decision, but before leaving the host.
If the packet is originating from the host and before any routing decision is made, the packet is sent to this hook.
If the packet is leaving the host and the routing decision is made, the packet is sent to this hook, but before actually passing the packet to the network interface for transmission.
![]() |
Note |
|---|---|
The packet has to pass all of the hooks to get to its destination. It is not enough to pass one hook, all of the hooks must be passed. Obviously, if the packet is dropped on one hook it cannot get to any other hooks. Its processing is ended where it was dropped. |
For example, if the destination of the packet was the host, it has to successfully pass (be accepted) at the PREROUTING and the INPUT hooks. If the destination of the packet was not the host (so it is passing the host) it has to pass at the PREROUTING, FORWARD and the POSTROUTING hooks. The third case is when the packet leaves the box (originating from some application running on the host) it has to pass at the OUTPUT and the POSTROUTING hooks.
These hooks provide the Netfilter framework itself, but they are actually used by IPTables providing the heart of the Linux packet filter system this way.
Hooks only provide an interface where the packets are accessible, but they do not provide a solution to handle the packets. To manage the packets, the Linux kernel provides basically three options which are represented by tables.
Filter table,
responsible for Packet Filtering.
NAT table,
responsible for Network Address Translation.
Mangle table,
responsible for Packet Mangling.
Each table is responsible for one specific action. To fulfil their roles, the tables need to access the packets. Therefore, the tables are registered in the hooks so that they can influence the packet flow in the kernel.
The tables can be configured to carry out other tables' tasks though this solution is not recommended since the tables perform different things and they have different requirements from the hooks, accordingly. Some of the tables cannot be tied to all hooks, but it is also possible that more than one table is involved in one hook. Consequently, more tables can share packets on one hook. Each table can be registered to any hook with a specific priority. The order in which the tables receive the passing packet is based on this priority list.
To successfully pass a hook, the packets have to be accepted on each and every table registered to that given hook. If a packet is dropped by any of the tables it cannot get to the subsequent tables, nor to the subsequent hook.
The following tables are involved in packet filtering:
This table is responsible for the packet filtering, so it represents the classic packet filters. Packets are usually dropped, rejected and accepted here.
This table is registered to the INPUT, FORWARD and to the OUTPUT hooks with the highest priority, meaning that it is the last table which gets the packets at these hooks.
This table is responsible for network address translations. Since IPTables is a stateful packet filter, translations occur on the connections not on the packets.
It is important that only the first packet of each connections reaches this table, because one connection can only be NATed once and the selected nat mapping is used for the rest of the packets in the connection.
The nat table is registered to the PREROUTING, POSTROUTING and to the OUTPUT hooks with a lower priority than the filter table, meaning that it receives the packets right before the filter table.
![]() |
Note |
|---|---|
Although it is possible to drop a packet at the nat table, it is not recommended, because the filter table is responsible for dropping packets. If a packet is dropped at the nat table it cannot reach the filter table. If a packet is accepted or NATed at the nat table it has to be accepted at the filter table as well to pass. |
Basically, two types of NATs are exists: source address, and destination address. They have various special subtypes such as redirect and masquarade. Both NATs can be configured in this table only. Because of the difference between the two NAT types and their influence on the connections, NATs of source type can be configured at the PREROUTING and at the OUTPUT hooks, while NATs of destination type can be configured at the POSTROUTING hook. With careful design, it is possible to translate source and destination NAT on a single specific connection.
This table is responsible for various packet mangling like modifying the TTL of the packet, changing the TOS bits, or setting the FWMARK on the packet. This is the table where the biggest alterations take place in the packet and also where serious administration problems can be experienced.
This table is registered to the PREROUTING, INPUT, FORWARD, OUTPUT, and to the POSTROUTING hooks with the lowest priority meaning that it gets the packets first right before the others tables.
The default deny or default drop approach is only partially true in this table. As packet filtering occurs at the filter table the default drop configuration must be utilized only at this table. It is not needed and not possible either to implement a default drop configuration on all tables. If a packet targets a local application or leaves the firewall it has to successfully pass the filter table, so it is enough to drop packets there.
![]() |
Tip |
|---|---|
|
To build a fully functioning configuration, a good approach is to accept all packets on the mangle and on the nat tables and drop all unnecessary packets on the filter table. Take special care with NATted packets/connections as they appear with their new addresses after the translation so the NATed address must be accepted on the filter table, for example. |
Besides the filter, nat and mangle tables another invisible table exists. This table is responsible for connection tracking. IPTables is a stateful packet filter and the statefulness is provided by the connection tracking subsystem which is represented by this table.
This table only checks the relations of the packet towards the connections already investigated. It never drops or rejects any packet, only sets the state information of the packets/connections.
This table is registered to the Prerouting and to the Output hooks with the ever lowest priority meaning it gets the packets before the mangle table.
Almost all functionalities are represented by tables in Netfilter. The transparent proxy functionality is no exception, in Zorp it is visible as a new TProxy table in the Netfilter framework.
This table is registered to the Prerouting and to the Output hooks on a priority between the mangle and the nat tables. For further information on TProxy, see chapter TProxy.
Using the Netfilter hooks the tables provide the functionalities of the packet filter subsystem in Linux. As tables only provide a container for the policy of a specific functionality, some configuration evaluation system is needed. Like many packet filter implementations IPTables uses ACLs for the evaluation mechanism. While other implementations use only one or a limited number of lists, IPTables can have nearly an infinite number of these. The ACLs are called chains in IPTables.
IPTables chains consists of rules which are evaluated from the top (beginning) of the list to the bottom (end). The evaluation stops at the first matching rule if a verdict is set.
![]() |
Note |
|---|---|
It is possible that a rule does not make a verdict on the packet, in that case the evaluation continues. |
The evaluation can jump to another chain and later can return to the original one, however if the packet matches on any of the chains the evaluations stops. Each chain resides in a specific table and controls the policy of that given table.
There are basically two types of chains.
built-in chains
created chains
Every table contains built-in chains for each of the hooks it has. Every packet that a table on a specific hook gets is put on the specific chain of the given table. The evaluation of this chain is the basis of the verdict of the packet. For example, the filter table has three built-in chains: Input, Forward and Output.
Besides built-in chains, you can create new chains to ease the management of the configuration and can direct the packets on these custom chains by jumping on it.
![]() |
Note | ||
|---|---|---|---|
|
It is possible to jump to a chain in another table. A smart organization of chains makes the configuration easier to understand and makes the evaluation faster.
|
The next building blocks of the IPTables configuration are the rules. Tables and chains themselves provide only a container, interface and an evaluation mechanism, but it is the rules that describe the core configuration.
During the evaluation of a chain, actually the rules are evaluated one by one. Every packet is run through this process and the match is checked against each rule in the chains.
The rules consist of two main parts:
match, and
target.
Each packet is tested whether that packet and its related status information is matching the match part of the rule. If a match occurs the target part is used.
![]() |
Note |
|---|---|
|
It is possible that a rule has no target part. In this case nothing happens, only the rules counter is incremented. If a rule has no match part, all packets match that given rule. |
The Netfilter/IPTables system handles matches very flexibly. Almost all aspects of a given packet/connection is possible to be matched. Basically, the matches are just plugins in the framework making it very extendible. Due to the extendibility, a large variety of matches exist.
The match part of a rule can have multiple matches and matching the rule requires that all of the matches are matched. In technical sense, the matches are ANDed together in a rule. If OR-ed matches are required then multiple rules are needed. The most common matches are source/destination address, protocol, source/destination port, TCP flags, connection state (based on the conntrack information), ICMP types and various different mark (FWMARK, CONNMARK) matches. For a full list of matches, see the iptables(8) manpage and the Appendix 3, Further readings.
Targets define what should happen with the matched packet. The targets, similarly to the matches are extensions and also behave similarly. Targets can perform two actions:
modify some parameter of the packet/connections (for example, IP addresses, TOS bits, TTLs, MARKs), and
provide a verdict.
![]() |
Note |
|---|---|
|
Not every target has a verdict, meaning that the evaluation of a chain does not end with that matching rule. Remember, the evaluation is ended when a verdict is set, so you need to know which target has a verdict, in other words which one is the final target. For example, the TTL target, which modifies the TTL of the packet cannot ACCEPT it. For ACCEPT, another rule or a default policy is needed. |
Another option for a target is to jump to another chain. In case of jumping to an other chain, the evaluation continues in the new chain. If the other chain is evaluated and no match occurs or no verdict is set, the evaluation continues in the original chain from the next rule after the jump.
The most commonly used targets are ACCEPT, DROP, REJECT, TOS, TTL, [DS]NAT and TPROXY. .
Due to the complexity of the framework, creating configurations with IPTables is a challenging task. For a well-organized and working setup, a very careful design is required. It is very important to use the different tables for their own purposes and to create a working default deny setup.
To make your task easier, ZMS automatically generates the packet filtering ruleset that of corresponds to the configuration of your Zorp Gateways.
![]() |
Note |
|---|---|
|
Packet filtering rules are created and managed automatically by ZMS. Usually it is not required nor recommended to modify them manually. If you want to transfer traffic without application-level inspection, create a packet filter service using the Service Wizard (see Section 8.2, Creating new services with the Service Wizard for details). To enable access to services running on Zorp hosts (e.g., SSH access), see Section 11.4, Local services on Zorp. Typically you have to modify the packet filtering rules when you want to forward a traffic without terminating it on Zorp, like forwarding IPSec VPN connections. |
ZMC provides an easy and comfortable way to configure the packet filter system on managed hosts. To configure the packet filter the Packet Filter component must be added to the managed host. The default configuration defines a default deny/drop setup which means that all packets are dropped and logged in the filter table on the INPUT and FORWARD chains since it is enough to disable all passing traffic on the firewall and there is no need to have drop rules on any other chains. By default, the policy permits all outgoing packets.
To use the Packet Filter component a basic (but preferably higher)
understanding of Netfilter/IPTables is required. This component has three basic purposes:
add/delete/modify rules,
generate configuration, and
search/review the ruleset.
Creating all of the packet filter rules for the firewall and keeping the ruleset in synchrony with Zorp is a very challenging and time-consuming task so the to manual configuration is assisted by a feature which generates the ruleset of the policy. Using the generation feature does not raise any boundaries, neither limits the administration nor renders the configuration inflexible. The generated policy is just a skeleton which can be modified as any ordinary ruleset.
The packet filter configuration must be activated on every startup of the firewall or the managed host therefore the configuration is stored in configuration files on the machine. ZMS uses the iptables-utils package to handle the packet filter configuration. This package is responsible for loading the ruleset upon startup and making the administration easier by using variables. It also prevents accidental lock-out from the box by a misconfiguration. This package is a self-sufficient program and can be used separately from ZMS.
For managing the configuration, the iptables-utils uses four configuration files.
Iptables.conf.var
This file stores the variables which can be used in the policy. These variables are not the same as ZMS variables and not involved in ZMS-based configuration.
Iptables.conf.in
This file stores the policy itself with unresolved variables.
Iptables.conf.new
This file stores the generated configuration from the
iptables.conf.in and iptables.con.var files
meaning that the variables are resolved here.
Iptables.conf
This file stores the actual configuration. The startup policy is loaded from this file.
Three small utilities are used to manage these files and all of them form part of the
iptables-utils package. To generate the
iptables.conf.new file iptables-gen util is used. To
test the new configuration and to prevent lock-outs iptables-test is
needed, which loads the policy from iptables.conf.new, lets it run for
10 seconds and then reloads the old configuration, which is assumed to be functional, from
the iptables.conf file. If the configuration is working the new
configuration can be made effective with the iptables-commit util, which
loads the new configuration and replaces the iptables.conf file.
To control the packet filter system the /etc/init.d/iptables-utils is
used. It is the init-script which also loads the configuration policy
upon start-up. When starting the utils, it only loads the policy stored in the
iptables.conf file. During restart, it generates a new configuration
with iptables-gen and attempts to load it. In case any error occurs, it
reverts back to the old configuration stored in the iptables.conf file.
If it succeeds, it replaces the iptables.conf with the
iptables.conf.new. For further information on the
iptables-utils, see the manual page of the utility.
During the ZMS configuration, the iptables-utils creates the
iptables.conf.in and the iptables.conf.new files
on the managed hosts. Although by default there are no variables used with ZMS, it is
possible to use them. To successfully deploy the new configuration, you have to restart the
component in order to regenerate the modified and uploaded configuration.
![]() |
Warning |
|---|---|
|
Without restarting the component, the new configuration is not generated and the modifications are ineffective. If you manually reload iptables rules (i.e., using the /etc/init.d/iptables-utils reload command, or the Packet Filter ZMC component), make sure to reload Zorp as well. Otherwise, your packet-filtering services (PFServices) will not function. |
Modifying the ruleset basically means creating new rules/chains, modifying some of their parameters or simply deleting them. This component provides a clean interface for doing these tasks.
![]() |
Note |
|---|---|
|
Packet filtering rules are created and managed automatically by ZMS. Usually it is not required nor recommended to modify them manually. If you want to transfer traffic without application-level inspection, create a packet filter service using the Service Wizard (see Section 8.2, Creating new services with the Service Wizard for details). To enable access to services running on Zorp hosts (e.g., SSH access), see Section 11.4, Local services on Zorp. Typically you have to modify the packet filtering rules when you want to forward a traffic without terminating it on Zorp, like forwarding IPSec VPN connections. |
The packet filter ruleset can be managed on the tab of the ZMC component.
The ruleset consists of four basic elements that are organized into a tree. The four elements can be found on different levels of the layout tree.
The root elements are the tables which are fixed and cannot be modified in any way.
Each table holds a number of table-specific chains. Both types of chains, built-in and user-defined chains, are on the second level of the tree. Built-in chains cannot be deleted and only their default policy can be modified. To add a new chain to a table, select the table and click New Child. Alternatively, you can select an existing chain of the table and click New.
The order of the chains in the table is not important and does not influence the behavior of the ruleset.
The child entries of the chains are the rules. To create a new rule in a chain, select the chain and click . Alternatively, you can select an existing rule of the chain and click New. For easier overview and management the rules can be grouped together. Groups and rules that do not belong to any group appear on the third level of the tree. To create a group from the rules, select the rules you want to group, right-click on the selected rules, and select from the local menu.
Rules that belong to a group appear on the fourth level of the tree.
Each rule is represented as a row in the table together with its properties (matches and targets) in the columns. Unlike chains, the order of the rules is important. The order can be changed with the small triangle buttons on the right. To create a rule the matches and the targets needs to be configured. To modify a rule, double click the rule and change the match and target part. The most commonly used matches and the targets can be set on the General options tab, while other rarely used matches can be configured on the Advanced options tab.
For further information on the matches and targets, see the iptables(8) manpage and the Appendix 3, Further readings.
![]() |
Tip |
|---|---|
The direction of a rule can be changed by selecting from the local menu. |
Packet filter policies can be organized in different ways. You are free to create your own arrangements. The skeleton itself provides only one proved and tested way. Although the skeleton is not necessarily full and ready for use, it can be extended and finetuned to meet the requirements. Of course, there can be situations when the skeleton policy is ready for use without modifications.
In a skeleton-based policy, the generated and user-defined rules are mixed and can
function together. Without using skeletons only user-defined rules are exist. Generated
rules are either based on information collected from other components, such as
Networking, IPSec VPN or
Zorp, or set during the generation of the skeleton.
![]() |
Tip |
|---|---|
You are recommended to configure packet filter function through skeletons. |
![]() |
Note |
|---|---|
UDP port 4500 is automatically opened if the |
The ruleset is generated automatically when the configuration of Zorp is modified in a way which affects the packet filter configuration. User-defined rules remain untouched if specified as a keep rule, otherwise the generator removes these rules from the ruleset.
The generator automatically collects the information required to generate the ruleset from the different ZMC components. After the generator finished, the newly created configuration is presented and can be used the same way as an ordinary user-created configuration.
The new configuration contains both generated and user defined rules.
![]() |
Note |
|---|---|
You are recommended to keep all user-defined rules and regenerate the configuration every time relevant modifications are made. |
Since the skeleton consists of generated and user created rules, the relative order of their relations is very important. The generator creates and modifies chains and rules as well. In every chain which is modified by the generator, the generated rules always come first and user-created rules come only further in the framework. Generation drops those user-created rules which are not marked keep rules. Every other chains are left intact.
The order of the generated rules is not specified, but all of them are placed before the user-created ones. The relative order of the user-created rules are kept during the generations, although all the user-created rules are moved after the generated ones. There are two exceptions: the head group and the catch-all rules.
Every chains which are modified/touched by the generator has a head group. The role of the head group is to provide a way to insert user-created rules before the generated ones. The head group is a generated group and is placed as the first entry of the chain so every rule which is in the head group of the specific chain precedes all of the generated rules in the chain. The rules in the head group remain in place during the skeleton generation.
Some chains (built-in chains and user-defined ones from the IPTables point of view) has a catch-all rule(s). These rules try to provide a default policy for those chains which need it, for example the chains in the filter table and the PL* chains in the TProxy table.
The purpose of the catch-all rules is a default policy so they must be at the end of each chain following the user-created rules. No user created rule can follow them. Any rule appended after these catch-all ones are moved forwards during the generation.
For the filter table chains the catch-all rules consist of a LOG and a DROP rules to log the packets before they are dropped. The LOG rule also logs the chain to make it possible to trace where the packet was dropped. These two rules, but especially the DROP rule provides the default drop approach from the packet filter point of view for the host.
The catch-all rule of the PL* chains in the tproxy table only ACCEPTs the packets. ACCEPTing any packet in any table other than the filter does not necessarily mean letting it pass or allowing it to the application. Accepting in the tproxy table means no tproxying action for that packet, only passing to further processing.
After skeleton generation, the modified chain looks like the following:
Head group at the beginning with the user created rules in preserved order.
Generated rules with an unspecified order.
User-created rules, again, with also a preserved order.
Catch-all rules
The TProxy table is the first one which is touched by the ruleset generator since the mangle and the NAT tables are not generated at all. This table handles the transparent proxy redirection rules for Zorp dispatchers. Redirect rules are needed only for the incoming traffic, outgoing traffic does not need them, therefore only the PREROUTING chain and its associated subchains are generated. Note that the TProxy table sees only the first packets of each connection as redirection can happen only once in a connection.
To achieve better manageability and performance the incoming traffic is handled on a per-interface basis. The PREROUTING chain, like all generated chains, begins with the head group. After the head group, the non-SYN flagged TCP packets are ACCPETed as they are the first packets of the newly created connections. (TCP connections begin with a SYN flagged packet). They are ACCEPTed because usually they come from broken connections or from connections after a fail-over in a High Availability scenario and consequently they should not be redirected, but let to the filter table to handle them later. (It can be DROPed or ACCEPTed so the TCP/IP stack can generate a TCP RST flagged packet.)
Following the ACCEPT rule, the traffic is separated to subchains (where the actual governing rules are located) according to the incoming interface and the destination of the packet. Every non-alias interface is associated with two prerouting (PR) and prerouting local (PL) subchains.
PR<interface>
PL<interface name>
For each interface, every packet is thrown to the PL* chain first if the destination address matches any of the IP address of the incoming interface. After the PL* jump rules, for each interface the remaining packets are thrown to the PR* chain according to the incoming interfaces.
![]() |
Note |
|---|---|
The order is very important as PL* chains must precede the PR* ones because packets matching the PL* chains also match the PR* chains and if the order is reversed the packets targeting the host itself would be handled as if they would be passing packets on the PR* chains. |
The PR* chains hold the redirect rules for the transparent Zorp dispatchers. Every dispatcher is associated with a single rule. The Address of the dispatcher determines the interface, hence the PR* chain, where the rule is located. The match part of each rule is the destination port and the protocol configured in the Rule port in the dispatcher. The target is a TPROXY target redirecting the connection to the Proxy port and to the IP address of the interface if Specify address in redirect rule is set. The PL* chains can hold the redirect rules for those connections which targeted the host itself, but no rule is generated here by the ruleset generator. It is only a placeholder for such special rules which need manual configuration.
At the end of the PL* chains, the catch-all rule is meant to prevent packets to return to the PREROUTING chain and to be thrown to the PR* chains. If there were no ACCEPT rule at the end of each chain (meaning that no redirect should happen), packets targeting the host itself would be redirected/tproxyed on the PR* chains just like the passing traffic, which would prevent them to reach the filter table holding the rules for the non-transparent dispatchers. So the traffic could not be separated between transparent and non-transparent dispatchers if the Rule port were the same.
The tproxy table is responsible only for redirecting, tproxying the traffic, therefore, no filtering takes place here. The packets/connections that are TPROXYed or ACCEPTed here have to be ACCEPTed at the filter table as well to make the packet pass and to get to the destination which is a dispatcher for TPROXYed packets.
The filter table is the place where the real filtering takes place so it is very important to understand how and why packets/connections are ACCEPTed or DROPed here.
Every connection that the firewall has to allow must be ACCEPTed here in some way. Basically, three kinds of traffic is handled at the filter table.
incoming
forwarded
outgoing
The generated ruleset allows every outgoing packet, (reply packets are allowed as well), so that OUTPUT chain ACCEPTs every packet. As Zorp is an application level solution no packet forwarding takes place, therefore the FORWARD chain DROPs the packets.
This chain has a head group, like all generated chains, which is responsible for spoof protection. See also section Spoof protection. It has the LOG+DROP catch-all rules at the end as well.
![]() |
Note |
|---|---|
You are not recommended to manually configure the packet filter to allow packet forwarding, though it is possible. |
The incoming traffic is basically handled in the INPUT chain and its subchains since the filter table is only meant for filtering (DROPping REJECTing and ACCEPTing) the packets and the connections. As every ruleset generated chain, the INPUT also begins with the head group, which works just as the same as it works in every other places.
After the head group, the evaluation continues with noise filtering. Noise filtering is responsible for DROPping every network traffic/packet that is considered junk like broadcast messages or anything else that you want to drop without LOGing it. This filtering takes place in the noise chain which is generated by the ruleset generator. The noise chain begins with a head group and followed by DROP rules dropping (but not logging) packets going to the broadcast address of the network interfaces. As a catch-all rule the chain ends with a RETURN rule which jumps back to the INPUT chain and the ruleset evaluation continues from there.
![]() |
Tip |
|---|---|
|
You are recommended to finetune the noise chain because the requirements and the network junk vary from site to site. If you want to DROP something, add the appropriate DROP rules to the noise chain, but be careful not to DROP anything which is not a junk and should be LOGed later. Remember not to put any rule ACCEPTing any traffic as this rule would ACCEPT it for the filter table. Use RETURN instead as the noise chain is only for DROPping the junk and other rules would interfere the configuration. |
Following the noise filtering in the INPUT chain the spoof protection takes place in the spoof chain so the evaluation is jumped to that chain.
After the noise and spoof rules the defaults group is located which is responsible for keeping some necessary default rules. There is no need to modify these default rules although it is possible to add other rules. The first rule ACCEPTs the tproxy flagged packets. TPROXYing packets/connections in the tproxy table is just redirecting them to the dispatchers (so they can handle transparent traffic), but every packet must be ACCEPTed on the filter table as well so TPROXYing it on the tproxy table is insufficient in this situation. When a connection is TPROXYed by TPROXYing the first packet of it, every packet belonging to that connection is flagged with the tproxy flag. This way every previously TPROXYed packet can be ACCEPTed with only one rule saving the need to write other ACCEPT rules for every TPROXY rule. Another use of the tproxy flag is to flag those packets/connections which are implicitly requested by Zorp and ACCEPT them as well with this rule. These connections are usually the secondary connections of traffic proxied by Zorp, for example the data channel of an FTP session. When Zorp listens for such a connection, it implicitly requests tproxying and flagging so there is no need to manually add rules for them. It is also needed to allow/ACCEPT these connections on the filter table and this tproxy matching rule realizes that as well.
Following the tproxy match rule, various ICMP packets are ACCEPTed which are RELATED to already established connections. Not every type of ICMP packets are allowed, only those that are needed for the correct and secure operation of the firewall. These are the following:
destination-unreachable(3)
source-quench(4)
time-exeeded(11)
parameter-problem(12)
ICMP packet types are sent as responses for an already established connection by the remote peer indicating some network problem. RELATED means here that only those messages ACCEPTed which are responses for a known connection, messages related to an unknown connection are not ACCEPTed. For further information on RELATED and ICMP types, see Appendix 3, Further readings.
After the ICMP rules, the next rule ACCEPTs every packet which belongs to an already ESTABLISHED connection. This way the reply packets for the outgoing connections are ACCEPTed. To track the state and the relation of a packet to the known connections the conntrack table is used. This table assigns a state information to every packet which is checked here.
Altogether, in the defaults group every packet is ACCEPTed which has been already handled (like TPROXYed packets) or is related to or part of already known connections. Every other packet must be filtered.
The next group is called local_services which is responsible for handling the packet filter configuration of the local or native services. These services can be set as the first step of the ruleset generation. For every service and for every selected zone an ACCEPT rule is generated matching the protocol, the port and the source zone addresses.
Following the local_services group, the routing group can be found. Like in the tproxy table, the rules are divided to subchains based on the incoming interface of the packets. The routing group is the placeholder for such rules that separate the traffic. For each and every interface a LO<interface name> chain exists and the rules in the routing group jump the evaluation to these chains according to the incoming interface and the IP addresses (primary and alias addresses) of the interface pairs. Every further production rule is located in the LO* subchains. Every LO* chain holds the rules that apply to the traffic coming in on the appropriate interface and target the host itself.
![]() |
Note |
|---|---|
The target IP address of the traffic is not necessarily the IP address of the interface, it can be the IP address of any of its alias interfaces. |
The LO* chains begin with the usual head group. After the head group, the rules
generated by the ruleset can be found, but the order of the rules is not specified. The
information for the rules come from two components: the Zorp and the
VPN.
For every VPN connection, two rules are generated: one for ACCEPTing UDP packets from the remote end of the connection on source and destination port 500 and another rule ACCEPTing ESP (protocol: 50) packets from the remote end of the connection. These rules only allow the encrypted communication everything inside the tunnel, the real payload which comes on the ipsec* interfaces must be filtered separately like any other traffic.
The other rules placed in the LO* chains are generated based on the information from the Zorp components. For every non-Transparent dispatcher in Zorp an ACCEPT rule is created in one of the LO* chains according to the Address setting of the dispatcher. The configured Address specifies into which sub LO* chain should the rule be placed in.
Each rule ACCEPTs packets to destination ports configured in the Proxy port attribute where the dispatcher listens for connections.
At the end of the INPUT chain, every packet is LOGged and DROPed. Although normally no packet can get to this point of evaluation, because they are thrown to the LO* subchains and at the end of the subchains everything is LOGed and DROPed again. The LOG rule also logs the place (“filter/INPUT”) and the verdict (“DROP”) in the logs.
The purpose of spoof protection is to ensure and enforce that the source address of any packet is in the network which is connected to and reachable via the interface the packet is coming from and only from and via that interface.
![]() |
Example 1.2. Protection against spoof |
|---|---|
If a packet comes from the intranet, the source address of the packet must be in the address range of the intranet. If the source address of the packet is in the range of intranet, the packet can only come in on the interface connected to the intranet and from no other interfaces. The last rule is especially important for the internet case where the internet address range (0.0.0.0/0) matches any address, but it must be ensured that the source address does not belong to any other network of the firewall. As the access control of the firewall is based on IP addresses it is very important to be protected against IP spoof attacks. |
However, network topologies can be very complex which renders the spoof protect ruleset very complicated. The ruleset generator automates the generation of these types of rules as well.
To successfully generate a secure ruleset, the generator must be aware of the network
topology of the neighbourhood of the firewall. In the Networking
component for every interface you have to configure the connected (Connects) zones and set
the Spoof protection also.
The connected zones sets which zones, which network addresses are reachable via that interface. The core of the spoof protection is the spoof chain which is in the filter table. The spoof chain is jumped from the INPUT and FORWARD chains as both incoming and forwarded connections must be checked against spoof attacks. The chain begins with the crucial head group followed by the loopback interface handling.
First every packet is ACCEPTed that comes in on the LO interface, then everything is LOGed (with a 'filter/spoof DROP' prefix) and DROPed that has source address in the 127.0.0.0/8 network, but the incoming interface is not LO. Spoof check is done on a per-interface basis. Since all the interfaces are checked separately an SP<interface name> chain is created for each interface.
After the loopback interface check taking place in the spoof chain according to the incoming interface, the evaluation is jumped to the appropriate SP* chain.
![]() |
Note |
|---|---|
Alias interfaces work and behave just like their master interface, so anything configured for an alias interface applies to its master interface as well. |
In the SP* chains spoof attacks are checked based on what was configured in the Network component. Every SP* chains has almost the same ruleset, the rules differ only in their target part. The chains contain one or two rules (depending on whether it is a LOG + DROP or a RETURN rule) for every addresses of zones that are connected to the given interface. Every rule has a network address of a zone as a source match.
The order of the rules are very important. The rules are sorted by the netmask of the source match in descending order. This way the rules with the highest netmask comes first, which also means that the smallest networks are matched first. It is inevitable to have this order to match the tightest network first, otherwise the tighter rules would never match, because the bigger networks would match previously.
The target of a rule depends on whether the zone containing the address of the match is selected as a connected zone for the interface to which the chain applies. If it is selected, the target is RETURN otherwise there are two rules: a LOG and a DROP one.
This ruleset ensures that if a zone is connected to an interface, the source address of packets coming in on that interface must match any networks of the zone. It also ensures that if the zone, which contains the network the packet is sourced from, is connected to any other interface then the packet is not allowed, it would be LOGged and DROPped.
Zones that have no addresses associated with or not connected to any interface are not used and ignored.
![]() |
Note |
|---|---|
To have a full and secure spoof protection ruleset it is very important to set the
connected zones, otherwise the spoof protect is incomplete. Do not unset the Spoof
protection flag in the |
Adding new rules and generating the ruleset is only one part of the configuration
process. During the lifecycle of the firewall you have to review and modify the rules. The
Packet Filter component provides a Rule Search window as a tool for
searching the ruleset.
The Rule Search window is accessible from the button bar.
1.4.4.1. Procedure – Using Rule Search
Click on the
icon.
A new window appears.
Fill in the search fields of the Basic tab and click .
The matching rules are selected from the background in the Packet
Filter component window.
Configure search-criteria and field interpretation on the Advanced tab.
![]() |
Tip |
|---|---|
If a search criteria does not match the requested rule(s) check the settings on the Advanced tab. |
Display the tooltip of the selected item.
Display the help of the selected item.
Refresh the screen and the status of the displayed objects.
Activate the splitter bar. Use the cursor keys to resize the selected panel.
Hide or display the configuration tree.
Activate the main menu.
Display the local menu of the selected item.
Change between Configuration view, Monitoring Host view, and Monitoring Site view.
Moves keyboard focus to the next or the previous item.
Moves keyboard focus to the next or the previous item if Tab has function in the window (e.g., in the Text Editor component).
Commit (save) the configuration.
View the configuration stored in ZMS.
Compare the configuration stored in ZMS with the one running on the selected host.
Upload the configuration to ZMS.
Display the Control Service dialog of the selected component.
Move the selected object to the clipboard.
Copy the selected object to the clipboard.
Paste the object from the clipboard.
Find a keyword in the active list or tree.
Select all objects of the active list or tree.
Open all objects of the active list or tree.
Close all objects of the active list or tree.
Open all objects of the active list or tree.
Close all objects of the active list or tree.
Close ZMC.
Close the active dialog.
Every button, menu item, checkbox, etc. in ZMC has an access key — an underlined letter in the name of the object. Hitting Alt-accesskey activates the object, e.g., selects or unselects the checkbox, or activates the button. For example, Alt-O opens the Monitoring menu of the main menu bar; Alt-R renames an interface on the Networking component.
Following is a list of recommended readings concerning various parts of Zorp administration. Both online and printed references are given. In the case of printed materials we only give the details of the English titles; some of these titles may have been translated to other languages or other titles, not listed here, may also have been published as originals in other languages while not having an English translation.
The online references give URLs that have ben valid at the time of writing. URLs usually change over time; in forthcoming editions of this Guide updates to the published URL list will be performed, however, we cannot guarantee that you will find online documents at the referenced URLs at any given time.
Guides, manuals, and tutorials for Zorp are available at http://www.balabit.com/support/documentation/
The Linux Documentation Project
Linux Advanced Routing and Traffic Control Homepage
Official Postfix site
Postfix: The Definitive Guide by Kyle D. Dent. O'Reilly Associates ISBN: 0596002122
PostFix by Richard Blum. SAMS Publishing ISBN: 0672321149
BIND9 Online Manual
DNS and BIND by Paul Albitz, Cricket Liu. O'Reilly Associates ISBN: 0596001584
Official ntp documentation
RFC 1305, Network Time Protocol Specification
Official site of the OpenSSH project
SSH: The Secure Shell The Definitive Guide by Daniel J. Barrett, Ph. D. and Richard E. Silverman. O'Reilly Associates ISBN: 0-596-00011-1
TCP/IP Illustrated: Volumes 1-3 by W. Stevens, Gary Wright. Addison-Wesley, ISBN: 0201776316
Linux TCP/IP Network Administration by Scott Mann. Prentice Hall, ISBN: 0130322202
Official site of the Netfilter project
Practical UNIX and Internet Security, 3/E by Simson Garfinkel, Gene Spafford, Alan Schwartz . O'Reilly Associates, ISBN: 0596003234
syslog-ng FAQ
syslog-ng Knowledge Base
The syslog-ng Administrator Guide
Official Python documentation page
The X.509v3 certificate standard (RFC 3280)
(c) BalaBit IT Security Ltd.
1.1 This License Contract is entered into by and between BalaBit and Licensee and sets out the terms and conditions under which Licensee and/or Licensee's Authorized Subsidiaries may use the Zorp Application Level Gateway under this License Contract.
In this License Contract, the following words shall have the following meanings:
2.1 BalaBit
Company name:BalaBit IT Security Ltd.
Registered office: H-1115 Budapest, Bártfai Str. 54.
Company registration number:01-09-687127
Tax number:HU11996468-2-43
2.2. Words and expressions
Annexed Software
Any third party software that is a not a BalaBit Product contained in the install media of the BalaBit Product.
Authorized Subsidiary
Any subsidiary organization: (i) in which Licensee possesses more than fifty percent (50%) of the voting power and (ii) which is located within the Territory.
BalaBit Product
Any software, hardware or service licensed, sold, or provided by BalaBit including any installation, education, support and warranty services, with the exception of the Annexed Software.
License Contract
The present Zorp Application Level Gateway License Contract.
Product Documentation
Any documentation referring to the Zorp Application Level Gateway or any module thereof, with special regard to the reference guide, the administration guide, the product description, the installation guide, user guides and manuals.
Protected Hosts
Host computers located in the zones protected by Zorp Application Level Gateway, that means any computer bounded to network and capable to establish IP connections through the firewall.
Protected Objects
The entire Zorp Application Level Gateway including all of its modules, all the related Product Documentation; the source code, the structure of the databases, all registered information reflecting the structure of the Zorp Application Level Gateway and all the adaptation and copies of the Protected Objects that presently exist or that are to be developed in the future, or any product falling under the copyright of BalaBit.
Zorp Application Level Gateway
Application software BalaBit Product designed for securing computer networks as defined by the Product Description.
Warranty Period
The period of twelve (12) months from the date of delivery of the Zorp Application Level Gateway to Licensee.
Territory
The countries or areas specified above in respect of which Licensee shall be entitled to install and/or use Zorp Application Level Gateway.
Take Over Protocol
The document signed by the parties which contains
a) identification data of Licensee;
b) ordered options of Zorp Application Level Gateway, number of Protected Hosts and designation of licensed modules thereof;
c) designation of the Territory;
d) declaration of the parties on accepting the terms and conditions of this License Contract; and
e) declaration of Licensee that is in receipt of the install media.
3.1. For the Zorp Application Level Gateway licensed under this License Contract, BalaBit grants to Licensee a non-exclusive,
non-transferable, perpetual license to use such BalaBit Product under the terms and conditions of this License Contract and the applicable Take Over Protocol.
3.2. Licensee shall use the Zorp Application Level Gateway in the in the configuration and in the quantities specified in the Take Over Protocol within the Territory.
3.3. On the install media all modules of the Zorp Application Level Gateway will be presented, however, Licensee shall not be entitled to use any module which was not licensed to it. Access rights to modules and IP connections are controlled by an "electronic key" accompanying the Zorp Application Level Gateway.
3.4. Licensee shall be entitled to make one back-up copy of the install media containing the Zorp Application Level Gateway.
3.5. Licensee shall make available the Protected Objects at its disposal solely to its own employees and those of the Authorized Subsidiaries.
3.6. Licensee shall take all reasonable steps to protect BalaBit's rights with respect to the Protected Objects with special regard and care to protecting it from any unauthorized access.
3.7. Licensee shall, in 5 working days, properly answer the queries of BalaBit referring to the actual usage conditions of the Zorp
Professional Firewall System, that may differ or allegedly differs from the license conditions.
3.8. Licensee shall not modify the Zorp Application Level Gateway in any way, with special regard to the functions inspecting the usage of the software. Licensee shall install the code permitting the usage of the Zorp Application Level Gateway according to the provisions defined for it by BalaBit. Licensee may not modify or cancel such codes. Configuration settings of the Zorp Application Level Gateway in accordance with the possibilities offered by the system shall not be construed as modification of the software.
3.9. Licensee shall only be entitled to analize the structure of the BalaBit Products (decompilation or reverse- engineering) if concurrent operation with a software developed by a third party is necessary, and upon request to supply the information required for concurrent operation BalaBit does not provide such information within 60 days from the receipt of such a request. These user actions are limited to parts of the BalaBit Product which are necessary for concurrent operation.
3.10. Any information obtained as a result of applying the previous Section
(i) cannot be used for purposes other than concurrent operation with the BalaBit Product;
(ii) cannot be disclosed to third parties unless it is necessary for concurrent operation with the BalaBit Product;
(iii) cannot be used for the development, production or distribution of a different software which is similar to the Balabit Product
in its form of expression, or for any other act violating copyright.
3.11. For any Annexed Software contained by the same install media as the BalaBit Product, the terms and conditions defined by its copyright owner shall be properly applied. BalaBit does not grant any license rights to any Annexed Software.
3.12. Any usage of the Zorp Application Level Gateway exceeding the limits and restrictions defined in this License Contract shall qualify as material breach of the License Contract.
3.13. The Number of Protected Hosts shall not exceed the amount defined in the Take Over Protocol.
3.14. Licensee shall have the right to obtain and use content updates only if Licensee concludes a maintenance contract that includes such content updates, or if Licensee has otherwise separately acquired the right to obtain and use such content updates. This License Contract does not otherwise permit Licensee to obtain and use content updates.
4.1 Authorized Subsidiaries may also utilize the services of the Zorp Application Level Gateway under the terms and conditions of this License Contract. Any Authorized Subsidiary utilising any service of the Zorp Application Level Gateway will be deemed to have accepted the terms and conditions of this License Contract.
5.1. Licensee agrees that BalaBit owns all rights, titles, and interests related to the Zorp Application Level Gateway and all of BalaBit's patents, trademarks, trade names, inventions, copyrights, know-how, and trade secrets relating to the design, manufacture, operation or service of the BalaBit Products.
5.2. The use by Licensee of any of these intellectual property rights is authorized only for the purposes set forth herein, and upon termination of this License Contract for any reason, such authorization shall cease.
5.3. The BalaBit Products are licensed only for internal business purposes in every case, under the condition that such license does not convey any license, expressly or by implication, to manufacture, duplicate or otherwise copy or reproduce any of the BalaBit Products.
No other rights than expressly stated herein are granted to Licensee.
5.4. Licensee will take appropriate steps with its Authorized Subsidiaries, as BalaBit may request, to inform them of and assure compliance with the restrictions contained in the License Contract.
6.1. BalaBit hereby grants to Licensee the non-exclusive right to use the trade marks of the BalaBit Products in the Territory in accordance with the terms and for the duration of this License Contract.
6.2. BalaBit makes no representation or warranty as to the validity or enforceability of the trade marks, nor as to whether these infringe any intellectual property rights of third parties in the Territory.
7.1. In case of negligent infringement of BalaBit's rights with respect to the Zorp Application Level Gateway, committed by violating the restrictions and limitations defined by this License Contract, Licensee shall pay liquidated damages to BalaBit. The amount of the liquidated damages shall be twice as much as the price of the BalaBit Product concerned, on BalaBit's current Price List.
8.1. BalaBit shall pay all damages, costs and reasonable attorney's fees awarded against Licensee in connection with any claim brought against Licensee to the extent that such claim is based on a claim that Licensee's authorized use of the BalaBit Product infringes a patent, copyright, trademark or trade secret. Licensee shall notify BalaBit in writing of any such claim as soon as Licensee learns of it and shall cooperate fully with BalaBit in connection with the defense of that claim. BalaBit shall have sole control of that defense (including without limitation the right to settle the claim).
8.2. If Licensee is prohibited from using any BalaBit Product due to an infringement claim, or if BalaBit believes that any BalaBit Product is likely to become the subject of an infringement claim, BalaBit shall at its sole option, either: (i) obtain the right for Licensee to continue to use such BalaBit Product, (ii) replace or modify the BalaBit Product so as to make such BalaBit Product non-infringing and substantially comparable in functionality or (iii) refund to Licensee the amount paid for such infringing BalaBit Product and provide a pro-rated refund of any unused, prepaid maintenance fees paid by Licensee, in exchange for Licensee's return of such BalaBit Product to BalaBit.
8.3. Notwithstanding the above, BalaBit will have no liability for any infringement claim to the extent that it is based upon:
(i) modification of the BalaBit Product other than by BalaBit,
(ii) use of the BalaBit Product in combination with any product not specifically authorized by BalaBit to be combined with the BalaBit Product or
(iii) use of the BalaBit Product in an unauthorized manner for which it was not designed.
9.1. The number of the Protected Hosts (including the server as one host), the configuration and the modules licensed shall serve as the calculation base of the license fee.
9.2. Licensee acknowlegdes that payment of the license fees is a condition of lawful usage.
9.3. License fees do not contain any installation or post charges.
10.1. BalaBit warrants that during the Warranty Period, the optical media upon which the BalaBit Product is recorded will not be defective under normal use. BalaBit will replace any defective media returned to it, accompanied by a dated proof of purchase, within the Warranty Period at no charge to Licensee. Upon receipt of the allegedly defective BalaBit Product, BalaBit will at its option, deliver a replacement BalaBit Product or BalaBit's current equivalent to Licensee at no additional cost. BalaBit will bear the delivery charges to Licensee for the replacement Product.
10.2. In case of installation by BalaBit, BalaBit warrants that during the Warranty Period, the Zorp Application Level Gateway, under normal use in the operating environment defined by BalaBit, and without unauthorized modification, will perform in substantial compliance with the Product Documentation accompanying the BalaBit Product, when used on that hardware for which it was installed, in compliance with the provisions of the user manuals and the recommendations of BalaBit. The date of the notification sent to BalaBit shall qualify as the date of the failure. Licensee shall do its best to mitigate the consequences of that failure. If, during the Warranty Period, the BalaBit Product fails to comply with this warranty, and such failure is reported by Licensee to BalaBit within the Warranty Period, BalaBit's sole obligation and liability for breach of this warranty is, at BalaBit's sole option, either:
(i) to correct such failure,
(ii) to replace the defective BalaBit Product or
(iii) to refund the license fees paid by Licensee for the applicable BalaBit Product.
11.1. EXCEPT AS SET OUT IN THIS LICENSE CONTRACT, BALABIT MAKES NO WARRANTIES OF ANY KIND WITH RESPECT TO THE Zorp Application Level Gateway. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, BALABIT EXCLUDES ANY OTHER WARRANTIES, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF SATISFACTORY QUALITY, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS.
12.1. SOME STATES AND COUNTRIES, INCLUDING MEMBER COUNTRIES OF THE EUROPEAN UNION, DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES AND, THEREFORE, THE FOLLOWING LIMITATION OR EXCLUSION MAY NOT APPLY TO THIS LICENSE CONTRACT IN THOSE STATES AND COUNTRIES. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW AND REGARDLESS OF WHETHER ANY REMEDY SET OUT IN THIS LICENSE CONTRACT FAILS OF ITS ESSENTIAL PURPOSE, IN NO EVENT SHALL BALABIT BE LIABLE TO LICENSEE FOR ANY SPECIAL, CONSEQUENTIAL, INDIRECT OR SIMILAR DAMAGES OR LOST PROFITS OR LOST DATA ARISING OUT OF THE USE OR INABILITY TO USE THE Zorp Application Level Gateway EVEN IF BALABIT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
12.2. IN NO CASE SHALL BALABIT'S TOTAL LIABILITY UNDER THIS LICENSE CONTRACT EXCEED THE FEES PAID BY LICENSEE FOR THE Zorp Application Level Gateway LICENSED UNDER THIS LICENSE CONTRACT.
13.1. This License Contract shall come into effect on the date of signature of the Take Over Protocol by the duly authorized
representatives of the parties.
13.2. Licensee may terminate the License Contract at any time by written notice sent to BalaBit and by simultaneously destroying all copies of the Zorp Application Level Gateway licensed under this License Contract.
13.3. BalaBit may terminate this License Contract with immediate effect by written notice to Licensee, if Licensee is in material or persistent breach of the License Contract and either that breach is incapable of remedy or Licensee shall have failed to remedy that breach within 30 days after receiving written notice requiring it to remedy that breach.
14.1. Save as expressly provided in this License Contract, no amendment or variation of this License Contract shall be effective unless in writing and signed by a duly authorised representative of the parties to it.
15.1. The failure of a party to exercise or enforce any right under this License Contract shall not be deemed to be a waiver of that right nor operate to bar the exercise or enforcement of it at any time or times thereafter.
16.1. If any part of this License Contract becomes invalid, illegal or unenforceable, the parties shall in such an event negotiate in good faith in order to agree on the terms of a mutually satisfactory provision to be substituted for the invalid, illegal or unenforceable
provision which as nearly as possible validly gives effect to their intentions as expressed in this License Contract.
17.1. Any notice required to be given pursuant to this License Contract shall be in writing and shall be given by delivering the notice by hand, or by sending the same by prepaid first class post (airmail if to an address outside the country of posting) to the address of the relevant party set out in this License Contract or such other address as either party notifies to the other from time to time. Any notice given according to the above procedure shall be deemed to have been given at the time of delivery (if delivered by hand) and when received (if sent by post).
18.1. Headings are for convenience only and shall be ignored in interpreting this License Contract.
18.2. This License Contract and the rights granted in this License Contract may not be assigned, sublicensed or otherwise transferred in whole or in part by Licensee without BalaBit's prior written consent. This consent shall not be unreasonably withheld or delayed.
18.3. An independent third party auditor, reasonably acceptable to BalaBit and Licensee, may upon reasonable notice to Licensee and during normal business hours, but not more often than once each year, inspect Licensee's relevant records in order to confirm that usage of the Zorp Application Level Gateway complies with the terms and conditions of this License Contract. BalaBit shall bear the costs of such audit. All audits shall be subject to the reasonable safety and security policies and procedures of Licensee.
18.4. This License Contract constitutes the entire agreement between the parties with regard to the subject matter hereof. Any modification of this License Contract must be in writing and signed by both parties.
© 2007-2011 BalaBit IT Security
Please send your comments or documentation bugs to: documentation@balabit.com