Que peut-on faire pour sécuriser le serveur Ubuntu?


35

J'ai un projet de sécuriser le serveur Ubuntu autant que je peux. Le serveur est un serveur d'hébergement Web. Le serveur exécutera LAMP, Mail et DNS.


Quels services seront en cours d'exécution?
Wojox

LAMP, Mail, DNS
One Zero

J'ai créé une feuille de triche pour le serveur Ubuntu et j'aimerais la partager avec vous. Les premières pages sont des commandes linux générales, puis des packages de serveur spécifiques et la dernière page est une liste de contrôle de sécurité du serveur. La liste de contrôle regroupe des astuces et des durcissements de nombreux sites Web. J'espère que ça t'aide! Sous licence WTFPL . Vous pouvez voir / télécharger / quelle que soit la liste de contrôle ici . Je le mets à jour de temps en temps.
Noah Krasser

Réponses:


43

Voici une liste de choses que je fais pour sécuriser mon serveur.

  1. Activez UFW ( sudo ufw enable) et n'autorisez que les ports réellement utilisés. ( sudo ufw allow 80)
  2. Assurez-vous que MySQL autorise uniquement les connexions à partir de localhost.
  3. Activer TLS sur les services de messagerie. Même si c'est un cert auto-signé. Vous ne voulez pas que les mots de passe soient envoyés en clair.
  4. Installez les bloqueurs de bruteforce ssh tels que denyhosts ou fail2ban. ( sudo apt-get install denyhosts)
  5. Examinez uniquement les connexions ssh basées sur des clés.
  6. Apprenez AppArmor. Si vous utilisez des configurations assez vanillées, c'est extrêmement facile. Assurez-vous qu'il est allumé. Cela aidera à réduire les exploits du jour zéro.
  7. En fonction de l'accès physique au serveur, vous pouvez même envisager de chiffrer les données sur le disque dur.
  8. Suivez les autres recommandations sur ce lien. EDIT: J'ai oublié de modifier cela quand je n'avais pas assez de réputation pour ajouter plus de liens. Le lien voulu ici est le dernier lien ci-dessous.
  9. Ne faites jamais confiance à vos utilisateurs. Si vous avez plusieurs utilisateurs ayant accès au système, verrouillez-les. Si vous devez leur donner un accès sudo, donnez-leur uniquement ce dont ils ont besoin.
  10. Utiliser le bon sens. Réfléchissez bien à ce que vous feriez si vous étiez en lock-out. Puis fermez ces trous.

Un peu plus de choses à considérer. La plupart des gens oublient l'accès physique. Toutes les configurations logicielles dans le monde ne veulent rien dire si je peux physiquement marcher avec un LiveCD et voler vos données. Méfiez-vous de l'ingénierie sociale. Posez des questions pour vérifier qui est au téléphone et assurez-vous qu'ils ont l'autorisation de faire la demande qu'ils font.

Étant donné que je suis toujours un "nouvel" utilisateur, je ne peux pas publier plus de 2 liens. Vous pouvez en savoir plus sur ce sujet ici: https://help.ubuntu.com/12.04/serverguide/index.html et accorder une attention particulière à https://help.ubuntu.com/12.04/serverguide/security.html


2
Une alternative à l’utilisation de UFW (tout en utilisant des pare-feu intégrés prêts à l’emploi dans Ubuntu) consiste à verrouiller votre système avec des iptablesrègles extrêmement spécifiques interdisant l’accès externe à tout service que vous n’allez pas utiliser, si vous avez un problème inhabituel. configuration de la balle qui nécessite un rouing avancé et d'autres choses.
Thomas Ward

2
@LordofTime D'accord. J'utilise moi-même iptables, mais ufw convient parfaitement à la plupart des installations de base. De plus, UFW est plus ou moins juste un wrapper pour les configurations les plus courantes d’iptables. Le système sous-jacent est toujours le même.
Patrick Regan

2
+1 pour ufw, vous n'êtes pas un nouvel utilisateur, vous êtes membre depuis 1 an: p
Tachyons

1
En effet, je voulais juste souligner que, dans certains cas, iptables aura une meilleure facilité d'utilisation dans certains cas
Thomas Ward

1
Considérez BastilleLinux, c'est aussi une bonne suite de renforcement de la sécurité.
Pl1nk

13

Mémoire partagée sécurisée

/ dev / shm peut être utilisé dans une attaque contre un service en cours, tel que httpd. Modifiez / etc / fstab pour le rendre plus sécurisé.

Ouvrez une fenêtre de terminal et entrez les informations suivantes:

sudo vi /etc/fstab

Ajoutez la ligne suivante et enregistrez. Vous devrez redémarrer pour que ce paramètre prenne effet:

tmpfs     /dev/shm     tmpfs     defaults,noexec,nosuid     0     0

Durcir le réseau avec les paramètres sysctl

Le fichier /etc/sysctl.conf contient tous les paramètres sysctl. Empêcher le routage source des paquets entrants et enregistrer les adresses IP mal formées, entrez les informations suivantes dans une fenêtre de terminal

sudo vi /etc/sysctl.conf

Editez le fichier /etc/sysctl.conf et supprimez le commentaire ou ajoutez les lignes suivantes:

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0 
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0 
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

Pour recharger sysctl avec les dernières modifications, entrez:

sudo sysctl -p

Empêcher l'usurpation d'adresse IP

Ouvrez un terminal et entrez les informations suivantes:

sudo vi /etc/host.conf

Ajoutez ou modifiez les lignes suivantes:

order bind,hosts
nospoof on

Harden PHP pour la sécurité

Editez le fichier php.ini:

sudo vi /etc/php5/apache2/php.ini

Ajoutez ou modifiez les lignes suivantes:

disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
magic_quotes_gpc = On

Pare-feu d'applications Web - ModSecurity

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Protéger des attaques par déni de service (DDOS) - ModEvasive

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Analyser les journaux et interdire les hôtes suspects - DenyHosts et Fail2Ban

@DenyHosts

DenyHosts est un programme python qui bloque automatiquement les attaques SSH en ajoutant des entrées à /etc/hosts.deny. DenyHosts informera également les administrateurs Linux des hôtes offensants, des utilisateurs attaqués et des connexions suspectes.

Ouvrez un terminal et entrez les informations suivantes:

sudo apt-get install denyhosts

Après l’installation, éditez le fichier de configuration /etc/denyhosts.conf et modifiez l’adresse électronique ainsi que d’autres paramètres, le cas échéant.

Pour modifier les paramètres de messagerie de l'administrateur, ouvrez une fenêtre de terminal et entrez:

sudo vi /etc/denyhosts.conf

Modifiez les valeurs suivantes selon vos besoins sur votre serveur:

ADMIN_EMAIL = root@localhost
SMTP_HOST = localhost
SMTP_PORT = 25
#SMTP_USERNAME=foo
#SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts nobody@localhost
#SYSLOG_REPORT=YES 

@ Fail2Ban

Fail2ban est plus avancé que DenyHosts dans la mesure où il étend la surveillance des journaux à d'autres services, notamment SSH, Apache, Courier, FTP, etc.

Fail2ban analyse les fichiers journaux et interdit les adresses IP présentant les signes malveillants - trop d'échecs de mot de passe, recherche d'exploits, etc.

Généralement, Fail2Ban est ensuite utilisé pour mettre à jour les règles de pare-feu afin de rejeter les adresses IP pour une durée spécifiée, bien que toute autre action arbitraire puisse également être configurée. Prêt à l'emploi, Fail2Ban est fourni avec des filtres pour divers services (apache, courrier, ftp, ssh, etc.).

Ouvrez un terminal et entrez les informations suivantes:

sudo apt-get install fail2ban

Après l’installation, éditez le fichier de configuration /etc/fail2ban/jail.local et créez les règles de filtrage selon les besoins.

Pour modifier les paramètres, ouvrez une fenêtre de terminal et entrez:

sudo vi /etc/fail2ban/jail.conf

Activez tous les services que vous souhaitez surveiller avec fail2ban en remplaçant enabled = false par * enabled = true *.

Par exemple, si vous souhaitez activer la surveillance SSH et l'interdiction de jail, recherchez la ligne ci-dessous et remplacez enabled par false en true . C'est ça.

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

Si vous souhaitez recevoir des emails de Fail2Ban si des hôtes sont bannis, remplacez la ligne suivante par votre adresse email.

destemail = root@localhost

et changez la ligne suivante de:

action = %(action_)s

à:

action = %(action_mwl)s

Vous pouvez également créer des filtres de règle pour les différents services que vous souhaitez que fail2ban surveille et qui ne sont pas fournis par défaut.

sudo vi /etc/fail2ban/jail.local

Des instructions sur la façon de configurer fail2ban et créer les différents filtres peuvent être trouvés sur HowtoForge - cliquez ici pour un exemple

Une fois la configuration de Fail2Ban terminée, redémarrez le service avec:

sudo /etc/init.d/fail2ban restart

Vous pouvez également vérifier l'état avec.

sudo fail2ban-client status

Recherchez les rootkits - RKHunter et CHKRootKit.

Les deux rkhunter et ChkRootKit font essentiellement la même chose - vérifier votre système pour rootkits. Pas de mal à utiliser les deux.

Ouvrez un terminal et entrez les informations suivantes:

sudo apt-get install rkhunter chkrootkit

Pour exécuter chkrootkit, ouvrez une fenêtre de terminal et entrez:

sudo chkrootkit

Pour mettre à jour et exécuter RKHunter. Ouvrez un terminal et entrez les informations suivantes

sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

Analyser les ports ouverts - Nmap

Nmap ("Network Mapper") est un utilitaire gratuit et à source ouverte pour la découverte de réseaux et l'audit de sécurité.

Ouvrez un terminal et entrez les informations suivantes:

sudo apt-get install nmap

Analysez votre système pour les ports ouverts avec:

nmap -v -sT localhost

SYN scanning avec les éléments suivants:

sudo nmap -v -sS localhost

Analyser les fichiers journaux du système - LogWatch

Logwatch est un système d'analyse de journal personnalisable. Logwatch analyse les journaux de votre système et crée un rapport analysant les zones que vous spécifiez. Logwatch est facile à utiliser et fonctionnera dès la livraison sur la plupart des systèmes.

Ouvrez un terminal et entrez les informations suivantes:

sudo apt-get install logwatch libdate-manip-perl

Pour afficher la sortie de logwatch, utilisez moins:

sudo logwatch | less

Pour envoyer par courrier électronique un rapport de surveillance des journaux des 7 derniers jours à une adresse électronique, entrez ce qui suit et remplacez mail@domaine.com par l'adresse électronique requise. :

sudo logwatch --mailto mail@domain.com --output mail --format html --range 'between -7 days and today' 

Auditez la sécurité de votre système - Tiger.

Tiger est un outil de sécurité qui peut être utilisé à la fois comme audit de sécurité et comme système de détection d’intrusion.

Ouvrez un terminal et entrez les informations suivantes:

sudo apt-get install tiger

Pour courir tigre entrez:

sudo tiger

Toutes les sorties de Tiger se trouvent dans / var / log / tiger

Pour afficher les rapports de sécurité du tigre, ouvrez un terminal et entrez les informations suivantes:

sudo less /var/log/tiger/security.report.*

Pour plus d'aide


PHP: magic_quotes_gpc = On. Magic quotes a d'abord été déconseillé, puis supprimé: php.net/manual/fr/security.magicquotes.whynot.php
Tim

13

Puisque vous avez dit qu'il s'agissait d'un serveur d'hébergement Web ... J'aimerais partager mes meilleures pratiques et mon expérience de 5 longues années dans le secteur de l'hébergement Web.

  1. D'après mes expériences passées, plutôt que d'entrer dans la configuration de l'enfer tout de suite, vous devez d'abord assembler les grappes basses de sécurité comme indiqué sur l'article donné.

  2. Puisque vous rencontrez LAMP, vous devez donc faire très attention à PHP et à ses paramètres php.ini. C'est un bon lien pour sécuriser PHP. PHP possède des super pouvoirs qui peuvent devenir une boucle de sécurité s’ils ne sont pas configurés correctement.

  3. Vous pouvez utiliser un travail cron pour vérifier si vos fichiers ont été modifiés sans votre permission et éventuellement piratés; en utilisant ce travail cron . Je préfère Notepad ++ pour comparer les résultats cron (téléchargez directement le courrier électronique cron à partir de votre serveur Web et ouvrez-le dans Notepad ++).

  4. Si vous souhaitez installer des SEM, cPanel est préférable (bien que payé). Webmin et zpanel sont de très bonnes alternatives gratuites. Webmin est préférable car il utilise au moins des certificats auto-signés et renforce la sécurité.

  5. Si vous voulez que quelque chose fonctionne immédiatement, vous pouvez opter pour Linux clé en main. Il est basé sur Ubuntu, extrêmement facile à mettre en œuvre et flexible selon vos besoins. Avec très peu d'effort, vous obtenez la sécurité hors de la boîte. Ceci est leur pile LAMP . Personnellement, j'utilise et préfère cela uniquement.

  6. Si vous partez de zéro, vous pouvez également installer ISPconfig3. Instruction ici .

  7. vous pouvez tester votre sécurité en essayant de pénétrer votre sécurité avec Back-Track-Linux .

  8. conservez des mots de passe complexes, longs et aléatoires. Ne les stockez pas sur le PC. écrivez-les. Utilisez un live CD pour accéder à ces connexions.

  9. Procurez- vous un logiciel de protection contre la force brute comme fail2ban.

  10. Ne lancez pas ces démons dont vous n'avez pas besoin.

  11. Bloquez tous les ports inutiles . soyez extrêmement prudent avec le port SSH (22).

  12. Procurez-vous une adresse IP statique sur le système à travers lequel vous allez gérer le serveur. Bloquez la plupart des éléments IP et autorisez uniquement votre adresse IP à accéder à des emplacements de configuration tels que le port 22.

À la fin de la journée ... travaillez avec l'esprit, ne vous laissez pas émouvoir par l'installation, et appliquer le bon sens vous mènera au-delà.

**My heartiest best wishes to you. good luck.**

1
PHP peut également être dangereux lorsque vous faites confiance à une entrée utilisateur (injection SQL par exemple).
NoBugs

@NoBugs Je suis absolument d'accord avec ce point. Il n'est pas possible de tout compresser en une seule réponse. Ma réponse contient de nombreux liens hypertexte et, en tant que tels, ces sites Web sont vraiment très utiles. J'espère que ma réponse et les liens inclus aideront la communauté :)
Bhavesh Diwan Le

2
# 9: Non, les mots de passe ramdom sont mauvais, la clé est dans la longueur , c'est à dire. "D0g ....................." est plus fort que "PrXyc.N (n4k77 # L! EVdAfp9". Explication à explicxkcd.com/2011/08/10 / force mot de passe
papukaija

2
@papukaija Je vous suggère de rechercher sur Google brute force attackset dictionary attacks.. Un mot de passe long et aléatoire est le seul moyen de vous protéger de telles attaques.
Bhavesh Diwan

6

Utilisez le projet Bastille Linux.

Il fournit un outil interactif pour effectuer des mesures de renforcement de la sécurité supplémentaires afin d'accroître la sécurité globale et de réduire les risques de compromission de votre système Ubuntu (à partir de Bastille Linux ).

Il offre une fonctionnalité d'évaluation et de création de rapports afin de vous indiquer quelles parties du système ne sont pas verrouillées. Il examine le système en lecture seule et rend compte de l'état de chacun de ses éléments de renforcement. Par exemple, Bastille peut vérifier si le serveur DNS est verrouillé dans une prison chroot, si telnet est désactivé ou même si les mots de passe doivent être d'une longueur correcte. Vous pouvez jeter un coup d'œil à une démonstration Web uniquement via ce lien (plus d' informations ).

Vous pouvez avoir un aperçu de la démo Web (uniquement) ici .

BastillleLinux


1
Je peux appuyer cette recommandation. Pour exécuter des hôtes exposés (par exemple, des serveurs Web), bastille contribue grandement à la sécurité du système.
Floyd

Cela ressemble au système SELinux que vous trouvez sur CentOS / Redhat mais je parie que SELinux est plus moderne.
djangofan

3

Utilisez-la nmapsur toutes les interfaces de la machine pour savoir quels services vous exécutez sur votre machine. C'est un outil essentiel pour la sécurité.

Supprimez tous les services dont vous n'avez pas besoin sur vos interfaces externes. Vous pouvez configurer MySQL pour n’écouter que sur des interfaces spécifiques, telles que localhost.

Utilisez ufw pour protéger votre service SSH (et d’autres éventuels) afin qu’il ne permette pas un trop grand nombre de connexions (en échec) par minute à partir du même ordinateur. Cela rendra les attaques par force brute plus difficiles. Changer le numéro de port n’est pas très utile, c’est de l’obscurité, pas de sécurité.

Soyez restrictif avec le nombre de comptes sur votre machine. De même, n'installez pas plus de packages / programmes que vous n'en utilisez réellement. Installez uniquement les clients X11, pas un serveur X11.

N'autorisez que ssh-login sur la machine avec des certificats numériques, sans mot de passe. Cela rendra également les attaques en force brute difficiles / impossibles.



0

La sécurité a toujours un prix. Fixer des limites réalistes vous aidera à atteindre vos objectifs. Je considérerais les aspects suivants:

  • Contre quoi vous protégez-vous (quel type de méchant, quel est son budget)?
  • Quels sont vos vecteurs d'attaque?

En vérifiant tous les liens affichés ici, je pense que celui-ci devrait être ajouté. Il explique en détail non seulement comment configurer votre logiciel, mais aussi pour réfléchir au plan de sécurité. En plus, chaque commande à exécuter est expliquée avec une source.

Sécuriser un serveur Web Ubuntu sur Xenial 16.04


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.