====== 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:
- copier le dossier "docs" vers "ordi1": scp -r -p docs ordi1@192.168.0.000:/home/ordi1
- copier le dossier "docs" venant de "ordi1": scp -r -p ordi1@192.168.0.000:/home/ordi1/docs
- copier un fichier I.php vers "ordi1": scp I.php ordi1@192.168.0.000:/home/ordi1
- 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
###############################
ServerAdmin contact@strapontins.org
ServerName strapontins.org
DocumentRoot /home/toto/heberg/website1
Order Deny,Allow
Deny from all
Options None
AllowOverride None
DirectoryIndex index.html index.php
Options Indexes Includes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
###############################
##### VIRTUAL 2 STRAPONTINS
###############################
ServerAdmin contact@strapontins.org
ServerName www.strapontins.org
DocumentRoot /home/toto/heberg/website1
DirectoryIndex index.html index.php
Options Indexes Includes FollowSymLinks MultiViews ExecCGI
AllowOverride All
Order allow,deny
Allow from all
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:
ServerName strapontins.org
DocumentRoot "/home/toto/heberg/website1"
SSLEngine on
SSLCertificateFile /etc/apache2/server.crt
SSLCertificateKeyFile /etc/apache2/server.key
===== À lire =====
* http://doc.ubuntu-fr.org/tutoriel/securiser_apache2_avec_ssl
* http://www-adele.imag.fr/users/Didier.Donsez/ujf/GICOM/GICOM_ENS/sujet/etape5.html
====== 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
{{:wiki:capture-phpmyadmin.png|}}
- 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/"
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
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"
Require valid-user
====== 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:
- sudo touch /etc/pure-ftpd/conf/AltLog
- sudo touch /etc/pure-ftpd/conf/AntiWarez
- sudo touch /etc/pure-ftpd/conf/Bind
- sudo touch /etc/pure-ftpd/conf/ChrootEveryone
- sudo touch /etc/pure-ftpd/conf/DontResolve
- sudo touch /etc/pure-ftpd/conf/MinUID
- sudo touch /etc/pure-ftpd/conf/NoAnonymous
- sudo touch /etc/pure-ftpd/conf/PAMAuthentication
- sudo touch /etc/pure-ftpd/conf/PassivePortRange
- sudo touch /etc/pure-ftpd/conf/PureDB
- sudo touch /etc/pure-ftpd/conf/UnixAuthentication
- sudo touch /etc/pure-ftpd/conf/VerboseLog
On les édite comme suit:
- nano -w /etc/pure-ftpd/conf/AltLog et mettre **clf:/var/log/pure-ftpd/transfer.log**
- nano -w /etc/pure-ftpd/conf/AntiWarez et mettre **yes**
- nano -w /etc/pure-ftpd/conf/Bind et mettre **192.168.0.12,numeroduport**
- nano -w /etc/pure-ftpd/conf/ChrootEveryone et mettre **yes**
- nano -w /etc/pure-ftpd/conf/DontResolve et mettre **yes**
- nano -w /etc/pure-ftpd/conf/MinUID et mettre **1000**
- nano -w /etc/pure-ftpd/conf/NoAnonymous et mettre **no**
- nano -w /etc/pure-ftpd/conf/PAMAuthentication et mettre **yes**
- nano -w /etc/pure-ftpd/conf/PassivePortRange et mettre **10000 10800**
- nano -w /etc/pure-ftpd/conf/PureDB et mettre /etc/pure-ftpd/pureftpd.pdb
- nano -w /etc/pure-ftpd/conf/UnixAuthentication et mettre **no**
- 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 =====
- WEBMIN ICI: http://www.webmin.com/download.html
- MODULE: http://www.lashampoo.com/unix/
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 [[http://www.webmin.com/firewall.html|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 "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
failregex = pure-ftpd: (.+?@) \[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