IPTABLES pour intégration de SQUID transparent avec HTTPS

IPTABLES pour intégration de SQUID transparent avec HTTPS - Réseaux - Systèmes & Réseaux Pro

Marsh Posté le 03-09-2009 à 12:29:48    

Bonjour,
 
Je viens vers vous car j'ai un petit soucis. Je suis en train de monter dans un réseau un proxy SQUID/SQUIDGUARD qui fonctionne pour l'instant très bien au vu des tests. Le problème en fait est qu'il faut maintenant l'intégré et du coup utiliser IPTABLES que je ne maîtrise vraiment pas bien.
 
Il faudrait en fait que tout le traffic soit redirigé vers le proxy, que le proxy à l'aide d'IPTABLES bloque tous les ports par défaut, en ouvre certains et que pour le port 80 il soit géré par SQUID.
De plus, comme l'indique le titre de mon sujet, je voudrai en priorité que HTTPS soit parmi les ports ouverts et non filtrés pour ne pas qu'il y ait de soucis.
Au niveau physique, mon serveur proxy se situe entre le LAN et le modem (donc le WAN), la carte eth0 va vers le WAN et la carte eth1 vers le LAN.
Voilà ça c'est pour la théorie, puisque je ne suis pas apte à l'exprimer avec des commandes IPTABLES.
 
J'ai trouvé cependant un sujet qui traite de cela sur ce même forum avec une configuration d'iptables qui semblerait me convenir, voici le lien direct vers la réponse dans ce sujet qui montre cette configuration :
http://forum.hardware.fr/hfr/syste [...] htm#t46322
Le problème c'est que j'ai l'impression qu'il n'y a là qu'une seule interface réseau qui est eth0 et je suis incapable de modifier cette configuration pour qu'elle colle à mon réseau.
 
Donc voilà ça m'aiderait énormément si il y en a qui peuvent m'aider à adapter cette configuration ou bien m'aider à en faire une si je me trompe et que cette configuration n'est pas adaptée à ce que je veux.
 
Merci d'avance pour votre aide

Reply

Marsh Posté le 03-09-2009 à 12:29:48   

Reply

Marsh Posté le 03-09-2009 à 14:20:41    

Salut,
 
la config est pas trop mal, bien que ne vois pas comment elle peut s'appliquer avec une seule interface (coquilles et certains commentaires qui ne correspondent pas ?) et peut être adaptée à ton cas.
Il faut absolument que tu comprennes à quel moment sont mis en jeu les tables FILTER et NAT et les chaines* INPUT, OUTPUT, FORWARD et PREROUTING ( http://www.linuxhomenetworking.com [...] tables.gif ) et cela permettra de comprendre par rapport à la config où tu dois remplacer -o eth0 par -o eth1 par ex.
Il faut voir aussi par rapport à l'existant, s'il y'a déjà iptables dessus, pour ne pas bloquer des accès.
Az'
 
*edit

Message cité 1 fois
Message édité par tonio2k le 04-09-2009 à 11:56:12
Reply

Marsh Posté le 04-09-2009 à 01:44:28    

tonio2k a écrit :

Salut,
 
la config est pas trop mal, bien que ne vois pas comment elle peut s'appliquer avec une seule interface (coquilles et certains commentaires qui ne correspondent pas ?) et peut être adaptée à ton cas.
Il faut absolument que tu comprennes à quel moment sont mis en jeu les tables INPUT, OUTPUT, FORWARD et PREROUTING ( http://www.linuxhomenetworking.com [...] tables.gif ) et cela permettra de comprendre par rapport à la config où tu dois remplacer -o eth0 par -o eth1 par ex.
Il faut voir aussi par rapport à l'existant, s'il y'a déjà iptables dessus, pour ne pas bloquer des accès.
Az'


 
INPUT/OUTPUT/etc sont des chaînes, les 3 tables sont filter/nat/mangle  :whistle:  
 
Mais à part ça je suis bien d'accord :)

Reply

Marsh Posté le 04-09-2009 à 11:54:15    

tout à fait :whistle:

Reply

Marsh Posté le 07-09-2009 à 10:11:28    

Bonjour,
 
Je reviens vers vous car je me suis effectivement un peu plus mis dans le bain et ai regardé notamment ce que tonio2k m'avait envoyé comme lien pour me documenter sur iptables.
 
J'ai donc refait la configuration que j'avais précédemment remarqué dans le lien que je donnais dans mon premier post et l'ai adapté en modifiant, rajoutant et supprimant certaines choses. Je la mets ci-dessous, pourriez-vous me dire si elle vous semble correcte ?
 

Code :
  1. #! /bin/sh
  2. LAN="eth0"
  3. WAN="eth1"
  4. PORT_SQUID="3128"
  5. IP_PROXY="192.168.0.253"
  6. # Configuration reseau de la machine
  7. # Nous vidons toutes les chaines
  8. iptables -F
  9. # Nous supprimons les chaines non standard
  10. iptables -X
  11. # Par defaut tout est ferme
  12. iptables -P INPUT DROP
  13. iptables -P OUTPUT DROP
  14. iptables -P FORWARD DROP
  15. # Reinitialisation des tables NAT et MANGLE
  16. iptables -t nat -F
  17. iptables -t nat -X
  18. iptables -t mangle -F
  19. iptables -t mangle -X
  20. # Chargement de modules pour le support de conntrack
  21. modprobe ip_conntrack
  22. modprobe ip_conntrack_ftp
  23. # Module pour le FTP (en plus de celui ci-dessus)
  24. modprobe ip_nat_ftp
  25. # Activation du forwarding
  26. echo 1 > /proc/sys/net/ipv4/ip_forward
  27. # On ouvre certaines chaines
  28. iptables -t nat -P PREROUTING ACCEPT
  29. iptables -t nat -P POSTROUTING ACCEPT
  30. iptables -t nat -P OUTPUT ACCEPT
  31. # Translation d'adresse pour tout ce qui sort vers l'internet
  32. iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
  33. # Acces total pour le loop back
  34. iptables -A INPUT  -i lo -j ACCEPT
  35. iptables -A OUTPUT -o lo -j ACCEPT
  36. # Resolution DNS pour les machines du LAN
  37. iptables -A FORWARD -i $LAN -o $WAN -p udp --sport 53 -j ACCEPT
  38. iptables -A FORWARD -i $LAN -o $WAN -p udp --dport 53 -j ACCEPT
  39. iptables -A FORWARD -i $LAN -o $WAN -p tcp --sport 53 -j ACCEPT
  40. iptables -A FORWARD -i $LAN -o $WAN -p tcp --dport 53 -j ACCEPT
  41. # On permet toutes les connexions sur le LAN depuis le firewall
  42. iptables -A INPUT -i $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
  43. iptables -A OUTPUT -o $LAN -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  44. # On permet toutes les connexions sur le firewall depuis le LAN
  45. iptables -A INPUT -i $LAN -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  46. iptables -A OUTPUT -o $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
  47. # On accepte toutes les liaisons firewall-Internet
  48. iptables -A OUTPUT -o $WAN -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  49. # On accepte les liaisons Internet-firewall deja etablies
  50. iptables -A  INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT
  51. # On accepte toutes les liaisons LAN-Internet
  52. iptables -A FORWARD -i $LAN -o $WAN -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  53. # On accepte les liaisons Internet-LAN deja etablies
  54. iptables -A FORWARD -i $WAN -o $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
  55. #################  PROXY ################
  56. ############################################################
  57. ### REGLES ###
  58. # Acces total dans le LAN
  59. iptables -A INPUT -i $LAN -j ACCEPT
  60. iptables -A OUTPUT -o $LAN -j ACCEPT
  61. # Proxy transparent avec redirection du port 80 vers le port de Squid et l'IP du serveur proxy
  62. # (deux lignes car deux interfaces reseau)
  63. iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j DNAT --to-destination $IP_PROXY:$PORT_SQUID
  64. iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j REDIRECT --to-port $PORT_SQUID
  65. # Acces aux pings
  66. iptables -A INPUT -p icmp -i $LAN -j ACCEPT
  67. iptables -A OUTPUT -p icmp -o $LAN -j ACCEPT
  68. ############################################################
  69. ### FORWARDING ###
  70. # Les connections suivantes destinees a etre forwardees sont toutes acceptees
  71. iptables -A FORWARD -i $LAN -o $WAN -p tcp --dport 110 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  72. iptables -A FORWARD -i $LAN -o $WAN -p tcp --dport 25 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  73. iptables -A FORWARD -i $LAN -o $WAN -p tcp --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  74. iptables -A FORWARD -i $LAN -o $WAN -p tcp --dport 38216 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  75. ############################################################
  76. # Seules les connexions deja etablies ou en relation avec des connexions deja etablies sont acceptees venant du Net vers le LAN
  77. iptables -A FORWARD -i $WAN -o $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
  78. # Ici on refuse les connexion entrantes et les paquets invalides
  79. iptables -A INPUT -i $WAN  -m state --state NEW,INVALID -j LOG_DROP
  80. iptables -A OUTPUT -o $WAN  -m state --state INVALID -j LOG_DROP
  81. # Toutes les regles qui n'ont pas passe les regles du firewall seront refusees et loguees...
  82. iptables -A FORWARD -j LOG_DROP
  83. iptables -A INPUT -j LOG_DROP
  84. iptables -A OUTPUT -j LOG_DROP


Message édité par thoraie le 07-09-2009 à 10:19:55
Reply

Marsh Posté le 08-09-2009 à 10:36:45    

Bonjour,
 
alors, c'est déjà pas mal avancé, qques remarques:
- l49-53 : souvent on préfère autoriser le dns vers l'extérieur uniquement pour une la machine dns interne
- l51: je crois qu'il faut inverser wan et lan
- l53: inutile car redondant avec l72
- l55-l61: inutile, redondant avec l80-83
- l69: ça ouvre tout le net sur tous les ports (sauf 80 traité différement)
- l85-89 : le proxy est sur la même machine qu'iptables ? si oui, une seule ligne suffit:
iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port $PORT_SQUID
sinon, euh c'est encore un peu plus compliqué.
- l91-94: redondant avec l80-83
- l113: redondant avec l72
- Dans Forwarding, pas d'ouverture du port https (tcp 443) comme prévu.
 
Az'


Message édité par tonio2k le 08-09-2009 à 10:39:41
Reply

Marsh Posté le 08-09-2009 à 11:28:38    

Merci beaucoup pour ta réponse ! Effectivement il y a pas mal de redondance que j'avais corrigé entre temps (mais pas tout ce que tu m'as dit) car je me suis inspiré de certains autres scripts trouvés donc il y avait quelques coquilles ;)
 

Citation :

- l49-53 : souvent on préfère autoriser le dns vers l'extérieur uniquement pour une la machine dns interne


Donc en gros même syntaxe mais en spécifiant l'IP du serveur DNS interne ?
 

Citation :

- l51: je crois qu'il faut inverser wan et lan


Il ne faudrait pas inverser wan et lan également pour la ligne 53 également ?
 

Citation :

- l53: inutile car redondant avec l72


Tu es sûr des lignes ? Tu peux m'expliquer ?
 

Citation :

- l55-l61: inutile, redondant avec l80-83


C'est sûr ;)
 

Citation :

- l69: ça ouvre tout le net sur tous les ports (sauf 80 traité différement)


Donc en gros la table forward à la fin ne sert à rien car tout est ouvert du coup ? Si c'est le cas il faudrait supprimer cette ligne afin que ça ne laisse pas tout passer et que je puisse filtrer les ports comme je le veux à l'aide de forward ?
 

Citation :

- l85-89 : le proxy est sur la même machine qu'iptables ? si oui, une seule ligne suffit:


Oui le proxy est sur la même machine, mais j'avais vu sur un tuto (très bien fait d'ailleurs) ces lignes :
http://irp.nain-t.net/doku.php/220 [...] edirection
J'avais mal compris  :D
 

Citation :

- l91-94: redondant avec l80-83


Oui j'avais vu aussi ;)
 

Citation :

- l113: redondant avec l72


Exact, bien vu ! Encore une coquille du à l'adaptation et l'insertion d'un autre script au mien. D'ailleurs il vaut mieux laisser la ligne 113 ou la 72 à ton avis ?
 

Citation :

- Dans Forwarding, pas d'ouverture du port https (tcp 443) comme prévu.


Oui c'est vrai, mais j'ai fait juste un copié / collé de lignes que j'avais trouvé pour ça et je verrais plus tard pour tous les ports que je veux ouvrir vers le net, https y compris. Mais c'est sûr que vu que j'orientais pas mal le sujet vers laisser à tout prix https ouvert j'aurais pu le mettre :D  
 
Merci encore énormément pour tes corrections et le temps que tu as pris à regarder tout ça.

Reply

Marsh Posté le 08-09-2009 à 12:01:59    

thoraie a écrit :

Citation :

- l49-53 : souvent on préfère autoriser le dns vers l'extérieur uniquement pour une la machine dns interne


Donc en gros même syntaxe mais en spécifiant l'IP du serveur DNS interne ?


oui, enfin voir la suite:
 

thoraie a écrit :

Citation :

- l51: je crois qu'il faut inverser wan et lan


Il ne faudrait pas inverser wan et lan également pour la ligne 53 également ?
 

Citation :

- l53: inutile car redondant avec l72


Tu es sûr des lignes ? Tu peux m'expliquer ?


là c'est moi qui fait des coquilles, je pensais aux lignes 50 et 52.
le sport 53, c'est coté wan en entrée.
On devrait tout réduire à:
iptables -A FORWARD -i $LAN -o $WAN --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Le retour sera matché en tcp et udp par la ligne 72, et on peut remplacer $LAN par l'ip du serveur dns interne.
 

thoraie a écrit :

Citation :

- l69: ça ouvre tout le net sur tous les ports (sauf 80 traité différement)


Donc en gros la table forward à la fin ne sert à rien car tout est ouvert du coup ? Si c'est le cas il faudrait supprimer cette ligne afin que ça ne laisse pas tout passer et que je puisse filtrer les ports comme je le veux à l'aide de forward ?


oui cette ligne est de trop pour un filtrage
 

thoraie a écrit :

Citation :

- l113: redondant avec l72


Exact, bien vu ! Encore une coquille du à l'adaptation et l'insertion d'un autre script au mien. D'ailleurs il vaut mieux laisser la ligne 113 ou la 72 à ton avis ?


personnellement je préfère mettre les règles générales vers le début donc 72
 
Az'

Reply

Marsh Posté le 08-09-2009 à 12:27:09    

Vraiment merci beaucoup, j'y vois bien plus clair maintenant. J'ai refait tout le script selon tes conseils, ce qui donne au final :
 

Code :
  1. #! /bin/sh
  2. LAN="eth0"
  3. WAN="eth1"
  4. PORT_SQUID="3128"
  5. IP_PROXY="192.168.0.253"
  6. IP_DNS="192.168.0.80"
  7. # Configuration reseau de la machine
  8. # Nous vidons toutes les chaines
  9. iptables -F
  10. # Nous supprimons les chaines non standard
  11. iptables -X
  12. # Par defaut tout est ferme
  13. iptables -P INPUT DROP
  14. iptables -P OUTPUT DROP
  15. iptables -P FORWARD DROP
  16. # Reinitialisation des tables NAT et MANGLE
  17. iptables -t nat -F
  18. iptables -t nat -X
  19. iptables -t mangle -F
  20. iptables -t mangle -X
  21. # Chargement de modules pour le support de conntrack
  22. modprobe ip_conntrack
  23. modprobe ip_conntrack_ftp
  24. # Module pour le FTP (en plus de celui ci-dessus)
  25. modprobe ip_nat_ftp
  26. # Activation du forwarding
  27. echo 1 > /proc/sys/net/ipv4/ip_forward
  28. # On ouvre certaines chaines
  29. iptables -t nat -P PREROUTING ACCEPT
  30. iptables -t nat -P POSTROUTING ACCEPT
  31. iptables -t nat -P OUTPUT ACCEPT
  32. # Translation d'adresse pour tout ce qui sort vers l'internet
  33. iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
  34. # Acces total pour le loop back
  35. iptables -A INPUT  -i lo -j ACCEPT
  36. iptables -A OUTPUT -o lo -j ACCEPT
  37. # Pour le DNS
  38. iptables -A FORWARD -s $IP_DNS -o $WAN --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  39. # On accepte les liaisons Internet-LAN deja etablies
  40. iptables -A FORWARD -i $WAN -o $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT
  41. # On accepte toutes les liaisons firewall-Internet
  42. iptables -A OUTPUT -o $WAN -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  43. # On accepte les liaisons Internet-firewall deja etablies
  44. iptables -A  INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT
  45. #################  PROXY ################
  46. ############################################################
  47. ### REGLES ###
  48. # Acces total dans le LAN
  49. iptables -A INPUT -i $LAN -j ACCEPT
  50. iptables -A OUTPUT -o $LAN -j ACCEPT
  51. # Proxy transparent avec redirection du port 80 vers le port de Squid et l'IP du serveur proxy
  52. iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port $PORT_SQUID
  53. ############################################################
  54. ### FORWARDING ###
  55. # Les connections suivantes destinees a etre forwardees sont toutes acceptees
  56. iptables -A FORWARD -i $LAN -o $WAN -p tcp --dport 110 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  57. iptables -A FORWARD -i $LAN -o $WAN -p tcp --dport 25 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  58. iptables -A FORWARD -i $LAN -o $WAN -p tcp --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  59. iptables -A FORWARD -i $LAN -o $WAN -p tcp --dport 443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
  60. ############################################################
  61. # On refuse les connexion entrantes et les paquets invalides
  62. iptables -A INPUT -i $WAN  -m state --state NEW,INVALID -j LOG_DROP
  63. iptables -A OUTPUT -o $WAN  -m state --state INVALID -j LOG_DROP
  64. # Toutes les regles qui n'ont pas passe les regles du firewall seront refusees et loguees...
  65. iptables -A FORWARD -j LOG_DROP
  66. iptables -A INPUT -j LOG_DROP
  67. iptables -A OUTPUT -j LOG_DROP


 
Ca te paraît correct maintenant comme ça ? (tu noteras que j'ai mis le port 443 dans le forward  :D )

Reply

Marsh Posté le 08-09-2009 à 13:42:08    

ça me parait correct
peut etre juste concernant l'accès ftp, je crois qu'il faut ajouter le port TCP 20 en plus des modules ftp.

Reply

Marsh Posté le 08-09-2009 à 13:42:08   

Reply

Marsh Posté le 08-09-2009 à 14:05:21    

Tu veux dire qu'il faut ajouter le port pour le FTP aux autres règles dans le forward ? Si c'est le cas, comme je t'ai dit avant je n'ai fait qu'un copié/collé de lignes de forward que j'avais récupéré et j'en mettrais plus après avoir défini quels ports ouvrir exactement vers le net pour mon réseau. Pour l'instant elles ne sont là que pour l'exemple histoire d'avoir un script opérationnel et une fois fait, j'affinerai ;)
Mais merci pour la remarque.
 
Denière chose juste pour être sûr car je l'ai fait un peu au hasard et peut-être es-tu passé à côté mais la syntaxe de la ligne 51 est-elle bonne ? Je parle surtout de la partie "-s $IP_DNS" (pas sûr pour le "-s" suivi de l'IP du serveur DNS).


Message édité par thoraie le 08-09-2009 à 14:16:36
Reply

Marsh Posté le 08-09-2009 à 16:16:03    

c'est bien -s pour une ip ou un réseau
-s 192.168.0.1
-s 192.168.0.0/24

Reply

Sujets relatifs:

Leave a Replay

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