lundi 5 février 2007

Sécuriser son Ubuntu-server

L'intérêt d'avoir une Dedibox sur une classe C réputée niche à boulets, c'est qu'on est confronté à de nombreuses tentatives de hacks, DDOS et autres bruteforce quasi-quotidiennement. De quoi envisager une approche totalement paranoïaque de la sécurité du système ; voila quelques bonnes résolutions pour une Ubuntu-server.

Utilisez de vrais mots de passe

Minimum 8 caractères avec des lettres, des chiffres et de la ponctuation. Changez-en régulièrement.

Mieux, utilisez des clés SSH.

Désactiver l'accès root depuis SSH

Si quelqu'un arrivait à craquer votre accès SSH, il serait dommage qu'il arrive directement en root. Le moyen le plus simple pour éviter cela, c'est de désactiver l'accès SSH en root, en éditant le fichier /etc/ssh/sshd_config et en remplaçant la ligne :

PermitRootLogin: yes

par

PermitRootLogin: no

Changer le port SSH par défaut

Toujours dans le même fichier /etc/ssh/sshd_config, changer le numéro de port par défaut (22) par un autre :

Port 12345

Attention, ne prenez pas un numéro de port utilisé par un des autres services que vous utilisez sur le serveur (80 pour http, 25 pour smtp, 443 pour https, etc.)

Par exemple si vous déclarez le port 12345 pour SSH, vous vous connecterez ainsi sur la machine :

$ ssh user@machine.tld -p 12345

Note : Chaque modification du fichier sshd_config doit occasionner un redémarrage du service :

$ sudo /etc/init.d/ssh restart

Blacklister les IP malsaines

fail2ban est un petit utilitaire qui scanne les logs d'accès sshd et blackliste les IP depuis lesquelles émanent trop de tentatives de connexion échouées. Pour l'installer :

$ sudo apt-get install fail2ban

Plus d'infos sur la configuration et l'utilisation de fail2ban.

Interdire l'execution depuis /tmp

Le répertoire /tmp est souvent utilisé par les script-kiddies de tous poils pour y déposer leurs executables et les lancer. Une approche intelligente du phénomène est d'interdire l'execution de programme sur ce point de montage, en ajoutant la directive noexec à votre fichier /etc/fstab, comme dans cet exemple :

/dev/sda3   /tmp    ext3   noexec,nosuid     0    2

Si vous ne possédez pas de point de montage pour /tmp, pas de panique : vous allez pouvoir en créer un à l'arrache :-)

Attention :

  • Le gestionnaire de paquet apt a parfois besoin d'executer des scripts depuis cet emplacement lors de certaines mises à jour, chose que la drective noexec interdit;
  • MySQL a parfois besoin de créer des tables temporaires à cet emplacement pour traiter des requêtes coûteuses, chose que le nosuid interdit.

La manipulation décrite ci-dessus n'est donc à appliquer en connaissance de cause. (voire à ne pas appliquer du tout, en fait. Hem.)

Installer un firewall

Shorewall est un firewall simple à administrer, mais pas pour autant moins efficace que les autres. L'installation se fait par un traditionnel :

$ sudo apt-get install shorewall

Un très bon tutoriel de configuration du logiciel existe, n'hésitez pas à aller y faire un tour. L'idée est dans tous les cas de tout interdire par défaut et d'ouvrir les ports un à un en fonction de vos besoins.

Vérifier régulièrement la présence de rootkits

Chkrootkit scanne votre machine et y déniche les rootkits les plus répandus. Le programme s'installe facilement via la commande :

$ sudo apt-get install chkrootkit

Et se lance de cette façon :

$ sudo chkrootkit

Vous pouvez croner l'exécution du programme quotidiennement et vous en envoyer le résultat par email, en ajoutant cette ligne dans votre crontab :

0 3    *   *   *   chkrootkit 2>&1 | mail vous@domain.tld -s "Rapport de chkrootkit"

D'autres outils peuvent tout aussi bien faire l'affaire et peuvent être utilisés de façon complémentaires :

Ces deux outils sont disponibles dans les dépôts officiels Ubuntu et sont d'une utilisation très simple.

Note : si la commande mail est inconnue de votre système, installez le paquet mailx :

$ sudo apt-get install mailx

Emprisonnez vos programmes et utilisateurs

Chroot est un programme qui permet de littéralement emprisonner un utilisateur ou un programme dans un environnement désolidarisé du reste du système, ce qui garanti une réversibilité des dommages occasionnés.

Plus d'informations sur la commande chroot.

Encore quelques conseils de base

  • Mettez régulièrement à jour votre système
  • Utilisez toujours les dépôts officiels Ubuntu
  • N'installez jamais de softs pour tester en oubliant de les désinstaller par la suite
  • N'ouvrez de nouveaux services que si vous en avez réellement besoin
  • Surveillez vos logs
  • Surveillez régulièrement les process système
  • Monitorez votre machine, surveillez les comportements anormaux
  • Ne donnez jamais vos mots de passe
  • Touchez du bois

Les commentaires bouillent d'impatience de recevoir vos remarques, suggestions et contributions.

Edit : Prise en compte de certains commentaires judicieux.

Edit 2 : JJL pose une vraie question : Ubuntu est-elle prête pour le serveur ? Sachant que les paquets Universe contenant des choses comme Trac ou Bacula ne sont pas maintenues au niveau patches de sécurité, cela laisse songeur...

mercredi 1 novembre 2006

Installer l'accélerateur APC pour PHP5 sur Ubuntu

APC est un accélérateur PHP qui permet d'optimiser les performances de vos applications PHP. Voyons comment l'installer sur un serveur Ubuntu Dapper Drake 6.06 LTS avec Apache2 et PHP5 :

$ sudo apt-get update
$ sudo apt-get install build-essential php5-dev php-pear apache2-prefork-dev

On va utiliser l'utilitaire de gestion de modules d'Apache2, apxs2. APC va chercher par défaut la version Apache1, donc on fait un lien symbolique :

$ sudo ln -s /usr/bin/apxs2 /usr/bin/apxs

Cette installation nécessite une importante quantité de mémoire vive allouée à PHP, aussi nous allons devoir augmenter cette valeur au sein du script de commande PEAR en modifiant le fichier /usr/share/php/pearcmd.php et en y ajoutant en tête de fichier la ligne :

<?php
ini_set('memory_limit','24M');

Tout est prêt, on peut lancer l'installation d'APC via PECL :

$ sudo pecl install apc

Répondez oui à toutes les questions posées. Ceci fait et si l'installation s'est déroulée convenablement, éditez votre fichier /etc/php5/apache2/php.ini :

extension=apc.so

Il ne reste plus qu'à redémarrer Apache2 pour profiter d'une substantielle amélioration des performances de vos applications PHP5 :-)

lundi 9 octobre 2006

Un dépôt de code partagé avec Snipeet et Symfony

Vous cherchez un moyen simple et participatif de partager des fragments ou exemples de code (en anglais, des snippets) ? Rien de plus simple avec Snipeet, un outil dédié basé sur le framework Symfony dont l'installation a déjà été décrite sur le présent blog.

Pour installer Snipeet sur une machine propulsée par - au hasard total - Ubuntu LTS, rien de plus simple :

$ sudo -s 
# cd /var/www
# mkdir snipeet && cd snipeet
# svn co http://svn.snippet.symfony-project.com/trunk/ .
# chown -R www-data cache log

On crée une base et un utilisateur MySQL dédié à l'application :

$ mysql -uroot -p
mysql> CREATE DATABASE snipeet;
mysql> GRANT ALL ON snipeet.* TO snipeet@localhost IDENTIFIED BY 'votre_mot_de_passe';
mysql> FLUSH PRIVILEGES;
mysql> \q

On défini les paramètres d'accès SQL dans les fichiers ./config/propel.ini et ./config/database.yml en définissant le DSN ad-hoc, par exemple mysql://snipeet:votre_mot_de_passe@localhost/snipeet.

On lance les commandes de création et d'insertion SQL :

# symfony propel-build-sql
# symfony propel-insert-sql

Enfin, on crée un vhost apache dédié, sur un sous-domaine snipeet.domaine.tld par exemple dans un fichier /etc/apache2/sites-available/snipeet.domaine.tld :

<Directory "/usr/share/php/data/symfony/web/sf">
  AllowOverride All
  Allow from All 
</Directory>

<VirtualHost *>
    ServerName snipeet.domaine.tld
    DocumentRoot "/var/www/snipeet/web"
    DirectoryIndex index.php
    Alias /sf /usr/share/php/data/symfony/web/sf

    <Directory "/var/www/snipeet/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>

Sans oublier de l'activer :

# a2ensite snipeet.domaine.tld

Puis de relancer proprement apache2 :

# apache2ctl graceful

Et on fait pointer son navigateur à l'adresse paramétrée précedemment tout en savourant le résultat et surtout le fait qu'il nous a fallu moins de 5 minutes montre en main pour en arriver là :)

Edit: Tellement content que j'en oublie l'adresse de la démo : snippets.prendreuncafe.com :)

jeudi 13 avril 2006

Trucs de Geek

  • Nanoweb est un serveur web écrit en... PHP. Ne ricanez pas, les perfs ont pas l'air si nulles que ça.
  • La version 1.3.1 de Code Igniter est sortie. Au programme, tests unitaires, amélioration du système de vues et corrections de bugs. La doc mise à jour est toujours de la même qualité, bref, que du bon.
  • Dotclear 1.2.4 est sorti. Un plugin de mise à jour est disponible chez la team blogeoise.
  • Le très attendu Google Calendar est finalement sorti, en version beta comme toujours chez Google. Mes premières impressions : ça roxe. Les fonctionnalités de partage de calendriers sont au poil, l'interface est belle et rapide... ça ressemblerai presque en tout point à ce que j'ésperais. Il manque juste des tags (ou des catégories) pour organiser les évênements autrement qu'en créant de nouveaux calendriers à chaque fois [1] et ça serait parfait.
  • Ilovesunset ouvre ses portes. Et je me rends compte que j'ai pas un seul coucher de soleil dans mes tofs...

Notes

[1] Mais j'ai peut-être loupé un truc ?

jeudi 19 mai 2005

Mac OSX Server et Postfix

Il me reste un OSX server 10.3.9 au taf, configuré comme serveur de mail. C'est une sombre bouse, qui n'a jamais vraiment marché, et a toujours nécessité un reboot minimum hebdomadaire, pourtant en configuration de base (pas de fink, rien !).

Sauf que là, il me fait vraiment chier plus que de coutume : postfix se lance correctement, puis s'instancie n fois jusqu'à saturer complètement le serveur et rendre le service de courrier sortant (smtpd) complètement indisponible :-C Cliquez sur lire la suite pour voir un aperçu du souci et éventuellement m'aider :

Lire la suite...

vendredi 29 avril 2005

Installer et configurer son propre serveur de blog avec Ubuntu et Dotclear

L'objectif est ambitieux, mais réaliste : Ubuntu linux est suffisament robuste, stable et performant pour assurer l'hébergement d'un blog personnel. En plus, linux étant par défaut beaucoup plus secure que Windows, et avec la démocratisation des abonnements internet proposants IP fixes et débit en upload supérieur ou égal à 128kbps à des tarifs dérisoires, pourquoi diable résister à la tentation de devenir son propre hébergeur ?

Lire la suite...

mardi 29 mars 2005

Installer Webmin sur Ubuntu Hoary

WebminWebmin est un outil web d'administration du système fort pratique et très sécurisé, permettant de contrôler les différents services et leur configuration, le tout en local ou à distance et depuis un navigateur web standard.

Voyons donc comment l'installer sur Ubuntu Hoary :)

Lire la suite...

vendredi 14 janvier 2005

Mac OS X Serveur, ou fallait pas l'inviter

Je n'en peux plus, c'est décidé, formatage de bas niveau sur cette grosse @%£*µ#! d'OS X serveur qui nous sert de serveur web et de mail dans ma boîte. Au bout d'un peu plus d'un an d'exploitation de galère, à base d'un plantage inopiné (j'adoooooore cette expression :roll: ) par jour, dû à encore je-ne-sais quel bug à la con (base des propriétaires système cassée, netinfo foireux, mise à jour système automatique à la con, ...) - et encore - quand on a droit à un message d'erreur (et pas à un reboot subit (pour un serveur, la classe)).

Les boss de ma boîte m'avaient presque convaincus, même si le noyau Darwin d'OS X et surtout sont interface graphique de 4 Go m'avaient franchement laissé dans l'expectative, cette fois, après un an de tentative de survie informatique, je suis formel : c'est une bouse.

Lire la suite...