Backtoback wrote:C'est une très bonne base effectivmeent, surtout si ca reste pour protéger du torrent
C'est une question de sécurité des données mais aussi de responsabilité. Même un serveur qui ne sert que pour du torrent ou pour héberger ses photos de famille, doit être sécurisé un minimum. Une personne mal-intentionnée ayant compromis ton serveur, peut très bien l'intégrer dans son Botnet ou le transformer en relai à spam par exemple, qu'il y est des données sensibles ou pas, n'importe quel serveur est intéressant. Les gens ont tendance à oublier leur responsabilité. C'est pour ça que l'on retrouve des milliers d'adresses ip de kimsufi/dediboite dans les blacklists de SPAMHAUS, Spam Eating Monkey & co... les gens font pas attention
Pour sécuriser au minimum son serveur, il faut suivre quelques étapes indispensables :
1 - Changer le mot de passe du compte ROOT
Il doit être composé au minimum de 12 caractère avec des lettres minuscules, majuscules, des chiffres et des caractères spéciaux. Pour contrôler sa complexité, il faut utiliser le module pam_cracklib du framework PAM.
Dans le fichier
/etc/pam.d/common-password :
password requisite pam_cracklib.so try_first_pass retry=5 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 difok=5
try_first_pass : Le mot de passe actuel est analysé par le module, si il ne respecte pas les conditions au-dessus, le système demande un nouveau mot de passe à l'utilisateur.
retry : C'est le nombre de tentatives autorisées si l'utilisateur se trompe de mot de passe.
minlen : Longueur minimale
dcredit : Au moins un décimal
ucredit : Au moins une lettre majuscule
lcredit : Au moins une lettre minuscule
ocredit : Au moins un caractère spéciaux
difok : Définis le nombre minimal de caractères qui doivent être différents avec le mot de passe précédent.
2 - Créer un utilisateur et ne pas utiliser le compte root pour les tâches quotidiennes
adduser NOM_UTILISATEUR
apt-get install sudo && usermod -a -G sudo NOM_UTILISATEUR
# Puis décommenter cette ligne dans le fichier /etc/sudoers
%sudo ALL=(ALL) ALL
3 - Sécurisation de SSH
Le plus important est d'interdir complètement l'accès au serveur par mot de passe et d'autorisé uniquement une connexion par clé privée / clé publique. Dans le fichier
/etc/ssh/sshd_config :
# Interdiction de se connecter au compte ROOT
PermitRootLogin no
# Interdir les mots de passe vides
PermitEmptyPasswords no
# Désactiver la connexion par mot de passe
PasswordAuthentication no
# Liste des utilisateurs autorisés à se connecter
AllowUsers NOM_UTILISATEUR
# Limiter les tentatives de connexion
MaxStartups 10:30:60
# Changer le numéro du port
Port NUMERO_DU_PORT
4 - Vérifier les permissions
Vérifier qu'il n'existe aucun dossier avec toutes les permissions sans bit collant.
http://fr.wikipedia.org/wiki/Permissions_UNIX#Sticky_Bit
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
Si un dossier est trouvé par la commande çi-dessus, corriger les permissions :
chmod +t /repertoire
Vérifier qu'il n'existe aucun fichier accessible à tous les utilisateurs :
find / -xdev -type f -perm -0002 -print
Si c'est le cas, appliquer cette commande :
chmod o-w fichier
Vérifier qu'il n'existe aucun dossier et fichier sans groupe ni utilisateur associé (fichiers/dossiers orphelins) :
find / -xdev \( -nouser -o -nogroup \) -print
5 - Accès aux comptes utilisateur
Vérifier les utilisateurs présents dans le groupe sudo (ou wheel, ça dépend de la distribution) :
grep ^sudo /etc/group
Vérifier qu'il n'y a pas de comptes sans mot de passe :
awk -F: '($2 == "") {print}' /etc/shadow
Si un compte est concerné, il faut soit définir un mot de passe, bloquer le compte ou désactiver le shell :
# On défini un mot de passe
passwd COMPTE_UTILISATEUR
OU
# On bloque le compte
usermod -L COMPTE_UTILISATEUR
OU
# On désactive le SHELL
usermod -s /bin/false COMPTE_UTILISATEUR
Vérifier aussi qu'il n'y a pas de mots de passe stockés dans le fichier /etc/passwd, il ne faut pas oublier qu'il est disponible en lecture :
awk -F: '($2 != "x") {print}' /etc/passwd
Seul le compte root possède un UID égal à 0, si un compte autre que root a cet UID, il faut le supprimer.
awk -F: '($3 == "0") {print}' /etc/passwd
6 - Sécurisation de la couche TCP/IP
Les paramètres suivants permettent de se défendre contre certaines attaques visant le protocole IPv4. Modifier le fichier
/etc/sysctl.conf :
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additonal system variables
# See sysctl.conf (5) for information.
#
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
kernel.exec-shield = 1
kernel.randomize_va_space = 1
fs.file-max = 65535
kernel.pid_max = 65536
net.ipv4.ip_local_port_range = 2000 65000
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
Ces paramètres offrent une meilleur protection contre les attaques de type Smurfing, SYN flood, Ping flood, IP Spoofing. Il ne faut pas oublier que grâce à ces changements votre système sera plus résistant mais pas infaillible et que cette approche ne permet pas d'éviter la saturation de la bande passante du serveur.
http://en.wikipedia.org/wiki/Smurf_attack
http://en.wikipedia.org/wiki/SYN_flood
http://en.wikipedia.org/wiki/Ping_flood
http://en.wikipedia.org/wiki/IP_address_spoofing
7 - Désactiver l'affichage du numéro de version du serveur web
Pour Apache :
# /etc/httpd/conf/httpd.conf
ServerSignature Off
ServerTokens Prod
Pour Nginx :
# /etc/nginx/nginx.conf
server_tokens off;
8 - Désactiver l'affichage du numéro de version de PHP
Dans le fichier
/etc/php5/fpm/php.ini :
# Ne pas afficher la version de PHP dans les headers HTTP
expose_php = Off
# Ne pas afficher les erreurs (Prod : off, dev : on)
display_errors = Off
9 - MySQL
Exécuter :
mysql_secure_installation
10 - Installer un HIDS (host-based intrusion detection system)
Bon là on sort un peu du cadre de la sécurité minimale, mais c'est toujours intéressant d'installer et de configurer ce genre d'outil. Je recommande
Ossec car il est très puissant et très simple à installer :
http://mondedie.fr/d/5821
11 - Faire des audits régulièrement
Avec Nessus par exemple :
http://mondedie.fr/d/5860
Ou avec Detectify pour vos applications web :
https://detectify.com/
12 - Pleins d'autres choses encore...
D'autres conseils sont fournis dans le guide de sécurisation RHEL5 de la NSA, n'hésitez pas à le consulter, c'est très instructif :
https://www.nsa.gov/ia/_files/os/redhat/NSA_RHEL_5_GUIDE_v4.2.pdf