. Script de mise a jour de l'ip public en mode passif [Réglé] [vsftpd] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 12-11-2005 à 12:10:36
Quels ports as-tu ouvert ? En mode passif il faut les ports 21 et 20...
Marsh Posté le 12-11-2005 à 12:36:47
Les ports 20 et 21 sont ouvert sur la C-BOX ainsi que les ports 32980 à 32989.
Marsh Posté le 12-11-2005 à 12:43:00
Mais étant donné que la connection est possible je pense plus à un defaut dans la config de vsftpd.
Marsh Posté le 12-11-2005 à 13:31:53
voici mon fichier de conf en mode passif(reste a adapter pour toi les N° des ports):
listen=YES
listen_port=2121
anonymous_enable=NO
local_enable=YES
write_enable=YES
pasv_enable=YES
pasv_max_port=64010
pasv_min_port=64000
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=NO
idle_session_timeout=600
ftpd_banner=Welcome to Ftp Server.
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
Marsh Posté le 12-11-2005 à 15:41:26
Hello,
Tout d'abord un rapide rappel sur le protocole FTP.
Les ports standard de FTP sont : 20 et 21 quelque soit le mode [actif|passif]
Le 21 est celui des commandes (ls, get, put etc)
le 20 est celui par lequel transite les données (retour du ls par exemple, ou bien le DL d'un fichier).
Imaginons le DL d'un fichier X...
Le mode actif, est le mode historique de FTP. Le client demande le fichier X et au passage le client envoi son IP et un port. Le serveur recoit l'ip et le port et essaye de se connecter dessus. Or lorsque le client est derrière un firewall qui ne fait pas de conntracking (suivi de connexion), cela pose probleme car le serveur veut envoyer l'info mais ce tape la tete contre le "mur de feu" (firewall).
Le mode passif a été inventé pour palier au problème de firewall. Cette fois le client demande le fichier X, le serveur lui dit OK en répondant, cette fois ci avec _son_ IP et un port défini (ip et port du serveur donc). Le client recoit l'info et va se connecter, dehors, sur le fameux serveur FTP. De ce fait le firewall laisse passer la connexion car elle a été initié par le client (en interne) donc c'est une connexion de confiance... voila le résumé rapide.
Plus d'infos sur google.
Quant a ton problème et ta config (je ne connais pas vsftp)
listen_port=2121
pasv_max_port=64010
pasv_min_port=64000
connect_from_port_20=NO
Si tu utilises le port de commande 2121, il faut donc l'autoriser ds ta CBOX vers ton serveur naté en interne. Quant au port de données, le 20, je ne sais pas ce qu'il devient, es-ce le 2120 avec vsftp? Je ne pense pas, ca doit rester le 20. Vérifie avec un netstat -tap pour voir les ports ouvert sur ton serveur FTP.
Enfin tu as défini les ports passif que ton serveur va ouvrir pour que le client vienne se connecter chez toi sur ton serveur. Tu dois donc autoriser la plage 64000 a 64010.
enfin connect_from_port_20=NO , je ne comprend pas ce que cela signifie.
RTFM.
En somme, si tu as configurer correctement ton firewall pour le forward des port CMD(21 de base) & DATA (20 de base). Un client en mode ACTIF devrait pouvoir se connecter...
Voila voila, je me relis pas c'est trop long, j'espere que j'ai pas fait trop d'erreurs
A+
Tom
Voila voila
Marsh Posté le 12-11-2005 à 16:59:44
Pour commencer par la fin :
Le serveur est sur le port 21 et 20 (les ports de base du ftp) et le serveur est en ip statique.
(apres correction de vsftpd.conf : ligne suprimé : ftp_data_port=21 et connect_from_port_20=YES)
#Au niveau de la C-BOX :
- le port 20 et 21 en TCP et UDP sont routé vers le serveur FTP
- les ports 32980 à 32989 en UDP sont ouverts dans le firewall (les ports passifs de vsftpd)
- les ports 20 et 21 en UDP et TCP sont ouverts dans le firewall
#Au niveau du reseau local :
- Aucun problème, la connection avec le client filezilla et la commande LIST fonctionne ce qui me donne acces au FTP
#Sur internet
- Toujours le même problème avec le client filezilla la connection, l'autentification est bonne mais :
Command: LIST
Error: Transfer channel can't be opened. Reason: Une
tentative de connexion a échoué car le parti connecté
n'a pas répondu convenablement au-delà d'une certaine
durée ou une connexion établie a échoué car l'hôte de
connexion n'a pas répondu.
Error: Could not retrieve directory listing
Command: TYPE I
Pourtant je viens de changer certain paramêtre :
data_connection_timeout=600
connect_timeout=600
accept_timeout=600
idle_session_timeout=600
Pour la ligne "connect_from_port_20=NO", cela permet d'utiliser le port 21 uniquement avec les ports passifs.
Apres un petit test, en metant YES et en configurant Filezilla en actif puis en passif : toujours la même erreur.
Par contre en mode standalone/autonome (listen=yes et listen_port=21) est-ce que vsftpd demare automatiquement au demarage de linux ou lorsqu'une connection entrante est detecté (comme xinetd)?
Marsh Posté le 12-11-2005 à 17:16:50
En Standalone, il faudra un script de démarrage, ce n'est pas le « super démon » (x)inetd qui le lancera.
Donc je considère que le port 21 & 20 sont ceux pour le serveur FTP.
Tu as dit :
#Au niveau de la C-BOX :
- le port 20 et 21 en TCP et UDP sont routé vers le serveur FTP
- les ports 32980 à 32989 en UDP sont ouverts dans le firewall (les ports passifs de vsftpd)
- les ports 20 et 21 en UDP et TCP sont ouverts dans le firewall
Je te dis :
- 20 & 21 TCP ouvert & natés vers le serveur FTP
- les ports définis pasv_max_port & pasv_min_port ouverts en TCP et naté vers le serveur FTP.
Tu noteras le verbe frenglish "naté" ou en vrai francais on dirait "traduit".
J'ai regardé tes logs (j'aurais du le faire tout de suite
[..]
Command: PASV
Response: 227 Entering Passive Mode
(192,168,0,10,128,214)
Command: LIST
[..]
Comment on peut le voir tu es en mode passif (PASV) et ton serveur envoi l'ip et le port surlequel le client doit se connecter. Tu vois l'erreur ?
Or pour un client FTP qui se trouve sur Internet, l'adresse 192.168.0.10 est une adresse privé et non routable sur Internet !
En somme un de tes problèmes est le NAT. Si tu ne sais pas comment faire tu peux surement forcer une IP ds ta config vsftp. Donc mets ton IP publique (fixe) mais cela impliquera qu'en rezo local ca ne marche plus. Ce qui est pas top
Good luck
Marsh Posté le 12-11-2005 à 20:16:15
Merci des conseils ,
si je comprend bien, je dois rentrer l'adresse ip public dans le fichier conf de vsftpd (ligne pasv_address=www.www.www.www), le probleme et que mon ip n'est pas fixe (vive le neuf) et que vsftpd n'accepte pas d'addresse DNS (passage via mon compte dyndns impossible).
Dans ces conditions, a part faire un script de modification automatique de vsftpd.conf je ne vois pas quoi faire d'autre.
Des idées?
Et concernant le reseau local, le passage au mode actif du client ftp me permet de maintenir le ftp sur le reseau local.
Marsh Posté le 12-11-2005 à 20:55:17
Nan l'IP, si t'as une redirection de ton modem/routeur vers ta machine ca sert a rien, puisque c'est sur l'adresse IP locale qu'il ecoute
Marsh Posté le 12-11-2005 à 21:04:43
Pour le mode passif et donc les connections externes au reseau local je suis bien obligé de spécifier l'addresse ip public (celle fournit pas mon fai au modem) puisque sinon vsftpd envoie l'addresse local du serveur au personne qui tente de ce conecter provoquant l'impossibilité de réaliser la commande LIST lors de la connection.
Marsh Posté le 12-11-2005 à 22:33:23
Apres une recherche, j'ai trouvé un script que j'ai modifiée ; celui-ci devrait mettre a jour la ligne Pasv_address du fichier vsftpd.conf.
#!/bin/sh
# TiChou fr.comp.os.linux.configuration
# Modifié Apock
# Fichier de configuration vsftpd
echo "Mise a jour vsftpd"
VSFTPDCONF=/etc/vsftpd/vsftpd.conf
# Récupération de l'IP Internet
IP=$(/usr/bin/lynx -dump [checkip.dyndns.org] | \
/usr/bin/awk '/Current IP Address/ { print $4 }')
# Récupération de l'ancienne IP
IPOLD=$(/usr/bin/awk 'END {print $6}' /var/log/dyndns 2/dev/null)
if [ -n "$IP" -a "$IPOLD" != "$IP" ]
then
# Mise à jour de vsftpd
if [ -f $VSFTPDCONF ]
then
/usr/bin/sed -i -e "s/^\(pasv_address=\).*/\1$IP/" $VSFTPDCONF
/bin/killall -HUP vsftpd 2/dev/null
# Log de la mise à jour
date +"%b %e %k:%M:%S dyndns[$$]: %s $IP $RESULT" /var/log/dyndns
fi
En mode manuel j'obtiens lors de l'éxécution ("sh Truc.sh" ) dans le shell :
Mise a jour vsftpd
: command not found
Voila, si quelqu'un a une idée?
Le script d'origine est le suivant :
#!/bin/sh
#
# TiChou fr.comp.os.linux.configuration
# Paramètres DynDNS
USERNAME="login"
PASS="pass"
HOST="host.dyndns.org"
#WILDCARD=OFF
#MX="mx.domain.tld"
#MXBAK=NO
# Adresse mail
EMAIL="postmaster"
# Fichier de configuration vsftpd
VSFTPDCONF=/etc/vsftpd/vsftpd.conf
# Récupération de l'IP Internet
IP=$(/usr/bin/lynx dump [checkip.dyndns.org] | \
/usr/bin/awk '/Current IP Address/ { print $4 }')
# Récupération de l'ancienne IP
IPOLD=$(/usr/bin/awk 'END {print $6}' /var/log/dyndns 2/dev/null)
if [ n $IP a $IPOLD != $IP ]
then
# Mise à jour de vsftpd
if [ f $VSFTPDCONF ]
then
/usr/bin/sed i e s/^\(pasv_address=\).*/\1$IP/ $VSFTPDCONF
/bin/killall HUP vsftpd 2/dev/null
fi
# Mise à jour DynDNS
URL="http://members.dyndns.org/nic/update?system=dyndns&offline=NO"
URL="$URL&hostname=$HOST&myip=$IP"
[ n $WILDCARD ] && URL="$URL&wildcard=$WILDCARD"
[ n $MX ] && URL="$URL&mx=$MX"
[ n $MXBAK ] && URL="$URL&backmx=$MXBAK"
RESULT=$(/usr/bin/lynx source auth="$USERNAME":"$PASS $URL 2&1 \
| /usr/bin/perl p e 's/\n/\//;s/\s+/_/g')
# Log de la mise à jour
date +"%b %e %k:%M:%S dyndns[$$]: %s $IP $RESULT /var/log/dyndns
# Envoit mail
[ n $EMAIL ] && echo e Adresse IP : $IP\nRésultat : $RESULT \
| /usr/bin/mail s Mise a jour DynDNS $EMAIL
fi
Marsh Posté le 05-07-2007 à 09:31:16
Remonté du Forum pour donner la solution,
Le Script qui fonctionne (n'est plus vraiment d'actualité avec la dernière version de vsftpd) :
#!/bin/sh
echo "Mise a jour vsftpd"
#Création de deux variables, la première pour vsftpd et la deuxième pour le log
VSFTPDCONF=/etc/vsftpd/vsftpd.conf
DYNDNSLOG=/var/log/dyndns
# Récupération de l'IP Internet
IP=$(/usr/bin/lynx -dump http://checkip.dyndns.org | /usr/bin/awk '/Current IP Address/ { print $4 }')
# Récupération de l'ancienne IP
IPOLD=$(/usr/bin/awk 'END {print $6}' "$DYNDNSLOG" 2>/dev/null)
if [ -n "$IP" -a "$IPOLD" != "$IP" ]
then
# Mise à jour de vsftpd
/bin/sed -i -e "s/^\(pasv_address=\).*/\1$IP/" $VSFTPDCONF
#Dans le cas où l'on utilise xinetd
/bin/killall -HUP xinetd 2/dev/null
#Sinon, si on utilise inetd il faut la remplacer par
#/bin/killall -HUP vsftpd 2/dev/null
#ou /etc/init.d/vsftpd restart pour redemarrer vsftpd
echo "Mise a jour vsftpd.conf effectuée"
date +"%b %e %k:%M:%S dyndns[$$]: %s $IP $RESULT" >>"$DYNDNSLOG"
echo "Mise a jour dyndns.log effectuée"
else
echo "Pas de mise a jour"
fi
Marsh Posté le 11-11-2005 à 16:54:14
[Voir le Script en fin de page]
Salut a tous,
Comme le titre le suppose j'ai un problème avec vsftpd : Impossible d'obtenir la liste des dossier (a travers un routeur C-BOX et une freeboxv4)neanmoins fontionne bien sur le local)
Le NAT (la C-BOX) est correctement configuré puisque la connection bloque toujours au même endroit : lors de la commande LIST.
Sous filezilla j'obtient ce listing :
Response: 234 Proceed with negotiation.
Status: SSL connection established. Waiting for
welcome message...
Command: USER YYY
Response: 331 Please specify the password.
Command: PASS ********
Response: 230 Login successful
Command: FEAT
Response: 211-Features:
Response: AUTH SSL
Response: AUTH TLS
Response: EPRT
Response: EPSV
Response: MDTM
Response: PASV
Response: PBSZ
Response: PROT
Response: REST STREAM
Response: SIZE
Response: TVFS
Response: 211 End
Command: SYST
Response: 215 UNIX Type: L8
Command: PBSZ 0
Response: 200 PBSZ set to 0.
Command: PROT P
Response: 200 PROT now Private.
Status: Connected
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/"
Command: TYPE A
Response: 200 Switching to ASCII mode.
Command: PASV
Response: 227 Entering Passive Mode
(192,168,0,10,128,214)
Command: LIST
Error: Transfer channel can't be opened. Reason: Une
tentative de connexion a échoué car le parti connecté
n'a pas répondu convenablement au-delà d'une certaine
durée ou une connexion établie a échoué car l'hôte de
connexion n'a pas répondu.
Error: Could not retrieve directory listing
Command: TYPE I
et le fichier Vsftpd.conf est le suivant :
anonymous_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_upload_enable=NO
ftpd_banner=Welcome on Arkane
local_enable=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/ftpusers
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
ssl_ciphers=BBBBBBBBBBBB
rsa_cert_file=/etc/vsftpd/vsftpd.pem
guest_enable=NO
guest_username=virtual
user_config_dir=/etc/vsftpd/vsftpd_user_conf
data_connection_timeout=240
connect_timeout=180
accept_timeout=180
idle_session_timeout=300
async_abor_enable=YES
ascii_upload_enable=NO
ascii_download_enable=NO
max_clients=6
max_per_ip=4
ftp_data_port=21
connect_from_port_20=YES
port_enable=YES
pasv_enable=YES
pasv_max_port=32989
pasv_min_port=32980
local_umask=022
Voila, je me bas depuis bientot 7h et là je vois vraiment pas ...
Si quelqu'un a une solution ?
Message édité par Apok le 05-07-2007 à 10:55:32