iptables - details

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Spoiler
Beiträge: 179
Registriert: 03.08.2006 12:44:12

iptables - details

Beitrag von Spoiler » 09.11.2006 15:54:36

Moin,

nachdem ich die letzten Tage damit verbracht habe, IPTABLES mal auf den Leib zu rücken, stellen sich mir nun einige Fragen.
Um mir die Arbeit zu ersparen, alles selber zu tippen und womöglich noch viele Fehler einzubauen, habe ich mir eine Konfig von http://harry.homelinux.org erstellen lassen (da gibts einen IPTABLES-Genrator).

Dabei ist folgendes rausgekommen:
//edit meandtheshell - bitte für lange code stücke NoPaste verwenden
http://nopaste.debianforum.de/4514

Also soweit ich das beurteilen kann, siehts nicht schlecht aus.
Aber genau deshalb stellen sich mir ja auch einige Fragen.
Da gehts los:

Code: Alles auswählen

    # Connection-Tracking aktivieren
    iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Das heisst für mich: ALLER ausgehender Verkehr wird durchgelassen. Richtig?

Stellt sich also die Frage, ob das wirklich so sinnvoll ist.
Ich habe andere Scripte gesehen, da wird zum jeweiligen Dienst immer mit angegeben, das der Port auch für OUTPUT freigegeben ist.

Hier sieht das so aus:

Code: Alles auswählen

    # HTTP
    iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT
Ich würde das dann gerne so gestallten:

Code: Alles auswählen

    # Connection-Tracking aktivieren
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    # HTTP
    iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT
    iptables -A OUTPUT -o eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT
Dabei wäre dann auch meine Frage, ob da so überhaupt richtig ist und funktionieren kann.

Weiterhin stellt sich mir die Frage:
Was ist mit Dienste wie zum Beispiel FTP oder SSH? Benutzen diese nicht noch weitere Ports für den OUTPUT?

Und was ist zum Beispiel mit Postgrey?
Der benutzt glaub ich den Port 60000 ... aber nutzt er den auch für die Kommunikation nach außen?
Oder ist das ein interner Port über den sich Postgray nur in den Mailverkehr einklinkt, um die Mails zu prüfen, und somit entsteht kein Verkehr nach bzw. von außen?

Ich hab halt auch ein Script gefunden, wo das so gemacht wird.
Nur bleibt eben immer die Frage ob das wirklich Sinn hat.
Wer schauen will: http://www.linux-fuer-alle.de/doc_show. ... 7&catid=14

Könnte also jemand so freundlich sein und mir das ein bissel verständlicher machen?

Vielen Dank im Voraus.

Gruß

Spoiler

Benutzeravatar
chroiss
Beiträge: 332
Registriert: 29.10.2004 09:29:43
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: BREMEN (in Wellington,NZ a.D) (in OLDENBURG a.D.) (in BREMEN a.D.) (in COLOGNE a.D.)

Beitrag von chroiss » 09.11.2006 19:33:46

Code:

# Connection-Tracking aktivieren
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Das heisst für mich: ALLER ausgehender Verkehr wird durchgelassen. Richtig?
richtig ! Wobei die von dir aufgeführte INPUT Kette keine Relevanz dabei hat.

Stellt sich also die Frage, ob das wirklich so sinnvoll ist.
Das kommt auf die Betrachtung drauf an. Viele lassen die Output Kette komplett auf. Was soll auch schon passieren ... Du wirst ja die Verbindungen aufbauen wollen ...
Hast du aber z.b einen unbemerkten Virus , ist es natürlich von Vorteil die Output Kette auch detailiert zu reglementieren. ( Ebenso wenn eine bestimmte interne IP etwas erreichen soll und die andere nicht.) Das geht an dieser Stelle aber zu weit (insbesondere das mit dem Virus , da man davon ausgehen sollte das du dich dagegen durch andere Methoden währst) , das müsstest du selber wissen.
Ich würde das dann gerne so gestallten:
Code:

# Connection-Tracking aktivieren
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# HTTP
iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT

Dabei wäre dann auch meine Frage, ob da so überhaupt richtig ist und funktionieren kann.
Im Prinzip schon gut. Nur sollte man die Reihenfolge ändern.

Code: Alles auswählen

# HTTP
    iptables -A INPUT -i eth0 -m state --state NEW -p tcp --dport 80 -j ACCEPT 
Das state NEW bedeutet logischer Weise, das diese Regel nur zutrifft wenn eine neue Verbindung aufgebaut wird. Deshalb ist es nur logisch , dass man

Code: Alles auswählen

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
danach anwendet. Established, Related erlaubt in dem zusammenhang alle folgepakete und verbindungen die zu der , die neu aufgerufen wurde , gehören.
Standardmässig ist es so das du erstmal die INPUT kette definierst mit --state NEW und am ende einmal die regel

Code: Alles auswählen

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
anwendest.
Alternativ kannst du auch jede Regel in der INPUT kette mit
-m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
aufbauen. dann kannst du auf die globale regel

Code: Alles auswählen

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
verzichten. (ist Geschmackssache)
Was ist mit Dienste wie zum Beispiel FTP oder SSH? Benutzen diese nicht noch weitere Ports für den OUTPUT?
SSH benutzt lediglich Port 22 . FTP benutzt 21 und 20. In einer Natumgebung gibt es dafür aber :

Code: Alles auswählen

modprobe ip_nat_ftp
Postgrey benutzt den Port GLAUBE ich nur intern ... das heisst deine Firewall ist davon nicht betroffen, wenn du Loopback komplett auf hast ( und das hat man )

gruss chroiss
"The only secure computer is one that's unplugged, locked in a safe, and buried 20 feet under the ground in a secret location... and I'm not even too sure about that one"--Dennis Huges, FBI.

Spoiler
Beiträge: 179
Registriert: 03.08.2006 12:44:12

Beitrag von Spoiler » 09.11.2006 21:24:35

Danke erstmal.

Wenn die logische Reihenfolge: NEW,ESTABLISHED,RELATED

lautet, müsste man in dem Script oben das Connection-Tracking nach der Port-Definition schalten oder?

Wenn noch einer was zum Thema Postgrey weis, möge er jetzt reden und auf keinen Fall schweigen ;)

Danke.

Benutzeravatar
chroiss
Beiträge: 332
Registriert: 29.10.2004 09:29:43
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: BREMEN (in Wellington,NZ a.D) (in OLDENBURG a.D.) (in BREMEN a.D.) (in COLOGNE a.D.)

Beitrag von chroiss » 09.11.2006 22:30:56

Wenn die logische Reihenfolge: NEW,ESTABLISHED,RELATED

lautet, müsste man in dem Script oben das Connection-Tracking nach der Port-Definition schalten oder?
Richtig !

Aber nicht falsch verstehen:
Die Reihenfolge ist nicht
1. New
2. Established
3. Related
, sondern vielmehr

1. NEW
2. oder Established oder / (möglicherweise) Related

Denn zunächst muss ja erstmal eine neue (NEW) Verbindung aufgebaut werden, um nachfolgfend erkennen zu können ob zu dieser bestehenden (established) Verbindung, andere Pakete gehören.
Möglicherweise funktioniert die Variante aus dem Script, sinnvoller ist es aber so wie Du es schon erkannt hast.

Für die Outputkette ist es in dem Fall egal , da ja sowieso alles offen ist.
Genauso hätte man auch gleich die Default Policy auf ACCEPT stellen können.

Code: Alles auswählen

# Default-Policies setzen
    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD DROP 
und sich diesen Eintrag
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
sparen können.

Hab gerade nochmal bei nem Kollegen nachgekuckt, der Postgrey einsetzt .
Nach aussen brauch nix offen zu sein. lediglich wie schon geschieben, der loopback. und dass ist ja der fall.

gruss chroiss
Zuletzt geändert von chroiss am 27.12.2006 19:21:01, insgesamt 1-mal geändert.
"The only secure computer is one that's unplugged, locked in a safe, and buried 20 feet under the ground in a secret location... and I'm not even too sure about that one"--Dennis Huges, FBI.

Spoiler
Beiträge: 179
Registriert: 03.08.2006 12:44:12

Beitrag von Spoiler » 10.11.2006 14:31:48

Vielen Dank!! ;)

Benutzeravatar
striker2150
Beiträge: 158
Registriert: 23.07.2004 20:46:22

Beitrag von striker2150 » 18.11.2006 12:36:37

Code: Alles auswählen

# Connection-Tracking aktivieren
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ESTABLISHED bedeutet, dass ein Packet zu einer bereits bestehenden Verbindung gehört. RELATED bedeutet, dass das Paket zwar nicht zu einer bestehenden Verbindung gehört, aber mit einer bestehenden Verbindung was zu tun hat (Stichwort aktives FTP).

NEW bedeutet, dass es es sich um das erste Paket einer Verbindung handelt.

Der Witz bei der Sache ist jetzt, dass Du nur noch einträge für new Pakete hinzufügen musst, wenn Du von Außen auf irgendwelche Dienste zugreifen willst (Z.B. http-Server). Aber ein Angreifer kann dir jetzt nicht so leicht manipulierte Pakete unterschieben (z.B. weche mit ACK Flag gesetzt ohne das vorher ein SYN gekommen ist). Früher bei IPCHAINS hat man das nicht so toll machen können.

Antworten