Magazine High tech

Proftpd avec authentification LDAP

Publié le 15 octobre 2012 par Lmns972 @guestblog

Le but de cet article est de mettre en place un serveur FTP , je vais partir sur proftpd . De plus de cela j’ai décidé de me lancer en mettant en place un serveur LDAP (que je ne maitrise que très peu) .

Les tests ont été faits depuis une debian Squeeze .

On commence par mettre en place la partie FTP

apt-get install proftpd-mod-ldap proftpd-basic

La configuration est plutôt simple. J’ai rajouté les options suivantes

AllowStoreRestart               on
PassivePorts                 50000 50400
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

Include /etc/proftpd/ldap.conf
Include /etc/proftpd/tls.conf
  •  AllowStoreRestart : On autorise le reprise de téléchargement
  • PassivePorts : Plage des ports passifs
  • Fichier include pour le TLS et LDAP

La configuration TLS est également très simpliste

# grep -v ^# 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
TLSVerifyClient                         off
TLSRequired                             on
</IfModule>

Le fichier de conf tls.conf propose déjà la ligne de commande pour la génération du certificat .

openssl req -x509 -newkey rsa:1024 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt \
-nodes -days 365

Pour la partie LDAP

# grep -v ^# ldap.conf 

LDAPServer          "127.0.0.1:389" 
LDAPUseTLS          off 
LDAPDoAuth          on ou=users,dc=domain,dc=com
LDAPDoUIDLookups    on ou=users,dc=domain,dc=com
LDAPDoGIDLookups    on ou=users,dc=domain,dc=com 
LDAPAuthBinds       on 
PersistentPasswd    off 

AuthPAM             off

Il faut maintenant installer le serveur LDAP . Nous allons également utiliser un frontend pour l’administration qui est phpldapadmin

apt-get install ldap-utils php5-ldap phpldapadmin slapd

Pour la configuration cela il faut créer le fichier slapd.conf dans /etc/ldap/

cp /usr/share/doc/slapd/examples/slapd.conf /etc/ldap/

# Where the dynamically loaded modules are stored
modulepath   /usr/lib/ldap
moduleload   back_hdb

backend   hdb
suffix   "dc=domain,dc=com"
rootdn   "cn=admin,dc=domain,dc=com"
rootpw   "votre clé ici"

access to attrs=userPassword,shadowLastChange
   by dn="cn=admin,dc=domain,dc=com" write
   by anonymous auth
   by self write
   by * none

access to *
   by dn="cn=admin,dc=domain,dc=com" write
   by * read

Pour générer la clé pour la variable « rootpw »

slappasswd -h {SSHA}

Pour le fichier ldap.conf

# grep -v ^# ldap.conf 
BASE	dc=domain,dc=com
URI     ldap://localhost

Le fichier /etc/default/slapd

# grep -v ^# /etc/default/slapd 

SLAPD_CONF=
SLAPD_USER="openldap"
SLAPD_GROUP="openldap"
SLAPD_PIDFILE=
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldapi:///"
SLAPD_SENTINEL_FILE=/etc/ldap/noslapd
SLAPD_OPTIONS=""

Si vous avez un firewall en place il faut ouvrir le port 21

${IPT} -A INPUT -i ${IFPUB} -p tcp --dport 21 -j ACCEPT
  • IPT : Path de iptables
  • IFPUB : Interface ou est montée l’ip publique

Il faut chargé les modules pour le mode passif

modprobe nf_nat_ftp
modprobe nf_conntrack_ftp

Si vous utilisez un script pensez à charger ces modules .

A ce stade nous avons un serveur FTP en place capable de faire du SSL et de s’authentifier sur un serveur LDAP . Mais il manque quand mêmes des users non ?

Modifier le fichier /etc/phpldapadmin/config.php

$servers->setValue('server','name','LDAP NameServer');
$servers->setValue('server','base',array('dc=domain,dc=com'));

Il vous reste plus à vous connecter http://serveur/phpldapadmin/

Il faut commencer par créer un groupe dans le cas ou vous avez une erreur il y a un bug dans les templates fournit par debian .

Il faut donc modifier 2 templates

/etc/phpldapadmin/templates/creation/posixAccount.xml
<attribute id="uidNumber">
        <display>UID Number</display>
        <icon>terminal.png</icon>
        <order>6</order>
        <page>1</page>
<!--    <readonly>1</readonly>  -->
        <value>=php.GetNextNumber(/;uidNumber)</value>
</attribute>

/etc/phpldapadmin/templates/creation/posixGroup.xml
<attribute id="gidNumber">
        <display>GID Number</display>
        <order>2</order>
        <page>1</page>
<!--    <readonly>1</readonly> -->
        <spacer>1</spacer>
        <value>=php.GetNextNumber(/;gidNumber)</value>
        <!-- <value><![CDATA[=php.GetNextNumber(/;gidNumber;false;(&(objectClass=posixGroup));*2,+1000)]]></value> -->
</attribute>

Vous pourrez par la suite créer un groupe puis des utilisateurs associés à ce groupe .

Nous avons un FTP fonctionnel avec un LDAP également comme dans pure-ftpd j’avais proposé de mettre en place un scan antivirus. Parce qu’il faut un minimum de sécurité nous allons scanner ce que dépose les users sur le serveur FTP . Pour cela il faut ajouter le module ClamAV

Malheureusement celui-ci n’est pas encore packagé dans la stable de debian . Cependant dans la Sid ce paquet est disponible .

~# cat /etc/debian_version 
wheezy/sid

apt-cache search clamav
proftpd-mod-clamav - ProFTPD module mod_clamav

Sur le serveur ou j’effectue mes tests je suis en Squeeze donc nous allons devoir re-paquager le paquet debian afin d’y intégrer ce module .

Pour commencer

apt-get install clamav clamav-daemon libclamav-dev

Puis

dpkg-reconfigure clamav-base

Il faut répondre comme ceci dans le cas contraire les options par défaut.

Socket type: <-- TCP
TCP port clamd will listen on: <-- 3310
IP address clamd will listen on: <-- 127.0.0.1

Pourquoi modifier le fonctionnement de clamav je me suis basé sur ceci

« Now we must reconfigure ClamAV so that Clamd uses TCP connections instead of a local Unix socket. It is highly recommended that Unix socket connections are avoided when using the Chroot feature of ProFTPd (DefaultRoot ~). The reason is that if mod_clamav needs to connect to Clamd, the Unix socket is not available in the chroot environment. »

Passons maintenant à la reconfiguration de proftpd

apt-get install build-dep libpam-dev

Récupérer les sources de proftpd . Vérifier que vous avez ceci dans votre sources.list dans le cas contraire ajoutez le puis apt-get update

deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
cd /data/src/
apt-get source proftpd-basic

Vous devriez avoir ceci dans votre répertoire

# ls -l 
total 4752
drwxr-xr-x  3 root root    4096 Oct 10 12:19 .
drwxr-xr-x 17 root root    4096 Oct 10 12:17 ..
drwxr-xr-x 14 root root    4096 Oct 10 12:19 proftpd-dfsg-1.3.3a
-rw-r--r--  1 root root  108182 Nov 18  2011 proftpd-dfsg_1.3.3a-6squeeze4.diff.gz
-rw-r--r--  1 root root    1426 Nov 18  2011 proftpd-dfsg_1.3.3a-6squeeze4.dsc
-rw-r--r--  1 root root 4718833 Jul  5  2010 proftpd-dfsg_1.3.3a.orig.tar.gz

On récupére le module puis on le détarre

wget --no-check-certificate https://secure.thrallingpenguin.com/redmine/attachments/download/1/mod_clamav-0.11rc.tar.gz
tar xzvf mod_clamav-0.11rc.tar.gz
cp mod_clamav-0.11rc/mod_clamav.* proftpd-dfsg-1.3.3a/contrib

On applique le patch

cd proftpd-dfsg-1.3.3a
patch -p1 < ../mod_clamav-0.11rc/proftpd.patch

Résultat

patching file modules/mod_xfer.c
Hunk #1 succeeded at 52 with fuzz 1 (offset 10 lines).
Hunk #2 succeeded at 1731 (offset 147 lines).

On modifie le debian/rules et on y ajoute ceci

--with-modules=mod_clamav

Vous devriez avoir ceci

CONF_ARGS := --prefix=/usr \
             --with-includes=$(shell pg_config --includedir):$(shell mysql_config --include|sed -e 's/-I//') \
             --mandir=/usr/share/man --sysconfdir=/etc/$(NAME) --localstatedir=/var/run --libexecdir=/usr/lib/
$(NAME) \
             --enable-sendfile --enable-facl --enable-dso --enable-autoshadow --enable-ctrls --with-modules=mo
d_readme \
             --enable-ipv6 --enable-nls --with-modules=mod_clamav

On reconstruit le paquet

dpkg-buildpackage

Quand on retourne au niveau de /data/src/ . On peut voir l’apparition des fichiers .deb

-rw-r--r--  1 root src     5115 Oct  2 09:58 mod_clamav-0.11rc.tar.gz
-rw-r--r--  1 root src  2335700 Oct  2 10:07 proftpd-basic_1.3.3a-6squeeze4_i386.deb
-rw-r--r--  1 root src   833722 Oct  2 10:07 proftpd-dev_1.3.3a-6squeeze4_i386.deb
drwxr-xr-x 15 root root    4096 Oct  2 10:07 proftpd-dfsg-1.3.3a
-rw-r--r--  1 root src   112208 Oct  2 10:04 proftpd-dfsg_1.3.3a-6squeeze4.diff.gz
-rw-r--r--  1 root src     1180 Oct  2 10:04 proftpd-dfsg_1.3.3a-6squeeze4.dsc
-rw-r--r--  1 root src     4502 Oct  2 10:07 proftpd-dfsg_1.3.3a-6squeeze4_i386.changes
-rw-r--r--  1 root src  4718833 Jul  5  2010 proftpd-dfsg_1.3.3a.orig.tar.gz
-rw-r--r--  1 root src  1509010 Oct  2 10:07 proftpd-doc_1.3.3a-6squeeze4_all.deb
-rw-r--r--  1 root src   354234 Oct  2 10:07 proftpd-mod-ldap_1.3.3a-6squeeze4_i386.deb
-rw-r--r--  1 root src   345704 Oct  2 10:07 proftpd-mod-mysql_1.3.3a-6squeeze4_i386.deb
-rw-r--r--  1 root src   347204 Oct  2 10:07 proftpd-mod-odbc_1.3.3a-6squeeze4_i386.deb
-rw-r--r--  1 root src   345522 Oct  2 10:07 proftpd-mod-pgsql_1.3.3a-6squeeze4_i386.deb
-rw-r--r--  1 root src   344882 Oct  2 10:07 proftpd-mod-sqlite_1.3.3a-6squeeze4_i386.deb

Il vous reste plus qu’à installer les paquets dont vous avez besoins avec dpkg -i .

Pour tester que nous n’avons pas fait tout ceci pour rien . Il faut aller sur cette page :

name proftpd[16326] name-01.domain.com (xxx.x.xx.xxx.rev.toto.net[::ffff:xx.x.xxx.xx]): mod_clamav/0.11rc: Virus 'Eicar-Test-Signature' found in '/path/de/chroot/user/eicar.txt'

Dans les logs de filezilla

commande :	STOR eicar.txt
Réponse :	150 Opening ASCII mode data connection for eicar.txt
Réponse :	550 Virus Detected and Removed: Eicar-Test-Signature
Erreur :	Echec du transfert du fichier

SOURCES

http://www.howtoforge.com/how-to-integrate-clamav-through-mod_clamav-into-proftpd-for-virus-scanning-on-debian-lenny

http://wiki.debian.org/PhpLdapAdmin

http://irp.nain-t.net/doku.php/205ftp:900pureftpd:30_ftp_iptables

http://www.openldap.org/doc/admin24/backends.html

Remarque

Dans la configuration LDAP il semblerait que le backend bdb soi recommandé à la place de la hdb .

CONCLUSION

Proftpd est un serveur FTP plutôt simple à mettre en place avec une documentation claire . Son intégration avec LDAP se fait aisément même sans trop connaissance avancés . Par rapport à d’autres serveurs FTP comme pure-ftpd , ils se valent aux points de vue des options . Cependant la documentation coté proftpd est plus nette et plus complète . La communauté semble également être plus présente . En ce qui concerne vsftpd je ne le connais pas .

A mon avis tous les serveurs FTP se valent par contre ce qui pourra les dé-partager est la sécurité.

La dernière faille connu sur proftpd est décrite ici

http://www.certa.ssi.gouv.fr/site/CERTA-2011-AVI-635/CERTA-2011-AVI-635.html


Retour à La Une de Logo Paperblog

A propos de l’auteur


Lmns972 3 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte