[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ suivant ]
Les services présents sur un système peuvent être sécurisés de deux façons :
les rendre accessibles uniquement aux points d'accès (interfaces) nécessaires ;
les configurer correctement ainsi seuls les utilisateurs habilités pourront les utiliser.
Restreindre les services pour qu'ils ne soient accessibles que depuis un endroit bien spécifique peut être fait au niveau du noyau (pare-feu), configurez les services pour écouter uniquement sur une interface définie (certains services ne fournissent peut-être pas cette fonctionnalité) ou utilisez tout autre méthode, par exemple le correctif vserver pour Linux (2.4.16) peut être utilisé pour forcer les processus à n'utiliser qu'une interface.
Concernant les services lancés par inetd
(telnet
,
ftp
, finger
, pop3
, etc.), il est à
noter que inetd peut être configuré pour que les services n'écoutent que sur
une interface précise (en utilisant la syntaxe service@ip), mais
c'est une fonctionnalité non documentée. L'un de ses remplaçants, le
métadémon xinetd
, inclut une option bind pour faire
cela. Consultez xinetd.conf(5)
.
service nntp { socket_type = stream protocol = tcp wait = no user = news group = news server = /usr/bin/env server_args = POSTING_OK=1 PATH=/usr/sbin/:/usr/bin:/sbin/:/bin +/usr/sbin/snntpd logger -p news.info bind = 127.0.0.1 }
Les paragraphes suivants détaillent comment déterminer les services qui peuvent être configurés correctement en fonction de leur utilisation.
Si vous utilisez toujours TELNET au lieu de SSH, vous devriez prendre une pause dans la lecture de ce manuel pour remédier à cela. SSH devrait être utilisé pour toutes les connexions distantes à la place de TELNET. À une époque où il est facile de scruter le trafic Internet et d'obtenir les mots de passe en clair, vous devriez utiliser uniquement les protocoles qui utilisent la cryptographie. Par conséquent, effectuez maintenant un apt-get install ssh sur le système.
Encourager tous les utilisateurs du système à utiliser SSH au lieu de TELNET,
ou mieux encore, désinstallez telnet/telnetd. De plus, vous devriez éviter
de vous connecter au système en utilisant SSH en tant que superutilisateur et
préférer l'utilisation de méthodes alternatives pour devenir
superutilisateur comme su ou sudo. Enfin, le fichier
sshd_config
, dans /etc/ssh
, devrait être modifié
comme suit pour accroître la sécurité.
ListenAddress 192.168.0.1
Ne faîtes écouter SSH que sur une interface donnée, juste au cas où vous en ayez plus d'une (et ne voulez pas que SSH y soit disponible) ou si vous ajoutez, dans le futur, une nouvelle carte réseau (et ne voulez pas de connexions SSH dessus).
PermitRootLogin no
Essayez autant que possible de ne pas autoriser de connexion en tant que superutilisateur. Si quelqu'un veut devenir superutilisateur par SSH, deux connexions sont maintenant nécessaires et le mot de passe du superutilisateur ne peut être attaqué par force brute par SSH.
Port 666 ou ListenAddress 192.168.0.1:666
Change le port d'écoute, ainsi l'intrus ne peut être complètement sûr de l'exécution d'un démon sshd (soyez prévenus, c'est de la sécurité par l'obscurité).
PermitEmptyPasswords no
Les mots de passe vides sont un affront au système de sécurité.
AllowUsers alex ref
Autorise seulement certains utilisateurs à avoir accès par SSH à cette machine. user@host peut également être utilisé pour n'autoriser l'accès qu'à un utilisateur donné depuis un hôte donné.
AllowGroups wheel admin
Autorise seulement certains membres de groupes à avoir accès par SSH à cette machine. AllowGroups et AllowUsers ont des directives équivalentes pour interdire l'accès à la machine. Sans surprise elles s'appellent « DenyUsers » et « DenyGroups ».
PasswordAuthentication yes
Il vous appartient complètement de décider ce que vous voulez faire. Il est
plus sûr d'autoriser l'accès à la machine uniquement aux utilisateurs avec
des clefs SSH placées dans le fichier ~/.ssh/authorized_keys
. Si
c'est ce que vous voulez, positionnez cette option à « no ».
Désactiver toute forme d'autorisation dont vous n'avez pas réellement
besoin si vous n'utilisez pas, par exemple,
RhostsRSAAuthentication, HostbasedAuthentication,
KerberosAuthentication ou RhostsAuthentication, vous
devriez les désactiver même s'ils le sont déjà par défaut (consultez la
page de manuel sshd_config(5)
).
Protocole 2
Désactiver le protocole version 1, car il a des défauts de conception
qui facilitent le piratage de mots de passe. Pour obtenir de plus amples
renseignements, consultez un
article concernant les problèmes du protocole SSH
ou le bulletin d'alerte
Xforce
.
Bannière /etc/un_fichier
Ajouter une bannière (elle sera récupérée du fichier) pour les utilisateurs se connectant au serveur SSH. Dans certains pays, envoyer un avertissement avant l'accès à un système donné avertissant des accès non autorisés ou du suivi des utilisateurs devrait être ajouté pour avoir une protection légale.
Vous pouvez également restreindre l'accès au serveur ssh en utilisant
pam_listfile ou pam_wheel dans le fichier de
contrôle PAM. Par exemple, vous pourriez bloquer tous les utilisateurs qui ne
sont pas dans /etc/loginusers
en ajoutant cette ligne à
/etc/pam.d/ssh
:
auth required pam_listfile.so sense=allow onerr=fail item=user file=/etc/loginusers
Pour finir, soyez conscient que ces directives proviennent d'un fichier de
configuration OpenSSH. Actuellement, trois démons SSH sont couramment
utilisés, ssh1, ssh2, et OpenSSH par les gens d'OpenBSD. ssh1 était le
premier démon SSH disponible et est toujours le plus couramment utilisé (il y
a même des rumeurs à propos d'un portage pour Windows). ssh2 a beaucoup
d'avantages par rapport à ssh1 sauf qu'il est diffusé sous une licence non
libre. OpenSSH est un démon SSH complètement libre, qui gère à la fois
ssh1 et ssh2. OpenSSH est la version installée sur Debian quand le paquet
ssh
est choisi.
Vous pouvez obtenir plus d'informations concernant la mise en place de SSH avec
la prise en charge PAM dans les archives
de la liste de discussion sécurité
.
OpenSSH ne fournit pas de moyen à l'heure actuelle pour chrooter
automatiquement les utilisateurs lors de la connexion (la version commerciale
fournit cette fonctionnalité). Cependant, il existe un projet ayant pour but
de fournir cette fonctionnalité pour OpenSSH également, consultez http://chrootssh.sourceforge.net
,
il n'est cependant pas empaqueté pour Debian actuellement. Vous pourriez
cependant utiliser le module pam_chroot
module comme décrit dans
Restriction des utilisateurs, Section
4.10.8.
Dans Environnement de chroot pour SSH, Annexe G, vous pouvez trouver plusieurs options pour créer un environnement chroot pour SSH.
Si vous utilisez un client SSH pour se connecter au serveur SSH, vous devez
vous assurer qu'il prend en charge les mêmes protocoles que ceux utilisés sur
le serveur. Par exemple, si vous utilisez le paquet mindterm
, il
ne prend en charge que le protocole version 1. Cependant, le serveur sshd
est, par défaut, configuré pour n'accepter que la version 2 (pour des
raisons de sécurité).
Si vous ne voulez pas que les utilisateurs transfèrent des fichiers
depuis et vers le serveur ssh, vous devez restreindre l'accès au
sftp-server
et l'accès scp
. Vous pouvez
restreindre sftp-server
en configurant le bon
Subsystem dans /etc/ssh/sshd_config
.
Vous pouvez aussi cloisonner les utilisateurs dans un chroot (en utilisant
libpam-chroot
de telle sorte que même si le transfert de fichiers
est autorisé, ils soient limités à un environnement qui ne contient aucun
fichier système.
Vous pourriez restreindre l'accès aux utilisateurs pour leur permettre seulement le transfert de fichiers sans interpréteur de commandes interactif. Pour faire cela, vous pouvez :
soit interdire les connexions d'utilisateurs au serveur SSH (comme décrit ci-dessus par le fichier de configuration ou par la configuration PAM) ;
soit donner aux utilisateurs un interpréteur de commandes restreint comme
scponly
ou rssh
. Ces interpréteurs de commandes
restreignent les commandes disponibles pour les utilisateurs afin de ne pas
leur donner de droits d'exécution à distance.
Squid est l'un des plus populaires serveurs mandataire (« proxy »)
et cache et certains problèmes de sécurité sont à prendre en compte. Le
fichier de configuration par défaut de Squid refuse toutes les requêtes
d'utilisateurs. Cependant, le paquet Debian permet l'accès depuis
« localhost », il est simplement nécessaire de configurer le
navigateur correctement. Vous devriez configurer Squid pour permettre l'accès
aux utilisateurs, hôtes ou réseaux de confiance en définissant une liste de
contrôle d'accès (ACL) dans /etc/squid/squid.conf
. Consultez le
Guide
d'utilisateur de Squid
pour plus d'informations à propos des
règles ACL. Veuillez noter que Debian fournit une configuration minimale pour
Squid qui empêche tout, à l'exception de la connexion de localhost
au serveur mandataire (qui fonctionnera sur le port 3128 par défaut).
Vous devrez personnaliser le fichier/etc/squid/squid.conf
comme
nécessaire. La configuration minimale recommandée (fournie avec le paquet)
est indiquée ci-dessous :
acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # ports non enregistrés acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT (...) # Ne permet l'accès à cachemgr que depuis localhost http_access allow manager localhost http_access deny manager # Ne permet des requêtes de purge que depuis localhost http_access allow purge localhost http_access deny purge # Interdit les requêtes sur des ports inconnus http_access deny !Safe_ports # Interdit CONNECT sur tout autre port que SSL http_access deny CONNECT !SSL_ports # # INSÉRER VOS PROPRES RÈGLES ICI POUR PERMETTRE L'ACCÈS # DEPUIS LES CLIENTS # http_access allow localhost # Et enfin, interdit tout autre accès à ce mandataire http_access deny all # Par défaut : # icp_access deny all # # Permet les requêtes ICP à tout le monde icp_access allow all
Vous pouvez également configurer Squid selon vos ressources système, en incluant la mémoire cache (option cache_mem), l'emplacement de vos fichiers du cache et la quantité d'espace qu'ils prendront sur disque (option cache_dir).
Notez que, s'il n'est pas configuré correctement, n'importe qui peut relayer un message par l'intermédiaire de Squid, puisque les protocoles HTTP et SMTP sont conçus de façon similaire. Le fichier de configuration par défaut interdit l'accès au port 25. Si vous voulez autoriser les connexions sur ce port, il vous faudra l'ajouter dans la liste des Safe_ports (ports autorisés). Cependant, ce n'est PAS recommandé.
Installer et configurer le serveur mandataire et le cache correctement ne représente qu'une partie de la sécurisation du site. Une autre tâche nécessaire réside dans l'analyse des journaux de Squid pour s'assurer que tout fonctionne comme prévu. Quelques paquets dans Debian GNU/Linux peuvent aider l'administrateur dans cette tâche. Les paquets suivant sont disponibles dans Debian 3.0 et Debian 3.1 (Sarge) :
calamaris
- Analyseur des journaux pour serveurs mandataires Squid
ou Oops
modlogan
- Analyseur modulaire de journaux
sarg
- Création de compte-rendu d'analyse de Squid
squidtaild
- Programme de surveillance des journaux de Squid
Quand vous utilisez Squid en Accelerator Mode, il se comporte également comme
un serveur web. Activer cette option augmente la complexité du code, le
rendant moins fiable. Par défaut, Squid n'est pas configuré pour se
comporter comme un serveur web, donc vous n'avez pas besoin de vous tracasser
à cause de cela. Notez que si vous désirez utiliser cette fonctionnalité,
assurez-vous qu'elle est vraiment nécessaire. Pour trouver plus
d'informations à propos de l'Accelerator Mode de Squid, consultez le Guide de
l'utilisateur de Squid - Accelerator Mode
.
Si vous avez réellement besoin d'utiliser FTP (sans l'emballer avec sslwrap ou
à l'intérieur d'un tunnel SSL ou SSH), vous devriez « chrooter »
FTP dans le répertoire personnel de l'utilisateur, ainsi l'utilisateur ne
pourra rien voir d'autre que ses propres répertoires. Autrement, il pourrait
parcourir le système comme s'il disposait d'un interpréteur de commandes.
Vous pouvez ajouter la ligne suivante dans la section global de
proftpd.conf
pour activer ce chroot :
DefaultRoot ~
Redémarrez ProFTPD par /etc/init.d/proftpd restart et vérifiez si vous pouvez sortir de votre propre répertoire personnel.
Pour prévenir ProFTPD d'attaques par déni de service avec l'utilisation de
../../.., ajoutez la ligne suivante dans /etc/proftpd.conf
:
DenyFilter \*.*/
Rappelez-vous toujours que FTP envoie les identifiants et les mots de passe
d'authentification en clair (ce n'est pas un problème si vous fournissez un
service public anonyme) et il existe de meilleures alternatives dans Debian
pour cela. Par exemple, sftp
(fourni par ssh
). Il
existe également d'autres implémentations de SSH pour d'autres systèmes
d'exploitation : putty
et
cygwin
par exemple.
Cependant, si vous maintenez encore le serveur FTP tout en donnant un accès
par SSH aux utilisateurs, vous pouvez rencontrer un problème courant. Les
utilisateurs accédant aux serveurs FTP anonymes à l'intérieur des systèmes
sécurisés par SSH peuvent essayer de se connecter dans le serveur
FTP. Bien que l'accès sera refusé, le mot de passe sera tout de même
envoyé en clair sur le réseau. Pour éviter cela, le développeur de
ProFTPD, TJ Saunders, a créé un correctif pour empêcher des utilisateurs de
fournir au serveur FTP anonyme des comptes SSH valables. Plus d'informations
et le correctif sont disponibles, consultez Correctifs ProFTPD
.
Ce correctif a été également indiqué pour Debian, consultez le bogue nº 145669
.
Actuellement, les terminaux X sont de plus en plus utilisés dans les entreprises où un seul serveur est nécessaire pour un grand nombre de stations de travail. Cela peut être dangereux car vous devez autoriser le serveur de fichiers à se connecter aux clients (le serveur X d'un point de vue X. X intervertit la notion de client et de serveur). Si vous suivez les (très mauvaises) suggestions de nombreuses documentations, vous tapez xhost + sur la machine. Cela autorise tout client X à se connecter au système. Pour une sécurité légèrement meilleure, vous pouvez utiliser la commande xhost +hostname à la place, ce qui permet de n'autoriser les accès que depuis certains hôtes.
Une solution encore meilleure serait d'utiliser un tunnel SSH pour X et de
chiffrer toute la session. C'est fait automatiquement lors de l'utilisation de
SSH pour se connecter sur une autre machine. Pour que cela fonctionne, vous
devez configurer à la fois le client SSH et le serveur SSH. Sur le client
SSH, ForwardX11 doit être positionné à yes dans
/etc/ssh/ssh_config
. Sur le serveur SSH,
X11Forwarding doit être positionné à yes dans
/etc/ssh/sshd_config
et le paquet xbase-clients
doit
être installé car le serveur SSH utilise /usr/X11R6/bin/xauth
(/usr/bin/xauth
sur Debian unstable) pour mettre en place le
pseudoaffichage X. À l'heure de SSH, vous devriez abandonner complètement le
contrôle d'accès basé sur xhost.
Pour une sécurité accrue, si vous n'avez pas besoin d'accéder à X depuis d'autres machines, désactivez l'écoute sur le port TCP 6000 en tapant simplement :
$ startx -- -nolisten tcp
C'est le comportement par défaut dans XFree 4.1.0 (le serveur X fourni
dans Debian 3.0 et 3.1). Si vous utilisez XFree 3.3.6 (vous avez
donc Debian 2.2 installée), vous pouvez éditer
/etc/X11/xinit/xserverrc
afin d'avoir quelque chose ressemblant à
ceci :
#!/bin/sh exec /usr/bin/X11/X -dpi 100 -nolisten tcp
Si vous utilisez XDM, mettez /etc/X11/xdm/Xservers
à :
:0 local /usr/bin/X11/X vt7 -dpi 100 -nolisten tcp. Si vous
utilisez GDM, assurez-vous que l'option DisallowTCP=true est
positionnée dans /etc/gdm/gdm.conf
(qui est par défaut dans
Debian). Cela va basiquement ajouter -nolisten tcp à chaque
ligne de commande X [41].
Vous pouvez également positionner l'expiration de délai système par défaut
pour les blocages xscreensaver
. Même si l'utilisateur peut
annuler cela, vous devriez éditer le fichier de configuration
/etc/X11/app-defaults/XScreenSaver
et changer la ligne de
blocage :
*lock: False
(qui est par défaut dans Debian) à :
*lock: True
FIXME : Ajouter des informations sur comment désactiver les économiseurs d'écran qui affichent l'écran de l'utilisateur (qui peuvent avoir des informations sensibles).
Plus de renseignements sur la sécurité X Window dans XWindow-User-HOWTO
(/usr/share/doc/HOWTO/en-txt/XWindow-User-HOWTO.txt.gz
).
FIXME : Ajouter des informations d'une discussion de debian-security pour avoir les modifications des fichiers de configuration de XFree 3.3.6 pour faire cela.
Si vous ne voulez un gestionnaire d'affichage installé que pour une utilisation locale (avec une jolie connexion graphique, tout de même), assurez-vous que le XDMCP (X Display Manager Control Protocol) est désactivé. Dans XDM, vous pouvez faire cela avec cette ligne dans /etc/X11/xdm/xdm-config :
DisplayManager.requestPort: 0
Pour GDM, il devrait y avoir dans le fichier gdm.conf :
[xdmcp] Enable=false
Normalement, tous les gestionnaires d'affichages sont configurés par défaut pour ne pas démarrer les services XDMCP dans Debian.
Imaginez, vous arrivez au travail et l'imprimante crache une quantité infinie de papier car quelqu'un est en train de provoquer un déni de service sur le démon d'impression. Méchant, n'est ce pas ?
Dans toute architecture d'impression UNIX, il y a un moyen de fournir les
données du client vers le serveur d'impression de l'hôte. Dans les
traditionnels lpr
et lp
, la commande du client copie
ou crée un lien symbolique pour les données dans le répertoire de spool
(c'est pour cela que ces programmes sont habituellement SUID ou SGID).
Pour éviter tout problème, vous devriez garder vos serveurs d'impression
particulièrement sûrs. Cela veut dire qu'il est nécessaire de configurer le
service d'impression pour qu'il autorise seulement les connexions d'un ensemble
de serveurs de confiance. Pour ce faire, ajoutez les serveurs auxquels vous
voulez autoriser l'impression à /etc/hosts.lpd
.
Cependant, même si vous faites cela, le démon lpr
accepte les
connexions entrantes sur le port 515 de n'importe quelle interface. Vous
devriez réfléchir au filtrage par un pare-feu des connexions provenant de
réseaux ou hôtes qui ne sont pas autorisés à imprimer (le démon
lpr
ne peut être limité que pour écouter sur une adresse IP
donnée).
lprng
doit être préféré à lpr
car il peut être
configuré pour faire du contrôle d'accès basé sur l'adresse IP. Vous
pouvez indiquer l'interface sur laquelle se lier (cependant d'une manière un
peu bizarre)
Si vous utilisez une imprimante sur le système, mais seulement localement,
vous ne voulez pas partager ce service sur le réseau. Vous pouvez considérer
l'utilisation d'autres systèmes d'impression, comme celui fourni par
cups
ou PDQ
qui est basé sur les permissions utilisateurs du périphérique
/dev/lp0
.
Dans cups
, les données d'impression sont transférées vers le
serveur par le protocole HTTP. Cela veut dire que le programme client n'a pas
besoin de privilèges spéciaux, mais cela nécessite que le serveur écoute
sur un port quelque part.
Cependant, si vous voulez utiliser cups
, mais seulement
localement, vous pouvez le configurer pour se lier à l'interface de bouclage
(loopback) en modifiant /etc/cups/cupsd.conf
:
Listen 127.0.0.1:631
Il y a plusieurs autres options de sécurité comme autoriser ou interdire des
réseaux et hôtes dans le fichier de configuration. Cependant, si vous n'en
avez pas besoin, il peut être préférable de simplement limiter le port
d'écoute. cups
fournit également la documentation par le port
HTTP, si vous ne voulez pas dévoiler des informations potentiellement utiles
aux attaquants extérieurs (et que le port est ouvert), ajoutez
également :
<Location /> Order Deny,Allow Deny From All Allow From 127.0.0.1 </Location>
Ce fichier de configuration peut être modifié pour ajouter plus de
fonctionnalités y compris des certificats SSL/TLS et du chiffrement. Les
manuels sont disponibles sur http://localhost:631/ ou à cups.org
.
FIXME : Ajouter plus de contenu (l'article sur Amateur Fortress Building
fournit
certains points de vues très intéressants).
FIXME : Vérifier la disponibilité de PDG dans Debian, et s'il l'est, le suggérer comme le système d'impression préféré.
FIXME : Vérifier si Farmer/Wietse a une alternative pour le démon d'imprimante et si il est disponible dans Debian.
Si le serveur n'est pas un système d'envoi de courrier, vous n'avez pas réellement besoin d'un démon de courrier écoutant les connexions entrantes, mais vous pourriez vouloir que le courrier local soit distribué pour, par exemple, recevoir le courrier du superutilisateur en provenance d'un des systèmes d'alerte en place.
Si vous avez exim
, vous n'avez pas besoin que le démon tourne
pour le faire car la tâche standard cron
vide la file des
messages. Consultez Désactivation de
services démon, Section 3.6.1 pour le façon de faire cela.
Vous pouvez vouloir avoir un démon local de courrier pour qu'il puisse relayer les courriers envoyés localement à un autre système. C'est courant quand vous devez administrer un certain nombre de systèmes et que vous ne voulez pas vous connecter à chacun d'entre eux pour lire le courrier envoyé localement. Comme toute la journalisation de chaque système individuel peut être centralisée en utilisant un serveur de journalisation système centralisé, les courriers peuvent être envoyés à un serveur de courriers central.
Un tel système relais seulement devrait être configuré correctement pour cela. Le démon pourrait également être configuré pour n'écouter que sur l'adresse de bouclage.
Les étapes de configuration suivantes ne doivent être suivies que si vous
configurez le paquet exim
dans la version 3.0 de Debian. Si
vous utilisez une version ultérieure (comme la version 3.1 qui utilise
exim4
), le système d'installation a été amélioré afin, si le
MTA est configuré pour ne délivrer que des messages locaux, de n'autoriser
des connexions que depuis l'hôte local et interdire toute connexion distante.
Sur un système Debian 3.0 utilisant exim
, vous devrez
retirer le démon SMTP d'inetd :
$ update-inetd --disable smtp
et configurer le démon de courrier pour écouter seulement sur l'interface de
bouclage. Dans exim
(le MTA par défaut) vous pouvez faire ça en
éditant le fichier /etc/exim.conf
et en ajoutant la ligne
suivante :
local_interfaces = "127.0.0.1"
Redémarrez les deux démons (inetd et exim) et Exim n'écoutera que sur la socket 127.0.0.1:25. Faites attention, et avant tout désactivez inetd, sinon Exim ne démarrera pas étant donné que le démon inetd est déjà en attente de connexions entrantes.
Pour postfix
éditez /etc/postfix/main.conf
:
inet_interfaces = localhost
Si vous voulez seulement le courrier local, cette approche est meilleure que
l'encapsulation TCP du démon de courrier ou l'ajout de règles de pare-feu
pour limiter les personnes qui y accèdent. Cependant, si vous n'avez pas
besoin d'écouter sur d'autres interfaces, vous pourriez envisager de le lancer
à partir d'inetd et ajouter une encapsulation TCP pour que les connexions
entrantes soient vérifiées par rapport à /etc/hosts.allow
et
/etc/hosts.deny
. De plus, vous serez au courant quand un accès
non autorisé est tenté sur le démon de courrier, si vous mettez en place
correctement la journalisation pour n'importe laquelle des méthodes décrites
plus haut.
En tout cas, pour rejeter les tentatives de relais de courrier au niveau SMTP,
vous pouvez modifier /etc/exim/exim.conf
pour inclure :
receiver_verify = true
Même si le serveur de courrier ne relaiera pas le message, ce genre de
configuration est nécessaire au testeur de relais à http://www.abuse.net/relay.html
pour déterminer que le serveur ne peut pas faire de relais.
Si vous voulez une configuration relais seulement, cependant, vous pouvez
vouloir changer le démon de courrier pour des programmes qui ne peuvent être
configurés que pour faire suivre le courrier à un serveur de
courrier distant. Debian fournit actuellement les paquets ssmtp
et nullmailer
dans ce but. En tout cas, vous pouvez évaluer pour
vous-même l'un de ces deux agents de transport de courrier [42] fournis par Debian et voir
lequel correspond le mieux aux buts du système.
Si vous désirez donner un accès à distance aux boîtes à lettres, il y a un certain nombre de démons POP3 et IMAP disponibles[43] Cependant, si vous fournissez un accès IMAP, notez qu'il s'agit d'un protocole générique d'accès aux fichiers, il peut devenir l'équivalent d'un accès à l'interpréteur de commandes car les utilisateurs peuvent être capables de récupérer n'importe quel fichier par celle-ci.
Essayez, par exemple, de configurer comme chemin de votre boîte de réception {server.com}/etc/passwd, si cela réussit, votre démon IMAP n'est pas configuré correctement pour empêcher ce genre d'accès.
Parmi les serveurs IMAP dans Debian, le serveur cyrus
(dans le
paquet cyrus-imapd
) contourne cela en ayant tous les accès sur
une base de données dans une partie restreinte du système de fichiers.
Également, uw-imapd
(installez soit uw-imapd
ou
mieux, si votre client IMAP le gère, uw-imapd-ssl
) peut être
configuré pour « chrooter » les répertoires de courrier des
utilisateurs, mais cela n'est pas activé par défaut. La documentation
fournie donne plus d'informations sur la façon de le configurer.
Vous pouvez également vouloir faire fonctionner un serveur IMAP qui n'ait pas
besoin que des utilisateurs valables soient créés sur le système local (ce
qui donnerait également un accès à l'interpréteur de commande), les paquets
courier-imap
(pour IMAP), courier-pop
teapop
(pour POP3) et cyrus-imapd
(pour POP3 et IMAP)
fournissent des serveurs avec des méthodes d'authentification en plus des
comptes utilisateur locaux. cyrus
peut utiliser toute méthode
d'authentification qui peut être configurée par PAM tandis que
teapop
peut utiliser des bases de données (comme
postgresql
et mysql
) pour l'authentification des
utilisateurs.
FIXME : Vérifier : uw-imapd
peut être configuré avec
l'authentification utilisateur grâce à PAM également.
La lecture et réception du courrier sont des protocoles en texte clair parmi
les plus courants. Si vous utilisez POP3 ou IMAP pour récupérer le courrier,
vous envoyez votre mot de passe en clair à travers le réseau, et donc presque
tout le monde peut lire votre courrier à partir de maintenant. À la place,
utilisez SSL (Secure Sockets Layer) pour recevoir votre courrier. L'autre
alternative est SSH, si vous avez un compte avec interpréteur de commandes sur
la machine qui sert de serveur POP ou IMAP. Voici un fetchmailrc
simple décrivant cela :
poll mon-serveur-imap.org via "localhost" with proto IMAP port 1236 user "ref" there with password "hackme" is alex here warnings 3600 folders .Mail/debian preconnect 'ssh -f -P -C -L 1236:my-imap-mailserver.org:143 -l ref mon-serveur-imap.org sleep 15 </dev/null > /dev/null'
Le preconnect est la ligne importante. Il lance une session SSH et crée le
tunnel nécessaire, qui relaie automatiquement les connexions au port local
1236 vers le port IMAP du serveur de mail, mais chiffrées. Une autre
possibilité serait d'utiliser fetchmail
avec la fonctionnalité
SSL.
Si vous désirez fournir des services de courrier comme POP et IMAP chiffrés, apt-get install stunnel et démarrez vos démons ainsi :
stunnel -p /etc/ssl/certs/stunnel.pem -d pop3s -l /usr/sbin/popd
Cette commande encapsule le démon fourni (-l) au port (-d) et utilise le certificat SSL indiqué (-p).
Il y a différents problèmes qui peuvent être traités pour sécuriser le démon de serveur de domaine; problèmes similaires à ceux étudiés quand on sécurise n'importe quel service donné :
configurer le démon lui-même pour qu'il ne puisse pas être mal utilisé de l'extérieur (consultez Configuration de BIND pour éviter de mauvaises utilisations, Section 5.7.1). Cela inclut limiter les requêtes possibles pour les clients : transferts de zones et requêtes récursives ;
limiter l'accès du démon au serveur lui-même, ainsi s'il est utilisé pour s'introduire, les dommages au système sont limités. Cela inclut d'exécuter le démon en tant qu'utilisateur non privilégié (consultez Changer l'utilisateur de BIND, Section 5.7.2) et le chrooter (consultez Chrooter le serveur de domaine, Section 5.7.3).
Vous devriez restreindre certains renseignements donnés par le serveur DNS aux
clients extérieurs pour l'empêcher d'être utilisé pour obtenir des
informations de valeur sur votre organisation que vous ne voudriez pas
divulguer. Cela inclut l'ajout des options suivantes :
allow-transfer, allow-query, allow-recursive et
version. Vous pouvez soit limiter cela dans la section globale (pour
que cela s'applique à toutes les zones servies) ou individuellement par zone.
Cette information est documentée dans le paquet bind-doc
,
consultez /usr/share/doc/bind/html/index.fr.html
en plus à ce sujet
une fois que le paquet est installé.
Imaginez que votre serveur (un serveur avec plusieurs adresses de base) est
connecté à Internet et à votre réseau interne (votre adresse IP interne est
192.168.1.2), vous ne voulez fournir aucun service à Internet et vous voulez
juste autoriser les consultations DNS à partir de vos hôtes internes. Vous
pourriez le restreindre en incluant dans /etc/bind/named.conf
:
options { allow-query { 192.168.1/24; } ; allow-transfer { none; } ; allow-recursion { 192.168.1/24; } ; listen-on { 192.168.1.2; } ; forward { only; } ; forwarders { A.B.C.D; } ; };
L'option listen-on lie uniquement le DNS à l'interface ayant une adresse interne, mais, même si cette interface est la même que l'interface qui permet la connexion à Internet (par l'utilisation de NAT, par exemple), les requêtes ne seront acceptées que si celles-ci proviennent d'hôtes internes. Si le système est constitué de plusieurs interfaces et que le listen-on n'est pas présent, seuls les utilisateurs internes pourront émettre des requêtes, mais, puisque le port restera accessible à des attaquants externes, ils pourront essayer de faire tomber (ou exploiter une attaque de débordement de tampon sur) le serveur DNS. Vous pouvez même le mettre uniquement en écoute sur l'adresse 127.0.0.1 si vous ne désirez offrir le service à personne d'autre que vous même.
L'enregistrement version.bind dans la classe chaos contient la version du
processus bind actuellement en cours d'exécution. Cette information est
souvent utilisée par des scanners automatisés et des individus malveillants
qui souhaitent déterminer si un bind
est vulnérable à une
attaque spécifique. En fournissant des informations fausses ou pas
d'informations du tout, on limite la probabilité qu'un serveur soit attaqué
sur la base de la version qu'il publie. Pour fournir votre propre version,
utilisez la directive version de la manière suivante :
options { ... diverses options ici ... version "Not available."; };
Changer l'enregistrement version.bind ne fournit pas actuellement de protection contre les attaques, mais cela devrait être considéré comme une protection utile.
Un fichier de configuration named.conf
d'exemple pourrait être me
suivant :
acl internal { 127.0.0.1/32; // localhost 10.0.0.0/8; // interne aa.bb.cc.dd; // IP eth0 }; acl friendly { ee.ff.gg.hh; // DNS escalve aa.bb.cc.dd; // IP eth0 127.0.0.1/32; // localhost 10.0.0.0/8; // interne }; options { directory "/var/cache/bind"; allow-query { internal; }; allow-recursion { internal; }; allow-transfer { none; }; }; // À partir d'ici jusqu'à la zone mysite.bogus // est dans l'ensemble non modifié des valeurs par défaut Debian logging { category lame-servers { null; }; category cname { null; }; }; zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; // Zones ajoutées moi-même zone "mysite.bogus" { type master; file "/etc/bind/named.mysite"; allow-query { any; }; allow-transfer { friendly; }; };
Veuillez vérifier (de nouveau) le système de suivi des bogues (BTS) à propos
de BIND, en particulier le bogue
nº 94760 (à propos des ACL sur les transferts de zone)
. Vous
pouvez contribuer si vous le désirez au rapport de bogue si vous pensez
pouvoir ajouter des informations utiles.
Concernant la limitation des privilèges de BIND vous devez être conscient que
si un utilisateur différent du superutilisateur exécute BIND, alors BIND ne
peut pas détecter de nouvelles interfaces automatiquement, par exemple, quand
vous insérez une carte PCMCIA dans un portable. Consultez le fichier
README.Debian
du répertoire de documentation de named
(/usr/share/doc/bind/README.Debian
) pour plus d'informations sur
ce problème. De nombreux problèmes de sécurité concernant BIND ont été
récemment découverts, donc le changement d'utilisateur est utile si possible,
cependant si vous désirez le faire de façon automatique, vous pouvez essayer
le script fourni dans Exemple de script pour
changer l'installation par défaut de BIND, Annexe E.
Remarquez, de toute façon, que cela ne concerne que la version 8 de BIND.
Dans les paquets Debian de la version 9 (depuis la version 9.2.1-5,
disponible avec Sarge), l'utilisateur bind est créé et utilisé en
configurant la variable OPTIONS de /etc/default/bind9
. Si vous
utilisez BIND version 9 et que le démon de serveur de noms ne fonctionne
pas avec l'utilisateur bind, vérifiez les configurations de ce
fichier.
Pour démarrer BIND sous un autre utilisateur, tout d'abord créez un utilisateur et un groupe séparé (ce n'est pas une bonne idée d'utiliser nobody ou nogroup pour chaque service ne devant pas tourner en tant que superutilisateur). Dans cet exemple, l'utilisateur et le groupe named seront utilisés. Vous pouvez faire cela en tapant :
addgroup named adduser --system --home /home/named --no-create-home --ingroup named \ --disabled-password --disabled-login named
Notez que l'utilisateur named sera très restreint. Si vous désirez, pout toute raison, avoir une configuration moins restrictive, utilisez :
addgroup named adduser --system --ingroup named named
Maintenant vous pouvez soit éditer, à l'aide de votre éditeur favori,
/etc/init.d/bind
et modifiez les lignes commençant par
start-stop-daemon --start
en[44]
start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g named -u named
soit modifier (créez-le s'il n'existe pas) le fichier de configuration par
défaut (/etc/default/bind
pour BIND en version 8) et
introduisez ceci :
OPTIONS="-u named -g named"
Modifiez les permissions des fichiers utilisés par BIND, y compris
/etc/bind/rndc.key
:
-rw-r----- 1 root named 77 Jan 4 01:02 rndc.key
et l'endroit où BIND crée son fichier pid en utilisant, par exemple
/var/run/named
au lieu de /var/run
:
$ mkdir /var/run/named $ chown named.named /var/run/named $ vi /etc/named.conf [ ... mettez le fichier de configuration à jour en utilisant ce nouvel emplacement ...] options { ... pid-file "/var/run/named/named.pid"; }; [ ... ]
Pour éviter également d'exécuter quoi que ce soit en tant que superutilisateur, modifiez la ligne reload du script init.d en substituant :
reload) /usr/sbin/ndc reload
par :
reload) $0 stop sleep 1 $0 start
Remarque : selon la version de Debian, vous pouvez devoir changer la ligne restart également. Cela a été corrigé dans la version 1:8.3.1-2 de BIND pour Debian.
Il ne reste plus qu'à redémarrer BIND à l'aide de /etc/init.d/bind restart, puis rechercher dans le journal système les deux entrées suivantes :
Sep 4 15:11:08 nexus named[13439]: group = named Sep 4 15:11:08 nexus named[13439]: user = named
Voilà ! Maintenant named ne s'exécute plus en tant que
superutilisateur. Si vous voulez lire plus d'informations sur pourquoi BIND ne
fonctionne pas en tant qu'utilisateur non superutilisateur sur les systèmes
Debian, veuillez vérifier le système de suivi des bogues concernant BIND, en
particulier les bogues nº 50013 : bind ne devrait pas
fonctionner en tant que superutilisateur
, nº 132582 : l'installation par
défaut est potentiellement non sécurisée
, nº 53550
, nº 52745
et nº 128129
. Vous pouvez
contribuer à ces rapports de bogue si vous le désirez si vous pensez pouvoir
ajouter des informations utiles.
Pour atteindre une sécurité de BIND maximale, construisez maintenant une
prison chroot (consultez Paranoïa généralisée du suid
et du chroot, Section 5.10) autour du démon. Il y a un moyen facile de
faire cela : l'option -t (consultez la page de manuel
named(8)
ou la page 100 de la documentation de
BIND 9 (PDF)
). Cela fera que BIND se chrootera lui-même dans
le répertoire donné sans que vous ayez besoin de configurer une prison chroot
et de vous inquiéter au sujet des bibliothèques dynamiques. Les seuls
fichiers qui doivent être dans cette prison chroot :
dev/null etc/bind/ - doit contenir named.conf et toutes les zones du serveur sbin/named-xfer - si vous faites du transfert de nom var/run/named/ - devrait contenir le PID et le cache du serveur de nom (s'il existe), ce répertoire doit être accessible en écriture à l'utilisateur named var/log/named - si vous configurez le journal vers un fichier, doit être accessible en écriture à l'utilisateur named dev/log - syslogd devrait écouter ici si named est configuré pour journaliser en l'utilisant
Pour que le démon BIND fonctionne correctement il a besoin de permissions dans les fichiers named. C'est une tâche facile car les fichiers de configuration sont toujours dans /etc/named. Prenez en compte qu'il n'a besoin que d'un accès en lecture seule aux fichiers de zone, sauf s'il s'agit un serveur de nom secondaire ou serveur cache. Si c'est le cas vous devrez permettre la lecture et l'écriture aux zones nécessaires (pour que les transferts de zone à partir du serveur primaire fonctionnent).
De plus, vous pouvez trouver plus d'informations concernant le chrootage de
BIND dans le Chroot-BIND-HOWTO
(au sujet de BIND 9) et Chroot-BIND8-HOWTO
(au sujet de BIND 8). Ces mêmes documents devraient être disponibles
par l'installation de doc-linux-text
(version texte) ou
doc-linux-html
(version HTML). Un autre document utile est
http://web.archive.org/web/20011024064030/http://www.psionic.com/papers/dns/dns-linux
.
Si vous configurez une véritable prison chroot (c'est-à-dire pas seulement l'option -t) pour BIND dans Debian, assurez-vous qu'elle contient les fichiers suivants[45] :
dev/log - syslogd devrait écouter ici dev/null etc/bind/named.conf etc/localtime etc/group - avec une seule ligne: "named:x:GID:" etc/ld.so.cache - généré avec ldconfig lib/ld-2.3.6.so lib/libc-2.3.6.so lib/ld-linux.so.2 - lié symboliquement à ld-2.3.6.so lib/libc.so.6 - lié symboliquement à libc-2.3.6.so sbin/ldconfig - pourra être effacé après la configuration du chroot sbin/named-xfer - si vous faites des transferts de nom var/run/
Modifiez aussi l'écoute de syslogd
sur
$CHROOT/dev/log pour que le serveur de nom puisse écrire des
entrées de journalisation système dans le journal du système local.
Pour éviter des problèmes avec les bibliothèques dynamiques, vous pouvez
compiler BIND statiquement. Vous pouvez utiliser apt-get
pour
cela avec l'option source. Il peut même récupérer les paquets
dont vous avez besoin pour le compiler correctement. Il vous faudrait faire
quelque chose comme :
$ apt-get source bind # apt-get build-dep bind $ cd bind-8.2.5-2 (modifier src/port/linux/Makefile pour que CFLAGS contienne l'option « -static ») $ dpkg-buildpackage -rfakeroot -uc -us $ cd .. # dpkg -i bind-8.2.5-2*deb
Après l'installation, vous devrez déplacer des fichiers dans la prison
chroot[46] vous pouvez
conserver les scripts init.d dans /etc/init.d
pour
que le système lance automatiquement le serveur de domaine, mais éditez les
pour ajouter --chroot /location_of_chroot dans les appels à
start-stop-daemon
dans ces scripts ou utilisez l'option
-t de BIND en la configurant dans l'argument OPTIONS du fichier de
configuration /etc/default/bind
(pour la version 8) ou
/etc/default/bind9
(pour la version 9).
Pour plus d'informations sur la mise en place de chroots, consultez Paranoïa généralisée du suid et du chroot, Section 5.10.
FIXME : Inclure les informations provenant de http://people.debian.org/~pzn/howto/chroot-bind.sh.txt
,
http://www.cryptio.net/~ferlatte/config/
(spécifique Debian), http://web.archive.org/web/20021216104548/http://www.psionic.com/papers/whitep01.html
,
http://csrc.nist.gov/fasp/FASPDocs/NISTSecuringDNS.htm
.
FIXME : Ajout de contenu : modules fournis par l'installation normale d'Apache (sous /usr/lib/apache/X.X/mod_*) et modules qui peuvent être installés séparément dans les paquets libapache-mod-XXX.
Vous pouvez limiter l'accès au serveur Apache si vous voulez uniquement
l'utiliser en interne (dans un but d'essai, pour accéder à l'archive
doc-central
, etc.) et si vous ne voulez pas que des intrus y
accèdent. Pour réaliser cela, utilisez les directives Listen ou
BindAddress dans /etc/apache/http.conf
.
En utilisant Listen :
Listen 127.0.0.1:80
En utilisant BindAddress :
BindAddress 127.0.0.1
Ensuite, redémarrez apache avec /etc/init.d/apache restart et vous observerez qu'il écoute uniquement l'interface loopback.
Dans tous les cas, si vous n'utilisez pas toutes les fonctionnalités fournies
par Apache, vous pouvez jeter un œil aux autres serveurs web fournis dans
Debian comme dhttpd
.
La documentation
d'Apache
fournit des informations concernant les mesures de
sécurité à prendre pour les serveurs web Apache (ces mêmes informations
sont fournies dans Debian par le paquet apache-doc
).
Plus d'informations sur des restrictions supplémentaires d'Apache en mettant en place une prison chrooté sont disponibles en Environnement de chroot pour Apache, Annexe H.
L'installation par défaut d'Apache dans Debian permet aux utilisateurs de
publier du contenu dans leur répertoire $HOME/public_html
. Ce
contenu peut être récupéré à distance en utilisant une URL comme :
http://serveur_apache/~utilisateur.
Pour empêcher cela, veuillez modifier le fichier de configuration
/etc/apache/http.conf
en commentant (pour Apache 1.3) le
module suivant :
LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so
Avec Apache 2.0, il faut supprimer le fichier
/etc/apache2/mods-enabled/userdir.load
ou restreindre la
configuration par défaut en modifiant
/etc/apache2/mods-enabled/userdir.conf
.
Cependant, si le module a été lié statiquement (vous pouvez obtenir la liste des modules compilés en exécutant apache -l), vous devez ajouter la ligne suivante au fichier de configuration d'Apache :
Userdir disabled
Un attaquant peut encore faire de l'énumération d'utilisateur, car la réponse du serveur web sera un 403 Permission Denied et non un 404 Not available. Vous pouvez éviter cela en utilisant le module Rewrite.
Les fichiers de journalisation d'Apache, depuis la version 1.3.22-1, ont pour propriétaire l'utilisateur « root » et pour groupe « adm » avec les permissions 640. Ces permissions sont changées après la rotation. Un intrus qui peut accéder au système par le serveur web ne pourra pas (sans augmentation de droits) enlever d'anciennes entrées de fichiers de log.
Les fichiers d'Apache sont situés sous /var/www
. Juste après
l'installation, le fichier par défaut fournit quelques informations sur le
système (principalement qu'il s'agit d'un système Debian exécutant Apache).
Les pages web par défaut appartiennent à l'utilisateur root et au groupe root
par défaut alors que le processus Apache s'exécute avec l'utilisateur
www-data et le groupe www-data. Cela devrait rendre plus difficile aux
attaquants qui compromettent le système par le site web de le défigurer.
Vous devriez, bien sûr, remplacer les pages web par défaut (qui peuvent
fournir des informations que vous ne voulez pas donner aux visiteurs) avec les
vôtres.
Si vous désirez utiliser le service finger, demandez-vous si vous en avez
réellement besoin. Si oui, vous découvrirez que Debian fournit de nombreux
démons finger (sortie d'un apt-cache search fingerd
):
cfingerd - démon finger configurable
efingerd - autre démon finger pour UNIX capable de syntoniser précisément la sortie
ffingerd - démon finger sécurisé
fingerd - serveur distant pour informations d'utilisateurs
xfingerd - démon finger de type BSD avec la prise en charge de qmail
ffingerd
est le démon finger recommandé si vous comptez
l'utiliser pour un service public. Dans tous les cas, vous devriez, lors de la
mise en place par inetd, xinetd ou tcpserver, limiter le nombre de processus
qui seront lancés en même temps, limiter les accès au démon finger depuis
un nombre d'hôtes donné (en utilisant l'encapsulation TCP) et l'avoir en
écoute uniquement sur une interface bien définie.
chroot
est l'une des plus puissantes possibilités pour
restreindre un démon, un utilisateur ou un autre service. Imaginez simplement
une prison autour de votre cible, de laquelle votre cible ne peut s'échapper
(normalement, mais il y a encore beaucoup de conditions qui peuvent permettre
de s'échapper d'une telle prison). Si vous ne faites pas confiance à
l'utilisateur ou au service, vous pouvez créer un environnement racine
modifié pour lui. Cela peut utiliser pas mal d'espace disque car vous devez
copier tous les exécutables nécessaires, ainsi que des bibliothèques, dans
la prison. Mais alors, même si l'utilisateur fait quelque chose de
malveillant, l'étendue des dommages est limitée à la prison.
Un grand nombre de services fonctionnant en démons pourraient bénéficier de ce type d'arrangement. Les démons que vous installez dans votre distribution Debian ne seront cependant pas fournis chrootés[47] par défaut.
Exemples : serveurs de noms de domaine (comme bind
), serveurs
web (comme apache
), serveurs de courrier (comme
sendmail
) et serveurs FTP (comme wu-ftpd
). La
complexité de BIND est probablement la raison pour laquelle il a été exposé
à de nombreuses attaques ces dernières années (consultez Sécurisation de BIND, Section 5.7).
Cependant, Debian fournit des logiciels qui peuvent vous aider à mettre en
place des environnements chroot
. Consultez Créer des environnements chrooté automatiquement,
Section 5.10.1.
De toute façon, si vous exécutez un quelconque service sur votre système, vous devriez considérer de le faire fonctionner de la façon la plus sécurisée possible. Cela comprend : révoquer les droits du superutilisateur, le faire fonctionner dans un environnement restreint (comme une prison chroot) ou le remplacer par un équivalent plus sécurisé.
Cependant, soyez prévenu qu'une prison chroot
peut être cassée
si l'utilisateur fonctionnant dedans est le superutilisateur. Vous devez donc
faire fonctionner le service avec un utilisateur sans droits élevés. En
limitant son environnement, vous limitez les fichiers lisibles et exécutables
par tout le monde auxquels le service peut accéder, vous limitez donc aussi
les possibilités d'une augmentation de droits en utilisant des failles de
sécurité sur le système local. Même dans une situation où vous ne pouvez
pas être complètement certain qu'il n'y a pas de moyen pour un attaquant
intelligent de sortir de la prison d'une manière ou d'une autre. Utiliser
seulement des programmes serveur ayant une réputation de sécurité est une
bonne mesure de sécurité additionnelle. Même des trous minuscules comme des
descripteurs de fichier peuvent être utilisés par un attaquant doué pour
s'introduire dans le système. Après tout, chroot
n'a pas été
conçu pour être un outil de sécurité, mais un outil de test.
Plusieurs programmes permettent de chrooter automatiquement des serveurs et
services. Debian fournit actuellement (accepté en mai 2002)
chrootuid
de Wietse Venema dans le paquet chrootuid
,
ainsi que compartment
et makejail
. Ces programmes
peuvent être utilisés pour mettre en place un environnement restreint pour
exécuter tout programme (chrootuid
vous permet même de
l'exécuter avec un utilisateur restreint).
Certains de ces outils peuvent être utilisés pour mettre en place
l'environnement chrooté facilement. Le programme makejail
, par
exemple, peut créer et mettre à jour une prison chroot avec de petits
fichiers de configuration (il fournit des fichiers de configuration exemple
pour bind
, apache
, postgresql
et
mysql
). Il tente de deviner et d'installer dans la prison tous
les fichiers nécessaires au démon en utilisant strace
,
stat
et les dépendances du paquet Debian. De plus amples
renseignements sont disponibles à http://www.floc.net/makejail/
.
Jailer
est un outil semblable disponible à http://www.balabit.hu/downloads/jailer/
et en paquet Debian.
Vous devriez essayer d'éviter tout service réseau qui envoie et reçoit des mots de passe en texte clair par le net comme FTP/TELNET/NIS/RPC. L'auteur recommande l'utilisation de SSH à la place de TELNET et FTP pour tout le monde.
Gardez à l'esprit que la migration de TELNET vers SSH, en conservant l'utilisation d'autres protocoles à texte non chiffrés n'augmente votre sécurité en AUCUNE manière ! Le mieux serait de retirer FTP, TELNET, POP, IMAP, HTTP et de les remplacer par leurs services chiffrés respectifs. Vous devriez considérer la migration de ces services vers leurs versions SSL, ftp-ssl, telnet-ssl, pop-ssl, HTTPS, etc.
La plupart des astuces ci-dessus s'appliquent à tout système UNIX (vous les trouverez dans des documents de durcissement liés à Linux et autres UNIX).
Si possible, évitez d'utiliser NIS, le service d'informations réseau (« Network Information Service »), car il autorise le partage de mot de passe. Cela peut être fortement dangereux si votre installation est cassée.
Si vous avez besoin de partager les mots de passe entre machines, pensez à
d'autres alternatives. Par exemple, mettre en place un serveur LDAP et
configurer PAM sur votre système afin de contacter le serveur LDAP pour
l'authentification des utilisateurs. Une installation détaillée est
disponible dans le LDAP-HOWTO
(/usr/share/doc/HOWTO/en-txt/LDAP-HOWTO.txt.gz
).
Des informations supplémentaires sur la sécurité de NIS sont disponibles à
l'adresse NIS-HOWTO
(/usr/share/doc/HOWTO/fr-txt/NIS-HOWTO.txt.gz
).
FIXME (jfs) : Ajouter des renseignements sur la façon de configurer cela dans Debian.
Vous devriez désactiver RPC si vous n'en avez pas besoin.
Les appels de procédure à distance (« Remote Procedure Call » ou
RPC) sont un protocole que les programmes peuvent utiliser pour demander des
services de la part d'autres programmes liées sur différents ordinateurs. Le
service portmap
contrôle les services RPC en convertissant les
numéros de programme RPC en numéros de port du protocole DARPA ; il doit
fonctionner pour pouvoir faire des appels RPC.
Les services basés sur RPC ont eu un mauvaise historique de trous de sécurité, bien que le portmapper lui-même n'en a pas (mais il fournit des informations à un attaquant distant). Notez que certaines des attaques DDoS (déni de service distribué) exploitent RPC pour entrer dans le système et agir en tant qu'agent ou gestionnaire.
Vous n'avez besoin de RPC que si vous utilisez un service basé sur RPC. Les
services basés sur RPC les plus communs sont NFS (Network File System) et NIS
(Network Information System). Consultez la section précédente pour plus
d'informations à propos de NIS. Le File Alteration Monitor (FAM) fourni par
le paquet fam
est également un service RPC et dépend donc de
portmap
.
Les services NFS sont assez importants dans certains réseaux. Si c'est le cas
pour vous, vous aurez alors besoin de trouver un équilibre entre la sécurité
et l'utilisabilité du réseau (plus de renseignements à propos de la
sécurité NFS sont disponibles dans le NFS-HOWTO
ou
/usr/share/doc/HOWTO/fr-txt/NFS-HOWTO.txt.gz
).
La désactivation de portmap est assez simple. Il y a différentes méthodes.
La plus simple sur un système Debian 3.0 et versions supérieures est de
désinstaller le paquet portmap
. Si vous exécutez une version
plus ancienne, vous devrez désactiver le service comme expliqué dans Désactivation de services démon, Section
3.6.1, cela est dû au fait que le programme fait partie du paquet
netbase
(qui ne peut être désinstallé sans endommager le
système).
Notez que certains environnements de bureau (notamment, GNOME) utilisent des services RPC et ont besoin du portmapper pour certaines fonctionnalités de gestion de fichiers. Si c'est votre cas, vous pouvez limiter l'accès aux services RPC comme décrit ci-dessous.
Malheureusement, dans certains cas, supprimer les services RPC du système
n'est pas une option. Certains services de bureau local (notamment
fam
de SGI) sont basés sur RPC et ont donc besoin d'un portmapper
local. Cela veut dire que dans certains circonstances, des utilisateurs
installant un environnement de bureau (comme GNOME) installera également le
portmapper.
Il y a différentes façons de limiter l'accès au portmapper et aux services RPC :
bloquer l'accès aux ports utilisés par ces services avec un pare-feu local (consultez Ajouter des capacités au pare-feu, Section 5.14) ;
bloquer l'accès à ces services en utilisant l'encapsulation TCP, car le
portmapper (et certains services RPC) sont compilés avec libwrap
(consultez Utilisation de tcpwrappers,
Section 4.11). Cela veut dire que vous pouvez en bloquer l'accès par la
configuration des fichiers hosts.allow
et hosts.deny
de l'encapsulation TCP ;
depuis la version 5-5, le paquet portmap
peut être
configuré pour n'écouter que sur l'interface loopback. Pour faire cela,
modifiez /etc/default/portmap
, décommentez la ligne
suivante : #OPTIONS="-i 127.0.0.1" et redémarrez
le portmapper. Cela est suffisant pour autorisez les services locaux et en
même temps pour prévenir les systèmes distants à y accéder (consultez,
cependant, Désactiver les problèmes
d'hôtes weak-end, Section 4.17.5).
Le système d'exploitation Debian GNU/Linux possède les capacités intégrées
fournies par le noyau Linux . Si vous installez une version récente de Debian
(le noyau installé par défaut est le 2.6) vous aurez la fonctionnalité
pare-feu iptables
(netfilter) disponible[48].
Vous pouvez utiliser des règles de pare-feu comme façon de sécuriser l'accès à votre système local et, même, de limiter les connexions sortantes effectuées par celui-ci. Des règles de pare-feu peuvent être également utilisées pour protéger des processus qui ne peuvent être proprement configurés pour ne pas fournir certains services à certains réseaux, certaines adresses IP, etc.
Toutefois, cette étape est présentée en dernier dans ce manuel car il est largement préférable de ne pas dépendre exclusivement des capacités d'un pare-feu pour protéger un système donné. La sécurité dans un système est réalisée par couches, le filtrage devrait être la dernière, une fois que tous les services ont été renforcés. Vous pouvez facilement imaginer une installation dans laquelle le système est uniquement protégé par le pare-feu et que l'administrateur enlève bêtement les règles pour n'importe quelle raison (problèmes avec l'installation, exaspération, erreur humaine, etc.), ce système pourrait être grand ouvert à une attaque s'il n'y avait aucun autre renforcement dans le système pour le protéger.
D'un autre côté, avoir des règles de pare-feu sur le système local prévient également quelques mauvaises choses de se produire. Même si les services fournis sont configurés avec sécurité, un pare-feu peut protéger des erreurs de configuration ou des services fraîchement installés qui n'ont pas encore été configurés correctement. Une configuration serrée préviendra également un cheval de Troie appelant à la maison de fonctionner sauf si le code de pare-feu est enlevé. Notez qu'un intrus n'a pas besoin de l'accès superutilisateur pour installer un cheval de Troie qui pourrait être contrôlé à distance (car l'ouverture sur des ports est autorisée si le port n'est pas privilégié et si des capacités n'ont pas été supprimées).
Une configuration correcte de pare-feu serait donc une règle de refus par défaut, c'est-à-dire :
les connexions entrantes ne sont autorisés que pour des services locaux par des machines autorisées ;
les connexions sortantes ne sont autorisés que pour les services utilisés par votre système (DNS, navigation web, POP, courrier, etc.)[49] ;
la règle forward interdit tout (à moins que vous ne protégiez d'autres systèmes, voir ci-dessous) ;
toutes les autres connexions entrantes et sortantes sont interdites.
Un pare-feu Debian peut aussi être installé de façon à protéger, selon des règles de filtrage, l'accès aux systèmes derrière lui, limitant leur exposition à Internet. Un pare-feu peut être configuré pour interdire l'accès de systèmes en dehors de votre réseau local à des services internes (ports) qui ne sont pas publics. Par exemple, sur un serveur de messagerie, seul le port 25 (où le service de courrier est fourni) doit être accessible depuis l'extérieur. Un pare-feu peut être configuré pour, même s'il y a d'autres services en plus des services publics, rejeter les paquets (c'est connu sous le nom defiltrage) dirigés vers eux.
Vous pouvez même installer une machine Debian GNU/Linux en tant que pont pare-feu, c'est-à-dire un pare-feu filtrant complètement transparent pour le réseau qui est dépourvu d'adresse IP et donc ne peut pas être attaqué directement. Selon le noyau que vous avez installé, vous pouvez avoir besoin d'installer le correctif pare-feu pour pont, puis aller à 802.1d Ethernet Bridging lors de la configuration du noyau et une nouvelle option netfilter (firewalling) support. Consultez Configuration d'un pare-feu pont, Annexe D pour plus d'informations sur la façon de faire cela dans un système Debian GNU/Linux.
L'installation Debian par défaut, à la différence d'autres distributions Linux, ne fournit pas encore de moyen pour l'administrateur de mettre une configuration de pare-feu lors de l'installation, mais vous pouvez installer un certain nombre de paquets de configuration de pare-feu (consultez Paquets pare-feu, Section 5.14.3.1).
Bien sûr, la configuration du pare-feu dépend toujours du système et du
réseau. Un administrateur doit connaître auparavant quelle est la
disposition du réseau, les systèmes qu'il désire protéger et si d'autres
considérations réseau (comme le NAT ou le routage) doivent être prises en
compte ou non. Soyez prudent quand vous configurez votre pare-feu, comme le
dit Laurence J. Lane dans son paquet iptables
:
Les outils peuvent facilement être mal utilisés, entraînant d'énormes quantités de maux en paralysant complètement l'accès au réseau pour un système d'ordinateur. Il n'est pas très inhabituel pour un administrateur système de se bloquer lui-même en dehors du système situé à quelques centaines ou milliers de kilomètres de là. Il est même possible de se bloquer en dehors d'un ordinateur dont le clavier est sous ses doigts. Veuillez s'il vous plaît l'utiliser avec précaution.
Rappelez-vous de cela : installer simplement le paquet
iptables
(ou l'ancien code de pare-feu) ne vous fournit pas de
protection, mais seulement les logiciels. Pour avoir un pare-feu, vous devez
le configurer !
Si vous ne savez pas comment configurer les règles de votre pare-feu
manuellement, veuillez consulter le Packet Filtering HOWTO et le
NAT HOWTO fournis par iptables
pour une lecture hors
ligne à /usr/share/doc/iptables/html/
.
Si vous ne connaissez pas grand chose sur les pare-feu, vous devriez commencer
par lire le Firewalling and Proxy
Server HOWTO
, installez le paquet doc-linux-text
si
vous voulez le lire hors ligne. Si vous désirez poser des questions ou
demander de l'aide pour configurer un pare-feu, vous pouvez utiliser la liste
de diffusion debian-firewall, consultez http://lists.debian.org/debian-firewall
.
Consultez également Être conscient des
problèmes de sécurité, Section 2.2 pour plus de pointeurs (généraux)
sur les pare-feu. Un autre bon tutoriel d'iptables est http://iptables-tutorial.frozentux.net/iptables-tutorial.html
.
Configurer manuellement un pare-feu peut être compliqué pour un administrateur débutant (et même parfois pour un expert). Cependant, la communauté des logiciels libres a créé un certain nombre d'outils pouvant être utilisés pour configurer facilement un pare-feu local. Soyez prévenu que certains de ces outils sont plus orientés vers de la protection locale seulement (également connu sous le nom de pare-feu personnel) et d'autres sont plus versatiles et peuvent être utilisés pour configurer des règles complexes pour protéger des réseaux entiers.
Plusieurs logiciels peuvent être utilisés pour configurer des règles de pare-feu dans un système Debian.
Pour les systèmes de bureau :
firestarter
, une application GNOME orientée vers les utilisateurs
finaux et incluant un assistant utile pour définir rapidement des règles de
pare-feu. L'application inclut une interface utilisateur pour pouvoir
surveiller quand une règle de pare-feu bloque le trafic ;
guarddog
, un paquet de configuration de pare-feu basé sur KDE
orienté à la fois vers les utilisateurs novices et avancés ;
knetfilter
, une interface graphique KDE pour gérer un pare-feu et
des règles NAT pour iptables (alternative ou concurrent à l'outil guarddog
bien que légèrement plus orienté vers les utilisateurs avancés) ;
fireflier, un outil interactif pour créer des règles iptables à partir du
trafic vu sur le système et les applications. Il possède un modèle client
serveur donc vous devez installer à la fois le serveur
(fireflier-server
) et un des clients disponibles, avec un client
disponible pour chaque environnement de bureau :
fireflier-client-gtk
(client GTK+),
fireflier-client-kde
(client KDE) et
fireflier-client-qt
(client QT).
Pour les systèmes serveurs (sans interface graphique) :
fwbuilder
, une interface graphique orientée objet qui inclut des
compilateurs de règles pour diverses plates-formes de pare-feu incluant
netfilter de Linux, pf de BSD (utilisé dans OpenBSD, NetBSD, FreeBSD et
Mac OS X) ainsi que des listes d'accès du routeur. La
fonctionnalité de fwbuilder complète est également disponible depuis la
ligne de commande ;
shorewall
, un outil de configuration de pare-feu qui fournit une
prise en charge IPsec ainsi qu'une prise en charge limitée pour le
dimensionnement du trafic (« traffic shaping ») et la définition
des règles du pare-feu. La configuration est effectuée par un simple jeu de
fichiers qui sont utilisés pour générer les règles iptables ;
bastille
, l'application de durcissement est décrit dans Sécurisation automatique d'un système
Debian, Chapitre 6. L'une des étapes de durcissement que l'administrateur
peut configurer est une définition du trafic autorisé et interdit qui est
utilisée pour générer un ensemble de règles de pare-feu que le système
exécutera au démarrage.
De nombreuses autres interfaces à iptables sont disponibles dans Debian ;
une liste exhaustive de comparaison des différents paquets dans Debian est
tenue à jour sur la page du
wiki Debian sur les pare-feu
.
Remarquez que certains des paquets cités ci-dessus introduiront probablement des scripts de pare-feu à exécuter lors de l'amorçage du système. Testez-les de manière exhaustive avant de redémarrer le système ou vous pourriez vous retrouver bloqué en dehors de la machine. Si vous mélangez différents paquets de pare-feu, vous pouvez obtenir des effets indésirables. Habituellement, le script de pare-feu qui s'exécute en dernier sera celui qui configurera le système (qui peut ne pas être ce que vous voulez). Consultez la documentation du paquet et utilisez l'un d'entre eux pour ces configurations.
Comme mentionné précédemment, certains programmes comme
firestarter
, guarddog
ou knetfilter
sont
des interfaces graphiques pour l'administration qui utilisent soit GNOME, soit
KDE (les deux derniers). Ces applications sont plus orientées utilisateur
(c'est-à-dire utilisation « familiale ») tandis que certains des
autres paquets de la liste sont plus orientés administrateur. Certains des
programmes mentionnés auparavant (comme bastille
) sont ciblés
sur la mise en place de règles de pare-feu qui protègent l'hôte sur lequel
ils fonctionnent, mais ils ne sont pas nécessairement conçus pour mettre en
place des règles de pare-feu pour des hôtes de pare-feu qui protègent un
réseau (comme shorewall
ou fwbuilder
).
Il existe encore un autre type d'application de pare-feu : les serveurs
mandataires (proxy) applicatifs. Si vous cherchez à mettre en place
un tel pare-feu de niveau d'entreprise qui effectue du filtrage de paquets et
fournit un certain nombre de serveurs mandataires transparents qui peuvent
faire une analyse fine du trafic, vous devriez considérer l'utilisation de
zorp
, qui fournit cela dans un seul programme. Vous pouvez
également mettre en place ce type de pare-feu manuellement en utilisant les
serveurs mandataires disponibles dans Debian pour différents services comme
pour le DNS en utilisant bind
(correctement configuré),
dnsmasq
, pdnsd
ou totd
pour le FTP en
utilisant frox
ou ftp-proxy
, pour X11 en utilisant
xfwp
, pour IMAP en utilisant imapproxy
, pour le
courrier en utilisant smtpd
, ou pour POP3 en utilisant
p3scan
. Pour d'autres protocoles, vous devriez soit utiliser un
serveur mandataire TCP générique comme simpleproxy
, soit un
serveur mandataire SOCKS comme dante-server
, tsocks
ou socks4-server
. Vous devrez également typiquement utiliser un
système de cache web (comme squid
) et un système de filtrage web
(comme squidguard
ou dansguardian
).
Une autre possibilité est de configurer manuellement vos règles de pare-feu
par un script init.d qui exécutera toutes les commandes iptables
.
Suivez les étapes ci-dessous.
Consultez le script ci-dessous et adaptez-le à vos besoins.
Testez le script et vérifiez les messages du journal système pour voir le trafic qui est rejeté. Si vous testez depuis le réseau, vous voudrez soit exécuter le script shell en exemple qui enlève le pare-feu (si vous ne tapez rien pendant 20 secondes), soit commenter les définitions de règle default deny (-P INPUT DROP et -P OUTPUT DROP) et vérifier que le système ne rejette pas de trafic légitime.
Déplacez le script dans /etc/init.d/parefeu
.
Configurez le système pour exécuter le script avant que le réseau ne soit configuré :
#update-rc.d parefeu start 40 S . stop 89 0 6 .
Voici l'exemple de script de pare-feu :
#!/bin/sh # Exemple de configuration de pare-feu. # # Mises en garde # - Cette configuration s'applique à toutes les interfaces réseau. # Si vous voulez ne restreindre cela qu'à une interface donnée, # utilisez « -i INTERFACE » dans les appels iptables ; # - L'accès à distance pour les services TCP/UDP est accordé à tout # hôte, vous voudrez probablement restreindre cela en utilisant # « --source ». # # chkconfig : 2345 9 91 # description : activer ou désactiver le pare-feu au démarrage # # Vous pouvez tester ce script avant de l'appliquer avec l'extrait # de script shell suivant, si vous ne tapez rien pendant # 20 secondes, les règles de pare-feu seront effacées. #--------------------------------------------------------------- # while true; do test=""; read -t 20 -p "OK ? " test ; \ # [ -z "$test" ] && /etc/init.d/parefeu clear ; done #--------------------------------------------------------------- PATH=/bin:/sbin:/usr/bin:/usr/sbin # Services que le système offrira au réseau TCP_SERVICES="22" # seulement SSH UDP_SERVICES="" # Services que le système utilisera du réseau REMOTE_TCP_SERVICES="80" # navigation web REMOTE_UDP_SERVICES="53" # DNS # Réseau qui sera utilisé pour la gestion à distance # (si non défini, aucune règle ne sera mise en place) # NETWORK_MGMT=192.168.0.0/24 # Port utilisé pour le service SSH, à définir si vous avez configuré # une gestion de réseau mais l'avez enlevé de TCP_SERVICES # SSH_PORT="22" if ! [ -x /sbin/iptables ]; then exit 0 fi fw_start () { # Trafic d'entrée : /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Services if [ -n "$TCP_SERVICES" ] ; then for PORT in $TCP_SERVICES; do /sbin/iptables -A INPUT -p tcp --dport ${PORT} -j ACCEPT done fi if [ -n "$UDP_SERVICES" ] ; then for PORT in $UDP_SERVICES; do /sbin/iptables -A INPUT -p udp --dport ${PORT} -j ACCEPT done fi # Gestion à distance if [ -n "$NETWORK_MGMT" ] ; then /sbin/iptables -A INPUT -p tcp --src ${NETWORK_MGMT} --dport ${SSH_PORT} -j ACCEPT else /sbin/iptables -A INPUT -p tcp --dport ${SSH_PORT} -j ACCEPT fi # Test à distance /sbin/iptables -A INPUT -p icmp -j ACCEPT /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -P INPUT DROP /sbin/iptables -A INPUT -j LOG # Sortie : /sbin/iptables -A OUTPUT -j ACCEPT -o lo /sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # ICMP est permis : /sbin/iptables -A OUTPUT -p icmp -j ACCEPT # Ainsi que les mises à jour de sécurité : # Remarque : vous pouvez indiquer en dur l'adresse IP ici afin de prévenir une # usurpation DNS et configurer les règles même si le DNS ne fonctionne pas mais # dans ce cas vous ne « verrez » pas les modifications d'IP pour ce service : /sbin/iptables -A OUTPUT -p tcp -d security.debian.org --dport 80 -j ACCEPT # Ainsi que pour tous les services définis : if [ -n "$REMOTE_TCP_SERVICES" ] ; then for PORT in $REMOTE_TCP_SERVICES; do /sbin/iptables -A OUTPUT -p tcp --dport ${PORT} -j ACCEPT done fi if [ -n "$REMOTE_UDP_SERVICES" ] ; then for PORT in $REMOTE_UDP_SERVICES; do /sbin/iptables -A OUTPUT -p udp --dport ${PORT} -j ACCEPT done fi # Toutes les autres connexions sont enregistrées dans syslog /sbin/iptables -A OUTPUT -j LOG /sbin/iptables -A OUTPUT -j REJECT /sbin/iptables -P OUTPUT DROP # Autres protections réseau # (certaines ne fonctionneront que pour certaines versions de noyau) echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 0 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo 1 > /proc/sys/net/ipv4/conf/all/log_martians echo 1 > /proc/sys/net/ipv4/ip_always_defrag echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route } fw_stop () { /sbin/iptables -F /sbin/iptables -t nat -F /sbin/iptables -t mangle -F /sbin/iptables -P INPUT DROP /sbin/iptables -P FORWARD DROP /sbin/iptables -P OUTPUT ACCEPT } fw_clear () { /sbin/iptables -F /sbin/iptables -t nat -F /sbin/iptables -t mangle -F /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P FORWARD ACCEPT /sbin/iptables -P OUTPUT ACCEPT } case "$1" in start|restart) echo -n "Démarrage du pare-feu…" fw_stop fw_start echo "done." ;; stop) echo -n "Arrêt du pare-feu…" fw_stop echo "done." ;; clear) echo -n "Effacement des règles de pare-feu…" fw_clear echo "done." ;; *) echo "Utilisation : $0 {start|stop|restart|clear}" exit 1 ;; esac exit 0
Au lieu d'intégrer toutes les règles iptables dans un script init.d, vous
pouvez utiliser le programme iptables-restore
pour restaurer les
règles sauvées avec iptables-save
. Pour faire cela, vous devez
configurer les règles et sauver le jeu de règles dans un endroit statique
(comme /etc/default/firewall
).
Vous pouvez également utiliser la configuration du réseau dans
/etc/network/interfaces
pour mettre en place les règles de
pare-feu. Pour cela, vous devez :
créer le jeu de règles de pare-feu à appliquer quand l'interface sera active ;
sauver le jeu de règles avec iptables-save
dans un fichier de
/etc
, par exemple /etc/iptables.up.rules
;
configurer /etc/network/interfaces
pour utiliser le jeu de règles
configurées :
iface eth0 inet static address x.x.x.x [… configuration de l'interface …] pre-up iptables-restore < /etc/iptables.up.rules
Optionnellement, vous pouvez mettre en place un jeu de règles à appliquer
quand l'interface est inactivée en créant un jeu de règles, en le
sauvant dans /etc/iptables.down.rules
et en ajoutant la directive
suivante à la configuration de l'interface :
post-down iptables-restore < /etc/iptables.down.rules
Pour des scripts de configuration de pare-feu plus avancés avec
ifupdown
, vous pouvez utiliser les accroches (hooks)
disponibles pour chaque interface dans les répertoires *.d/
appelés avec run-parts
(consultez run-parts(8)
).
Tester la configuration de pare-feu est aussi facile et aussi dangereux que d'exécuter simplement le script de pare-feu (ou d'activer la configuration que vous avez définie dans l'application de configuration de pare-feu). Cependant, si vous n'êtes pas assez prudent et que vous configurez le pare-feu à distance (comme à travers une connexion SSH), vous pourriez vous enfermer dehors.
Plusieurs moyens permettent d'empêcher cela. L'un est d'exécuter un script dans un terminal séparé qui va enlever la configuration de pare-feu si vous ne faites pas d'entrée clavier. Un exemple de cela est :
$ while true; do test=""; read -t 20 -p "OK? " test ; \ [ -z "$test" ] && /etc/init.d/firewall clear ; done
Un autre moyen est d'introduire une porte dérobée dans le système par un
mécanisme alternatif qui vous permet soit d'enlever le système de pare-feu,
soit de percer un trou dedans si quelque chose déraille. Pour cela, vous
pouvez utiliser knockd
et le configurer pour qu'une tentative de
connexion sur un certain port enlève le pare-feu (ou ajoute une règle
temporaire). Bien que les paquets soient rejetés par le pare-feu, comme
knockd
se lie à l'interface et les voit, vous pourrez
contourner le problème.
Tester un pare-feu qui protège un réseau interne est un problème différent, vous voudrez étudier certains des outils utilisés pour le test de failles à distance (consultez Outils d'évaluation des vulnérabilités à distance, Section 8.1) pour sonder le réseau depuis l'extérieur (ou dans toute autre direction) pour tester l'efficacité de la configuration du pare-feu.
[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ suivant ]
Securing Debian Manual
Version: 3.13, Sun, 08 Apr 2012 02:48:09 +0000jfs@debian.org