Uniвсячина

понемножку о Linux и программировании

Препроцессор для Iptables

Я вполне хорошо знаю и умею пользоваться iptables, но не могу сказать, что написание сложных правил доставляет мне удовольствие, в отличие от того же pf. GUI для iptables меня обычно либо вводят в шок (например, fwbuilder просто вынес мне мозг, предоставив писать правила для iptables, как обычно, только мышкой), либо не дают всех нужных возможностей, которые есть в iptables.

На днях, наткнулся на совершенно замечательный препроцессор для iptables, который позволяет описывать правила на более высоком уровне. Что абсолютно радует, это человекочитаемость полученного конфига. В общем, я влюбился в эту программу. Зовется она ferm, подробно о ней можно почитать на домашней страничке проекта. Проект активно развивается, последняя версия выходила в этом месяце.

Чтобы вы сразу прониклись, красотой этой программы, кидаю свой конфиг /etc/ferm/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 packages
        interface lo ACCEPT;

        # respond to ping
        proto icmp ACCEPT;

        interface eth1 {
            mod state state NEW {
                # pdns-recursor
                proto (tcp udp) dport domain ACCEPT;

                proto tcp {
                    # ssh
                    dport ssh ACCEPT;
                    # pulseaudio
                    dport 4713 ACCEPT;
                    # mysql
                    dport 3306 ACCEPT;
                    # memcached
                    dport 11211 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;

        mod state state NEW {
            interface eth1 ACCEPT;
            outerface eth1 ACCEPT;
        }
    }
}

table nat {
    chain POSTROUTING {
        outerface (ppp0 ppp1) saddr 192.168.0.0/24 MASQUERADE;
    }
}

# vim:sw=4 ts=4:

Comments