iptables - nur eine IP und einen Port raus lassen

iceview

Lieutenant
Registriert
Jan. 2008
Beiträge
714
Hallo zusammen,

kann man mittels iptables eine Netzwerkverbindung auf eine IP und Port einschränken?

Ich hab mal ein Beispiel angehangen. Damit die zwei Maschinen nicht über den Weg "außenrum" über die Firewall sprechen müssen, gibt es ein virtuelles Transportnetz (auf einem ESXi).

Vom Webserver aus sollen nur die Mails abgesetzt werden. Hierzu würde ich dann gerne einschränken, nur die IP Mailserver und nur Port 25.

Geht das?

Danke


netz.JPG
 
Ja das geht und zwar über die FORWARD Chain der IPTables Firewall. Diese greift sobald Pakete durch die Firewall geroutet werden müssen. Quasi so wie in deinem Bild zu sehen.

Zunächst solltest du feststellen was die standard Regel für die FORWARD Chain. Die kann entweder auf ACCEPT (lass alles durch, bis auf Ausnahmen -> Blacklist) oder DROP(lasse nix durch, bis auf Ausnahmen -> Whitelist)

Code:
iptables -L -v
zeigt dir ne Liste aller Regeln. Darunter auch so etwas
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

das z.B der Fall wenn die FORWARD Chain alles durch lässt, wenn keine Ausnahmen darunter getroffen werden. Um das hinzubekommen kann man folgendes machen
Code:
iptables -A FORWARD -s 192.168.111.41 -p tcp -dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.111.41 -p tcp -sport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.111.41 -j DROP

Wichtig ist auf jedenfall die Reihefolge der Regeln. Iptables arbeitet immer von der ersten (obereren) Regel solange ab bis eine existiert auf die es zutrifft.

Was machen nun die 3 Sachen?
1. Lässt alle pakete durch die von der IP 192.168.111.41 kommen dem Protokoll TCP entsprechen und als Zielport die 25 haben
2. Lässt alle pakete durch die von der IP 192.168.111.41 kommen dem Protokoll TCP entsprechen und als Quellport die 25 haben

da ja die Standardregel der Forward Chain auf ACCEPT steht würde da nicht viel passieren darum jetzt nocht die letzte Regel

3. Verwerfe jedes Paket das von 192.168.111.41 kommt.

da IPTABLES nach jeder zutreffenden Regel aussteigt, kommt die 3. Regel nur zum greifen wenn nicht eine der ersten Beiden schon eingetreten ist.
 
Zuletzt bearbeitet:
Okay, soweit verstehe ich es. Danke erstmal für die ausführliche Erklärung.

Der Host 192.168.111.41 ist jedoch eine W7 Maschine. In der Mailserveranwendung kann ich festlegen, welche IP oder/und welche Absendedomains erlaubt sind.

Was ich möchte ist, dass der Unix Webserver (192.168.50.11) nur auf Port 25 durchlässt was an 192.168.50.41 geht.
Also nicht über das "obere" Netz, dies könnte ich sogar sonst über die Firewall regeln, sondern über das Transportnetz.
 
Was ich möchte ist, dass der Unix Webserver (192.168.50.11) nur auf Port 25 durchlässt was an 192.168.50.41 geht.
Verstehe ich das jetzt richtig. Du willst die Verbindung zwischen der .50.11 und .50.41 filtern, und dabei nur TCP Verdinungen auf Port 25 zulassen? Und alles andere soll verworfen werden?

In dem Fall vergiss was ich oben geschrieben hab. Da hier ja kein Routing statt findet, sondern die Verbindung von der Maschine mit der Firewall direkt aus geht, muss du hier die OUTPUT chain entsprechend anpassen.

Code:
iptables -A OUTPUT -d 192.168.50.41 -p tcp -dport 25 -j ACCEPT
iptables -A OUTPUT -d 192.168.50.41 -j DROP

Kurze Erklärung was das nun genau macht.
1. Lasse alle TCP Pakete, die von einer Anwendung dieser Maschine kommen und das Ziel (-d) 192.168.50.41 und port 25 haben passieren
2. Verwerfe alle Pakete, die von einer Anwendung dieser Maschine kommen und das Ziel 192.168.50.41 besitzen.
 
Genau das meine ich :-)

Die Maschinen sprechen ja direkt über das Transportnetz miteinander.

Wenn ich es richtig verstehe, dann kann ich den Traffic in die Gegenrichtung also von 50.41 aus ebenfalls dicht machen, es soll ja nur in die eine Richtung via smtp was abgesetzt werden.
Der Logik nach wäre dann die Regel:

ptables -A INPUT -d 192.168.50.41 -j DROP
 
Wenn ich es richtig verstehe, dann kann ich den Traffic in die Gegenrichtung also von 50.41 aus ebenfalls dicht machen, es soll ja nur in die eine Richtung via smtp was abgesetzt werden.
Ja kann man

Der Logik nach wäre dann die Regel:

ptables -A INPUT -d 192.168.50.41 -j DROP
Nein. Zum einen müsste die Regel
Code:
iptables -A INPUT -s 192.168.50.41 -j DROP
heißen. Zum anderen würdest du damit aber auch den Rückkanal deiner gewollten TCP Verbindung abwürgen.

Daher besser:
Code:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.50.41 -j DROP
die erste Regel ist dazu da, Pakete einer bereits bestehenden Verbindung durchzulassen.
 
Ah okay... also die erste Regel nutzen, damit dann Pakete rausdürfen und mit der zweiten lediglich einen Rückkanal auflassen.

Wenn ich Daten via SMTP absetze.. brauchts dann überhaupt den Rückkanal?
 
Wenn ich Daten via SMTP absetze.. brauchts dann überhaupt den Rückkanal?
TCP Verbindungen sind von Natur aus Bidirektional. D.h wenn du was über TCP Versendest gibt es immer Pakete zurück die den Empfang bestätigen.

Rückkanal ist in dem Fall etwas unglücklich ausgedrückt. TCP Verbindungen lassen sich mit einem altmodischen analog Telefonanruf vergleichen. Du rufst jemanden an, es existiert aber eine Verbindung in beide Richtungen.

Wenn du jetzt bsp der INPUT Chain (die grob gesagt ALLE Pakete, die an dich gerichtet sind filtert) sagst die soll alles verwerfen, dann würdest du bei einem Telefonanruf bsp. dein gegenüber nicht mehr hören. Und weiter gedacht bei einer TCP Verbindung würde diese irgendwann einen Timeout bekommen und abbrechen, da keine Bestätigungspakete mehr bei dir ankommen und der Webserver denkt die Verbindung ist unterbrochen.
 
Nicht vergessen, bei euren bisherigen Regeln die Mails vom Webserver an den Mailserver wirklich an 50.41 zu adressieren. Werden sie an 111.41 adressiert, müssen die Regeln anders aussehen, selbst wenn das Routing über das Transportnetz "unten" erfolgt.
 
Danke für die Hinweise, ich werde morgen mal ein wenig basteln!!

@mensch183 :

Bis dato lief das Routing "oben" rum, allerdings über die Regeln der Firewall. Somit kann ich hier alles dicht machen und alles auf das .50.x Netz umstellen.
 
Zurück
Oben