Pure-ftpd accepte par défaut les connexions anonymes, si un utilisateur nommé ftp
existe, avec son répertoire /home/ftp
. Si ces conditions ne sont pas remplies, il n'y aura pas d'accès anonyme possible. Cependant, mieux vaut signaler explicitement que l'on n'en veut pas, avec le paramètre -E
.
Depuis l'avènement de l'internet à « haut débit » (1998 à peu près), le débit « upload » a toujours été inférieur au débit « download », considérant que l'internaute est un consommateur et pas un acteur (ce qui est hélas trop souvent vrai). Il nous faut nous contenter en moyenne de 100 Ko/s en upload, et il faut bien voir que notre upload sera le débit maximal de notre serveur FTP qui ne sera donc pas une bête de course. Qui plus est, si le serveur doit fonctionner alors qu'il y a des clients actifs sur notre réseau local, il faudra partager cette bande passante dérisoire.
Si nous voulons faire simple, nous pouvons limiter le débit du serveur avec le paramètre -T
. Cette option peut limiter les débits «up » et « down ». Les limites sont données en Ko/s, séparés par un :
. Par exemple, -T :60
ne limitera pas l'upload sur le serveur, mais limitera le download à 60 Ko/s.
Ce paramètre s'applique à tous les utilisateurs. Nous avons suggéré qu'il est possible de faire plus fin en définissant des limites à chaque utilisateur, avec la commande pure-pw
.
Le lecteur attentif aura pu constater que, par défaut, le serveur accepte 50 clients simultanés. Il est sans doute judicieux de limiter ce nombre, avec le paramètre -c
. De même qu'il est possible de limiter le nombre de connexions simultanées par client (paramètre -C
).
Au final, notre ligne de commende pourrait être de la forme :
# pure-ftpd -j -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -T :30 -c 3 -C 2
Par défaut, pure-ftpd
va envoyer ses logs sur le syslog
. Si l'on souhaite récupérer ces logs dans un fichier séparé, il faudra donc configurer notre système de logs.
Il existe cependant le paramètre -O
(déjà vu plus haut) qui permet de créer un fichier propre aux transferts. Par exemple -O clf:/var/log/pure-ftpd/transfer.log
comme fait par défaut dans l'installation Debian. Dans ce cas, les transferts seront consignés dans ce fichier. Le reste des informations que pure-ftpd
pourrait envoyer seront à rechercher dans les messages du syslog
.
Pure-ftpd sait faire du FTPES (FTP over explicit TLS/SSL). Dans cette configuration, les connexions sont chiffrées par TLS, ce qui évite entre autres le passage de l'authentification en clair.
Le système est simple (et peu souple). Il faut créer un certificat x509 qui doit obligatoirement s'appeler pure-ftpd.pem
et se trouver dans /etc/ssl/private/
. Pour le construire, il faut bien sûr avoir installé openssl
et utiliser la commande suivante :
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
Ce certificat auto-signé sera donc valide 7300 jours, c'est peut-être beaucoup…
Generating a 2048 bit RSA private key ....................................................................+++ ..................................................................................................................+++ writing new private key to '/etc/ssl/private/pure-ftpd.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:BdR Locality Name (eg, city) []:Marseille Organization Name (eg, company) [Internet Widgits Pty Ltd]:IRP Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:ftp.nain-t.net Email Address []:irp@nain-t.net
Il faudra aussi :
# chmod 600 /etc/ssl/private/pure-ftpd.pem
Enfin, le paramètre -Y
spécifiera l'utilisation de TLS. Pour la suite des manipulations, nous adopterons -Y 1
qui laisse le choix au client d'utiliser ou non TLS. -Y 2
n'autorisera pas les connexions sans TLS.
Pour tester TSL, mieux vaut créer dans le gestionnaire de sites de FileZilla : FTPES est donc un mode de transfert FTP explicitement sécurisé. Ce mode introduit des commandes supplémentaires qui dont définies dans les RFC 2228 : This document defines extensions to the FTP specification STD 9, RFC 959, “FILE TRANSFER PROTOCOL (FTP)” (October 1985). These extensions provide strong authentication, integrity, and confidentiality on both the control and data channels with the introduction of new optional commands, replies, and file transfer encodings.
La connexion suivant ce mode fera apparaitre : Si nous acceptons ce certificat, la connexion s'établit et dans la fenêtre du protocole nous observons :
Statut : Connexion à 192.168.10.76:21...
Statut : Connexion établie, attente du message d'accueil...
Réponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
Réponse : 220-You are user number 1 of 3 allowed.
Réponse : 220-Local time is now 17:32. Server port: 21.
Réponse : 220-This is a private system - No anonymous login
Réponse : 220-IPv6 connections are also welcome on this server.
Réponse : 220 You will be disconnected after 15 minutes of inactivity.
Commande : AUTH TLS
Réponse : 234 AUTH TLS OK.
Statut : Initialisation TLS...
Statut : Vérification du certificat...
Commande : USER test
Statut : Connexion TLS/SSL établie.
Réponse : 331 User test OK. Password required
Commande : PASS ********
Réponse : 230-Your bandwidth usage is restricted
Réponse : 230-User test has group access to: ftpgroup
Réponse : 230 OK. Current directory is /
Commande : SYST
...
Le client FileZilla réclame une authentification TLS, qui lui est accordée, et la connexion TLS est établie avant le passage du mot de passe. Nous pouvons d'ailleurs vérifier avec notre wireshark
habituel :
No. Time Source Destination Protocol Info
1 0.000000 192.168.0.16 192.168.10.76 TCP 41198 > ftp [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=348647 TSER=0 WS=7
2 0.045419 192.168.10.76 192.168.0.16 TCP ftp > 41198 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1368 TSV=106073221 TSER=348647 WS=5
3 0.045442 192.168.0.16 192.168.10.76 TCP 41198 > ftp [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=348651 TSER=106073221
4 0.101193 192.168.10.76 192.168.0.16 FTP Response: 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
5 0.101210 192.168.0.16 192.168.10.76 TCP 41198 > ftp [ACK] Seq=1 Ack=320 Win=6912 Len=0 TSV=348657 TSER=106073234
6 0.101333 192.168.0.16 192.168.10.76 FTP Request: AUTH TLS
7 0.148394 192.168.10.76 192.168.0.16 TCP ftp > 41198 [ACK] Seq=320 Ack=11 Win=5792 Len=0 TSV=106073246 TSER=348657
8 0.150079 192.168.10.76 192.168.0.16 FTP Response: 234 AUTH TLS OK.
9 0.150989 192.168.0.16 192.168.10.76 FTP Request: \026\003\002\000O\001\000\000K\003\002O\005\322\335\335d\2319U4\303[8\311\264\223\304\320\025\030\244\357\271d\202\330\361\373Rg)@\000\000$\0003\000E\0009\000\210\000\026\0002\000D\0008\000\207\000\023\000f\000/\000A\0005\000\204\000
10 0.215860 192.168.10.76 192.168.0.16 FTP Response: \026\003\001\000J\002\000\000F\003\001O\005\322\335H\315\246\005\351[\346.\263\033\301`\030\216"7\324gba|\021\350\307*+\201\267 \3648Y\335\257\204,.\334\253C\232x\f\217\265\2351.T0Vo\370\235\206\267I\333\231yY\0003\000\026\003\001\004V\v\000\004R\000\004O\000\004L0\202\004H0\202\0030\240\003\002\001\002\002\t\000\237s\0326\002\241\304y0
11 0.218216 192.168.10.76 192.168.0.16 FTP Response: \033\343:2 \374f\226%\360E\031\322j\240#\316\303\244\252\337\260\001\221\247U\363\224\223\030\302q\005HG\200\367\0166\2640\016\341\337M\2550\004\211$N\245\376E\227\302PK\332\270\006\250zL\211&-\346\263\264\022\377i\221\201\315\202\032z\253B\356y\233i\317IjU\337d\031'\016{\020G\022\246\351Y\317\210\276u\35395hC\001\000\001\323\345\000\021.\032l\332\214\3600x\025\255\300\327\374\342\343+\275\332\005\234\220!\376`\255\210\370\021"\243\301P\261gF#L\253\341\3465\313>\265FV\200Qs\365\253\274s\356D,X'
12 0.218229 192.168.0.16 192.168.10.76 TCP 41198 > ftp [ACK] Seq=95 Ack=2071 Win=12544 Len=0 TSV=348669 TSER=106073260
13 0.226760 192.168.0.16 192.168.10.76 FTP Request: \026\003\001\000\206\020\000\000\202\000\200\b\322Xk\344O\275\330\251\032\257?\241\251\243!\361\250\001z9\342\342\205\346\241\0356\347V?\v\a\242\277\266+\027\242`}\300W\231\240\234&\357\v\3113\001v/&\211\023aRP
14 0.226773 192.168.0.16 192.168.10.76 FTP Request: \024\003\001\000\001\001
15 0.227819 192.168.0.16 192.168.10.76 FTP Request: \026\003\001\0000H\232_k%t\232=,\324\251\026\035\277\262F\224C\005\270>\355\225h\234R\221\177\266z\317\233W\310p\261\255\036\275l\367\212#\3378\323\271\027
16 0.276986 192.168.10.76 192.168.0.16 TCP ftp > 41198 [ACK] Seq=2071 Ack=240 Win=6880 Len=0 TSV=106073279 TSER=348670
17 0.279681 192.168.10.76 192.168.0.16 FTP Response: \024\003\001\000\001\001\026\003\001\0000\350%k\216\327\226|N\au\203o\272\033\333V\233b\2226Eg\002\332o\302`\206\230\032\tUKrR\217$u\254z9c\357\002\233K\f=
18 0.281552 192.168.0.16 192.168.10.76 FTP Request: \027\003\001\000\260\332\316[\341R`5\332\233\vU\365\275\033\306a.h\251A\0310\a\201\347rI<)b\312-0.r\361\200\266\255\254\276\367\323\a\332xe\365\331\206\334U\301\300#q:\342>\2525\243j\274J\336\220\022@\221b\373\240\202-C?,~\003VE\334\242
19 0.331704 192.168.10.76 192.168.0.16 FTP Response: \027\003\001\000@o\a+\303\333)l+XZ\260\260\243|)/f\304Kv\262S`\274\273\304\200\316\215u\264\tR\000\231\240\021v
20 0.331923 192.168.0.16 192.168.10.76 FTP Request: \027\003\001\001\020\2518:\203K:y\343:\t\016R\002?+_\340F F\005lO\267*\252\274\202p\325\2746Q$3\310\335\252\261\v\371\037\313\344e\207\027\3633\2244\334\021I\205gHVn\315*\bj\331\0230\203\314\200i\231\314u'-\315\321\271F#\336\243\353\242GT:\vy\235\251\032\216\324\202\026\t[\361\217/\020\a\376]\252\247\306\240\205\225\215K\350<\274\307K\301M\333\024/nn\342,\}k\247\360m\271\245G\372\216\222\021\336\264\251c\b\326\020\t\237\346\366u\217\257\305\201\034[{\\202\376H!w\332>\351\301
21 0.389619 192.168.10.76 192.168.0.16 FTP Response: \027\003\001\000@B\314\337\266\312\225\027\f\220U\265fx\244\026\330Y\307\240\213n\251\272\300\002\372\307\232I\355\360T\317\301{,\320\265\006\225T\002'h\000\220\361k\270\337.\330\276\2309F\203)\366\336\246e\310]
22 0.391778 192.168.10.76 192.168.0.16 FTP Response: \027\003\001\000P\023\326\265\242\326V\0005\360\235g\003\323\331x\3370\376\335\036\234S-,\342\310y\224\262/!Pv\232\250|\350\3538ue\341\257\006-i\232o\v\260\265\177\372\322n\265$2\235\a,\320\245\024\005I\306\335?\366t\250\324u\221\326\200\354x\231
23 0.393748 192.168.10.76 192.168.0.16 FTP Response: \027\003\001\000@\244\377\364\215\375\212\346\241\306\257\224\326\307\321\346\242n\271!K?^\244\220i]\276\312\\340\316N(\017 G\220j\177\004M\334D\177\267\324\027\312\t\203\351\036\344c\240M\314\300\364Tt&\341\245
24 0.394575 192.168.0.16 192.168.10.76 TCP 41198 > ftp [ACK] Seq=751 Ack=2422 Win=12544 Len=0 TSV=348686 TSER=106073307
25 0.394665 192.168.0.16 192.168.10.76 FTP Request: \027\003\001\000@\315>k\375\375*\357\035\262^~\224\311M\322\332\270uW\307\035\356P\b\256\317\313\000\b\215}\322\273?\300kN\f\244h\376g(O\334VeU\322\310\262\236O\323\027\374g\323M):\254\265\177
26 0.444358 192.168.10.76 192.168.0.16 FTP Response: \027\003\001\0000-\216#1H\234\266\355\244\036\311\f?\320\237x\226\246\005\330p\252(\035\223\2420\243S\316\372\b~'[\325r\302\361\322\254\034\002\243\215\361\300\377
27 0.444560 192.168.0.16 192.168.10.76 FTP Request: \027\003\001\000\240\3166\351\033\372a\271\025\177,\213\255\020\206\000Z\344\334\243\2631\035\236o]\365\222`\233V
28 0.493829 192.168.10.76 192.168.0.16 FTP Response: \027\003\001\0000\212y\017\v\245\237\252O\246\zh*0\364\037\233\241`%a\261\321I\f}9z\354-QMH\236K\222#\336I\326H\212~/\227\026X
29 0.493986 192.168.0.16 192.168.10.76 FTP Request: \027\003\001\000\340\024d,D\244;\250\236{\326\217h-H+\240\206eA\307\375u\027\311\216\232\363\202\243\246\377\343\371\263\003Z\033Fj\326\363X]\272\265\241=;\257|\226\350\351P\320\215Q-\200]\004\256q\2206?\350\370ca\257\246'{\223j\v\003\300\311\274\033\217\025\346k\216\353$\251V\327\355\240\262\261Q\236\377H\341\370\022\312\3333\340\212LI\000\212\354\370 H\373\342\035\2756\336&?\372k\232:\231\266\372qQ\206"N\345qzv2\344bR\342\375\242E\226$
30 0.544508 192.168.10.76 192.168.0.16 FTP Response: \027\003\001\000P\004u\357\003\344\262\232\252\3209vZL\024\222\016\260\270>5\016\256\271Z\274\251\376p\344FU\236-\263\211\210u\301\035\206C\361_-\237\225\351]\271FR\017\027\222\201\032\225@\317\351tN@\252\337]hH\266\243\312\360\340:k\3600
31 0.577128 192.168.0.16 192.168.10.76 TCP 41198 > ftp [ACK] Seq=1214 Ack=2613 Win=12544 Len=0 TSV=348705 TSER=106073345
A partir du moment où Response: 234 AUTH TLS OK
, tous les échanges FTP sont chiffrés.
Il faut s'en souvenir… Dans le cas d'un mode passif, la Commande : PORT 192,168,0,16,159,10
va être chiffrée. Si ça ne pose pas de problème au client FTP qui sait le déchiffrer, le conntrack
de Netfilter
risque d'avoir plus de mal s'il est sollicité.