Newsgroup: it.comp.os.linux.sys
Titolo: vsftpd dietro ad un firewall

Ciao a tutti,
Sfruttando un servizio di dns dinamico, ho installato un gateway con
funzionalità di firewall (con masquerading della rete privata basata
sulla solita classe C 192.168.*.*) che si occupa della gestione della
connessione ADSL (alwais on).
Su di un altro computer ho installato vsftpd.
Se mi connetto dall'esterno riesco ad accedere correttamente al server ftp
solo in modalità attiva. Sfruttando quella passiva, vsftpd risponde
fornendo, come proprio indirizzo, l'ip privato che ho assegnato al server
invece del nome completo di dominio. Nonostante abbia letto la
documentazione del demone, non sono riuscito a trovare un modo per
cambiare questo comportamento.
Potete aiutarmi?
Grazie
	Ivo

Ciao,
che versione del kernel hai sul gateway? Sulle versioni 2.4 e superiori
del kernel ci?sono due moduli: ip_nat_ftp e ip_conntrack_ftp che
fanno proprio questo. Si occupano di tracciare i pacchetti ftp e
cambiare l'ip della rete interna con l'ip della rete esterna e
viceversa. Di default i due moduli tracciano i pacchetti per la porta
21, ma volendo tracciano anche su altre porte basta specificarlo in
fase di load module.
modinfo ip_nat_ftp
insmod ip_nat_ftp ports=21,1021
Per i kernel 2.2 non ricordo se c'era qualcosa di simile.
Spero di essere stato chiaro.
Andrea

 interna con l'ip della rete esterna e viceversa.
Fanno esattamente ciò di cui ho bisogno. grazie :-)
Però, nonostante la lettura della documentazione (su 
netfilter.org
), mi
risulta difficile capire come costruire adeguatamente le regole.
La topologia è la seguente:
gateway
interfaccia collegata al modem adsl: eth0
interfaccia collegata alla LAN: eth1
ip eth1: 
192.168.1.1/24
server
servizi attivi per tutto il mondo: apache (porta 80), vsftpd (porta 21)
servizi attivi solo su LAN: ssh (porta 22), DHCP
ip eth0: 
192.168.1.3/24
workstation
da 1 a 3 pc misti (Linux/Windows) configurati dinamicamente con
indirizzo ip >= 
192.168.1.10/24
 con le solite necessità: web, icq, news,
mail, ...
Al momento, tutta la LAN condivide la connessione ad Internet attraverso
il mascheramento fornito dal gateway con la seguente regola:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
e ridirigo le connessioni alla porta 80 con la seguente:
iptables -t nat -A PREROUTING -i ppp0 -p tcp -m tcp --dport 80 -j DNAT
--to-destination 192.168.1.3
Ora, leggendo la documentazione penso che dovrei fare una cosa di questo
tipo:
1) iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -m state
--state NEW,ESTABLISHED -j DNAT --to-destination 192.168.1.3
per le connessioni http in ingresso
2) iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 21 -m state
--state NEW,ESTABLISHED -j DNAT --to-destination 192.168.1.3
per le connessioni ftp in ingresso
3) iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 20 -m state
--state ESTABLISHED,RELATED -j DNAT --to-destination 192.168.1.3
per gestire il trasferimento in modalità attiva
4) iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 1024: -m state
--state ESTABLISHED,RELATED -j DNAT --to-destination 192.168.1.3
per gestire il trasferimento in modalità passiva
e la solita
5) iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
per permettere la condivisione della connessione.
Ora mi domando:
- la regola 4 considera solo i pacchetti relativi alle connessioni ftp o
mi ridirige tutto sul server (anche le comunicazioni iniziate dalle
workstation?
- non riesco proprio a capire come dovrei scrivere la regola per
mascherare l'ip interno del server; come devo fare?
Grazie ancora
	Ivo
-----
per risposte private icrock presso email punto it

Ciao,
la regola 4 non server perchè i moduli che ti ho indicato tengono
traccia delle connessione ftp ed abilitano le regole al momento o
almeno lasciano passare i pacchetti che fanno parte della connessione
ftp, sia dei comandi che quelle create successivamente per il
trasferimento dei dati. Basta solamente la 2^ regola anche la terza è
inutile contrariamente a quanto si crede la porta 20 non è mai in
listen sul server ftp ma viene usata dal server come porta sorgente
quando trasferisce i dati, o dal client. Ogni abilitazione in più
rispetto al necessario è un probabile buco in più sul firewall.
Andrea.

Ciao,
mi sono dimenticato una cosa non capisco il dubbio della tua seconda
domanda. La 5 regola fa proprio questo ogni pacchetto che esce
dall'interfaccia esterna ppp0 viene modificato impostando l'ip sorgente
con l'ip della scheda esterna.
Comunque se vuoi avere maggiore sicurezza nella generazione delle
regole del tuo firewall io mi affiderei a NARC che è uno script shell
che genera delle buone regole firewall a seconda della tipologia della
tua rete.
http://www.knowplace.org/netfilter/narc.html
Andrea

 
http://www.knowplace.org/netfilter/narc.html
gli darò sicuramente un'occhiata. grazie :-)
[...]

Oggi ho avuto modo di provare le regole effettuando delle connessioni
dall'esterno della rete e, indubbiamente, hai perfettamente ragione. :-)
Grazie molte per le risposte.
	Ivo