Outils pour utilisateurs

Outils du site


linux:proftpd

PROFTPD : Serveur FTP(S)

ProFTPd est un serveur FTP libre. Son unique fichier de configuration, proftpd.conf, utilise une syntaxe similaire à celle d'Apache permettant ainsi d'homogénéiser les fichiers de configuration. La directive include permet cependant de répartir les directives de configuration dans différents fichiers pour les cas plus complexes.

PROFTPD

Le logiciel permet de configurer plusieurs serveurs FTP virtuels et a la possibilité d'être utilisé dans un environnement dédié (chroot). Il peut être lancé comme un démon ou comme service inetd. Enfin, ProFTPd est compatible IPv6.

Son architecture est modulaire, ce qui a permis d'écrire des extensions pour le support de la cryptographie SSL/TLS (protocole FTPS) et l'extension de l'authentification via des bases RADIUS, LDAP ou SQL.

Options de configuration du serveur PROFTPD

  • Mode de fonctionnement standalone ou géré par un tiers service (xinetd par ex) :

# Permet de choisir si le serveur est lancer par inetd ou de manière autonome.
ServerType standalone      #inetd pour gestion xinetd

  • Dissimuler le hostname de votre serveur FTP :

# Permet de cacher le nom et la version de votre serveur FTP.
ServerIdent on <nom afficher lors d'une connexion>

  • Limiter les connexions utlisateurs à leurs HomeDirectory :

DefaultRoot ~ !admin

Chroot consiste tout simplement à enfermer l'utilisateur dans un répertoire précis, et de l'empêcher de se promener sur l'intégralité de votre disque dur en toute impunité. La directive suivante enfermera tous les utilisateurs dans leur répertoire personnel (défini ici par « ~ ») à l'exception des personnes appartenants au groupe admin.

  • Limiter le nombres de connexions simultanées

MaxInstances 30

Afin d'éviter une attaque de type DOS, ou plus généralement une surcharge de votre serveur, vous devez limiter le nombre de connection total autorisé. Dans l'exemple ci-dessous, nous le limitons à 30, suffisant dans la majeure partie des cas.

  • Autoriser la reprise des transferts :

# Autorise de résumer ces download et upload.
AllowRetrieveRestart on
AllowStoreRestart on

Configuration de la connexion en mode ANONYMOUS

  • Définition des caractéristiques de la connexion anonyme:

vi /etc/proftpd/proftpd.conf
# A basic anonymous configuration, no upload directories.

 <Anonymous ~ftp>
   User                         ftp
   Group                        nogroup
# We want clients to be able to login with "anonymous" as well as "ftp"
   UserAlias                    anonymous ftp
# Cosmetic changes, all files belongs to ftp user
   DirFakeUser  on ftp
   DirFakeGroup on ftp

   RequireValidShell            off

#   # Limit the maximum number of anonymous logins
   MaxClients                   10

# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
   DisplayLogin         welcome.msg
   DisplayChdir         .message

# Interdit l'écriture dans tout l'environnement chrooté d'anonymous.
   <Limit LOGIN>
        AllowAll
   </Limit>
   <Directory *>
     <Limit WRITE>
       DenyAll
     </Limit>
   </Directory>


    
# Configuration par défaut pour les droits de fichiers :
# L'utilisateur et le groupe ont tout les droits, les autres RO
    <Directory incoming>
    Umask                             022  022
# Autorise seulement le depot dans incoming    
               <Limit WRITE>
               DenyAll
               </Limit>
               <Limit STOR>
               AllowAll
               </Limit>
    </Directory>
</Anonymous>

  • Pour n'autoriser que la connexion anonyme :

<Limit LOGIN>
DenyAll
</Limit>

Réalisation NAT FTP avec IPTABLES

PROFTPDIPTABLES

Le but est de pouvoir donne l'accès que sur l'interface public d'un serveur firewall.
Pour se faire, nous allons mettre en place une redirection NAT vers le serveur FTP grâce à IPTABLES !
ProFTPD sera utilisé soit en ACTIF soit en PASSIF.

  • Charger les modules indispensables sur le serveur firewall :

Dynamiquement

aptitude install conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
De façon définitive
vi /etc/rc.local
# File: /etc/rc.local

# Module to track the state of connections
modprobe ip_conntrack

# Load the iptables active FTP module, requires ip_conntrack
modprobe ip_conntrack_ftp
  
# Load iptables NAT module when required
modprobe iptable_nat
 
# Module required for active an FTP server using NAT
modprobe ip_nat_ftp

Les modules chargés pour le NAT FTP, reste à savoir si le client FTP se connectera en ACTIF ou en PASSIF car c'est lui qui décide du type de connexion.

NAT FTP en mode ACTIF

FTP actif

Le mode actif est simple à configurer puisqu'il ne nécessite que les ports 20 et 21 du serveur vers le range 1024-65535 des clients.

  • Définition des règles IPTABLES pour le NAT FTP actif:

vi /root/script/firewall
# FTP PAT IP_PUBLIQUE-DMZ:21
iptables -t nat -A PREROUTING -d 10.32.13.100 -p tcp --dport 21 -j DNAT --to-destination 192.168.2.100:21
iptables -t nat -A PREROUTING -d 10.32.13.100 -p tcp --dport 20 -j DNAT --to-destination 192.168.2.100:20
echo "NAT FTP REDIRECT : OK"

# FTP FORWARD LAN-DMZ
iptables -A FORWARD -i eth1 -o eth2 -p tcp -m multiport --dport 20,21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -p tcp -m multiport  --sport 20,21 -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "FTP WEB-DMZ : OK"

NAT FTP en mode PASSIF

FTP PASSIF

Dans le cas du mode passif, le serveur n'essayera pas de se connecter au client, il restera passif…. C'est le client qui effectue tout les tentatives de connexion. Un problème persiste cependant, si les 2 machines, cliente et serveur, sont derrière un firewall. Dans ce cas, il sera nécessaire de préciser au serveur les ports de communication qu'utilisera proftpd pour accepter les connexions du client.

  • Définition du range de ports passifs pour PROFTPD:

vi /etc/proftpd/proftpd.conf
# In some cases you have to specify passive ports range to by-pass
# firewall limitations. Ephemeral ports can be used for that, but
# feel free to use a more narrow range.
PassivePorts                  55555 55655
Relancer le service PROFTPD suite à cette modification :
service proftpd restart

  • Définition des règles IPTABLES pour le NAT FTP PASSIF

vi /root/script/firewall
# FTP PAT IP_PUBLIQUE-DMZ:21
iptables -t nat -A PREROUTING -d 10.32.13.100 -p tcp --dport 21 -j DNAT --to-destination 192.168.2.100:21
iptables -t nat -A PREROUTING -d 10.32.13.100 -p tcp --dport 20 -j DNAT --to-destination 192.168.2.100:20
echo "NAT FTP REDIRECT : OK"

# FTP FORWARD LAN-DMZ
iptables -A FORWARD -i eth1 -o eth2 -p tcp -m multiport --dport 20,21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -p tcp -m multiport  --sport 20,21 -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "FTP WEB-DMZ : OK"

# FTP PASSIF
iptables -A FORWARD -i eth1 -o eth2 -p tcp --dport 55555:55655 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth2 -o eth1 -p tcp --sport 55555:55655 -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "FTP PASSIF FORWARD : OK"

Configuration de Proftpd over SSL (FTPS)

 SSL

Dans le but de sécuriser le flux FTP, il est possible de le configurer au travers de TLSv1 (=SSLv3).

La documentation officielle pour plus de détails sur les directives : ici

  • Génération d'un certificat auto-signé:

openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -nodes -days 365
- Clefs de 2048 bits soit un crytpage de 256 bits
- Le certificat proftpd.crt
- La clé privée proftpd.key
- Valable 365 jours

  • Le fichier de configuration principale (proftpd.conf) contient une référence à décommenter pour activer la prise en compte de la conf TLS:

# This is used for FTPS connections

Include /etc/proftpd/tls.conf

  • Configuration du fichier tls.conf :

<IfModule mod_tls.c>
TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
TLSProtocol                             SSLv23

TLSRSACertificateFile                   /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile                /etc/ssl/private/proftpd.key

TLSOptions                             NoCertRequest EnableDiags

TLSOptions                              AllowClientRenegotiations

TLSVerifyClient                         off

TLSRequired                             on

TLSRenegotiate                          required off
</IfModule>

  • Un reload du daemon proftpd:

/etc/init.d/proftpd restart

  • Vous pouvez tester votre connexion au port 21 en SSL :

openssl s_client -connect 127.0.0.1:21 -starttls ftp

Voici les captures des paquets circulants sur le réseau
  • En FTP clasique :

Wireshark FTP classique

  • En FTPS :

Wireshark FTPS

linux/proftpd.txt · Dernière modification: 15/04/2016 à 21:15 (modification externe)

Outils de la page