Login Logout

HowtoLAMP/Squid

Cette page a été importée automatiquement de notre ancien wiki mais n’a pas encore été révisée.

Howto Squid

Pour sécuriser le serveur web, nous installons un proxy HTTP en sortie. Cela permet d’interdire ou de garder des traces des requêtes faites vers l’extérieur.

Installation

# aptitude install squid3

Configuration

La configuration se passe dans le fichier squid.conf qui contiendra :

# ports
<http_port> 8888 transparent
icp_port 0

# ACL
#acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/32
acl INTERNE src ADRESSE_IP/32 127.0.0.0/8
acl Safe_ports port 80          # http
acl SSL_ports port 443 563

acl WHITELIST url_regex "/etc/squid3/whitelist.conf"

<http_access> deny !WHITELIST
<http_access> allow INTERNE
<http_access> deny all

logformat combined   %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log /var/log/squid3/access.log combined

Le fichier whitelist.conf contiendra les URLs autorisées en sortie :

<http://.*debian.org/.*>
<http://pub.evolix.net/.*>
<http://www.kernel.org/.*>
<http://pear.php.net/.*>
<http://.*akismet.com/.*>
<http://.*wordpress.org/.*>
<http://.*twitter.com/.*>
<http://feeds.feedburner.com/.*>
<http://feeds2.feedburner.com/.*>
<http://sync.openx.org/.*>
<http://oxc.openx.org/.*>
<http://code.openx.org/.*>
<http://pc.openx.com/.*>
<http://api.pc.openx.com/.*>
<http://bid.openx.net/.*>
<http://blog.openx.org/.*>
<http://forum.openx.org/.*>
<http://www.backports.org/.*>
<http://.*.facebook.com/.*> 
<http://.*.fbcdn.net/.*> 
<http://.*.google-analytics.com/.*>
<http://ajax.googleapis.com/.*>

La liste des URLs que nous utilisons en standard peut-être trouvée sur http://forge.evolix.org/scm/viewvc.php/trunk/etc/whitelist.conf?root=packweb&view=log

Il reste évidemment à rediriger les requêtes HTTP en sortie vers Squid avec IPTables :

/sbin/iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner --uid-owner proxy -j ACCEPT
/sbin/iptables -t nat -A OUTPUT -p tcp --dport 80 -d  ADRESSE_IP -j ACCEPT
/sbin/iptables -t nat -A OUTPUT -p tcp --dport 80 -d 127.0.0.1 -j ACCEPT
/sbin/iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8888

Monitoring

Afin de détecter des oublis ou des éventuelles attaques, il sera intéressant d’ajouter la configuration suivante au logiciel log2mail :

file = /var/log/squid3/access.log
  pattern = "TCP_DENIED/403"
  mailto = ADRESSE-MAIL-ALERTE
  template = /etc/log2mail/template.squid

template.squid

From: %f
To: %t
Subject: Squid Alert - URL non autorisee       

Dernieres URLs non autorisees

We have matched your pattern "%m" in "%F" %n times:

%l

Eventuellement autoriser l'access dans la whitelist ou verifier dangerosite de la requete.

Yours,
log2mail.

On n’oubliera pas d’ajouter l’utilisateur log2mail dans le groupe proxy pour qu’il puisse lire ce fichier (sinon log2mail plante !!) :

# adduser log2mail proxy
Adding user `log2mail' to group `proxy' ...
Adding user log2mail to group proxy
Done.

Tips

Squid est lent / indispo

Cas possible où squid tente de sortir en IPv6 alors qu’il n’y a qu’un lien local !

Astuce : rajouter tcp_outgoing_address $IP

Astuce “pêche à la ligne”

Si vous voyez passer des requêtes vers des sites suspects et que vous voulez identifier quel utilisateur les provoque, voici l’astuce “pêche à la ligne” : ~ # iptables -I OUTPUT -p tcp –syn -s –dport 8888 -j LOG –log-uid ~

Desactiver le cache

Dans certains cas, on peut vouloir désactiver le cache de façon globale :

cache deny all

Problème avec Expect 100-continue

En cas d’erreur 417 sur des Expect 100-continue, ajouter la directive :

ignore_expect_100 on