[ précédent ] [ Table des matières ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 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).
Les configurer correctement ainsi seuls les utilisateurs habilités pourront les utiliser.
Restreindre les services pour qu'ils 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 la rustine vserver pour linux (pour 2.4.16) peut être utilisée 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éta-démon
xinetd
, inclut une option bind pour faire cela. Voir
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 s'appuyant sur une utilisation définie.
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 votre système.
Encourager tous les utilisateurs de votre 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 root et
préférer l'utilisation de méthodes alternatives pour devenir root tel
su ou sudo. Enfin, le fichier
sshd_config
, dans /etc/ssh
, devrait être modifié
ainsi 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 avez 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 root. Si quelqu'un veut devenir root via ssh, deux logins sont maintenant nécessaires et le mot de passe root ne peut être attaqué par la force brute via 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 via 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 via 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
clés 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 (voir la page de
manuel sshd_config(5)
).
Protocole 2
Désactiver le protocole version 1, car il a des défauts de conception qui
facilite le crack de mots de passe. Pour plus d'informations, lisez 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, il y a 3 démons ssh 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 des rumeurs qu'il
y aurait même un portage pour Windows). Ssh2 a beaucoup d'avantages par
rapport à ssh1 excepté qu'il est diffusé sous une licence non libre. OpenSSH
est un démon ssh complètement libre, qui supporte à 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
le support 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, voir 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 des environnements chroot pour SSH.
Si vous utilisez un client SSH contre (?) le serveur SSH, vous devez vous
assurer qu'ils supportent les mêmes protocoles qui sont en application sur le
serveur. Par exemple, si vous utilisez le paquet mindterm
, il ne
supporte 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
. Cependant, pour
restreindre l'accès scp
, vous devez :
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 ne pas donner de shells valides aux utilisateurs qui ne sont pas autorisés à faire des transferts sécurités. Cependant, les shells fournis devraient être des programmes qui justifieraient la connexion au serveur ssh par eux-même, comme des programmes de menus (ala BBS). Sinon, l'option précédente est préférée.
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 votre 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
. Voir le Guide
d'utilisateur de Squid
pour plus d'informations à propos des règles
ACL. Veuillez noter que Debian fournit une configuration minimale pour Squi
qui empêche tout, à l'exception de la connexion de localhost au
serveur mandataire (qui fonctionnera sur le port par défaut 3128). Vous devrez
personnaliser votre fichier/etc/squid/squid.conf
comme nécessaire.
La configuration recommandée minimum (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 # unregistered ports 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 VOTRE (VOS) PROPRE(S) RÊGLES ICI POUR PERMETTRE L'ACCÈS # DEPUIS VOS CLIENTS # http_access allow localhost # En enfin, interdit tout autre accès à ce mandataire http_access deny all # Par défaut : # icp_access deny all # # Permet les requêtes ICP depuis 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/cache correctement représente seulement une partie de la sécurisation de votre site. Une autre tâche nécessaire consiste dans l'analyse des logs de Squid pour assurer que tout fonctionne comme il se doit. Il y a quelques paquets dans Debian GNU/Linux qui peuvent aider l'administrateur dans cette tâche. Les paquets suivant sont disponibles dans Debian 3.0 et les versions ultérieures :
calamaris
- Analyseur de log pour fichiers de Squid ou Oops proxy.
modlogan
- Un analyseur modulaire de fichier logs.
squidtaild
- Programme de surveillance des logs 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 Chapitre 9
.
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 votre système comme s'il avait un shell. Vous pouvez ajouter la
ligne suivante dans votre proftpd.conf
dans la section global 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 Dos 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 (ceci 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émentatations 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 en anonyme à 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 valides. Plus d'informations et le correctif sont
disponibles à : Correctifs ProFTPD
.
Ce correctif a été également indiqué pour Debian, voir le bogue 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. Ceci 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 votre machine. Ceci autorise tout client X à se connecter à votre système. Pour une sécurité légèrement meilleure, vous pouvez utiliser la commande xhost +hostname à la place, ce qui permet d'autoriser uniquement les accès depuis des hôtes spécifiques.
Une solution encore meilleure serait d'utiliser un tunnel ssh pour X et
d'encrypter toute la session. Ceci 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
pour
mettre en place le pseudo-affichage 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-le du port 6000 en tapant simplement :
$ startx -- -nolisten tcp
Ceci est le comportement par défaut dans XFreenb 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 d'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 [36].
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 d'infos 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 voulez seulement avoir un gestionnaire d'affichage installé pour une utilisation locale (en ayant un joli login graphique, c'est tout), 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 votre 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 la 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 votre 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 votre
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 à votre /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/hôtes qui ne sont pas autorisés à imprimer (le démon lpr
ne peut être limité pour écouter seulement 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
spécifier l'interface sur laquelle se lier (cependant d'une manière un peu
bizarre)
Si vous utilisez une imprimante sur votre 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 fournit 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 via le protocole HTTP. Ceci 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 cryptage. 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 la 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 la Debian.
Si votre serveur n'est pas un système d'envoi de mail, vous n'avez pas réellement besoin d'un démon mail écoutant les connexions entrantes, mais vous pourriez vouloir que votre courrier local soit distribué pour, par exemple, recevoir le courrier pour l'utilisateur root 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.
Voir Désactivation de services démon,
Section 3.6.1 sur comment 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. Ceci est courant quand vous avez à 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. Tout comme loguer tout sur chaque système individuel peut être centralisé en utilisant un serveur syslog central, les courriers peuvent être envoyés à un serveur de courriers central.
Un tel système relai-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 que, si le
MTA est configuré pour ne délivrer que des messages locaux, il ne va 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 vous aurez exim qui écoutera sur la socket 127.0.0.1:25 uniquement. 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 du démon mail par un tcp wrapper ou l'ajout de règles 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 un tcp wrapper pour que les connexions entrantes
soit 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é contre votre démon de courrier, si vous mettez en place
correctement le logging pour n'importe laquelle des méthodes décrites plus
haut.
En tout cas, pour rejeter les tentatives de relai de courrier au niveau SMTP,
vous pouvez changer /etc/exim/exim.conf
pour inclure :
receiver_verify = true
Même si votre serveur de courrier ne relaiera pas le message, ce genre de
configuration est nécessaire au testeur de relai à http://www.abuse.net/relay.html
pour déterminer que votre serveur ne peut pas faire de relai.
Si vous voulez une configuration relai-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 [37] 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[38] 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 shell car les utilisateurs peuvent être capable de récupérer tout fichier par celui-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 supporte, uw-imapd-ssl
) peut être configuré pour
« chrooter » les répertoires de courrier des utilisateurs, mais ceci
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 valides soient créés sur le système local (ce qui
donnerait également un accès shell), 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/réception du courrier est le plus courant des protocoles en texte
clair. Si vous utilisez soit POP3 ou IMAP pour récupérer votre 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 shell sur la machine qui sert de serveur POP ou
IMAP. Voici un fetchmailrc
simple décrivant cela :
poll my-imap-mailserver.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 my-imap-mailserver.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 connections au port local
1236 vers le port IMAP du serveur de mail, mais crypté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 crypté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 spécifié (-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 (voir 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é (voir Changer l'utilisateur de BIND, Section 5.7.2) et le chrooter (voir Chrooter le serveur de domaine, Section 5.7.3).
Vous devriez restreindre certaines informations données par le serveur DNS aux
clients extérieurs pour qu'il ne puisse pas ê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
, lisez en
plus à ce sujet dans /usr/share/doc/bind/html/index.html
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 à l'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 tenter une attaque d'exploit de débordement de tampon) le serveur DNS. Vous pouvez même le mettre uniquement en écoute sur l'adresse 127.0.0.1 si vous ne désirez pas offrir le service à quelqu'un d'autre qu'à 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 ceci 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 (s'il vous plait) vérifier le système de suivi des bogues (BTS),
spécifiquement Bug #94760
(regarding ACLs on zone transfers)
. 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 autre que root exécute BIND, alors BIND ne peut pas détecter
de nouvelles interfaces automatiquement, par exemple, quand vous insérez une
carte PCMCIA dans votre portable. Consultez le fichier
README.Debian
dans votre répertoire de documentation named
(/usr/share/doc/bind/README.Debian
) pour plus d'information sur ce
problème. Il y a eu récemment de nombreux problèmes de sécurité concernant
BIND, donc le changement d'utilisateur est utile quand il est 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.
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 root). Dans cette 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 éditez, à l'aide de votre éditeur favori,
/etc/init.d/bind
et changez les lignes commençant par
start-stop-daemon --start
en[39]
start-stop-daemon --start --quiet --exec /usr/sbin/named -- -g named -u named
Changez 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 root, changez la ligne reload en commentant :
reload) /usr/sbin/ndc reload
Et changez cela en
reload) $0 stop sleep 1 $0 start
Note : Selon votre version de Debian, vous pouvez devoir changer la ligne restart également. Ceci a été corrigé dans la version 1:8.3.1-2 du bind de Debian.
Tout ce dont vous avez besoin est de redémarrer bind à l'aide de « /etc/init.d/bind restart » puis rechercher dans votre syslog 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 votre named ne s'exécute plus en tant que
root. Si vous voulez lire plus d'informations sur pourquoi BIND ne fonctionne
pas en tant qu'utilisateur non root sur les systèmes Debian, veuillez vérifier
le système de suivi des bogues concernant Bind, spécifiquement Bug #50013: bind should not run as
root
et Bug #132582:
Default install is potentially insecure
, Bug #53550
, Bug #52745
et Bug #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 (voir Paranoïa généralisée du suid et du chroot,
Section 5.10) autour de votre démon. Il y a un moyen facile de faire
cela : l'option -t (voyez la page de manuel
named(8)
ou la page 100 de ladocumentation 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 librairies 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 inscriptible par l'utilisateur named var/log/named - si vous configurez le log vers un fichier, doit être inscriptible par l'utilisateur named dev/log - syslogd devrait écouter ici si named est configuré pour loguer en l'utilisant
Pour que votre 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. Tenez compte qu'il nécessite seulement un accès en lecture seule aux fichiers de zone, à moins qu'il ne soit un serveur de nom secondaire ou serveur cache. Si c'est votre cas vous aurez à donner les permissions en lecture-é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 (i.e. pas juste l'option -t) pour Bind 8.2.3 dans la Debian (potato), assurez-vous qu'elle contient les fichiers suivants :
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.1.3.so lib/libc-2.1.3.so lib/ld-linux.so.2 - lié symboliquement à ld-2.1.3.so lib/libc.so.6 - lié symboliquement à libc-2.1.3.so sbin/ldconfig - pourra être effacé après la configuration du chroot sbin/named-xfer - si vous faites des transferts de nom var/run/
Et modifiez également syslogd
écoutant dans $CHROOT/dev/log pour
que le serveur de nom puisse écrire des entrées syslog dans le log du système
local.
Si vous voulez é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 faidrait
faire quelque chose comme :
$ apt-get source bind # apt-get build-dep bind $ cd bind-8.2.5-2 (éditer src/port/linux/Makefile pour que CFLAGS inclut 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[40] 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.
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 tel dhttpd
.
La Documentation
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é dans 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://your_apache_server/~user.
Si vous ne voulez pas permettre cela, vous devez changer le fichier de
configuration /etc/apache/http.conf
en commentant :
LoadModule userdir_module /usr/lib/apache/1.3/mod_userdir.so
Mais, si le module a été lié statiquement (vous pouvez vérifier cela en exécutant apache -l), vous devez ajouter la ligne suivante à la place :
Userdir disabled
Remarque : Le mot-clé disabled n'est disponible que dans Apache 1.3 et supérieur. Si vous utilisez d'anciennes versions d'Apache, vous devez changer le fichier de configuration et ajouter :
<Directory /home/*/public_html> AllowOverride None Order deny,allow Deny from all </Directory>
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.
Les fichiers de log 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 escalade de privilège) 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écutent avec l'utilisateur
www-data et le groupe www-data. Ceci devrait plus difficile aux attaquants qui
compromettent le système par le site web de défigurer le site. 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 - Un démon finger configurable.
efingerd - Un autre démon finger pour Unix capable syntoniser précisément votre sortie.
ffingerd - Un démon finger sécurisé.
fingerd - Un serveur distant pour informations d'utilisateurs.
xfingerd - Démon finger de type BSD avec le support qmail.
ffingerd
est le démon finger recommandé si vous comptez l'utiliser
pour un service public. Dans tous les cas, vous êtes encouragé, lors de la
mise en place via 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 donné d'hôtes (en utilisant tcp wrappers) et de 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 fait pas confiance à l'utilisateur ou au
service, vous pouvez créer un environnement racine modifié (« root »)
pour lui. Ceci 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 malfaisant, l'étendu
des dommage est limitée à la prison.
Un grand nombre de services fonctionnant comme 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[41] par défaut.
Ceci inclut : serveurs de domaines (comme bind
), serveurs web
(comme apache
), serveurs de courrier (comme sendmail
)
et serveurs ftp (comme wu-ftpd
). Il est probablement juste de
dire que la complexité de BIND est la raison pour laquelle il a été exposé à de
nombreuses attaques ces dernières années (voir Sécurisation de BIND, Section 5.7).
Cependant, Debian fournit des logiciels qui peuvent vous aider à mettre en
place des environnements chroot
. Voir 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. Ceci inclut : révoquer les privilèges root, le faire fonctionner dans un environnement restreint (comme un 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 super-utilisateur. Vous devez donc
faire fonctionner le service avec un utilisateur non privilégié. En limitant
son environnement, vous limitez les fichiers lisibles et exécutables par tout
le monde que le service peut accéder, vous limitez donc aussi les possibilités
d'une escalade de privilège par l'utilisation de failles de sécurité du système
local. Même dans une situation où vous ne pouvez pas être complèrement 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.
Il existe plusieurs programmes pour 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 requis par le démon en utilisant strace
,
stat
et les dépendances du paquet Debian. Plus d'informations à
http://www.floc.net/makejail/
.
Jailer
est un outil semblable qui peut être récupéré depuis
http://www.balabit.hu/downloads/jailer/
et il est également disponible en tant que 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 crypté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).
Vous ne devriez pas utiliser NIS, le Service d'Information Réseau (Network Information Service), si possible car il autorise le partage de mot de passe. Ceci 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
).
Vous pouvez lire plus d'informations supplémentaires sur la sécurité de NIS à
l'adresse suivante NIS-HOWTO
(/usr/share/doc/HOWTO/en-txt/NIS-HOWTO.txt.gz
).
FIXME (jfs) : Ajouter des infos sur comment configurer cela dans la Debian
Vous devriez désactiver RPC si vous n'en avez pas besoin.
Les appels de procédure à distance (« Remote Procedure Call » ou RPC)
est 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é) utilisent des exploits RPC pour entrer dans le système et agir en tant qu'un tel agent/gestionnaire.
Vous n'avez besoin de RPC que si vous utiliser un service basé sur RPC. Les
services basés sur RPC les plus communs sont NFS (Network File System) et NIS
(Network Information System). Voir 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é de votre réseau. (Vous pouvez en lire plus à propos de la
sécurité NFS dans le NFS-HOWTO
(/usr/share/doc/HOWTO/en-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 (voir Ajouter des capacités au pare-feu, Section 5.14) ;
bloquer l'accès à ces services en utilisant les tcp wrappers, car le portmapper
(et certains services RPC) sont compilés avec libwrap
(voir 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
du tcp wrappers.
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 (voir, 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. Cela signifie que si vous installez un système
Potato (Debian version 2.2, le noyau par défaut est le 2.2) vous
aurez la fonctionnalité pare-feu ipchains
disponible dans le
noyau, vous devez installer le paquet ipchains
qui devrait déjà
être installé (de part sa priorité). Si vous installez un système Debian
version 3.0 (ou version 3.1) (le noyau par défaut est le 2.4),
vous aurez la fonctionnalité pare-feu iptables
(neftfilter)
disponible. La principale différence entre ipchains
et
iptables
est que ce dernier est basé sur une inspection des
paquets en fonction de l'état (stateful packet inspection) qui fournit des
configurations de filtrage plus sécurisées (et plus faciles à construire).
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-feux 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 de beaucoup préférable de ne pas dépendre exclusivement des capacités d'un pare-feu de façon à protéger un système donné. La sécurité dans un système est faites de 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, ...), 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 super-utilisateur 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.)[42] ;
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 (ceci 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-feux, 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. Voir 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 (voir 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 n'en connaissez pas beaucoup 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, voir 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.
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.
Il existe plusieurs logiciels qui peuvent être utilisés pour configurer des règles de pare-feu dans un système Debian :
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.
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 un
support pour IPsec ainsi qu'un support limité 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.
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/concurrent à l'outil guarddog bien
que légèrement plus orienté vers les utilisateurs avancés).
bastille
, l'application de durcissement est décrit dans Durcissement automatique de systèmes 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.
mason
, une application qui peut suggérer des règles de pare-feu
basées sur le trafic réseau que votre système « voit ».
ferm
,
lokkit
ou gnome-lokkit
.
ipac-ng
, aide à configurer non pas des règles de pare-feu
traditionnel, mais des règles de classement du trafic réseau.
filtergen
fiaif
hlfl
kmyfirewall
netscript-2.4
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 simulez). 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
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 serveur 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
ou 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 :
Lisez le script ci-dessous et adaptez-le à vos besoins.
Testez le script et vérifiez les messages de syslog pour voir quel trafic est rejeté. Si vous testez depuis le réseau, vous voudrez soit exécuter l'exemple de shell 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/myfirewall
Configurez le système pour exécuter le script avant que le réseau ne soit configuré :
#update-rc.d myfirewall start 40 S . stop 89 0 6 .
Voici l'exemple de script de pare-feu :
#!/bin/sh # Exemple de configuration de pare-feu # # Défauts : # - 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: Active/Désactive le pare-feu au démarrage # # Vous pouvez tester ce script avant de l'appliquer avec l'extrait de # 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/myfirewall clear ; done #--------------------------------------------------------------- PATH=/bin:/sbin:/usr/bin:/usr/sbin # Services que le systèmes offrira au réseau TCP_SERVICES="22" # ssh seulement 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 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é /sbin/iptables -A OUTPUT -p tcp -d security.debian.org --dport 80 -j ACCEPT # Ainsi que pour tous les services que nous avons 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 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 "Starting firewall.." fw_stop fw_start echo "done." ;; stop) echo -n "Stopping firewall.." fw_stop echo "done." ;; clear) echo -n "Clearing firewall rules.." fw_clear echo "done." ;; *) echo "Usage: $0 {start|stop|restart|clear}" exit 1 ;; esac exit 0
Vous pouvez également utiliser la configuration du réseau dans
/etc/network/interfaces
pour mettre en place vos règles de
pare-feu. Pour cela, vous devez :
créer votre jeu de règles de pare-feu à appliquer quand l'interface sera active,
sauver votre 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 (voir run-parts(8)
).
NOTE : Cette information ne s'applique qu'à iptables de Woody. Les versions ultérieures à la version 1.2.7-8 n'ont plus le script init.d décrit ici. Les utilisateurs des versions 3.1 et ultérieures de Debian devraient soit mettre en place les règles de pare-feu manuellement, soit utiliser l'un des programmes de génération de pare-feu décrits précédemment.
Si vous utilisez Debian 3.0, vous remarquerez que le paquet
iptables
est déjà installé. Il s'agit du support pour
l'implémentation de netfilter des noyaux 2.4.4 et plus. Comme, juste après
l'installation, le système ne peut pas connaître de règles de pare-feu
(toute règle de pare-feu est trop dépendante du système), vous devez activer
iptables. Cependant, les scripts ont été configurés pour que l'administrateur
puisse configurer des règles de pare-feu, puis que les scripts d'initialisation
les apprennent et les utilisent toujours pour la configuration du
pare-feu.
Pour faire cela, vous devez :
configurer le paquet pour qu'il se lance avec le système. Sur les versions
plus récentes (depuis 1.2.6a-1), cela est demandé quand le paquet est installé.
Vous pouvez le configurer par la suite avec dpkg-reconfigure -plow
iptables. Note : sur les systèmes plus anciens, cela
était fait par l'édition du fichier /etc/default/iptables
pour que
la variable enable_iptables_initd soit positionnée à
true.
créer une configuration de pare-feu en utilisant iptables, vous pouvez utiliser
la ligne de commande (voir iptables(8)
) ou certains des outils
fournis par les paquets de pare-feu de Debian (voir Paquets pare-feu, Section 5.14.3.1). Vous devez
créer un jeu de règles de pare-feu à utiliser quand le pare-feu est dans l'état
actif et un autre à utiliser quand le pare-feu est dans l'état
inactif (celles-ci peuvent être simplement des règles vides).
sauver les règles que vous avez créé en utilisant /etc/init.d/iptables save active et /etc/init.d/iptables save inactive en exécutant ces scripts avec les règles de pare-feu que vous voulez activées.
Une fois que ceci est fait, votre configuration de pare-feu est sauvée dans le
répertoire /var/lib/iptables/
et elle sera exécutée lors de
l'amorçage du système (ou lors de l'exécution du script d'initd avec les
paramètres start et stop). Veuillez noter que les
configurations Debian par défaut lance le code de pare-feu dans les niveaux
d'exécution multi-utilisateurs (2 à 5) assez tôt (10). Il est stoppé dans le
mode utilisateur seul (1), changez cela si cela ne correspond pas à vos règles
locales.
Veuillez lire les commentaires insérés dans le fichier de configuration
/etc/default/iptables
pour plus d'informations concernant les
problèmes relatifs à ce paquet.
Tester votre configuration de pare-feu est aussi facile et aussi dangereux que d'exécuter simplement votre script de pare-feu (ou d'activer la configuration que vous avez définie dans votre 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.
Il y a plusieurs moyens 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 votre 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 (voir Outils d'évaluation des vulnérabilités à distances, 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 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ suivant ]
Manuel de sécurisation de Debian
Version: 3.4, Sun, 06 Nov 2005 22:34:04 +0100jfs@debian.org
debian-l10n-french@lists.debian.org