View previous topic :: View next topic |
Author |
Message |
zerros Apprentice
Joined: 02 Jun 2010 Posts: 179
|
Posted: Thu May 03, 2012 11:51 am Post subject: [iptables] Squid et iptables |
|
|
Bonjour,
Je suis en train de mettre en place un proxy squid, et je bloque sur le côté iptables.
Ajourd'hui tout focntionne bien, mais j'ai un énorme trou de sécurité côté lan squid.
Mon archi: 2 cartes réseaux, une dans le réseau de la free** et l'autre dans le réseau squid.
Le routage entre les deux cartes en passant par la redirection http/s vers le squid fonctionne bien.
Mais si un pc est connecté dans le réseau squid et qu'il tente une connexion ssh sur l'ip de sa passerelle (donc le serveur squid),
sa tentative est un succès même s'il n'a pas les identifiant de connexion.
Ce que je voudrai, c'est bloquer tous les ports en entrée de la carte réseau squid sauf le http/s et le dns.
Si je modifie la règle
Code: | iptables -A INPUT -i $RISKS_IFACE -j ACCEPT |
par
Code: | iptables -A INPUT -i $RISKS_IFACE -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -i $RISKS_IFACE -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i $RISKS_IFACE -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i $RISKS_IFACE -p tcp --dport 443 -j ACCEPT |
Et bien plus de net sur les machines clientes.
Détails:
SECURE_IFACE => interface dans lan connecté à internet
RISKS_IFACE => interface dans le lan derrière le squid
SQUID_SECURE_SERVER => ip du squid dans le lan connecté à internet
SQUID_RISKS_SERVER => ip du squid dans le lan derrière le squid
Voilà mon iptables:
Code: | #!/bin/sh
# Variables
SQUID_SECURE_SERVER="192.168.2.43" # serveur Squid connecté au réseau sécurisé
SQUID_RISKS_SERVER="192.168.1.2" # serveur Squid au réseau à risques
SQUID_PORT="3128" # port du serveur squid
SECURE_LAN="192.168.2.0/24" # LAN sécurisé
RISKS_LAN="192.168.1.0/24" # LAN à risques
SECURE_IFACE="eth0" # interface connecté à internet
RISKS_IFACE="eth1" # interface connecté au réseau à risques
# Modules
/sbin/modprobe ip_conntrack
# Sysctl
echo 1 > /proc/sys/net/ipv4/ip_forward
#################################################
# Vider les tables actuelles
#################################################
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
#################################################
# default policy : DROP
#################################################
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#iptables -N LOGDROP
#iptables -A LOGDROP -j LOG
#iptables -A LOGDROP -j DROP
#################################################
# accepte tout ce qui concerne l'interface loopback
#################################################
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#################################################
# on accepte les paquets relatifs aux connexions deja ouvertes
#################################################
# eth0
iptables -A INPUT -i $SECURE_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o $SECURE_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
# eth1
iptables -A INPUT -i $RISKS_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o $RISKS_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
#################################################
# on accepte les requetes icmp
#################################################
# eth0
iptables -A INPUT -i $SECURE_IFACE -p icmp -s $SECURE_LAN -d $SQUID_SECURE_SERVER --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -i $SECURE_IFACE -p icmp -s $SECURE_LAN -d $SQUID_SECURE_SERVER --icmp-type echo-request -j ACCEPT
# eth1
iptables -A INPUT -i $RISKS_IFACE -p icmp -s $RISKS_LAN -d $SQUID_RISKS_SERVER --icmp-type echo-request -j DROP
#################################################
# SSH
#################################################
# eth0
iptables -A INPUT -i $SECURE_IFACE -p tcp -s $SECURE_LAN -d $SQUID_SECURE_SERVER --dport 22 -j ACCEPT
#################################################
# DNS
#################################################
# iptables -A INPUT -i $RISKS_IFACE -p udp -s $RISKS_LAN --dport 53 -j ACCEPT
#################################################
# Routage
#################################################
iptables --table nat --append POSTROUTING -o $SECURE_IFACE -j MASQUERADE
#iptables -A FORWARD -i $RISKS_IFACE -j ACCEPT
iptables -A FORWARD --in-interface $RISKS_IFACE -j ACCEPT
iptables -A INPUT -i $RISKS_IFACE -j ACCEPT # <<<<<<<-------------------------------------- TOUT EST OUVERT !!!!!
iptables -t nat -A PREROUTING -i $RISKS_IFACE -p tcp --dport 80 -j DNAT --to $SQUID_SECURE_SERVER:$SQUID_PORT
iptables -t nat -A PREROUTING -i $SECURE_IFACE -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT
#################################################
# on accepte ce qui sort vers l'exterieur
#################################################
# eth0
iptables -A OUTPUT -o $SECURE_IFACE -j ACCEPT
# eth1
iptables -A OUTPUT -o $RISKS_IFACE -j ACCEPT
#################################################
# LOG et DROP tout le reste
#################################################
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP |
Vous auriez une super idée ? _________________ - zerros - |
|
Back to top |
|
|
d2_racing Bodhisattva
Joined: 25 Apr 2005 Posts: 13047 Location: Ste-Foy,Canada
|
Posted: Fri May 04, 2012 3:46 am Post subject: |
|
|
Je suis pas expert, mais il me semble que tu devrais ajouter des clauses forward, car si mon souvenir est bon, la clause output sert seulement si c'est vraiment cette interface qui initie un paquet...donc dans ton cas, ça sert de passerelle, d'où la raison d'utiliser la clause forward. |
|
Back to top |
|
|
guilc Bodhisattva
Joined: 15 Nov 2003 Posts: 3326 Location: Paris - France
|
Posted: Fri May 04, 2012 9:01 am Post subject: |
|
|
Visiblement non, si je comprends bien le but, c'est pas de forward (pas d'accès direct du lan vers l'extérieur, pas de nat, pas de masquerade, rien de tout ça), et sortie seulement par le proxy squid pour le web.
Du coup, les machines du LAN n'ont besoin que de se connecter au proxy et de faire du DNS.
La je vois pas dans les règles ce qui coince, mais lire les iptables de quelqu'un d'autre, c'est jamais évident. Ce qui serait bien, c'est de voir un petit tcpdump lors d'une requête web qui coince, voir quels paquets arrivent et partent. Et aussi, comment sont configurés les navigateurs ? proxy transparent uniquement ou configuration explicite ?
[EDIT]
D'ailleurs, si comme je l'ai compris la gateway et le proxy sont sur la même machine, la règle pour le redirect vers le squid transparent a un souci (pourquoi DNAT ici squid écoute bien sur les 2 interfaces non ?) :
Code: | iptables -t nat -A PREROUTING -i $RISKS_IFACE -p tcp --dport 80 -j DNAT --to $SQUID_SECURE_SERVER:$SQUID_PORT |
devient :
Code: | iptables -t nat -A PREROUTING -i $RISKS_IFACE -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT |
ou mieux (pour éviter de pourrir le port 80 de la gateway) :
Code: | iptables -t nat -A PREROUTING -i $RISKS_IFACE -p tcp --dport 80 ! -d {SQUID_RISKS_SERVER} -j REDIRECT --to-port $SQUID_PORT |
ou :
Code: | iptables -t nat -A PREROUTING -i $RISKS_IFACE -p tcp --dport 80 ! -d {RISKS_LAN} -j REDIRECT --to-port $SQUID_PORT |
[EDIT2]
Je viens de repenser à l'histoire du forward... Tu as bien un DNS sur la gateway ? les clients sont bien configurés pour l'utiliser ? Sinon si tu utilises des DNS externe, il manque effectivement une règle de forward ! _________________ Merci de respecter les règles du forum.
Mon site perso : https://www.xwing.info
Mon PORTDIR_OVERLAY : https://gentoo.xwing.info ou layman -a xwing |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|