nyroBlog
Ban NyroBlog, by .chonchon
Image by .chonchon - ?

Tag: Sécurité


Sécurité du serveur : fail2ban (Serveur Web sur Debian Lenny)

UPDATE : voir la version à jour pour Debian Squeeze.

 

fail2ban est utilisé pour lire les log de tous les autres démons et bannir des adresses IP s'ils ont échoués à plusieurs reprises de se connecter.
On installe simplement par apt :

apt-get install fail2ban

Puis on configure fail2ban dans /etc/fail2ban/jail.conf

bantime  = 600
destemail = server@domain.tld
action = %(action_mwl)s

[postfix]
action   = %(action_)s
bantime  = 3600

De cette façon, on recevra un email lorsque fail2ban fera une action quelconque. Il a été désactivé pour postfix car les emails étaient très très nombreux !!!
Ensuite, activez les démons que vous désirez. Dans notre installation, il s'agit de pam-generic, vsftpd, postfix, apache, apache-noscripts, apache-overflows et sasl : il suffit de mettre enabled à true dans les sections concernés.

Il existe aussi une attaque sur le serveur Apache qui envoie des requêtes étranges sur la racine du serveur en cherchant un fichier commencant par w00tw00t. Nous pouvons bannir aussi les IP qui effectuent ces requêtes en ajoutant le fichier /etc/fail2ban/filter.d/apache-w00tw00t.conf :

# - - [29/Apr/2008:22:54:08 +0200] "GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 326

[Definition]
# Option:  failregex
# Notes.:  regex to match the w00tw00t scan messages in the logfile. The
#          host must be matched by a group named "host". The tag "" can
#          be used for standard IP/hostname matching.
# Values:  TEXT
failregex = ˆ -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".*

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
ignoreregex =

Puis il faut activer ce filtre dans /etc/fail2ban/jail.conf en ajoutant :

[apache-w00tw00t]
enabled = true
filter  = apache-w00tw00t
port = all
banaction = iptables-allports
port     = anyport
logpath  = /var/log/apache*/access.log
maxretry = 1
bantime = 86400


En plus, je me suis aperçu que de nombreux spammeurs essayaient d'envoyer des emails à des adresses inexistantes. Par défaut, le filtre de fail2ban ne banni que les emails rejeté par le serveur (erreur 554) et pas les emails rejeté pour une adresse inexistante. c'est pour cela qu'on édite le fichier /etc/fail2ban/filter.d/postfix.conf pour simplement supprimé le 4 de failregex = reject: RCPT from (.*)\[\]: 55 pour bannir n'importe quelle erreur.

Et pour finir, on recharge le démons pour prendre en compte nos changements :

/etc/init.d/fail2ban force-reload

Maintenant que notre serveur fonctionne avec les démons que l'on veut, si on monitorait pour avoir quelques stats et outils ?

Retour au sommaire.

Serveur de mail : postfix, dovecot, dspam, clamav (Serveur Web sur Debian Lenny)

UPDATE : voir la version à jour pour Debian Squeeze.

 

Cette partie sera la plus grande car la plus complexe. Et on ne se facilite pas la tâche puisque le serveur de mail incluras un antispam avec vérifications des éventuels virus contenu dans les emails. L'antispam pourra aussi apprendre de ses erreurs lorsque l'utilisateur final déplacera simplement ses emails dans les dossiers IMAP.

Bref, commençons par supprimer l'éventuel Exim 4 qui serait présent sur le serveur :

apt-get remove exim4 exim4-base exim4-config exim4-daemon-light

Puis on installe tous les paquets d'un coup :

apt-get install mysql-server postfix postfix-mysql dovecot-imapd dovecot-pop3d dspam dspam-doc libdspam7-drv-mysql bzip2 clamav-daemon make

Durant l'installation, Postfix demande le type de configuration, qui sera naturellement "Sites Internet". Puis le nom du serveur ; entrez simplement le nom de domaine principal de votre serveur comme domain.tld.

Puis libdspam7-drv-mysql (le driver de stockage des informations de DSpam sur MySQL) vous demandera s'il faut créer la base de données. Répondez simplement oui. Le mot de passe MySQL root est demandé ensuite. Enfin, un mot de passe pour cette base de donnée est demandé. Laissez simplement le champ vide pour qu'il en choisisse un pour vous.

Commençons par créer les tables contenant les informations des emails et alias des sites web avec le fichier de création. Ces tables sont naturellement dans la même base de donnée que powerdns, puisqu'un email devra forcément être rattaché à un nom de domaine géré par le serveur DNS.

mysql -h localhost -u root --password=MySQL serverconf < /PATH/TO/postfix.sql

Postfix a besoin de savoir comment s'adresser à MySQL pour vérifier les mots de passe ou trouver les alias. Ces fichiers seront créé dans /etc/postfix/mysql :

mkdir  /etc/postfix/mysql

Puis on créé les fichiers :
/etc/postfix/mysql/email2email.cf est utilisé pour connaître les adresse email existantes :

hosts = 127.0.0.1
dbname = serverconf
user = serverconfuser
password = serverconfpass
query = SELECT CONCAT(user.user, '@', domain.name) AS email FROM domain,user WHERE user.domain_id=domain.id AND CONCAT(user.user, '@', domain.name)='%s'

/etc/postfix/mysql/virtual-alias-maps.cf est utilisé pour connaître les alias (les redirection d'emails) :

hosts = 127.0.0.1
dbname = serverconf
user = serverconfuser
password = serverconfpass
query = SELECT destination FROM alias, domain WHERE alias.domain_id=domain.id AND CONCAT(alias.source, '@', domain.name)='%s'

/etc/postfix/mysql/virtual-mailbox-domains.cf est utilisé pour connaître les domaines gérés :

hosts = 127.0.0.1
dbname = serverconf
user = serverconfuser
password = serverconfpass
query = SELECT 1 FROM domain WHERE name='%s'

Enfin /etc/postfix/mysql/virtual-mailbox-maps.cf est utilisé pour vérifier si une adresse email est bien géré par le serveur :

hosts = 127.0.0.1
dbname = serverconf
user = serverconfuser
password = serverconfpass
query = SELECT 1 FROM user,domain WHERE user.domain_id=domain.id AND CONCAT(user.user, '@', domain.name)='%s'


Enfin, il faut paramétrer postfix pour réagir sur différents ports dans le fichier /etc/postfix/master.cf :
Supprimer la ligne commençant par smtp et remplacer là par :

smtp inet       n       -       -       -       -       smtpd -o content_filter=lmtp:unix:/var/spool/postfix/var/run/dspam.sock
smtps inet      n       -       -       -       -       smtpd -o smtpd_tls_wrappermode=yes -o content_filter=lmtp:unix:/var/spool/postfix/var/run/dspam.sock

Afin que les courriers arrivant par smtp ou smtps soit filtrer par l'antispam.

Remplacer la ligne commençant par ltmp par

lmtp      unix  -       -       n       -       -       lmtp

Pour qu'il ne soit pas chrooté.

Enfin ajouter :

127.0.0.1:10026 inet    n       -       -       -       -       smtpd
        -o content_filter=
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_helo_restrictions=
        -o smtpd_client_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8

dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}

Le port 10026 est ici ouvert uniquement en local pour permettre à DSpam de renvoyer les emails non vérolés. Enfin la ligne avec dovecot permet d'utiliser ce dernier pour remettre l'email à l'utilisateur.

Tous nos emails vont être crée par un même utilisateur serveur, nommé vmail. Il faut donc le créer :

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/var/vmail -m
rm -rf /home/var/vmail/* /home/var/vmail/.*

Passons à la configuration de postfix :

postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql/virtual-mailbox-domains.cf
postconf -e virtual_uid_maps=static:5000
postconf -e virtual_gid_maps=static:5000
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql/virtual-mailbox-maps.cf
postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql/virtual-alias-maps.cf,mysql:/etc/postfix/mysql/email2email.cf
postconf -e virtual_transport=dovecot
postconf -e dovecot_destination_recipient_limit=1
postconf -e smtpd_sasl_type=dovecot
postconf -e smtpd_sasl_path=private/auth
postconf -e smtpd_sasl_auth_enable=yes
postconf -e smtpd_use_tls=yes
postconf -e broken_sasl_auth_clients=yes
postconf -e mydestination=localhost
postconf -e smtpd_tls_auth_only=yes
postconf -e maximal_queue_lifetime=3d
postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject_unauth_destination

Avec smtpd_use_tls, seules les connexions sécurisés seront autorisé pour smtp. La dernière ligne est sans doute la plus important et la plus difficile à comprendre.
Elle permet de définir qui a le droit d'envoyer des emails. Paramètre très important pour que son serveur ne soit pas utilisable comme open relay et utilisé par les spammeurs...
On autorise les envoies du réseau (donc le serveur lui même), vers les adresses locales existantes (indispensable pour que les FAI puissent vous envoyer des emails par exemple), avec une connexion authentifié (donc les utilisateurs de votre serveur qui ont une adresse email sur votre serveur), et on rejette le reste.

Un petit peu d'autorisations sur ces fichiers est nécessaire pour vmail :

chgrp postfix /etc/postfix/mysql/*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql/*.cf


Comme indiqué en haut de page, les utilsateurs vont pouvoir entrainé DSpam par de simples déplacement de mails en IMAP. Dovecot ne permet pas de mettre en place ceci directement, mais ce plugin le permet. Télécharger le à cette adresse et envoyer le sur votre serveur (vous avez un serveur FTP maintenant, non ?) et placer le dans /usr/src. Puis dégzippage :

cd /usr/src
gzip -d dovecot-antispam-HEAD.tar.gz
tar xvf dovecot-antispam-HEAD.tar
cd dovecot-antispam

Pour pouvoir compiler, ce plugin a besoin des sources de dovecot :

apt-get source dovecot
tar xfv dovecot_1.0.15.orig.tar.gz


Puis on paramètre ce plugin :

cp defconfig .config

Et on édite .config

BACKEND=dspam-exec
DOVECOT=./dovecot-1.0.15

Le backend spécifie de quelle façon le plugin va réapprendre à DSpam les emails déplacés. Après quelques tests, l'appel direct à DSpam s'est avéré le plus efficace. On peut donc compiler :

make install

Le fichier /usr/lib/dovecot/modules/imap/lib90_antispam_plugin.so devrait être créé.

Et on peut passer à la configuration de dovecot dans /etc/dovecot/dovecot.conf :

protocols = imap imaps pop3 pop3s managesieve
mail_location = maildir:/home/var/vmail/%d/%n/Maildir:INBOX=/home/var/vmail/%d/%n/Maildir/:INDEX=/home/var/vmail/%d/%n/Maildir/tmp/index

Dans la partie protocol imap :

  mail_plugins = antispam
  imap_client_workarounds = outlook-idle delay-newmail

Dans la partie protocol pop3 :

  pop3_client_workarounds = outlook-no-nuls

Dans la partie protocol lda :

   postmaster_address = postmaster@domain.tld
   auth_socket_path = /var/run/dovecot/auth-master
   mail_plugins = cmusieve
   log_path = /home/var/log/dovecot-deliver.log
   global_script_path = /home/var/vmail/globalsieverc

Dans la partie auth default :

 mechanisms = plain login
 # Commenter la partie passdb pam
 # Décommenter la partie passdb sql avec comme paramètres :
    args = /etc/dovecot/dovecot-sql.conf
 Dans la partie userdb static :
    args = uid=5000 gid=5000 home=/home/var/vmail/%d/%n allow_all_users=yes
 Dans la partie socket listen :
    master {
        path = /var/run/dovecot/auth-master
        mode = 0600
        user = vmail
    }
    client {
        path = /var/spool/postfix/private/auth
        mode = 0660
        user = postfix
        group = postfix
    }


Dans la partie plugin, nous allons paramètrer le plugin précédemment compilé :

  ##################################
  # Antispam plugin

  # mail signature (used with any backend requiring a signature)
  antispam_signature = X-DSPAM-Signature

  # semicolon-separated list of Trash folders (default unset i.e. none)
  # antispam_trash =
  antispam_trash = trash;Trash;Deleted Items;&AMk-l&AOk-ments supprim&AOk-s

  # semicolon-separated list of spam folders
  antispam_spam = Spam;spam;Junk;junk;Courrier ind&AOk-sirable

  # semicolon-separated list of unsure folders (default unset i.e. none)
  # antispam_unsure =
  # Whether to allow APPENDing to SPAM folders or not. Must be set to
  # "yes" (case insensitive) to be activated. Before activating, please
  # read the discussion below.
  # antispam_allow_append_to_spam = no

  antispam_dspam_binary = /usr/bin/dspam
  antispam_dspam_args = --user;root;--source=error

Le protocole managesieve permettra à l'utilsateur de créer des filtres côtés serveur, pour par exemple pour créer une réponse automatique.

Il faut créer le fichier de log :

touch /home/var/log/dovecot-deliver.log
chmod 777 /home/var/log/dovecot-deliver.log

Et comme ce fichier de log va grossir, nous devons paramétrer la rotation de ce fichier de log an ajoutant le fichier /etc/logrotate.d/dovecot :

/var/log/dovecot*log {
       weekly
       missingok
       rotate 4
       compress
       delaycompress
       notifempty
       create 777 root adm
}

Donner les droits à vmail sur la config de dovecot :

chown vmail:vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf

Enfin, il faut paramétrer dovecot pour se connecter à MySQL et vérifier les mot de passes dans /etc/dovecot/dovecot-sql.conf :

driver = mysql
connect = host=127.0.0.1 dbname=serverconf user=serverconfuser password=serverconfpass
default_pass_scheme = PLAIN-MD5
password_query = SELECT CONCAT(user.user, '@', domain.name) AS user,user.password FROM user,domain WHERE user.domain_id=domain.id AND CONCAT(user.user, '@', domain.name)='%u'

Comme le serveur utilise des protocoles sécurisés, nous devons créés des certificats :

openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem -keyout /etc/ssl/private/dovecot.pem
# Country Name (2 letter code) [AU]:                        FR
# State or Province Name (full name) [Some-State]:            France
# Locality Name (eg, city) []:                            Besancon
# Organization Name (eg, company) [Internet Widgits Pty Ltd]:        Company Name
# Organizational Unit Name (eg, section) []:                    .
# Common Name (eg, YOUR name) []:                            domain.tld
# Email Address []:                                    certs@domain.tld
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem -keyout /etc/ssl/private/postfix.pem

Et de donner les droits nécessaires :

chmod o= /etc/ssl/private/dovecot.pem
chmod o= /etc/ssl/private/postfix.pem

Pour enfin les utilisé dans postfix :

postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem

S'en est terminé avec postfix et dovecot, passons à l'antispam :
Il faut d'abord créer son dossier et donner les droits nécessaires dans le pool de postfix :

mkdir -p /var/spool/postfix/var/run/
chown dspam:dspam /var/spool/postfix/var/run/

Et le paramétrer dans /etc/dspam/dspam.conf :

StorageDriver /usr/lib/dspam/libmysql_drv.so
#TrustedDeliveryAgent "/usr/lib/dovecot/deliver -d %u"
DeliveryHost 127.0.0.1
DeliveryPort 10026
DeliveryIdent localhost
DeliveryProto SMTP
QuarantineAgent "/usr/lib/dovecot/deliver -d %u -m Spam"
Trust vmail
SupressWebStats on
Preference "spamAction=quarantine"
Preference "signatureLocation=headers"  # 'message' or 'headers'
#Preference "showFactors=on"
Opt out
TrackSources spam virus
ClamAVPort     3310
ClamAVHost     127.0.0.1
ClamAVResponse reject
ServerPID /var/run/dspam/dspam.pid
ServerMode auto
ServerPass.Relay1 "secret"
ServerParameters        "--deliver=innocent -d %u"
ServerIdent "localhost.localdomain"
ServerDomainSocketPath "/var/spool/postfix/var/run/dspam.sock"
ClientHost /var/spool/postfix/var/run/dspam.sock
ClientIdent "secret@Relay1"

Lorsque des spams seront détectés, ils seront directement envoyer dans le dossier Spam de l'utilsataeur. Si un virus est détecté, on rejette l'email.

Dans /etc/dspam/dspam.d/mysql.conf :

MySQLUIDInSignature    on
chown -R dspam:dspam /etc/dspam/*
echo "dspam:shared:*" > /var/spool/dspam/group

Dans /etc/default/dspam :

Start=yes

Enfin, nous devons autorisé DSpam à délivrer les messages directement via deliver de dovecot. Mais il doit avoir le bon userid lorsqu'il exécute ce programme. C'est pourquoi nous utilisons et setuid sur ce dernier :

chmod +s /usr/lib/dovecot/deliver

Il faudra réiterer cette commande à chaque mise à jour de dovecot.

Il ne reste plus qu'à configurer l'antivirus, ClamAv. très rapidement, on édite /etc/clamav/clamd.conf

#Comment localSocket and Add
TCPAddr 127.0.0.1
TCPSocket 3310

Enfin, on redémarre tous les services paramétrés :

/etc/init.d/clamav-daemon force-reload
/etc/init.d/dspam force-reload
/etc/init.d/dovecot force-reload
/etc/init.d/postfix force-reload

Notre serveur de mail complet est maintenant terminé. Ouf, c'était le plus gros point de notre serveur. Il est d'ailleurs maintenant tout à fait opérationnel, mais on va encore y ajouter quelques éléments pour la sécurité et le monitoring.

Retour au sommaire.

Serveur DNS : PowerDNS (Serveur Web sur Debian Lenny)

UPDATE : voir la version à jour pour Debian Squeeze.

 

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)

UPDATE : voir la version à jour pour Debian Squeeze.

 

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.

Apache et PHP (Serveur Web sur Debian Lenny)

UPDATE : voir la version à jour pour Debian Squeeze.

 

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 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 " /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.