Kanet + Squid
Le serveur Kanet se comporte comme un routeur et comme un portail captif.
Il
bloque le trafic entre le réseau captif et l'extérieur en attendant
d'avoir authentifié l'utilisateur avec CAS, par exemple. Pour ceci, il
intercepte la première requête http émise par l'utilisateur avec IPtable
puis marque le trafic de cet utilisateur afin de l'autoriser une fois
que celui-ci est authentifié.
Si l'on souhaite surveiller et
filtrer le trafic web de l'utilisateur, il peut être judicieux
d'utiliser Squid. Or nous possédons déjà un serveur Squid central (qui écoute sur le port 8080),
couplé à SquidGuard sur lequel est défini la politique de filtrage.
L'idée est donc de forcer le trafic web sortant du routeur Kanet à
passer par ce Squid central.
Les machines du réseau captif, qui
sont souvent des PC portables personnels, ne connaissent pas par
définition la configuration de réseau de l'établissement. On va donc
rediriger leur trafic web vers une instance d'un squid en mode
transparent. Ce Squid peut être directement installé sur le serveur
Kanet. Dans notre cas, il ne fera rien (ni cache, ni filtrage) que
collecter les requêtes http émises par les clients du réseau captif et
les rediriger vers le Squid central sur lequel est appliqué la politique
de filtrage.
Installation et configuration de SquidSur le serveur Kanet : apt-get install squid3
Puis on déclare : - que ce squid a pour parent le squid central : cache.iut-rodez.fr,
- qu'il accepte les connexions du réseau captif en mode transparent,
- qu'il ne cache rien.
/etc/squid3/squid.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl reseau_captif src w.x.y.z/16
acl kanet src a.b.c.d
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
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 CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow kanet
cache_peer squid.central.fr parent 8080 0 no-query proxy-only no-digest
never_direct allow all
http_access allow reseau_captif
cache deny all
http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128 transparent
#hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
#refresh_pattern ^ftp: 1440 20% 10080
#refresh_pattern ^gopher: 1440 0% 1440
#refresh_pattern (cgi-bin|\?) 0 0% 0
#refresh_pattern . 0 20% 4320
icp_port 3130
coredump_dir /var/spool/squid3
Modification de la configuration du serveur Kanet On indique enfin au routeur Kanet de rediriger le trafic web sortant vers le Squid local : nano /etc/init.d/kanet-rules
#!/bin/sh
IPT="/sbin/iptables"
IP_PRIVATE="ip.kanet.côté.captif"
NTINT="eth1"
test -f $IPT || exit 0
case "$1" in
start)
echo -n "Loading kanet firewall's rules: "
echo 1 > /proc/sys/net/ipv4/ip_forward
# Flush table
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t filter -F
$IPT -t mangle -A PREROUTING -i $NTINT -j CONNMARK --restore-mark
$IPT -t mangle -A PREROUTING -p TCP -i $NTINT -d $IP_PRIVATE -j ACCEPT
$IPT -t mangle -A PREROUTING -p TCP -i $NTINT -m state --state NEW -j QUEUE
$IPT -t nat -A PREROUTING -p TCP -i $NTINT -j CONNMARK --save-mark
# MARK 0xFFFFFFFF = Openacls
$IPT -t nat -A PREROUTING -p TCP -i $NTINT -m mark --mark 0xFFFFFFFF -j ACCEPT
# MARK 0xFFFFFFFE = use http-to-https redirection (Not implemented)
#$IPT -t nat -A PREROUTING -p TCP -i $NTINT -m mark --mark 0xFFFFFFFE -j DNAT --to-destination $IP_PRIVATE
# MARK 0x0 = unauthenticated - 80 is redirected to authentication page
$IPT -t nat -A PREROUTING -p TCP --dport 80 -i $NTINT -m mark --mark 0 -j DNAT --to-destination $IP_PRIVATE:8080
# Le traffic http est ensuite redirigé sur le squid local
$IPT -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
# MARK 0x1 blacklistacls
$IPT -t filter -A FORWARD -m mark --mark 0x1 -j REJECT
$IPT -t nat -A POSTROUTING -m mark ! --mark 0 -j MASQUERADE
echo "Done."
;;
stop)
echo -n "Flushing kanet firewall's rules: "
echo 0 > /proc/sys/net/ipv4/ip_forward
###########################
# FLUSH TABLES
###########################
$IPT -t filter -F
$IPT -t nat -F
$IPT -t mangle -F
echo "Done."
;;
status)
# List tables
echo
echo "---------- FILTER TABLE -----------"
echo
$IPT -t filter -L -v
echo
echo "---------- NAT TABLE -----------"
echo
$IPT -t nat -L -v
echo
echo "---------- MANGLE TABLE -----------"
echo
$IPT -t mangle -L -v
echo
;;
restart|force-reload)
$0 stop
$0 start
echo "Done."
;;
*)
echo "Usage: /etc/init.d/kanet {start|stop|status|restart}"
exit 1
;;
esac
exit 0
Et on recharge les iptables : /etc/init.d/kanet-rules stop
/etc/init.d/kanet-rules start
Enfin, on relance Kanet : /etc/init.d/kanet restart
|
|
|