Table des matières Page précédente Page suivante

II-5 Fermeture des ports

II-5-1 Un peu de bon sens

La première chose à faire, est de lancer un petit audit de votre machine. Pour cela, utilisez "nmap", "netstat" et ses petits copains pour déterminer quels sont les serveurs qui tournent sur votre machine. Rappelez vous que lancer nmap sur les ports UDP est très long, et qu'il est plus rapide d'abord de rechercher la présence des ports UDP avec "netstat", puis de les tester au cas par cas avec nmap.

Bon, une fois que c'est fait, posez vous la question : "Est-ce que j'ai besoin du serveur xxxxx ?". Parfois, la réponse peut être négative, et auquel cas l'action doit être immédiate : fermer au plus tôt ce serveur !! Il n'y a rien de plus dangereux que de laisser un serveur tourner sans l'utiliser, car on fini par oublier jusqu'à sa présence, et on ne fera pas attention à le mettre à jour pour corriger ses défauts. Auquel cas, un intrus peut tomber sur ce serveur et bénéficier d'un trou de sécurité pour pénétrer dans votre machine.

Dans l'exemple qui va suivre, on va chercher à supprimer le serveur Samba / NetBIOS de la machine Phoenix. Samba est un système le partage de fichiers en réseau avec les machines Windows® :
[root@phoenix /]# nmap phoenix0.sky.net -p 138,139 && nmap phoenix0.sky.net -p 137,138 -sU

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on phoenix.sky.net (192.168.0.1):
(The 1 port scanned but not shown below is in state: closed)
Port       State       Service
139/tcp    open        netbios-ssn

Nmap run completed -- 1 IP address (1 host up) scanned in 1 second

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on phoenix.sky.net (192.168.0.1):
Port       State       Service
137/udp    open        netbios-ns
138/udp    open        netbios-dgm

Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
D'après les commandes nmap, trois ports (139/tcp, 137/udp et 138/udp) sont utilisés pour le service "netbios". Oui, ce serveur est un peu particulier, d'où l'utilisation dans cet exemple... En fait le protocole "NetBIOS" peut utiliser les ports/protocoles suivant: 137/tcp/udp, 138/tcp/udp, et 139/tcp/udp). Afin de supprimer ce serveur, il nous faut d'abord savoir quels sont les programmes qui tournent derrière ces ports :
[root@phoenix /]# netstat -taupe | sort
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante Etat   Utilisatr  Inode      PID/Program name
tcp        0      0 phoenix1.in:netbios-ssn *:*              LISTEN root       4583       2157/smbd
tcp        0      0 phoenix.sky:netbios-ssn *:*              LISTEN root       4584       2157/smbd
udp        0      0 phoenix1.in:netbios-dgm *:*                     root       4599       2167/nmbd
udp        0      0 phoenix1.int:netbios-ns *:*                     root       4598       2167/nmbd
udp        0      0 phoenix.sky:netbios-dgm *:*                     root       4601       2167/nmbd
udp        0      0 phoenix.sky.:netbios-ns *:*                     root       4600       2167/nmbd
Seul les lignes contenant "netbios" sont affichées. On voit que les programmes qui tournent sont "smbd" et "nmbd". Bien, voila qui est intéressant.

Maintenant, nous allons chercher le programme qui a lancé ces serveurs. Sous Linux, tous les programmes (en fait, ce sont des scripts shell) qui lancent des démons sont situés dans "/etc/init.d/" :
[root@phoenix /]# ls -la /etc/init.d/
-rwxr--r--    1 root     root         1838 mar 14 17:11 smb*
Seul le script qui nous intéresse est affiché. On voit donc que l'on a un script appelé "/etc/init.d/smb" qui pourrait bien correspondre à ce que nous voulons. Lançons le, histoire de voir :
[root@phoenix /]# /etc/init.d/smb
Utilisation : /etc/init.d/smb {start|stop|restart|status|condrestart}
Bon, le programme demande un paramètre. Les scripts de démons doivent en effet être lancés en leur indiquant l'opération à effectuer. Ainsi, on trouve généralement les options suivantes :
  • start : Démarre le démon.
  • stop : Arrête le démon.
  • restart : Redémarre le démon. En fait, c'est exactement la même chose que de faire un "stop" puis un "start".
  • reload : Relit le(s) fichier(s) de configuration du démon, afin de prendre en compte un changement de configuration. Cette option ne marche pas toujours très bien, et parfois, il vaut mieux faire un "restart" plutôt qu'un "reload". Mais cela coupe temporairement le serveur, ce qui peut poser problèmes aux clients qui y sont déjà connectés.
  • condrestart : Redémarre le démon si celui-ci est déjà démarré. Ne fait rien sinon.
  • status : Affiche le status du démon.
Que se passe t' il si l'on utilise "status" pour notre démon Samba ?
[root@phoenix /]# /etc/init.d/smb status
smbd (pid 2157) est en cours d'exécution...
nmbd (pid 2167) est en cours d'exécution...
Bingo ! Se script contrôle le lancement de "smbd" et "nmdb" et les PID sont les mêmes que ceux de la commande "netstat" précédente. C'est donc bien ce script qui nous intéresse. Arrêtons donc le serveur Samba :
[root@phoenix /]# /etc/init.d/smb stop
Arrêt des services SaMBa :                                      [  OK  ]
Arrêt du service NMB :                                          [  OK  ]
[root@phoenix /]# /etc/init.d/smb status
smbd est arrêté
nmbd est arrêté
Samba semble arrêté, comme le confirme la 2nd commande. Il nous reste plus qu'à le vérifier :
[root@phoenix /]# nmap phoenix0.sky.net -p 139 && nmap phoenix0.sky.net -p 137 -sU

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
The 1 scanned port on phoenix.sky.net (192.168.0.1) is: closed

Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
The 1 scanned port on phoenix.sky.net (192.168.0.1) is: closed

Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
OK, "nmap" ne trouve plus rien. Et "netstat" ?
[root@phoenix /]# netstat -taupe | grep netbios | sort
Et "netstat" non plus. Victoire, nous venons de supprimer un serveur et de fermer des ports !!! Bien, plus de risque à craindre pour ce serveur. Si un intrus fait un "nmap" sur ces ports, il ne trouvera rien. Et il pourra bien tenter tout ce qu'il veut comme attaque sur Samba, rien ne se passera.

Mais ce serveur n'est arrêté que tant que votre machine fonctionne. Maintenant, nous pouvons nous débrouiller pour que ce serveur ne soit plus du tout lancé aux prochains démarrages de la machine.

Sous Linux, pour démarrer automatiquement un serveur il suffit de créer un lien symbolique. Suivant que votre machine démarre en mode texte ou en mode graphique, il faut créer un lien symbolique dans respectivement les répertoires "/etc/rc.d/rc3.d/" ou "/etc/rc.d/rc5.d/", vers le script du serveur qui se trouve dans le "/etc/init.d". Concrètement, voila comment cela se passe :
[olivier@phoenix /]$ ls -la /etc/rc.d/rc3.d/ /etc/rc.d/rc5.d/
/etc/rc.d/rc3.d/ :
total 8
drwxr-xr-x    2 root     root         4096 jun 28 11:35 ./
drwxr-xr-x   10 root     root         4096 mar 27 20:23 ../
lrwxrwxrwx    1 root     root           20 mar 27 20:32 K15postgresql -> ../init.d/postgresql*
lrwxrwxrwx    1 root     root           16 mar 27 20:28 K55routed -> ../init.d/routed*
lrwxrwxrwx    1 root     root           23 mar 27 20:27 S01switchprofile -> ../init.d/switchprofile*
lrwxrwxrwx    1 root     root           18 mai 27 19:43 S03iptables -> ../init.d/iptables*
lrwxrwxrwx    1 root     root           17 mar 27 20:33 S10network -> ../init.d/network*
lrwxrwxrwx    1 root     root           15 mai  4 21:02 S10ulogd -> ../init.d/ulogd*
lrwxrwxrwx    1 root     root           17 mar 27 20:33 S11portmap -> ../init.d/portmap*
lrwxrwxrwx    1 root     root           16 mar 27 20:33 S12syslog -> ../init.d/syslog*
lrwxrwxrwx    1 root     root           14 mar 27 20:23 S17alsa -> ../init.d/alsa*
lrwxrwxrwx    1 root     root           15 mar 27 20:33 S18sound -> ../init.d/sound*
lrwxrwxrwx    1 root     root           16 mar 27 20:33 S20random -> ../init.d/random*
lrwxrwxrwx    1 root     root           13 mar 27 20:24 S20xfs -> ../init.d/xfs*
lrwxrwxrwx    1 root     root           12 mar 27 20:23 S30dm -> ../init.d/dm*
lrwxrwxrwx    1 root     root           13 mar 27 20:28 S40atd -> ../init.d/atd*
lrwxrwxrwx    1 root     root           19 mar 27 20:26 S40saslauthd -> ../init.d/saslauthd*
lrwxrwxrwx    1 root     root           15 avr  3 23:23 S55named -> ../init.d/named*
lrwxrwxrwx    1 root     root           16 mar 27 20:32 S56xinetd -> ../init.d/xinetd*
lrwxrwxrwx    1 root     root           15 avr  3 20:02 S65dhcpd -> ../init.d/dhcpd*
lrwxrwxrwx    1 root     root           18 mar 27 20:33 S75keytable -> ../init.d/keytable*
lrwxrwxrwx    1 root     root           17 mar 27 20:26 S80postfix -> ../init.d/postfix*
lrwxrwxrwx    1 root     root           15 mar 27 20:25 S85httpd -> ../init.d/httpd*
lrwxrwxrwx    1 root     root           17 mar 27 20:28 S85numlock -> ../init.d/numlock*
lrwxrwxrwx    1 root     root           15 mar 27 20:33 S90crond -> ../init.d/crond*
lrwxrwxrwx    1 root     root           15 mai 25 17:48 S90mysql -> ../init.d/mysql*
lrwxrwxrwx    1 root     root           13 mar 27 20:30 S91smb -> ../init.d/smb*
lrwxrwxrwx    1 root     root           17 mar 30 22:37 S92privoxy -> ../init.d/privoxy*
lrwxrwxrwx    1 root     root           17 mar 27 20:33 S95kheader -> ../init.d/kheader*
lrwxrwxrwx    1 root     root           16 mar 27 20:28 S99devfsd -> ../init.d/devfsd*
lrwxrwxrwx    1 root     root           11 mar 27 20:23 S99local -> ../rc.local*

/etc/rc.d/rc5.d/ :
total 8
drwxr-xr-x    2 root     root         4096 jun 28 11:35 ./
drwxr-xr-x   10 root     root         4096 mar 27 20:23 ../
lrwxrwxrwx    1 root     root           20 mar 27 20:32 K15postgresql -> ../init.d/postgresql*
lrwxrwxrwx    1 root     root           16 mar 27 20:28 K55routed -> ../init.d/routed*
lrwxrwxrwx    1 root     root           23 mar 27 20:27 S01switchprofile -> ../init.d/switchprofile*
lrwxrwxrwx    1 root     root           18 mai 27 19:43 S03iptables -> ../init.d/iptables*
lrwxrwxrwx    1 root     root           17 mar 27 20:33 S10network -> ../init.d/network*
lrwxrwxrwx    1 root     root           15 mai  4 21:02 S10ulogd -> ../init.d/ulogd*
lrwxrwxrwx    1 root     root           17 mar 27 20:33 S11portmap -> ../init.d/portmap*
lrwxrwxrwx    1 root     root           16 mar 27 20:33 S12syslog -> ../init.d/syslog*
lrwxrwxrwx    1 root     root           14 mar 27 20:23 S17alsa -> ../init.d/alsa*
lrwxrwxrwx    1 root     root           15 mar 27 20:33 S18sound -> ../init.d/sound*
lrwxrwxrwx    1 root     root           16 mar 27 20:33 S20random -> ../init.d/random*
lrwxrwxrwx    1 root     root           13 mar 27 20:24 S20xfs -> ../init.d/xfs*
lrwxrwxrwx    1 root     root           12 mar 27 20:23 S30dm -> ../init.d/dm*
lrwxrwxrwx    1 root     root           13 mar 27 20:28 S40atd -> ../init.d/atd*
lrwxrwxrwx    1 root     root           19 mar 27 20:26 S40saslauthd -> ../init.d/saslauthd*
lrwxrwxrwx    1 root     root           15 avr  3 23:23 S55named -> ../init.d/named*
lrwxrwxrwx    1 root     root           16 mar 27 20:32 S56xinetd -> ../init.d/xinetd*
lrwxrwxrwx    1 root     root           15 avr  3 20:02 S65dhcpd -> ../init.d/dhcpd*
lrwxrwxrwx    1 root     root           18 mar 27 20:33 S75keytable -> ../init.d/keytable*
lrwxrwxrwx    1 root     root           17 mar 27 20:26 S80postfix -> ../init.d/postfix*
lrwxrwxrwx    1 root     root           15 mar 27 20:25 S85httpd -> ../init.d/httpd*
lrwxrwxrwx    1 root     root           17 mar 27 20:28 S85numlock -> ../init.d/numlock*
lrwxrwxrwx    1 root     root           15 mar 27 20:33 S90crond -> ../init.d/crond*
lrwxrwxrwx    1 root     root           15 mai 25 17:48 S90mysql -> ../init.d/mysql*
lrwxrwxrwx    1 root     root           13 mar 27 20:30 S91smb -> ../init.d/smb*
lrwxrwxrwx    1 root     root           17 mar 30 22:37 S92privoxy -> ../init.d/privoxy*
lrwxrwxrwx    1 root     root           17 mar 27 20:33 S95kheader -> ../init.d/kheader*
lrwxrwxrwx    1 root     root           16 mar 27 20:28 S99devfsd -> ../init.d/devfsd*
lrwxrwxrwx    1 root     root           11 mar 27 20:23 S99local -> ../rc.local*
Dans ces 2 répertoires, on voit donc 2 liens "S91smb -> ../init.d/smb*" qui lancent le serveur Samba lors du démarrage de la machine. Nous allons donc les supprimer, et ainsi Samba ne sera plus jamais lancé :
[root@phoenix /]# rm /etc/rc.d/rc3.d/S91smb /etc/rc.d/rc5.d/S91smb
rm: détruire lien symbolique `/etc/rc.d/rc3.d/S91smb'? y
rm: détruire lien symbolique `/etc/rc.d/rc5.d/S91smb'? y
Mais d'un autre coté, nous venons aussi d'arrêter le partage de fichiers avec les autres machines Windows® de notre réseau... Hummm, ce n'est n'est pas très bien, car nous voudrions bien que Paradise récupère sur Phoenix la dernière documentation du kernel Linux que nous avons téléchargé.

Conclusion : autant arrêter des serveurs qui ne servent pas est primordiale, autant arrêter des serveurs qui sont utilisés est problématique. Non, décidément dans ce dernier cas ce n'est pas la solution. Il nous faudra faire autre chose. L'idéal serait de dire au serveur "Ne réponds qu'aux machines de sky.net, et ne répond pas aux autres". Oui, cela serait très bien. Mais comment faire ? C'est là qu'il faut plonger dans l'antre les fichiers de configuration, dans le "man" ou le "info", et paramétrer finement ses serveurs.

II-5-2 Restrictions des connexions aux ports : Généralités

Pour les sections qui vont suivre, je rappelle au lecteur que l'emplacement des fichiers de configuration et/ou les options qui sont utilisés ont été testés avec une distribution Mandrake 9.1. Pour les autres distribution Linux (Debian, Red Hat, Suze, Slackware, Gentoo, etc...) ou pour des futures versions de la Mandrake, ces fichiers peuvent éventuellement être placés ailleurs, et certaines options ne sont peut-être pas les mêmes. Par contre, ce qui est important c'est la méthodologie que vous trouverez ici. Elle vous permettra de retrouver par vous mêmes les bonnes options de configuration.

Dans les fichiers de configuration des divers serveurs, les "mots magiques" qui vont permettre de paramétrer le filtrage des demandes de connexion sont :
  • Only from : Ce mot permet de restreindre les demandes de connexions à une catégorie d'adresse IP sources. On peut par exemple passer les paramètres paradise.sky.net, 192.168.0.5, 192.168.0.0/255.255.255.0, ou encore 192.168.0.0/24. Ainsi, seul certaines adresses IP / réseaux seront autorisés à lancer des requêtes.
  • Allow : Idem que "From"
  • Bind : Cette option indique en général l'adresse IP à qui est destinée la demande de connexion. Pour Phoenix par exemple, il y a 2 cartes réseaux, donc 2 adresses IP sur lesquelles peuvent arriver des requêtes externes (comme par exemple celles envoyées par "nmap"). Dans ce cas, on peut donner le paramètre phoenix0.sky.net ou 192.168.0.1 à l'option "bind", ce qui aura pour effet de refuser les demandes de connexions faites à l'adresse IP phoenix1.internet.net. Et donc les requêtes venant de pirate.internet.net seront refusées.
  • Listen : Idem que "Bind".
  • Interface : Idem que "Bind".
Cette liste n'est pas exhaustive, mais elle vous donne un bon point de départ pour vous aider. A vous maintenant d'éplucher la documentation des serveurs que vous utilisez, afin de trouver les options équivalentes.

Une règle importante pour ce type de paramétrage, c'est que l'on n'est jamais trop paranoïaque. Ainsi, n'hésitez pas à utiliser en même temps les paramètres de types "bind" et "from", afin de doubler la sécurité, et de contrôler à la fois les adresse IP source et destination des requêtes.

Maintenant, regardons pour certains serveurs spécifiques comment cela fonctionne. Au risque de vous déplaire, je ne parlerai que des fichiers de configuration, et non des interfaces graphiques qui permettent de saisir agréablement ces paramètres. Tout simplement parce que je ne les utilise pas, et que je travaille plus vite en configurant à la main les fichiers de configuration. Certains dirons que j'ai des pratiques de papy de l'informatique, auquel je répondrais que moi, je ne me suis pas fait greffé une sourie à la place de la main ... Smiley Mais n'entamons pas là un nouveau troll, et passons directement à la suite...

II-5-3 Samba / NetBIOS

On a déjà parlé précédemment de Samba. C'est un serveur qui permet de partager des répertoire de votre disque dur avec des machines Windows®. D'ailleurs, les réseaux Microsoft et Samba utilisent le même protocole. Pour étouffer dans l'oeuf toute confusion : c'est IBM qui a inventé NetBIOS. Puis il a été implémenté dans Windows® 3.11. Et un peu plus tard par Samba.
Fichier de configuration/etc/samba/smb.conf
Documentationman smb.conf
Site webhttp://samba.org/
ParamétragesType de restrictionOptionRestriction sur une adresse IP
Exemple : 192.168.0.2
Restriction sur un réseau
Exemple : 192.168.0.0/24
ExemplesRemarque
Sourcehosts allowOuiOui192.168.0.2
192.168.0.0/24
On peut aussi utiliser le terme "EXCEPT"
DestinationinterfacesNonOui192.168.0.0/24Utiliser aussi l'option "bind interface only" en temps que 3ème sécurité...
RemarquesL'option "remote announce" est aussi très intéressante

Exemple :
  hosts allow = 192.168.0.0/255.255.255.0 10.0.0.0/255.0.0.0
  interfaces = 192.168.0.1/26 10.0.0.1/8
  bind interfaces only = yes
Si vous utilisez un serveur Samba, vous devez à tout prix le sécuriser. C'est la cible privilégiée des intrus sur Internet. En effet, Windows® est fournit en standard avec un serveur NetBIOS, et bon nombre d'Internautes l'utilisent pour partager des fichiers dans leur réseau local (par exemple, avec leur portable professionnel). Et comme ils n'ont pas forcément conscience de ce problème d'ouvertures de ports, ils partagent leur répertoire sur Internet... Ainsi, tout le monde ou presque a accès en lecture, voir en écriture, sur certains de leurs répertoires, voir sur la totalité de leur disque dur...

Pour information, lorsque je suis connecté sur Internet, mon Samba est sollicité environ une fois par minute par des intrus... Ne faites donc pas cette erreur de débutant, et contrôlez au plus vite l'accès à ce port !

II-5-4 Apache

Non, nous n'allons pas jouer aux cowboys et aux indiens. Apache est le nom du serveur web (HTTP) utilisé par environ 50% des serveurs Internet. Il est robuste, en continuel amélioration, mais c'est aussi une cible privilégié des intrus. Je ne parlerai ici que de la version 2.0.

Ce n'est pas très habituel d'avoir un serveur Apache qui tourne sur une machine personnelle, mais qu'est-ce que c'est pratique ! Le mien sert à afficher mes pages HTML en cours de construction, exactement comme si elle étaient sur mon site sur Free. De plus, ce serveur fait tourner une version locale de l'excellent validator HTML, ce qui me permet de tester à tout moment la validité de mes pages (et d'avoir le petit logo en bas de page "Valid XHTML").

Mais ce n'est pas parce que je publie des pages HTML, que je laisse rentrer des intrus sur ma propre machine afin de les visiter avant l'heure. Et puis de toute façon, il y a des pages que je ne désire pas publier... Il convient donc de restreindre utilisation de mon serveur Apache.
Fichiers de configuration/etc/httpd/conf/httpd2.conf
/etc/httpd/conf/httpd2-perl.conf
/etc/httpd/conf/common/httpd.conf
Documentationman http
Site webhttp://www.apache.org/
ParamétragesType de restrictionOptionRestriction sur une adresse IP
Exemple : 192.168.0.2
Restriction sur un réseau
Exemple : 192.168.0.0/24
ExemplesRemarque
SourceDeny fromOuiOuiAll 192.168.0.2
192.168.0.0/24
Ce paramétrage se fait dans les sections <Directory xxxx> </Directory xxxx>
DestinationListenOuiNon192.168.0.1
phoenix0:80
On peut utiliser l'option "Listen" plusieurs fois : Une par adresse IP où l'on veut écouter
RemarquesApache est un logiciel que l'on peut vraiment beaucoup paramétrer. De ce fait, il faut faire attention à ne pas laisser des "portes ouvertes".

Exemple :
  [Fichier : /etc/httpd/conf/httpd2.conf]
  Listen phoenix0:80
  Listen phoenix1:80

  [Fichier : /etc/httpd/conf/common/httpd.conf]
  <Directory />
    AllowOverride None
    <IfModule mod_access.c>
      Order deny,allow
      Deny from all
    </IfModule>
  </Directory>

II-5-5 Xinetd

On a déjà parlé plus haut de "Xinetd". Son fichier de configuration est "/etc/xinetd.conf", mais en général il est écrit "includedir /etc/xinetd.d/" dans ce fichier. Cela veut dire que "Xinetd" lira à la fois "/etc/xinetd.conf" mais aussi les fichiers de "/etc/xinetd.d/*" pour définir sa configuration. L'idée de ce système un peu atypique est :
  • De définir un paramétrage global pour tout les serveurs que va surveiller Xinetd ("/etc/xinetd.conf", dans une section "defaults")
  • Définir ensuite un paramétrage indépendant par serveur ("/etc/xinetd.d/*")
Cependant, si cette stratégie ne vous plaît pas, vous pouvez écrire tous les paramétrages des serveurs dans "/etc/xinetd.conf".
Fichiers de configuration/etc/xinetd.conf
/etc/xinetd.d/
Documentationman xinetd.conf
Site webhttp://www.xinetd.org
ParamétragesType de restrictionOptionRestriction sur une adresse IP
Exemple : 192.168.0.2
Restriction sur un réseau
Exemple : 192.168.0.0/24
ExemplesRemarque
Sourceonly_fromOuiOui192.168.0.2
192.168.0.0/24
192.168.0.0/255.255.255.0
DestinationbindOuiNon192.168.0.1
phoenix0
RemarquesDans la section "default" de Xinetd, je vous conseille vivement d'utilisation l'option "no_access =" en ne donnant aucun paramètre. Ainsi, à moins de spécifier plus loin un accès à un serveur en particulier, Xinetd refusera par défaut toute tentative de connexion. C'est une 3ème sécurité...

Exemple de configuration pour le serveur proftpd :
  [Fichier : /etc/xinetd.conf]
  defaults
  {
          instances               = 60
          log_type                = SYSLOG authpriv
          log_on_success          = HOST PID
          log_on_failure          = HOST
          cps                     = 25 30
  # Remarque : On n'écrit rien en paramètre, et c'est VOLONTAIRE ! Ainsi, TOUS les accès sont interdit...
          no_access               =
  }
  includedir /etc/xinetd.d

  [Fichier : /etc/xinetd.d/proftpd-xinetd]
  # Service FTP pour phoenix0.sky.net (réseau local)
  service ftp
  {
          id                      = ftp:0
          socket_type             = stream
          wait                    = no
          user                    = root
          server                  = /usr/sbin/proftpd
          flags                   = REUSE
          log_on_failure          += USERID
          log_on_success          += USERID DURATION
          nice                    = 10
          instances               = 4
          bind                    = phoenix0
          only_from               = 192.168.0.0/24
          disable                 = no
  }
Commentaire :
  • Première protection ("no_access = ") : personne n'a accès aux serveurs protégés par Xinetd
  • Seconde protection ("bind = phoenix0") : seul les requêtes arrivant sur phoenix0.sky.net sont autorisées.
  • Troisième protection ("only_from = 192.168.0.0/24") : le client doit avoir une adresse IP appartenant au réseau sky.net.
Trois protections en un. Puissant, non ??

II-5-6 X11

Lorsque vous faire un "nmap" sur votre machine, vous remarquez qu'un port est ouvert beaucoup "plus haut" que les autres. Il s'agit du port 6000, qui est associé au système graphique X11. C'est lui qui est responsable de l'affichage des beaux pixels qui s'affichent devant vous pendant que vous lisez ce document.
[olivier@phoenix /]$ nmap phoenix0.sky.net

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on phoenix.sky.net (192.168.0.1):
(The 1591 ports scanned but not shown below are in state: closed)
Port       State       Service
21/tcp     open        ftp
23/tcp     open        telnet
25/tcp     open        smtp
53/tcp     open        domain
80/tcp     open        http
110/tcp    open        pop-3
111/tcp    open        sunrpc
443/tcp    open        https
6000/tcp   open        X11
Pourquoi un logiciel d'affichage a t'il un port IP d'ouvert ? En fait c'est là que Linux (et les Unix/BSD en général) est génial. Avec Linux, vous pouvez lancer un programme, et afficher son résultat non pas sur votre écran, mais sur l'écran d'un autre PC, en utilisant le réseau IP. Rien d'exceptionnel me diriez vous, Windows® le fait depuis sa version 2000. Oui, mais les Unix ont eu cette technologie plus de 20 ans avant les OS de Microsoft...

Il est important de fermer ce port, car des intrusions peuvent venir plus ou moins facilement dessus. Et même si ce n'est pas le cas, ce port ouvert indique très clairement à l'intrus que vous avez un système Linux / Unix / BSD. Et ce n'est pas la peine de le mettre trop rapidement sur la voie.
Fichier de configuration (exemple pour xdm)/etc/X11/xdm/Xservers
Documentationman Xserver
Site webhttp://www.xfree86.org/

La méthode protection de X11 est beaucoup plus primitive que celles des autres logiciels dont nous parlons ici. En fait, elle n'a que deux options : Le port 6000 est ouvert ou fermé. En général, sur un réseau de particulier on n'utilise pas ce système d'affichage exporté ("export display" en anglais et c'est d'ailleurs le nom d'un variable d'environnement qui est justement utilisé pour cela). C'est pourquoi on peut fermer ce port en toute quiétude.

C'est là que cela devient un peu plus compliqué. Le manuel ("man X11") indique que la commande "X" ("/usr/X11R6/bin/X" en fait) peut recevoir le paramètre "-nolisten tcp". Comme cela l'indique, X11 ne va plus écouter le port TCP, et donc le port sera fermé. Oui, mais en général, on ne lance pas "X" directement, car il y a d'autres couches logiciels à initialiser d'abord, comme le "Window Manager" ("gestionnaire de fenêtres" en français), le "Desktop" ("bureau" en français), etc... Ainsi :

  • Si vous démarrez votre machine en ligne de commande ("init 3"), vous avez l'habitude de taper la commande "startx" pour lancer l'interface graphique. Lancez donc plutôt : "/usr/X11R6/bin/startx -- -nolisten tcp"
  • Si au contraire vous démarrez directement en mode graphique ("init 5"), cela va dépendre du gestionnaire de fenêtres qui est utilisé. Si il s'agit de "xdm" ("/usr/X11R6/bin/xdm"), rajoutez "-nolisten tcp" à la ligne lançant "X", dans le fichier "/etc/X11/xdm/Xservers". Ainsi,
      [Fichier : /etc/X11/xdm/Xservers]
      :0 local /bin/nice -n -10 /usr/X11R6/bin/X -deferglyphs 16
    
    devient :
      [Fichier : /etc/X11/xdm/Xservers]
      :0 local /bin/nice -n -10 /usr/X11R6/bin/X -nolisten tcp -deferglyphs 16
    
    Pour les autres gestionnaires de fenêtres, je vous laisse chercher par vous même ! Smiley

    Pour les utilisateurs de distributions Mandrake, prenez bien garde de mettre le "-nolisten tcp" juste après le "/usr/X11R6/bin/X". En effet, sur cette distribution tourne un logiciel ("/usr/sbin/msec") qui surveille à heure régulière les changements de "/etc/X11/xdm/Xservers". Il supprimera l'option "-nolisten tcp" si elle n'est pas mise à l'emplacement décrit. "Msec" considère que tout changement non référencé à ce fichier, et à tout un tas d'autres, sont des atteintes potentielles à la sécurité de la machine, ce en quoi il a raison... Pour les détails, je vous laisse regarder le fichier de configuration de msec : "/usr/share/msec/libmsec.py"
Enfin, si vous avez lancé plusieurs serveurs X11 sur votre machine (c'est assez rare quand même...), un port situé au-delà de 6000 sera ouvert par serveur X11 supplémentaire : 6001, 6002, 6003, etc...

II-5-7 Bind / Named

On a déjà parlé de named, donc je ne m'étendrai pas dessus. Le nom du produit s'appelle "Bind", mais l'exécutable se nomme "named", c'est un peu une source de confusion... L'important si vous avez un serveur DNS sur votre réseau interne, c'est que personne de l'extérieur ne s'amuse à l'interroger, et ne devine la topologie de votre réseau (le nom et les adresses IP des machines à l'intérieur). Avec une configuration non sécurisée, c'est beaucoup plus facile à faire qu'on le croît. D'un autre coté, il est assez rare d'avoir besoin d'un serveur DNS dans un réseau personnel, sauf si on fait du NAT. Mais n'anticipons pas.
Fichier de configuration/etc/named.conf
Documentationman named.conf
Site webhttp://www.isc.org/products/BIND/
ParamétragesType de restrictionOptionsRestriction sur une adresse IP
Exemple : 192.168.0.2
Restriction sur un réseau
Exemple : 192.168.0.0/24
ExemplesRemarque
Sourceallow-transfer
allow-query
allow-update
allow-recursion
OuiOui192.168.0.2
192.168.0.0/24
Voir la doc pour l'explication des différentes options
Destinationlisten-onOuiOui192.168.0.1
192.168.0.0/24
RemarquesBind fait parti de ces logiciels qui sont soumis à des attaques continuels, car fort utilisés. Il convient donc de multiplier les protections lorsqu'on l'utilise, et de le mettre à jour régulièrement.

Exemple :
  allow-transfer {
    192.168.0.0/24;
  };

  allow-query {
    192.168.0.0/24;
  };

  listen-on {
    192.168.0.0/24;
  };  

II-5-8 Postfix

"Postfix" est un serveur de mails, tout comme le célèbre "sendmail". Il est plus facile à configurer, et peut servir aussi bien à l'intérieur de réseaux modestes ou au sein des grands comptes.
Fichier de configuration/etc/postfix/main.cf
Documentationman postfix
Site webhttp://www.postfix.org/
ParamétragesType de restrictionOptionRestriction sur une adresse IP
Exemple : 192.168.0.2
Restriction sur un réseau
Exemple : 192.168.0.0/24
ExemplesRemarque
SourcemynetworksNonOui192.168.0.0/24
Destinationinet_interfacesOuiNon192.168.0.1
phoenix0.sky.net
RemarquesSur Internet sévi depuis un bon bout de temps une activité à peine plus inconvenante que l'intrusion. Il s'agit du "spam", "courrier non sollicité" ou "pourriciel". En temps qu'utilisateur, vous devez garantir que votre machine ne servira pas à envoyer des mails non sollicités de ce type, c'est à dire que ce ne soit pas un "open relay".

Exemple :
  mynetworks_style = subnet
  mynetworks = 192.168.0.0/24
  inet_interfaces = phoenix0.sky.net

Table des matières Page précédente Page suivante
Valid XHTML 1.0! Valid CSS!
Site de référence : http://olivieraj.free.fr/ Last modified: Wed Jul 23 01:04:28 CEST 2003