firewall

Guide Debian 7 (partie 4/8) : gérer le trafic entrant et sortant avec Iptables

Temps de lecture : 3 minutes

Cet article fait partie d’une série de billets portant sur la mise en place d’un serveur sous Debian Wheezy (sommaire du guide Debian Wheezy).

Introduction

Nous avons vu dans un article précédent comment sécuriser la porte d’entrée de notre serveur, c’est-à-dire l’accès SSH. C’est un début, mais n’oubliez pas que les fenêtres, elles, sont toujours ouvertes…

Dans l’état actuel, tout le trafic devrait être autorisé en entrée et sortie sur votre serveur (j’utilise le conditionnel, car parfois, les prestataires mettent à disposition un pare-feu intermédiaire).

Pour réguler ces entrées/sorties, nous allons utiliser Iptables, un logiciel qui permet de configurer les règles du pare-feu, le tout en ligne de commandes. Il faut savoir que les règles Iptables sont réinitialisées à chaque reboot du serveur. La meilleure solution consiste donc à les placer dans un petit script qui s’occupera de mettre en place vos règles au démarrage de la machine.

Le script

Bonne nouvelle, nul besoin de réinventer la roue, car il existe sur le net une multitude de scripts pour gérer le firewall. Nous allons utiliser le script de Nicolargo (qui au passage tient un excellent blog: http://blog.nicolargo.com/ ).

J’ai forké le script pour mes propres besoins et pour être sûr que celui-ci reste accessible. On commence donc par le récupérer depuis Github :

On rend le script exécutable :

Configuration

La configuration du script est rapide :

Attention : le port SSH est ici le 22, mais n’oubliez pas que nous l’avons changé. Adaptez donc la conf au port choisi !

Pour l’envoi de mail, il faut ajouter le port 25 dans REMOTE_TCP_SERVICES.

Il est possible de tester la configuration en appliquant les règles pendant 30 secondes pour s’assurer que tout va bien :

Essayez de vous reconnecter au serveur avec SSH durant ce laps de temps. Si tout se passe bien, vous pouvez alors activer les règles en lançant la commande suivante :

Si un jour vous avez besoin d’effacer les règles (tout autoriser en entrée et sortie), lancez la commande suivante :

Warning !!! : ne lancez jamais la commande stop sur une connexion distante, car elle aurait pour effet de couper totalement l’accès au serveur (refuser tout le trafic entrant). 

Ajouter le script au démarrage

pour l’enlever  :

Pour aller plus loin

Il faut l’avouer, ce genre de script est bien pratique, mais il ne vous dispense pas de comprendre les règles Iptables qui s’appliquent sur votre serveur.

Pour rappel, vous pouvez obtenir à tout moment la liste des règles grâce à la commande suivante :

Renseignez-vous sur le sujet, et surtout, évitez à tout prix de faire des copier/coller de règles en provenance d’internet que vous ne comprenez pas, car c’est en général le meilleur moyen pour se retrouver sur le pas de la porte à tambouriner comme un couillon après s’être enfermé dehors (j’en connais qui se remémorent des soirées sympathiques :P).

J’ai bloqué ma connexion SSH…

Et voilà, on fait l’idiot dans le fond depuis le début des explications… mais maintenant, qui a l’air malin ?! 😛

Ne vous inquiétez pas, tout n’est pas perdu 🙂

Deux cas peuvent se présenter :

  • Vous avez joué avec des règles Iptables mais sans éditer le script. Dans ce cas un reboot du serveur depuis son interface suffira à rétablir les bonnes règles.
  • Vous avez édité ou mal configuré le script puis appliqué directement les règles. Ici, il faudra passer par la console de récupération de votre prestataire. En montant la partition de votre serveur, vous serez capable d’éditer le script puis de rebooter le serveur.
Tags :

Réagissez à l'article

  • G

    Une suite bientôt ? 🙂

    • https://twitter.com/robin_parisi Robin

      Oui pas mal de choses à faire ces derniers temps mais je me remets au blog dès la semaine prochaine 🙂

      • GhosTSharK

        LoL … je déterre le sujet !
        3 Ans se sont écoulés, où est la suite ? 😀

  • rico

    On attends la suite avec impatience 🙂

  • YanBen

    Super tes article sur Debian. Juste un truc : dans celui-là tu ne précises pas qu’il faut être en root au début de l’article, or si on est avec l’utilisateur SSH qu’on a créé plus tôt ca ne marchera pas le “mv firewall.sh /etc/init.d/firewall.sh” puisqu’il renverra un “mv: cannot move firewall.sh' to /etc/init.d/firewall.sh’: Permission denied”

    Vivement la suite de la série !

    • https://twitter.com/robin_parisi Robin

      Salut Yaben,

      comme expliqué dans le premier tuto, je pars du principe que toutes les commandes sont à lancer en root (sauf mention contraire).

      Si je vois que cela pose problème, j’ajouterai une petite explication avant chacun des articles 🙂

      • YanBen

        Je pense que ce serait pas mal, dans le tuto SSH d’expliquer le coup
        du “su -” pour passer en root quand on est logué en SSH en tant que
        Homer et “su homer” pour passer de root à Homer.

        Comme ca la suite des étapes ne pose aucun problème particulier.

        Sécuriser
        SSH c’est super mais si on se retrouve connecté comme utilisateur Homer
        (qui n’a presque aucun droit à part SSH) ca nous fait une belle jambe
        😉

        • https://twitter.com/robin_parisi Robin

          Effectivement, cela peut prêter à confusion, je l’ajoute dès que possible 🙂

  • Lukman abdul faqih

    thx a lot im using your tips

  • Galixte

    Bonjour,

    je suis navré mais votre script rencontre un problème de taille sous Debian 7.6.

    En effet lorsque je lance une commande “reboot” ou “shutdown -r now” le serveur une fois redémarré bloque tous les services.

    J’ai bien lu que votre script est basé sur celui du blog.nicolargo.com et je pense qu’il provient des versions proposées ici : https://github.com/nicolargo/debianpostinstall et là https://gist.github.com/nicolargo/5734412 (ceux sont les mêmes).

    Aussi j’ai remarqué que dans son article à propos du script il est présenté une version différente au niveau du code : http://blog.nicolargo.com/2013/06/ma-methode-pour-gerer-les-regles-iptables.html (j’ai comparé avec Winmerge).

    Bien que je ne suis pas capable de dire si les changements sont intéressants, entre sa première version sur laquelle vous vous êtes basé et sa dernière version (disponible dans son article, sous la phrase : “En voici une version à ce jour:”), mais force est de constater que son script fonctionne sous Debian 7.6.

    En espérant vous avoir aider.

  • jaygi

    Salut, mon os est debian 6.0.8, et on peut faire la configuration avec tous ces code?

  • Paul75

    I want to test yout scrip but when i run test I don’t have acces to webserver (Apache)….