Recherche de site Web

Comment configurer un pare-feu iptables de base sur Centos 6


Statut : Obsolète

Cet article traite d'une version de CentOS qui n'est plus supportée. Si vous gérez actuellement un serveur exécutant CentOS 6, nous vous recommandons fortement de mettre à niveau ou de migrer vers une version de CentOS supportée.

Raison : CentOS 6 a atteint sa fin de vie (EOL) le 30 novembre 2020 et ne reçoit plus de correctifs de sécurité ni de mises à jour. Pour cette raison, ce guide n'est plus maintenu.

Voir à la place :
Ce guide peut toujours être utile comme référence, mais il peut ne pas fonctionner sur d'autres versions de CentOS. Si possible, nous vous recommandons vivement d'utiliser un guide rédigé pour la version de CentOS que vous utilisez.
Les tutoriels suivants de DigitalOcean couvrent des sujets liés à ceux abordés dans ce guide et peuvent vous intéresser :

  • Les essentiels d'Iptables : Règles et commandes courantes du pare-feu
  • Comment fonctionne le pare-feu Iptables.
  • Comment configurer un pare-feu en utilisant FirewallD sur CentOS 7

Introduction

Cet article montrera comment créer un pare-feu simple sur un VPS Centos. Il ouvrira uniquement les ports que nous voulons et fermera les autres services. Je montrerai également comment prévenir des attaques plus simples et comment se réintroduire dans le VPS si vous vous refusez l'accès par accident.

Le tutoriel n'est en aucun cas exhaustif et ne montre que comment ouvrir quelques ports entrants : pour apache, SSH et le courrier électronique, et fermer tous les autres. Nous ne bloquerons aucun trafic sortant et ne créerons que quelques règles les plus courantes pour bloquer les scripts et bots habituels qui recherchent des VPS vulnérables.

iptables est un pare-feu simple installé sur la plupart des distributions linux. La page de manuel linux pour iptables dit que c'est un outil d'administration pour le filtrage des paquets IPv4 et le NAT, ce qui, en traduction, signifie que c'est un outil pour filtrer et bloquer le trafic Internet. Le pare-feu iptables est inclus par défaut dans les images linux Centos 6.4 fournies par DigitalOcean.

Nous allons configurer le pare-feu une règle à la fois. Pour simplifier : un pare-feu est une liste de règles, donc lorsqu'une connexion entrante est ouverte, si elle correspond à l'une des règles, cette règle peut accepter cette connexion ou la rejeter. Si aucune règle n'est respectée, nous utilisons la règle par défaut.

Remarque: Ce tutoriel couvre la sécurité IPv4. Sous Linux, la sécurité IPv6 est maintenue séparément de l'IPv4. Par exemple, "iptables" ne maintient que les règles de pare-feu pour les adresses IPv4, mais il a un équivalent IPv6 appelé "ip6tables", qui peut être utilisé pour maintenir les règles de pare-feu pour les adresses de réseau IPv6.

Si votre VPS est configuré pour IPv6, n'oubliez pas de sécuriser à la fois vos interfaces réseau IPv4 et IPv6 avec les outils appropriés. Pour plus d'informations sur les outils IPv6, consultez ce guide : Comment configurer des outils pour utiliser IPv6 sur un VPS Linux

Décidez quels ports et services ouvrir

Pour commencer, nous voulons savoir quels services nous voulons ouvrir au public. Utilisons le serveur d'hébergement web typique : c'est un serveur web et email, et nous devons également nous laisser entrer via le serveur SSH.

Tout d'abord, nous voulons laisser le port SSH ouvert afin de pouvoir nous connecter au VPS à distance : c'est le port 22.

De plus, nous avons besoin des ports 80 et 443 (port SSL) pour le trafic Web. Pour l'envoi d'e-mails, nous ouvrirons le port 25 (SMTP régulier) et 465 (SMTP sécurisé). Pour permettre aux utilisateurs de recevoir des e-mails, nous ouvrirons le port habituel 110 (POP3) et le port 995 (port POP3 sécurisé).

De plus, nous ouvrirons les ports IMAP, si nous l'avons installé : 143 pour IMAP et 993 pour IMAP sur SSL. Remarque : Il est recommandé de n'autoriser que les protocoles sécurisés, mais cela peut ne pas être une option, si nous ne pouvons pas influencer les utilisateurs du service de messagerie à changer leurs clients de messagerie.

Bloquez les attaques les plus courantes

Les VPS de DigitalOcean viennent généralement avec une configuration vide : tout le trafic est autorisé. Pour en être sûr, nous pouvons vider les règles du pare-feu - c'est-à-dire les effacer toutes :

iptables -F

Nous pouvons alors ajouter quelques règles de pare-feu simples pour bloquer les attaques les plus courantes, afin de protéger notre VPS des script-kiddies. Nous ne pouvons pas vraiment compter uniquement sur iptables pour nous protéger contre un DDOS à grande échelle ou similaire, mais nous pouvons au moins dissuader les robots de scan de réseau habituels qui finiront par trouver notre VPS et commencer à chercher des failles de sécurité à exploiter. Tout d'abord, nous commençons par bloquer les paquets nuls.

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

Nous avons dit au pare-feu de prendre tous les paquets entrants avec des drapeaux tcp AUCUN et de simplement les REJETER. Les paquets nuls sont, en termes simples, des paquets de reconnaissance. Les modèles d'attaque utilisent ceux-ci pour essayer de voir comment nous avons configuré le VPS et découvrir des faiblesses. Le prochain modèle à rejeter est une attaque par syn-flood.

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Une attaque par syn-flood signifie que les attaquants ouvrent une nouvelle connexion, mais ne déclarent pas ce qu'ils veulent (c'est-à-dire SYN, ACK, peu importe). Ils veulent simplement utiliser les ressources de nos serveurs. Nous n'accepterons pas de tels paquets. Maintenant, passons à un autre schéma courant : les paquets XMAS, qui sont également des paquets de reconnaissance.

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

Nous avons éliminé au moins certains des modèles habituels qui détectent des vulnérabilités dans notre VPS.

Ouvrez des ports pour les services sélectionnés

Nous pouvons maintenant commencer à ajouter des services sélectionnés à notre filtre de pare-feu. La première chose à faire est une interface localhost :

iptables -A INPUT -i lo -j ACCEPT

Nous disons à iptables d'ajouter (-A) une règle à la table de filtrage des connexions entrantes (INPUT) pour tout le trafic qui arrive à l'interface localhost (-i lo) et de l'accepter (-j ACCEPT). Le localhost est souvent utilisé pour, par exemple, votre site web ou serveur de messagerie communiquant avec une base de données installée localement. De cette manière, notre VPS peut utiliser la base de données, mais celle-ci est fermée aux exploits venant d'Internet.

Maintenant, nous pouvons autoriser le trafic des serveurs web :

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Nous avons ajouté les deux ports (port http 80 et port https 443) à la chaîne ACCEPT - permettant le trafic sur ces ports. Maintenant, laissons les utilisateurs utiliser nos serveurs SMTP :

iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

Comme mentionné précédemment, si nous pouvons influencer nos utilisateurs, nous devrions plutôt utiliser la version sécurisée, mais souvent nous ne pouvons pas dicter les conditions et les clients se connecteront en utilisant le port 25, qui est beaucoup plus facile à intercepter pour récupérer des mots de passe. Nous allons maintenant permettre aux utilisateurs de lire des e-mails sur leur serveur :

iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

Ces deux règles permettront le trafic POP3. Encore une fois, nous pourrions augmenter la sécurité de notre serveur de messagerie en utilisant simplement la version sécurisée du service. Maintenant, nous devons également autoriser le protocole de messagerie IMAP :

iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

Limiter l'accès SSH

Nous devrions également autoriser le trafic SSH, afin que nous puissions nous connecter au VPS à distance. La façon simple de le faire serait avec cette commande :

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Nous avons maintenant dit à iptables d'ajouter une règle pour accepter le trafic tcp entrant sur le port 22 (le port SSH par défaut). Il est conseillé de changer la configuration SSH vers un port différent, et ce filtre de pare-feu devrait être modifié en conséquence, mais la configuration SSH ne fait pas partie de cet article.

Cependant, nous pourrions faire une chose de plus à ce sujet avec le pare-feu lui-même. Si notre bureau a une adresse IP permanente, nous pourrions autoriser uniquement les connexions SSH depuis cette source. Cela permettrait seulement aux personnes de notre emplacement de se connecter.

Tout d'abord, découvrez votre adresse IP extérieure. Assurez-vous que ce n'est pas une adresse de votre réseau local, sinon cela ne fonctionnera pas. Vous pouvez le faire simplement en visitant le site whatismyip.com. Une autre façon de le découvrir est de taper :

w

dans le terminal, nous devrions nous voir connectés (si nous sommes les seuls connectés) et notre adresse IP écrite.

La sortie ressemble à quelque chose comme ceci :

root@iptables# w
 11:42:59 up 60 days, 11:21,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root   pts/0    213.191.xxx.xxx  09:27    0.00s  0.05s  0.00s w

Maintenant, vous pouvez créer la règle de pare-feu pour n'autoriser le trafic vers le port SSH que s'il provient d'une seule source : votre adresse IP :

iptables -A INPUT -p tcp -s YOUR_IP_ADDRESS -m tcp --dport 22 -j ACCEPT

Remplacez VOTRE_ADRESSE_IP par l'adresse IP réelle, bien sûr.

Nous pourrions ouvrir plus de ports sur notre pare-feu selon nos besoins en changeant les numéros de port. De cette façon, notre pare-feu permettra l'accès uniquement aux services que nous désirons. En ce moment, nous devons ajouter une règle supplémentaire qui nous permettra d'utiliser les connexions sortantes (c'est-à-dire ping depuis le VPS ou exécuter des mises à jour logicielles);

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Cela permettra à toutes les connexions sortantes établies de recevoir des réponses du VPS de l'autre côté de cette connexion. Une fois que tout sera configuré, nous bloquerons tout le reste et autoriserons toutes les connexions sortantes.

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Maintenant, nous avons nos règles de pare-feu en place.

Enregistrez la configuration

Maintenant que nous avons toutes les configurations, nous pouvons lister les règles pour voir s'il manque quelque chose.

iptables -L -n

Le commutateur -n ici est utilisé parce que nous avons seulement besoin des adresses IP, pas des noms de domaine. Par exemple, s'il y a une IP dans les règles comme celle-ci : 69.55.48.33 : le pare-feu irait la chercher et verrait que c'était une IP de linux-console.net. Nous n'avons pas besoin de cela, juste de l'adresse elle-même. Maintenant, nous pouvons enfin sauvegarder notre configuration de pare-feu :

iptables-save | sudo tee /etc/sysconfig/iptables

Le fichier de configuration iptables sur CentOS se trouve à /etc/sysconfig/iptables. La commande ci-dessus a sauvegardé les règles que nous avons créées dans ce fichier. Juste pour s'assurer que tout fonctionne, nous pouvons redémarrer le pare-feu :

service iptables restart

Les règles enregistrées persisteront même lorsque le VPS sera redémarré.

Tire la chasse pour te déverrouiller

Si nous avons commis une erreur dans notre configuration, nous avons peut-être bloqué notre accès au VPS. Il se peut que nous ayons saisi une adresse IP incorrecte, de sorte que le pare-feu n'autorise pas les connexions depuis notre poste de travail. Maintenant, nous ne pouvons pas accéder à ces règles, et si nous les avons sauvegardées, même un redémarrage ne nous aidera pas. Heureusement, l'interface web de DO nous permet de nous connecter au serveur via la console :

Une fois connectés, nous nous connectons en tant que root et émettons la commande suivante :

iptables -F

Cela va vider les filtres, nous pourrons à nouveau accéder au VPS.

Conclusion

Cet article n'est pas exhaustif et ne couvre que les bases de l'exécution d'un pare-feu simple sur une machine linux. Il sera suffisant pour un scénario typique de serveur web et de messagerie pour un développeur non familier avec la ligne de commande linux ou iptables.

Cependant, beaucoup plus pourrait être fait. Il existe de bons tutoriels et exemples sur Internet pour nous aider à fournir une configuration plus robuste. Pour les environnements de production, il serait conseillé de créer une configuration plus détaillée ou de faire appel à un expert en sécurité pour préparer la configuration.

Espérons que les courtes instructions fourniront une sécurité de base aux nouveaux VPS.