Wer wie ich nicht gerne direkt iptables Regeln selber schreiben möchte sollte sich mal ferm angucken. Unter Debian lässt sich das Paket ganz einfach installieren mit:
aptitude install ferm
Und schon ist ferm installiert. Um ferm global zu aktivieren oder zu deaktivieren kann man den Schalter ENABLED in der Datei /etc/default/ferm auf YES oder NO setzen.
In meiner folgenden Konfiguration habe ich sowohl Regeln für IPv4 als auch IPv6. Eingehende Verbindungen über IPv4 oder IPv6 werden eingeschränkt. Bei den IPv4 Verbindungen habe ich auch ein Source- und Destination-Limit eingebaut.
Die Konfiguration befindet sich selber in der Datei /etc/ferm/ferm.conf. Und hier endlich eine Beispielkonfiguration:
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 icmp-type echo-request ACCEPT; # allow IPsec #proto udp dport 500 ACCEPT; #proto (esp ah) ACCEPT; # allow SSH connections on port 63333 proto tcp dport 63333 { # source limit mod connlimit connlimit-above 10 REJECT; # destination limit mod connlimit connlimit-above 20 connlimit-mask 0 REJECT; ACCEPT; } # http proto tcp dport (80 443) { # source limit mod connlimit connlimit-above 50 REJECT; # destination limit mod connlimit connlimit-above 250 connlimit-mask 0 REJECT; ACCEPT; } # ftp proto tcp dport ftp { # source limit mod connlimit connlimit-above 5 REJECT; # destination limit mod connlimit connlimit-above 50 connlimit-mask 0 REJECT; ACCEPT; } # smtp proto tcp dport (25 465) { # source limit mod connlimit connlimit-above 20 REJECT; # destination limit mod connlimit connlimit-above 50 connlimit-mask 0 REJECT; ACCEPT; } # pop3 proto tcp dport (110 995) { # source limit mod connlimit connlimit-above 20 REJECT; # destination limit mod connlimit connlimit-above 250 connlimit-mask 0 REJECT; ACCEPT; } # imap proto tcp dport (143 993) { # source limit mod connlimit connlimit-above 20 REJECT; # destination limit mod connlimit connlimit-above 250 connlimit-mask 0 REJECT; ACCEPT; } # sieve proto tcp dport 2000 { # source limit mod connlimit connlimit-above 5 REJECT; # destination limit mod connlimit connlimit-above 50 connlimit-mask 0 REJECT; 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; } } # IPv6: domain ip6 table filter { chain INPUT { policy DROP; # connection tracking #mod state state INVALID DROP; mod state state (ESTABLISHED RELATED) ACCEPT; # allow local connections interface lo ACCEPT; # allow ICMP (for neighbor solicitation, like ARP for IPv4) proto ipv6-icmp ACCEPT; # allow SSH connections on port 63333 proto tcp dport 63333 ACCEPT; # http proto tcp dport (80 443) ACCEPT; # ftp proto tcp dport ftp ACCEPT; # smtp proto tcp dport (25 465) ACCEPT; # pop3 proto tcp dport (110 995) ACCEPT; # imap proto tcp dport (143 993) ACCEPT; # sieve proto tcp dport 2000 ACCEPT; } # outgoing connections are not limited chain OUTPUT policy ACCEPT; # this is not a router chain FORWARD policy DROP; }
Bei Fragen oder Anmerkungen meldet euch doch einfach.