Le but de cette petite doc est de résumer les bonnes manières en matière de sécurité d'une machine GNU/Linux et de ses services.
La partie liée au services (Apache, etc...) est evidemment indépendante de l'OS et peut s'appliquer aux autres OS hormis mention contraire.

Les services: durcissement de la configuration et chroot

Apache

Dans un premier temps, il est necessaire de configurer les paramètres du core telles que le nombre de requêtes maximales par fils, etc...
Certains paramètres peuvent ensuite être redéfinis en fonction des hôtes virtuelles tels que le nom du serveur, le port d'écoute ...
Puis pour des paramètres plus sensibles, tels que les droits de consultations, les authentifications et les méthodes autoriées, il est possible de de travailler par répetoires.
Les droits par défaut son hérités de ceux du DocumentRoot.

Les points à vérifier pour s'assurer un niveau de sécurité convenable sont:

Les menaces de sécurité liées au web sont rarement dues au serveur web et à ses modules, mes plus souvent aux scripts PHP ou CGI des utilisateurs.
Il est donc necessaire de restreindre au maximum les possibilitées offertes par PHP, en essayant de laisser une libertée maximale à l'utilisateur.

Ne pas perdre de vue que tout les paramètres relatifs aux scripts CGI et aux script PHP peuvent être placés par répertoires. Ne pas hesiter donc à mettre un maximum de restrictions pour ensuite autoriser certaines fonctions au cas par cas.

SSH

Bind

Postfix

snmpd

syslogd

inetd

ProFTPD

MySQL

Cyrus

Le système: noyau et userland

Noyau

Compilation

Configuration

Paramètres réseaux: net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.accept_source_route=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.tcp_max_syn_backlog=4096

Réseau

Firewalling

Filtrer les entrées et les sorties et n'autoriser que ce qui est réellement necessaire.
Les entrées pour éviter que l'attaquants puisse "binder" un interpréteur de commande sur un port pour ensuite élever ses privlièges. Les sorties pour éviter que ce dernier n'utilise une méthode dite de "connect-back" ou la backdoor se connecte à la machine de l'attaquant

Prochainement ici, un jeu de règle standard pour un serveur web en production.

Table ARP

C'est une bonne idée d'utiliser de forcer certaines entrées délicates de la table ARP à être statique. Par exemple, forcer l'adresse de la gateway à être statique permet de se prémunir contre les attaques de man-in-the-middle via l'ARP Spoofing.
La méthode pour placer des adresses statiques différe en fonction du système. Voir à cet effet la page de manuel de arp(8).

Userland

Binaires à proscrire sur une machine de production

Partitionnement

Intégrité du système

Permissions

Méthode générique pour chrooter un service quelconque.

Utilisation de stunnel pour chiffrer un service non prévu pour.