Я вполне хорошо знаю и умею пользоваться 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: