Ich verwende folgendes kleine Script um meinen Rechner vor unathorisierten Zugriffen zu schützen: --------------------------------------------------------------------------------------------- #! /bin/sh IPTABLES="/usr/sbin/iptables" modprobe ip_conntrack_ftp modprobe ip_nat_ftp NET_ANY="0.0.0.0/0"
# dynamische Kernelparameter setzen echo "1" > /proc/sys/net/ipv4/tcp_syncookies # DoS abwehren echo "1" > /proc/net/ip_conntrack
$IPTABLES -F INPUT $IPTABLES -F FORWARD $IPTABLES -F OUTPUT
$IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT DROP
# http $IPTABLES -A INPUT -p tcp -s $NET_ANY -d 192.168.1.1 --dport 80 -j ACCEPT $IPTABLES -A OUTPUT -p tcp -s 192.168.1.1 --sport 80 -d $NET_ANY -j ACCEPT $IPTABLES -A INPUT -p tcp -s $NET_ANY -d 212.80.235.155 --dport 80 -j ACCEPT $IPTABLES -A OUTPUT -p tcp -s 212.80.235.155 --sport 80 -d $NET_ANY -j ACCEPT
# https $IPTABLES -A INPUT -p tcp -s $NET_ANY -d 192.168.1.1 --dport 443 -j ACCEPT $IPTABLES -A OUTPUT -p tcp -s 192.168.1.1 --sport 443 -d $NET_ANY -j ACCEPT
# ssh $IPTABLES -A INPUT -p tcp -s $NET_ANY -d 192.168.1.1 --dport 22 -j ACCEPT $IPTABLES -A OUTPUT -p tcp -s 192.168.1.1 --sport 22 -d $NET_ANY -j ACCEPT
# ftp $IPTABLES -A INPUT -p TCP --sport 1024:65535 --dport 20 -j ACCEPT $IPTABLES -A OUTPUT -p TCP --dport 1024:65535 --sport 20 -j ACCEPT $IPTABLES -A INPUT -p TCP --sport 1024:65535 --dport 21 -j ACCEPT $IPTABLES -A OUTPUT -p TCP --dport 1024:65535 --sport 21 -j ACCEPT $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -p TCP --sport 1024:65535 --dport 21 -j ACCEPT $IPTABLES -A INPUT -p TCP --sport 1024:65535 --dport 20 -j ACCEPT $IPTABLES -A OUTPUT -p TCP --dport 1024:65535 --sport 20 -j ACCEPT $IPTABLES -A INPUT -p TCP -s $NET_ANY -d 192.168.1.1 --dport 20 -j ACCEPT $IPTABLES -A OUTPUT -p TCP -s 192.168.1.1 --sport 1024:65535 -d $NET_ANY -j ACCEPT
# smtp $IPTABLES -A INPUT -p tcp -s $NET_ANY -d 192.168.1.1 --dport 25 -j ACCEPT # Fuer SMTP $IPTABLES -A OUTPUT -p tcp -s 192.168.1.1 --sport 25 -d $NET_ANY -j ACCEPT
# pop3 $IPTABLES -A INPUT -p tcp -s $NET_ANY -d 192.168.1.1 --dport 110 -j ACCEPT # POP3 $IPTABLES -A OUTPUT -p tcp -s 192.168.1.1 -d $NET_ANY --sport 110 -j ACCEPT
# dns $IPTABLES -I OUTPUT -s 192.168.1.1 -p UDP --dport 1024:65535 --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -I INPUT -s $NET_ANY -p UDP --dport 53 --sport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT $IPTABLES -I OUTPUT -s 192.168.1.1 -p TCP --dport 1024:65535 --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -I INPUT -s $NET_ANY -p TCP --dport 53 --sport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# loopback $IPTABLES -A OUTPUT -o lo -j ACCEPT $IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -d 255.255.255.255 -j DROP ---------------------------------------------------------------------------------------------
Nun tritt hier folgendes Phenomen auf: Die Firewall funktioniert wunderbar. Die Antwortzeiten steigen allerdings linear an. Das bedeutet, dass kurz nach dem Start des Scripts die Antwortzeiten des Rechners normal sind. Später steigen diese allerdings an. Je länger diese Regeln existieren, desto länger dauern die Antworten von diesem Rechner. Wenn ich jetzt die iptables-Regeln lösche und dann das Script neu starte geht alles wieder wie normal. wo habe ich den Fehler in meinen Überlegungen?
On Sun, Jul 27, 2003 at 04:10:21PM +0200, Torsten Rudzok wrote: Hi Torsten,
Ich verwende folgendes kleine Script um meinen Rechner vor unathorisierten Zugriffen zu schützen:
<schnipp>
Nun tritt hier folgendes Phenomen auf: Die Firewall funktioniert wunderbar. Die Antwortzeiten steigen allerdings linear an. Das bedeutet, dass kurz nach dem Start des Scripts die Antwortzeiten des Rechners normal sind. Später steigen diese allerdings an. Je länger diese Regeln existieren, desto länger dauern die Antworten von diesem Rechner. Wenn ich jetzt die iptables-Regeln lösche und dann das Script neu starte geht alles wieder wie normal. wo habe ich den Fehler in meinen Überlegungen?
Hmm, einen genauen Hinweis kann ich dir auch nicht geben, aber ein linearer Anstieg könnte etwas mit dem TCP/IP-Stack zu tun haben, der versucht Pakete abzuschicken, aber durch eine Regel gehintert wird.
Hast du schon mal in der letzten Regel eine LOG Anweisung untergebracht? Evtl. kannst du daraus erkennen, welche Pakete verworfen werden und die Verzögerung verursachen.
Ciao, Tobias
Hallo!
On Sunday 27 July 2003 16:10, Torsten Rudzok wrote:
Ich verwende folgendes kleine Script um meinen Rechner vor unathorisierten Zugriffen zu schützen:
[snip] echo "1" > /proc/net/ip_conntrack Ist das wirklich richtig? Ich dachte, alles was dynmisch zur Laufzeit änderbar ist, steht unter /proc/sys/*
[snip]
Nun tritt hier folgendes Phenomen auf: Die Firewall funktioniert wunderbar. Die Antwortzeiten steigen allerdings linear an. Das bedeutet, dass kurz nach dem Start des Scripts die Antwortzeiten des Rechners normal sind. Später steigen diese allerdings an. Je länger diese Regeln existieren, desto länger dauern die Antworten von diesem Rechner. Wenn ich jetzt die iptables-Regeln lösche und dann das Script neu starte geht alles wieder wie normal. wo habe ich den Fehler in meinen Überlegungen?
Ich habe mal mein altes Script aus den Wohnheimzeiten angehängt. Im Prinzip das gleiche wie bei dir, bis auf zwei Punkte: 1. Aller ausgehender Traffic ist gutartig 2. Ich habe ganz vorn eine Regel, die sämtlichen Traffic der ESTABLISHED oder RELATET ist durchläßt.
Das Script war 1 1/2 Jahre ohne Probleme im Einsatz. Vielleicht hilt es Dir ja.
Ciao, -Gregor
Hi Torsten,
On Sun, Jul 27, 2003 at 16:10:21 +0200, Torsten Rudzok wrote:
Ich verwende folgendes kleine Script um meinen Rechner vor unathorisierten Zugriffen zu schützen:
#! /bin/sh IPTABLES="/usr/sbin/iptables"
[...]
Die Firewall funktioniert wunderbar. Die Antwortzeiten steigen allerdings linear an. Das bedeutet, dass kurz nach dem Start des Scripts die Antwortzeiten des Rechners normal sind. Später steigen diese allerdings an. Je länger diese Regeln existieren, desto länger dauern die Antworten von diesem Rechner. Wenn ich jetzt die iptables-Regeln lösche und dann das Script neu starte geht alles wieder wie normal. wo habe ich den Fehler in meinen Überlegungen?
Hab ich was uebersehen, oder laesst Du tatsaechlich kein ICMP durch?
bye, Chris
Torsten Rudzok schrieb:
Ich verwende folgendes kleine Script um meinen Rechner vor unathorisierten Zugriffen zu schützen:
Es wird zwar nicht die Lösung deines Problems sein, aber trotzdem ein paar Tips dazu.
Ich gehe mal davon aus, daß das ein Router mit 2 NICs ist?
echo "1" > /proc/net/ip_conntrack
Bin ich mir nicht bewußt, das jemals getan zu haben. Nachdem mir 'cat /proc/net/ip_conntrack' eine Liste bestehender Verbindungen gegeben hat, bin ich mir sicher, daß das falsch ist.
$IPTABLES -A INPUT -p tcp -s $NET_ANY -d 192.168.1.1 --dport 80 -j ACCEPT
Besser:
$IPTABLES -A INPUT -p tcp -i eth0 -d 192.168.1.1 --dport 80 -m state --state NEW -j ACCEPT
Damit kontrollierst Du hier nur den Verbindungsaufbau und nicht alle Pakete.
Die Source-Angabe kannst Du hier auch weglassen, wenn nichts angegeben ist wird sowieso 0.0.0.0/0 angenommen. Ich würde aber auf jeden Fall das Interface mit angeben, auf dem die IP gültig ist
$IPTABLES -A OUTPUT -p tcp -s 192.168.1.1 --sport 80 -d $NET_ANY -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
Damit erschlägst Du alle weiteren Pakete einer erfolgreich aufgebauten Verbindung auf allen Interfaces und Ports.
$IPTABLES -A INPUT -p tcp -s $NET_ANY -d 212.80.235.155 --dport 80 -j ACCEPT $IPTABLES -A OUTPUT -p tcp -s 212.80.235.155 --sport 80 -d $NET_ANY -j ACCEPT
Hast Du eine feste IP?
Falls nicht, kannst Du auch die IP weglassen für das externe Interface und nur auf das Interface filtern:
$IPTABLES -A INPUT -p tcp -i eth1 --dport 80 -m state --state NEW -j ACCEPT
Sicherheitshalber noch dazu: $IPTABLES -A INPUT -p tcp -i eth1 -d 192.168.1.0/24 -j DROP
Solche Pakete sollten aber garnicht bis hierher kommen.
# ftp $IPTABLES -A INPUT -p TCP --sport 1024:65535 --dport 20 -j ACCEPT $IPTABLES -A OUTPUT -p TCP --dport 1024:65535 --sport 20 -j ACCEPT $IPTABLES -A INPUT -p TCP --sport 1024:65535 --dport 21 -j ACCEPT $IPTABLES -A OUTPUT -p TCP --dport 1024:65535 --sport 21 -j ACCEPT
Es reicht: $IPTABLES -A INPUT -p TCP --sport 1024: --dport ftp -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p TCP --sport 1024: --dport ftp -m state --state NEW -j ACCEPT
Den Rest erledigt ip_conntrack_ftp.
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Ah, hier hast Du ja die allgemeine 'Durchlaßregel' für bestehende Verbindungen.
# dns $IPTABLES -I OUTPUT -s 192.168.1.1 -p UDP --dport 1024:65535 --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -I INPUT -s $NET_ANY -p UDP --dport 53 --sport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT $IPTABLES -I OUTPUT -s 192.168.1.1 -p TCP --dport 1024:65535 --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -I INPUT -s $NET_ANY -p TCP --dport 53 --sport 1024:65535 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Wie jetzt, Du akzeptierst DNS-Anfragen von aussen? Hast Du wirklich einen DNS für den Rest der Welt aufgesetzt? Est., Rel. kannst Du dir hier sparen, das hast Du ja schon weiter oben erledigt. Ich würde hier ein fettes DROP setzen und wenn soviele Anfragen auf einen Port kommen, die Du nicht willst setze das DROP ganz an den Anfang der Regelkette. Optimieren kannst Du die Regeln immer, indem du die am häufigsten angesprochenen Regeln an den Anfang setzt, egal ob ACCEPT oder DROP.
Ansonsten sind deine Regeln schon etwas widersprüchlich, zwei IPs (eine öffentliche und eine private), aber keine FORWARD-Regeln. Langsam zweifle ich an dem Sinn. Ist das nun ein einzelner Rechner, ein Router oder beides? Wieviel Netzwerkinterfaces? Wie gehst Du ins Internet (DSL, ISDN oder Modem)
Schick doch mal, die Ausgabe von 'ifconfig' und 'route -n' und erkläre was Du erreichen willst.
Nun tritt hier folgendes Phenomen auf: Die Firewall funktioniert wunderbar.
Naja, das ist eben relativ. ;-)
Die Antwortzeiten steigen allerdings linear an. Das bedeutet, dass kurz nach
siehe ICMP
Rico
am 13.08.2003, um 9:28:32 +0200 mailte Rico Koerner folgendes:
Ich würde hier ein fettes DROP setzen und wenn soviele Anfragen auf einen Port kommen, die Du nicht willst setze das DROP ganz an den Anfang
DROP ist nicht so dolle gut, REJECT besser. Dazu, getrennt nach TCP und UDP, den dafür passenden ICMP-Code:
... -p TCP -j REJECT --reject-with tcp-reset ... -p UDP -j REJECT --reject-with icmp-port-unreachable
Andreas
lug-dd@mailman.schlittermann.de