iptables - Problem mit Weiterleitung

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
ckoepp
Beiträge: 1409
Registriert: 11.06.2005 20:11:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nähe Heidelberg

iptables - Problem mit Weiterleitung

Beitrag von ckoepp » 23.06.2006 21:38:35

Hallo zusammen,

habe ein Problem mit den iptables. Die Weiterleitung an und für sich ist kein Problem. Aber die Weiche vorher...

Ich will folgendes erreichen:
es gibt eine Liste von IP's (nicht im gleichen Netz sondern wahllos verteilt), die Zugriff auf ssh über den Standardport brauchen.

sshd selbst läuft NICHT auf dem Standardport 22 sondern auf sagen wir 99.

Jetzt sollen aber nur die IP's zugriff auf sshd haben wenn sie sich auf port 22 verbinden. Alle anderen sollen über port 99 zugreifen müssen.

Die IP des Servers auf dem sshd läuft ist 62.62.62.1

Die Idee in der Praxis:

Code: Alles auswählen

    # allow sshd from localhost, one.de and two.de
    /sbin/iptables -A INPUT -i eth0 -s 127.0.0.1 -p tcp --dport 22 -j ACCEPT
    /sbin/iptables -A INPUT -i eth0 -s 62.62.62.1 -p tcp --dport 22 -j ACCEPT
    /sbin/iptables -A INPUT -i eth0 -s 62.62.62.2 -p tcp --dport 22 -j ACCEPT

    # deny sshd from all
    /sbin/iptables -A INPUT -p tcp --dport 22 -j REJECT

    # route port 22 to port 30
    /sbin/iptables -A POSTROUTING -t nat -p tcp --dport 22 -j DNAT --to 62.62.62.1:99
Wo genau liegt mein Fehler? Komme nicht dahinter :-(
"Es gibt kein Problem, das man nicht mit einem doppelten Scotch lösen könnte!"
Ernest Hemingway

Benutzeravatar
herrchen
Beiträge: 3257
Registriert: 15.08.2005 20:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Re: iptables - Problem mit Weiterleitung

Beitrag von herrchen » 23.06.2006 21:44:14

ckoepp hat geschrieben: Wo genau liegt mein Fehler?
in der reihenfolge.
wenn du erst alle pakete auf port 22 verwirfst, sind sie weg. du kann dann nichts mehr weiterleiten.

herrchen

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 23.06.2006 21:52:37

DNAT ist nur in der PREROUTING und OUTPUT Kette erlaubt

Gruß
gms

Benutzeravatar
ckoepp
Beiträge: 1409
Registriert: 11.06.2005 20:11:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nähe Heidelberg

Beitrag von ckoepp » 24.06.2006 13:39:50

Habs etwas überarbeitet, aber es geht noch nich wirklich so wie ich es haben will :-(

Code: Alles auswählen

    # allow sshd from localhost, kmcs.de and ckoepp.de
    /sbin/iptables -A INPUT -i eth0 -s 127.0.0.1 -p tcp --dport 22 -j ACCEPT
    /sbin/iptables -A INPUT -i eth0 -s 62.112.140.173 -p tcp --dport 22 -j ACCEPT
    /sbin/iptables -A INPUT -i eth0 -s 62.112.156.185 -p tcp --dport 22 -j ACCEPT

    # route port 22 to port 30
    /sbin/iptables -A PREROUTING -t nat -p tcp --dport 22 -j DNAT --to-destination 62.112.140.173:30

    # deny sshd from all
    /sbin/iptables -A INPUT -p tcp --dport 22 -j REJECT
"Es gibt kein Problem, das man nicht mit einem doppelten Scotch lösen könnte!"
Ernest Hemingway

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 24.06.2006 19:25:46

Das DNAT in der PREROUTING Tabelle ist schon besser, allerdings nützen dir dann die ACCEPT's auf Port 22 überhaupt nichts mehr

Code: Alles auswählen

   /sbin/iptables -A INPUT -i eth0 -s 127.0.0.1 -p tcp --dport 22 -j ACCEPT 
    /sbin/iptables -A INPUT -i eth0 -s 62.112.140.173 -p tcp --dport 22 -j ACCEPT 
    /sbin/iptables -A INPUT -i eth0 -s 62.112.156.185 -p tcp --dport 22 -j ACCEPT
Diese solltest du daher auf Port 30 (oder 99) umändern.
Eine weitere Frage die sich stellt: Warum legst du den SSH Port überhaupt auf 30 (oder 99) um ? Wenn du ihn "verstecken" möchtest, macht es wenig Sinn alle Anfragen auf Port 22 auf den neuen Port umzuleiten :wink:

Gruß
gms

Benutzeravatar
ckoepp
Beiträge: 1409
Registriert: 11.06.2005 20:11:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nähe Heidelberg

Beitrag von ckoepp » 25.06.2006 17:11:34

Das Problem ist das ich nur diese drei IP's weiterleiten möchte.

Alle Verbindungen mit einer anderen IP als Absender sollen von dieser Regel nicht betroffen sein.

Hintergrund ist das Backuptool rdiff, angeblich ist es damit nicht möglich eine Portangabe zu machen. Er connected immer auf Port 22 und da ich aus verständlichen Gründen den Port 22 nicht für sshd nutze (ein Blick in die log-files reicht - seit der Portänderung hatte ich keinen einzigen Connect-Versuch mehr von den Kiddies) habe ich damit ein Problem... :cry:

Eine Idee wie ich erreichen kann, dass diese IP's von 22 auf 30 (oder 99 oder was auch immer *gg*) weitergeleitet werden können?
Bin kein Profi in iptables, aber mein Ansatz dürfte doch richtig sein oder?
"Es gibt kein Problem, das man nicht mit einem doppelten Scotch lösen könnte!"
Ernest Hemingway

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 25.06.2006 18:13:07

ckoepp hat geschrieben: und da ich aus verständlichen Gründen den Port 22 nicht für sshd nutze (ein Blick in die log-files reicht - seit der Portänderung hatte ich keinen einzigen Connect-Versuch mehr von den Kiddies)
das wollte ich wissen. Daher dürfen wir nicht alle Anfragen auf Port 22 zum Port 30 weiterleiten, sondern nur die von den gewünschten 3 IP's.

ungetestetes Codefragment:

Code: Alles auswählen

# route port 22 to port 30
 /sbin/iptables -A OUTPUT -t nat -p tcp -o lo -s 127.0.0.1 --dport 22 -j REDIRECT --to-ports 30
 /sbin/iptables -A PREROUTING -t nat -p tcp -i eth0 -s 62.112.140.173 --dport 22 -j REDIRECT --to-ports 30
 /sbin/iptables -A PREROUTING -t nat -p tcp -i eth0 -s 62.112.156.185 --dport 22 -j REDIRECT --to-ports 30

# allow sshd from localhost, kmcs.de and ckoepp.de 
# diese sind bereits auf Port 30 weitergeleitet, daher müssen wir auch Port 30 
# statt Port 22 durchlassen
 /sbin/iptables -A INPUT -i lo -s 127.0.0.1 -p tcp --dport 30 -j ACCEPT 
 /sbin/iptables -A INPUT -i eth0 -s 62.112.140.173 -p tcp --dport 30 -j ACCEPT 
 /sbin/iptables -A INPUT -i eth0 -s 62.112.156.185 -p tcp --dport 30 -j ACCEPT

# deny sshd from all 
 /sbin/iptables -A INPUT -p tcp --dport 22 -j REJECT
 /sbin/iptables -A INPUT -p tcp --dport 30 -j REJECT
Gruß
gms

Benutzeravatar
ckoepp
Beiträge: 1409
Registriert: 11.06.2005 20:11:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nähe Heidelberg

Beitrag von ckoepp » 25.06.2006 19:21:33

Ahhh danke :-)
"Es gibt kein Problem, das man nicht mit einem doppelten Scotch lösen könnte!"
Ernest Hemingway

Antworten