Proxy

De wikilivois
Aller à la navigationAller à la recherche

Proxy DNS avec BIND

<licode file=/etc/conf.d/named> CHROOT="/chroot/dns" </licode>

#emerge --config bind

Le fichier à éditer est:

<licode file=/chroot/dns/etc/bind/named.conf> options {

       version "";
       directory "/var/bind";
       forward first;
       forwarders {
               192.168.100.163;
               192.168.100.164;
       };
       listen-on-v6 { none; };
       //listen-on { 127.0.0.1; };
       // to allow only specific hosts to use the DNS server:
       //allow-query {
       //      127.0.0.1;
       //};
       // if you have problems and are behind a firewall:
       //query-source address * port 53;
       pid-file "/var/run/named/named.pid";

};

zone "." IN {

       type hint;
       file "named.ca";

};

zone "localhost" IN {

       type master;
       file "pri/localhost";
       allow-update { none; };
       notify no;

};

zone "0.0.127.in-addr.arpa" IN {

       type master;
       file "pri/127.0.0";
       allow-update { none; };
       notify no;

}; </licode>

<licode file=/chroot/dns/etc/bind/pri/livois.com.zone> $TTL 1W @ IN SOA ns.localhost. root.localhost. (

                                     2005121701 ; Serial
                                     28800      ; Refresh
                                     14400      ; Retry
                                     604800     ; Expire - 1 week
                                     86400 )    ; Minimum
               IN      NS      ns

www IN A 192.168.10.10 mail IN A 192.168.10.1 bedouin IN A 192.168.100.33 home IN A 192.168.100.2 ldap IN CNAME www ftp IN CNAME www monys IN CNAME www livois.com. MX 10 mail </licode>

Relay SMTP avec Postfix

http://www.postfix.org

/etc/postfix/main.cf

Définir les adresses qui peuvent envoyer des mails <licode>mynetworks=127.0.0.1,192.168.x.0/24</licode>

Définir le serveur smtp relai par défaut si nécessaire (ex : antivirus) <licode>relayhost=relay.livois.com</licode>

Relai vers des serveurs distincts Ecrire dans le ficher /etc/postfix/transport une ligne du type : <licode file=/etc/postfic/transport> postfix.org smtp:smtp.free.fr </licode>

Lancer la commande :

#postmap /etc/postfix/transport

Ajouter une ligne du type dans main.cf <licode file=/etc/postfix/main.cf> transport_maps=hash:/etc/postfix/transport </licode>

Remarque : Ne pas oublier de lancer la commande /usr/bin/newaliases à l’installation de postfix.

Proxy HTTP et FTP avec Squid

http://www.squid-cache.org/

http://christian.caleca.free.fr/squid/

Package Gentoo : + customlog

Remarque : Squid fonctionne bien comme proxy ftp pour mozilla mais pas pour internet explorer ou des clients ftp usuels.

Configuration standard

Editer /etc/squid/squid.conf

Il existe, pour simplifier, deux types de lignes :

  • Les lignes « acl » qui définissent des variables (port, protocole, adresses sources, adresses destination, expressions rationnelles)
  • et les règles d’accès « http_access » qui autorisent (allow) ou non (deny) en fonction de l’association ET des variables « acl ».

Quelques exemples de directives : (La liste complète se trouve à l’adresse http://squid.visolve.com/squid/configuration_manual.htm )

Exemples de règles Explications
no_cache deny|allow aclname
ex: no_cache deny nocache

Pour que certaines adresses ne soient pas dans le cache (utile pour les webmasters), on utilise la directive no_cache

cache_dir ufs /var/cache/squid 512 16 256 Définit un cache de 512Mo dans /var/squid/cache. Les valeurs 16 et 256 sont le nombre de sous répertoires de niveau 1 et 2. Plus de détails sur http://squid.visolve.com/squid/squid24s1/logfiles.htm#cache_dir.
http_port 8080 La connexion au proxy se fait sur le port 8080. C’est la seule ligne qui n’est ni une variable acl ni une règle d’accès http_access.
acl safe_port port 80 21 443
acl http_port port 80
acl ftp_port port 21
acl ssl_port port 443


acl http_proto proto http
acl ftp_proto proto ftp
acl CONNECT method CONNECT

Définition des ACLs générales
acl localhost src 127.0.0.1/32
acl lan src 192.168.XX.0/24
acl all src 0.0.0.0/0.0.0.0
Définition des groupes d'accès
#acl Regexp url_regex -i .wav -i .mp3 -i .mpeg -i .mpg -i .avi
#http_access deny Regexp all

Pour éviter certains téléchargement (la règle n’est pas activée par défaut)

http_access allow CONNECT ssl_port lan
http_access allow ftp_port ftp_proto lan
http_access allow http_port http_proto lan
Autorisations
acl purge method PURGE
http_access allow purge localhost
http_access deny purge
http_access deny all Règle par défaut

Remarques :Le paramètre visible_hostname peut être requis pour permettre le lancement de squid. Si on ne définit pas deny all, squid fait le contraire de la dernière ligne access ou deny. La première ligne lue est la première ligne appliquée.

Configuration “proxy_transparent”

http://tldp.org/HOWTO/TransparentProxy.html

  • Du côté d’Iptables

<licode> $IPTABLES -t nat -A PREROUTING -i $IF_LAN1 -s $LAN1_NET -p tcp --dport 80 -j DNAT --to $IP_LAN1:8080 </licode>

  • Du côté de squid.conf

<licode file=/etc/squid/squid.conf> httpd_accel_host_virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on </licode>

Configuration avancée

Limitation du débit

Each type of pools allows you to limit bandwith in different ways : <licode file=/etc/squid/squid.conf> acl XXX delay_pool_count 1 #tells squid how many delay pools there will be delay_class 1 1 #creates a delay pool (N°1) of class 1 delay_parameters 1 16000/16000 #pool 1 manipulated, restore/max values delay_access 1 allow XXX </licode>

The restore value is used to set the download speed, and the max value lets you the size at which the files are to be slowned down from. Restore is in bytes per second, max is in bytes. In the above example, downloads proceed at full speed until they have downloaded 16000 bytes. This limit ensures that that small file arrive reasonably fast. Once this much data has been transferred, the transfer rate is slowed to 16000 bytes per second (128K)

By using a different pool type, you can set rate limits by IP address easily. Ex: <licode> acl all src 0/0 delay_pool_count 1 delay_class 1 2 delay_parameters 1 12500/12500 2500/2500 delay_access 1 allow all </licode>

Here each ip si limited to 2.5kbytes/s (20K) <licode> acl all src 0/0 delay_pool_count 1 delay_class 1 3

  1. 56000*8 sets your overall limit at 448 kbit/s
  2. 18750*8 sets your per-network limit at 150 kbit/s
  3. 500*8 sets your per-user limit at 4 kbit/s

delay_parameters 1 56000/56000 18750/187500 500/500 delay_access 1 allow all </licode>

Ici le per-network correspond à des réseaux de classe C. -1 => no limit

Load balancing (TODO)

Transparent caching

http://www.deckle.co.za/squid-users-guide/Transparent_Caching

Un proxy transparent est incompatible avec l'authentification pour des raisons internes à TCP.

Il faut :

  • configurer le firewall rediriger les flux TCP vers le port 80 vers le proxy

<licode>iptables –t nat –A PREROUTING –s network -p tcp --dport 80 –j DNAT --to server:8080</licode>

  • configurer squid comme un proxy transparent

Configuration pour squid 2.6

http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE1-RELEASENOTES.html#s2

<licode file=/etc/squid/squid.conf> http_port 192.168.10.1:8080 transparent </licode>

Configuration pour squid < 2.6 <licode file=/etc/squid/squid.conf> httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on </licode>

Communicating with other proxy servers

<licode file=/etc/squid/squid.conf> cache_peer cache.myparent.example parent 3128 3130 prefer_direct off </licode> Squid communicates with the parent on HTTP port 3128 and will use ICP to query the server using port 3130.

Pour un passage obligé par le proxy principal (s’il ne comprend pas ICP), rajouter default no-query :

<licode>cache_peer cache.myparent.example parent 3128 3130 default no-query</licode>

The default option essentially tells Squid “ Go through this cache for all requests. If it’s down, return an error message to the client: you cannot go direct”.

The no-query option sets Squid to ignore the given ICP port, and never to attempt to query the cache with ICP.

Divers

If squid dies email is sent to the address specified with the cache_mgr tag. This address is also appended to the end of error pages returned to users if, for example, the remote machine is unreachable.

<licode>cache_store_log none</licode>

Configuration de squidguard

http://www.squidguard.org/

<licode file/etc/squid/squid.conf> redirect_program /usr/local/squidGuard/bin/squidGuard redirect_children 20 redirector_bypass on </licode> (La 2e ligne limite le nombre de redirecteurs qui prennent de 800Ko à 160Ko de mémoire) (La 3e ligne permet de ne pas utiliser de redirecteur s’ils sont tous occupés.)

On peut lier squidguard à un antivirus : http://viralator.loddington.com

<licode>redirect http://127.0.0.1/viralator.cgi?url=%u</licode>

Logs

http://www.squid-cache.org/Scripts/

  • access.log
 time elapsed remotehost code/status bytes method URL rfc931 peerstatus/peerhost type
1097998987.301      4 192.168.10.2 TCP_MEM_HIT/200 620 GET http://awstats.sourceforge.net/icon/other/vk.png - NONE/- image/png

squid2common.pl transforme les logs squid sous le format clf

host rfc931 authuser [DD/Mon/YYYY:hh:mm:ss] "request" ddd bbbb
ddd: the status code returned by the server, - if not available.
bbbb: the total number of bytes sent, *not including the HTTP header*, - if available
home.livois.com - - [17/Oct/2004:18:49:26 +1000] "GET http://martin.gleeson.com/pwebstats/style.css HTTP/1.0" 200 4664

  • time

A Unix timestamp as UTC seconds with a millisecond resolution. You can convert Unix timestamps into something more human readable using this short perl script: <licode>

       #! /usr/bin/perl -p
       s/^\d+\.\d+/localtime $&/e;

</licode>

Webalizer

Package Gentoo: webalizer (+xtended,+geoip)

<licode file=/etc/crontab> 0 0 * * * root webalizer -o /var/www/www.livois.com/supervision/squidalizer/ -p -Q -F squid -Y -C 0 -E 0 -e 0 /var/log/squid/access.log </licode>

  • -p incremental (conserve les données après chaque passage)
  • -C 0 0 TopCountries
  • -S 30 30 TopSites
  • -Q mode silencieux
  • -Y n’indique pas la répartition par pays
  • -E 0 TopExit
  • -e 0 TopEntry
  • -F squid logs de type squid (par défaut clf = log apache)
  • -o $WEB/webalizer (repertoire des fichiers html d’output)

Editer /etc/webalizer.conf (les TopK ne peuvent être changés en ligne de commande) <licode file=/etc/webalizer.conf> TopSites 15 TopKSites 15 (IP qui utilisent le proxy) TopURLs 30 (pages accedées) TopKURLs 30 </licode>

Awstats

Je préfère ne pas utiliser Awstats pour les logs squid car:

  • le format de logs squid n'est pas reconnu automatiquement
  • le protocole « CONNECT » (https) ne semble pas reconnu
  • les URLs sont triées par nombre d'accès et non par volume (débit)


Pour changer le format des logs squid, il y a plusieurs façons de faire :

  • mettre la directive emulate_http_log dans squid.conf

If your log records are EXACTLY like this (With some Squid versions, after setting emulate_http_log to on): 200.135.30.181 - - [dd/mmm/yyyy:hh:mm:ss +0x00] "GET http://www.mydomain.com/page.html HTTP/1.0" 200 456 TCP_CLIENT_REFRESH_MISS:DIRECT You must use : LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %other"

C'est possible avec le flag customlog sous Gentoo :

Package Gentoo: squid +customlog

Configurer le format des logs de squid: <licode file=/etc/squid/squid.conf> logformat combined %>a %ui %un [%{%d/%b/%Y:%H:%M:%S +0000}tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh </licode>

Remarque :L'argument passé à la variable %tl permet de mettre la date au format reconnu par awstats. +0000 correspond au "timezone offset" Plus d'information sur le patch customlog sont disponibles sur http://devel.squid-cache.org/customlog/.

  • transformer access.log au format clf avec squid2common.pl (récupérable avec pwebstats)

Par défaut squid2common.pl créé 2 fichiers (cache.convert et proxy.convert). Il faut changer une ligne dans le script pour ne créer qu'un fichier squid.convert.

If your log records are EXACTLY like this (NCSA common CLF log format): 62.161.78.73 - - [dd/mmm/yyyy:hh:mm:ss +0x00] "GET /page.html HTTP/1.1" 200 1234 You must use : LogFormat=4 Note: Browsers, OS's, Keywords and Referers features are not available with a such format.

Sarg

http://sarg.sourceforge.net/

Sarg is a Squid Analysis Report Generator that allow you to view "where" your users are going to on the Internet. Sarg generate reports in html, with many fields, like: users, IP Addresses, bytes, sites and times.

Squidalyser

Squidalyser is a squid traffic analyser, designed to allow per-user scrutiny and analysis of squid logfiles. The program allows a non-technical user to extract information about web usage patterns, the type of information downloaded, the sites visited by users, the graphics downloaded, and the amount of information (per-byte or per-file) accessed. The program runs from a Unix system via a web browser.

Squid-graph

http://squid-graph.securlogic.com/

Package Gentoo: squid-graph

Squid Graph is a free, simple, yet powerful Squid v2 native logfile analysis tool that generates reports with graphical representation of the proxy server's traffic.

Cet outil n'analyse le trafic que pour une journée. Sans doute vaut il mieux le faire soit même avec rrdtool.

Squidgraph.png

Noter l'outil /usr/bin/timeconv qui traduit les dates au format squid.

Proxy POP

perdition

p3scan

Package Gentoo: p3scan, spamassassin

Rediriger les connexions vers les serveurs POP externes sur le port 8110 du serveur. <licode file=/etc/fw/rc.firewall>

  1. Redirection des connexion POP du LAN vers les serveurs POP externes le p3scan 8110

$IPTABLES -t nat -A PREROUTING -p tcp -d ! $IP_LAN -i $IF_LAN --dport pop3 -j REDIRECT --to 8110 </licode>

<licode file=/etc/fw/access> $IPTABLES -A INPUT -i $IF_LAN -s $LAN_NET -p tcp --sport 1024: --dport 8110 -m state --state NEW -j ACCEPT </licode>

Configurer p3scan : <licode file=/etc/p3scan/p3scan.conf> maxchilds = 10 ip = 192.168.10.1 user = amavis scannertype = basic scanner = /usr/bin/clamdscan --no-summary

checkspam
spamcheck = /usr/bin/spamc
quiet

template = /etc/p3scan/p3scan-fr.mail </licode>

#chown amavis /var/spool/p3scan -R

Configuration « antispam » avec spamassassin

Les paramètres de configuration de p3scan.conf sont checkspam et spamcheck.

#chown amavis /var/amavis/.spamassassin/bayes_journal

Il faut lancer spamd:

#/etc/init/spamd start
#/etc/init.d/p3scan start

Remarques :

  • L'option debug génère de nombreux logs
  • Le user doit correspondre au user de clamd – ici amavis
  • Les virus sont laissés par défaut dans le répertoire /var/spool/p3scan.
  • L'option justdelete supprime le message au lieu de le laisser dans ce répertoire.

Copyright

© 2006 Christophe de Livois

Tête de GNU Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL.