Shorewall Version 4

Tom Eastep

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover, and with no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License.



Shorewall version 4.0 represented a substantial shift in direction for Shorewall. Up until then

  • Shorewall had been written entirely in Bourne Shell.

  • Shorewall had run the iptables utility to add each Netfilter rule.

Shorewall version 4.0 offered you a choice. You could continue to use the existing shell-based implementation or you could use a new implementation of the Shorewall compiler written in the Perl programming language. The new compiler:

  • had a small disk footprint

  • was very fast.

  • generateed a firewall script that uses iptables-restore; so the script was very fast.

  • generated better and more consistent error messages.

  • did a much more thorough job of checking the configuration to avoid run-time errors.

  • supported creating either Ipv4 or Ipv6 firewalls (Shorewall 4.2.4 and later).

Both compilers could be installed on your system and you could use whichever one suited you in a particular case.

Shorewall 4.4

Shorewall 4.4 discontinued the availability of the legacy shell-based compiler. All users must migrate to the perl-based compiler before or during an upgrade to Shorewall version 4.4 or later. We highly recommend that current users of the shell-based compiler migrate before upgrading to 4.4 or later so that both compilers are available during the migration.

Shorewall 4.4 contains five packages:

  • Shorewall - Everything needed to create an IPv4 firewall.

  • Shorewall-lite- Can run scripts generated by Shorewall on another system.

  • Shorewall6 - The utilities for creating and operating an Ipv6 firewall. Requires Shorewall.

  • Shorewall6-lite - Ipv6 equivalent of Shorewall Lite. Can run scripts generated by Shoreall on another system.

  • Shorewall-init - An add-on package for any of the other packages which can:

    1. Secure the firewall(s) prior to bringing up the interfaces (does not work with systems running Upstart)

    2. React to ifup/ifdown events and restart the firewall(s) if needed

Shorewall 4.5/4.6

Shorewall 4.5 added an additional Shorewall-core package. This package contains the core Shorewall shell libraries that are required by the other packages.

Prerequisites for using the Shorewall Version 4.2/4.4/4.5/4.6 Perl-based Compiler

  • Perl (I use Perl 5.14.2 but other 5.8 or later versions should work fine).


    If you want to be able to use DNS names in your Shorewall6 configuration files, then Perl 5.10 or later is required together with the Perl Socket6 module.

  • Perl Cwd Module

  • Perl File::Basename Module

  • Perl File::Temp Module

  • Perl Getopt::Long Module

  • Perl Carp Module

  • Perl FindBin Module

  • Perl Scalar::Util Module

  • Perl Digest::SHA1 Module (Shorewall 4.5 only)

Please note that there are additional requirements if you plan to install and use Shorewall6.

Incompatibilities Introduced in the Shorewall Version 4 Perl-based Compiler

The Shorewall Perl-based compiler is not 100% compatible with the Shorewall shell-based version. See this document for details.


Frequently Used Articles

- FAQs - Manpages - Configuration File Basics - Beginner Documentation - Troubleshooting

Shorewall 4.4/4.5/4.6 Documentation

Shorewall 4.0/4.2 Documentation

Shorewall 5.0/5.1 HOWTOs and Other Articles

- 6to4 and 6in4 Tunnels - Accounting - Actions - Aliased (virtual) Interfaces (e.g., eth0:0) - Anatomy of Shorewall - Anti-Spoofing Measures - AUDIT Target support - Bandwidth Control - Blacklisting/Whitelisting - Bridge/Firewall - Building Shorewall from GIT - Commands - Compiled Programs - Configuration File Basics - DHCP - DNAT - Docker - Dynamic Zones - ECN Disabling by host or subnet - Events - Extension Scripts - Fallback/Uninstall - FAQs - Features - Fool's Firewall - Forwarding Traffic on the Same Interface - FTP and Shorewall - Helpers/Helper Modules - Installation/Upgrade - IPP2P - IPSEC - Ipsets - IPv6 Support - ISO 3661 Country Codes - Kazaa Filtering - Kernel Configuration - KVM (Kernel-mode Virtual Machine) - Limiting Connection Rates - Linux Containers (LXC) - Linux-vserver - Logging - Macros - MAC Verification - Manpages - Manual Chains - Masquerading - Multiple Internet Connections from a Single Firewall - Multiple Zones Through One Interface - My Shorewall Configuration - Netfilter Overview - Network Mapping - No firewalling of traffic between bridge port - One-to-one NAT - Operating Shorewall - OpenVPN - OpenVZ - Packet Marking - Packet Processing in a Shorewall-based Firewall - 'Ping' Management - Port Forwarding - Port Information - Port Knocking (deprecated) - Port Knocking, Auto Blacklisting and Other Uses of the 'Recent Match' - PPTP - Proxy ARP - QuickStart Guides - Release Model - Requirements - Routing and Shorewall - Routing on One Interface - Samba - Shared Shorewall/Shorewall6 Configuration - Shorewall Events - Shorewall Init - Shorewall Lite - Shorewall on a Laptop - Shorewall Perl - Shorewall Setup Guide - SMB - SNAT - Split DNS the Easy Way - Squid with Shorewall - Starting/stopping the Firewall - Static (one-to-one) NAT - Support - Tips and Hints - Traffic Shaping/QOS - Simple - Traffic Shaping/QOS - Complex - Transparent Proxy - UPnP - Upgrade Issues - Upgrading to Shorewall 4.4 (Upgrading Debian Lenny to Squeeze) - VPN - VPN Passthrough - White List Creation - Xen - Shorewall in a Bridged Xen DomU - Xen - Shorewall in Routed Xen Dom0

Top of Page