J'ai écrit cet article pour un rapport que je devais rendre en cours. Il pourrait peut être intéressé quelqu'un donc je le met en ligne
-----------------------------------------------------------------------------------
- Installation d'un serveur apache dans une Jail sous FreeBSD sécurisée -
-----------------------------------------------------------------------------------
------------ Auteur : Rémi LAURENT -----------------------------------
------------ Mail : cloud@madpowah.org -------------------------------
------------ Date : 10/12/2007 ----------------------------------
-----------------------------------------------------------------------------------
Sommaire :
1 - Choix de la distribution
2 - Partitionnement
3 - Configuration
4 - Post installation
5 - Création de la jail
6 - Installation du serveur Apache
7 - Installation du serveur FTP
8 - Sécurisation
9 - Conclusion
1 - Choix de la distribution
Pour ce TP, j'ai choisi d'utiliser comme système d'exploitation FreeBSD. Pourquoi ?
Déjà parce que le logo est beaucoup plus sympa que celui de linux mais plus objectivement pour ses capacités et son orientation radicalement axée sur la sécurité. BSD est le système qui est peut être le
plus proche de celui d'UNIX et sépare complètement les applications systèmes des applications utilisateurs qui seront toutes stockées et configurable depuis /usr/local. La hiérarchie dirigeant FreeBSD est
également beaucoup plus stricte que Linux ou tout le monde peut mettre son grain de sable ( souvent des personnes pas forcement au top niveau) et on se retrouve avec des updates du kernel toutes les
semaines et des failles régulières. FreeBSD est dirigé par une équipe définie, qui a fait ses preuves et qui a seule le droit de toucher aux sources. Le nombre de failles relatives au noyau FreeBSD se
compte sur les doigts de la main.
De plus FreeBSD utilise un système de fichier très performant, UFS jusqu'à sa version 6.2 et supporte maintenant ZFS, le système de fichier utilisé par Solaris (basé sur du BSD).
FreeBSD possède sa propre libc et à recoder ses propres applications (awk, sed...) pour optimiser le tout.
De plus FreeBSD possède une bibliothèque impressionnante de paquetages manipulable via les ports et des outils de sécurité comme portaudit qui permet de contrôler si un logiciel possédant une faille a été
installé sur notre système ou encore portversion qui permet de contrôler les paquets qui ne sont pas à jour. Pour les feignants (ou ceux qui ont des machines peu puissantes :) ), FreeBSD propose une
grande quantité de ces paquetages en binaire pour les installer rapidement. Il possède également entre autre un parefeu très puissant et reconnu (pf) ainsi que des outils comme les jails qui sont natifs
sur freeBSD et permettent toutes sorte de manipulation.
En conclusion, FreeBSD est stable, robuste et possède tous les outils pour les paranoïaques, donc c'est bien :)
Installation
Commençons donc par installer notre FreeBSD. On met le cd, on regarde le petit diable tout mignon et on appuie sur entrée pour lancer l'installation. On choisira une installation express qui est largement
suffisante.
2 - Partitionnement
La 1ere chose qui peut dérouter est le système de partitionnement FreeBSD et surtout les slices. En effet une fois avoir créer notre partition de manière physique sur le disque dur, on a la possibilité
d'affiné ce partitionnement en découpant de manière logique notre partition et ainsi créer un partition /usr /var /tmp / et une swap bien évidement. La séparation des partitions peut nous servir pour la
gestion des quotas mais également à empêcher l'exécution de programme sur /tmp par exemple ou encore de crypter à la volée une partition critique, chose que l'on n'aura pas l'occasion de voir ici par
faute de temps.
3 - Configuration
Et bien la on va choisir l'option système minimal pour ne pas se retrouver avec pleins de paquets inutils et pas toujours a jour. On choisira la langues et quelques options classiques sur une installation
d'OS (clavier...)
On appuie sur entrée et tout s'installe comme il faut en 5mn et le pc reboot
4 - Post Installation
Une fois notre système installé et démarré, nous allons attribuer un pass root via la commande passwd et configurer le réseau.
Le système diffère un peu de celui de Linux puisque là, plus de eth0, eth1 et compagnie. Le lo est toujours là mais à la place des interface ethernet on a des noms rl0 (realtek), nve0 (nvidia) et autres
noms de carte. FreeBSD trie les cartes selon leur marque ce qui est fort pratique à mon goût vu que le nom de la carte me parle beaucoup plus que eth et un numéro. Ainsi on sait sans se tromper (encore
faut il connaître son pc) sur quelle interface on agit.
Une fois le réseau configuré, on va taper sysinstall pour installer les paquetages que l'on souhaite ainsi que les sources de notre FreeBSD qui nous serviront pour créer une jail.
Nous choisirons alors portaudit, portversion, portupgrade, portsentry, apache2.2.3, squid, rkhunter et vim (sinon on ne possède que ee comme éditeur de base).
-portaudit, portversion, et portupgrade nous permettrons de tenir à jour notre FreeBSD
-portsentry est une application permettant de simuler des ports ouvert et qui bloque automatiquement l'ip qui scanne ces ports. Ainsi la machine sera immunisé contre les scans agressifs
-rkhunter est un détecteur de rootkit qui nous assurera que notre serveur est propre
-apache et squid sont les serveurs que l'on souhaite mettre en place
5 - Création de la jail
Nous allons maintenant choisir dans sysinstall d'installer les sources de FreeBSD qui iront se mettre dans /usr/src. Une fois cela fait nous allons créer une jail. Commençons par expliquer ce qu'est une
jail.
Une jail est une technique pour enfermer des processus dans un sous système de notre serveur. Le noyau reste le même mais la jail possède ses propres applicatifs (que l'on réduira au maximum) ainsi que
des droits très limités en exécution. Les processus de la jail sont différencier de ceux de notre système. Ainsi un attaquant qui prend la main sur la jail sera restreint dans cette partie et le système
principal continuera de fonctionner.
Revenons donc sur l'installation :
Nous allons créer un répertoire /jails a la racine et un repertoire www/ à l'intérieur de celui ci qui identifiera notre jail pour le serveur web. On va alors compiler tout le système de base de notre
FreeBSD a l'intérieur de la jail par la commande :
cd /usr/src && make world DESTDIR=/jails/www
cd etc/ && make distribution DESTDIR=/jails/www
mount_devfs devfs /jails/www/devafin de monter les périphériques a l'intérieur de la jail
jail_enable="YES" # Utiliser NO pour désactiver le lancement des environnements jail jail_list="www" # Liste des noms des environnements jail séparés par une espace jail_www_rootdir="/jails/www" # le répertoire racine de l'environnement jail jail_www_hostname="gargamel" # le nom de machine de l'environnement jail jail_www_ip="172.16.3.100" # son adresse IP jail_www_devfs_enable="YES" # monter devfs dans l'environnement jail jail_www_devfs_ruleset= "devfsrules_jail"# les règles devfs à appliquer à l'environnement jail
ifconfig_rl0="inet 172.16.3.103 netmask 255.255.255.0" ifconfig_rl0_alias0="inet 172.16.3.100 netmask 255.255.255.0"
ifconfig rl0 172.16.3.103 netmask 255.255.255.0 ifconfig rl0 172.16.3.100 netmask 255.255.255.0 alias
/etc/rc.d/jail start
jexec 1 sysinstall
ServerName pinkrabbit.org
ServerSignature off ServerTokens Prod
Include etc/apache22/extra/httpd-ssl.confServerName pinkrabbit.org CustomLog /var/log/apache2/toto-access.log combined ErrorLog /var/log/apache2/toto-error.log RewriteEngine on RewriteLog /var/log/apache2/https_rewrite.log RewriteLogLevel 1 RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
openssl req -config openssl.cnf -new -out mon-serveur.csr openssl rsa -in privkey.pem -out mon-serveur.key openssl x509 -in mon-serveur.csr -out mon-serveur.cert -req -signkey mon-serveur.key -days 365On place ensuite ces fichiers en les appelant server.* dans /jails/www/usr/local/etc/apache22/.
apache22_enable="YES"
jexec 1 /usr/local/etc/rc.d/apache22 start
jexec 1 /etc/rc.d/ftpd start
jexec 1 sh
rkhunter -c
portsentry -tcp portcentry -udp
portaudit -F && portaudit -a