Assumendo sia per server che per client un approccio restrittivo INPUT
e aperto OUTPUT
, ovvero:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
E da iptables-extensions (8) sull'esempio di FTP in modalità attiva:
1. NOVITÀ
NOVITÀ Il pacchetto ha avviato una nuova connessione o comunque associato a una connessione che non ha visto i pacchetti in entrambe le direzioni.
Il client sulla porta 50000
(qualsiasi porta casuale non privilegiata) si connette al server FTP sulla porta 21
, il server avrebbe bisogno almeno di questo per accettare questa connessione in entrata:
iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT
2. STABILITO
STABILITO Il pacchetto è associato a una connessione che ha visto i pacchetti in entrambe le direzioni.
Ora sul lato client, ha aperto una connessione in uscita al server sulla porta 21
utilizzando una porta locale 50000
e ha bisogno dei seguenti iptables per permettere la risposta per arrivare da server (21)
a client (50000)
:
sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
3. CORRELATO
CORRELATO Il pacchetto sta avviando una nuova connessione, ma è associato a una connessione esistente, come un trasferimento di dati FTP o un errore ICMP.
Ora dopo che la connessione FTP è stata stabilita e sta per essere eseguita una connessione dati, il client aprirà un socket del server (sì, con il client FTP attivo diventa un server per la connessione dati) sulla porta 60000
(per la mia comprensione il client contrassegnerà questa porta 60000
per quanto RELATED
riguarda l'altra connessione da 50000->21
) e invierà questo numero di porta al server usando il PORT
comando FTP . Quindi il server FTP aprirà una nuova connessione dalla sua porta 20
alla porta 60000
sul client e bene, ora il client richiede quanto segue per consentire a questa nuova connessione di riuscire:
sudo iptables -A INPUT -m state --state RELATED -j ACCEPT
Infine, affinché funzioni, è necessario abilitare il ip_conntrack_ftp
modulo del kernel per consentire al sistema di contrassegnare connessioni / pacchetti come RELATED
(questa è la mia comprensione, non ho approfondito troppo):
modprobe ip_conntrack_ftp