====== 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