#1 Le 15/04/2007, à 14:30
- nicolas_serre
[How to] Proftpd derrière une livebox (ip dynamique)
Pour commencer un peu de lecture:
http://doc.ubuntu-fr.org/proftpd
et http://allyana.info/TSSI-LINUX-pdf/TSSI … HCP-v2.pdf
(http://arnofear.free.fr/linux/template. … o=7&page=1)
En ip dynamique, il faut vous créer un compte sur http://www.dyndns.com/ et créer un nom de domaine qui pointra sur votre ip wan actuelle (DNS Service = Dynamic DNS).
Ensuite il faut configurer la livebox ou la box_qc pour qu'elle transmette la nouvelle ip (lors de chaque changement) à votre compte dynDNS:
http://www.siteduzero.com/tuto-3-6144-1 … vebox.html
Voilà mon fichier proftpd.conf :
# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use. It establishes a single server
# and a single anonymous login. It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.
ServerName "Name ftp server"
ServerType standalone
# Port 21 is the standard FTP port.
Port 21
MasqueradeAddress nom_de_domaine.org
# les logs des connection et transfert
SystemLog /var/log/proftpd.log
TransferLog /var/log/xfer.log
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances 30
MultilineRFC2228 on
<Global>
AllowForeignAddress off
AllowRetrieveRestart on
# Allow FTP resuming.
# Remember to set to off if you have an incoming ftp for upload.
AllowStoreRestart on
PassivePorts 6000 6100
DefaultChdir /mnt/120Go/ftp
DefaultRoot /mnt/120Go/ftp/dir1 user1
DefaultRoot /mnt/120Go/ftp/dir2 user2
DefaultRoot /mnt/120Go/ftp
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# Set the user and group under which the server will run.
User nobody
Group nobody
MaxClients 20
MaxClientsPerHost 5
AccessGrantMsg "Connexion reussie pour %u"
DeferWelcome off
# To cause every FTP user to be "jailed" (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~
# Normally, we want files to be overwriteable.
AllowOverwrite on
# Bar use of SITE CHMOD by default
<Directory /mnt/120Go/ftp>
<Limit WRITE>
AllowUser adminftp
DenyAll
</Limit>
</Directory>
#############
<Directory /mnt/120Go/ftp/dir1>
<Limit WRITE>
AllowUser adminftp
AllowUser user1
DenyAll
</Limit>
</Directory>
############
<Directory /mnt/120Go/ftp/dir2>
<Limit WRITE>
AllowUser adminftp
AllowUser user2
DenyAll
</Limit>
</Directory>
############
#<Limit SITE_CHMOD>
# DenyAll
#</Limit>
</Global>
# Needed for NIS.
PersistentPasswd off
# Default root can be used to put users in a chroot environment.
# As an example if you have a user foo and you want to put foo in /home/foo
# chroot environment you would do this:
#
# DefaultRoot /home/foo foo
Include /etc/proftpd-anonymous.conf
Voilà mon fichier proftpd-anonymous.conf:
# A basic anonymous configuration, no upload directories.
<Anonymous ~ftp>
User ftp
Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
# Limit the maximum number of anonymous logins
MaxClients 10
# Don't make it require a valid password or shell.
RequireValidShell off
AnonRequirePassword off
# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
<VirtualHost 192.168.1.110>
Port 21
MasqueradeAddress nom_de_domaine.org
PassivePorts 6000 6100
DefaultServer on
</VirtualHost>
Il faut bien sûr ouvrir les bons ports dans la livebox:
20 à 21 en TCP
6000 à 6100 en TCP
Pour tester votre serveur ftp vous pouvez utiliser ce site:
http://www.net2ftp.com/
Mais les vrais ennuis commencent après, vous vous apercevrez que après 24h de fonctionnement, votre serveur ftp renvoie l'ancienne ip wan en réponse PASV, d'où un dysfonctionnement du mode passif. Si vous redémarrez ProFTPd, l'adresse ip du MasqueradeAddress va se mettre à jour et le serveur fonctionnera à nouveau en mode passif.
Pour palier à ce problème, il faut faire un script qui détecte le changement d'ip wan et redémarre le service Proftpd, ce script étant lancé toutes les 5 minutes à l'aide de cron.
Nom du script: update_ip.sh, il faut bien sûr le rendre exécutable. J'ai placé le script dans mon home.
!/bin/sh
# Constantes globales
SITE=nom_de_domaine.org;
DEAMON=proftpd;
# Script de relancement de deamon
OLD=/home/user/old.txt;
NEW=/home/user/new.txt;
DIFF=/home/user/diff.txt;
if [ -s $OLD ] ; then
echo
echo "Old exists, do nothing !"
echo
else
echo
echo "Installing..."
echo
/usr/bin/host $SITE > $OLD;
echo " ... done!"
fi
/usr/bin/host $SITE > $NEW;
/usr/bin/cmp $OLD $NEW > $DIFF;
if [ -s $DIFF ] ; then
echo
echo "Restarting Deamon !"
echo
/sbin/service $DEAMON restart;
echo " ... done!"
fi
# updating
mv -f $NEW $OLD;
# cleanning
rm -f $DIFF;
Remplacez user par votre nom d'utilisateur.
Il faut ensuite configurer cron, lancer dans un terminal :
sudo crontab -e
En fait cette commande édite le fichier de configuration de cron pour root avec vi
Insérer ces lignes :
#
SHELL = /bin/bash
PATH = /sbin:/bin:/usr/sbin:/usr/bin
HOME = /
#
0,5,10,15,20,25,30,35,40,45,50,55 * * * * sh /home/user/update_ip.sh
Avec cron il vaut mieux mettre tout en chemin absolu, y compris les commandes et faire attention au PATH sinon ça ne fonctionne pas. Pour connaitre le chemin absolu d'une commande (exemple : host), il faut utiliser which dans une console, exemple :
sudo which host
Password:
/usr/bin/host
Voilà et merci à Anthony pour son aide précieuse
Dernière modification par nicolas_serre (Le 16/04/2007, à 23:14)
Hors ligne