NyroBlog
Banniere NyroBlog
Image de DëuG - ?
« mai 2010
lunmarmerjeuvensamdim
12
3456789
10111213141516
17181920212223
24252627282930
31

Serveur DNS : PowerDNS (Serveur Web sur Debian Lenny)

J'ai choisi PowerDNS plutôt que Bind parce que sa configuration peut se faire de différentes façons. J'ai choisi d'utiliser MySQL. On désinstalle donc bind avant d'installer PowerDNS :
apt-get remove bind9
apt-get install pdns-server pdns-backend-mysql pdns-recursor
PowerDNS est découpé de deux façon différentes et indépendantes : le serveur qui permet de définir vos zones (vos sites, sous-domaines, etc...) et le recursor qui permet d'effectuer des requêtes DNS vers l'extérieur.

Configurons d'abord le serveur DNS dans /etc/powerdns/pdns.conf :
allow-axfr-ips=217.70.177.40
allow-recursion=127.0.0.1
disable-axfr=no
cache-ttl=300
launch=gmysql
logging-facility=0
out-of-zone-additional-processing=yes
query-cache-ttl=300
recursive-cache-ttl=150
recursor=127.0.0.1:54
Les paramètres avec axfr sont utilisé pour autoriser les transfert de zones vers l'IP 217.70.177.40, qui n'est autre que ns6.gandi.net, le DNS secondaire des domaines que j'utilise. De cette façon, lorsque je fait une mise à jour de mes DNS sur mon serveur, Gandi vérifie régulièrement la version de mon paramètrage et met à jour ses DNS si besoin.
On paramètre bien sûr du cache pour ne pas rappeler tout le temps les mêmes requêtes MySQL. On sélectionne le backend mysql avec le paramètre launch, active les log en précisant le logging-facility à 0 (cf plus bas) et en indiquant l'adresse du recursor. Recursor que l'on configure tout de suite dans /etc/powerdns/recursor.conf :
allow-from=127.0.0.1
local-address=127.0.0.1
local-port=54
logging-facility=1
On le lance sur le port 54, en n'autorisant les requêtes que locales et en logant les fichiers via logging-facility 1.

Mais qu'est ce que ces logging-facility ? Il s'agit en fait d'utiliser le démon rsyslog fourni avec Debian pour loggé les fichiers. Les logs seront en fait crée sous le nom localN, où N est le numéro que nous avons indiqués. Il faut donc paramétrer rsyslog pour gérer ces fichiers :
echo "local0.*  /var/log/pdns.log" > /etc/rsyslog.d/pdns.conf
echo "local1.*  /var/log/pdns-recursor.log" >> /etc/rsyslog.d/pdns.conf
Dans le même temps, paramétrons ces log pour ne pas qu'ils fassent une taille énorme via le proccessus des logrotate. Pour ce fait, ajouter simplement dans /etc/logrotate.d/rsyslog les lignes suivantes, juste après /var/log/messages
/var/log/pdns.log
/var/log/pdns-recursor.log
On recharge rsyslog pour être tranquille avec les logs :
/etc/init.d/rsyslog force-reload
Mais maintenant, il reste encore à paramétrer le backend MySQL pour exécuter les requêtes correctes sur le serveur. Et pour faire ça, il faut qu'une base de données soit prête pour contenir toutes les informations nécessaires. Appelons (et créons) cette base serverconf :
mysqladmin -p create serverconf
Comme le schéma de la base est assez simple, je ne vais pas le décrire ici. Vous pouvez simplement télécharger le fichier de création.
Ce fichier créé aussi l'utilisateur associé et son mot de passe. A vous de modifier... Exécutons simplement ce script :
mysql -h localhost -u root --password=MySQL serverconf < /PATH/TO/powerdns.sql
Enfin, éditons le fichier /etc/powerdns/pdns.d/pdns.local pour paramétrer la connexion et toutes les requêtes du serveur DNS :
gmysql-socket=/var/run/mysqld/mysqld.sock
gmysql-dbname=serverconf
gmysql-user=serverconfuser
gmysql-password=serverconfpass

gmysql-basic-query=select content,ttl,prio,type,domain_id,name from record where type='%s' and name='%s'
gmysql-id-query=select content,ttl,prio,type,domain_id,name from record where type='%s' and name='%s' and domain_id=%d
gmysql-any-query=select content,ttl,prio,type,domain_id,name from record where name='%s'
gmysql-any-id-query=select content,ttl,prio,type,domain_id,name from record where name='%s' and domain_id=%d
gmysql-list-query=select content,ttl,prio,type,domain_id,name from record where domain_id=%d
gmysql-master-zone-query=select master from domainDNS where name='%s' and type='SLAVE'
gmysql-info-zone-query=select domain_id AS id,name,master,last_check,notified_serial,type from domainDNS where name='%s'
gmysql-info-all-slaves-query=select domain_id AS id,name,master,last_check,type from domainDNS where type='SLAVE'
gmysql-supermaster-query=select account from supermaster where ip='%s' and nameserver='%s'
gmysql-insert-slave-query=insert into domainDNS (type,name,master,account) values('SLAVE','%s','%s','%s')
gmysql-insert-record-query=insert into record (content,ttl,prio,type,domain_id,name) values ('%s',%d,%d,'%s',%d,'%s')
gmysql-update-serial-query=update domainDNS set notified_serial=%d where id=%d
gmysql-update-lastcheck-query=update domainDNS set notified_serial=%d where id=%d
gmysql-info-all-master-query=select domain_id,name,master,last_check,notified_serial,type from domainDNS where type='MASTER'
gmysql-delete-zone-query=delete from record where domain_id=%d
gmysql-wildcard-query=select content,ttl,prio,type,domain_id,name from record where type='%s' and name like '%s'
gmysql-wildcard-id-query=select content,ttl,prio,type,domain_id,name from record where type='%s' and name like '%s' and domain_id=%d
gmysql-wildcard-any-query=select content,ttl,prio,type,domain_id,name from record where name like '%s'
gmysql-wildcard-any-id-query=select content,ttl,prio,type,domain_id,name from record where name like '%s' and domain_id=%d
Et on finit par recharger les deux démons :
/etc/init.d/pdns-recursor force-reload
/etc/init.d/pdns force-reload

Prêt pour passer au plus gros, le serveur de mail ?

Retour au sommaire.

Base de données : MySQL (Serveur Web sur Debian Lenny)

On installe le serveur :
apt-get install mysql-server
Durant l'installation, il vous sera demandé le mot de passe de l'utilisateur MySQL root.

MySQL vient avec une commande sympathique qui permet de sécurisé le serveur :
mysql_secure_installation
# Current password : VOTRE_MOT_PASSE
# set new password : N
# remove anonymous Users : Y
# Disallow root login remotley : Y
# remove test database and access to it : Y
# reload privileges table now : Y
Si vous utilisez InnoDB comme moteur de stockage de vos tables, l'ensemble des données de chaque table est stockée dans un seul et même fichier pour toutes les tables InnoDB de toutes les bases de données. Cela peut vous embetter, et dans certains cas, causer des lenteurs du serveur. Il est possible de paramétrer MySQL pour créer un fichier de stockage par table. Pour ce faire, on édite le fichier /etc/mysql/my.cnf pour y ajouter dans la section [mysqld] :
innodb_file_per_table=1

On déplace les fichiers de la base de données sur /home en prenant soin d'arrêter le serveur avant :
/etc/init.d/mysql stop
mv /var/lib/mysql /home/var/
ln -s /home/var/mysql/ /var/lib/mysql
chown mysql:mysql /home/var/mysql
/etc/init.d/mysql start
Nous voilà prêt pour installer le serveur DNS.

Retour au sommaire.

Serveur FTP : vsftpd (Serveur Web sur Debian Lenny)

On installe le paquet simplement :
apt-get install vsftpd

Puis on modifier le fichier de configuration /etc/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
force_dot_files=YES
De cette façon, chaque utilisateur de notre serveur (un utilisateur étant associé à un site) pourra se connecter par FTP et n'avoir accès qu'à son répertoire.

On recharge la configuration :
/etc/init.d/vsftpd force-reload

Et on passe au serveur de base de données, MySQL.

Retour au sommaire.

Apache et PHP (Serveur Web sur Debian Lenny)

Et c'est là qu'on découvre les joies de Debian :
apt-get install apache2 apache2-dev libapache2-mod-gnutls php5 php5-mysql php5-dev php-pear php5-gd php5-mcrypt
Nous installes tout le nécessaire pour apache avec PHP5.

Un peu ce paramétrage s'impose quand même : dans le fichier /etc/apache2/mods-available/userdir.conf, remplacer public_html par www.
En effet, sur notre serveur, chaque site aura un utilisateur associé avec un dossier www où les fichiers web seront déposés.

Activons quelques modules Apache :
a2enmod userdir
a2enmod rewrite
a2enmod gnutls
a2enmod expires

J'ai décider d'utiliser gnutls plutôt que ssl car il permet de définir un certificat SSL par domaine. Malheureusement, ça marche qu'à partir de IE7 sur Windows Vista. Pour les autres navigateurs, pas de problèmes sur les autres systèmes d'exploitation.

D'ailleurs Apache doit écouter sur le port 443 (https) pour que gnutls puisse entrer en jeu. On modifie le fichier /etc/apache2/ports.conf pour y ajouter :
NameVirtualHost *:443
Listen 443
(Attention, pas dans la section <IfModule mod_ssl.c> puisque nous n'utilisons pas ce module)

Puis paramétrons le temps de cache des certifications, dans le fichier /etc/apache2/mods-available/gnutls.conf on ajoute :
GnuTLSCacheTimeout 300

La configuration debian d'apache donne beaucoup d'informations sur le serveur. On enlève tout ça dans le fichier /etc/apache2/conf.d/security :
ServerTokens Prod
ServerSignature Off
TraceEnable Off

De la même façon, la configuration de base pour les optimisations concernant le cache utilisateur des fichiers n'est pas optimales. Pour l'améliorer, on ajoute le fichier /etc/apache2/conf.d/optimisations :
ExpiresActive On
ExpiresDefault "access plus 31 days"
FileETag none

Toujours dans l'idée de mettre un maximum de fichier dans /home, déplaçons le dossier /var/www :
mv /var/www/ /home/var/
ln -s /home/var/www/ /var/www

Enfin, Apache arrive avec un fichier html de base affichant simplement "It works". Plutôt que cela, je préfère définir un fichier php qui
redirige sur mon nom de domaine principale :
echo "<?php" > /home/var/www/index.php
echo "header('location: http://domain.tld');" >> /home/var/www/index.php
rm /home/var/www/index.html

On a finit de jouer avec Apache, on recharge la configuration pour appliquer les changements :
/etc/init.d/apache2 force-reload

Passons à la suite, le serveur FTP.

Retour au sommaire.

Préparation (Serveur Web sur Debian Lenny)

Ce premier billet va permettre de mettre en place notre espace de travail.

Sur debian, il existe vi et vim. Vim est beaucoup plus simple d'utilisation selon moi. Afin de pas s'embêter à taper toujours son nom complet, nous allons ajouter un alias de commande pour celui-ci. Profitons-en aussi pour ajouter d'autres alias utiles dans /root/.bashrc :
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'
alias vi='vim'
Toutes les lignes sauf la dernière devrait déjà exister, mais commenter. Elles permettent juste d'avoir de jolis listing de fichiers.

Lorsque vous vous connaitrez pour la première fois à votre serveur web, ce sera sûrement en root. Les administrateurs n'aiment pas ça. Ca m'est un peu égal, mais j'ai quand même décidé de créer un nouvel utilisateur (toto) qui n'est en fait ni plus ni moins qu'un alias de root, puis de n'autoriser que lui.
echo "toto::0:0:root:/root:/bin/bash" >>
/etc/passwd echo "toto:*:14293:0:99999:7:::"
>> /etc/shadow passwd toto
shadowconfig on

Pas très commode pour ajouter un utilisateur, je vous l'accorde, mais de cette façon, aucun répertoire de créé, et l'utilisateur toto est tout de suite un alias de root.

Puis nous allons n'autoriser que ce nouvel utilisateur toto à se connecter en SSH sur notre serveur :
echo "" >> /etc/ssh/sshd_config
echo "AllowUsers toto" >> /etc/ssh/sshd_config

Et on redémarre SSH :
/etc/init.d/ssh force-reload

Si vous êtes sûr de ce que vous avez fait, vous pouvez vous déconnecter et vous reconnecter, avec toto cette fois-ci.

Sur Debian, les mises à jour sont automatisés par le système APT. Il suffit de renseigner les URLs où il doit récupérer les paquets. Il s'agit du fichier /etc/apt/sources.list. Il faut généralement y ajouté les backport, les volatile et les mises à jour de sécurité. Il peut ressembler à :
deb http://mir1.ovh.net/debian/ lenny main contrib non-free
deb-src http://mir1.ovh.net/debian/ lenny main contrib non-free

deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free

deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free

deb http://www.backports.org/debian lenny-backports main contrib non-free
deb-src http://www.backports.org/debian lenny-backports main contrib non-free

Pour pouvoir utiliser le backport, il faut la clé GPG du dépôt. Pour ce faire, il suffit d'installer debian-backports-keyring avec la commande :
apt-get install debian-backports-keyring

Comme on est sur Debian, commençons par une mise à jour de notre système, ça ne fera pas de mal :
apt-get update
apt-get dist-upgrade

Enfin, le serveur fourni par ovh est partitionné avec le / de 5 Go, et le reste sur le /home. Pour éviter tout problème dû à un grand nombre de fichiers, beaucoup de fichiers du serveur seront, dans notre installation, déposé dans /home/var. Commençons par y mettre les logs :
mkdir /home/var
mv /var/log /home/var
ln -s /home/var/log/ /var/log
Remarquez que l'on garde évidemment un lien symbolique pour ne pas avoir à modifier tous les fichiers de configuration...

S'en est fini pour la préparation du terrain, passons au serveur web.

Retour au sommaire.

Serveur Web sur Debian Lenny : Tutorial complet

J'ai récemment acheté un serveur dédié chez OVH. Comme j'ai pris une version nue Debian, j'ai décidé de faire une série de billets pour fournir un tutoriel complet d'installation d'un serveur web basé sur Debian Lenny.

Ce tutoriel n'est en rien un gage de sécurité et je ne pourrai être tenu responsable pour un manquement quelconque.

Les prérequis pour ce tutoriel sont :
Connaissance de base de Debian/Linux : gestion des droits, apt, démons, etc...
Edition des fichiers avec vi (ou autre de votre choix)
Connaître SSH, comment l'utiliser, se connecter sur son serveur...

Cela étant dit, voici le sommaire de ce tutoriel :

Je tenterai d'expliquer toutes les configurations qui peuvent ne pas sembler claire au premier coup d'oeil.
Si besoin, les commentaires sont là !

Même chose pour vos remarques, suggestions, retour d'expérience, etc... utilisez les commentaires !

Le problème étant posé, passons aux choses sérieuses et à la première étape.

Le méchant Lipdub

To do a nice lipdub :

  • Take 300 people whom are most student at the IUT of Belfort-Montbéliard
  • A track which is 100% student : Monsieur Connard from Tock'art
  • Only one repetition morning
  • One shooting afternoon with some technical trouble with CD player

< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 >