INTRODUCTION

Ce tutoriel-atelier va vous apprendre à revenir à l'Internet :) Sur le principe de “vos contenus n'ont rien à faire sur un site que vous ne contrôlez pas”, nous allons voir la majorité des techniques utilisées pour faire un serveur web digne de ce nom.

Ce tuto est réalisé avec des tutos existants, une expérience d'administrateur de serveur, et de la confrontation des indications données avec des débutants, pour une corrections et des compléments quand il doit y en avoir :)

CONFIGURATION LOGICIELLE

Nous faisons ce tuto dans le cadre d'une Debian Lenny installée. Vous n'avez pas besoin de serveur X :) SI VOUS UTILISEZ Ubuntu server, faites les “sudo” appropriés bien évidemment. À noter que vous devez disposer d'une IP fixe publique, sinon renseignez-vous du côté de no-ip.org par exemple :) Pour Debian Lenny, nous vous recommandons les installations serveurs et “système de base” proposés, afin de simplifier grandement votre travail.

Note pour php: les paquets php5-cli et php-pear non installés par défaut, peuvent s'avérer nécessaires, comme pour l'envoi de mails ou l'éxécution de scripts php en shell.

Interfaces

Il est absolument nécessaire de régler votre serveur en ip statique, comme ceci, en étant root:

nano -w /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eth0
auto eth0
iface eth0 inet static
address 192.168.0.12
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.254

faire ensuite

/etc/init.d/networking restart

ou de manière plus rapide et efficace:

ifdown eth0 && ifup eth0

SSH

SSH va vous permettre d'administrer votre machine à distance, ainsi, vous pouvez rejoindre votre poste principal de travail pour toute la suite, et descendre le serveur à la cave :p

Installation

apt-get install openssh-client openssh-server

Configuration & Utilisation

Ona régler quelques petites choses

nano -w /etc/ssh/sshd_config

et mettre (à ajouter ou modifier):

PermitRootLogin no
MaxStartups 2:50:4
AllowUsers tutu@192.168.0.* toto@192.168.0.*
Port 9999

cela va désactiver le login en root, définir une limite de connexion, choisir les utilisateurs adéquats, et changer le port par défaut

On se connecte ensuite avec la commande

ssh user@ip -p port

des exemples:

  1. copier le dossier “docs” vers “ordi1”: scp -r -p docs ordi1@192.168.0.000:/home/ordi1
  2. copier le dossier “docs” venant de “ordi1”: scp -r -p ordi1@192.168.0.000:/home/ordi1/docs
  3. copier un fichier I.php vers “ordi1”: scp I.php ordi1@192.168.0.000:/home/ordi1
  4. copier un fichier I.php venant de “ordi1”: scp ordi1@192.168.0.000:/home/ordi1/I.php .

Services

/etc/init.d/ssh restart

DÉPÔTS

Autre chose importante à faire: triez et rajouter des dépôts! Sur Ubuntu & Debian, c'est très facile. Nous allons rajouter les dépôts backports (pour Ubuntu) et faire le tri; Voici comment faire:

nano -w /etc/apt/sources.list

Vider et mettre:

########## UBUNTU
deb http://archive.ubuntu.com/ubuntu/ hardy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse

########## DEBIAN
deb http://ftp.fr.debian.org/debian/ lenny main
deb http://security.debian.org lenny/updates main

Adaptez le “hardy” et “lenny” au nom de votre version :)

APACHE

Installation

Première étape pour faire le serveur, installer ce qui va vous permettre de rendre accessible vos pages: APACHE ;)

apt-get install apache2 apache2-doc

Configuration & Utilisation

Passons aux premières configurations du serveur web.

charset

nano -w /etc/apache2/conf.d/charset

et mettre

AddDefaultCharset ISO-8859-1

apache2.conf

nano -w /etc/apache2/apache2.conf

et mettre

ServerSignature Off
ServerTokens Prod
AddDefaultCharset ISO-8859-1

sites-available

nano -w /etc/apache2/sites-available/default

et mettre

ServerSignature Off
ServerAdmin contact@strapontins.org

puis faire

a2enmod rewrite
/etc/init.d/apache2 reload

httpd.conf

nano -w /etc/apache2/httpd.conf

et mettre

###############################
##### PARAMETRES GENERAUX
###############################

AddHandler cgi-script .cgi
AddHandler cgi-script .pl

ServerSignature Off
ServerTokens Prod
NameVirtualHost 192.168.0.12:80
ServerName localhost
DocumentRoot /home/toto/heberg/
AccessFileName .htaccess
ErrorLog /home/toto/heberg/YES/logs/error.log
CustomLog /home/toto/heberg/YES/logs/access.log combined env=!nolog





###############################
##### VIRTUAL 1 STRAPONTINS
###############################

<VirtualHost 192.168.0.12:80>
ServerAdmin contact@strapontins.org
ServerName strapontins.org
DocumentRoot /home/toto/heberg/website1

<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>

<Directory "/home/toto/heberg/website1">
DirectoryIndex index.html index.php
Options Indexes Includes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>

</VirtualHost>





###############################
##### VIRTUAL 2 STRAPONTINS
###############################

<VirtualHost 192.168.0.12:80>
ServerAdmin contact@strapontins.org
ServerName www.strapontins.org
DocumentRoot /home/toto/heberg/website1

<Directory "/home/toto/heberg/website1">
DirectoryIndex index.html index.php
Options Indexes Includes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

Attention, nous avons customisé l'emplacement des logs, il faut rajouter quelque chose:

nano -w /etc/logrotate.d/apache2

et mettre

/var/log/apache2/*.log {
        weekly
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if [ -f /var/run/apache2.pid ]; then
                        /etc/init.d/apache2 restart > /dev/null
                fi
        endscript
}

Services

/etc/init.d/apache2 reload

redémarrer apache sans interrompre les connexions:

/etc/init.d/apache2 graceful

Note de fin

L'utilisation d'un unique httpd.conf ou de fichiers dans /sites-available est identique: c'est simplement différencié au niveau de l'organisation :)

Sécuriser Apache 2 avec SSL (https)

Préalables

  • activer le module ssl:
    a2enmod ssl
  • redémarrer Apache:
    /etc/init.d/apache2 force-reload
  • créer le certificat:
    openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/apache2/server.crt -keyout /etc/apache2/server.key

Une série de questions apparait, tapez ENTRÉE à chaque fin de réponse:

  • Country Name (2 letter code) [GB]: FR
  • State or Province Name (full name) [Some-State]: FRANCE
  • Locality Name (eg, city) []: CHAUNY
  • Organization Name (eg, company; recommended) []: GULL02
  • Organizational Unit Name (eg, section) []: GULL02
  • Common Name (eg, YOUR name) []: strapontins.org
  • Email Address []: contact@strapontins.org

Voilà! Adaptez bien évidemment à votre situation

  • bien chmoder:
    chmod 440 /etc/apache2/server.key
  • éditer httpd.conf et mettre:
<VirtualHost 192.168.0.2:443>
	ServerName strapontins.org
	DocumentRoot "/home/toto/heberg/website1"

	SSLEngine on
	SSLCertificateFile /etc/apache2/server.crt
	SSLCertificateKeyFile /etc/apache2/server.key
</VirtualHost>

À lire

LIGHHTPD

Apache est le serveur HTTP le plus connu et le plus utilisé. Il est aussi le plus complet, mais comme bien souvent, il est aussi le plus lourd… Lighttpd est né pour les petites configs :) Évidemment, n'installez pas deux serveurs http ensemble sur une même machine :p

Installation

aptitude install lighttpd

Configuration

le fichier de config est:

nano -w /etc/lighttpd/lighttpd.conf

changer

server.document-root       = "/var/www/"

pour

server.document-root       = "/home/user/www/"

PHP

Installation

sudo apt-get install php5 libapache2-mod-php5 libapache2-mod-perl2 php5-cgi php5-mysql php-pear php5-cli php5-gd php5-sqlite php5-xsl php5-mcrypt

Configuration & Utilisation

nano -w /etc/php5/apache2/php.ini

La configuration de PHP utilisé en ligne de commande est stockée dans /etc/php5/cli/php.ini. A ne pas confondre avec la configuration pour Apache qui nous intéresse et est stockée dans /etc/php5/apache2/php.ini. Voici quelques suggestions de modifications (pour cacher des choses notamment, éhéhé!):

max_execution_time = 30
max_input_time = 60
memory_limit = 64M
upload_max_filesize = 10M
register_globals = Off
expose_php = Off
display_errors = Off
allow_url_fopen = Off
/etc/init.d/apache2 force-reload

Services

PHP se redémarre avec Apache.

BIND9

Installation

Pour faire connaitre votre site dans le monde entier, il vous faut un nom de domaine; une fois en votre possession, vous allez le lier avec votre hébergement.

sudo apt-get install bind9

Configuration & Utilisation

EXEMPLE DE CONFIGURATION DE STRAPONTINS.ORG

On édite le fichier

nano -w etc/bind/named.conf.local

et on y met:

zone "strapontins.org" {
       type master;
       file "/var/cache/bind/strapontins.org.hosts";
       };

On crée le fichier

nano -w /var/cache/bind/strapontins.org.hosts

et on y met:

$ttl 38400
strapontins.org.   IN      SOA     ns1.strapontins.org. root.strapontins.org. (
                       2008011018
                       10800
                       3600
                       604800
                       38400 )
@            10800 IN NS    ns1.strapontins.org.
www          10800 IN A     88.176.124.69
@            10800 IN A     88.176.124.69
ftp          10800 IN A     88.176.124.69
mail         10800 IN A     88.176.124.69
@            10800 IN NS    ns6.gandi.net.
@            10800 IN MX 10 spool.mail.gandi.net.
@            10800 IN MX 50 fb.mail.gandi.net.
pop          10800 IN CNAME access.mail.gandi.net.
imap         10800 IN CNAME access.mail.gandi.net.
smtp         10800 IN CNAME relay.mail.gandi.net.
webmail      10800 IN CNAME agent.mail.gandi.net.
im           10800 IN CNAME im2.apinc.org.
ns1          10800 IN A     88.176.124.69
blog         10800 IN A     88.176.124.69
www.blog     10800 IN A     88.176.124.69
live         10800 IN A     88.176.124.69
www.live     10800 IN A     88.176.124.69

en mettant une ligne vide en plus à la fin.

Services

/etc/init.d/bind9 restart

MYSQL

Introduction

Ouvrez le port 3306 dans votre routeur et/ou firewall pour une bonne connexion de vos bases.

Installation

aptitude install mysql-server-5.0

Sécuriser l'installation

On y pense pas forcément mais pour l'instant, on peut accéder aux bases de données MySQL avec le login « root » et sans mot de passe. Nous allons donc sécuriser un peu le serveur.

Si vous avez une erreur comme celle la:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Il suffit de lancer MySql avant de faire ces manipulations:

sudo /etc/init.d/mysql start

OUVREZ UN TERMINAL ET TAPEZ:

sudo -i mysql_secure_installation

Le script de sécurisation du serveur MySQL démarre.

Si vous êtes à l'aise avec l'anglais, les questions posées sont assez simples et il suffit d'y répondre puis de passer à la suite. Depuis Gutsy, le mot de passe demandé précédemment en fin d'installation de mysql est le mot de passe root, il faut donc entrer celui-ci dans l'étape suivante.

Enter current password for root (enter for none):

Validez avec « Entrée ». En effet, pour l'instant, il n'y a pas de mot de passe.

Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation.
Set root password? [Y/n]

Faites Y puis « Entrée » pour choisir un mot de passe.

new password:

Entrez le mot de passe de votre choix et validez par « Entrée ».

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n]

Faites Y puis « Entrée » pour supprimer l'utilisateur anonyme créé lors de l'installation.

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n]

Si vous n'avez pas besoin d'administrer votre base de données à distance, ce qui devrait être le cas de la plupart des utilisateurs, validez par Y puis « Entrée ». Ainsi, l'utilisateur « root » ne pourra se connecter qu'en local. Sinon tapez « n ».

Remove test database and access to it? [Y/n]

Validez par Y puis « Entrée » pour supprimer la base de données de test créée lors de l'installation.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n]

Validez par Y puis « Entrée » pour prendre en compte les changements que vous venez de faire et les appliquer immédiatement.

Services

/etc/init.d/mysql restart

PHPMYADMIN

Installation

sudo apt-get install phpmyadmin
touch /usr/share/phpmyadmin/favicon.ico

Rajouter un user

- Depuis la page d'accueil de phpMyAdmin, créez une base de données “test”

- Revenez sur la page d'accueil de phpMyAdmin, et cliquez sur le lien Privilèges.

- Cliquez ensuite sur Ajouter un utilisateur.

- Dans la section Information pour la connexion, remplissez les champs suivants:

  • Nom d'utilisateur : login que vous utiliserez pour vous connecter à la base.
  • Serveur : entrez localhost si MySQL tourne sur la même machine que Apache, sinon fournissez l'IP du serveur distant.
  • Mot de passe : ne le perdez pas sinon l'utilisateur en cours de création ne pourra plus se connecter à sa base avec les privilèges qui vont lui être attribués.

- En dessous des informations de connexion, on trouve la section Base de données pour cet utilisateur. Choisissez Aucune.

- Enfin, on trouve la section Privilèges globaux. IL NE FAUT COCHER AUCUNE CASE, car l'utilisateur doit se mêler uniquement de sa base, et pas de celle des autres (les privilèges globaux portent sur l'ensemble de MySQL). Sauf indications contraires, aucune limite de ressources n'est à prévoir, vous pouvez donc tout laisser à zéro.

- Validez l'utilisateur en cliquant sur Exécuter. La requête suivante est alors exécutée :

GRANT USAGE ON * . * TO 'test'@'localhost' IDENTIFIED BY '*********' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0

- Revenez sur la page “Privilèges” de l'accueil, et assurez-vous que le nouvel utilisateur a comme privilèges globaux “USAGE” et non pas “GRANT”.

- Cliquez sur la petite icône à côté de la colonne “Grant” afin de modifier les privilièges de l'utilisateur. En effet, il faut lui donner les permissions appropriées sur la base test créée précédemment.

- Ne touchez à rien dans la section “Privilèges globaux”. Dans la section “Privilèges spécifiques à une base de données”, sélectionnez la base test dans la liste déroulante. Vous changez automatiquement de page.

- Assurez-vous que le titre de la page ressemble à Utilisateur 'test'@'localhost' - Base de données test. Il faut être conscient que les privilèges activés sur la page concernent uniquement la base sélectionnée (test, en l'occurrence) et non l'ensemble des bases du serveur MySQL. Cochez alors les cases suivantes :

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • CREATE
  • DROP
  • INDEX
  • ALTER
  • CREATE TEMPORARY TABLES
  • LOCK TABLES

- Validez ensuite avec Exécuter. La requête suivante est exécutée :

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON `test` . * TO 'test'@'localhost' WITH GRANT OPTION

- Revenez sur la page d'accueil et cliquez sur “Bases de données”. En cliquant sur l'image associée à chacune des bases, vous pouvez vous assurer des privilèges donnés aux utilisateurs. Notamment, pour notre base “drupal”, nous voyons:

Phpmyadmin consultable par navigateur:

Phpmyadmin est une appli web: elle n'a pas de daemon et doit être accessible via apache2, il faut donc faire un alias!

Alias /phpmyadmin "/usr/share/phpmyadmin/"
<Directory "/usr/share/phpmyadmin">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>

Vous pouvez ajouter une double-protection:

nano -w /usr/share/phpmyadmin/.htaccess
DirectoryIndex index.php
Options +FollowSymLinks -Indexes

AuthName "authentification phpmyadmin"
AuthType Basic
AuthUserFile "/home/toto/.htpasswd"

<Limit GET POST>
Require valid-user
</Limit>

SERVEUR DE MAILS

Installation

sudo aptitude install postfix mailx mutt

Configuration & Utilisation

Pour un relais simple des mails, on va juste se servir de notre FAI.

nano -w /etc/postfix/main.cf

et mettre

myhostname = strapontins.org
alias_maps = $alias_database
relayhost = smtp.free.fr
Mettre à jour après des changements
postmap /etc/postfix/sender_canonical

et

newaliases
Éditer /etc/postfix/sender_canonical
root contact@strapontins.org
toto contact@strapontins.org
Personnaliser les expéditeurs

Il est agréable de ne pas avoir “root” ou “www-data” dans le nom d'expéditeur lors d'envois de mails, n'es-ce pas?

Éditons le fichier /etc/passwd :

root:x:0:0:Admin strapontins.org:/root:/bin/bash

par exemple

Test d'envoi

mail -s essai toto@fai.net
ctrl + d
dig mx strapontins.org
telnet mail.strapontins.org. 25

PROFTPD

Installation

Configuration & Utililsation

Services

PURE-FTPD

Installation

sudo apt-get install pure-ftpd pure-ftpd-common

Configuration & Utilisation

Nous avons quelques fichiers à créer:

  1. sudo touch /etc/pure-ftpd/conf/AltLog
  2. sudo touch /etc/pure-ftpd/conf/AntiWarez
  3. sudo touch /etc/pure-ftpd/conf/Bind
  4. sudo touch /etc/pure-ftpd/conf/ChrootEveryone
  5. sudo touch /etc/pure-ftpd/conf/DontResolve
  6. sudo touch /etc/pure-ftpd/conf/MinUID
  7. sudo touch /etc/pure-ftpd/conf/NoAnonymous
  8. sudo touch /etc/pure-ftpd/conf/PAMAuthentication
  9. sudo touch /etc/pure-ftpd/conf/PassivePortRange
  10. sudo touch /etc/pure-ftpd/conf/PureDB
  11. sudo touch /etc/pure-ftpd/conf/UnixAuthentication
  12. sudo touch /etc/pure-ftpd/conf/VerboseLog

On les édite comme suit:

  1. nano -w /etc/pure-ftpd/conf/AltLog et mettre clf:/var/log/pure-ftpd/transfer.log
  2. nano -w /etc/pure-ftpd/conf/AntiWarez et mettre yes
  3. nano -w /etc/pure-ftpd/conf/Bind et mettre 192.168.0.12,numeroduport
  4. nano -w /etc/pure-ftpd/conf/ChrootEveryone et mettre yes
  5. nano -w /etc/pure-ftpd/conf/DontResolve et mettre yes
  6. nano -w /etc/pure-ftpd/conf/MinUID et mettre 1000
  7. nano -w /etc/pure-ftpd/conf/NoAnonymous et mettre no
  8. nano -w /etc/pure-ftpd/conf/PAMAuthentication et mettre yes
  9. nano -w /etc/pure-ftpd/conf/PassivePortRange et mettre 10000 10800
  10. nano -w /etc/pure-ftpd/conf/PureDB et mettre /etc/pure-ftpd/pureftpd.pdb
  11. nano -w /etc/pure-ftpd/conf/UnixAuthentication et mettre no
  12. nano -w /etc/pure-ftpd/conf/VerboseLog et mettre yes

On édite aussi le fichier /etc/services

ftp-data	numeroport/tcp  (par exemple: 353)
ftp		numeroport/tcp  (par exemple: 354)

Services

On peut faire:

/etc/init.d/pure-ftpd stop
/etc/init.d/pure-ftpd start
  • binaire pure-ftpd: /etc/init.d/pure-ftpd
  • binaire pure-pw: /usr/bin/pure-pw
  • utilisateurs: /etc/pure-ftpd/pureftpd.passwd

Ajouter un utilisateur

la première fois:

sudo groupadd ftpgroup
sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser

Puis seulement pour les nouveaux:

sudo pure-pw useradd fraiddo -u ftpuser -g ftpgroup -d /home/toto/heberg -N 200

les mdp demandés seront ceux de l'utilisateur

sudo pure-pw mkdb

Puis seulement la première fois:

sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/75puredb

Supprimer un utilisateur

sudo pure-pw userdel fraiddo

Infos modules webmin

sudo su && cd /etc/webmin && ./start
sudo su && cd /etc/webmin && ./stop

https://192.168.0.12:10000/

Intégrer logs de pure-ftpd dans logs généraux

nano -w /etc/syslog.conf

mettre:

ftp.*		/var/log/pure-ftpd/pure.log

et redémarrer:

/etc/init.d/sysklogd restart

WEBMIN

Le paquet Webmin ayant été abandonné par Debian, Ubuntu a dû suivre cet évènement, ce qui cause l'indisponibilité de Webmin sur les dépôts. Il y a donc deux méthodes pour l'installer : soit une installation automatique avec le paquet Debian disponible sur le site de Webmin, soit une installation manuelle.

Installation

Un « .deb » est proposé au téléchargement sur www.webmin.com - assurez-vous d'avoir toujours la dernière version.

L'installation va créer automatiquement le répertoire /usr/share/webmin. Le mot de passe de l'administrateur de Webmin (« root ») reprend par défaut celui du système d'exploitation sur lequel il est installé. Or, ce compte « root » est désactivé sur Ubuntu, donc inaccessible. Il faut le changer en tapant :

sudo /usr/share/webmin/changepass.pl /etc/webmin root votre_mot_de_passe
Cette commande ne change pas le mot de passe « root » d'Ubuntu mais seulement celui de Webmin.

Vous pouvez maintenant vous connecter à partir d'un navigateur client avec l'adresse : https://votre_nom_de_serveur:10000/ ou https://votre_adresse_IP:10000/

Si le pare-feu du serveur bloque le port IP, voyez la résolution du problème (en anglais).

Sécuriser Webmin

Si vous voulez sécuriser votre Webmin, si vous l'installez sur un serveur public notamment, il vous faut le module « SSLeay » : libnet-ssleay-perl

Maintenant, vous avez effectué tout ce qui est nécessaire à l'installation de Webmin.

Services

sudo su
cd /etc/webmin && ./start
cd /etc/webmin && ./stop

FAIL2BAN

Installation

sudo apt-get install fail2ban

Configuration & Utilisation

nano -w /etc/init.d/fail2ban status
nano -w /etc/fail2ban/jail.conf

/etc/init.d/fail2ban restart

## LOG: /var/log/fail2ban.log

Rajouter pour pure-ftpd:

[pure-ftpd]
enabled  = true
port     = ftp
filter   = pure-ftpd
logpath  = /var/log/pure-ftpd/pure.log
maxretry = 2
nano -w /etc/fail2ban/filter.d/pure-ftpd.conf

et mettre:

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
# Modified: Yaroslav Halchenko for pure-ftpd
#
# $Revision: 3$
#

[Definition]

# Error message specified in multiple languages
__errmsg = (?:Authentication failed for user|Erreur d'authentification pour l'utilisateur)

#
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
#
failregex = pure-ftpd: (.+?@<HOST>) \[WARNING\] %(__errmsg)s \[.+\]$

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

LOGWATCH

Installation

sudo apt-get install logwatch

Notes

  • scripts: /etc/logwatch/
  • taper logwatch pour recevoir un rapport ou
/usr/share/logwatch/scripts/logwatch.pl

Configuration & Utilisation

nano -w /usr/share/logwatch/dist.conf/logwatch.conf
Detail = High
mailer = "/usr/sbin/sendmail -t"
TmpDir = /tmp
MailFrom = root

Et ensuite:

nano -w /usr/share/logwatch/default.conf/logwatch.conf
LogDir = /var/log
TmpDir = /var/cache/logwatch
MailTo = contact@strapontins.org
MailFrom = Logwatch
Print = No
Range = yesterday
Detail = Low
Service = All
Service = "-zz-network"     # Prevents execution of zz-network service, which
                            # prints useful network configuration info.
Service = "-zz-sys"         # Prevents execution of zz-sys service, which
                            # prints useful system configuration info.
Service = "-eximstats"      # Prevents execution of eximstats service, which
                            # is a wrapper for the eximstats program.
mailer = "sendmail -t"

pour avoir un rapport au format HTML:

nano -w /etc/cron.daily/00logwatch

remplacer

/usr/sbin/logwatch --mailto

par

/usr/sbin/logwatch --mailto --output html

SERVEUR JABBER - Ejabberd

Introduction

Jabber est le standard ouvert et libre pour la messagerie instantannée, et permet une grande confidentialité des échanges. La technologie permet à chacun d'ouvrir son propre serveur Jabber. Ici, nous parlerons de EJABBERD.

Installation

apt-get install ejabberd

Configuration

  • Première chose à faire: ouvrir les port 5280 (pour l'administration), 5222 et 5223 (pour les connexions) dans votre routeur et/ou votre firewall
  • Créer le profil d'administrateur:
    ejabberdctl register PSEUDO HOSTNAME_INDIQUÉ mon_mot_de_passe

ejabberd.cfg

  • Le principal fichier de configration est ici:
nano -w /etc/ejabberd/ejabberd.cfg
  • Il peut être souhaitable de ne pas laisser les utilisateurs s’enregistrer eux-même. Pour ce faire il faut mettre en commentaire la ligne contenant
    {access, register, [{allow, all}]}.

    et décommenter (ou ajouter) la ligne

    {access, register, [{deny, all}]}.

(Sous Debian Lenny, la configuration montre que les utilisateurs ne peuvent pas s'enregistrer eux-mêmes, par défaut. Vous devrez donc utiliser la commande: ejabberdctl vue précédemment ).

  • Rechercher la déclaration {language, “en”}. et remplacer par {language, “fr”}. (donc en français par défaut)

IM.VOTRESITE.COM

  • Il peut être intéressant de proposer des comptes sous la forme login@im.votresite.com et non login@votresite.com (afin de ne pas perturber les éventuelles adresses emails et de bien montrer qu'il s'agit d'un service de messagerie instantannée). Voici donc comment avoir des compte sous la forme im.votresite.com :

A RÉDIGER

Utilisation

  • L'interface web d'administration est ici: http://www.votresite.com:5280/admin/
  • arréter ou démarrer le service:
    /etc/init.d/ejabberd {start | stop | restart}
  • voir les utilisateurs enregistrés:

FIREWALL

Mettre un pare-feu sur votre serveur est obligatoire pour éviter les mauvaises surprises :) Vous pouvez par exemple vous appuyez sur la configuration que peux fournir Firestarter, et la transporter sur votre serveur en l'adaptant.

Voici un exemple avec la config suivante: serveur derrière une connexion adsl FREE, sur 192.168.0.12, avec les ports suivants ouverts: 80, 8000 et 8080 (web), 22 (ssh, seulement les connexions venant d'une machine locale 192.168.0.11), 53 (dns), 143 et 25 (mail), 3306 (mysql)

Utilisation

Éditez sous root un fichier /etc/init.d/moniptables et mettez-y:

#!/bin/bash
#
#

firewall_start() {
	echo "[Démarrage du firewall]"
	echo "[Initialisation de la table filter]"
	iptables -F
	iptables -X


### Chain INBOUND
iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

____________ A FINIR ___________
         

	echo "[firewall activé !]"
	
}

Enregistrez et faites ceci pour le faire démarrer automatiquement au boot:

chmod +x /etc/init.d/moniptables
sudo update-rc.d moniptables defaults

Au redémarrage, vérifiez vos règles en faisant:

iptables -L

et vos règles devraient ressembler à:

Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  dns2.proxad.net      anywhere            tcp flags:!FIN,SYN,RST,ACK/SYN 
ACCEPT     udp  --  dns2.proxad.net      anywhere            
ACCEPT     tcp  --  dns3.proxad.net      anywhere            tcp flags:!FIN,SYN,RST,ACK/SYN 
ACCEPT     udp  --  dns3.proxad.net      anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            limit: avg 10/sec burst 5 
DROP       all  --  anywhere             255.255.255.255     
DROP       all  --  anywhere             192.168.0.255       
DROP       all  --  BASE-ADDRESS.MCAST.NET/8  anywhere            
DROP       all  --  anywhere             BASE-ADDRESS.MCAST.NET/8 
DROP       all  --  255.255.255.255      anywhere            
DROP       all  --  anywhere             0.0.0.0             
DROP       all  --  anywhere             anywhere            state INVALID 
LSI        all  -f  anywhere             anywhere            limit: avg 10/min burst 5 
INBOUND    all  --  anywhere             anywhere            
LOG_FILTER  all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere            LOG level info prefix `Unknown Input' 

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            limit: avg 10/sec burst 5 
LOG_FILTER  all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere            LOG level info prefix `Unknown Forward' 

Chain OUTPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  192.168.0.12         dns2.proxad.net     tcp dpt:domain 
ACCEPT     udp  --  192.168.0.12         dns2.proxad.net     udp dpt:domain 
ACCEPT     tcp  --  192.168.0.12         dns3.proxad.net     tcp dpt:domain 
ACCEPT     udp  --  192.168.0.12         dns3.proxad.net     udp dpt:domain 
ACCEPT     all  --  anywhere             anywhere            
DROP       all  --  BASE-ADDRESS.MCAST.NET/8  anywhere            
DROP       all  --  anywhere             BASE-ADDRESS.MCAST.NET/8 
DROP       all  --  255.255.255.255      anywhere            
DROP       all  --  anywhere             0.0.0.0             
DROP       all  --  anywhere             anywhere            state INVALID 
OUTBOUND   all  --  anywhere             anywhere            
LOG_FILTER  all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere            LOG level info prefix `Unknown Output' 

Chain INBOUND (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     udp  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:80
ACCEPT     udp  --  anywhere             anywhere            udp dpt:80
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:8000
ACCEPT     udp  --  anywhere             anywhere            udp dpt:8000
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:8080
ACCEPT     udp  --  anywhere             anywhere            udp dpt:8080
ACCEPT     tcp  --  192.168.0.11             anywhere            tcp dpt:22
ACCEPT     udp  --  192.168.0.11             anywhere            udp dpt:22
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:53
ACCEPT     udp  --  anywhere             anywhere            udp dpt:53
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:143
ACCEPT     udp  --  anywhere             anywhere            udp dpt:143
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:25
ACCEPT     udp  --  anywhere             anywhere            udp dpt:25
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:3306
ACCEPT     udp  --  anywhere             anywhere            udp dpt:3306
LSI        all  --  anywhere             anywhere

Chain LOG_FILTER (5 references)
target     prot opt source               destination         

Chain LSI (2 references)
target     prot opt source               destination         
LOG_FILTER  all  --  anywhere             anywhere            
LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN limit: avg 1/sec burst 5 LOG level info prefix `Inbound ' 
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN 
LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5 LOG level info prefix `Inbound ' 
DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/RST 
LOG        icmp --  anywhere             anywhere            icmp echo-request limit: avg 1/sec burst 5 LOG level info prefix `Inbound ' 
DROP       icmp --  anywhere             anywhere            icmp echo-request 
LOG        all  --  anywhere             anywhere            limit: avg 5/sec burst 5 LOG level info prefix `Inbound ' 
DROP       all  --  anywhere             anywhere            

Chain LSO (0 references)
target     prot opt source               destination         
LOG_FILTER  all  --  anywhere             anywhere            
LOG        all  --  anywhere             anywhere            limit: avg 5/sec burst 5 LOG level info prefix `Outbound ' 
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 

Chain OUTBOUND (1 references)
target     prot opt source               destination         
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     udp  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     all  --  anywhere             anywhere   

À faire

- autoriser les réponses aux pings? - http://scripts.trustonme.net/download.php?elmt=1

- au démarrage:

mv firewall /etc/init.d/firewall
chmod +x /etc/init.d/firewall
update-rc.d firewall defaults

STATISTIQUES

Il y a deux types de softs pour avoir des statistiques: - ceux qui sont en temps réel, et consomment des ressources régulièremment (car basés sur la navigation active) - ceux qui sont en léger différé, mais qui consomment des ressources uniquement quand ils traitent les logs

Nous préférons évidemment la deuxième solution :) Voyons un peu du côté d'Awstats…

Awstats

Installation

sudo aptitude install awstats

Configuration & Utilisation

Le binaire: /usr/lib/cgi-bin/awstats.pl

Les fichiers de configuration: /etc/awstats/

mettre à la fin du conf:

AllowAccessFromWebToAuthenticatedUsersOnly=1
AllowAccessFromWebToFollowingAuthenticatedUsers=prout

Include "/etc/awstats/awstats.conf.local"

RKHUNTER et CHKROOTKIT

Installation

sudo apt-get install rkhunter chkrootkit

Cron

rkhunter --update
rkhunter --checkall
/usr/sbin/chkrootkit

CLAMAV

Inutile même sur un serveur.

Installation

sudo apt-get install clamav

Configuration & Utilisation

clamscan -V
uname -mrsp
freshclam

DIVERS

Supprimer les thumbnails :)

Si votre pc a servi de desktop juste avant, il a sans doute emmangasiné des aperçus de sites internet: ils n'ont plus rien à faire sur le serveur!

rm /home/user/.thumbnails/normal/*
rm /root/.thumbnails/normal/*

pour Ubuntu par exemple

Crontabs

sudo su && crontab -e
*/30 * * * * /home/toto/cron/planet.sh > /dev/null

Nmap

sudo nmap 192.168.0.12 -p 1-65535

Grub

sur un serveur, il peut être utile de voir l'avancement dans grub:

nano -w /boot/grub/menu.lst

et mettre

# defoptions=splash

puis faire un

sudo update-grub

a2enmod

Afin d'activer les modules, utilisez a2enmod (Apache 2 Enable Module) suivi du nom du module. Ici activons mod_rewrite pour permettre la réécriture des URLs.

a2enmod rewrite

Pour désactiver un module, utilisez a2dismod.

NTPDATE

Il convient de garder son serveur web à jour!

Installation

apt-get install ntpdate

Configuration

Dans le fichier /etc/default/ntpdate, mettre

NTPDATE_USE_NTP_CONF=no

Utilisation (dans crontab)

25 4 * * * /usr/sbin/ntpdate-debian > /dev/null 2> /dev/null
atelier_serveur.txt · Dernière modification: 2008/09/28 13:55 par admin
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0