Sécurité sous Linux

 

Quelque soit votre version de système Unix, si celui-ci est connecté à un réseau, il est attaquable (et sera attaqué !).

Certains vont me dire qu'il ne faut pas tomber dans la paranoïa, ok, mais quand je vois le nombre de tentativeS d'accès illicites sur mes serveurs par jour , je crois qu'il y a un minimum à faire !

Ne serait ce que pour ne pas avoir un bot chez moi !

Après, aucune protection n'est sûr à 100 %, les vrais hackers parviendront sûrement à entrer, mais les petits jeunes de 15/16 ans auront du mal...

 

Sous linux (et dérivés), pour protéger au mieux votre serveur, certaines opérations sont à faire:

 

Liste non exhaustive, que je complèterai au fur et à mesure...

 

Protéger l'utilisateur root

La première cible sera l'utilisateur root, puisqu'il va permettre à un hackeur d'avoir tous les droits sur votre machine.

Il faut donc éviter cela:

Vérifiez en passant que vous n'avez bien qu'un seul utilisateur root dans le fichier /etc/passwd

Seul l'utilisateur root devrait avoir un UID à 0. sinon, vous avez été hacké !

 

Interdire les visiteurs

Par le passé, il était commun d'avoir un utilisateur nommé guest sans mot de passe. Celui-ci pouvait donc accueillir n'importe qui en visite sur votre serveur...

Mais ça, c'est du passé, les hackeurs vont vites apprécier cet utilisateur pour glaner des informations sur votre système et ainsi déterminer qu'elle faille peut potentiellement être exploitée...

Donc, l'utilisateur guest est interdit de séjour.

Dans le fichier /etc/passwd, vérifiez qu'il n'existe pas, sinon, il faut le supprimer !

userdel -f -r guest

-f force la suppression même si l'utilisateur est connecté, ainsi que le groupe de même nom (si USERGROUPS_ENAB est à yes dans etc/login), son répertoire et sa messagerie (même si ce répertoire est partagé par un autre utilisateur).

-r supprime tous les fichiers de l'utilisateur

De même, contrôler qu'il n'existe aucun utilisateur sans mot de passe (absence de x ou de mot de passe crypté dans la colonne 2 du fichier /etc/passwd).

NoteSi votre système code les mots de passe dans /etc/passwd, il y a un souci. Il faudrait utiliser /etc/shadow à la place qui est en lecture seul pour le root uniquement.

 

SSH

Dans le fichier de configuration, vous ne devez pas avoir PermitEmptyPasswords yes qui autoriserait la connexion d'utilisateur sans mot de passe !

Voire changer le port d'écoute via Port port ou ListenAddress ip:port

Limitez les accès à certains utilisateurs ou groupes

AllowUsers utilisa1 utilisa2

AllowGroups grp1 grp2

Positionnez Protocole 2 et non 1...

 

SSH sur debian et dérivés

Debian, Ubuntu, Raspbian, ...

Je ne sais pas qui est ce con qui a eu cette idée farfelue, mais quelqu'un a activé l'affichage de votre version ssh qui retourne en plus est la version du système d'exploitation !!!

Dans le fichier /etc/ssh/sshd_config, ajoutez ou décommantez la ligne suivante:

Banner none

On pouvez trouver sur d'anciennes distributions DebianBanner no

Cela cachera au moins la version de votre système d'exploitation !

 

Puis relancez le service ssh

service ssh restart

 

Sécurité de votre serveur Web Apache et de vos sites

Si vous avez l'intention d'utiliser un serveur web apache et de créer des sites, il faut les sécuriser !

 

Puis cachez donc ce php ...

Dans le fichier php.ini qui se trouve sous /etc ou sous /etc/php5/apache2 ou encore /etc/php/version/apache2 (5 car version de 5 php, sinon, la version que vous avez comme 7.0...), modifiez la ligne contenant expose_php = On pour le mettre à off

expose_php = Off

Vous devrez relancer Apache...

 

F.T.P.

Lorsqu'un serveur FTP est installé, certains utilisateurs ne doivent pas accéder au serveur ! Entre autre root, des erreurs de manipulations pourraient rendre instable votre système !

Pour cela, le fichier /etc/ftpusers devrait interdire tous les utilisateurs dont l'accès ftp n'est pas "approprié".

Il peut être intéressant de limiter l'accès des filesystems aux utilisateurs de FTP à un répertoire spécialisé FTP (chrooté) plutôt qu'à l'ensemble du système (pour ne pas rendre visible ou modifiable des données sensibles) et de crypter la transmission entre le client et le serveur (ssh). L'installation du démon vsftp serait plus approprié dans ce cas.

 

Bannière de getty

Les getty sont des programmes surveillant les ports des terminaux tty (physique ou virtuel). Lorsque qu'une connexion est établie, celui-ci affiche un message de bienvenue qui peut être un peu trop bavard...

Modifiez le contenu des fichiers issue.net ou issue pour qu'ils ne donnent plus d'informations (même minimes) sur le système utilisé.

 

Paramétrez login

Et après getty, arrive login:

Un fichier login.def permet de paramétrer login (timeout, ...), donc voyez si vous avez besoin de l'adapter.

NoteSuivant votre configuration, ce fichier peut être sous /etc/pam.d/login

 

Nom de votre machine

Le nom de votre machine peut-être affiché un peu partout. Et en autre lors d'un login ... Or, le nom de la machine est généralement par défaut le nom physique de la machine ou le nom du système d'exploitation.

Par exemple sur raspberry pi, vous obtiendrez:

raspberrypi login:

Changez le !

Cela se fera généralement en deux temps:

Modifiez le nom du fichier /etc/hostname

Attentionsur certaines distributions (debian, raspbien, ubuntu), ce nom peut être "dupliqué" dans le fichier /etc/hosts à l'adresse ip 127.0.1.1. Modifiez le aussi.

(Des explications ici)

 

Redémarrez la machine (shutdown -r now) pour prendre en compte ces modifications.

 

telnet

Le service telnet est à éviter autant que possible. Préférez le protocole ssh. Car toutes les informations sont transmises en clair sur le réseau donc y compris l'utilisateur et son mot de passe.

Sinon, limité l'accès au stricte minimum via le service tcp wrappers tcpd et modifiez la bannière issue.net ou issue.

 

Limiter les accès aux services

Vous pouvez (devez ?) configurer les accès à vos services (démons)

 

Lister les programmes avec SUID/SGID

find / -type f \( -perm -02000 -o -perm -04000 \) -ls

NoteUne idée pourrait être de garder une liste des programmes avec SUID/SGID dans un fichier (protégé sur une autre machine) et de vérifier (commande diff sous Linux, winmerge sous windows, fc sous DOS par exemple) qu'elle ne change pas alors que vous n'avez pas installé de paquets récemment, si la liste venait à changer (apparation d'un nouveau programme), il y a des chances pour qu'un hacker soit rentré dans votre machine (il a alors les droits d'administration sans que vous en ayez connaissance) ! Pensez par contre à maj la liste d'origine après l'installation de nouveau paquets !

 

Lister les fichiers sans propriétaire

find / -nouser -o -nogroup

 

Protéger vos fichiers systèmes de l'écriture

Sous linux, utilisez la commande chattr

 

Eprouvez la sécurité de votre réseau

Il y a tout d'abord les tests d'accès ip à faire via une machine, essayez de vérifier que le blocage ip est bien actif et/ou que cette machine se fait bannir lors de tentatives de connexions infructueuses.

Mais aussi utilisez l'utilitaire nmap pour vérifier ce que remonte(nt) votre/vos machines à des inconnus.

Il y a aussi les tests via internet comme https://www.grc.com/x/ne.dll?bh0bkyd2