Déc
26
2010

Sécuriser un serveur Centos via SSH

Suite au tuto qui permet de sécuriser votre WHM & Cpanel via interface Web , je vous propose d’aller plus loin en sécurisant celui-ci via SSH!

J’ai réalisé un article sur comment se connecter sur un flux SSH : http://blog.avis-planethoster.com/information/comment-se-connecter-en-ssh-a-un-serveur-326

1. Update /Upgrade

Tout d’abord connectez-vous donc en SSH sur votre serveur et assurez-vous que tout vos packages soient mis à jour avec les commandes suivantes:

[root@serveur ~]# yum upgrade
[root@serveur ~]# yum update

Comme vous pouvez le voir Centos ne fournis pas APT mais bien YUM qui est l’équivalent aussi poussé pour ne pas dire plus !

2. Désactivation des fonctions PHP critiques

root@serveur [~]# nano /usr/local/lib/php.ini

et modifier les lignes suivantes :

magic_quotes = On

safe_mode = On

expose_php = Off

Enable_dl= Off

register_globals = off

display errors = off

disable_functions = system, show_source, symlink, exec, dl, shell_exec, passthru, phpinfo, escapeshellarg, escapeshellcmd, ini_set, popen, proc_open, allow_url_fopen

Attention pour l’installation d’un WHMCS vous devez avoir « safe_mode = Off  » & « enable_dl = On »

et redémarrer le service :

root@serveur [~]# service httpd restart

Vous venez de rendre votre Apache plus robuste à toute attaque extérieure et intérieure!
Changer de port le service SSH

3. SSH -Changer le port + monitoring

Suite à notre attaque chinoise qui se faisait par SSH , et que nous avons bloqué via cPHulk nous allons pousser plus loin notre défense.

Normalement le service SSH utilise le port 22 et les hackeur scan les ports d’un range d’IP afin de voir quels ports sont ouverts sur les machines afin de les attaques par la suite. Il faut savoir que SSH est une version « sécurisée » de telnet mais qui est quand même très prisée par les hackeurs : cela est dû à un manque de monitoring de ce service.

Si nous n’utilisons pas le port par défaut de SSH notre serveur ne sera pas dans la ligne de mire des méchants ! 😀

root@serveur [~]# nano /etc/ssh/sshd_config

Changez « #Port 22 » par « Port 1789 » par exemple.

Maintenant vous pouvez vous connecter en SSH par le Port 1789 et non le 22 !

Nous allons aussi monitorer le service afin de savoir quand une IP se connect sur le SSH et faire peur a un hakeur!

root@serveur [~]# nano /etc/motd

"ALERTE! C'est une zone sécurisée. Votre adresse IP est enregistrée. Administrateur à été notifié"

root@serveur [~]# nano /root/.bash_profile

et rajoutez

echo 'ALERTE - Acces Shell Root sur:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d"(" -f2 | cut -d")" -f1`" user@example.com

Maintenant quand quelqu’un se connecte en SSH , un message de dissuasion s’affichera et vous serez alerté par email !

4.0 Anti-Virus

Passons du coté de l’antivirus Linux,beaucoup de personnes disent que les systèmes d’exploitation Linux ne sont pas sensible au virus mais cela est faux !

Nous allons installer ClamAV qui est un antivirus pour OS de type Linux:

root@serveur [~]# yum install clamav  ==> Ha non sa marche pas ! 

Allez voir ici !

Maintenant il faut mettre a jour la base de donnée des antivirus:

root@serveur [~]# freshclam

Et il suffis de lancer l’antivirus avec la commande

root@serveur [~]# clamscan -r --remove /

Je vous conseil de créer un CRON pour automatiser la tache par exemple tout les jours a 2 heures du matin!

root@serveur [~]# crontab -e

02 1 * * * root clamscan -ri --remove /

Et voila l’antivirus a été installé , mis a jour et plannifié!

4.1 Rootkit

Linux est aussi fragile au Rootkit , il s’agit de logiciel malveillant qui sont souvent assez bien caché et qu’un utilisateur normal ou anti-virus ne détecte pas.
J’ai uploadé le tar.gz v1.3.8 sur mon serveur mais regardez tout de même si entre temps une nouvelle version n’est pas sortie ! (http://www.rootkit.nl/projects/rootkit_hunter.html)

root@serveur [~]# cd /root/
root@serveur [~]# wget http://blog.avis-planethoster.com/wp-content/uploads/2011/01/rkhunter-1.3.8.tar.gz
root@serveur [~]# tar -zxvf rkhunter-1.3.8.tar.gz
root@serveur [~]# cd rkhunter
root@serveur [~rkhunter]# ./installer.sh

Il est donc maintenant installé , pour lancer le scan il faut exécuter la commande suivante :

root@serveur [~]# rkhunter -c

Vous pouvez le mettre aussi dans le CRON 😉

5. DNS
Notre Cpanel a par défaut un serveurs DNS récursifs ouvert!
Cela est assez dangereux car il existe une faille ISPrime appelé .NS qui permet de saturer un pc distant.

root@serveur [~]# nano /etc/named.conf

Trouvez

options {

Et rajouté en dessous :

additional-from-cache no;
recursion no;

6. Logs

Nous allons plancher sur la surveillance des logs.

Personnellement au début que je me suis mis au distribution Unix , j’ai eu du mal a lire les logs et j’ai jamais trop aimé.

J’ai découvert un utilitaire de surveillance automatique de log qui vous les envois par email tout les jours. (Il vous envois qui se connect ou , les demande d’authentification , …)

root@serveur [~]# yum install logwatch

Voila c’est déjà installé , il suffis juste de configurer un fichier pour l’envoi du mail

root@serveur [~]# nano /usr/share/logwatch/default.conf/logwatch.conf

Et ajouté votre email a l’option « MailTo » & « MailFrom »

# Default person to mail reports to.  Can be a local account or a
# complete email address.
MailTo = myemail@gmail.com
# Default person to mail reports from.  Can be a local account or a
# complete email address.
MailFrom = myemail@gmail.com

Voila tout les jours vous recevrez vos logs afin de connaitre la santé de votre serveurs.

Pour voir l’activer des IP connecté sur votre serveur:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

[TUTO en cours de création , je rajouterai bientôt : nmap,portsentry … ]

17 commentaires + Ajouter un commentaire

  • Merci pour ce tuto!

    Je rajouterais juste l’installation et la configuration des iptables sous centos (primordial)
    je vous laisse googled la config de celles-ci mais ATTENTION : avant de lancer votre serveur firewall autoriser bien l’accès au nouveau port SSH!!!

    Perso j’ai fais cette erreur, mais heureusement j’avais mon Webmin de déblocé 😉
    Peace

  • Je me suis arrêter à magic_quotes = ON …

  • Bonjour super tuto
    simple clair etc
    j’ai juste une question au niveau de la :
    echo ‘ALERTE – Acces Shell Root sur:’ `date` `who` | mail -s « Alert: Root Access from `who | cut -d »( » -f2 | cut -d ») » -f1` » user@example.com

    ou est ce qu’on doit mettre l’adresse mail, car en effet j’ai bien le message quend je me co va putty mais aucun mail n’a été envoyé…

  • Bonsoir, pour la partie : SSH -Changer le port + monitoring j’ai une question !!!
    Une personne précise ceci : « ATTENTION : avant de lancer votre serveur firewall autoriser bien l’accès au nouveau port SSH!!! »
    Que veut il dire par la ?
    Ce tuto est il toujours d’actualité pour la dernière version à ce jour ?
    Merci d’avance

    • Re,

      Si par exemple tu change ton port SSH sur le 3006, il ne faut pas que ton iptables drop/bloques les packets sur ce port là! (Sinon tu scie la branche sur la quelle tu es !)

      A+

  • Je pense que je viens de me faire hacker, impossible de me connecter sur WHM ou en SSH sur le serveur et ce même en appliquant une grande partie de la configuration de sécurité 🙁
    Je ne sais pas comment reprendre la main , j’ai contacter le support d’OVH en urgence -_-

  • Voila j’ai réussi à reprendre la main et modifier le mot de passe root de WHM mais il faut que j’améliore la sécurité sachant que j’ai déjà fais beaucoup, je vais voir pour CSF&LFD (en espérant que ce soit facile à installer avec pas trop de bug)

  • Pour installer clamav il faut le télécharger ? ce n’est pas indiquer dans votre tuto, j’ai essayer avec la ligne de commande yum install clamav mais il me retourne :
    No package clamav available.
    Nothing to do

    Doit on le télécharger ou l’installer via le manager de plugin ?
    merci

  • Pour infos, vous pouvez ajouter à ce tuto le logiciel Lynis : http://www.rootkit.nl/projects/lynis.html qui franchement est fort sympathique 🙂

  • Bon tuto général, même si des choses dépendent du but de l’hébergement ..
    safe_mode = On ou display_errors = OFF
    ne ferait pas très bon ménage sur du shared par exemple ..

  • […] Sécuriser un serveur Centos via SSH […]

  • Salut,
    Moi j’ai un bug au moment de l’instalation de l’antivirus avec cpanel :
    [20131113.233339]
    [20131113.233339] Problems were detected with cPanel-provided files which are RPM controlled.
    [20131113.233339] If you did not make these changes intentionally, you can correct them by running:
    [20131113.233339]
    [20131113.233339] > /usr/local/cpanel/scripts/check_cpanel_rpms –fix
    [20131113.233339] The following RPMs are missing from your system:
    [20131113.233339] cpanel-clamav-0.97.8-3.cp1140
    [20131113.233339] cpanel-clamav-virusdefs-0.97.8-3.cp1140
    [20131113.233339] cpanel-perl-514-File-Scan-ClamAV-1.91-1.cp1136
    [20131113.233339] Removing 0 broken rpms:
    [20131113.233339] rpm: no packages given for erase
    [20131113.233340] Downloading http://httpupdate.cpanel.net/RPM/11.40/centos/6/i386/rpm.md5
    …..

    Et puis du coup quand je le fix :
    ca a télécharger un fichier.

    Puis quand je met :
    root@serveurcasse [/home/casse-noisettes]# freshclam
    bash: freshclam : commande introuvable

    que faire ?
    Merci

    • Je t’invite à créer un ticket directement chez cPanel : http://tickets.cpanel.net/

      • Ce que j’ai fais…
        Sur cpanel 11.40, il faut écrire :
        mettre à jour antivirus
        : /usr/local/cpanel/3rdparty/bin/freshclam
        lancer clam
        /usr/local/cpanel/3rdparty/bin/clamscan

        Et cela fonctionne 🙂
        Merci pour ton tuto

        J’ai une autre question :

        Dans la configuration du root@serveur [~]# nano /usr/local/lib/php.ini

        Je n’ai pas la ligne magic_quotes = On

        mais j’en 3 légèrement différente, je met tout ON ?

        ; Magic quotes
        ;

        ; Magic quotes for incoming GET/POST/Cookie data.
        ;magic_quotes_gpc = Off

        ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
        ;magic_quotes_runtime = Off

        ; Use Sybase-style magic quotes (escape ‘ with  » instead of \’).
        ;magic_quotes_sybase = Off

Laisser un commentaire

*