Skip to content

Installation d’un serveur Ubuntu

Je reprends ce blog à l’occasion du démarrage d’un serveur Ubuntu dont j’ai besoin pour mon travail.

Je souhaite y héberger SugarCRM, une application de gestion de la relation client.

Mon choix s’est porté sur un serveur RPS de OVH. J’ai choisi de démarrer par le serveur d’entrée de gamme: Processeur Atom 1,60 Ghz et 512 Mo de RAM avec un disque ISCSI de 10 Go. Ce serveur modulaire est économique et facilement évolutif mais je m’interroge sur sa performance.

Une fois ma commande faite auprès de OVH, j’ai reçu par email l’adresse IP  du serveur et le mot de passe root, ce qui m’a permis de me connecter avec Putty en mode console.

Mon choix s’est porté sur Ubuntu 8.4 LTS en attendant la prochaine sortie de Ubuntu 10.4 LTS pour laquelle une bêta est actuellement disponible.

Je pars de l’idée que cette configuration devrait être déjà plus confortable qu’un hébergement mutualisé qui ne me donnait pas satisfaction en terme de temps de réponse.

Je vais dans ce blog retracer mes actions de prise en mains du serveur.

J’ai commencé par mettre à jour les dépôts (apt-get update) puis j’ai installé l’excellent gestionnaire de fichiers en console Midnight Commander avec un apt-get install mc.

Je peux maintenant parcourir l’arborescence et m’offrir une mise à jour de la distribution avec apt-get upgrade qui déclenche 114 mises à jour.

Mes premières actions seront

  1. d’y installer le serveur web apache avec le moteur php et les bases de donnée MySQL,
  2. de le sécuriser avec un parefeu et une surveillance des tentatives d’intrusions,
  3. d’y créer un utilisateur pour éviter de me connecter en root,
  4. de paramétrer les hôtes virtuels du serveur web pour héberger des domaines,
  5. d’y installer le script phpmyadmin pour gérer les bases MySQL, en sécurisant l’accès au script,
  6. d’activer l’envoi des emails par la fonction mail() de php.

J’aimerais en 24h pouvoir tester cette configuration de base avec SugarCRM.

Protéger le serveur apache des attaques DOS

J’ai lu avec intérêt l’article du blog de Bartounet et j’ai eu envie de reproduire la démarche. Par contre, j’ai commencé par créer la protection avant de simuler l’attaque. :-D

L’idée est de permettre au serveur web Apache de résister à une attaque DOS (Deny of Service). L’attaque DOS consiste à submerger le serveur web de requêtes jusqu’à que le serveur de puisse plus suivre et ne réponde plus aux requêtes normales.

Une attaque coordonnée à partir de plusieurs ordinateurs devient une attaque distribuée : DDOS.

Le module evasive ajoute cette protection à Apache de la façon suivante:

Les requêtes sont ignorées pour les adresses IP :

  • ayant déjà demandées la même page plusieurs fois par seconde
  • ayant fait plus de 50 requêtes sur le même processus enfant par seconde
  • ayant été déjà mises sur une liste noire.

L’installation du module se fait très simplement avec apt-get install libapache2-mod-evasive

Si vous avez installé le module info d’Apache, vous pourrez vérifier que le module est chargé mais qu’il n’y a encore aucune configuration. Par contre les directives du module sont présentées dans le module info d’Apache.

Il y a donc lieu de rajouter ces directives à /etc/apache2/apache2.conf

# paramètres pour le module evasive qui traite les attaques ddos
<ifmodule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSWhitelist 127.0.0.*,66.249.65.*
DOSLogDir « /var/log/evasive »
DOSSystemCommand « /bin/echo %s >> /var/log/apache2/evasive/evasive.log »
DOSEmailNotify monuser@mondomaine.fr
</ifmodule
>

Les erreurs sont donc loggées dans un répertoire et un fichier ad-hoc

Il y a lieu de créer ce répertoire avec sudo mkdir /var/log/apache2/evasive

Ensuite ne pas oublier de relancer apache avec sudo /etc/init.d/apache2 reload

Un prochain article testera les défenses ainsi créées.

Authentification SSH par cryptographie asymétrique

J’ai voulu franchir une étape supplémentaire pour sécuriser l’accès de mon serveur en activant l’authentification par clef publique et clef privée.cryptographie

Le principe de la cryptographie asymétrique est le suivant: la clef publique sert à encoder le message et la clef privée, protégée par un mot de passe, sert à décoder le message. De plus, la clef privée ne peut pas être déduite en partant de la clef publique.

Cet échange crypté permet d’établir la liaison entre client et serveur. Le reste de la communication utilise un mode symétrique moins gourmand en ressources CPU.

La sécurité est donc bien meilleure qu’avec un simple mot de passe puisqu’il est nécessaire d’être en possession de la clef privée pour se connecter au serveur.

Pour générer mon trousseau de clef publique et privée, j’ai utilisé par simplicité un PC sous Uuntu. J’aurais pu utiliser une autre distribution Linux. Le protocole SSH étant natif sous Linux, la génération de clef y est plus simple que sous Windows.

ssh-keygen -t dsa permet de générer les clefs en protégeant la clef privée par un mot de passe. Par défaut elles sont sauvegardées dans le dossier caché .ssh avec les noms suivants:

id_dsa correspond à la clef privée et id_dsa.pub à la clef publique.

ssh-copy-id -i ~/.ssh/id_dsa.pub <username>@<ipaddress> permet de copier la clef publique sur le serveur distant en adaptant les permissions des répertoires distants.

Il s’agit maintenant de tester la connexion ! Un ssh user@ipadresse devrait vous connecter sur votre serveur.

Vérifiez avec ifconfig que votre adresse ip a bien changé.

Il reste maintenant trois étapes:

  1. désactiver l’authentification par mot de passe sur le serveur
  2. transformer la clef privée en clef ppk, le format utilisé par putty, pour permettre une utilisation sous windows
  3. automatiser la connexion avec Pageant pour se connecter en deux clics.


Pour désactiver la connexion par mot de passe, il suffit d’éditer le fichier /etc/sshd_config pour modifier la ligne suivante:

PasswordAuthentication no

Pour utiliser la clef privée sous Windows avec Putty, il est nécessaire de l’importer dans Puttygen pour ensuite la sauvegarder avec l’extension .ppk utilisé par Putty.

Cerise sur le gateau, Pageant permet de gérer votre authentification sur votre bureau windows. Saississez une fois votre mot de passe de la clef privé et connectez vous plusieurs fois à votre serveur en deux clics sans ressaisir votre mot de passe.

J’utilise personnellement un raccourci dans la barre de lancement rapide de Windows qui, d’un seul clic, appelle Pageant et y charge ma clef privée pour ensuite appeler Putty.putty

Comme j’ai enregistré dans Putty mon username, dans la zone Auto-login username dans Connexion / data, il ne me reste qu’à cliquer sur le nom de ma session pour être connecté à mon serveur distant Linux.


Sécuriser les connexions sur un hotspot

putty


Il m’arrive régulièrement de me connecter sur des hotspot wifi non sécurisés et je n’aime pas l’idée que mes mots de passe de connexion ftp ou smtp soient envoyés en clair.

J’ai découvert que mon serveur dédié pouvait me servir de proxy pour sécuriser ma connexion très simplement.

L’idée est de mettre en place un proxy SOCKS en utilisant la fonction serveur de SSH.

Je suis impressionné par la simplicité et l’efficacité du principe.

Il suffit de paramétrer Putty pour que SSH fasse un transfert dynamique de port.

Dans connexion / SSH / tunnels, indiquer le port de proxy que vous souhaitez utilisez localement (8080 généralement) et cliquer sur dynamic puis sur add puis sauvegardez la connexion. Bien entendu vous avez également spécifié l’adresse de votre serveur dans la session.

Côté navigateur, il vous reste à indiquer votre proxy socks sur localhost et le port 8080.proxy firefox

Voilà, vous êtes connecté en SSH à votre serveur dédié et toutes vos requêtes web sur votre poste client passent maintenant par ce tunnel pour être exécutés par votre serveur.

Pour vérifier que votre connexion passe bien par le proxy, vérifier que votre adresse IP externe a bien changé .

L’avantage de ce proxy SOCKS est que vous pouvez l’utiliser pour vos connexions ftp ou votre messagerie avec les accès POP, IMAP ou SMTP.

Un client FTP comme Filezilla permet de déclarer le proxy SOCKS.



Pour vérifier que votre connexion FTP passe bien par le proxy, je vous propose de bloquer les port 20 et 21 sur votre modem / routeur.

Voila le dialogue que vous devriez ensuite obtenir sur filezilla:

Statut :    Connexion à ftp.monserver.com via le Proxy
Statut :    Résolution de l’adresse de localhost
Statut :    Connexion à 127.0.0.1:8080…
Statut :    Connexion établie avec le Proxy, négociation en cours…
Statut :    Connexion établie, attente du message d’accueil…
Réponse :    220 FTP Server ready.
Commande :    USER u123456
Réponse :    331 Password required for u123456
Commande :    PASS ********
Réponse :    230 User u123456 logged in
Statut :    Connecté

Evidemment, ce proxy SOCKS ne fait que relier deux machines et n’inclut aucune fonction de cache pour accélérer votre navigation sur le web mais il apporte une sécurité appréciable à vos transactions.

Identifier l’origine dun paquet

En effectuant un upgrade du système, apt-get m’a proposé une mise à jour de sudo, le programme qui permet d’accorder à certains utilisateurs la possibilité de lancer une commande en tant qu’administrateur.

J’ai été surpris parce que je lis toujours les annonces de mise à jour de sécurité sur la mailing list ubuntu-security-announce et aucune mise à jour n’avait été annoncée pour sudo.

Heureusement je suis également abonné à la mailing list ubuntu-fr@lists.ubuntu.com.

Découvrir Ubuntu avec l’appui de la communauté est un vrai plaisir et j’ai ainsi découvert l’usage de apt-cache policy, qui affiche des informations précises sur la priorité du paquet.

user@sd-12345:~$ apt-cache policy sudo
sudo:
Installé : 1.6.9p10-1ubuntu3.4
Candidat : 1.6.9p10-1ubuntu3.5
Table de version :
*** 1.6.9p10-1ubuntu3.5 0
500 http://fr.archive.ubuntu.com hardy-updates/main Packages
100 /var/lib/dpkg/status
1.6.9p10-1ubuntu3.4 0
500 http://security.ubuntu.com hardy-security/main Packages
1.6.9p10-1ubuntu3 0
500 http://fr.archive.ubuntu.com hardy/main Packages

La mise à jour n’était pas critique mais cela m’a permis de m’abonner également aux mises à jour de Hardy: hardy-changes.


Les alias pour gagner du temps

J’ai installé des alias pour me faciliter la vie et ne pas retaper les commandes apt-get.

Un alias est un raccourci pour une commande en console.

alias permet de lister les alias existants, tandis que alias exemple=’commande’ va créer un raccourci nommé exemple qui exécutera une commande.

unalias exemple supprimera l’alias créé.

Voila donc les alias que je me suis créé:

alias acs='apt-cache search'
alias agd='sudo apt-get dist-upgrade'
alias agg='sudo apt-get upgrade'
alias agi='sudo apt-get install'
alias agr='sudo apt-get remove'
alias agu='sudo apt-get update'
alias ban='sudo fail2ban-client status'


Les alias permettent de passer des arguments.

Ainsi alias ssh va exécuter la commande  sudo fail2ban-client status ssh pour lister le nombre d’échecs d’authentification sur le protocole ssh, ayant entrainés un bannissement temporaire de l’adresse IP tandis que sudo fail2ban-client status apache fera la même chose pour les échecs sur l’authentification d’apache.

user@sd-12345:~$ ban ssh
Status for the jail: ssh
|- filter
|  |- File list:        /var/log/auth.log
|  |- Currently failed: 0
|  `- Total failed:     567
`- action
|- Currently banned: 0
|  `- IP list:
`- Total banned:     80
user@sd-12345:~$


Pour être conservés d’une session à l’autre, les alias doivent être inscrits dans le fichier .bashrc .

lister l’historique du shell et gérer les fichiers à la souris

Un serveur dédié fait la part belle à la console.

Deux outils me semblent incontournables pour créer un confort en console:

midnight commander

Le gestionnaire midnight commander, qui s’installe avec sudo apt-get install mc est un excellent gestionnaire de fichier.

Il accepte même l’utilisation de la souris, ce qui n’est pas désagréable en console !

Et la commande history permet de lister toutes les commandes enregistrés dans le shell.

Très pratique, lorsque vous recherchez la syntaxe précise d’une commande netstat, par exemple, pour interroger vos connexions réseau, et que vous avez saisi il y a quelques heures:

history | grep netstat

Vous lister ainsi toutes les commandes netstat historisées:

user@sd-12345:~$ history |grep netstat
239  netstat -luntp
240  man netstat
241  netstat -i
242  man netstat
243  netstat -p
244  netstat -t
245  man netstat
246  netstat -h
247  netstat -t
248  netstat -p
249  netstat -i
250  netstat -l
251  netstat -luntp
252  sudo netstat -luntp
253  sudo netstat -u
254  sudo netstat -n
255  sudo netstat -t
256  sudo netstat -vat
257  sudo netstat -lunforeuse.dedibox.frtp
258  sudo netstat -p
259  sudo netstat -luntp
260  sudo netstat -t

La commande possède beaucoup d’options comme le précise le manuel: man history

Mesurer la vitesse de chargement d’une page web

J’ai trouvé ce site, WebWait, pour mesurer simplement et rapidement la vitesse de chargement d’une page web, sans avoir besoin de s’enregistrer au préalable.

Le site effectue dix requêtes consécutives et fournit la vitesse moyenne, la vitesse médiane et l’écart type.

Pour ce blog gnulinux.fr, voila le résultat :

http://www.gnulinux.fr. Moyenne: 3.81s. Médiane: 3.57s. Ecart type: 3.81s.

Je prévois de transférer ce soir un site web sur mon serveur et je pourrais comparer la performance d’un hébergement mutualisé et d’un hébergement sur serveur dédié.

sécuriser l’accès à phpmyadmin

Vous voulez que votre serveur devienne une serveur LAMP ? cet acronyme désigne les quatre applications qui font un serveur performant :

  1. un système d’exploitation Linux stable et garanti.  Si vous êtes sur ce site, vous êtes probablement déjà convaincu.
  2. un serveur web Apache pour servir les requêtes envoyés par le navigateur,
  3. une base de données MySQL ,
  4. un langage de script PHP pour générer des pages web dynamiques et gérer la base MySQL.

Il ne vous manquera alors qu’un outil pour administrer vos bases de données: phpMyAdmin, un utilitaire écrit en PHP.

L’avantage de phpMyAdmin n’est pas mince pour administrer un serveur : il permet de visualiser les tables et les champs de façon plus confortable qu’avec la console.phpmyadmin

L’inconvénient est que vos informations transitent par internet et peuvent être interceptées.

L’utilisation de SSL permet de sécuriser l’utilisation de phpMyAdmin.

Pour installer le paquet, simplement 

sudo apt-get install phpmyadmin


Phpmyadmin s’installe dans le repertoire /usr/share/phpmyadmin. Il est préférable d’installer ainsi phpMyAdmin plutôt que de le télécharger pour bénéficier de la gestion des dépendances. apt-get vous installera en même temps le paquet php5-mcrypt qui est indispensable au bon fonctionnement de phpMyAdmin.

Comme il est d’usage que les requêtes web se fassent sur le répertoire /var/www, un petit lien symbolique s’impose

placez vous dans le répertoire:

cd /var/www

, puis 

ln -s /usr/share/phpmyadmin phpmyadmin


Pour générer le certificat SSL, vous aurez besoin du paquet open ssl.

Pour générer le certificat et la clef, tapez

sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/apache2/server.crt -keyout /etc/apache2/server.key


Pour accéder à phpmyadmin, j’utilise tout simplement l’adresse de mon serveur, du type http://mon serveur.fr  et la fonction d’hôte virtuel. Je pourrais aussi utiliser tout simplement l’adresse IP.

Voici comment paramétrer l’hôte virtuel dans le fichier /etc/apache2/sites-available/phpmyadmin


NameVirtualHost *:443
NameVirtualHost *:80

ServerName monadresse.fr
redirect / https://monadresse.fr

ServerAdmin webmaster@localhost
ServerName monadresse.fr
DocumentRoot /var/www/phpmyadmin
SSLEngine on
SSLCertificateFile /etc/apache2/server.crt
SSLCertificateKeyFile /etc/apache2/server.key

Options FollowSymLinks
AllowOverride All

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all


../..

Commentaire : les requêtes sur le port 80 sont renvoyées vers le port 443 des transactions sécurisées HTTPS. Comme toujours, veillez à ce que votre parefeu autorise les requêtes vers le port 443.

Une dernière précaution serait de demander une authentification. A défaut, vous risquez uen attaque brute force.

Placez ce fichier .htaccess dans /usr/share/phpmyadmin

AuthName "Acces restreint"
AuthType Basic
AuthUserFile "/chemin/vers/.htpasswd"
Require valid-user


et placez dans un autre répertoire votre fichier .htpasswd avec l’encryptage md5 du mot de passe sous la forme user:motdepassecrypté.

Installer et sécuriser le serveur FTP

Un bon client ftp comme Filezilla peut utiliser quatre modes d’accès ftp pour le transfert des fichiers.

Le mode SFTP est le plus simple à utiliser avec un serveur dédié puisqu’il fonctionne out of the box, étant inclus dans le protocole SSH. Les échanges de données et surtout les informations de connexion sont cryptées puisqu’elles bénéficient du tunnel SSH.

A l’inverse le mode FTP de base expose vos informations de connexion (user et mot de passe) sur l’internet.

Il peut donc être utile de sécuriser les échanges avec les modes FTPS et FTPES : un logiciel de gestion de contenu comme WordPress peut utiliser ce mode sécurisé pour les téléchargements internes des extensions.

Cet article expose comment sécuriser les échanges de fichiers en mode FTP grâce au protocole SSL.

Je recommande proftpd comme serveur ftp : il fonctionne quasiment out of the box.

sudo apt-get install proftpd

Deux fichiers de configuration sont situés dans le répertoire /etc/proftpd.

Dans  le premier, proftpd.conf, je vous recommande de décommenter cette deuxième ligne.

# Use this to jail all users in their homes
DefaultRoot
~

Proftpd utilisera ainsi la commande chroot, qui permet de faire d’un répertoire la racine du système, pour empêcher les utilisateurs connectés en ftp de sortir de leur répertoire utilisateur.

Ensuite, il est prudent de  recharger proftpd avec sudo /etc/init.d/proftpd reload

Tel quel, proftpd devrait déjà fonctionner en mode normal et vous pouvez le vérifier avec votre client ftp préféré.

Pour activer la cryptographie SSL, vous aurez besoin du paquet openssl.

Ensuite, la commande sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/ssl/certs/proftpd.crt -keyout /etc/ssl/certs/proftpd.key vous générera le certificat SSL. Il suffit de répondre aux questions posée.

Le certificat est auto-signé et valable un an.

Il ne reste que deux étapes:

1 – décommenter la ligne suivante dans proftpd.conf pour charger le fichier de la configuration sécurisée de proftpd

#
# This is used for FTPS connections
#
Include /etc/proftpd/tls.conf

2 – décommenter les lignes du fichier tls.conf pour activer la connexion sécurisée

Enfin, ne pas oublier de relancer le serveur avec sudo /etc/init.d/proftpd reload

Dans fillezilla, utilisez le mode FTPES : un cadenas, en bas à droite, devrait vous confirmer que la connexion est cryptée.

Pour les distraits, je rappelle qu’il faut également que votre parefeu laisse passer les connections vers les port 20 et 21

Si vous utilisez iptables, voici les commandes

iptables -A INPUT -p tcp -i eth0 –dport ftp -j ACCEPT
iptables -A INPUT -p tcp -i eth0 –dport ftp-data -j ACCEPT