Category Archives: Server

Config Proxy automatique

Slow

Aujourd’hui notre accès internet ne suffisait plus, afin de diminuer la bande passante nécessaire j’ai mis en place un Proxy. L’intérêt principal en est simple, c’est un cache : si un utilisateur a déjà téléchargé quelque chose sur internet, les autres utilisateurs voulant télécharger la même chose n’auront pas à utiliser l’accès internet puisque cela sera déjà dans le cache. C’est transparent pour les utilisateurs, mis à part le fait qu’internet devient beaucoup plus rapide dans certains cas.

Pour ne pas avoir à passer sur les 200 postes, et surtout ne pas avoir à repasser partout en cas de changement, j’ai opté pour une solution complètement automatique. J’ai installé SQUID comme proxy sur une Debian Etch, puis j’ai utilisé notre DHCP/DNS sous Windows 2003 pour configurer automatique tous les postes. Bien sûr j’ai fait cela aujourd’hui, je corrigerais les infos si je constate que ça n’a pas marché parfaitement (nous avons 30% de mac, donc IE6, IE7, Safari, Firefox…).

Ajouter dans /etc/apache2/apache2.conf après les autres AddType

AddType application/x-ns-proxy-autoconfig dat

Créer un ficher wpad.dat à la racine d’un serveur web nommé wpad.votredomainelocal.com . Votredomainelocal.com étant le suffixe dns indiqué dans vos paramètres TCP/IP. Souvent fourni par le DHCP.

    function FindProxyForURL(url, host)
{
//If they have only specified a hostname, go directly.
if (isPlainHostName(host))
return "DIRECT";

//These connect directly if the machine they are trying to
//connect to starts with "intranet" - ie http://intranet
//Connect  directly if it is intranet.*
//If you have another machine that you want them to
//access directly, replace "internal*" with that
//machine's name
if (shExpMatch( host, "intranet*")||
shExpMatch(host, "internal*"))
return "DIRECT";

//Connect directly to our domains (NB for Important News)
if (dnsDomainIs( host,"company.com")||
//If you have another domain that you wish to connect to
//directly, put it in here
dnsDomainIs(host,"sistercompany.com"))
return "DIRECT";

//So the error message "no such host" will appear through the
//normal Netscape box - less support queries :)
if (!isResolvable(host))
return "DIRECT";

//We only cache http, ftp and gopher
if (url.substring(0, 5) == "http:" ||
url.substring(0, 4) == "ftp:"||
url.substring(0, 7) == "gopher:")

//Change the ":8080" to the port that your cache
//runs on, and "cache.company.com" to the machine that
//you run the cache on
return "PROXY cache.company.com:8080; DIRECT";

//We don't cache WAIS
if (url.substring(0, 5) == "wais:")
return "DIRECT";

else
return "DIRECT";
}

Il faut alors vérifier que cela fonctionne en mettant manuellement http://wpad.votredomainelocal.com/wpad.dat dans l’adresse de configuration automatique du proxy (dans firefox par exemple). Si cela ne fonctionne pas, inutile d’aller plus loin.

Après si l’on coche la case “configuration automatique” tout a semblé fonctionner à merveille chez nous. Le must reste quand même d’ajouter l’option à notre DHCP afin que toutes les machines soient informées qu’il existe une configuration automatique pour le proxy.

Option DHCP

Sur un DHCP Windows 2003, en faisant un clique droit sur le nom de serveur on peut “définir les options prédéfinies”. Puis on ajoute l’option WPAD de type Chaîne et qui a pour code 252. J’ai alors pu ajouter l’option:

WPAD

PS du 15 avril 2008 : plus de 90% de nos machines ont fait des requêtes sur le proxy sans intervention poste à poste. On peut en conclure que la configuration automatique est un succès. Nous avons 30% de mac et surtout 6 sociétés différentes ayant eu des maintenances informatiques différentes jusqu’à présent.

Ma source principale est :

http://www.laboratoire-microsoft.org/articles/server/ISA2004/7/

Je prévois de mettre en place des statistiques, et j’ai trouvé ce lien pour mrtg :

http://www.malekal.com/squid.php#mozTocId935855

Create a pfx key file for Windows

For apache, we use certificate for *.mycompany.com. They are 3 files :

mycompany.com.crt
mycompany.com.csr
mycompany.com.key

But I need a different file if I want to use this certificate on Windows. Windows asks for only one PFX file. Here is the command I use on linux:

openssl pkcs12 -export -in mydomain.com.crt -inkey mydomain.com.key -out mydomain.com.pfx

My DocumentRoot on Apache

Today Nicolas asked me to use a different root than /Library/Webserver/Documens/ his local websites.

He had “access forbidden” when using a symbolic link.

He found himself the solution, creating an alias :

Alias "/sxt" "/Volumes/DIVERS/projets/sxt/online/"
<Directory "/Volumes/DIVERS/projets/sxt/online/">
       Options Indexes FollowSymLinks MultiViews
       AllowOverride None
       Order allow,deny
       allow from all
</Directory>

Tricks against Spam

I found and interesting page : http://wiki.apache.org/spamassassin/OtherTricks explaining that spam often use the first MX only to go faster, or only the last because the antispam system must be less efficient.

fake0.example.com   10
realmx.example.com  20
fake1.example.com   30

It also propose to add a lot of fake servers at the end, some spam machine use random MX.

fake0.example.com   10
realmx.example.com  20
fake1.example.com   30
fake2.example.com   40
fake3.example.com   50
fake4.example.com   60
fake5.example.com   70

SVN Server on Debian Etch

SVN now directly in Leopard (Mac OS 10.5). This is such a nice surprise that I decided to come back on the right way of programming.

Having known CVS, and then Tortoise SVN for many years, I was not proud to have no backup at all or version control.

You can find what is SVN on Wikipedia.

I followed this tutorial : http://hikage.developpez.com/linux/tutoriels/subversion/?page=page_2

Now I start with the very well known Debian command:

root@strange:/var# apt-get install subversion
root@strange:/var# mkdir /var/subversion
root@strange:/var# mkdir /var/subversion/depot
svnadmin create /var/subversion/depot/myproject (myproject must be replaced by a real name)
apt-get install install libapache2-svn
a2enmod dav_svn (si nécessaire)

/etc/apache2/mod-available/dav_svn.conf must be tuned:

<Location /svn>
DAV svn
Require valid-user
SVNParentPath /var/subversion/depot/
AuthType Basic
AuthName "Mon dépôt"
AuthUserFile /var/subversion/conf/htpasswd
AuthzSVNAccessFile /var/subversion/conf/access
</Location>

now let’s create the first user:

mkdir /var/subversion/conf
htpasswd -c /var/subversion/conf/htpasswd chris
htpasswd /var/subversion/conf/htpasswd user2

/var/subversion/conf/access :

[groups]
webmasters = chris, user2
[myproject:/]
@webmasters = rw
[oneotherproject:/]
chris= rw
* = r
[oneotherproject:/documentation/utilisateur]
authordoc = rw

And now my repository is available at : http://myurl/svn/myproject/

PS: I had to change the right file access to /var/subversion/depot/

chown -R chris:www-data /var/subversion/depot
chmod -R 770 /var/subversion/depot

Apache2 Mass Virtual Hosting

I’m preparing an IPv6 server to host all my projects. It’s so nice to start with a clean one.

First thing, I’ll use Apache2 with his wonderful Mass Virtual Hosting.
This will allow me to create a new web site named www.newwebsite.com only by creating the following directory : /home/hosts/www.newwebsite.com/

Nice isn’t it ?

I’m following this article: http://httpd.apache.org/docs/2.0/vhosts/mass.html

Here are all the command I used for Mass Hosting on Debian Etch:

root@strange:/etc/apache2/mods-enabled# ln -s ../mods-available/vhost_alias.load
mkdir /home/websites
mkdir /home/websites/www.example.com
mkdir /home/websites/www.example.com/online (for my online files)
mkdir /home/websites/www.example.com/offline (where I keep documents about the website)

Then I just replaced the content of /etc/apache2/sites-enabled/000-default by:

# get the server name from the Host: header
UseCanonicalName Off
# this log format can be split per-virtual-host based on the first field
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog /var/log/apache2/access_log vcommon
# include the server name in the filenames used to satisfy requests
VirtualDocumentRoot /home/websites/%0/online
VirtualScriptAlias /home/websites/%0/cgi-bin

Here we are… just have to configure www.example.com’s IP

Next step : SVN Server. I’ll keep a backup of every versions of my projects…