
Neidentifikovatelná chyba při připojování prostřednictvím FTP clienta v Linuxu
Na Linuxové distribuci Puppy se pokouším připojit ke svému PC s Win SBS 2003 prostřednictvím FTP clienta. Sice mi to žádnou chybu nenahlásí a k připojení pravděpodobně dojde, ale po chvíli se to odpojí, viz níže uvedený LOG_1. Po celou dobu quasipřipojení mi to dává hlášku: „Receiving file names...“
Pokud se však stejným klientem připojuji buď k veřejně přístupným serverům coby Anonymous anebo i k vlastnímu heslem zabezpečenému, co mám u poskytovatele, je vše v pořádku.
Ze stejného počítače s Win XP se připojuji bez problému.
Jinak z Linuxu jsem zkoušel se připojovat více typy FTP klientů, i známým konzolovým ncftp, ale dopadlo to stejně, resp. stejně špatně.
Na FTP serveru mi to do logu zaznamená výsledky, jež jsou rovněž uvedeny níže (viz LOG_2)
LOG_1
Looking up 154.193.201.198
Trying 154.193.201.198:21
Connected to 154.193.201.198:21
220 Microsoft FTP Service
USER Paullus
331 Password required for Paullus.
PASS xxxx
230 User Paullus logged in.
SYST
215 Windows_NT
TYPE I
200 Type set to I.
PWD
257 "/" is current directory.
Loading directory listing / from server (LC_TIME=cs_CZ)
PASV
Connection to 154.193.201.198 timed out
Disconnecting from site 154.193.201.198
LOG_2
#Software: Microsoft Internet Information Services 6.0
#Version: 1.0
#Date: 2008-01-15 23:47:55
#Fields: time c-ip cs-method cs-uri-stem sc-status sc-win32-status
23:47:55 154.193.201.198 [27]USER Paullus 331 0
23:47:55 154.193.201.198 [27]PASS - 230 0
23:53:35 154.193.201.198 [28]USER Paullus 331 0
23:53:35 154.193.201.198 [28]PASS - 230 0
23:59:09 154.193.201.198 [29]USER Paullus 331 0
23:59:09 154.193.201.198 [29]PASS - 230 0
Takže se vracím k mému problému. Sehnal jsem si FTP clienta Mozillu, který dává podrobné reference o spojení a on mi podal informaci, kterou dokumentuji v níže uvedeném logu.
Jinak pro pořádek připomínám, že spojení provádím v OS Linux v pasivním módu, zatímco aktivní mi vyhazuje chybu. Cílem připojení je server s Win SBS 2003, se kterým jinak mohu normálně komunikovat přes Terminal Services i SQL server.
Záhadou však zůstává, proč na počítači, který se mi k tomu serveru přes FTP v Linuxu nepřipojí, se mohu ve Windows přes FTP připojovat v módu aktivním i pasivním.
Takže ten log:
Stav: Odpojen od serveru
Trace: CFtpControlSocket::ResetOperation(6 6)
Trace: CControlSocket::ResetOperation(66)
Trace: ControlSocket.cpp(979): CRealControlSocket::ContinueConnect(0xbfbce60c) m_pEngine=0x894aee8 caller=0x8b0eda8
Stav: Připojuji se k XXX.XXX.XXX.XXX:21...
Stav: Spojení navázáno, čekám na uvítací zprávu...
Trace: CFtpControlSocket::OnReceive()
Od pověď: 220 Microsoft FTP Service
Trace: CFtpControlSocket::SendNextCommand( )
Příkaz: USER Paullus
Trace: CFtpControlSocket::OnReceive()
Odpo věď: 331 Password required for Paullus.
Trace: CFtpControlSocket::SendNextCommand ()
Příkaz: PASS ***********
Trace: CFtpControlSocket::OnReceive()
Odpověď: 230 User Paullus logged in.
Stav: Připojen
Trace: CFtpControlSocket::Reset Operation(0)
Trace: CControlSocket::ResetOperation( 0)
Stav: Přijímám výpis složky...
Trace: CFtpControlSocket::SendNextComman d()
Trace: CFtpControlSocket::ChangeDirSend()
Příka z: PWD
Trace: CFtpControlSocket::OnReceive()
Odpově ď: 257 "/" is current directory.
Trace: CFtpControlSocket::ResetOperatio n(0)
Trace: CControlSocket::ResetOperation(0)
Trace : CFtpControlSocket::ParseSubcommandResult(0)
Trace : CFtpControlSocket::ListSubcommandResult()
Trace: CFtpControlSocket::SendNextCommand()
Trace: CFtpCon trolSocket::TransferSend()
Příkaz: TYPE I
Trace: CFtpControlSocket::OnReceive()
Odpověď: 2 00 Type set to I.
Trace: CFtpControlSocket::TransferParseResponse ()
Trace: CFtpControlSocket::SendNextCommand()
Trac e: CFtpControlSocket::TransferSend()
Příkaz: PASV
Na tohle místě se to zadřípne a Mozilla se mi už asi půl hodiny drze směje do očí...
no podle mě:
1. Windowsoví klienti si udělají díru ve svém firewallu a jedou "aktiv"
2. Linux natvrdo jede v pasivu a protože dostává nesmyslnou hlášku o portu (viz. PORT 192,168,15,11,210,139), nemůže se spojit. To znamená, že tvůj NATující router buď nepodporuje, nebo nemá zapnutu podporu pro FTP. Zkus se tam kouknout, jestli v něm nenajdeš volbu pro enablování FTP.
3. Linux v aktivním režimu nejede, protože mu iptables lokálně blokují naslouchací port
4. (pravděpodobně) nemáš forwardovány pasivní porty (rozsah pasivních portů nakonfiguruješ podle tohoto kábéčka: support.microsoft.com )
TW, díky moc, zítra to s někým kvalifikovanějším zkusím. Pak dám vědět, jak jsem dopadl.
Tak jsem zkusil se připojit ke shora uvedenému FTP serveru lokálně a funguje to naprosto bez problémů. Když se však zkusím připojit se stejným (pasivním) nastavením dálkově, po vyhození tohoto logu se celý proces zastaví v následující poloze:
Stav: Zjišťuji IP adresu xxx.xxx.xxx.xxx
Trace: ControlSocket.cpp(979): CRealControlSocket::ContinueConnect(0x8ab9170) m_pEngine=0x895be00 caller=0x8aedbb8
Stav: Připojuji se k xxx.xxx.xxx.xxx:21...
Stav: Spojení navázáno, čekám na uvítací zprávu...
Trace: CFtpControlSocket::OnReceive()
Od pověď: 220 Microsoft FTP Service
Trace: CFtpControlSocket::SendNextCommand( )
Příkaz: USER UserX
Trace: CFtpControlSocket::OnReceive()
Odpově ď: 331 Password required for UserX.
Trace: CFtpControlSocket::SendNextCommand()
Příkaz: PASS ***********
Trace: CFtpControlSocket::OnReceive()
Odpověď: 230 User UserX logged in.
Trace: CFtpControlSocket::SendNextCommand()
Př íkaz: SYST
Trace: CFtpControlSocket::OnReceive()
O d pověď: 215 Windows_NT
Trace: CFtpControlSocket::SendNextComma nd()
Příkaz: FEAT
Trace: CFtpControlSocket::OnRece i ve()
Odpověď: 211-FEAT
Trace: CFtpControlSocket::O n Receive()
Odpověď: SIZE
Odpověď: MDTM
Odpověď: 211 END
Stav: Připojen
Trace: CFtpControlSocket::Reset Operation(0)
Trace: CControlSocket::ResetOperation ( 0)
Stav: Přijímám výpis složky...
Trace: CFtpControlSocket::SendNextComman d()
Trace: CFtpControlSocket::ChangeDirSend()
Přík a z: PWD
Trace: CFtpControlSocket::OnReceive()
Odpov ě ď: 257 "/" is current directory.
Trace: CFtpControlSocket::ResetOperatio n(0)
Trace: CControlSocket::ResetOperation(0)
Trac e : CFtpControlSocket::ParseSubcommandResult(0)
Trac e : CFtpControlSocket::ListSubcommandResult()
Trace: CFtpControlSocket::SendNextCommand()
Trace: CFtpCo n trolSocket::TransferSend()
Příkaz: TYPE I
Trace: CFtpControlSocket::OnReceive()
Odpověď: 2 00 Type set to I.
Trace: CFtpControlSocket::TransferParseResponse ()
Trace: CFtpControlSocket::SendNextCommand()
Tra c e: CFtpControlSocket::TransferSend()
Příkaz: PASV
Pokud se podívám přes TS na FTP server, ten mi hlásí, že jsem řádně přihlášen, avšak po nějaké době v rámci refreshe se to spojení ztratí.
Protože mi to ale lokálně chodí, tak bych raději s těmi porty, jak radí TW, příliš nelaboroval, abych si server "neodzabezpečil".
//EDIT: Asi po 10 min. mi to Filezilla sama odpojila a v logu mi napsala:
Trace: CRealControlSocket::OnClose()
Chyba: Odpojen od serveru
Trace: CFtpControlSocket::ResetOperation(6 6)
Trace: CControlSocket::ResetOperation(66)
Trace: CFtpControlSocket::ResetOperation(66)
Trace: CCont rolSocket::ResetOperation(66)
Chyba: Nemohu získat výpis složky
Obávám se, že jsou pouze tato 2 řešení:
1. pro Pasivní připojení: forwardovat porty TCP (např. 6000-6100) na tvůj Win server a zároveň na tyto porty omezit FTP server IIS (viz link). Předpoklad je samozřejmě ten, že máš tzv. chytrý router, který dokáže transformovat PORT příkazy serveru. Případně můžeš použít jiný FTP server, kterému je možno nastavit v konfiguraci jinou IP adresu pro PORT příkaz
2. pro Aktivní připojení: zkontrolovat, zda máš v puppy funkční oba ftp iptables helper moduly (tj. buď zakompilované nebo zavedené pomocí insmod - v tvém případě je to ftp_conntrack). Pokud ne, či pokud to nefunguje, bude asi potřeba otevřít na Puppy v iptables, tabulka INPUT porty 1024-65535 (případně méně, ale nastavit v klientovi dané porty jako porty pro PORT direktivu). Z hlediska bezpečnosti pak asi bude vhodné povolit to jen pro (vnější) IP adresu tvého serveru/routeru, i když toto řešení se mi vůbec nelíbí.
TW díky, ale Ty trpíš syndromem vědeckého pracovníka, který apriori předpokládá, že mu všichni rozumějí (z těchto důvodu kvantoví fyzici na chodbách zastavují uklizečky a vysvětlují jim teorii superstrun).
Já si naopak připadám jako cirkusový medvěd, který po letech výcviku zvládl objet šapitó na bicyklu a teď se po něm chce, aby si vycentroval zadní kolo a udělal tuning na přesmykovači Shimano...
ok, zkusíme to jinak - co ti dělá router v síti kde máš ten server? Pokud by to byl nějaký rozumný HW určitě to tam půjde zprovoznit.