[ IPTABLES ] iptables & squid pb redirection
lisulana
-
Khoufou -
Khoufou -
Bonjour a tous ,
J'ai un probleme sur lequel je penche depuis maintenant de longues journées , je suis novice et je n'arrive pas a le resoudre , je vais peter un cable surtout qu'il me le faut ABSOLUMENT .
j'ai ecrit mes regles netfilter . je vais vous les donner ci-dessous. tout marchait correctement (mis a part les translation d'adresse ) . je dois installer un proxy et j'ai mis squid .
il faudrait que je le rende transparent avec la redirection de port . hors cela ne fonctionne pas . j'ai beau bloquer le port 80 , le client accede toujours a internet . donc je suppose que je le bloque mal ...
voici mes regles de firewall :
tout d'abord je tiens a vous preciser que ETH2 c'est internet , eth0 et eth1 sont 2 reseaux locaux que je separe avec le routeur/firewall/proxy (ils sont tous sur le meme poste)
#!/bin/sh
#modules a charger
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
#initialisation de la table filter , flush des regles existantes et suppression des chaines eventuellement crées
iptables -F
iptables -X
#initialisation de la table nat ,flush des regles existantes et suppression des chaines eventuellement crées
iptables -t nat -F
iptables -t nat -X
#regles par defaut, on refuse tout ce qui sort (en local) , en entrée et en traversée du firewall; on rajoutera les regles desirées apres, on commence par tout interdire puis autoriser
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
#iptables -t nat -P PREROUTING DROP
#iptables -t nat -P POSTROUTING DROP
#iptables -t nat -P OUTPUT DROP
-- G du commenter les regles par defaut de la table nat car sinon ca ne fonctionnait pas .. encore un mystere pour moi --
#configuration de la passerelle pour le NAT
#iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 10.22.202.50
-- la regles de nat fonctionne a condition que les regles par defaut du nat soit commenter (donc accepter) --
#configuration pour la redirection des requetes http sur le port 80 pour qu'elles passent par le proxy qur le port 3128
iptables -A OUTPUT -o eth1 -p tcp --destination-port 80 -j DROP
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
--voila les regles que j'ai mis pour la redirection ... mais cela ne fonctionne pas ; j'ai essayer de drop le port 80 mais ce passe toujours --
#on active le forwarding ipv4, par defaut normalement le noyau est configurer pour autoriser le routage
echo 1 > /proc/sys/net/ipv4/ip_forward
#communication des processus locaux par l'interface locale, on suppose que la machine est sure
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#Les connexions deja etablie sont acceptées
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
#icmp , les interfaces des 2 réseaux locaux ping le firewall
iptables -A INPUT -p icmp -j ACCEPT
#icmp , les 2 réseaux locaux se ping
iptables -A FORWARD -p icmp -j ACCEPT
#icmp , le firewall ping eth1 , mais l'icmp est refusé en direction de eth0
iptables -A OUTPUT -o eth1 -p icmp -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp -j REJECT --reject-with icmp-host-prohibited
-- la regles de icmp reject c'est juste pour un test --
#ouverture des ports DNS
iptables -A FORWARD -o eth2 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -o eth2 -p tcp --destination-port 53 -j ACCEPT
iptables -A OUTPUT -o eth2 -p udp --destination-port 53 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --destination-port 53 -j ACCEPT
#on autorise les requetes HTTP sur les interfaces
iptables -A INPUT -i eth1 -p tcp --destination-port 3128 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --destination-port 3128 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --destination-port 3128 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --destination-port 3128 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --destination-port 80 -j ACCEPT
iptables -A FORWARD -o eth2 -p tcp --destination-port 80 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --destination-port 443 -j ACCEPT
iptables -A FORWARD -o eth2 -p tcp --destination-port 443 -j ACCEPT
-- je pense qu'au niveau de ces regles pour acceder au web doit y avoir des erreurs ... --
#on va logger ce qui ne passe pas
iptables -N logNdrop
iptables -A logNdrop -j LOG --log-prefix "! iptables DROP :"
iptables -A logNdrop -j DROP
#tout ce qui est DROP , apparait dans les logs visibles dans /var/log/messages
iptables -A FORWARD -j logNdrop >> /var/log/messages
iptables -A INPUT -j logNdrop >> /var/log/messages
iptables -A OUPUT -j logNdrop >> /var/log/messages
voici la config de mon squid :
#Default:
http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 64 MB
cache_swap_low 75
cache_swap_high 95
maximum_object_size 4096 KB
cache_dir ufs /var/spool/squid 1000 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
dns_nameservers 172.16.0.150
hosts_file /etc/hosts
redirect_children 4
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
#Recommended minimum configuration:
acl reseausabrina src 192.168.52.0/255.255.255.0
acl reseaunicolas src 192.168.51.0/255.255.255.0
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563 # https, snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge
# Deny requests to unknown ports
#http_access deny !Safe_ports
#on donne l'acces HTTP
http_access allow reseaunicolas
http_access allow reseausabrina
http_access allow localhost
http_access deny all
http_reply_access allow all
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_host virtual
httpd_accel_port 80
coredump_dir /var/spool/squid
voila toutes les ligne qui ne sotn pas commentées ..
merci de m'aider faut vraiment que j'y arrive !! :'(
J'ai un probleme sur lequel je penche depuis maintenant de longues journées , je suis novice et je n'arrive pas a le resoudre , je vais peter un cable surtout qu'il me le faut ABSOLUMENT .
j'ai ecrit mes regles netfilter . je vais vous les donner ci-dessous. tout marchait correctement (mis a part les translation d'adresse ) . je dois installer un proxy et j'ai mis squid .
il faudrait que je le rende transparent avec la redirection de port . hors cela ne fonctionne pas . j'ai beau bloquer le port 80 , le client accede toujours a internet . donc je suppose que je le bloque mal ...
voici mes regles de firewall :
tout d'abord je tiens a vous preciser que ETH2 c'est internet , eth0 et eth1 sont 2 reseaux locaux que je separe avec le routeur/firewall/proxy (ils sont tous sur le meme poste)
#!/bin/sh
#modules a charger
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
#initialisation de la table filter , flush des regles existantes et suppression des chaines eventuellement crées
iptables -F
iptables -X
#initialisation de la table nat ,flush des regles existantes et suppression des chaines eventuellement crées
iptables -t nat -F
iptables -t nat -X
#regles par defaut, on refuse tout ce qui sort (en local) , en entrée et en traversée du firewall; on rajoutera les regles desirées apres, on commence par tout interdire puis autoriser
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
#iptables -t nat -P PREROUTING DROP
#iptables -t nat -P POSTROUTING DROP
#iptables -t nat -P OUTPUT DROP
-- G du commenter les regles par defaut de la table nat car sinon ca ne fonctionnait pas .. encore un mystere pour moi --
#configuration de la passerelle pour le NAT
#iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 10.22.202.50
-- la regles de nat fonctionne a condition que les regles par defaut du nat soit commenter (donc accepter) --
#configuration pour la redirection des requetes http sur le port 80 pour qu'elles passent par le proxy qur le port 3128
iptables -A OUTPUT -o eth1 -p tcp --destination-port 80 -j DROP
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
--voila les regles que j'ai mis pour la redirection ... mais cela ne fonctionne pas ; j'ai essayer de drop le port 80 mais ce passe toujours --
#on active le forwarding ipv4, par defaut normalement le noyau est configurer pour autoriser le routage
echo 1 > /proc/sys/net/ipv4/ip_forward
#communication des processus locaux par l'interface locale, on suppose que la machine est sure
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#Les connexions deja etablie sont acceptées
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
#icmp , les interfaces des 2 réseaux locaux ping le firewall
iptables -A INPUT -p icmp -j ACCEPT
#icmp , les 2 réseaux locaux se ping
iptables -A FORWARD -p icmp -j ACCEPT
#icmp , le firewall ping eth1 , mais l'icmp est refusé en direction de eth0
iptables -A OUTPUT -o eth1 -p icmp -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp -j REJECT --reject-with icmp-host-prohibited
-- la regles de icmp reject c'est juste pour un test --
#ouverture des ports DNS
iptables -A FORWARD -o eth2 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -o eth2 -p tcp --destination-port 53 -j ACCEPT
iptables -A OUTPUT -o eth2 -p udp --destination-port 53 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --destination-port 53 -j ACCEPT
#on autorise les requetes HTTP sur les interfaces
iptables -A INPUT -i eth1 -p tcp --destination-port 3128 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --destination-port 3128 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --destination-port 3128 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --destination-port 3128 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --destination-port 80 -j ACCEPT
iptables -A FORWARD -o eth2 -p tcp --destination-port 80 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --destination-port 443 -j ACCEPT
iptables -A FORWARD -o eth2 -p tcp --destination-port 443 -j ACCEPT
-- je pense qu'au niveau de ces regles pour acceder au web doit y avoir des erreurs ... --
#on va logger ce qui ne passe pas
iptables -N logNdrop
iptables -A logNdrop -j LOG --log-prefix "! iptables DROP :"
iptables -A logNdrop -j DROP
#tout ce qui est DROP , apparait dans les logs visibles dans /var/log/messages
iptables -A FORWARD -j logNdrop >> /var/log/messages
iptables -A INPUT -j logNdrop >> /var/log/messages
iptables -A OUPUT -j logNdrop >> /var/log/messages
voici la config de mon squid :
#Default:
http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 64 MB
cache_swap_low 75
cache_swap_high 95
maximum_object_size 4096 KB
cache_dir ufs /var/spool/squid 1000 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
dns_nameservers 172.16.0.150
hosts_file /etc/hosts
redirect_children 4
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
#Recommended minimum configuration:
acl reseausabrina src 192.168.52.0/255.255.255.0
acl reseaunicolas src 192.168.51.0/255.255.255.0
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563 # https, snews
acl SSL_ports port 873 # rsync
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
http_access deny purge
# Deny requests to unknown ports
#http_access deny !Safe_ports
#on donne l'acces HTTP
http_access allow reseaunicolas
http_access allow reseausabrina
http_access allow localhost
http_access deny all
http_reply_access allow all
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_host virtual
httpd_accel_port 80
coredump_dir /var/spool/squid
voila toutes les ligne qui ne sotn pas commentées ..
merci de m'aider faut vraiment que j'y arrive !! :'(
A voir également:
- [ IPTABLES ] iptables & squid pb redirection
- Redirection de mail - Guide
- Redirection 410 - Forum MacOS
- L'url suivante, censée aboutir à un article, donne lieu à une redirection indiquant que la page n'a pas été trouvée. retrouvez la page recherchée. reportez le titre de l’article et son auteur. - Forum Microsoft Edge / Internet Explorer
- Problème 'Cette page Web présente une boucle de redirection' ✓ - Forum Google Chrome
- Retrouver un url interrogé ✓ - Forum Réseaux sociaux
1 réponse
Salut:
Remplace:
http_port 3128
Par
http_port 3128 transparent
D'autre part:
#iptables -t nat -P PREROUTING DROP
#iptables -t nat -P POSTROUTING DROP
#iptables -t nat -P OUTPUT DROP
-- G du commenter les regles par defaut de la table nat car sinon ca ne fonctionnait pas .. encore un mystere pour moi --
Ne change pas la policy sur le Nat
Change:
#iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 10.22.202.50
Par:
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
(equivalent a ton "to-source", mais si tu n'as qu'un accès Internet, laisse netfilter choisir lui meme l'@ source de sortie).
Les règles suivantes ne servent à rien à part aurotiser l'accès *explicite* au proxy (regles avec dport 3128). Les autres autorisent le flux 80 et 443 vers le LAN, ce qui est faux, il faut en fait mettre le *source port* au lieu du destination port. Les serveurs répondent *depuis* les ports 80/443.
iptables -A INPUT -i eth1 -p tcp --destination-port 3128 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --destination-port 3128 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --destination-port 3128 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --destination-port 3128 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --destination-port 80 -j ACCEPT
iptables -A FORWARD -o eth2 -p tcp --destination-port 80 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --destination-port 443 -j ACCEPT
iptables -A FORWARD -o eth2 -p tcp --destination-port 443 -j ACCEPT
Je te conseillerais plutot les règles suivantes pour OUTPUT:
iptables -F OUTPUT
iptables -P OUTPUT ACCEPT
En gros: supprime tout ce qui a trait à OUTPUT. Cette chaine n'est utilisée *que* pour les flux en *provenance* du firewall, donc, généralement, on accept que le firewall sorte avec ce qu'il veux.
Pour autoriser donc un accès *explicite* et transparent en meme temps:
iptables -A INPUT -i eth0 -p tcp --destination-port 3128 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --destination-port 3128 -j ACCEPTiptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Met par contre:
iptables -A FORWARD -i eth1 -p tcp --destination-port 443 -j ACCEPT
iptables -A FORWARD -i eth2 -p tcp --destination-port 443 -j ACCEPT
Histoire de faire du HTTPS en direct sans passer par le proxy. Dur de cacher du flux crypté.
Remplace:
http_port 3128
Par
http_port 3128 transparent
D'autre part:
#iptables -t nat -P PREROUTING DROP
#iptables -t nat -P POSTROUTING DROP
#iptables -t nat -P OUTPUT DROP
-- G du commenter les regles par defaut de la table nat car sinon ca ne fonctionnait pas .. encore un mystere pour moi --
Ne change pas la policy sur le Nat
Change:
#iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 10.22.202.50
Par:
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
(equivalent a ton "to-source", mais si tu n'as qu'un accès Internet, laisse netfilter choisir lui meme l'@ source de sortie).
Les règles suivantes ne servent à rien à part aurotiser l'accès *explicite* au proxy (regles avec dport 3128). Les autres autorisent le flux 80 et 443 vers le LAN, ce qui est faux, il faut en fait mettre le *source port* au lieu du destination port. Les serveurs répondent *depuis* les ports 80/443.
iptables -A INPUT -i eth1 -p tcp --destination-port 3128 -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp --destination-port 3128 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --destination-port 3128 -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp --destination-port 3128 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --destination-port 80 -j ACCEPT
iptables -A FORWARD -o eth2 -p tcp --destination-port 80 -j ACCEPT
iptables -A OUTPUT -o eth2 -p tcp --destination-port 443 -j ACCEPT
iptables -A FORWARD -o eth2 -p tcp --destination-port 443 -j ACCEPT
Je te conseillerais plutot les règles suivantes pour OUTPUT:
iptables -F OUTPUT
iptables -P OUTPUT ACCEPT
En gros: supprime tout ce qui a trait à OUTPUT. Cette chaine n'est utilisée *que* pour les flux en *provenance* du firewall, donc, généralement, on accept que le firewall sorte avec ce qu'il veux.
Pour autoriser donc un accès *explicite* et transparent en meme temps:
iptables -A INPUT -i eth0 -p tcp --destination-port 3128 -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --destination-port 3128 -j ACCEPTiptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Met par contre:
iptables -A FORWARD -i eth1 -p tcp --destination-port 443 -j ACCEPT
iptables -A FORWARD -i eth2 -p tcp --destination-port 443 -j ACCEPT
Histoire de faire du HTTPS en direct sans passer par le proxy. Dur de cacher du flux crypté.