• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Zugriff auf ssh und ftp, Portforwarding gemacht?

Schwabi

Newbie
Hallo,
habe mir auf meinem Rechner pure-ftpd installiert, der funzt auch ganz gut im interenen Netz aber ich komm nicht auf meine public IP.
Habe nen Router dazwischen zu sitzen (Acer WLAN-G-RU2) und Portforwarding gemacht (20 und 21 für ftp und 22 für ssh).
Wie gesagt klappt der zugriff aus dem Internet auf ssh und ftp nicht.
Die Firewall in Suse hab ich mitlereile schon ausgeschaltet, das hat aber auch keinen erfolg gebracht. Nachdem ich den Router abgehängt hab lief alles problemlos. Soll heißen irgendwas haut mit dem Router nicht.
Muss man sonst noch was einstellen am Router um das ganze zum laufen zu kriegen.? Habe jetzt folgendes aktiviert:

Code:
Router hat IP von ISP und die 192.168.1.1 im internen Netz
-------------------
Virtual Servers |
-------------------
Public IP Adress    Public Port        Private Port        Protocol  Private IP

**************        21                     21                    TCP    192.168.1.2
**************        20                     20                    TCP   192.168.1.2
**************        22                     22                    TCP   192.168.1.2

---------
Filters |     //allow traffic to pass out and in of your network
--------- 
Direction          Private Port Range               Protocol

Both                      20-21                             TCP

zusätzlich Trigger Port Range von 20-22 eingerichtet.

--------------
DMZ-Host |
--------------
Public IP                                         Private IP

***********                                  192.168.1.2

Ich hab jetzt schon mal Acer ne Mail geschickt, da erhoffe ich mir aber nicht viel. Seltsam ist nur das das Portforwarding für mldonkey klappt, und zwar problemlos. Oder gibt es zwischen ftp und mldonkey Unterschiede ? Eigentlich läuft doch die Kommunikation aufs gleiche hinaus.?
 

Martin Breidenbach

Ultimate Guru
Das FTP Protokoll ist ziemlich umständlich und Firewall-feindlich.

Probiere mal beim FTP-Client zwischem aktiven und passivem FTP zu wechseln.
 
OP
S

Schwabi

Newbie
Das scheint leider nich viel zu bringen, obwohl ich ehrlich gestehen muss das ich nich so die Ahnung hab was der PassivMode macht.
Hab jetzt auf jedenfall meine public IP, in der *.conf (von pure-ftpd), bei PassiveIP eingetragen, die Ports dafür frei gegeben.
Das bringt aber nicht wirklich was. :cry:
Den Passiv Mode kann ich aber doch bei ssh nicht nutzen. Seltsamer weise hab ich aber mit diesem Dienst das gleiche Problem.
Der ist mir aber nicht so wichtig wie der FTP Server, den hat ich nur mal zum testen genutzt. Da der ssh aber auch nich funzt wundert mich das ganze schon. :?:
 

gaw

Hacker
Zwischen ftp und anderen tcp-basierten Diensten gibt es erhebliche Unterschiede. Das file transfer protocol unterscheidet zwischen Kontrollverbindungen auf Port 21 und Datenverbindungen die auf anderen Ports laufen. Und bei den Datenverbindungen dreht sich die Geschichte auch noch um, um das ganze zu einem Alptraum für jede Firewall-Developer werden zu lassen.
Um das wirklich zu verstehen betrachte einmal das http.
Code:
Client:Quellport>1023 z.B 21000, Zielport 80, hallo neue Anfrage ---> Server

Server: Quellport 80, Zielport 21000, habe verstanden, bitte bestätigen---->Client

Client:Quellport: 21000, Zielport: 80, alles ok, Verbindung steht---> Server

Nun tauschen beide Seiten Daten aus.
Die erste Anfrage zu einer Verbindung geht immer vom Client aus in unseren Fall dem Webbrowser. Eine Firewall mit stateful inspection kann das kontrollieren.

Bei ftp ist alles wesentlich komplexer. Zumächst verläuft alles wie bei http nur über port 21.
Code:
Client:Quellport>1023 z.B 33123, Zielport 21 hallo, neue Anfrage--> Server
Server:Quellport 21 Zielport 33132, habe verstanden, bitte bestätigen>
Client:Quellport>33123, Zielport 21 alles ok Kontrollverbindung steht--> Server
Schalte ich das frei kann ich mich auf einen ftp Server einloggen, nur beim ersten ls oder get war's das dann auch. Das Problem besteht in der Datenverbindung.
Code:
Client:Quellport 33123, Zielport 21, [ftp aktiver Modus lausche auf Port 44500 auf Daten]---->Server
Client wartet.
Server:Quellport 20, Zielport 44500, hallo neue Verbindung für Daten ----->Client.

Client:Quellport 44500, Zielport 20, alles ok, Verbindung bestätigen---->Server
Server:Quellport 20, Zielport 44500, bestätigt, Verbindung für Datentransport steht ----->Client.
Datentransport
Der Verbindungsaufbau erfolgt im Gegensatz zu den meisten anderen bekannten Protokollen wie http, https, pop, smtp oder imap also umgekehrt und wird vom Server eingeleitet und geht auf einen niedrigen Zielport des Clients, aus der Sicht einer Firewall ein Alptraum. Ohne stateful inspection muss ein reiner Paketfilter alle Ports über 1023 für ankommende Datenverbindungen öffnen. Viele Firewalls lassen zudem neue Verbindungen mit einem Ziel > 1023 und einem Quellport 20 erst gar nicht zu.

Daher gibt es den passiven Modus der den aktiven langsam verdrängt. Der passive Modus beginnt zunächst wie der aktive, ändert dann aber das Verhalten:
Code:
Client:Quellport: 33123, Zielport 21, hallo neue Anfrage ----->Server
Server:Quellport 21 Zielport 33132, alles ok, bitte bestätigen----->Client
Client:Quellport: 33123, Zielport 21, alles ok Kontrollverbindung steht ----->Server
Client:Quellport: 33123 Zielport 21 ftp[get(will Datei) passiver Modus]------>Server
Server wartet
Client:Quellport 44324, Zielport: 22123, hallo neue Datenverbindung------------>Server
Server:Quellport 22123, Zielport: 44324, alles ok, bitte bestätigen---------->Client
Client:Quellport 44324, Zielport: 22123, alles ok, Verbindung für Datentransport steht------------>Server
Datentransport
Hier erfolgt der Datentransport komplett über zwei hohe Ports, die beide über 1023 liegen. Der Unterschied besteht nun darin, dass der Client die Ports kontrolliert. Eine gute Firewall sich das merken kann. Mit iptables wid das über das ftp-contracking Modul realisiert. Auch hier werden alle Ports > 1023 für ankommende Verbindungen geöffnet, aber sie müssen zu bestehenden Verbindungen gehören. Da der Client die Verbindungen öffnet kann sie das ftp-contracking Modul zulassen weil sie sich die Kontrollverbindung gemerkt hat und die Datenverbindung zuordnen kann. Daher bleiben die hohen Ports für Neuanfragen geschlossen. Ganz schön kompliziert, nicht? Manche Firewall macht es sich einfach und lässt ftp gar nicht erst zu.
Es bleibt auch beim passiven Modus ein gewisses Unbehagen allen Paketen auf allen Ports das Hereinkommen zu erlauben. Ich realisiere daher ftp-Transport (generell im passiven Modus) temporär. Nach Gebrauch werden die Ports wieder dichtgemacht. Das lässt sich mit iptables schön automatisieren. Ein Klick im webmin und schon ist ftp offen, ein weiterer Klick und es ist wieder dicht.



mfG
gaw
 
OP
S

Schwabi

Newbie
Nun ja, ich glaub das Thema ftp lass ich erst mal. Solange wie nicht mal ssh läuft brauch ich das gar nich zu probieren. Habe nun SSH über zwei Router getestet. Aber nix :evil:
Ports freigeschaltet, nix. Was mach ich falsch?? Es gibt nicht zufällig ne Rechnerseitige Einstellung die ich noch machen muss.
Aber wenn ich
Code:
telnet localhost 22
mache klappt alles. Nur bei
Code:
telnet public IP 22
kommt: connection refused.
Habe das auf nem Acer WLAN 11g und auf nem Netgear RP614 probiert. Ich schein kein Glück mit Routern zu haben.

Hat jemand zufällig noch ne Idee? Ich bin am verzweifeln :cry:

Grüße Schwabi
 

blobber

Newbie
Hallo zusammen

Bei mir herrscht dasselbe Problem. Mit Pure-FTPd komme ich von jedem PC im internen Netz auf den FTP-Server, jedoch nicht von aussen rein.

komischerweise funktioniert es mit vsftpd von der SuSE 9.1-Distribution, jedoch unterstützt vsftpd keine virtuellen User, daher kommt dies für mich nicht in Frage

Gruss Pascal
 

gaw

Hacker
So sollte es auch sein. Um von aussen auf ein Netz zu gelangen dass private IP-Nummern verwendet muss man aktiv bestimmte Technologien verwenden. Zum Beispiel Destination-NAT, VPN oder andere Tunnel. Von aussen sieht man nur den Router der vom Provider eine öffentliche IP-Nummer hat. Das Protokoll ftp ist ansich ein sehr problematisches Protokoll dass mit zwei unterschiedlichen Verbindungen in verschiedenen Varianten arbeitet (siehe meinen Beitrag). Noch problematischer wird es, wenn von außen auf den ftp-Server zugegriffen werden soll. Die SuSEFirewall arbeitet traditionell mit vfstp zusammen, weil siche dieser ftp-server sicherer handhaben lässt. Wenn du mit iptables deine Firewall selbst schreiben willst lässt sich das auch mit anderen ftp-servern realisieren.

Ich rate aber davon ab, weil viele ftp-server alles andere als sicher sind. Stattdessen schlage ich vor ssh-Zugang über RSA-Authentifizierung mit assymetrischen Schlüsseln zu realisieren. Ein neuer Nutzer erstellt mit der ssh (putty in Windows) ein Schlüsselpaar und gibt dem Verwalter des Fileservers den public key den dieser in seinen Schlüssel-Ring einklinkt. Nur der Besitzer des dazu passenden privaten Schlüssel kann sich dann auf dem Fileserver einloggen.

Damit lässt sich der Zugang sehr genau regeln. Über Unix-Dateirechte und erzwungene ssh Befehle lassen sich accounts mit unterschiedlichen Rechten in nahezu beliebiger Komplexität einrichten. Mit scp und SFTP stehen zudem zwei Frontends zur Verfügung mit dem sich Down- und Upload so wie auf einer Shell oder wie in einem FTP-Client abwickeln.

In der Firewall lassen sich nun ssh-Anfragen über D-NAT oder ssh Portforwarding auf den Fileserver umlenken. Das ganze ist wesentlich sicherer als ftp und absolut firewall-tauglich.


mfG
gaw
 
OP
S

Schwabi

Newbie
Naja, danke erst mal für die zahlreiche Hilfe. Das Problem liegt aber definitiv am Router. Habe mit Acer telefoniert und die meinten das die Firewall rum spinnt. Aber egal, hab das ganze jetzt ohne Router zu laufen.

Nur bei
Code:
telnet public IP 22
kommt: connection refused.


Von wo aus probierst Du das ? Aus dem internen Netz heraus klappt sowas üblicherweise nicht.
Das funzt schon, habs doch probiert. Klappt jetzt ohne Router vom eigenen Rechner auf die eigene IP und von ausserhalb.

komischerweise funktioniert es mit vsftpd von der SuSE 9.1-Distribution, jedoch unterstützt vsftpd keine virtuellen User, daher kommt dies für mich nicht in Frage
Mit vsftpd kannst du genauso gut virtuelle User anlegen. Du kannst auch mit eigener Datenbank arbeiten, die musst du dir aber erstellen. Nur mal die Manuals durchlesen. :wink:

Aber nochmal was anderes. Gibt es eine Möglichkeit das der vsftpd auf Anfragen von Port 80 reagiert.???
Habe nämlich jetzt folgendes Problem:
At school ham wir nen Proxy zu laufen und der scheint die ftp Anfragen auf Port 80 zu schicken.
Benutze dort unter Win SmartFTP und unter den Einstellungen "Tunnle den Proxy" (kein Plan wie das jetzt richtig heißt). Auf anonymen Seiten wie ftp.gwdg.de funzt alles ohne Probleme. Aber nicht auf meinen eigenen Server. Wie gesagt ich nehme stark an das der Proxy auf Port 80 sendet. Nun nochmal die Frage: gibt es die Möglichkeit das mein vsftpd auf Port 80 reagiert.? Oder kann ich irgendwo in irgendwelchen logs mitschneiden auf welchem Ports was passiert.?
 

gaw

Hacker
So etwas lässt sich von außen über Portforwarding (ssh, iptables) einrichten. Das Problem ist nur, dass das FTP mehr als eine Verbindung benötigt, was das ganze kompliziert macht.

Eine anspruchsvollere Möglichkeit wäre ein Perlscript zu schreiben, das im apache als wrapper läuft, den vsftp-Server kontaktiert die ausgewählten Dateien abholt und den Datentransport über http zum Client einleitet. Im Grunde also ein Tunnel via Proxy wenn man so will. Es gibt ein entsprechendes Projekt mit php auf sourceforge, das ich aber nicht weiter kenne:
http://sourceforge.net/projects/phpwebftp/

mfG
gaw
 
OP
S

Schwabi

Newbie
Oh oh oh. Das is mir glaube noch etwas zu heftig :wink:
So lange bin ich noch nich bei Linux, als das ich ein solches Projekt verstehe.
Ich glaube ich werde mal nen anderen FTP Server ausprobieren. Ich hoffe mal das es dort möglich ist den Port auf dem der Server lauscht einzustellen.

Trotzdem danke für eure Bemühungen.
Grüße Schwabi
 
Oben