Forgeard-Grignon.fr

Serveur Internet sous Debian (Apache 1.3.x)

dans Le réseau, Mots-clefs : , , , , , , , par Nicolas le Vendredi 22 juillet 2005

Cet article a pour objectif de vous aider à mettre en place un serveur internet complété par une base de données MySQL et un interpréteur PHP le plus rapidement possible sans avoir besoin de trop de préparation. Ce installation concerne les logiciels Apache 1.3.x, PHP 4.3.10 et MySQL 4.0.24.

1 – Installer Debian en mode console

1.2 – Quelle version

Si vous désirez mettre votre serveur web en production et que, par conséquent, vous voulez qu’il soit sécurisé au maximum, je vous conseille d’utiliser une Debian Stable (actuellement nommée Sarge). Dans le cas où vous désirez juste faire quelques tests sur un réseau local où vous n’êtes pas préoccupé par la sécurité, vous pouvez vous pencher sur une Debian Testing (actuellement nommé Etch).

1.2 – Plus d’informations sur l’installation

Vous pouvez utiliser l’installateur réseau de la Sarge disponible ici. Bien que je ne veuille pas m’étendre sur l’installation d’une Debian (cela fera l’objet d’un autre article) merci de prendre en considération ces quelques points:

  • N’installer ni gestionnaire de fenêtre ni interface graphique
  • En début d’installation choisissez de préférence un système de fichiers journalisé.
  • En fin d’installation n’exécuter ni tasktel ni dselect.
  • L’applicatif MC (Midnight Commander) peut vous simplifier la vie.

2 – Installer le serveur web Apache 1.3.33-6

2.1 – Récupérer les paquets et les installer

Comme d’habitude sous debian, rien de bien sorcier: il suffit de taper ceci: apt-get install apache à l’invite de commande.

2.2 – Comment le configurer

Toute la configuration d’Apache est localisée centralisée dans un seul fichier: /etc/apache/httpd.conf. Comme dans beaucoup de fichiers de configuration sous GNU/Linux, les commentaires sont précédés du symbole « # »

Exemple de fichier /etc/apache/httpd.conf :

# CONFIGURATION DE BASE
#----------------------
ServerType standalone
ServerRoot /etc/apache
LockFile /var/lock/apache.lock
PidFile /var/run/apache.pid
# PidFile: fichier conservant le numéro de processus d'apache
ScoreBoardFile /var/run/apache.scoreboard
ResourceConfig /dev/null
AccessConfig /dev/null
#Les deux lignes précédentes limite l'accès à la configuration d'Apache
# OPTIONS DE PERFORMANCE
#-----------------------
# Toutes ces options gèrent les accès au serveur Web
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
MaxSpareServers 10
StartServers 5
MaxClients 150
MaxRequestsPerChild 100
# CHARGEMENT DES MODULES
#-----------------------
# Charge les modules d'apache
LoadModule config_log_module /usr/lib/apache/1.3/mod_log_config.so
# config_log_module: module de gestion des journaux (logs)
LoadModule mime_module /usr/lib/apache/1.3/mod_mime.so
# mime_module: détermination du type de document selon les extensions du fichier
LoadModule dir_module /usr/lib/apache/1.3/mod_dir.so
# dir_module: gestion du répertoire racine
LoadModule access_module /usr/lib/apache/1.3/mod_access.so
# access_module: prise en charge des droits d'accès
LoadModule auth_module /usr/lib/apache/1.3/mod_auth.so
# PARAMETRES GENERAUX
#--------------------
# Paramètres du serveur à proprement parler
Port 80
User www-data
Group www-data
# Utilisateur et groupe utilisés par Apache pour accèder aux services du serveur
ServerAdmin webmaster@MonServeur.com
# ServerAdmin: coordonnées du responsable du serveur
UseCanonicalName Off
ServerSignature Off
HostnameLookups Off
ServerTokens Prod
ServerName MonServeur
# ServerName: nom du serveur
DocumentRoot /var/www
# Racine des sites internet
# CONTROLES D'ACCES
#------------------
# Droits d'accès à la racine du serveur via internet

     Options None
     AllowOverride None
     Order deny,allow
     Deny from all

# Droits d'accès au répertoire internet

     Order allow,deny
     Allow from all
     Options FollowSymlinks
 
# OPTIONS DES MODULES
#--------------------

     # Définition des types de fichier index
     DirectoryIndex index.html index.htm


     # Association des types de fichier
     TypesConfig /etc/apache/conf/mime.types
     # Fichier annexe spécifiant les types de fichiers
     DefaultType text/plain
     AddEncoding x-compress Z
     AddEncoding x-gzip gz tgz
     AddType application/x-tar .tgz

# JOURNAUX
#---------
# Formatage de fichiers de log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
combined LogFormat "%h %l %u %t \"%r\" %>s %b"
common LogFormat "%{Referer}i -> %U"
referer LogFormat "%{User-agent}i" agent
ErrorLog /etc/apache/logs/error_log
CustomLog /etc/apache/logs/access_log combined

Un fois ces modification effectuées, redémarrez Apache afin d’une part qu’elles soient prises en compte et, d’autre part, être sûr que le fichier fonctionne.

  • Les fichier de logs doivent pré-exister quitte à créer le repertoire correspondant avec mkdir et le fichier avec touch
  • Ce fichier est disponible ici

3 – Installer l’interpréteur PHP 4.3.10

3.1 – Récupérer les paquets et l’installer

Installez PHP4 avec apt-get install php4 (Pour PHP5 ce n’est possible qu’en ajoutant le dépôts de dotdeb à apt).

3.2 – Comment connecter PHP à Apache

Pour « connecter » PHP à Apache vous devez modifier le fichier de configuration d’Apache (voir ci-dessus) tel qu’apparaisse en plus les lignes suivantes:

  1. Dans le chargement des modules, pour charger automatiquement le module PHP4 avec Apache, rajoutez la ligne suivante: LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
  2. Et, dans les options des modules: AddType application/x-httpd-php .php .php3 DirectoryIndex index.php index.php3

3.3 – Configurer PHP4

Le fichier de configuration se localise ici: /etc/php5/apache/php.ini La configuration de base devrait suffire pour une utilisation classique. Dans le cas contraire je vous invite à consulter la documentation du site officiel

4 – Installer le gestionnaire de base de données MySQL 4.0.24

4.1 -Récupérer les paquets et les installer

Similairement à PHP… apt-get install mysql-server mysql-common mysql-client

4.2 – Comment le configurer en console

Pour lancer la commande d’administration de mysql il suffit de taper mysql -p à l’invite de commande (quit permet d’en sortir). C’est ici que vous pouvez créer vos tables, les effacer etc. Personnellement je préfére utiliser l’interface web de PHPMyAdmin. Cependant, par mesure sécurité, il est impératif, et ce dès l’installation de MySQL de changer le mot de passe root (administrateur) de MySQL avec la commande mysqladmin -u root password 'MonNouveauMotDePasse'

4.3 – Connecter MySQL à Apache et PHP

Il n’est pas nécessaire de connecter MySQL à Apache puisque celui-ci est incapable d’y accéder directement. Par contre, PHP doit être capable de se connecter au serveur MySQL pour ce faire il faut installer un package spécifique: apt-get install php5-mysql

5 – Conclusion

Votre serveur web est prêt à accueillir vos site. Il suffira juste de la placer au bon endroit (/var/www/) et d’y accéder par un navigateur internet en tapant l’adresse ou le nom du serveur.

IPTables – Un firewall pour Linux

dans Le réseau, Mots-clefs : , , par Nicolas le Jeudi 21 juillet 2005

GNU/Linux est reconnu depuis longtemps comme un système stable et sécurisé. Ceci est en partie dû à l’intégration d’instructions à l’intérieur même du kernel de Linux. Afin de mettre en place cette sécurité il suffit de mettre en place les scripts correspondants. Le script d’Arno, relativement facile à mettre en place et adaptable à vos besoin, permet d’activer une de ses instructions du noyau: IPTables.

Nota: toutes les manipulations effectuées ici on été testées avec succès sur Debian et Ubuntu, le site officiel d’Arno est ici.

1 – Introduction

1.1 – Le routage trois pattes

Lorqu’on parle de routage, on considère généralement un certains nombre de pattes. Il s’agit donc, dans ce cas, noeud entre trois réseaux définis en LAN, WAN et DMZ

Pour mémoire…

  • Le LAN est le réseau local
  • Le WAN est le réseau Internet
  • La DMZ est la zone démilitarisée

Le rôle de la DMZ est de recevoir toutes les requêtes provenant du WAN et n’ayant pas le droit d’accéder au LAN, on y place généralement les serveurs auxquels on veut accéder depuis Internet, comme les serveurs Web, Mail etc.

1.2 – L’intérêt du script d’Arno

IPTables est un élément du noyau Linux qui a pour fonction d’assurer le filtrage du trafic réseau comme n’importe quel firewall. Cette fonctionnalité, implémentée à un niveau très bas du système d’exploitation est très performante mais nécessite un configuration particulièrement complexe car exhaustive. Le script d’Arno, comme son nom l’indique, est un script réalisé par « Arno » qui à pour fonction de simplifier au maximum l’utilisation d’IPTables sans qu’il soit nécessaire de connaître par coeur la syntaxe de configuration de ce dernier. Sa mise en place relativement facile est intéressante pour tout système de routage composant jusqu’à trois pattes (LAN, WAN et DMZ).

2 – Mise en place du script

2.1 – Prérequis

  • Un noyau avec IPTables activé en module ou en dur
  • L’interpréteur /bin/sh (installé partout par défaut)
  • Un certain nombre d’application (ifconfig, modprobe, grep, uname, sed, date et cut)
  • Nota: IPTables n’est pas compatible avec IPChains

2.2 – Récupération

Tout ceci tient en un petit fichier compressé de 50Ko:

wget http://rocky.eld.leidenuniv.nl/iptables-firewall/arno-iptables-firewall-1.8.4d-stable.tgz 

2.3 – L’archive en details

Commencez donc par la décompresser:

tar xvzf arno-iptables-firewall-1.8.4d-stable.tgz

Contenu non exaustif de cette archive:

  • CHANGELOG – Modifications depuis la version précédente
  • README – Guide de mise en place
  • fwfilter – Filtre pour la consultation des logs
  • gpl_licence.txt – Texte de la licence GPL
  • iptables-firewall.conf – Fichier de configuration
  • iptables-firewall.conf-exemple – Exemple de configuration
  • arno-iptables-firewall – Le script lui même
  • syslog.conf.* – Exemple de configuration des logs pour différentes distributions

3 – Installation et configuration

3.1 – Copie des fichiers

  • Mise en place du script
    sudo cp arno-iptables-firewall /etc/init.d/
  • Mise en place du fichier de configuration:
    sudo cp arno-iptables-firewall.conf /etc/
  • Afin d’assurer un minimum de sécurité, il est nécessaire de reserver les droit de ce fichier pour l’utilisateur root:
    sudo chown root /etc/arno-iptables-firewall.confsudo chmod 600 /etc/arno-iptables-firewall.conf
  • Préparation du lancement d’IPTables au boot:
    sudo update-rc.d arno-iptables-firewall start 99 2 . stop 00 2 0 1 6 .
  • Toute la configuration d’IPTables s’effectuera dans ce fichier(/etc/iptables-firewall.conf).

3.2 – Configuration des interfaces réseau

La premiére étape de configuration concerne bien sûr la déclaration des interfaces réseau. Comme il est dit en introduction, ce script peut gérer jusqu’à trois interfaces, mais, en fonction des besoins, vous pouvez en activer moins. Dans le cas d’un seul ordinateur connecté à internet que l’on veut protéger avec le Firewall, il suffit de configurer l’interface WAN. À partir du moment où vous faites du partage de connexion, il est judicieux de pousser un peu plus loin la configuration du script

WAN: La connexion vers l’extérieur

Sa configuration s’effectue dans la rubrique External (internet) interface settings. Vous devez y renseigner votre mode de connexion à Internet, et les eventuels paramétres IP. Si vous vous connectez en ppp, comme avec l’ADLS, il n’est généralement pas nécessaire d’activer le DHCP, l’adresse IP fixe ou le sous-réseau. Par contre, dans le cas d’un connexion permanente par le câble, le ppp ne sera pas activé mais le le DHCP oui. À vous de voir en fonction de votre fournisseur d’accés et de votre abonnement. Sachez toutefois que la configuration d’IPtables ne vous dispense pas de configurer votre connexion internet avec votre outil habituel

Vous trouverez ci-dessous un exemple de connexion avec pppoe (ADSL avec une 9Box après avoir utilisé ppoeconf et configuré mon /etc/network/interfaces)

###############################################################################
# External (internet) interface settings                              
###############################################################################
# Mon type de connexion à internet
EXT_IF="ppp0"
# Mon prestataire ne me distribue pas d'IP en dehors du pppoe...
EXT_IF_DHCP_IP=0
# Je ne dispose pas d'IP fixe
EXTERNAL_NET=""
EXT_NET_BCAST_ADDRESS=""

LAN: Le réseau interne

Il vous faut indiquer ici le nom de votre carte réseau connectée au LAN (si vous n’en avez qu’une il s’agit forcement de eth0), ainsi que votre sous réseau. Pour l’option de broadcast, je ne saurais que vous encourager à la laisser telle quelle.

###############################################################################
# Internal (LAN) interface settings                                           #
###############################################################################
# Mon LAN est connecté à ma carte eth0
INT_IF="eth0"
# Mon sous-réseau (rien de très exotique !)
INTERNAL_NET="192.168.0.0/24"
# Rien de particulier pour le broadcast
INT_NET_BCAST_ADDRESS=""

La DMZ pour les serveurs

C’est ce qu’il y a de plus simple à configurer, il suffit d’indique de nom de la carte réseau concernée et l’adresse du sous réseau. Dans mon cas ce sera rapide car elle n’est pas activée:

###############################################################################
# DMZ (aka DeMilitarized Zone) settings (EXPERT SETTINGS!)                    #
###############################################################################
# Pas de DMZ donc pas d'interface
DMZ_IF=""
# Ni de sous réseau
DMZ_NET=""

Le routage NAT pour partager la connexion Internet

Le routage NAT permet d’activer le partage de la connexion à Internet, c’est lui qui autorisera vos clients à sortir effectuer des requêtes vers Internet. Dans la plupart des cas il suffit de l’activer. Par contre, si vous désirez activer le NAT pour votre DMZ je vous invite à suivre les instructions fournies avec le script

###############################################################################
# NAT (Masquerade, SNAT, DNAT) settings                                       #
###############################################################################
# Le NAT est activé
NAT=1
# Une seule carte d'activée donc pas de Multi-Route
MASQ_MULTI_ROUTE=0
# La configuration par défaut des options avancée me va très bien
# NAT_STATIC_IP="193.2.1.1"
NAT_INTERNAL_NET="$INTERNAL_NET"
# Ma DMZ n'est pas activé donc...
NAT_TCP_FORWARD=""
NAT_UDP_FORWARD=""
NAT_IP_FORWARD=""

3.3 – Configuration avancée

La configuration générale

Dans la rubrique « General settings » vous trouverez un certain nombre d’options concernant toutes vos interfaces. Éditez les en fonction de vos besoins. Je ne peux pas vous donner d’exemple, il s’agit là de vos préférence personnelles. Jetez-y un oeuil tout de même car celà peut servir, à titre d’exemple, le protocole IRC est désactivé. Il en va de même pour la rubrique « Logging options - All logging is rate limited to prevent log flooding » qui concerne la créations de journaux, cette fonction est limitée par défaut afin d’éviter une surcharge de la machine.

Ouvrir des ports

Par défaut tout est fermé, il faut donc ouvrir les ports dont on a besoin. Voici un aperçu des lignes du fichier à éditer. Dans tous les cas de nombreuses informations sont présentes dans le fichier lui même. La configuration du firewall est principalement couverte par deux rubriques du fichier de configuration. La première « Firewall policies for the LAN (EXPERT SETTINGS!)  » concerne les accés de l’extérieur vers le LAN tandis que la seconde « Firewall policies for the DMZ (EXPERT SETTINGS!)  » concerne les ouvertures vers la DMZ.

La syntaxe est ici relativement simple à comprendre, les variables étant des IP ou des numéros de ports séparés par un espace. Les plages de port ou d’IP sont indiquées avec le symbole :.

  • OPEN – Concerne une autorisation
  • DENY – Concerne une interdiction
  • TCP – Applique l’autorisation ou l’interdiction en rapport au protocole TCP
  • UDP – Applique l’autorisation ou l’interdiction en rapport au protocole UDP
  • IP – Applique l’autorisation ou l’interdiction en fonction d’une adresse IP
  • HOST – Applique l’autorisation ou l’interdiction à un hôte en particulier

Les autres options

Les parties du script que je n’aborde pas ici, concernent des réglages beaucoup plus fins et sécifiques à vos besoins en particulier. Ils se configurent, grosso-modo, de la même manière que les options citées ci-dessus

Paramètres de arno-iptables-firewall

Utilisation: /etc/int.d/rc.iptables { start | stop | restart | breread | status }

  • start – Démarre le firewall
  • stop – Arrête le firewall
  • restart – Redémarre le firewall
  • breread – Relire les hôtes bloqués
  • status [-t {table}] [chain] – Afficher les règles du firewall ([chain] et [-t {table}] sont optionnels)