Iptables - ouvrir le port SMTP SSL 465

Iptables - ouvrir le port SMTP SSL 465 - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 15-01-2014 à 23:52:34    

Bonjour à tous,
 
Il y a quelques temps, j'avais récupérer un script pour définir les règles IPTABLES au démarrage de ma passerelle.
Ce script fonctionne bien, mais je dois avouer que j'ai toujours quelques difficultés à chaque fois que je dois le modifier. Je n'ai pas une très bonne maitrise des commandes Iptables
Voici les règles après éxécution du script:

Code :
  1. Chain INPUT (policy DROP)
  2. target     prot opt source               destination
  3. ACCEPT     all  --  192.168.0.0/24       anywhere
  4. ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
  5. ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
  6. ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
  7. ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
  8. Chain FORWARD (policy DROP)
  9. target     prot opt source               destination
  10. ACCEPT     all  --  192.168.0.0/24       anywhere
  11. ACCEPT     tcp  --  anywhere             192.168.0.2          tcp dpt:ftp
  12. ACCEPT     tcp  --  anywhere             192.168.0.2          tcp dpts:55536:55663
  13. ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
  14. ACCEPT     all  --  anywhere             anywhere
  15. Chain OUTPUT (policy ACCEPT)
  16. target     prot opt source               destination
  17. Chain logdeny (0 references)
  18. target     prot opt source               destination
  19. LOG        all  --  anywhere             anywhere             LOG level warning prefix "PYX-firewall:"
  20. DROP       all  --  anywhere             anywhere


 
La sécurité semble bonne avec la politique DROP par défaut  pour INPUT et FORWARD.
Si je veux communiquer depuis mon réseau local avec un serveur SMTP distant, je pensais qu'il suffisait d' ouvrir le trafic sortant sur le port 465:

Code :
  1. iptables -A OUTPUT -p tcp -dport 465 -j ACCEPT


 
Or ma politique par défaut c'est d'accepter tout le trafic sortant. Cette règle est donc inutile.
En revanche  faut il ouvrir un port particulier sur le serveur dans le cadre de cette communication SMTP SSL?
 
Merci pour votre aide

Reply

Marsh Posté le 15-01-2014 à 23:52:34   

Reply

Marsh Posté le 16-01-2014 à 08:11:26    

yoshi42 a écrit :

Bonjour à tous,

 

Il y a quelques temps, j'avais récupérer un script pour définir les règles IPTABLES au démarrage de ma passerelle.
Ce script fonctionne bien, mais je dois avouer que j'ai toujours quelques difficultés à chaque fois que je dois le modifier. Je n'ai pas une très bonne maitrise des commandes Iptables
Voici les règles après éxécution du script:

Code :
  1. Chain INPUT (policy DROP)
  2. target     prot opt source               destination
  3. ACCEPT     all  --  192.168.0.0/24       anywhere
  4. ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
  5. ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
  6. ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
  7. ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
  8. Chain FORWARD (policy DROP)
  9. target     prot opt source               destination
  10. ACCEPT     all  --  192.168.0.0/24       anywhere
  11. ACCEPT     tcp  --  anywhere             192.168.0.2          tcp dpt:ftp
  12. ACCEPT     tcp  --  anywhere             192.168.0.2          tcp dpts:55536:55663
  13. ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
  14. ACCEPT     all  --  anywhere             anywhere
  15. Chain OUTPUT (policy ACCEPT)
  16. target     prot opt source               destination
  17. Chain logdeny (0 references)
  18. target     prot opt source               destination
  19. LOG        all  --  anywhere             anywhere             LOG level warning prefix "PYX-firewall:"
  20. DROP       all  --  anywhere             anywhere
 

La sécurité semble bonne avec la politique DROP par défaut  pour INPUT et FORWARD.


Heu... ta policy pour FORWARD est à DROP mais la dernière règle est un accept all peu importe l'origine/destination/port d'entrée/sortie...
Utilise la commande iptables -L -v -n pour voir la quantité de traffic ayant matché chaque règle et la policy par défaut. Tu verras normalement 0 pour ta policy à DROP pour le forward.

 
yoshi42 a écrit :


Si je veux communiquer depuis mon réseau local avec un serveur SMTP distant, je pensais qu'il suffisait d' ouvrir le trafic sortant sur le port 465:

Code :
  1. iptables -A OUTPUT -p tcp -dport 465 -j ACCEPT



Non. INPUT et OUTPUT concerne uniquement le traffic qui est à destination de ta passerelle (INPUT) et généré par ta passerelle (OUTPUT).
Pour ce qui vient du réseau au local vers Internet, c'est sur la chaine FORWARD qu'il faut taper.

yoshi42 a écrit :


Or ma politique par défaut c'est d'accepter tout le trafic sortant. Cette règle est donc inutile.
En revanche  faut il ouvrir un port particulier sur le serveur dans le cadre de cette communication SMTP SSL?


Dans ton cas non. tout est ouvert en forward/transit par ta passerelle.
Après décrit mieux ton architecture réseau, box, routeur, où est fait le NAT, etc...


Message édité par o'gure le 16-01-2014 à 08:11:53

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 16-01-2014 à 15:25:30    

Bonjour o'gure
 
Merci pour ta réponse.
Je joins le script que j'utilise pour définir les règles au démarrage
J'avais commenté le fichier pour que ce soit plus clair.
 

Code :
  1. PYXrouteur=192.168.0.1 #Adresse locale de la passerelle
  2. PYXrouteur_ext=XX.XXX.XX.XXX #Adresse externe de la passerelle (IP fixe)
  3. PYXNETWORK=192.168.0.0/24
  4. FIREWALL=$PYXrouteur
  5. WEB=$PYXrouteur #mettre "" si aucun serveur web
  6. FTP=192.168.0.2
  7. INTERNE="bridge_local" #interface ves le reseau a proteger
  8. EXTERNE="eth_adsl" #interface vers internet (ADSL)
  9. IPTABLES=/sbin/iptables
  10. mode=$1
  11. case "$mode" in
  12.         'start')
  13.                 echo "******* PYXNETWORK FIREWALL ********"
  14.                 #On efface toutes les regles existantes
  15.                 for table in filter nat mangle raw;
  16.                         do
  17.                          $IPTABLES -t $table -F
  18.                          $IPTABLES -t $table -X
  19.                         done
  20.                 ##Politique par defaut
  21.                 $IPTABLES -t filter -P INPUT DROP
  22.                 $IPTABLES -t filter -P FORWARD DROP
  23.                 $IPTABLES -t filter -P OUTPUT ACCEPT
  24.                 ##On accepte tout ce qui vient du reseau interne
  25.                 $IPTABLES -t filter -A INPUT -s $PYXNETWORK -i $INTERNE -j ACCEPT
  26.                 $IPTABLES -t filter -A FORWARD -s $PYXNETWORK -i $INTERNE -j ACCEPT
  27.                 ##On accepte les nouvelles connexions liées aux connexions établies
  28.                 $IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  29.                 #On accepte la demande de connexion ssh
  30.                 $IPTABLES -A INPUT -p tcp --destination-port ssh -j ACCEPT
  31.                #Gestion serveur web
  32.                 if [ -n "$WEB" ]
  33.                 then
  34.                         echo ""
  35.                         echo "Section WEB :"
  36.                         if [ $FIREWALL != $WEB ] #si le serveur web n'est pas sur la passerelle
  37.                         then
  38.                                 #On pense a activer le port forwarding de la passerelle vers notre serveur
  39.                                 $IPTABLES -t filter -A FORWARD -d $WEB -p tcp --dport 80 -j ACCEPT
  40.                                 $IPTABLES -t nat -A PREROUTING -p tcp -d $PYXrouteur_ext --dport http -j DNAT --to $WEB:80
  41.                                 $IPTABLES -t filter -A FORWARD -d $WEB -p tcp --dport 443 -j ACCEPT
  42.                                 $IPTABLES -t nat -A PREROUTING -p tcp -d $PYXROUTEUR_ext --dport https -j DNAT --to $WEB:443
  43.                                 echo " Forwarding WWW sur $WEB: [OK]"
  44.                         else
  45.                                 #On accepte les requetes HTTP entrantes sur le port 80
  46.                                 $IPTABLES -t filter -A INPUT -p tcp --destination-port www -j ACCEPT
  47.                                 echo " Port WWW ouvert: [OK]"
  48.                                 #On accepte les requetes HTTPS entrantes sur le port 443
  49.                                 $IPTABLES -t filter -A INPUT -p tcp --destination-port https -j ACCEPT
  50.                                 echo " Port HTTPS ouvert : [OK]"
  51.                         fi
  52.                 fi
  53.                 #Gestion serveur FTP
  54.                 if [ -n "$FTP:" ]
  55.                 then
  56.                         echo ""
  57.                         echo "Section FTP :"
  58.                         if [ $FIREWALL != $FTP ] #si le serveur FTP n'est pas sur la passerelle
  59.                         then
  60.                                 #On pense a activer le port forwarding de la passerelle vers notre serveur
  61.                                 $IPTABLES -t filter -A FORWARD -d $FTP -p tcp --dport 21 -j ACCEPT
  62.                                 $IPTABLES -t nat -A PREROUTING -p tcp -d $PYXrouteur_ext --dport ftp -j DNAT --to $FTP:21
  63.                                 echo " Forwarding FTP sur $FTP: [OK]"
  64.                                 #Forward des ports pour le mode passif du FTP
  65.                                 $IPTABLES -t filter -A FORWARD -d $FTP -p tcp --dport 55536:55663 -j ACCEPT
  66.                                 $IPTABLES -t nat -A PREROUTING -p tcp -d $PYXrouteur_ext --dport 55536:55663 -j DNAT --to $FTP
  67.                                 echo " FTP mode passif activec - Forwarding des ports 55536:55663: [OK]"
  68.                         else
  69.                                 $IPTABLES -t filter -A INPUT -p tcp --destination-port ftp -j ACCEPT
  70.                                 echo " Port FTP ouvert : [OK]"
  71.                                 $IPTABLES -t filter -A INPUT  -p tcp --dport 55536:55663 -j ACCEPT
  72.                                 echo " FTP mode passif active"
  73.                         fi
  74.                 fi
  75.                 #On refuse et on entre dans le journal tout ce qui est entrant et qui n'est pas speifie
  76.                 $IPTABLES -N logdeny
  77.                 $IPTABLES -t filter -A logdeny -j LOG --log-prefix "PYX-firewall:"
  78.                 $IPTABLES -t filter -A logdeny -j DROP
  79.                 #On active la conversion d'adresse reseau et l'IP forwarding
  80.                 if [ -n "$INTERNE" ]
  81.                 then
  82.                         echo 1 > /proc/sys/net/ipv4/ip_forward
  83.                      # On accepte les paquets entre internet et le reseau local si:
  84.                         # - Connexion existante
  85.                         # - Initatiation d'une nouvelle connexion par un membre du reseau local
  86.                         $IPTABLES -t filter -A FORWARD -i $EXTERNE -o $INTERNE -m state --state ESTABLISHED,RELATED -j ACCEPT
  87.                         $IPTABLES -t filter -A FORWARD -i $INTERNE -o $EXTERNE -j ACCEPT
  88.                         if [ $EXTERNE = eth_adsl ]
  89.                         then
  90.                                 #On convertit toute adresse IP sortante en l'IP externe du firewall (ici dynamique)
  91.                                 $IPTABLES -t nat -A POSTROUTING -s $PYXNETWORK -o $EXTERNE -j MASQUERADE
  92.                         else
  93.                                 #On convertit toute adresse IP sortante en l'IP externe du firewall (ici fixe)
  94.                                 $IPTABLES -t nat -A POSTROUTING -s $PYXNETWORK -o $EXTERNE -j SNAT --to $FIREWALL
  95.                         fi
  96.                 fi
  97.                 echo ""
  98.                 echo "Firewall initialise [OK]"
  99.         ;;
  100.         'stop')
  101.                 #echo 0 > /proc/sys/net/ipv4/ip_forward
  102.                 for table in filter nat mangle raw; do
  103.                         $IPTABLES -t $table -F
  104.                         $IPTABLES -t $table -X
  105.                 done
  106.                 $IPTABLES -t filter -P INPUT ACCEPT
  107.                 $IPTABLES -t filter -P FORWARD ACCEPT
  108.                 $IPTABLES -t filter -P OUTPUT ACCEPT
  109.                 echo ""
  110.                 echo "Attention : Firewall desactive!"
  111.         ;;
  112.         *)
  113.                 echo "usage $0 start|stop"
  114.         ;;
  115. esac


Voici le résultat de la commande iptables -L -v -n

Code :
  1. Chain INPUT (policy DROP 1144 packets, 65532 bytes)
  2. pkts bytes target     prot opt in     out     source               destination
  3. 7525 1107K ACCEPT     all  --  bridge_local *       192.168.0.0/24       0.0.0.0/0
  4. 5202 2877K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
  5.    80  4620 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
  6.    59  3336 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
  7.     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443
  8. Chain FORWARD (policy DROP 53 packets, 17470 bytes)
  9. pkts bytes target     prot opt in     out     source               destination
  10. 867K   86M ACCEPT     all  --  bridge_local *       192.168.0.0/24       0.0.0.0/0
  11.     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.0.2          tcp dpt:21
  12.     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.0.2          tcp dpts:55536:55663
  13. 1186K 1583M ACCEPT     all  --  eth_adsl bridge_local  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
  14.     0     0 ACCEPT     all  --  bridge_local eth_adsl  0.0.0.0/0            0.0.0.0/0
  15. Chain OUTPUT (policy ACCEPT 7582 packets, 1007K bytes)
  16. pkts bytes target     prot opt in     out     source               destination
  17. Chain logdeny (0 references)
  18. pkts bytes target     prot opt in     out     source               destination
  19.     0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 4 prefix "PYX-firewall:"
  20.     0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0


 

Citation :

ta policy pour FORWARD est à DROP mais la dernière règle est un accept all peu importe l'origine/destination/port d'entrée/sortie


 
C'est vrai que la dernière règle de FORWARD est en opposition avec la politique par défaut.... Mais je ne pige pas d'où vient cette règle.  
Si tu jettes un oeil au script, je ne vois pas la commande à l'origine de cette règle.
 
Pour ce qui concerne la connexion au serveur SMTP SSL (à travers le port 465).:
Il me faut juste accepter de faire transiter les paquets arrivants sur le port 465 de la passerelle et provenant du réseau local, c'est bien ça?
Avec la commande que tu m'as donné, on voit bien que dans mon cas le forward du réseau local vers l'extérieur ne se fait pas

Code :
  1. 0     0 ACCEPT     all  --  bridge_local eth_adsl  0.0.0.0/0            0.0.0.0/0


 
Merci pour ton aide
 

Reply

Marsh Posté le 16-01-2014 à 15:38:25    

Pas eu le temps de tout lire ton scrip mais, juste une question : tu as bien vérifié que ton script active le routage (ip_forward) ?

Message cité 1 fois
Message édité par o'gure le 16-01-2014 à 15:39:02

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 16-01-2014 à 16:20:22    

o'gure a écrit :

Pas eu le temps de tout lire ton scrip mais, juste une question : tu as bien vérifié que ton script active le routage (ip_forward) ?


 
Affirmatif
 

Code :
  1. #On active la conversion d'adresse reseau et l'IP forwarding
  2.                 if [ -n "$INTERNE" ]
  3.                 then
  4.                         echo 1 > /proc/sys/net/ipv4/ip_forward


 
la commande : cat /proc/sys/net/ipv4/ip_forward affiche bien "1"


Message édité par yoshi42 le 16-01-2014 à 16:24:53
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed