Latest News

Oct 19, 2014 - FireHOL 2.0.0-rc.3 released [more ...]

What are FireHOL and FireQOS?

FireHOL is a language (and a program to run it) which builds secure, stateful firewalls of any complexity from easy to understand, human-readable configurations.

FireQOS is a program which sets up traffic shaping from an easy-to-understand and flexible configuration file.

We think the best advert for these programs are their configurations. See below for:

The two programs are shipped together but work independently so you can choose to use one or both.

Philosophy

FireHOL

FireHOL is an iptables firewall generator producing stateful iptables packet filtering firewalls, on Linux hosts and routers with any number of network interfaces, any number of routes, any number of services served, any number of complexity between variations of the services (including positive and negative expressions).

Writing a firewall can be this easy:

transparent_squid 8080 "squid root" inface eth0

interface eth0 mylan
    policy accept

interface ppp+ internet
    server smtp accept
    server http accept
    server ftp  accept
    server ssh  accept src example.firehol.org

    client all  accept

router mylan2internet inface eth0 outface ppp+
    masquerade
    route all accept

Jump straight to the tutorials to learn how to configure your own.

Hopefully you have noticed that all the rules given match just one direction of the traffic: the request. They don't say anything about replies. This is because FireHOL handles the replies automatically. You don't have to do anything about them: if a request is allowed, then the corresponding reply is also allowed. This also means that FireHOL produces the iptables statements to exactly match what is allowed in both directions and nothing more.

FireHOL is a language to express firewalling rules, not just a script that produces some kind of a firewall.

Is it secure?

FireHOL is secure because it has been designed with the right firewalling concept: deny everything, then allow only what is needed.

Also, FireHOL produces stateful iptables packet filtering firewalls (and possibly, the only generic tool today that does that for all services in both directions of the firewall).

Stateful means that traffic allowed to pass is part of a valid connection that has been initiated the right way. Stateful also means that you can have control based on who initiated the traffic. For example: you can choose to be able to ping anyone on the internet, but no one to be able to ping you. If for example you don't need to run a server on your Linux host, you can easily achieve a situation where you are able to do anything to anyone, but as far as the rest of world is concerned, you do not exist!

Learn another language?

FireHOL has been designed to allow you configure your firewall the same way you think of it. Its language is extremely simple. Basically you have to learn four commands:

Commands client and server have exactly the same syntax. A FireHOL interface has two mandatory arguments and a router has only one (and this is the same as one of the two that interface requires). All of the optional parameters are the same to all of them. This sounds like just one command is to be learned...

Of course there are a few more commands defined, but all of them exist just to give you finer control on these four.

If you don't believe it is simple, consider this example.

Why?

As an IT executive, responsible for many dozens of Linux systems, I needed a firewalling solution that would allow me and my team to have a clear and simple view of what is happening on each server, as far as firewalling is concerned. I also needed a solution that will allow my team members to produce high quality and homogeneous firewalls independently of their security skills and knowledge. After searching for such a tool, I quickly concluded that no tool is flexible, open, easy, and simple enough for what I needed.

I decided to write FireHOL in a way that will allow me, or anyone else, to view, verify and audit the firewall of any Linux server or Linux router in seconds. FireHOL's configuration is extremely simple... you don't have to be an expert to design a complicated but secure firewall.

What features does it have?

FireHOL handles firewalls protecting one host on all its interfaces and any combination of stateful firewalls routing traffic from one interface to another. There are no limitations on the number of interfaces or on the number of routing routes (except the ones iptables has, if any).

FireHOL, still lacks a few features: QoS for example is not supported directly. You are welcome to extend FireHOL and send me your patches to integrate within FireHOL. In any case however, you can embed normal iptables commands in a FireHOL configuration to do whatever iptables supports.

Since FireHOL produces stateful commands, for every supported service it needs to know the flow of requests and replies. Today FireHOL supports the following services:

FireQOS

FireQOS is a traffic shaping helper. It has a very simple shell scripting language to express traffic shaping. You run FireQOS to setup the kernel commands. You can also run it to get status information or dump the traffic of a class. FireQOS is not a daemon and does not need to run always to apply traffic shaping.

Configuring traffic shaping can be this easy:

# incoming traffic from my ADSL router
interface eth0 adsl-in input rate 10500kbit adsl remote pppoe-llc
   class voip commit 100kbit pfifo
       match udp ports 5060,10000:10100 # asterisk sip and rtp
       match udp ports 16393:16402 # apple facetime

   class realtime commit 10%
       match tcp port 22,1195:1198,1753 # ssh, openvpn, pptp
       match udp port 53 # dns
       match proto GRE
       match icmp
       match tcp syn
       match tcp ack

   class clients commit 10%
       match tcp port 20,21,25,80,143,443,465,873,993 # mail, web, ftp, etc

   class default max 90% # unmatched traffic goes here ('default' is special)

   # torrents below the default class, because I want them to slow down when
   # the default class needs bandwidth
   class torrents max 90%
       match port 51414 # my torrent client

# outgoing traffic to my ADSL router
interface eth0 adsl-out output rate 800kbit adsl remote pppoe-llc
   class voip commit 100kbit pfifo
       match udp ports 5060,10000:10100 # asterisk sip and rtp
       match udp ports 16393:16402 # apple facetime

   class realtime commit 10%
       match tcp port 22,1195:1198,1753 # ssh, openvpn, pptp
       match udp port 53 # dns
       match proto GRE
       match icmp
       match tcp syn
       match tcp ack

   class clients commit 10%
       match tcp port 20,21,25,80,143,443,465,873,993 # mail, web, ftp, etc

   class default max 90% # unmatched traffic goes here ('default' is special)

   # torrents below the default class, because I want them to slow down when
   # the default class needs bandwidth
   class torrents max 90%
       match port 51414 # my torrent client

Jump straight to the tutorials to learn how to configure your own.

FireQOS also allows you to monitor the live status of traffic:

# ./sbin/fireqos.in status adsl-in
FireQOS v1.0 DEVELOPMENT
(C) 2013 Costa Tsaousis, GPL


adsl-in: eth0 input => ifb0, type: adsl, overhead: 26
Rate: 10500Kbit/s, min: 105Kbit/s, R2Q: 8 (min rate 105Kbit/s)
Values in Kbit/s

  CLASS    voip realtim clients torrent default
PRIORIT       1       2       3       5       4
 COMMIT     105    1050    1050     105     105
    MAX   10500   10500   10500    9450    9450


   adsl-in (eth0 input => ifb0) - values in Kbit/s
  TOTAL    voip realtim clients torrent default
     46       -       7       -      39       -
     50       -       5       -      42       3
     80       -       9       -      60      11
     75       -       6       -      65       4
    103      19       3       -      79       2
     56       -       3       -      50       3
     84       -       5       -      70       9