Comment configurer un pare-feu Iptables de base sur Centos 6
Statut : Obsolète
Cet article couvre une version de CentOS qui n'est plus prise en charge. Si vous utilisez actuellement un serveur exécutant CentOS 6, nous vous recommandons vivement de mettre à niveau ou de migrer vers une version prise en charge de CentOS.
Raison: CentOS 6 a atteint sa fin de vie (EOL) le 30 novembre 2020 and no longer receives security patches or updates. For this reason, this guide is no longer maintained.
Voir plutôt :
Ce guide peut toujours être utile comme référence, mais peut ne pas fonctionner sur d'autres versions de CentOS. S'il est disponible, nous vous recommandons fortement d'utiliser un guide écrit pour la version de CentOS que vous utilisez.
Les didacticiels DigitalOcean suivants couvrent des sujets liés à ceux abordés dans ce guide et peuvent vous intéresser :
- Iptables Essentials : règles et commandes courantes du pare-feu
- Fonctionnement du pare-feu Iptables.
- Comment configurer un pare-feu à l'aide de FirewallD sur CentOS 7
Introduction
Cet article vous montrera comment créer un pare-feu simple sur un VPS Centos. Cela n'ouvrira que les ports que nous voulons et fermera d'autres services. Je montrerai également comment empêcher des attaques plus simples et comment vous réintégrer au VPS si vous vous en 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 email 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 les robots habituels qui recherchent les VPS vulnérables.
iptables est un pare-feu simple installé sur la plupart des distributions Linux. La page de manuel pour iptables indique qu'il s'agit d'un outil d'administration pour le filtrage de paquets IPv4 et NAT, ce qui, en traduction, signifie qu'il s'agit d'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 par une règle. 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.
Noter: Ce tutoriel couvre la sécurité IPv4. Sous Linux, la sécurité IPv6 est maintenue séparément d'IPv4. Par exemple, "iptables" ne gère 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 réseau IPv6.
Si votre VPS est configuré pour IPv6, n'oubliez pas de sécuriser vos interfaces réseau IPv4 et IPv6 avec les outils appropriés. Pour plus d'informations sur les outils IPv6, reportez-vous à ce guide : Comment configurer les 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 : il s'agit d'un serveur Web et de messagerie, et nous devons également nous laisser entrer par 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 normal) et 465 (SMTP sécurisé). Pour permettre aux utilisateurs de recevoir des e-mails, nous ouvrirons les ports habituels 110 (POP3) et 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 pour qu'ils changent leurs clients de messagerie.
Bloquer les attaques les plus courantes
Les VPS DigitalOcean sont généralement livrés avec la configuration vide : tout le trafic est autorisé. Juste pour nous en assurer, nous pouvons vider les règles du pare-feu - c'est-à-dire les effacer toutes :
iptables -F
Nous pouvons ensuite 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 sur iptables seul pour nous protéger d'un DDOS à grande échelle ou similaire, mais nous pouvons au moins repousser les robots d'analyse 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 les drapeaux tcp NONE et de les abandonner. Les paquets nuls sont, tout simplement, des paquets de reconnaissance. Les modèles d'attaque les utilisent pour essayer de voir comment nous avons configuré le VPS et découvrir les faiblesses. Le prochain modèle à rejeter est une attaque syn-flood.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
Syn-flood attack signifie que les attaquants ouvrent une nouvelle connexion, mais n'indiquent pas ce qu'ils veulent (c'est-à-dire. SYN, ACK, peu importe). Ils veulent juste accaparer les ressources de nos serveurs. Nous n'accepterons pas de tels colis. Passons maintenant à un modèle plus courant : les paquets XMAS, également un paquet de reconnaissance.
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
Nous avons exclu au moins certains des modèles habituels qui trouvent des vulnérabilités dans notre VPS.
Ouvrir les 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 de ces choses est une interface localhost :
iptables -A INPUT -i lo -j ACCEPT
Nous disons à iptables d'ajouter (-A) une règle à la table de filtrage entrante (INPUT) pour tout trafic qui arrive à l'interface localhost (-i lo) et de l'accepter (-j ACCEPT). Localhost est souvent utilisé pour, c'est-à-dire. votre site Web ou votre serveur de messagerie communiquant avec une base de données installée localement. De cette façon, notre VPS peut utiliser la base de données, mais la base de données est fermée aux exploits d'Internet.
Nous pouvons maintenant autoriser le trafic du serveur 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 - autorisant le trafic sur ces ports. Maintenant, permettons aux utilisateurs d'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 indiqué 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 termes et les clients se connecteront en utilisant le port 25, ce qui est beaucoup plus facile pour renifler les mots de passe. Nous procédons maintenant pour autoriser les utilisateurs à lire les 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 autoriseront 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 demandé à 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 modifier la configuration SSH sur un port différent, et ce filtre de pare-feu doit être modifié en conséquence, mais la configuration de SSH ne fait pas partie de cet article.
Cependant, nous pourrions faire une autre chose à ce sujet avec le pare-feu lui-même. Si notre bureau a une adresse IP permanente, nous ne pouvons autoriser les connexions à SSH qu'à partir de cette source. Cela permettrait uniquement aux personnes de notre emplacement de se connecter.
Tout d'abord, découvrez votre adresse IP externe. Assurez-vous qu'il ne s'agit pas d'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 savoir est de taper :
w
dans le terminal, nous devrions nous voir connectés (si nous sommes les seuls connectés' et notre adresse IP notée.
La sortie ressemble à 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 YOUR_IP_ADDRESS par l'adresse IP actuelle, bien sûr.
Nous pourrions ouvrir plus de ports sur notre pare-feu si nécessaire en modifiant les numéros de port. De cette façon, notre pare-feu n'autorisera l'accès qu'aux services que nous voulons. À l'heure actuelle, nous devons ajouter une règle supplémentaire qui nous permettra d'utiliser les connexions sortantes (c'est-à-dire. ping à partir du 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 SMV de l'autre côté de cette connexion. Lorsque tout sera configuré, nous bloquerons tout le reste et autoriserons toutes les connexions sortantes.
iptables -P OUTPUT ACCEPT iptables -P INPUT DROP
Nous avons maintenant nos règles de pare-feu en place.
Enregistrer la configuration
Maintenant que nous avons toute la configuration, nous pouvons lister les règles pour voir si quelque chose manque.
iptables -L -n
Le commutateur -n ici est dû au fait que nous n'avons besoin que d'adresses IP, pas de noms de domaine. C'est à dire. s'il y a une adresse IP dans les règles comme celle-ci : 69.55.48.33 : le pare-feu irait la chercher et verrait qu'il s'agissait d'une adresse IP digitalocean.com. Nous n'avons pas besoin de cela, juste de l'adresse elle-même. Nous pouvons enfin enregistrer notre configuration de pare-feu :
iptables-save | sudo tee /etc/sysconfig/iptables
Le fichier de configuration iptables sur CentOS se trouve dans /etc/sysconfig/iptables. La commande ci-dessus a enregistré 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 est redémarré.
Rincer pour vous déverrouiller
Si nous avons fait un accident dans notre configuration, nous nous sommes peut-être bloqués pour accéder au VPS. Peut-être avons-nous mis la mauvaise adresse IP afin que le pare-feu n'autorise pas les connexions depuis notre poste de travail. Maintenant, nous ne pouvons pas atteindre ces règles, et si nous les avons enregistrées, même un redémarrage ne nous aidera pas. Heureusement, l'interface Web DO nous permet de nous connecter au serveur via la console :
Une fois connecté, nous nous connectons en tant que root et lançons la commande suivante :
iptables -F
Cela videra les filtres, nous pourrons à nouveau entrer dans le VPS.
Conclusion
Cet article n'est pas exhaustif, et il n'a fait qu'effleurer la surface de l'exécution d'un simple pare-feu sur une machine Linux. Cela suffira pour un scénario typique de serveur Web et de messagerie pour un développeur qui n'est pas 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 préparer la configuration par un expert en sécurité.
Espérons que les courtes instructions fourniront une sécurité de base aux nouveaux VPS.