Iptables per consentire l'FTP in entrata


32

Voglio consentire il traffico FTP in entrata.

CentOS 5.4:

Questo è il mio /etc/sysconfig/iptablesfile

# Generated by iptables-save v1.3.5 on Thu Oct  3 21:23:07 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [133:14837]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Thu Oct  3 21:23:07 2013

Inoltre, per impostazione predefinita, il modulo ip_conntrack_netbios_n viene caricato.

#service iptables restart

Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]

Ma il problema non è con quel modulo, poiché ho provato a scaricarlo e ancora non ho avuto fortuna.

Se disabilito iptables, sono in grado di trasferire il mio backup da un'altra macchina su FTP. Se iptables viene applicato, il trasferimento non è riuscito.

Risposte:


27

Il tuo server ftp ha bisogno di un canale per trasferire i dati. La porta 21viene utilizzata per stabilire la connessione. Quindi, per rendere possibile il trasferimento dei dati, è necessario abilitare anche la porta 20. Vedi la seguente configurazione

Innanzitutto caricare il seguente modulo per assicurarsi che le connessioni ftp passive non vengano rifiutate

modprobe ip_conntrack_ftp

Consenti connessioni FTP sulla porta in 21entrata e in uscita

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"

Consenti porta FTP 20per connessioni attive in entrata e in uscita

iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"

Consenti infine il traffico passivo FTP in entrata

iptables -A INPUT  -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive inbound connections"

Per ulteriori informazioni sui problemi FTP e firewall, consultare: http://slacksite.com/other/ftp.html#active

Modifica: aggiunto NEWalla regola di input della porta 21.


2
Ho dimenticato di dire che --sport 1024: and --dport 1024:significa che stiamo includendo tutte le porte nell'intervallo 1024:32535che sono porte non privilegiate, il che significa che gli utenti senza accesso ai privilegi possono utilizzare queste porte per testare le loro applicazioni.
Valentin Bajrami,

@Being Gokul, è corretto. Siamo in grado di controllare il nostro server su quali porte dovrebbe ascoltare per le connessioni client. Tuttavia, in una modalità passiva, dobbiamo utilizzare --sportuna modalità senza privilegi per problemi di firewall privati ​​e consentire ai client di connettersi al server.
Valentin Bajrami,

2
Bene, puoi aggiungere NEW,ESTABLISHEDma non dovrebbe importare. Una connessione si trova sempre in uno NEWstato, quindi salta a RELATEDindicare che questa connessione è correlata a una connessione già consentita. Quando la connessione cambia in ESTABLISHEDstato ci informa che è stata stabilita una connessione su entrambi i lati (server / client). Potresti provare -m state --state ...invece.
Valentin Bajrami,

1
È NEWdavvero importante. Non sembra funzionare senza di essa.
Leandros,

1
@ val0x00ff Non capisco la necessità di --sport 1024:. Perché la porta del client sarebbe utile per la regola? Se si connette da una porta 80 alle porte passive del server, deve essere autorizzato anche a connettersi.
Yvan,

15

Ho visto regole così estese già in diversi blog ecc. E mi chiedevo perché non semplicemente usarlo

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

insieme al nf_conntrack_ftpmodulo. Questo è più conciso e leggibile, il che è generalmente una buona cosa, specialmente con i firewall ...

FWIW, sembra che ci sia stato un cambiamento nel kernel 4.7, quindi è necessario impostare net.netfilter.nf_conntrack_helper=1tramite sysctl(es. Inserirlo /etc/sysctl.d/conntrack.conf) o usare

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp

(vedi qui per maggiori dettagli)


1
Le informazioni sul kernel 4.7 mi hanno salvato la vita, cercavo da ore di farlo funzionare. Un semplice echo "1" > /proc/sys/net/netfilter/nf_conntrack_helpere tutto funziona come previsto.
Custode

1
Grande! 4.7 era un problema che non riuscivo a risolvere sul kernel Jessie 4.9!
Arunas Bartisius,

@Jakob c'è un problema con le connessioni CORRELATE che possono essere usate per accedere ad altri servizi: home.regit.org/wp-content/uploads/2011/11/… e github.com/rtsisyk/linux-iptables-contrack-exploit
Yvan

6

Client FTP:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

SERVER FTP:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Per alternare tra modalità passiva e attiva sul lato client

ftp> passive
Passive mode on.
ftp> passive
Passive mode off.

3
Ti meriti sicuramente alcuni voti per questo. Dimenticare di caricare il modulo nf_conntrack_ftp è fonte di mal di testa durante la risoluzione dei problemi relativi alle connessioni FTP passive e al monitoraggio delle connessioni iptables. L'utilizzo di questo modulo consente di rimuovere il tipo "NUOVO" in modo che queste porte siano protette da connessioni arbitrarie senza che sia stata stabilita una sessione FTP precedente.
Ryan Griggs,

5

L'aggiunta di NEW ha risolto il problema, credo.

Ora, il mio file iptables assomiglia a questo ..

# Generated by iptables-save v1.3.5 on Thu Oct  3 22:25:54 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [824:72492]

-A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Oct  3 22:25:54 2013

Digitando come risposta, dal momento che troppi caratteri non sono ammessi nei commenti .. Grazie mille per il vostro aiuto.


2
Fresco ha funzionato e felice di averti indicato nella giusta direzione. Si prega di contrassegnare la propria risposta come risolta in modo da aiutare altre persone che cercano la risposta giusta.
Valentin Bajrami,

Credo che ci sia un refuso nella risposta accettata. Credo che --dport 20:65535stia lasciando tutte le porte da 20 a 65535 aperte da qualsiasi porta di origine tra 1024: 65535, il che lascia esposti molti servizi che probabilmente non dovrebbero essere, se non esplicitamente consentito. Credo che ciò che era previsto è--dport 1024:65535
itnAAnti

0

Se hai bisogno di connessioni sia attive che passive e accetti già ESTABLISHEDconnessioni, come:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Quindi devi solo aprire la porta 21 e aggiungere una regola speciale per le porte passive. Non è necessaria alcuna regola per la porta 20 poiché è già accettata dalla ESTABLISHEDregola sopra.

Innanzitutto accetta nuove connessioni su port 21:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

Quindi aggiungere l'helper CT per le porte passive 1024::

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED -m helper --helper ftp --dport 1024: -j ACCEPT

Guarda anche:

Nota: è necessario impostare 1024:come nel server FTP: cercare le porte passive predefinite nella configurazione FTP. Altrimenti apriresti troppe porte che potrebbero non essere relative all'FTP.

Nota importante: non ho aggiunto OUTPUTregole man mano che vanno le mie impostazioni predefinite iptables -P OUTPUT ACCEPT. Significa che mi fido di ciò che sta uscendo dalla mia scatola. Potrebbe non essere una buona opzione, specialmente in una configurazione NAT.

Nota molto importante: FTPS non funzionerà con una tale configurazione, poiché la porta passiva è nascosta (crittografata), quindi non c'è modo iptablesdi indovinare la buona porta. Vedere Modifica delle tabelle IP per consentire FTP su TLS mediante porte passive e https://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.