[LONG] Comment securiser sa machine Linux (Debian) ?
Le
Pham
Bonjour,
Voilà je viens de me lancer avec intérêt dans l'aventure Linux avec une
Debian Woody et je sollite l'avis des experts de ce forum pour sécuriser
la machine.
Je précise que je suis débutant mais que je n'ai aucune réticence à lire
de la doc, au contraire (c'est comme ça que j'arrive à comprendre ce que
je fais). Et puis le domaine de la sécurité semble particulièrement
intéressant en plus ;-) Idéalement j'aimerais faire une doc pour
mettre le pied à l'étrier au niveau sécurité pour les tout débutants
comme moi.
Quelques précisions de configuration tout d'abord : un seul poste pour
une utilisation personnelle (PC sous Debian Woody donc), connexion en
RTC et dans l'avenir en ADSL ethernet. L'utilisation est vraiment
basique : web, email, un peu de traitement de texte, etc mais pas de
choses sophistiquée comme l'hébergement d'un Apache ou d'un serveur
MySQL. Ah si j'utilise postfix et leafnode (serveur de newsgroups) quand
même.
Bon voici comment j'ai déjà procédé par étapes (pas sûr d'avoir tout
fait dans l'ordre):
1) Installation normale de la Woody
2) Création d'un utilisateur normal 'toto'
3) 'toto' s'est vu affecter aux groupes suivants : dialout cdrom audio
dip video scanner
4) configuration via kppp de la connexion : j'avais un peu galéré au
début car kppp voulait absolument être lancé par root mais j'ai plus ou
moins réglé le problème en rajoutant les groupes dialout et dip à 'toto'
puis en créant un fichier contenant la chaîne 'noauth' appelé en
argument de pppd, mais je ne suis pas sûr du tout que ce soit la bonne
méthode.
5) Lecture de http://www.tldp.org/HOWTO/Security-...tart-HOWTO et de
http://olivieraj.free.fr/fr/linux/i...n/firewall
6) Désactivation des services inutiles :
Maintenant en faisant un netstat -tap | grep LISTEN j'obtiens :
tcp 0 0 *:linuxconf *:* LISTEN 248/inetd
tcp 0 0 *:webcache *:* LISTEN 384/wwwoffled
tcp 0 0 *:tproxy *:* LISTEN 384/wwwoffled
tcp 0 0 mamachine:8118 *:* LISTEN 363/privoxy
tcp 0 0 *:ipp *:* LISTEN 252/cupsd
tcp 0 0 *:nntp *:* LISTEN 248/inetd
tcp 0 0 *:smtp *:* LISTEN 357/master
Je pense avoir gardé le minimum vital.
Au cas où j'ai quand même utilisé le Tcpwrappers pour leafnode en
modifiant le /etc/inetd.conf, je pense que ce n'est pas nécessaire pour
les autres.
7) Définition des règles iptables, là ce fut la partie difficile. Après
quelques tentatives personnelles plus ou moins fructueuses je me suis
rabattu sur le script que fournissait l'auteur de la doc sur les
firewall vu au 5) : netfilter_cfg (disponible à l'adresse
http://olivieraj.free.fr/fr/linux/p...ilter_cfg/)
J'ai ajouté un appel à ce script dans /etc/ppp/ip-up.d/01iptables
Maintenant quand je fais 'iptables -L -n -v' en étant connecté
j'obtiens :
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP tcp -- ppp0 * 0.0.0.0/0 0.0.0.0/0 tcp dpts:4660:4700
0 0 DROP udp -- ppp0 * 0.0.0.0/0 0.0.0.0/0 udp dpts:4660:4700
0 0 DROP tcp -- ppp0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10738
0 0 DROP udp -- ppp0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:10738
26 1541 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 state
NEW,RELATED,ESTABLISHED
0 0 ACCEPT all -- ppp0 * 0.0.0.0/0 80.9.46.140
state RELATED,ESTABLISHED
0 0 DROP all -- ppp0 * 127.0.0.0/8 0.0.0.0/0
0 0 DROP all -- ppp0 * 10.0.0.0/8 0.0.0.0/0
0 0 DROP all -- ppp0 * 172.16.0.0/12 0.0.0.0/0
0 0 DROP all -- ppp0 * 192.168.0.0/16 0.0.0.0/0
0 0 DROP all -- ppp0 * 224.0.0.0/4 0.0.0.0/0
0 0 DROP all -- ppp0 * 240.0.0.0/4 0.0.0.0/0
0 0 DROP all -- ppp0 * 240.0.0.0/4 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
26 1541 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 state
NEW,RELATED,ESTABLISHED
0 0 ACCEPT all -- * ppp0 80.9.46.140 0.0.0.0/0
state NEW,RELATED,ESTABLISHED
8) Installation de 'bastille' (version 1:1.3.0-2) sensé 'durcir' le
système(j'ai choisi les options proposé par défaut partout sauf pour les
règles iptables)
9) Installation de l'IDS snort et de snortsnarf au cas où.
Voilà à partir de là je ne sais plus trop quoi faire. Quelques questions
que je me pose cependant :
-J'ai beaucoup entendu parler de 'sudo', 'setuid','chrootage' mais je
n'ai jamais eu besoin de faire appel à ça jusqu'ici, mais peut-être
ai-je eu tort ?
-j'ai du mal à interpreter les informations envoyés par snort (via
snortsnarf), par exemple je ne vois jamais de tentative de connexion de
ce Blaster dont tous le monde me parle, est-ce qu'il faut configurer son
snort pour que celui-ci reconnaisse les tentatives de connexion (ici un
P2P, ici un ver, ici une tentative d'exploitation de failles) et n'est
ce pas déjà disponible quelque part ? Je n'ai pas voulu installer de
serveur MySQL ou autre pour gérer dans une base de données les
informations de snort, cela ajouterait un serveur de plus à maintenir,
est-ce que j'ai eu raison ? J'ai aussi essayé prelude et celui-ci
voulait aussi absolument installer un MySQL pour pouvoir exploiter les
logs
-Je ne vois pas très bien ou se place l'IDS dans mon cas ? est-il
derrière le firewall ou devant ? et où faut-il idéalement le placer (je
ne dispose que d'une seule machine !)
-J'ai longuement hésité entre définir mes propres règles iptables (via
un script ou pas) et utiliser un firewall (guarddog ?) déjà tout fait.
Que me recommandez vous ? et sinon quel est le firewall 'tout fait' le
plus efficace ?
-Quelles sont les autres voies à explorer pour améliorer encore la
sécurité ?
Merci à tous ceux qui sont arrivé jusqu'ici et j'attends donc vos
commentaires et ou conseils et ou critiques (qui sont les bienvenues !)
Voilà je viens de me lancer avec intérêt dans l'aventure Linux avec une
Debian Woody et je sollite l'avis des experts de ce forum pour sécuriser
la machine.
Je précise que je suis débutant mais que je n'ai aucune réticence à lire
de la doc, au contraire (c'est comme ça que j'arrive à comprendre ce que
je fais). Et puis le domaine de la sécurité semble particulièrement
intéressant en plus ;-) Idéalement j'aimerais faire une doc pour
mettre le pied à l'étrier au niveau sécurité pour les tout débutants
comme moi.
Quelques précisions de configuration tout d'abord : un seul poste pour
une utilisation personnelle (PC sous Debian Woody donc), connexion en
RTC et dans l'avenir en ADSL ethernet. L'utilisation est vraiment
basique : web, email, un peu de traitement de texte, etc mais pas de
choses sophistiquée comme l'hébergement d'un Apache ou d'un serveur
MySQL. Ah si j'utilise postfix et leafnode (serveur de newsgroups) quand
même.
Bon voici comment j'ai déjà procédé par étapes (pas sûr d'avoir tout
fait dans l'ordre):
1) Installation normale de la Woody
2) Création d'un utilisateur normal 'toto'
3) 'toto' s'est vu affecter aux groupes suivants : dialout cdrom audio
dip video scanner
4) configuration via kppp de la connexion : j'avais un peu galéré au
début car kppp voulait absolument être lancé par root mais j'ai plus ou
moins réglé le problème en rajoutant les groupes dialout et dip à 'toto'
puis en créant un fichier contenant la chaîne 'noauth' appelé en
argument de pppd, mais je ne suis pas sûr du tout que ce soit la bonne
méthode.
5) Lecture de http://www.tldp.org/HOWTO/Security-...tart-HOWTO et de
http://olivieraj.free.fr/fr/linux/i...n/firewall
6) Désactivation des services inutiles :
Maintenant en faisant un netstat -tap | grep LISTEN j'obtiens :
tcp 0 0 *:linuxconf *:* LISTEN 248/inetd
tcp 0 0 *:webcache *:* LISTEN 384/wwwoffled
tcp 0 0 *:tproxy *:* LISTEN 384/wwwoffled
tcp 0 0 mamachine:8118 *:* LISTEN 363/privoxy
tcp 0 0 *:ipp *:* LISTEN 252/cupsd
tcp 0 0 *:nntp *:* LISTEN 248/inetd
tcp 0 0 *:smtp *:* LISTEN 357/master
Je pense avoir gardé le minimum vital.
Au cas où j'ai quand même utilisé le Tcpwrappers pour leafnode en
modifiant le /etc/inetd.conf, je pense que ce n'est pas nécessaire pour
les autres.
7) Définition des règles iptables, là ce fut la partie difficile. Après
quelques tentatives personnelles plus ou moins fructueuses je me suis
rabattu sur le script que fournissait l'auteur de la doc sur les
firewall vu au 5) : netfilter_cfg (disponible à l'adresse
http://olivieraj.free.fr/fr/linux/p...ilter_cfg/)
J'ai ajouté un appel à ce script dans /etc/ppp/ip-up.d/01iptables
Maintenant quand je fais 'iptables -L -n -v' en étant connecté
j'obtiens :
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP tcp -- ppp0 * 0.0.0.0/0 0.0.0.0/0 tcp dpts:4660:4700
0 0 DROP udp -- ppp0 * 0.0.0.0/0 0.0.0.0/0 udp dpts:4660:4700
0 0 DROP tcp -- ppp0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:10738
0 0 DROP udp -- ppp0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:10738
26 1541 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 state
NEW,RELATED,ESTABLISHED
0 0 ACCEPT all -- ppp0 * 0.0.0.0/0 80.9.46.140
state RELATED,ESTABLISHED
0 0 DROP all -- ppp0 * 127.0.0.0/8 0.0.0.0/0
0 0 DROP all -- ppp0 * 10.0.0.0/8 0.0.0.0/0
0 0 DROP all -- ppp0 * 172.16.0.0/12 0.0.0.0/0
0 0 DROP all -- ppp0 * 192.168.0.0/16 0.0.0.0/0
0 0 DROP all -- ppp0 * 224.0.0.0/4 0.0.0.0/0
0 0 DROP all -- ppp0 * 240.0.0.0/4 0.0.0.0/0
0 0 DROP all -- ppp0 * 240.0.0.0/4 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
26 1541 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 state
NEW,RELATED,ESTABLISHED
0 0 ACCEPT all -- * ppp0 80.9.46.140 0.0.0.0/0
state NEW,RELATED,ESTABLISHED
8) Installation de 'bastille' (version 1:1.3.0-2) sensé 'durcir' le
système(j'ai choisi les options proposé par défaut partout sauf pour les
règles iptables)
9) Installation de l'IDS snort et de snortsnarf au cas où.
Voilà à partir de là je ne sais plus trop quoi faire. Quelques questions
que je me pose cependant :
-J'ai beaucoup entendu parler de 'sudo', 'setuid','chrootage' mais je
n'ai jamais eu besoin de faire appel à ça jusqu'ici, mais peut-être
ai-je eu tort ?
-j'ai du mal à interpreter les informations envoyés par snort (via
snortsnarf), par exemple je ne vois jamais de tentative de connexion de
ce Blaster dont tous le monde me parle, est-ce qu'il faut configurer son
snort pour que celui-ci reconnaisse les tentatives de connexion (ici un
P2P, ici un ver, ici une tentative d'exploitation de failles) et n'est
ce pas déjà disponible quelque part ? Je n'ai pas voulu installer de
serveur MySQL ou autre pour gérer dans une base de données les
informations de snort, cela ajouterait un serveur de plus à maintenir,
est-ce que j'ai eu raison ? J'ai aussi essayé prelude et celui-ci
voulait aussi absolument installer un MySQL pour pouvoir exploiter les
logs
-Je ne vois pas très bien ou se place l'IDS dans mon cas ? est-il
derrière le firewall ou devant ? et où faut-il idéalement le placer (je
ne dispose que d'une seule machine !)
-J'ai longuement hésité entre définir mes propres règles iptables (via
un script ou pas) et utiliser un firewall (guarddog ?) déjà tout fait.
Que me recommandez vous ? et sinon quel est le firewall 'tout fait' le
plus efficace ?
-Quelles sont les autres voies à explorer pour améliorer encore la
sécurité ?
Merci à tous ceux qui sont arrivé jusqu'ici et j'attends donc vos
commentaires et ou conseils et ou critiques (qui sont les bienvenues !)

Poser une question


Bonjour
Concernant de la documentation sur la sécurité, il existe au moins deux bons
bouquins traduits en Français :
- Sécurité sous Linux, Aron Hsiao, édition CampusPress
(www.campuspress.net), ISBN 2-7440-1222-X
- Administration réseaux sous Linux, Olaf Kirsch & Terry Dawson, édition
O'Reilly (www.oreilly.fr), ISBN 2-84177-125-3
Ils sont trés didactiques avec des exemples (notamment de firewall). Même
moi, j'ai (presque) tout compris même si je n'ai pas tout mis en pratique
sur ma machine.
Salutations
JPF
[...]
Connais pas, est-il vraiment nécessaire de le laisser ouvert sur
toutes les interfaces, tu comptes faire de l'administration à
distance de ta machine ?
"mamachine", c'est "localhost" (l'interface de loopback)?
À quoi sert d'écouter sur toutes les interfaces.
Tu fais serveur de news ?!
Tu fais serveur de mail ?!
Chez moi:
$ netstat -ltu
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat
$ ps -eH -o args
COMMAND
init [3]
[keventd]
[ksoftirqd_CPU0]
[kswapd]
[bdflush]
[kupdated]
/usr/sbin/crond -l8
/usr/sbin/syslogd
/usr/sbin/klogd
login -- chazelas
xinit /home/chazelas/.xinitrc -- /home/chazelas/.xserverrc
/usr/X11R6/bin/Xwrapper -nolisten tcp -auth /home/chazelas/.Xauthority
ion
uxterm -u8 +lc -C -e screen -UR
screen -UR
SCREEN -UR
/bin/zsh
elinks
/usr/local/bin/slrn.bin --spool
vim +8 /home/chazelas/.followup
/bin/zsh
ps -eH -o args
$
Pas besoin de grand chose de plus.
Je connais pas leafnode, mais ça m'étonnerait que tu ne puisses
pas lui dire de n'écouter que sur l'interface de loopback.
Avec slrnpull, pas besoin de faire tourner un daemon
supplémentaire comme leafnode. slrnpull peut aussi s'utiliser
avec pine ou tin au moins (pour le postage d'article aussi sans
doute, mais peut-etre moyennant un petit script d'adaptation).
--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]
[...]
Oops, j'ai rien dit, j'avais pas tilté que tu passais par inetd.
Note xinetd qui te permet de te passer des tcp wrappers.
(http://www.xinetd.org).
--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]
Ok merci mais est-ce que ces bouquins ne s'adressent pas plutôt à des
administrateurs réseaux ?
Ca me semble un peu euh...'overkill' pour moi qui désire juste sécuriser
ma machine...
C'est effectivement un outil d'administration. Mais comment limiter les
interfaces à ma machine ?
Oui en effet mamachine est le nom de ma machine (je ne connais pas le
terme 'interface de loopback'
Pareil ; je ne sais pas comment limiter l'interface...
C'est leafnode qui est lancé. Je crois effectivement que c'est un
serveur de news ? Je ne connais pas d'autre moyens pour consulter les
news offline...
Non j'utilise sylpheed qui s'occupe d'envoyer directement ses emails.
Par contre il me semblait avoir lu quelque part dans une doc concernant
l'administration d'une Debian que celle-ci exigeait d'avoir un serveur
de mail pour recevoir les emails d'avertissement destinés à root.
J'avoue que je n'ai pas bien saisi...
Oui j'aimerais bien en arriver à ce niveau comme toi mais je ne vois pas
comment me passer de tous ces serveurs pour le moment ?
leafnode est un serveur de news comme INN.
Mais je ne sais pas comment lui dire de n'écouter que les informations
provenant de ma machine...
Je ne connais pas slrnpull mais je ne vois pas très bien comment m'en
sortir pour lire des news offline sans serveur derrière (si je veux
dissocier le logiciel de lecture de news, par exemple PAN ou sylpheed,
et la gestion des news proprement dite).
Merci pour tes commentaires. Pourrais-tu m'indiquer de quels docs tu
tiens tes 'mesures de sécurité' ?