Proxy
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
/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://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
|
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
- 56000*8 sets your overall limit at 448 kbit/s
- 18750*8 sets your per-network limit at 150 kbit/s
- 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
<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"
- patcher squid 2 (pas nécessaire avec squid 3) http://longsleep.org/howto/squidawstats
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
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.
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>
- 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
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. |