Iptables interdire au maximum l'accès

Résolu
Bonjour,

j'essai de configurer iptables pour interdire au maximum l'accès en autorisant que les services qui sont nécessaires. Voici ma configuration :

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP

We authorize access to web (http) 
# iptables -A OUTPUT -p tcp --dport 80 (or proxy port) -j ACCEPT

We authorize the icmp
# iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
# iptables -A OUTPUT -p icmp --icmp-type any -j ACCEPT


We authorize ssh
# iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

We authorize https
# iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT

We authorize ftp (active and passive mode)
# iptables -A OUTPUT -p tcp --dport 20:21 -j ACCEPT

We authorize smtp
# iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT

We authorize pop3
# iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT

We authorize dns
# iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

We authorize dhcp client
# iptables -A OUTPUT -p udp --dport 546 -j ACCEPT

We authorize all web responses
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


Donc j'autorise d'accéder à mes services et j'accepte que les connexions qui sont établies par moi-même pour recevoir la réponse. Mais lorsque j'essai de faire un ping ou d'accéder à une page telle que www.google.com j'ai : unknown host : www.google.com.

Autre question, j'ai vu différentes manières pour créer un script de démarrage de mon iptables, quelle est selon vous la plus simple ?

Merci de votre aide :-).

4 réponses

  1. En fait j'ai mal testé et j'ai juste oublié d'ajouter :

    # iptables -A OUTPUT -p udp --dport 53 -j ACCEPT


    pour que le dns fonctionne correctement.

    Par contre, en ce qui concerne ma question de script au démarrage, la question vaut toujours.
    1. Modérateur
      Re,

      A faire en root

      1. avec rc.local

      dans le fichier rc.local tu ajoutes le chemin vers ton script
      /chemin/vers/firewall.sh


      2. avec un script de démarrage dans /etc/init.d

      tu crées 2 fichiers dans /etc

      iptables_start
      iptables_stop


      et un script de démarrage dans /etc/init.d que tu peux l'appeller iptables

      Pas besoin d'extension .sh

      le fichier /etc/iptables_start contiendra ce que tu as en firewall.sh

      le fichier /etc/iptables_stop c'est pour la désactivation du firewall (des fois on a besoin pour certains tests)
      et il contiendra
      #! /bin/sh
      #
      # Description: désactivation du firewall netfilter/iptables
      #
      # table FILTER
      #
      iptables -F
      iptables -X
      iptables -P INPUT   ACCEPT 
      iptables -P OUTPUT  ACCEPT
      iptables -P FORWARD ACCEPT 
      
      # la table NAT
      #
      iptables -t nat -F
      iptables -t nat -X
      iptables -t nat -P PREROUTING    ACCEPT
      iptables -t nat -P POSTROUTING   ACCEPT
      iptables -t nat -P OUTPUT        ACCEPT
      #
      # la table MANGLE
      #
      iptables -t mangle -F
      iptables -t mangle -X
      iptables -t mangle -P PREROUTING    ACCEPT
      iptables -t mangle -P INPUT         ACCEPT
      iptables -t mangle -P OUTPUT        ACCEPT
      iptables -t mangle -P FORWARD       ACCEPT
      iptables -t mangle -P POSTROUTING   ACCEPT


      Le script /etc/init.d/iptables contiendra
      #!/bin/sh
      
      case $1 in
      'start' )
      	/etc/iptables_start
      	;;
      'stop'	)
      	/etc/iptables_stop
      	;;
      *)
      	echo "usage: $0 {start|stop}"
      	;;
      esac

      Ensuite établi les droits
      chmod -v 0700 /etc/iptables_st*
      chmod -v 0700 /etc/init.d/iptables

      Et tu crées les liens

      update-rc.d -f iptables start 99 2 3 4 5 .

      Au démarrage dans le runlevel 2,3,4,5 le firewall sera en état de fonction

      Tu peux desactivé le firewall avec /etc/init.d/iptables stop
      Si tu fait des modifications tu peux le rélancer avec /etc/init.d/iptables start

      Si tu tapes /etc/init.d/iptables tu auras le message usage: /etc/init.d/iptables {start|stop}
      1. Merci de cette réponse bien détaillée, mais j'ai du faire une erreur. Au lieu de tester au préalable, j'ai directement redémarrer et le chargement ce stop lors de : loading services. Ensuite l'écran noir et la flèche reste sans que rien ne se passe. Comment faire pour démarrer normalement tout de même ?
    2. Modérateur
      Salut,

      Fait un CTRL+C quand le chargement se stoppe sinon normalement une vois après l'échec de chargement de service l'amorçage de système continuera.

      D'habitude on montre d'abors ce qu'on a fait suite a une réponse.
      Ca nous permettra de depister une eventuelle erreur.
      1. Merci pour le script, ça fonctionne parfaitement. Mais par contre au démarrage de la machine ça prend facilement 5 minutes, ce doit être par rapport à la configuration de mon firewall qui empêche le bon fonctionnement du dhcp ou autre.
        Quel est le moyen de faire en sorte qu'il ne démarre une fois l'attribution des adresses ip ou alors même de l'enlever du démarrage (grâce à ton script, ce n'est pas un grand problème de le lancer par la suite)?