Question Proftpd

Suite du sujet Questions OpenVPN & Proftpd:

Est-ce que ton serveur est derrière un routeur NAT, genre box ?

Bonjour,
Oui le serveur est actuellement chez un collègue je passe par sa box. On a fait les règles de routage dans son routeur mais je me demande si ça n’a pas de rapport des les ports passifs présents dans la cfg de proftp

Bonjour,

Tu peux essayer ça pour les ports passifs (adapter les ports en fonction de ta conf, chez moi c’est 64000:65535) :

cat > /etc/init.d/iptables.sh << EOF
#!/bin/bash
#
### BEGIN INIT INFO
# Provides:				IPTABLES_boot_script
# Required-Start:		\$remote_fs \$syslog
# Required-Stop:		\$remote_fs \$syslog
# Sould-start:			\$network \$time
# Sould-stop:			\$network \$time
# Default-start:		2 3 4 5
# Default-stop:			0 1 6
# Short-Description:	Starts the IPTABLE script when the system starts.
#						Closes every ports but the ones which are required 
#						by the services running on the system.
### END INIT INFO
#
## Règles iptables.
## On flush iptables.
iptables -F
iptables --delete-chain
# On accepte tout le traffic sortant et on interdit le forwarding
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
## On supprime toutes les chaînes utilisateurs.
/sbin/iptables -X
## On drop tout le trafic entrant.
iptables -P INPUT DROP
## On accepte le traffic entrant connecté et pour le ssh
iptables -t filter -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT
iptables -A INPUT -m state --state "ESTABLISHED,RELATED" -j ACCEPT


#MAJ web debian
iptables -A INPUT -m state --state NEW -i eth0 -p TCP -d ftp.fr.debian.org --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -i eth0 -p TCP -d security.debian.org --dport 80 -j ACCEPT

# LA PARTIE QUI T'INTERRESSE LE FTP
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 64000:65535 -j ACCEPT

## On autorise le traffic de la boucle locale
iptables -I INPUT 2 -i lo -j ACCEPT

## On log les paquets en entrée.
iptables -A INPUT -j LOG

## On log les paquets forward.
iptables -A FORWARD -j LOG 

## Anti Flood / Deni de service / scan de port
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT


exit 0
EOF

celui-ci pour relancer/stopper le script ci-dessus :

cat > /etc/init.d/firewall << EOF
#!/bin/bash
#
### BEGIN INIT INFO
# Provides:				IPTABLES_command_script
# Required-Start:		\$remote_fs $syslog
# Required-Stop:		\$remote_fs $syslog
# Should-start:			\$network $time
# Should-stop:			\$network $time
# Default-start:		2 3 4 5
# Default-stop:			0 1 6
# Short-Description:	start, stop, restart Netfilter.
### END INIT INFO
#

case "\$1" in
start)
	/etc/init.d/iptables.sh
	echo "Les règles Netfilter ont été appliquées"
	;;
   
stop)
	iptables -P INPUT ACCEPT
	iptables -P OUTPUT ACCEPT
	iptables -P FORWARD ACCEPT
	iptables -X
	iptables -F
	echo "Les règles Netfilter ont été supprimées"
	;;
	
status)
	clear screen
	iptables -L -v --line-numbers
	;;	
	
restart)
	iptables -P INPUT ACCEPT
	iptables -P OUTPUT ACCEPT
	iptables -P FORWARD ACCEPT
	iptables -X
	iptables -F
	/etc/init.d/iptables.sh
	echo "Les règles Netfilter ont été réinitialisées"
	;;
*)
        echo "Usage: \$0 {start|stop|restart|status}"
        exit 1
    ;;
	
esac
EOF

Ces commandes pour que le script se lance au boot et pour les logs NetFilter :

grep ":msg,contains,\"PROTO=\"" /etc/rsyslog.conf
if [ $? = 1 ]
	then
		sed -i "57i:msg,contains,\"PROTO=\" /var/log/iptables" /etc/rsyslog.conf
		sed -i "58i& ~" /etc/rsyslog.conf
fi

touch /var/log/iptables

cat > /etc/logrotate.d/iptables << EOF
/var/log/iptables {
        monthly
        rotate 12
        compress
        delaycompress
        missingok
        notifempty
        create 644 root root
        postrotate
            find /var/log/ -maxdepth 1 -mtime +190 -name "iptables.*.gz" -delete &>/dev/null
        endscript	
}
EOF

## rendre le script exécutable :
chmod 555 /etc/init.d/iptables.sh
chmod 555 /etc/init.d/firewall

## Lancer le script à chaque démarrage :
update-rc.d iptables.sh defaults
update-rc.d firewall defaults

## Lancer le script à chaque démarrage :
update-rc.d iptables.sh defaults	

## executer le script pour appliquer les nouvelles règles :
sh /etc/init.d/iptables.sh

killall -9 rsyslogd
/etc/init.d/rsyslog start

Pour voir les règles appliquées :

iptables -L
## ou alors 
whiptail --msgbox "$(iptables -L)" --scrolltext 20 80  ## plus joli :)

Chez moi ça marche avec vsftpd…

Si ça peut aider un peu tant mieux, dans tous les cas le forum est rempli de personnes super compétentes, quelqu’un arrivera bien à t’aider.

Bonjour, je viens de m’y remettre, entre temps j’ai configuré MasqueradeAddress du coup mon erreur a changée.
FileZilla;

Statut : Résolution de l’adresse de xxxx.ddns.net
Statut : Connexion à xxx.xx.xxx.xx:23…
Statut : Connexion établie, initialisation TLS…
Statut : Vérification du certificat…
Statut : Connexion TLS établie, attente du message d’accueil…
Statut : Connecté
Statut : Récupération du contenu du dossier…
Commande : PWD
Réponse : 257 “/” est le répertoire courant
Commande : TYPE I
Réponse : 200 Type paramétré à I
Commande : PASV
Réponse : 227 Entering Passive Mode (xxx,xx,xxx,xx,xxx,xx).
Commande : MLSD
Erreur : La connexion des données ne peut pas être établie : ECONNREFUSED - Connexion refusée par le serveur
Erreur : Connection interrompue après 20 secondes d’inactivité
Erreur : Impossible de récupérer le contenu du dossier
Statut : Déconnecté du serveur

Merci pour tes infos je regarde tout de suite.

Edit: Je vois que tu as configuré le port 20 ? Celui-ci est inexistant dans mon fichier de config pourquoi le ftp en a-t-il besoin?

Pas la peine de masquer l’adresse IP si tu la laisses dans la réponse passive.

“Connexion refusée par le serveur” = port 49481 non ouvert en écoute ou pare feu (iptables) qui rejette la connexion avec -j REJECT --reject-with tcp-reset.

Y a-t-il des règles iptables sur le serveur ?
La redirection de la plage de ports passifs définie dans proftpd est-elle correctement configurée dans la bbox ?

Le port 20 n’est pas utilisé en mode passif.

Bonjour,
Masquer l’adresse IP ? J’ai dû mal comprendre l’intéret de MasqueradeAddress, j’ai cru que c’était pour la spécifier.
Le port 49481 fait parti de ma plage d’adresses passives est-ce que ça pose un problème ?
Aucune règle iptables sur le serveur, je commence tout juste à apprendre à l’utiliser.
Pour ce qui est des ports passifs normalement oui, je vérifierai dés que mon collègue aura un moment.
Le port 20 sert à quoi ?
Merci !

Je parlais de l’adresse IP figurant dans ton les logs de ton message précédent. Tu l’as remplacée par des X dans les messages d’état du client, mais pas dans la réponse du serveur “Entering passive mode”. Si tu voulais la garder cachée, c’est raté.

Bien sûr que le port 49481 fait partie de ta plage d’adresses passives, sinon le serveur ne l’aurait pas utilisé et indiqué dans sa réponse. Mais il faut s’assurer que rien ne bloque les connexions à ce port en chemin (côté client et côté serveur) et que la redirection de la plage de ports passifs dans la box est correcte.

Le port 20 sert traditionnellement de port source (donc inutile de l’ouvrir en écoute) pour les connexions de données en mode actif (ce qui n’est pas ton cas) à l’initiative du serveur, lorsque celui-ci écoute sur le port 21 pour la connexion de commande (ce qui n’est pas ton cas non plus).

C’est pas bien grave, donc si je comprends bien c’est soit iptables soir le routeur/box qui pose soucis ?
Je vérifie ça dés que possible merci

Tu peux utiliser tcptraceroute sur quelques port de la plage depuis le client vers l’adresse publique de la box pour vérifier si rien ne bloque avant le serveur.

Il y a des chances que ce soit les 2 :slight_smile:

Bonjour,

Apparemment ton SRV considère que la racine du partage est / donc le démon ftpd (ou un autre nom le cas échéant) ne peut accéder au dossier racine ou alors il aurait les droits root !
Il y a probablement des pb de droits à résoudre.
Commence par définir un autre répertoire comme racine, par exemple dans /home/ftp, /var/lib/ftp ou /usr/share/ftp
Ensuite tu adaptes les droits. Le plus simple c’est d’utiliser /home/tonuser. Je ne connis pas proftpd, j’utilise, si on me le demande vsftpd, mais le ftp ça craint un peu quand même. Surtout avec la tripotée de ports à ouvrir en mode passif !

Interprétation erronée. Le message initial stipulait que le serveur “fonctionne parfaitement en local”.

Ok et que penses-tu du mode ip_conntrack, j’ai lu que même si le SRV est à poil niveau netfilter le mode passif ftp n’est pas autorisé. Qu’en penses-tu ?

Je ne connais aucun “mode ip_conntrack”, seulement un module du noyau qui fait partie de netfilter et qui n’a aucune action par lui-même.

On n’est pas en train d’échanger par SMS, on a la place d’écrire tous les mots en entier. D’autre part SRV désigne un type d’enregistrement DNS qui n’a rien à voir avec la choucroute.

Cette phrase ne veut rien dire. Netfilter n’est pas un pare-feu. C’est iptables le pare-feu (ou plus exactement le filtre de paquets, car “pare-feu” peut désigner diverses fonctions qu’iptables ne réalise pas toutes).

Sans autre précisions, cette phrase non plus ne veut rien dire.

Ok je la boucle mais vas y mollo quand même.

Juste Netfilter c’est le système de pare feu, iptables en fait partie c’est un de ses modules.

Je reviens vers vous pour tous vous remercier pour vos réponses. J’ai dû au final faire autrement, merci !
À clore :slight_smile: