Ouvrir un port sur un serveur avec Iptables 13


Dans la série “les commandes dont je me souviens jamais”, voici la commande qui permet d’ouvrir un port sur le firewall iptable de son serveur (il faut les droits admin) :

iptables -A INPUT -p tcp -m tcp --dport 7777 -j ACCEPT # ouvrir le port 777
iptables -D INPUT -p tcp -m tcp --dport 7777 -j ACCEPT # annuler l'ouverture
iptables -L # regarder ce qui est ouvert et ce qui l'est pas

Et après y a des gens qui trouvent que git est cryptique.

Très utile pour la session panique de debuggage en prod sur ce fameux bug aléatoire qui n’arrive pas sur les machines de dev ni la machine d’intégration (quand il y en a une…).

En effet, avec Python et WSGI, tant qu’on relance pas le process, les changements de codes sont pas pris en compte. Donc je met DEBUG = True, je lance ./manage.py runserver_plus 0.0.0.0:7777, et je debug la prod sans que l’instance qui sert les clients soient affectées par mes conneries.

13 thoughts on “Ouvrir un port sur un serveur avec Iptables

  • r4is3

    Il faut precier que ça n’ouvre que la chaîne INPUT, soit pour des paquets entrants. Si le firewall est plutôt restricitf (en prod par exemple), il faut ouvrir aussi sur la chaîne OUTPUT pour les paquets qui passent par le port concerné en sortie. La syntaxe est globalement la même :
    IPTABLES -I INPUT -p tcp --sport -j ACCEPT

    Perso j’ai tendance à utiliser -I plutôt que -A quand je balance des règles à la volé parce que -A ajoute la règle à la fin de la chaîne, d’autre règles peuvent matcher le paquet avant celle-là. -I insert la règle à la ligne indiqué ou au début de la chaîne si aucun paramètre de position n’est indiqué.

  • JEEK

    Ca ne tombe pas dans l’oreille d’un aveugle, iptables j’suis pas non plus tombé dans la marmite quand j’étais gamin…
    Merci Sam !
    ;-)

  • thican

    Et non, désolé de vous le dire, mais c’est plus compliqué que ça, et donc, il y a une petite erreur ;)

    Moi aussi, j’ai fait cette erreur très récemment, donc, c’est avec joie que je vais y contribuer :
    http://links.thican.net/?SQAu3w

    En résumé, il faut faire attention à l’ordre de ses règle, il faut mettre les plus permissives à la fin.

  • Sam Post author

    Parfois wordpress marque un commentaire comme ‘à modérer’ et on doit le valider à la main.

  • VonTenia

    Pour compléter, j’ajouterai que les règles iptables définies de cette façon ne seront valable que pour la session courante, au prochain redémarrage il faudra retaper la même chose.

    Pour éviter ça, pensez a faire un petit:
    service iptables save (ou arrangez en fonction de votre distrib).

  • Anucunnilinguiste

    Sinon pour les hommes vous avez PF sur les BSD* la soupe syntaxique en moins et la puissance en plus ;)

    pass in on egress inet proto tcp to (egress) port 80 rdr-to \
    $antec synproxy state queue (q_def, q_pri)

    Ca a quand même plus de gueule et ça fait même de la QoS en plus ;)

  • glickind

    Description de l’article à corriger sur la page d’accueil du blog:
    Dans la série “les commandes dont je ne me souviens jamais”, voici la commande qui permet d’ouvrir un port sur le firewall iptable de son serveur.

  • Eylith

    Je drop ici mes scripts iptables, des fois que ça puisse servir à quelqu’un (ou être améliorer, se qui ne doit pas être très dur).

    Dans /etc/init.d/firewall:
    http://pastebin.com/zSa6UHGw

    Dans /etc/firewall/firewall-start.sh:
    http://pastebin.com/Ekhai1hU

    Dans /etc/firewall/firewall-stop.sh:
    http://pastebin.com/wBNsmEWd

    Usage:
    service firewall {start/stop/restart}
    OU
    /etc/init.d/firewall {start/stop/restart}

    Ne pas oublier les droits, on peut aussi lancer le script “firewall-start.sh”, etc.

Leave a comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.