Newsgroup: it.comp.sicurezza.windows
Titolo: Permettere connessioni FTP solo ad un indirizzo IP

 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.

 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

 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!

 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

 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

 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