Installation d’un serveur Linux Debian
Dans un précédent article, j'explique que j'ai eu besoin d'un serveur dédié et comment et ou je l'ai loué.
Dans cet article, je pars d'une installation Debian 5.0 Lenny de base livrée par OVH (pour choisir la distribution Linux commandée chez OVH, je me suis basé sur cette page). Je décrie les étapes de l'installation des packages complémentaires afin de disposer de Apache, MySQL, PHP, Java et Tomcat. Ceci peut vous intéresser, mais c'est également un aide mémoire pour moi-même. C'est un peu technique, mais je n'entre pas dans les détails.
Les commandes qui sont indiquées doivent être exécutées sous le compte root ou en mode avec sudo (on va voir sudo plus loin).
Mettre à jour le repository Apt
Apt, c'est l'outil qui permet d'installer des packages. Un logiciel est constitué de un ou plusieurs packages et peut être dépendant d'autres packages. Les dépendances entre packages sont gérées par la technologie de distribution par package. La mise à jour en question a pour but de mettre à jour la liste des packages disponibles.
apt-get update
Pour éviter que les futurs installation de packages demande l'insertion du CRDOM, on édite le fichier listant les sources de packages (/etc/apt/sources.list) afin de supprimer le CDROM comme source. Pour cela, il faut mettre en commentaire avec vi mettre la ligne qui commence par "deb cdrom:". On met un "#" en début de ligne.
Installation du serveur OpenSSH
Afin de pouvoir se connecter en SSH sur le serveur, il faut installer OpenSSH.
apt-get install openssh-server
Création de l'utilisateur "dominique"
useradd -d /home/dominique -m -s /bin/bash dominique passwd
Installer sudo
sudo permet d'exécuter des commandes comme utilisateur root sans être connecté sous le compte root.
apt-get install sudo
Déclarer l'utilisateur dominique dans sudo en ajoutant la ligne suivante dans "/etc/sudoer"
dominique ALL=(ALL) ALL
Redémarrer sudo
/etc/init.d/sudo restart
à partir de là, tout se fait si possible sous le compte "dominique" (et utilisation de sudo pour les actions necessitants les droits root).
Augmentation des limites systèmes (optionnel)
Pour mes besoins j'ai besoin d'augmenter certaines limites systèmes. Cela se fait en éditant le fichier /etc/security/limits.conf
vi /etc/security/limits.conf
Personnellement, j'y ajoute les lignes suivantes :
* soft nofile 8192 * hard nofile 16384 * soft stack 16384 * hard stack 32768
Installation de apache2.2
J'installe Apache et l'intégration avec PHP 5
sudo apt-get install apache2 libapache2-mod-php5
Activer le mode rewrite
sudo a2enmod rewrite
sudo /etc/init.d/apache2 force-reload
Installation de mysql server 5.0
J'installe mysql avec les librairies pour PHP 5.
sudo apt-get install mysql-server-5.0 php5-mysql
Installation php5
J'ai besoin de PHP 5 et quelques librairies complémentaires (curl par exemple pour appeler des web services en http, mysql, PEAR, …).
sudo apt-get install php5 php5-cli libapache2-mod-php5 php5-curl php5-gdsudo apt-get install php5-mysqlphp5-dev
Installation et mise à jour de PHP PEAR
sudo apt-get install php-pear
sudo pear upgrade PEAR
Puis installation de quelques modules Pear
sudo pear install Mail
sudo pear install Net_Smtp
Installation d'un JDK
On peut soit installer openJDK 6 ou Sun JDK 6
openJDK
sudo apt-get install openjdk-6-jre openjdk-6-jdk
Sun JDK
On commence par télécharger sur le site de sun la documentation en anglais du JDK (http://www.oracle.com/technetwork/java/javase/downloads/index.html). La dernière version disponible du fichier au moment ou j'écris ces lignes est : jdk-6u21-docs.zip
Il faut copier se fichier dans le répertoire /tmp du serveur mais en le renommant jdk-6u12-docs.zip (version actuelle du JDK sun fournie par les repositories Debian).
Sans ce pré-requis, l'installation est stoppée.
sudo apt-get install sun-java6-jdk sun-java6-fonts
Installation de tomcat 5.5
sudo apt-get install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps
Installation de lftp
lftp est un client ftp qui sera utile pour mettre les sauvegardes sur le serveur FTP mis a disposition par OVH.
sudo apt-get install lftp
Paramétrage de apache
Copier le fichier de configuration de mon virtualhost dans "/etc/apache2/site-available",
activer le site et relancer Apache.
sudo a2ensite xxxxxx (ou xxxxxx est le nom du fichier .conf du virtualhost) sudo /etc/init.d/apache2 reload
Paramétrage Tomcat
Dans /var/lib/tomcat5.5/conf/server.xml, modifier le connecteur non-SSL pour y ajouter l'attribut "URIEncoding="UTF-8""
<!-- Define a non-SSL HTTP/1.1 Connector on port 8180 -->
<Connector port="8180" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8" />
Sous Debian, Tomcat est très sécurisé. Une autre manière radicale de passer outre cette sécurisation est de la désactiver dans le fichier "/etc/init.d/tomcat5.5", en indiquant :
TOMCAT5_SECURITY=no
Par contre, je ne me permet ceci parce que je n'autorise l'acces à mon serveur Tomcat que localement. Dans /var/lib/tomcat5.5/conf/server.xml, j'ajoute une définition de valve au niveau engine :
<Engine name="Catalina" defaultHost="localhost">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.0.0.1" deny=""/>
Je change également le fichier "/etc/init.d/tomcat5.5" pour lui indiquer le bon timezone et augmenter ses ressources mémoires. Editer le fichier "/etc/init.d/tomcat5.5", trouver la ligne encadrée par "if [ -z "$CATALINA_OPTS" ]; then" et "fi", et modifiez la comme ceci.
if [ -z "$CATALINA_OPTS" ]; then CATALINA_OPTS="-Djava.awt.headless=true -Xms256M -Xmx768M -Duser.timezone=Europe/Paris -XX:MaxPermSize=128m" fi
Relancer tomcat
sudo /etc/init.d/tomcat5.5 restart
A partir de là, on dispose d'une configuration de base Debian Etch. le serveur est opérationnel.
Installer le compilateur GCC et l'outil make
sudo apt-get install gcc g++ make
Installer memcached
apt-get install memcached php5-memcache
Dans cet article, je décris memcached.
Pour son installation à partir des sources, suivre la procédure parfaitement décrite dans cet article. Par contre, il faut vérifier quelles sont les dernières versions des modules à télécharger.
Installer ntpdate
sudo apt-get install ntpdate
Pour mettre à l'heure en utilisant le serveur de temps de l'observatoire de Paris
/usr/sbin/ntpdate ntp-p1.obspm.fr
Dans la crontab ajouter la ligne suivante afin de synchroniser l'heure tous les matins à 3h
0 3 * * * root /usr/sbin/ntpdate ntp-p1.obspm.fr >/dev/null
Installer fail2ban
En fonctionnement, un serveur s'expose à des attaques. Fail2ban permet de se protéger contre les attaques de masse sur certains ports TCP ou UDP en attente de connexion. Le premier protocole à protéger (le seul exposé à la livraison du serveur lorsque qu'il n'y a pas de logiciel complémentaire installé) est ssh. Ssh permet de prendre la main sur un serveur à distance. Mais si on connaît le port d'attente (22 par défaut) et le mot de passe root, on peut tout faire sur le serveur. Fail2ban scrute les logs des services en attente de connexion pour déterminer si une attaque est en cours et si donc il doit bloquer l'adresse IP de l'attaquant.
apt-get install fail2ban
dans "/etc/fail2ban/jail.conf", j'ajout mon ip perso dans les ip a ignorer
ignoreip = 127.0.0.1 82.xxx.xxx.xxx
redémarrage de fail2ban
/etc/init.d/fail2ban restart
Mise en place de règles de filtrage d'ip
Pour l'instant, il n'y a que ssh comme service sensible. Il est traiter par Fail2ban.
Avec iptables, j'ajoute des règles pour éviter des attaques par ping. J'autorise le ping depuis le serveur lui même, mon adresse IP perso et par les serveurs OVH (pour le support entre autre). Je fais un script pour ajouter les règles avec iptables.
set-iptables.sh contient :
#!/bin/sh iptables -A INPUT -i eth0 -p icmp -j DROP iptables -A INPUT -i eth0 -p icmp --source 127.0.0.1 -j ACCEPT iptables -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT iptables -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT iptables -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT iptables -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT iptables -A INPUT -i eth0 -p icmp --source 91.121.91.250 -j ACCEPT iptables -A INPUT -i eth0 -p icmp --source 82.xxx.xxx.xxx -j ACCEPT
"iptables -L" permet de lister les règles en place après l'exécution du script.
Il faut faire attention de ne pas bloquer ssh avec ces règles, sinon on ne peut plus prendre la main sur le serveur et il faut lancer le procédure de réinstallation du serveur (pas cool).
mar 06, 2011
merci pour ce tuto très complet, m’a permis de résoudre mon problème trés rapidement
oct 04, 2011
Tuto trés complet bravo.
J’ai une petite question cependant :
Grace ton tuto j’ai installé un tomcat 5.5 tranquillement et maintenant j’ai besoin de passer a tomcat 6 sur lenny (j’ai trouvé un tuto pour ça) et la question que je me pose est la suivante :
– Dois-je desisntaller tomcat 5.5 avant d’installer le 6 ? et comment ? ou alors existe t’il une manière pas trop chiante de le faire migrer de la 5.5 à la 6 ?
merci d’avance pour ta réponse.
oct 04, 2011
Je désinstallerais simplement tomcat 5.5
sudo apt-get autoremove tomcat5.5 tomcat5.5-admin tomcat5.5-webapps