Newsgroup: it.comp.os.linux.sys
Titolo: Firewall IPTABLES e client FTP (un po lunghetto)

Salve a tutto l'NG
ho un problemino, preannuncio di essere un Newbie per quanto riguarda Linux
e le sue configurazioni.
Ho preparato un file con le regole per Iptables, funziona tutto egregiamente
ad esclusione dell'FTP, sia configurando il client in Passive mode che in
Active mode non funge nulla. Ho provato anche a raggiungere un ip pubblico
esterno alla mia lan ma il risultato non cambia.
La configurazione č la seguente:
Linux: REDHAT 9.0
Server FTP: SERV-U 4.0
IP Server FTP: 192.168.0.203
IP Client: 192.168.0.20
regole di iptables:
iptables -t filter -F
iptables -t filter -X
iptables -t filter -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
[...]
# FTP (uscita)
iptables -t filter -A INPUT -p tcp --sport 21 -m state --state
ESTABLISHED -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 21 -m state --state
NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 20 -m state --state
ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 20 -m state --state
ESTABLISHED -j ACCEPT
[...]
Il resto delle regole per il Web, Messenger, etc funzionano bene.
Ho letto che molto probabilmente dipende da alcuni moduli non installati nel
kernel, puň essere vero?
Se si come faccio a vedere quali sono i moduli compilati nel kernel?
Potrebbe dipendere dal passive mode? Come si configura Iptables per il
passive mode?
Le regole create sono state scopiazzate un po qua un po la, mi sapreste dire
perchč sulla regola della porta 21 in INPUT č ESTABLISHED, mentre sulla 20 č
ESTABLISHED,RELATED, mentre nel FORWARD della porta 21 č NEW,ESTABLISHED  e
sulla 20 č ESTABLISHED?
Grazie in anticipo a tutti coloro che mi daranno una mano nella risoluzione
di questi quesiti che mi stanno mandando il cervello in fumo da oltre
15giorni.
Luigi
Gli errori generati sono i seguenti sia in passive mode che in active mode:
STATUS:> Connect: Tuesday 11:55:47 06-10-2003
STATUS:> Connecting to 192.168.0.203
STATUS:> Connecting to 192.168.0.203 (ip = 192.168.0.203)
STATUS:> Socket connected. Waiting for welcome message...
220 Serv-U FTP Server v4.0 for WinSock ready...
STATUS:> Connected. Authenticating...
COMMAND:> USER pippo
331 User name okay, need password.
COMMAND:> PASS ********
230 User logged in, proceed.
STATUS:> Login successful
COMMAND:> REST 100
350 Restarting at 100. Send STORE or RETRIEVE.
STATUS:> This site can resume broken downloads
COMMAND:> PWD
257 "/" is current directory.
STATUS:> Retrieving directory listing...
COMMAND:> PASV
227 Entering Passive Mode (192,168,0,203,10,243)
COMMAND:> LIST
STATUS:> Connecting data socket...
ERROR:> Failed to establish data socket
ERROR:> Timeout
STATUS:> Disconnect: Tuesday 11:57:51 06-10-2003
**************************************************************
STATUS:> Connect: Tuesday 12:01:54 06-10-2003
STATUS:> Connecting to 192.168.0.203
STATUS:> Connecting to 192.168.0.203 (ip = 192.168.0.203)
STATUS:> Socket connected. Waiting for welcome message...
220 Serv-U FTP Server v4.0 for WinSock ready...
STATUS:> Connected. Authenticating...
COMMAND:> USER pippo
331 User name okay, need password.
COMMAND:> PASS ********
230 User logged in, proceed.
STATUS:> Login successful
COMMAND:> REST 100
350 Restarting at 100. Send STORE or RETRIEVE.
STATUS:> This site can resume broken downloads
COMMAND:> PWD
257 "/" is current directory.
STATUS:> Retrieving directory listing...
COMMAND:> PORT 192,168,0,20,15,134
200 PORT Command successful.
COMMAND:> LIST
150 Opening ASCII mode data connection for /bin/ls.
STATUS:> Received 0 bytes, Abnormal termination
STATUS:> Trashed response received
426 Data connection closed, transfer aborted.
STATUS:> Disconnect: Tuesday 12:04:46 06-10-2003

 ...[cut]...
prova a caricare i moduli:
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp

 sulla 20 è ESTABLISHED?
Allora, non ho letto completamente le tue regole. Però quello che so è
che, oltre a verificare di avere i moduli che ha citato paolo, devi anche
usarli. Ovvero, la connessione che fai tu al server FTP è una e passa
perché è ESTABLISHED. L'altra(che se non sbaglio parte dal server, ma non
ne sono sicuro) viene accettata se e solo se accetti i pacchetti RELATED:
ovvero, siccome fa logicamente parte della connessione che hai creato tu,
allora ip_conntrack_ftp la considera RELATED.
Non capisco perché in active mode cada comunque la connessione, comunque
il rimedio che ti ho indicato funziona(l'ho letto un mare di volte che si
fa così). Se nell'active mode è comunque il server a iniziare la
connessione(forse il client stabilisce solo la porta da usare), allora è
tutto chiaro. Se no, ho bisogno di avere spiegata cos'è l'active mode.
Comunque la lunghezza non fa mai male. Meglio un messaggio di questo che
non uno del tipo:
ho un firewall e non funziona FTP. Perché??
che è il tipico messaggio del niubbo che fa incazzare(non perché le cose
non le sa, ma perché presume l'onniscienza di chi risponde).
Ciao
-- 
cat <<EOSIGN
Paolo Giarrusso, aka Blaisorblade(togliere solo REMOVEONLYTHIS per rispondere)
Kernel 2.4.20/2.5.63 on an i686; Linux registered user n. 292729
EOSIGN

 > Se si come faccio a vedere quali sono i moduli compilati nel kernel?
[...]
C'è un modo per controllare quali moduli sono compilati nel Kernel? I moduli
compilati non sono anche attivi automaticamente?
se li devo abilitare con modprobe, poi come faccio a renderli
permanentemente attivi (cioè al riavvio della linuxbox devono essere
richiamati)?
Come si configura Iptables per il passive mode?
Grazie di nuovo
Luigi

Per listare i moduli caricati puoi semplicemente usare
lsmod | less
Ti ricordo inoltre che il modulo ip_conntrack_ftp traccia le sessioni ftp e
collega la control
session con la data session. Caricando quindi tale modulo la data session
non e' piu' vista come una nuova sessione, ma come una sessione "related",
ovvero collegata ad una gia' stabilita (il client e' quindi in grado di
passare dal firewall).
Il modulo ip_nat_ftp permette invece di nattare il contenuto del comando
port, permettendo quindi al client di aprire la sessione con il server.
Per quanto riguarda l'ftp in passive mode, la data session viene creata tra
due porte casuali del client e del server. Bisogna quindi consentire tutte
le connessioni superiori alla 1024#porta.
Se pero' sul server e' in ascolto un servizio su di una porta non
privilegiata (micro_poft sql server), occorre dichiarare che le connessioni
verso porte maggiori di 1024 sono permesse solo se discendono da una gia'
stabilita (stateful inspection). Si scrivera' quindi:
iptables -A FORWARD -p tcp -d 0.0.0.0 --dport 21 -j ACCEPT
iptables -A FORWARD -p tcp -d 0.0.0.0 --dport 1024:65535 -m state --state
ESTABLISHED,RELATED -j ACCEPT
Per caricare i moduli all'avvio del sistema, basta inserire i relativi
comandi in un piccolo script da eseguire automaticamente proprio durante la
fase di avvio (potresti ad esempio metterlo in /etc/rc.d/init.d o quello che
e' ed eseguirlo all'ultimo, tramite link simbolici, nei vari livelli di
esecuzione)
ciao