Troubleshooting a remote FTP connection toward an MS FTP server via a Mac OSX client

About two weeks ago, I need the necessity to change the IP address of my housed server toward a new C class range. The operation – that apart the required DNS changes – doesn’t require anything more on the server that correctly setup the Firewall’s rules and the IIS console, let me scratch my head on the wall for about half day, trying to understand where was the matter. 
 In fact, after this small change, I wasn’t able to write any more files on my remote server.

The strange this was that I was perfectly able to connect to remote FTP, grant authentication, and get the list of files present.

The necessity to get back a working system is obvious, so I get armed with a lot of patience and I’d started to investigate why I was getting always transfer incomplete message.

The first thing to which I though has been the Windows Firewall service of Windows Server 2003. In a first moment I noticed that the IP address change performed wasn’t completely take in consideration. In fact I was able to connect also with the checkbox on FTP Server advanced rule disabled. Fixed that, with a service restart, I’ve continued the investigation.

I’ve gone through the server’s log files without success, but there weren’t any DENY message, just AUTH and CD. How was this possible it’s again a mystery for me!

Next test I did, it has been to completely disable the firewall service. Unfortunately it was the cause, since I was then able to connect and remote write files. Well, at least I then focused myself where spending my time.

I’ve checked then my entire Firewall configuration, but all seem fine. I then tried to connect to remote server using a Windows computer. Was I able to connect to it? Yes. So there were some problems on my Mac FTP client – Cyberduck – and the remote Microsoft FTP. But what? Cyberduck in its session log didn’t show me any error message. I then tried using the Terminal and the manual command to see if I was able to get additional error message and finally I got the problem:

ftp> put bookmarks.html
local: bookmarks.html remote: bookmarks.html
500 'EPSV': command not understood
421 Service not available, remote server has closed connection.

Problem found: I wasn’t able to connect in passive mode. The error code 500 and EPSV stands for the command used to change the client mode connection from active to passive (that’s what normally happen when you see connection mode set up to auto in your client configuration).
 The passive connection had been invented to solve all the problems bore with the use of an FTP service behind a Firewall service. If you are looking for further clarification about active and passive, please have a look at this document.

Changing the settings of Cyberduck to active, I was finally able to connect and write files on the remote server.

At this stage I need only to apply again the settings to let my FTP service work in passive mode. How? You can follow the Microsoft KB to learn how to set up the port range on which you want your server work, but obviously THIS ISN’T ALL YOU NEED, because on the document nobody say that you need also to force the firewall saying to accept incoming connection from different ports rather than the standard 21.

How can I do that? Here it’s the solution step-by-step:

First: open the windows Firewall management window, then go to the advanced properties, select the NIC adapter where you IP have been configured, then choose properties and disable FTP Server. This make a non-sense, but trust me, it works!

Close this additional dialog pressing ok, then switch to the Exception tab and choose add service. Browse your computer to C:\Windows\system32\intesrv and select the file InetInfo.exe that stands for IIS Admin Service. Close all the windows pressing ok then restart your pc.

At this point you are able to connect to your Microsoft FTP server using a passive connection.

Technorati tags: ftp, connection, debug

Debug di connessione remota ad un MS FTP Server da Mac OSX

Un paio di sabati fa ho avuto la necessità di cambiare l’indirizzo IP del mio housed server verso una classe di indirizzi completamente differente. L’operazione che di per se – a parte le operazioni di cambio DNS richieste per il caso specifico – non dovrebbe comportare alcunché, mi ha fatto arrovellare il cervello per una buona ora cercando di fare del debug e capire perchè – improvvisamente – dopo questo cambio non avevo più la possibilità di scrivere file sul server remoto, ma solo di leggerli.

La cosa buffa, infatti, era proprio questa, che nonostante riuscissi a collegarmi al server FTP, nonostante il mio nome utente e password fossero corretti, nonostante mi venisse restituita la lista dei file presenti sul server, non c’era verso di scrivere niente. Ricevevo sempre un messaggio di errore di transfer incomplete senza però saperne la causa.

La necessità di riavere indietro un servizio funzionante non ve la sto neanche a raccontare, quindi mi sono armato di santa pazienza ed ho iniziato ad investigare.

La prima cosa a cui ho pensato è stata quella di verificare il servizio del firewall del mio Windows Server 2003. In un primo momento non gli era nemmeno piaciuto il cambio di indirizzo fatto, perché addirittura abilitando o disabilitando il servizio, avevo comunque la possibilità di ricevere una risposta dal server, cosa questa assolutamente anormale. Primo step, quindi, riavviare il servizio Windows Firewall (ICS). Subito dopo, le cose sono tornate apposto, quanto meno per l’aspetto servizio disabilitato – accesso negato. Però continuavo a non poter scrivere file.

A questo punto ho cercato tra le righe del log files; nulla, semplicemente tante righe che mostravano il processo di autenticazione, ma nulla in merito alla scrittura. La cosa era al quanto strana. Come è possibile che non vi sia nemmeno una riga che dica accesso negato, permessi non validi e roba simile?

Prova successiva, disabilitare – temporaneamente il firewall – e vedere se tutto funziona. Ahimè si, senza firewall ero in grado di scrivere senza problemi. Almeno avevo compreso su cosa dovevo concentrarmi.

Ripasso al setaccio tutte le impostazioni e non c’è nulla di anomalo. A questo punto tento per la strada della replicabilità, ovvero, riesco a connettermi tramite un altro windows? La risposta è si, quindi c’è qualcosa che non va nella sessione che si stabilisce tra il mio client FTP per Mac – CyberDuck – e il server FTP Microsoft remoto. Ma cosa? Cyberduck nella sua session log non mostra errori. Provo allora ad utilizzare il Terminal per vedere se ottengo delle informazioni in più, ed effettivamente ottengo questo:

ftp> put bookmarks.html
local: bookmarks.html remote: bookmarks.html
500 'EPSV': command not understood
421 Service not available, remote server has closed connection.

Problema trovato: non riesco più a collegarmi in modalità passiva, infatti tentando di nuovo una connessione passiva con un client windows (che di default, invece, si imposta su attiva) ottenevo il medesimo problema.

Il codice di errore evidenziato – 500 e EPSV – sono per il relativo comando che viene utilizzato dal client per modificare il tipo di connessione da Attiva – default – a passiva (Quando in sostanza vedete scritto tipo di connessione automatica, sappiate che questo è quello che succede).

Modalità quest’ultima implementata per una risoluzione di molte problematiche celate dietro l’uso congiunto del servizio firewall assieme a quello FTP. Per chiarimenti sulla connessione attiva e passiva, consiglio questo documento in inglese.

Infatti, modificando le impostazioni del client, forzandolo quindi ad una connessione attiva, ed effettivamente tutto funziona.

A questo punto configurare nuovamente il server FTP di Microsoft per la modalità passiva e tutto torna a funzionare. Come? Si può seguire questa KB della Microsoft per impostare il range di porte che si vogliono far utilizzare al servizio FTP, ma ovviamente il tutto NON BASTA, perchè sul documento non si fa minimo accenno al fatto che bisogna forzare la mano al firewall indicandogli che non deve più accettare connessioni sulla porta 21 come di default.

Come fare? Passo passo:

Si deve aprire la finestra di configurazione del Firewall, quindi andare sulle proprietà avanzate, selezionare le proprietà dell’adattatore di rete locale, entrare nelle proprietà e disabilitare il servizio di FTP Server. Sembra un controsenso lo sò, ma fidatevi!

A questo punto andate nella schermata delle eccezioni, scegliete aggiungi servizio, fate sfoglia e puntate il percorso su C:\Windows\system32\intesrv e selezionate il file InetInfo.exe che altro non è che l’IIS Admin Service.

Fatto questo riavviate la macchina e vedrete che sarete in grado di connettervi in modalità passiva al vostro server FTP Microsoft.

Alle volte sono cose che capitano, ma se non altro, tra le varie analisi, purtroppo ho trovato nei log alcuni tentativi di accesso non desiderato. Qualcuno che ha tentato di farmi del (in)sano home-defacing?

Technorati tags: , ,