ferment icon indicating copy to clipboard operation
ferment copied to clipboard

A tool to provide the current docker config in ferm format

Ferment

Objective

Create a ferm_ config for the current docker container setup. This seems useful for automated provisioning of systems (e.g. with ansible_) which want to use ferm_ for their firewall setup.

Usage

Install Ferment via pip::

# pip install ferment


# ferment docker --help
Usage: ferment docker [OPTIONS] COMMAND [ARGS]...

Options:
  -d, --docker PATH     The docker api socket.
  -c, --cidr TEXT       Docker CIDR.
  -i, --interface TEXT  Docker interface.
  --help                Show this message and exit.

Commands:
  config

You just include a callback to ferment within your ferm.conf::

# -*- shell-script -*-
#
#  Configuration file for ferm(1).
#

table filter {
    chain INPUT {
        policy DROP;

        # connection tracking
        mod state state INVALID DROP;
        mod state state (ESTABLISHED RELATED) ACCEPT;

        # allow local packet
        interface lo ACCEPT;

        # respond to ping
        proto icmp ACCEPT;

        # allow IPsec
        proto udp dport 500 ACCEPT;
        proto (esp ah) ACCEPT;

        # allow SSH connections
        proto tcp dport ssh ACCEPT;
    }
    chain OUTPUT {
        policy ACCEPT;

        # connection tracking
        #mod state state INVALID DROP;
        mod state state (ESTABLISHED RELATED) ACCEPT;
    }
    chain FORWARD {
        policy DROP;

        # connection tracking
        mod state state INVALID DROP;
        mod state state (ESTABLISHED RELATED) ACCEPT;
    }
}

@include '/usr/local/bin/ferment docker config|';

Todo

Since I am not the great firewall guy, I suppose there are some issues with more complex docker_ setups - I am open for suggestions.

.. _ferm: http://ferm.foo-projects.org/ .. _ansible: http://docs.ansible.com/ .. _docker: http://docs.docker.com/articles/networking/