PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tunnel-Ersatz mit iptables



SeeksTheMoon
15.11.03, 18:29
Helft mir mal bitte, ob folgender Gedanke klappen kann:

Hintergrund:
------------
Ein Bekannter von mir sitzt in einem LAN, das externe Zugriffe nur auf die Ports 443 und 80 gestattet.

Bei mir läuft auf einem Server ein apache und der belegt diese Ports. ssh ist für den Bekannten also nicht möglich, weil das ja auf dem Server auf 22 läuft.
Wir haben es mal über einen Tunnel versucht und das hat auch geklappt, aber das nimmt dem apachen einen Port weg. Wir wollen beides: ssh-Zugriff und dem apachen seinen Frieden (es sollen ja auch noch andere Leute auf den apachen zugreifen können)

Idee:
-----
Ich glaube, ich hab eine Möglichkeit gefunden, wie man ohne Tunneln auf ssh zugreifen kann (nämlich per iptables auf dem Server):

Der Bekannte startet bei sich seinen ssh-Client um auf meinen Server zu kommen, aber mit Zielport 80, wo eigentlich mein Apache läuft.
Seine TCP-Pakete kommen in diesem Fall von seinem Port 22 (richtig?).
Wenn ja, kann ich das doch bei mir umleiten:


iptables --table nat --append PREROUTING --protocol tcp --destination-port 80 --source-port 22 -jump DNAT --to localhost:22

Dieser Befehl leitet einkommende Pakete, die vom Senderport 22 kommen (also von seinem SSH-Client) und auf den lokalen 80er Port gehen (also den web-Server) auf den lokalen 22er um (also meinen sshd auf dem Server).

Würde das gehen?


Erweiterung:
------------
Das könnte man dann noch um seine IP- oder MAC-Adresse erweitern, oder mit Type of Service nur auf ssh-Anfragen beschränken, um es noch restriktiver zu machen.
Normale Anfragen auf Port 80 sollten nach wie vor klappen, z.B, per Webbrowser, aber alles von seinem ssh-Client sollte umgeleitet werden.


Stimmts?

geronet
15.11.03, 18:33
>Seine TCP-Pakete kommen in diesem Fall von seinem Port 22 (richtig?)

Nein, der Zielport ist normalerweise 22. Der Sourceport ist meist > 1024.

Grüsse, Stefan

SeeksTheMoon
15.11.03, 18:37
und ginge das mit Type of Service?
Ist sein ausgehender ssh-Port immer gleich?

geronet
15.11.03, 18:54
Ich würd's eher mit seiner IP-Adresse machen. Mit TOS würde es vielleicht auch gehen.

Temp
16.11.03, 11:49
coole Idee....

wenn ihr ne Erfoglsmeldung habt postet ihrs bitte????

Gruß Temp

N.D.
16.11.03, 13:12
Hi!

Wieso macht Ihr das eigentlich so umständlich :confused:
Du könntest doch einfach auch den Zugriff auf den 22er Port nur von seiner IP / MAC gestatten.
Dann würde man sich diese Umleitung doch sparen können, oder?

Schönen Tag noch!

Temp
16.11.03, 18:14
sonnst kommt man doch nicht aus dem firmennetzwerk raus.... zielport von dem muss port 80 sein.... denk ich jetzt mal ;)

Gruß Temp

Thomas
16.11.03, 18:59
Denke ich auch.

Da über Port 80 sowohl HTTP als auch SSH erreichbar sein soll (?) ist eine Filterung über die IP wohl auch nicht möglich.


Thomas.

eddi5
05.07.04, 12:05
gibt es zu dem problem eine lösung,wäre sehr dankbar habe nämlich das gleiche....
mfg eddi5

canis_lupus
06.07.04, 11:08
In der letzten c't gab es einen Artikel zum Portknocking. Ähnliches realisiert die Software SADoor.
Idee: Bevor man den Dienst nutzt "programmiert" man die Firewall durch eine Knocking-Sequenz um, z.B.

Ping mit einer bestimmten Paketlänge schaltet Forwarding ab (80->HTTP)
Ping mit einer normalen Paketlänge schaltet Forwarding ein (80->SSH)

cane
06.07.04, 13:42
Ping mit einer bestimmten Paketlänge schaltet Forwarding ab (80->HTTP)
Ping mit einer normalen Paketlänge schaltet Forwarding ein (80->SSH)

Dann wird die Freischaltung ja bei jedem Ping aktiv...

Nicht so toll...

cane

canis_lupus
06.07.04, 14:02
War als Beispiel gedacht. Wenn man das durchzieht, kann man sich ja die verrücktesten Kombinationen einfallen lassen.
Wenn ich mich recht erinnere, kann man mit SADoor nach allen IP/ICMP/TCP/UDP-Charakteristiken suchen.
Wen man das Script selbst schreibt (bsp. mit tcpdump) stehen einem ja alle Filtermöglichkeiten offen.
Man muss nur daran denken, das die Knockingsequenz relativ einfach zu erzeugen sein sollte und das die Pakete während des Transports verändert werden.

cane
06.07.04, 15:46
Wen man das Script selbst schreibt (bsp. mit tcpdump) stehen einem ja alle Filtermöglichkeiten offen.
Man muss nur daran denken, das die Knockingsequenz relativ einfach zu erzeugen sein sollte und das die Pakete während des Transports verändert werden.

1. Man braucht das Script nicht selbst schreiben sondern kann den Client anpassen.

2. Wieso einfach zu erzeugen - je komplexer desto besser...

3. Inwiefern werden Pakete verändert - gibt es router die Flags entfernen?

cane

canis_lupus
07.07.04, 09:19
cane

[QUOTE=cane]1. Man braucht das Script nicht selbst schreiben sondern kann den Client anpassen.


Welchen Client?

cane

2. Wieso einfach zu erzeugen - je komplexer desto besser...


Hier muss man abwägen. Je komplexer desto besser ist schon richtig. Aber welche Kenntnisse und Möglichkeiten hat der Bekannte im anderen LAN?

cane

3. Inwiefern werden Pakete verändert - gibt es router die Flags entfernen?


Was ist z.B. mit der TTL oder IP-Optionen bzw. einer eventuelle Fragmentierung?

cane
07.07.04, 10:32
Hier muss man abwägen. Je komplexer desto besser ist schon richtig. Aber welche Kenntnisse und Möglichkeiten hat der Bekannte im anderen LAN?
Du hast das Prinzip nicht verstanden - siehe nächster Punkt...


Welchen Client?

Schau Dir die Implementierungen im Downloadbereich von www.portknocking.org an. Es existieeren o.g. in Perl, C/C++, Java, Python und ein Bash Script... Es muß niemand "von Hand" Pakete bauen...


Was ist z.B. mit der TTL oder IP-Optionen bzw. einer eventuelle Fragmentierung?

Wer nach TTL filtert hat das Prinzip Routing nicht verstanden. Fragmentierung könnte Probleme geben aber es gibt ja genügend andere Flags...

mfg
cane

canis_lupus
07.07.04, 11:04
Das Prinzip ist schon klar. Nur muss der Bekannte im LAN in der Lage sein die Sequenz auszulösen. Wie weit geht das Wissen des Bekannten im LAN? Welche Software darf/kann er einsetzen? Wird das Netz überwacht, also kann das Knocking ein IDS alarmieren? Daher die Idee eine relative einfache Sequenz mit Bordmitteln zu erzeugen, z.B. einen Ping mit unterschiedlichen Paketlängen.

Ich bezog mich auch nicht ausschliesslich auf die Portknocking-Software. Es gibt auch andere Tools, die prinzipiell die gleiche Idee verfolgen. Anpassung das Quellcodes ist im Portknocking-Fall die eleganteste Lösung.

Eben. Man sollte schon die Prinzipien verstanden haben, um die geeigneten Eigenschaften der Protokolle herauszufinden, die man auch benutzen kann.

Matzetronic
08.07.04, 16:00
hi,

warum so schwer ?


hping2 -1 -c 1 -e 'Lass mich rein ! Ich bins' 192.168.1.4

tut es doch auch, oder ?
das ganze dann mit ner snort-rule verknüpft........ :)

gruß,
matze

cane
08.07.04, 17:05
Auch nett :)