Présentati du Protocole FTP et Initiati à Proftpd Arnault TEISSIER ( teissier@efrei.fr ) pour EFREI-Linux v1.0, 25/11/2003
Table des matières 1 Introducti au FTP:...3 1.1 L'implémentati de proftpd :...3 1.1.1 Avantages de proftpd :...3 1.1.2 Incvénients de proftpd :...3 1.2 Liste des modules dispibles pour proftpd :...3 1.3 Analyseur de Log :...4 2 Cfigurati de proftpd :...5 2.1 Cfigurati globale :...5 2.1.1 Chrooter vos cnexis :...6 2.1.2 Éviter les DOS attaques :...6 2.2 Le système de log...6 2.3 Le système de limitatis :...6 2.4 Cfigurati pour les compte anyme :...7 2.5 Serveur FTP Virtuel :...8 3 Problèmes et difficulté classique :...10 3.1 Mode Actif / mode passif : la démystificati :...10 3.1.1 Mode Actif :...10 3.1.2 Mode passif :...10 3.2 Cfigurati pour que proftpd soit derrière du NAT :...11 3.3 Utilisati d'un backend d'authentificati : LDAP...11
1 Introducti au FTP: Le protocole FTP (File Transfer Protocol) est, comme s nom l'indique, un protocole de transfert de fichier. Le protocole FTP est né en 1971, date à laquelle un mécanisme de transfert de fichiers (décrit dans le RFC 141) entre les machines du MIT (Massaschussetts Institute of Technology) avait été mis au point. De nombreux RFC t ensuite apporté des amélioratis au protocole de base, mais les plus grandes innovatis datent de juillet 1973. Le protocole FTP est actuellement défini par le RFC 959 (File Transfer Protocol (FTP) - Specificatis). Le FTP fctine sur le port de communicati 21. Cependant il utilise aussi le port 20 pour le transfert de dnées. Il y a cependant plusieurs subtilitées sur le mode de fctinement du FTP que nous verrs dans ce document. 1.1 L'implémentati de proftpd : Proftpd est une implémentati opensource sous licence GPL du protocole FTP. Le serveur le plus utilisé a lgtemps été Wu-FTPD, qui, de m point de vue, est à proscrire pour des raiss de sécurité. De plus la prise en main de proftpd est plus aisée, surtout pour les persnes cnaissants déjà Apache, leurs fichiers de cfigurati étant très similaires. 1.1.1 Avantages de proftpd : Une cfigurati puissante similaire à celle d'apache. Des serveurs virtuels. Comptes facilement chrootés. Pas besoin de binaire dans les priss ou comptes chrootés. 1.1.2 Incvénients de proftpd : Pas de commande SITE pour des raiss de sécurité. Certaine fctinalité st gelée pour une meilleur sécurité. Comme vous l'aurez peut être compris, la sécurité est un point d'hneur de l'équipe de développement de proftpd, et malgré quelques problèmes qui reste assez rare, si une b suivi du serveur est effectué, accompagné de mise à jour lorsqu'un exploit est anncé ctre ce serveur, il est d'une grande fiabilité et figure parmi les serveur FTP les plus sûrs. Pour tout le document qui suit, les exemples et directives cités s'appliquent au fichier de cfigurati unique de proftpd, nommé proftpd.cf et généralement situé dans le répertoire /etc/proftpd.cf
1.2 Liste des modules dispibles pour proftpd : Proftpd propose un système de module afin de pouvoir étendre ses fctinalités, et de permettre au persnes désirant adapter proftpd à leur besoin. Les plus utilisées st : SSL/TLS support (mod_tls) LDAP support (mod_ldap) SQL support (mod_sql) TCP wrappers support (mod_wrap) Il existe beaucoup d'autres modules dipibles, répdant à des besoins plus spécifiques. Vous pourrez vous les procurer accompagnés de leur documentati à l'adresse suivante : http://www.castaglia.org/proftpd/ 1.3 Analyseur de Log : Il peut être intéressant de cnaître l'activité de votre serveur FTP. Divers logiciels st dispibles proposant des analyses utiles des accès générés par Proftpd. Il vous permette d'avoir une vue global sur le trafic et le nombre de visiteurs de votre serveur. The Webalizer ( http://www.webalizer.org ) ftpweblog ( http://www.nihgo.org/snowhare/utilities/ftpweblog/ )
2 Cfigurati de proftpd : 2.1 Cfigurati globale : On peux placer dans global des optis qui se répercuters sur l'ensemble des serveurs FTP sauf menti ctraire ultérieure (dans un Virtualhost par exemple). Exemple de cfigurati : ServerName "nom de votre serveur" # Permet de choisir si le serveur est lancer par inetd ou de manière # autome. ServerType standale # Permet de cacher le nom et la versi de votre serveur FTP. ServerIdent <nom affficher lors d'une cnexi> DeferWelcome MultilineRFC2228 DefaultServer ShowSymlinks AllowOverwrite off # Attenti peu engendré des problème de sécurité. Cette directive active # le ftp bounce, souvent appelé FXP. Allowforeignaddress # N'impose pas que l'utilisateur possède un shell associé dans le backend # gérant les authentificatis. RequireValidShell off #Autorise de résumer ces download et upload. AllowRetrieveRestart AllowStoreRestart #Opti de la commande LS. ListOptis "-l" #Permet d'eviter des problème de sécurité. DenyFilter \*.*/ #Definiti des timeout TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 240 # Evite de faire de rlookup inutile. UseReverseDNS off
# Définit le port de proftpd à 21, ce qui est le standard. Port 21 # C'est une bne cfigurati par défaut pour les droits de fichiers. # L'utilisateur et le groupe t tout les droits, et le reste du mde # peu seulement lire. Umask 002 # Définit l'utilisateur et le groupe par défaut de proftpd. User nobody Group nogroup 2.1.1 Chrooter vos cnexis : Que signifie dc ce terme mystérieux? Chroot csiste 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 persnel (défini ici par «~») à l'excepti des persnes appartenants au groupe staff. Elle peut être défini dans les paramètres globaux ou dans un Virtualhost. DefaultRoot 2.1.2 Éviter les DOS attaques : ~!staff Afin d'éviter une attaque de type DOS, ou plus généralement une surcharge de votre serveur, vous devez limiter le nombre de cnecti total autorisé. Dans l'exemple cidessous, nous le limits à 30, suffisant dans la majeur partie des cas. Ce paramètre ne peut être défini qu'une seul fois, dans la cfigurati global. MaxInstances 30 2.2 Le système de log Le système de log fctine comme sous Apache. Vous définissez des formats de log, que vous associez ensuite à des fichiers, et à des actis. Par exemple : LogFormat default "%h %l %u %t \"%r\" %s %b" LogFormat auth "%v [%P] %h %t \"%r\" %s" LogFormat write "%h %l %u %t \"%r\" %s %b" Ici, définit trois formats de log differents ( default, auth, write), que nous alls à présent pouvoir associer sel nos choix. Le format de log default est utilisé si aucun format n'est spécifié. ExtendedLog ExtendedLog /var/log/proftpd/access.log WRITE,READ write /var/log/proftpd/auth.log AUTH auth Nous associs à présent au fichier /var/log/proftpd/access.log le format de log «write» et lui delands de garder trace de toutes activités de lecture et d'écriture. Pour le deuxième
fichier, nous désirs logger toutes les authentificatis faites sur notre serveur et choisisss pour cela le format «auth». 2.3 Le système de limitatis : Il est possible de préciser des règles particulières pour un répertoire, ou une commande FTP. Par exemple, la commande suivante permet d'écraser des fichiers dans le répertoire «/test», ce qui n'est pas forcément le cas du reste des dossiers: # Nous vouls pouvoir écraser les fichiers du repertoire /test <Directory /test/*> AllowOverwrite </Directory> Il est aussi possible de limiter une ou des commandes FTP. Pour cela, il faut utiliser la directive Limit prévue à cet effet : <Directory ~> <Limit WRITE STOR RNFR DELE> Order Allow,Deny Deny ALL </Limit> </Directory> <Directory ~/public_html> <Limit WRITE STOR RNFR DELE> AllowAll </Limit> </Directory> Dans cet exemple, nous interdiss (Deny ALL) les commandes WRITE STOR RNFR DELE dans le dossier ~, puis nous autoriss ces mêmes commandes dans le répertoire public_html. 2.4 Cfigurati pour les compte anyme : Pour activer un accès anyme à votre serveur FTP, il vous suffit d'ajouter ce qui suit à votre fichier de cfigurati. Décommentez la dernière partie pour dner accès en écriture aux utilisateurs anymes. <Anymous ~ftp> User ftp Group nogroup # Définit un alias rendant le login anymous et ftp identique. UserAlias anymous ftp RequireValidShell off
# Limit le nombre d'utilisateurs anymes à 10. MaxClients 10 # On veut que 'welcome.msg' s'affiche au login, et que '.message' # s'affiche pour chaque nouveaux dossiers visités. DisplayLogin welcome.msg DisplayFirstChdir.message # Interdit l'écriture dans tout l'envirnement chrooté d'anymous. <Directory *> <Limit WRITE> DenyAll </Limit> </Directory> # Décommentez ce qui suis si vous êtes vraiment sympa! # <Directory incoming> # # C'est une bne cfigurati par défaut pour les droits de fichiers. # # L'utilisateur et le groupe t tout les droits, et le reste du mde # # peu seulement lire. # Umask 022 022 # <Limit READ WRITE> # DenyAll # </Limit> # <Limit STOR> # AllowAll # </Limit> # </Directory> </Anymous> 2.5 Serveur FTP Virtuel : Ctrairement aux serveurs web, le seul moyen de distinguer différents serveurs est de leur attribuer différentes adresses IP. En effet le nom de la machine utilisée pour ctacter le serveur ne figure pas dans la requête FTP. Il est aussi possible de différencier les VirtualHost en changeant le port de communicati utilisé. Par exemple definit le serveur par défaut sur le port 21, et les Virtualhost sur les ports 2121, 2122, 2123,... En dehors du port standard 21, il n'y a pas de règles pour choisir le port des VirtualHost, mais il faut tout de même éviter d'utiliser le port standard d'un autre logiciel. Pour mettre toutes les chances de votre coté, utilisez des ports supérieurs à 1024. Dans l'exemple ci-dessous, le serveur FTP virtuel VirtualHost utilise l'adresse IP 10.0.1.227, différente de l'ip du serveur principal, et le même port de communicati que défini dans les paramètres globaux. Le ctenu de la secti Virtualhost est par défaut le même que les paramètres globaux. Vous pouvez redéfinir tout les paramètres spécifiques à votre Virtualhost, qui diffèrent de la cfigurati globale. <VirtualHost 10.0.1.227> ServerName "nom de votre serveur"
ServerAdmin ftpmaster@efrei.linux.fr MaxLoginAttempts 2 RequireValidShell no MaxClients 20 DefaultRoot ~ AllowOverwrite yes <Directory ~> <Limit WRITE STOR RNFR DELE> Order Allow,Deny Deny ALL </Limit> </Directory> <Directory ~/public_html> <Limit WRITE STOR RNFR DELE> AllowAll </Limit> </Directory> </VirtualHost> Si vous souhaitez faire du virtual hosting par rapport au port de communicati, il suffirait d'ajouter la directive «port» et de spécifier un port différent de celui défini dans la cfigurati globale. Vous devriez aussi remplacer 10.0.1.227 par l'ip du serveur par défaut.
3 Problèmes et difficulté classique : 3.1 Mode Actif / mode passif : la démystificati : 3.1.1 Mode Actif : Le mode actif pose problème lorsque le client est derrière un firewall, car le serveur essayera de se cnecter sur le port 1027, ce qui lui est interdit. Pour répdre a ce problème, le mode passif a été normalisé. 3.1.2 Mode passif : Dans le cas du mode passif, que vous signalez au serveur grâce à la commande PASV, le serveur n'essayera pas de se cnecter au client, il restera passif... C'est le client qui effectue tout les tentatives de cnexi. Un problème persiste cependant, si les 2 machines, cliente et serveur, st derrière un firewall. Dans ce cas, il sera nécessaire de préciser au
serveur les ports de communicati qu'utilisera proftpd pour accepter les cnexis du client, et demander à l'administrateur du firewall d'adapter ses règles avec votre cfigurati. 3.2 Cfigurati pour que proftpd soit derrière du NAT : Cette secti décrit comment cfigurer proftpd pour qu'il fctine en mode passif alors qu'il est caché derrière une machine qui partage une cnecti internet avec de l' «address translati». C'est la technologie souvent appelée masquerading sous linux et qu'utilise Windows lorsque vous utilisez le système de partage de cnexi. Dans ce cas, le problème vient du fait que vous devez rediriger les ports 20 et 21 de la machine cnectée à Internet vers votre serveur FTP, puisque ce dernier n'est pas directement accessible par une machine placée à l'exterieur de votre réseau. Or lorsque proftpd execute la commande ftp PORT, il utilisera l'adresse IP de l'interface réseau par lequel vous l'avez cnectée, et par cséquent se présentera avec une adresse de votre réseau privé. Le client sera alors dans l'impossibilité d'établir une cnecti avec votre serveur FTP. Proftpd propose une soluti qui csiste à utiliser la directive «MasqueradeAddress» pour préciser l'adresse IP public de votre machine cnectée à Internet : MasqueradeAddress 217.128.219.7 Cependant, si l' suit le schéma présentant le mode passif, s'aperçoit que le client tente de se cnecter au port au port 2024 (port choisi aléatoirement par Proftpd, communiqué au client) ce qui ne sera pas possible, puisque la machine cnectée à internet n'est pas votre serveur FTP. Pour régler ce problème, il est possible de spécifier les ports de communicati qu'ouvrira Proftpd dans le cas d'une cnexi en mode passif : PassivePorts 12000 12015 Ici, Proftpd choisira un port compris entre 12000 et 12015 pour les cnexis passives. Il ne vous reste alors plus qu'à rediriger les ports 12000 à 12015 de votre machine cnectée à internet vers votre serveur FTP. 3.3 Utilisati d'un backend d'authentificati : LDAP Pour cclure cette explicati de Proftpd, parls de l'authentificati, un problème important dans la cfigurati des services, mais souvent complexe. Par défaut, Proftpd vous authentifie avec votre mot de passe persnel stocké soit dans /etc/passwd, soit dans / etc/shadow. Proftpd opère cette authentificati à travers PAM. Il est cependant possible de cfigurer Proftpd pour récuperer les logins et mots de passe grâce à un backend qui permet d'accèder soit à une base SQL, soit à une base LDAP. Je préfère largement LDAP qui permet facilement d'utiliser les mêmes logins et mot de passe dans de nombreuses autres applicatis, très dificile avec du SQL.
Une authentificati LDAP peut se faire de diférentes manières, puisque PAM, système d'authentificati par défault de Proftpd peu aussi gérer le LDAP. Le gros avantage d'utiliser le backend LDAP de proftpd est qu'il permet d'automatiser des actis intéressantes. La cfigurati suivante permet une authentificati LDAP sur le serveur ldap.networx.fr en TLS, et de rechercher les informatis d'authentificati dans la base "ou=webservice, o=networx". Le champs rechercher et «uid» qui est égal à %v, variable correspdant au nom d'utilisateur saisi lorsqu'un client tente de s'authentifie sur proftpd. LDAPServer LDAPDoAuth LDAPUseTLS LDAPHomedirOnDemand LDAPDoQuotaLookups ldap.networx.fr "ou=webservice, o=networx" uid=%v "ou=webservice, o=networx" "uid=%v" Cette cfigurati permet une authentificati sur un serveur LDAP. Si l'utilisateur existe et saisie un mot de passe correct, mais que s répertoire persnel n'existe pas sur le serveur FTP, il sera automatiquement crée. De plus le quota est géré dans la base de dnée LDAP, dc si vous souhaitez le modifier, il suffit pour cela de modifier la valeur saisie dans votre base de dnée.
Référence : Documentati officiel de Proftpd : http://proftpd.linux.co.uk/docs/ FAQ de proftpd : http://proftpd.linux.co.uk/docs/faq/linked/faq.html Modules de Proftpd et source de documentati intéressante : http://www.castaglia.org/proftpd/