Discussione:
Permettere connessioni FTP solo ad un indirizzo IP
(troppo vecchio per rispondere)
HamRadio
2010-11-22 19:05:38 UTC
Permalink
Salve,

ho un pc con Windows XP sp3 su cui gira il server ftp standard di IIS, ed
ho configurato il firewall di Windows per consentire l'arrivo delle
connessioni dall'esterno come segue:
Pannello di controllo -> Connessioni di rete -> Proprietà della mia LAN -
Avanzate -> Impostazioni -> Windows Firewall -> Avanzate ->
Impostazioni della mia LAN -> Servizi -> ho spuntato "Server FTP"
e tutto funziona egregiamente.

Il mio problema e' ora che vorrei permettere le connessioni FTP *solo* ad
un certo indirizzo IP, e per questo mi aspettavo che, nella scheda
suddetta, evidenziando "Server FTP" e andando su "Modifica" ci fosse un
"Cambia ambito" come in (quasi) tutte le altre impostazioni del firewall
di Windows. Invece non c'e'.

Qualcuno saprebbe indicarmi come fare?
Grazie a chi vorra' rispondere.
ObiWan
2010-11-23 08:10:46 UTC
Permalink
Post by HamRadio
Impostazioni della mia LAN -> Servizi -> ho spuntato "Server FTP"
e tutto funziona egregiamente.
Il mio problema e' ora che vorrei permettere le connessioni FTP *solo*
ad un certo indirizzo IP, e per questo mi aspettavo che, nella scheda
suddetta, evidenziando "Server FTP" e andando su "Modifica" ci fosse
un "Cambia ambito" come in (quasi) tutte le altre impostazioni del
firewall di Windows. Invece non c'e'.
Invece di usare la regola di default dovrai crearne una personalizzata
ossia dovrai togliere la spunta da "server FTP" e creare una regola
che permetta le connessioni in ingresso verso la 21/tcp soltanto per
le connessioni provenienti dall'indirizzo IP desiderato; in alternativa
potresti lasciare il firewall così come è ed aggiungere una regola di
filtraggio IPsec che limiti le connessioni al solo IP desiderato
HamRadio
2010-11-23 10:24:48 UTC
Permalink
Post by ObiWan
Invece di usare la regola di default dovrai crearne una personalizzata
ossia dovrai togliere la spunta da "server FTP" e creare una regola che
permetta le connessioni in ingresso verso la 21/tcp soltanto per le
connessioni provenienti dall'indirizzo IP desiderato;
Avevo gia' fatto questo tentativo inizialmente, aprendo le porte 20 e 21
in entrata, ma gia' senza specificare alcuna restrizione di indirizzo IP
i client tipo Filezilla/CuteFTP/ecc. e lo stesso IE avevano il problema
che si connettevano ma non visualizzavano il contenuto delle cartelle
("errore 425"), poi trovai su un sito web la soluzione indicata nel mio
primo post che almeno funzionava, pur senza permettermi un controllo
sugli IP...
Post by ObiWan
in alternativa
potresti lasciare il firewall così come è ed aggiungere una regola di
filtraggio IPsec che limiti le connessioni al solo IP desiderato
Come si "aggiunge una regola di filtraggio IPsec"?
(naturalmente non ti chiedo di spiegarmi tutto l'ambaradan, ma solo dove
eventualmente trovare la documentazione...)

Grazie 1000!
HamRadio
2010-11-23 11:02:04 UTC
Permalink
Post by HamRadio
Come si "aggiunge una regola di filtraggio IPsec"?
Mi rispondo da solo, ho trovato parecchia roba cercando con l'amico
Google, ora mi tocca studiare un po' :-)

http://www.slacksite.com/other/ftp.html
http://www.analogx.com/CONTENTS/articles/ipsec.htm
http://support.microsoft.com/kb/813878/it
http://technet.microsoft.com/it-it/library/dd536201.aspx
http://technet.microsoft.com/it-it/library/cc738367%28WS.10%29.aspx
ObiWan
2010-11-23 17:24:07 UTC
Permalink
Post by HamRadio
Post by ObiWan
Invece di usare la regola di default dovrai crearne una
personalizzata ossia dovrai togliere la spunta da "server FTP"
e creare una regola che permetta le connessioni in ingresso
verso la 21/tcp soltanto per le connessioni provenienti
dall'indirizzo IP desiderato;
Avevo gia' fatto questo tentativo inizialmente, aprendo le porte 20
e 21 in entrata, ma gia' senza specificare alcuna restrizione di
la 20 non serve :) è un errore classico, la 20 in *ingresso* NON
serve assolutamente
Post by HamRadio
indirizzo IP i client tipo Filezilla/CuteFTP/ecc. e lo stesso IE
avevano il problema che si connettevano ma non visualizzavano
il contenuto delle cartelle ("errore 425")
il problema, se è come penso è SOLO relativo al fatto che è
necessario che il firewall utilizzato (e l'eventuale NAT posto
di fronte al server FTP) "capiscano" il protocollo FTP e si
occupino di convertire gli indirizzi e di attivare in automatico
i necessari port-forward e le necessarie regole di apertura
delle porte
Post by HamRadio
, poi trovai su un sito web la soluzione indicata nel mio primo post
che almeno funzionava, pur senza permettermi un controllo sugli IP...
Beh, se ti basta evitare che qualcuno possa *loggarsi* sarebbe
sufficiente usare FileZilla server ed usando le opzioni dello stesso
fare in modo che vengano accettate unicamente le connessioni
provenienti da un dato indirizzo IP... senza considerare che FZserver
permette parecchie altre cosette e che supporta molto meglio la
modalità pasv :)
Post by HamRadio
Post by ObiWan
in alternativa potresti lasciare il firewall così come è ed
aggiungere
Post by HamRadio
Post by ObiWan
una regola di filtraggio IPsec che limiti le connessioni al solo IP
desiderato
Come si "aggiunge una regola di filtraggio IPsec"?
(naturalmente non ti chiedo di spiegarmi tutto l'ambaradan, ma solo
dove eventualmente trovare la documentazione...)
Ti consiglio di iniziare da qui

http://preview.tinyurl.com/38gyreu

mi scuso per l'uso di "tinyurl" (ma almeno punta al "preview") e per
il fatto che il link punti alla "wayback machine" ma purtroppo il sito
originale è scomparso; ad ogni modo, le istruzioni valgono per
qualsiasi OS windows della "famiglia NT" da NT in avanti :)

Tornando ad FTP, prima di tutto cerca di capire bene come
funziona il protocollo, allo scopo, leggiti attentamente questo

http://www.troubleshootingnetworks.com/ftpinfo.html

poi, considerando che IIS ed altri clients utilizzano la modalità
passiva (PASV) tieni a portata di mano questi links

http://www.velikan.net/iis-passive-ftp/

http://support.microsoft.com/kb/555022

e considera che per usare PASV dietro ad un NAT/Router
dovrai *anche* impostare i port forward relativi al range di
porte che deciderai di usare

Per concludere... credo di averti fornito abbastanza materiale
in qualsiasi caso, credo che indipendentemente da FTP,
l'attivazione di una policy di port filtering IPSec in aggiunta
all'uso del firewall standard di sistema possa permetterti
sia un maggior controllo sia una maggiore sicurezza... a
fronte (c'è sempre un prezzo :D) di una maggior complessità
nella configurazione
ObiWan
2010-11-24 17:06:56 UTC
Permalink
Post by ObiWan
la 20 non serve :) è un errore classico, la 20 in *ingresso* NON
serve assolutamente
giusto per chiarire; supponendo di avere due hosts, il server
ftp "S" ed il client "C"

FTP normale (attivo)

C crea un socket impostando come destination IP
"S" e come destionation port la 21, lasciando source
IP e source port vuoti, il socket utilizzato per tale connex
avrà le seguenti impostazioni

src_ip C
src_port <ephemeral>
dst_ip S
dsp_port 21

dove "<ephemeral>" significa che la porta viene assegnata
automaticamente dallo stack di rete del client utilizzando la
prima porta disponibile nel range dinamico, diciamo che
tale porta sia (es.) la 2539; in tal caso supponendo che C
abbia IP 192.0.2.1 e che S abbia IP 192.0.2.100 avremo

src_ip 192.0.2.1
src_port 2539
dst_ip 192.0.2.100
dst_port 21

una volta stabilita la connessione ed inviate le credenziali
di accesso (supponendo che non si tratti di un ftp che
permette connessioni anonime) il client potrà inviare al
server comandi quali (es.) SYS, STAT, PWD ed altri
questi verranno ricevuti sulla connessione attiva e le
relative risposte arriveranno utilizzando la stessa MA
nel caso in cui il comando richieda l'invio di un flusso
dati da parte del server le cose cambieranno; se ad
esempio il client volesse ricevere l'elenco dei files
della directory corrente (comando LS) ecco ciò che
succederebbe

Il client invia al server un comando PORT formato in
questo modo

PORT 192,0,2,1,4,15

le prime quattro cifre di tale comando rappresentano
l'indirizzo IP del client (192.0.2.1) le successive due
rappresentano invece il numero della *porta* sulla
quale il client si metterà in *ascolto* nel caso di cui
sopra la porta è 0x040F ossia la porta 1039

in pratica il client prima di inviare al server il comando
PORT creerà un "listen" socket senza specificare la
porta, lo stack di rete a questo punto assegnerà al
socket un numero porta (dinamico, libero come sopra)
ed il client userà tale numero per il comando "PORT"
visto sopra

dopo aver inviato il comando PORT il client potrà
quindi inviare al server FTP il comando "LS"; il server,
ricevendo tale comando creerà un socket del tipo

src_ip S
src_port 20
dst_ip C
dst_port 1039

ossia, sempre facendo riferimento all'esempio

src_ip 192.0.2.100
src_port 20
dst_ip 192.0.2.1
dst_port 1039

come è facile notare, dst_ip e dst_port corrispondono a
quanto specificato dal client nel comando "PORT" mentre
la "src_port" ossia la porta usata dal server come origine
per la connessione sarà SEMPRE la porta 20/tcp; a questo
punto una volta che il server avrà stabilito la connessione
*verso* il client (porta 20 server -> porta 1039 client)
il server invierà il flusso dati richiesto e chiuderà il socket
(la connessione) lasciando invariata l'altra connessione
ossia quella sulla porta 21 (canale comandi)

Come credo sia facile capire, è del tutto inutile aprire la
porta 20/tcp in ingresso, dato che FTP usa tale porta solo
come porta *origine* per connessioni *in uscita* :)

FTP passivo

per quanto riguarda la modalità passiva, relativamente
al "canale comandi" (porta 21) vale quanto già scritto
sopra, quello che cambia è la modalità di trasferimento
dati, in modalità passiva, il client invece di inviare al server
un comando "PORT" specificando il proprio IP e la porta
locale in ascolto, invierà al server un comando PASV
senza alcun parametro, il server risponderà a tale comando
con un messaggio del tipo

227 Entering Passive Mode (192,0,2,100,195,149)

il messaggio specifica l'indirizzo IP del server (prime quattro
cifre) e la porta sulla quale il SERVER si metterà in *ascolto*
per ricevere la connessione dal client; in questo caso la porta
0xC395 ossia la 50069

Il client alla ricezione del messaggio creerà un socket con
le seguenti impostazioni

src_ip 192.0.2.1
src_port <ephemeral>
dst_ip 192.0.2.100
dst_port 50069

dove la porta origine sarà valorizzata dallo stack di rete (come
sopra) mentre IP e porta destinazione corrisponderanno a quelli
ritornati dal server FTP

in questo caso, oltre al fatto che la porta 20 non ha nessun ruolo
c'è da notare che il server FTP dovrebbe essere configurato in
modo da usare per la modalità passiva un ben determinato
intervallo di porte (es. 9000....9500) ed un eventuale NAT/Firewall
posto di fronte al server dovrebbe essere configurato con regole
di port forwarding per l'intervallo di porte selezionato

Spero di essere stato chiaro

ciao

Continua a leggere su narkive:
Loading...