Catégories
Open-source Planet-libre Reseau

Mounter son espace de sauvegarde FTP en local sous Debian

Voici une rapide explication pour « mounter » dans un répertoire local un espace de sauvegarde FTP. J’ai utilisé cette procédure pour accéder à mon espace de stockage gratuit de 10 Go sur mon serveur Dedibox DC sous Debian Squeeze.

On commence par récupérer les paramètres de son serveur FTP

On a besoin:

  • du nom de la machine hébergeant le serveur FTP (host)
  • un compte utilisateur (login)
  • un mot de passe (password)

Chez Online.net, ces informations se trouve dans la console d’administration:

Une fois ces informations sous le coude on peut passer à l’étape suivante.

On prépare le terrain

On commence par installer Fuse qui va permettre de faire le montage du répertoire en FTP (toutes les commandes suivantes sont à saisir dans une console root):

[cc lang= »bash »]

apt-get install curlftpfs

[/cc]

Ensuite on créer le répertoire local (/mnt/backup dans mon cas) à partir duquel le répertoire FTP distant sera visible.

[cc lang= »bash »]

mkdir /mnt/backup

[/cc]

On teste que tout fonctionne en ligne de commande:

[cc lang= »bash »]

curlftpfs login:password@host /mnt/backup/

[/cc]

Vous devriez pouvoir lire, écrire et effacer des fichiers dans le répertoire /mnt/backup/.

On démounte le répertoire avec la commande suivante:

[cc lang= »bash »]

umount /mnt/backup

[/cc]

On automatise le tout

On lieu d’avoir à saisir à la main ou dans un script de démarrage la commande curlftpfs, le plus simple et transparent est d’utiliser le fichier /etc/fstab qui va mounter automatiquement l’espace FTP au démarrage de votre machine.

Pour cela, il faut d’abord créer un fichier /root/.netrc contenant les informations sur votre serveur FTP, donc après un « vi /root/.netrc », il faut ajouter la section suivante:

[cc lang= »bash »]

machine host

login login

password password

[/cc]

Puis une petite sécurité sur ce fichier:

[cc lang= »bash »]

chmod 600 /root/.netrc

[/cc]

Ensuite on édite le fichier /etc/fstab et on y ajoute la ligne suivante:

[cc lang= »bash »]

curlftpfs#host /mnt/backup fuse _netdev,allow_other,uid=1000,gid=1000,umask=0022 0 0

[/cc]

Note: il faut remplacer uid=1000,gid=1000 par les valeurs données par le résultat de la commande « id ».

Un petit…

[cc lang= »bash »]

mount -a

[/cc]

… plus tard et votre répertoire FTP distant devrait être accèssible depuis votre répertoire local /etc/backup !

Source: Linux Config

Catégories
Open-source Reseau Web

Simuler des connexions HTTP/FTP simultanées

Curl-Loader est un logiciel libre, écrit en langage C (le meilleur langage pour développer des applications réseaux), permettant de simuler sur votre serveur WEB ou FTP un grand nombre de connexions simultanées. Nous allons dans ce billet voir comment installer, configurer et tester ce logiciel dans un environnement GNU/Linux (Ubuntu 9.10 dans mon cas).

Installation de Curl-Loader

Comme il n’est pas encore (des volontaires ?) disponible dans les dêpots officiels, il va falloir compiler Curl-Loader à la main. Avant d’aller plus loin, on installe des pré-requis système:

[shell]

sudo aptitude install build-essential openssl libssl-dev

[/shell]

On commence par récupérer la dernière version disponible (0.51 au moment de l’écriture de ce billet):

[shell]

wget http://downloads.sourceforge.net/project/curl-loader/curl-loader/curl-loader-0.51/curl-loader-0.51.tar.gz?use_mirror=sunet

[/shell]

On décompresse et compile le tout:

[shell]

tar zxvf curl-loader-0.51.tar.gz

cd curl-loader-0.51

make optimize=1

[/shell]

On finalise l’installation avec:

[shell]

sudo make install

[/shell]

Configuration de Curl-Loader

Tout est centralisé dans un fichier de configuration. Quelques exemples de fichiers de conf sont fournis avec les sources dans le répertoire ./conf-exemples/.

Le plus simple est de partir du fichier ./conf-exemples/bulk.conf:

[shell]

cp ./conf-exemples/bulk.conf ~/curlloader.conf

cd ~

[/shell]

On édite le fichier pour l’adapter à son besoin (documentation exhaustive disponible sur le site officiel) :

[shell]

vi curlloader.conf

[/shell]

[shell]

########### GENERAL SECTION ################################

BATCH_NAME= bulk

CLIENTS_NUM_MAX=200

CLIENTS_RAMPUP_INC=5

INTERFACE=eth0

NETMASK=24

IP_ADDR_MIN= 192.168.29.148

IP_ADDR_MAX= 192.168.29.148

IP_SHARED_NUM=1

CYCLES_NUM= 100

URLS_NUM= 1

########### URL SECTION ####################################

URL=http://www.monserveurweb.com/

URL_SHORT_NAME="MonServeurWeb"

REQUEST_TYPE=GET

TIMER_URL_COMPLETION = 5000

TIMER_AFTER_URL_SLEEP = 500

[/shell]

Utilisation de Curl-Loader

Attention à ne lancer Curl_Loader que vers un serveur qui vous appartient.
Dans le cas contraire, cela peut être considéré comme une attaque par dénie de service !

Il ne reste plus qu’a lancer Curl-Loader avec ce fichier de configuration:

[shell]

sudo curl-loader -f ~/curlloader.conf

[/shell]

Que va faire l’exécution de Curl-Loader avec notre fichier de configuration ?

On commence un cycle en envoyant sur le réseau 5 (CLIENTS_RAMPUP_INC) requêtes simultanées vers le serveur Web d’URL http://www.monserveurweb.com/(URL), puis 1 seconde plus tard, 5 requêtes de plus et ainsi de suite jusqu’à 200 (CLIENTS_NUM_MAX) requêtes simultanées. A la fin de ce cycle, on continu jusqu’à attendre le 100em cycle (CYCLES_NUM).

A la fin du test on a les informations suivantes qui s’affichent:

[shell]

Test total duration was 54 seconds and CAPS average 231:

H/F Req:24665,1xx:0,2xx:12332,3xx:12333,4xx:0,5xx:0,Err:0,T-Err:1,D:1ms,D-2xx:3ms,Ti:1343807B/s,To:56181B/s

H/F/S Req:0,1xx:0,2xx:0,3xx:0,4xx:0,5xx:0,Err:0,T-Err:0,D:0ms,D-2xx:0ms,Ti:0B/s,To:0B/s

Exited. For details look in the files:

– bulk.log for errors and traces;

– bulk.txt for loading statistics;

– bulk.ctx for virtual client based statistics.

– bulk.ops for operational statistics.

[/shell]

Pour la le lecture des rapports, voici un petit mémento:

  • CAPS=call attempts per seconds;
  • run-time in seconds;
  • requests num;
  • 1xx success num;
  • 2xx success num;
  • 3xx redirects num;
  • client 4xx errors num;
  • server 5xx errors num;
  • other errors num, like resolving, tcp-connect, server closing or empty responses number (Err);
  • url completion time expiration errors (T-Err);
  • average application server Delay (msec), estimated as the time between HTTP request and HTTP response without taking into the account network latency (RTT) (D);
  • average application server Delay for 2xx (success) HTTP-responses, as above, but only for 2xx responses. The motivation for that is that 3xx redirections and 5xx server errors/rejects may not necessarily provide a true indication of a testing server working functionality (D-2xx);
  • throughput in, batch average, Bytes/sec (T-In);
  • throughput out, batch average, Bytes/sec (T-Out);
Catégories
Blog Open-source

Backup complet de votre blog WordPress

J’imagine que vous faites des sauvegardes régulières de votre blog… Si ce n’est pas le cas, voici la méthode que j’utilise pour sauvegarder mon bébé.

Un blog WordPress est composé d’une base de donnée (SQL) et d’un ensemble de fichiers stockés sur un serveur (HTTP/FTP). Il faut donc penser à sauvegarder ces deux éléments.

Sauvegarde de la base de donnée

Le plus simple est d’utiliser le plugins WordPress DB Backup disponible ici. Il suffit ensuite de selectionner les tables à sauvegarder (le plus simple est de toutes les sélectionner) et de programmer backup automatique (toutes les heures, jours ou semaines). Le backup peut être stocké directement sur votre serveur (un peu risqué si celui-ci plante) ou envoyé sous la forme
d’une archive Sql.Gz sur une adresse mail.

Sauvegarde des fichiers

J’utilise un méthode automatique pour effectuer cette sauvegarde (sur ma machine Linux Ubuntu).

Après avoir installé l’utilitaire lftp (le meilleur client FTP en ligne de commande):

sudo apt-get install lftp

J’utilise la commande suivante:

lftp -f blog.lftp

Avec comme fichier blog.lftp:

[shell]

set ftp:list-options -a
set cmd:fail-exit true
set ftp:ssl-allow false
set ftp:passive-mode on
set net:timeout 10
set net:max-retries 2
set net:reconnect-interval-base 5
set net:reconnect-interval-multiplier 1

open -p 21 logindublog:passworddublog@ftpdublog.com
lcd ~/backup/blog/
mirror -e -x public_html/blog/avatars/

quit

[/shell]

Cette commande va:

  1. Ouvrir une connection FTP vers mon serveur ftpdublog.com en utilisant le login logindublog et le mot de passe passworddublog
  2. Faire un mirroir du répertoire /blog de mon serveur vers le répertoire local ~/backup/blog/ (à créer)
  3. Lors du mirroir, on supprime du répertoire local les fichiers qui n’existent plus sur le serveur
  4. On ne backup pas les avatars qui sont dans le répertoire public_html/blog/avatars/

La première sauvegarde risque de prendre un bon bout de temps (surtout si votre blog date un peu). Mais en suite, comme seul le différentiel entre votre serveur et votre répertoire local sera transféré cela ira beaucoup plus vite.

Pour automatiser le lancement de cette commande tout les jours à 1 heure du matin:

# crontab -e

1 0 * * * /usr/bin/lftp -f blog.lftp > /dev/null 2>&1

Et voila, vous pouvez attendre le crach de votre serveur hébergé de manière plus sereine…

Catégories
Open-source Planet-libre Systeme

Un serveur FTP en 5 minutes chrono

Nous allons dans ce billet détailler l’installation d’un serveur FTP sur une machine tournant sous Ubuntu 10.04 (la procédure marche aussi sur d’autres versions). Le serveur FTP choisi est Pure-ftpd (je l’utilisai déjà sous FreeBSD et il est d’une stabilité à toutes épreuves).

> top chrono

Installation de Pure-ftpd

Il y a plus dur:

sudo apt-get install pure-ftpd pure-ftpd-common

Suite à cette commande, le serveur FTP sera lancé automatiquement. L’ensemble des fichiers de configuration de Pure-ftpd se trouve dans le répertoire suivant: /etc/pure-ftpd/

Il faut ensuite créer l’utilisateur/groupe système avec lequel le serveur FTP sera lancé:

sudo groupadd ftpgroup

sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser

Configuration de Pure-ftpd

De base, Pure-ftpd base son authentification sur le PAM système puis sur un fichier de donnée interne. Personnellement et pour des raisons de sécurité, je préfère désactiver l’authentification par PAM. Pour cela il faut éditer le fichier conf/PAMAuthentication et remplacer la ligne yes par no:

# sudo vi /etc/pure-ftpd/conf/PAMAuthentication

no

# sudo vi /etc/pure-ftpd/conf/DontResolve

yes

Pour finir, il faut créer un lien symbolique pour activer l’authentification des utilisateurs virtuels :

# cd /etc/pure-ftpd/auth/

# sudo ln -s ../conf/PureDB 50puredb

Création d’un utilisateur FTP

Par exemple si vous voulez créer l’utilisateur ftp nicolargo dont le répertoire sera /home/ftp/nicolargo, il faut saisir les commandes suivantes:

sudo mkdir /home/ftp/nicolargo

sudo chown -R ftpuser:ftpgroup /home/ftp/nicolargo

sudo pure-pw useradd nicolargo -u ftpuser -g ftpgroup -d /home/ftp/nicolargo

Ces commandes vont avoir comme buts de créer un répertoire local puis de renseigner le fichier de configuration de Pure-ftp: /etc/pure-ftpd/pureftpd.passwd:

# sudo cat /etc/pure-ftpd/pureftpd.passwd

nicolargo:$1$ucgVifA0$HFoang9VssnUnErD3X4bj1:1001:1001::/home/ftp/nicolargo/./::::::::::::

Enfin il faut transofrmer ce fichier dans un format sécurisé et lisible par le serveur FTP (/etc/pure-ftpd/pureftpd.pdb):

sudo pure-pw mkdb

On relance alors le serveur pour que la configuration soit prse en compte:

sudo /etc/init.d/pure-ftpd restart

< fin du chrono ! (5 minutes !!! :))

Quelques commandes utiles…

Voici quelques commandes utiles à l’administration de votre serveur FTP.

Pour configurer le message affiché lors de la connexion des utilisateurs, il faut commencer par editer un fichier texte contenant le message:

# sudo vi /etc/motd.pure-ftpd

Bienvenue sur mon beau serveur FTP !

Puis ajouter le chemin de ce fichier dans le fichier /etc/pure-ftpd/conf/FortunesFile:

# sudo vi /etc/pure-ftpd/conf/FortunesFile

/etc/motd.pure-ftpd

Pour connaitre la liste des utilisateurs ayant un compte FTP:

# sudo pure-pw list

nicolargo /home/ftp/nicolargo

Pour changer le mot de passe d’un utilisateur:

sudo pure-pw passwd nicolargo

Pour supprimer le compte d’un utilisateur:

sudo pure-pw userdel nicolargo

Catégories
Open-source Reseau Systeme

Autoriser le FTP avec un firewall PF

Si comme moi, vous utilisé la couche PF (sous OS BSD) pour protéger votre réseau des attaques extérieures, la problématique de la compatibilité du protocole FTP avec la translation d’adresse NAT devrait se poser à vous.

Nous allons donc dans ce billet voir comment configurer votre Firewall PF comme un proxy FTP efficace.

Un peu de théorie…

Si vous avez déjà eu à coder des règles de Firewall pour le protocole FTP (actif ou passif), vous savez que cela nécessite l’ouverture d’un grand nombre de ports TCP. L’idée développé dans ce billet est de passer par un mandataire (un proxy hébérgé sur votre Firewall écoutant sur le port TCP 8021) qui va effectuer les requêtes FTP à la place de votre client.

FTP proxy - Nicolargo.png

Installation de ftp-proxy

ftp-proxy est un daemon fourni en standard avec les OS BSD. Pour le lancer au démarrage du Firewall, il faut ajouter les lignes suivantes à votre fichier /etc/rc.conf:

# FTP Proxy

ftpproxy_enable= »YES »

ftpproxy_flags= »-a @IP-PUBLIQUE« 

ou vous allez remplacer @IP-PUBLIQUE par l’adresse IP publique de votre Firewall. Il est possible de changer le port d’écoute par défaut de ftp-proxy en utilisant l’option -.

Pour lancer le daemon:

/etc/rc.d/ftp-proxy start

Configuration de PF pour utiliser ftp-proxy

La première chose est de configurer les règles de NAT et de PAT en utililisant les ancres pré-définies pour ftp-proxy. Pour cela, il faut ajouter les deux lignes suivantes dans la section NAT de votre fichier /etc/pf.conf.

nat-anchor « ftp-proxy/* »

rdr-anchor « ftp-proxy/* »

Nous allons ensuite forcer les paquets TCP de vos clients (venant de votre LAN) ayant comme port de destination 21 à être re-routé vers le daemon ftp-proxy qui écoute sur le port 8021.

rdr pass proto tcp from any to any port 21 -> 127.0.0.1 port 8021

Ensuite, on autorise dans la section règles de votre fichier /etc/pf.conf, les flux FTP partant de votre Firewall.

anchor « ftp-proxy/* »

pass out proto tcp from self to any port 21

Conclusion

Voici donc un moyen simple et efficace de gérer vos connections FTP sortantes. ftp-proxy peut également être utilisé pour gérer les accès entrants vers un serveur FTP hébergé sur votre réseau local. J’y reviendrai certainement dans un prochain billet.

Catégories
Open-source Reseau

Wput, l’automatisation de l’upload FTP

Derrière ce titre très geek se cache en fait un article sur un petit utilisatire bien pratique que je viens de découvrir: Wput.

Wput est à l’upload ce que Wget est au download.

Il permet d’uploader un/plusieurs fichiers depuis une machine vers un serveur FTP.

Installation de Wput

La plupart des distribution Linux incluent ce logiciel dans leur gestionnaire de packages. Par exemple pour l’installer sous Ubuntu, il suffit de taper la commande suivante:

sudo apt-get install wput

Si ce ,n’est pas le cas, vous pouvez toujours le comiler depuis les sources en suivante la procédure suivante:

cd /usr/src
wget http://mesh.dl.sourceforge.net/sourceforge/wput/wput-0.6.1.tgz
tar zxvf wput-0.6.1.tgz
cd wput-0.6.1
./configure
make
sudo make install

Utilisation de Wput

L’utilisation standard est la suivante:

wput fichier.tgz ftp://login:password@serveurftp.com/upload/

Tout comme Wget, de nombreuses options sont disponibles (voir le man pour une liste complète):

  • -b: pour passer en background le processus
  • -l <RATE>: limite la bande passante utilisée (ex: -l 1M : limite à 1 Mbps)
  • -Y <PROXY>: utilise un proxy (HTTP ou SOCKS)

Et voili, bon week-end (3 jours youpi) à tous !

Catégories
Open-source Reseau

FTP actif versus FTP passif

Je me pose régulièrement la question de la différence entre les deux modes de transfert de fichiers FTP: actif ou passif. Voici donc un billet mémo à destination des petites têtes (dont je fais parti…).

Le mode FTP actif

C’est le mode par défaut des clients FTP. Le client établi dans un premier temps une session TCP sur le port 21 (FTP) du serveur (« control channel »). Une fois la session établie et l’authentification FTP acceptée, c’est le serveur qui établi une session TCP (avec le port source 20, FTP-DATA) vers un port dynamique du client (« data channel »).


FTP-actif---Nicolargo.png

Le mode FTP passif

Il faut garder en mémoire que le mode passif est conseillé à partir du moment ou les clients peuvent se trouver derrière un Firewall/NAT. En effet dans ce mode, toutes les initialisions de sessions TCP se font à partir du client.

Comme pour le FTP actif, le client établi une première session TCP sur le port 21 (FTP) du serveur (« control channel »). Une fois la session établie et l’authentification FTP acceptée, on demande au serveur de se mettre en attente de session TCP grâce à la commande PASV. Alors le client peut établir une seconde session TCP sur un port dynamique vers le serveur (« data channel »).

Le numéro de port dynamique est transmis du serveur vers le client suite à la commande PASV. On peut réduire la plage de port en configurant le serveur FTP. Par exemple, pour le serveur pro-ftpd:

# vi /usr/local/etc/proftpd.conf

PassivePortRange 30000 32000


FTP-passif---Nicolargo.png

Pour les fans, vous pouvez consulter la RFC du protocole FTP (en français).