Consentire FTP con IPTables


26

Il mio scenario attuale prevede di consentire varie regole, ma ho bisogno che ftp sia accessibile da qualsiasi luogo. Il sistema operativo è Cent 5 e sto usando VSFTPD. Non riesco a ottenere la sintassi corretta. Tutte le altre regole funzionano correttamente.

## Filter all previous rules
*filter

## Loopback address
-A INPUT -i lo -j ACCEPT

## Established inbound rule
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Management ports
-A INPUT -s x.x.x.x/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT

## Allow NRPE port (Nagios)
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT

##Allow FTP

## Default rules
:INPUT DROP [0:0]
:FORWARD DROP
:OUTPUT ACCEPT [0:0]
COMMIT

Di seguito sono riportate le regole che ho provato.

##Allow FTP
-A INPUT --dport 21 any -j ACCEPT
-A INPUT --dport 20 any -j ACCEPT

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

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT


-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT
-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT

-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT

1
riparata la formattazione in modo che fosse leggibile.
Avery Payne,

immagino che tu stia usando Rackspace? il tutorial ha quel difetto. Segui le istruzioni di @Evan Anderson.
Andres SK,

Risposte:


41

Ecco il documento a cui rimando le persone in modo che possano seguire il protocollo FTP: http://slacksite.com/other/ftp.html

  • Per eseguire FTP in modalità attiva, è necessario consentire connessioni in entrata alla porta TCP 21 e connessioni in uscita dalla porta 20.
  • Per eseguire FTP in modalità passiva, è necessario consentire connessioni in entrata alla porta TCP 21 e connessioni in entrata a una porta generata casualmente sul computer server (è necessario utilizzare un modulo conntrack in netfilter)

Non hai nulla di nuovo: la tua catena OUTPUT nel tuo post, quindi includerò anche questo qui. Se la tua catena OUTPUT è di default-drop, questo è importante.

Aggiungi queste regole alla configurazione di iptables:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

Per supportare la modalità passiva FTP, quindi, è necessario caricare il modulo ip_conntrack_ftp all'avvio. Sblocca e modifica la riga IPTABLES_MODULES nel file / etc / sysconfig / iptables-config per leggere:

IPTABLES_MODULES="ip_conntrack_ftp"

Salvare la configurazione di iptables e riavviare iptables.

service iptables save
service iptables restart

Per escludere completamente VSFTPD come un problema, interrompere VSFTPD, verificare che non sia in ascolto sulla porta 21 con un "netstat -a" e quindi eseguire un:

nc -l 21

Questo avvierà l'ascolto di netcat sulla porta 21 e farà eco all'input sulla tua shell. Da un altro host, TELNET alla porta 21 del server e verificare di ottenere una connessione TCP e di visualizzare l'output nella shell quando si digita la connessione TELNET.

Infine, ripristina VSFTPD, verifica che sia in ascolto sulla porta 21 e prova a riconnetterti. Se la connessione a netcat ha funzionato, allora le tue regole iptables vanno bene. Se la connessione a VSFTPD non funziona dopo che netcat ha funzionato, c'è qualcosa che non va nella configurazione VSFTPD.


Grazie per l'aiuto, i suggerimenti che hai indicato per la modalità passiva hanno risolto il mio problema. Apprezzo l'aiuto.
IOTAMAN,

Il riavvio di iptables annullerà tutte le modifiche apportate se IPTABLES_SAVE_ON_STOP non è impostato su "Sì".
Kevin M,

@Kevin: assolutamente, assolutamente un buon punto! > sorride <Lascerò una modifica su questo ora.
Evan Anderson,

@ GLB03: nessun problema. Vivo per Server Fault ...> smile <
Evan Anderson,

Questa risposta non ha funzionato per me, quindi per chiunque abbia questo problema, sottolineo che questo (e anche l'apertura della porta 21 input / output) ha funzionato per me: linuxquestions.org/questions/linux-security-4 /… -
ehsanul,

0

Prova questa regola. Nota: $EXTIPè il tuo indirizzo IP esterno per il server FTP.

-A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT

0

Nel mio caso mi mancava il modulo del kernel ip_conntrack_ftp. Deve essere caricato. Quindi puoi provare questo:

modprobe ip_conntrack_ftp

E aggiungi anche ip_conntrack_ftp a / etc / modules in modo che funzioni dopo il riavvio

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.