Documente Academic
Documente Profesional
Documente Cultură
c
a
t
(
i
d
e
n
t
i
a
n
t
d
u
s
e
r
v
e
u
r
s
i
g
n
e
p
a
r
l
e
C
A
)
1
)
d
e
m
a
n
d
e
u
n
c
e
r
t
i
c
a
t
a
u
p
r
e
a
l
a
b
l
e
6) connection cryptee avec la clef publique du serveur
5) verie la signature du certicat et lidentite du serveur
Figure 7.6: Principe dune connection SSL ou de sa version plus rcente TLS.
48
Chapitre 8
Congurer un serveur de mail avec
postfix
8.1 Le Mail Transfer Agent Postx
Un Mail Tranfer Agent (MTA), ou SMTP daemon, permet de transmettre des messages (mail)
dun ordinateur un autre. Pour envoyer un mail, on se connecte au serveur SMTP en sau-
tentiant en utilisant un client de mail (outlook, thunderbird,...), qui transmet le message. Le
serveur SMTP applique des ltres (souvent antispam) sur le mail. Le MTA postx a aussi des
fonctionnalits de Mail Delivery Agent qui lui permettent de livrer le courrier dans une mailbox
(mbox ou Maildir). Les clients utilisateur utilisent ensuite un serveur POP pour aller chercher
le mail dans la mailbox qui se trouve sur le serveur.
La conguration de base de Postx se fait dans le chier /etc/postfix/main.cf. On y
spcie essentiellement les ltres appliquer au mail pour viter que les utilisateurs ne reoivent
trop de spams, mais aussi pour viter que le MTA ne soit utilis comme relai par des spammeurs.
Voici un exemple de chier /etc/postfix/main.cf :
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUAs job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
delay_warning_time = 4h
myhostname = mondomaine.com
# dfinitions dalias dans /etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
myorigin = /etc/mailname
49
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
mydestination = mondomaine.com, localhost.localdomain, localhost
relayhost =
# pour une utilisation avec
# le serveur POP courier-pop
mailbox_command = /usr/bin/maildrop
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
# definition du reseau local privilegie
mynetworks = 127.0.0.0/8 192.168.1.0/24
smtpd_recipient_restrictions=
# rgles eliminant une partie du spam
# en vrifiant la conformit des paramtres
# (expditeur, destinataire,...) a certains protocoles
reject_invalid_hostname,
# commenter cette ligne pour les utilisateurs doutlook :
# reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
# vrifie que lexpediteur est bien enregistr DNS
reject_unknown_sender_domain,
# vrifie que le destinataire est bien enregistr DNS
reject_unknown_recipient_domain,
# rejette certains logiciels denvoi de mail non conformes
reject_unauth_pipelining,
# autorise a partir du rseau local
permit_mynetworks,
# viter de servir de relai de spammer avec pop-before-smtp
# (ncessite linstallation de pop-before-smtp)
check_client_access hash:/var/lib/pop-before-smtp/hosts,
# ne pas changer sans savoir pourquoi
reject_unauth_destination,
# activer le greylisting postgrey :
# ncessite linstallation de postgrey
check_policy_service inet:[127.0.0.1]:60000,
# politique par dfaut
permit
# blacklist antispam (voir fichier /etc/postfix/access)
smtpd_sender_restrictions =
check_client_access hash:/etc/postfix/access
50
Chapitre 8 : Congurer un serveur de mail avec postfix
# scurisation du smtp (viter de servir de relai de spammer)
# test de requtes DNS
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client_hostname
# antivirus amavis
# (ncessite linstalation damavis)
content_filter = smtp-amavis:[127.0.0.1]:10024
# spamass-milter configuration anti spam combine avec spamassassin
# (ncessite linstallation et configuration de
# spamassassin et spamass-milter)
milter_default_action = accept
smtpd_milters = unix:/var/run/spamass.sock
# autoriser les alias (mailng listes...)
allow_mail_to_commands = alias,forward
allow_mail_to_files = alias,forward
Dans le chier /etc/postfix/aliases, chaque ligne dnit un alias. Par exemple
# cat /etc/postfix/aliases
#secretariat
secretariat:emilie
#pour le webmaster
webmaster:tom,martin
#administrateur (!= root)
administrateur:david,christian
Dans le chier de blacklist /etc/postfix/access, on trouve des expditeurs/domaines et
de directives OK ou REJECT. Aprs REJECT de faon optionnelle un code derreur et un texte.
# cat /etc/postfix/access
harrass.com REJECT
badguy@ugly.com REJECT
8.2 Antispam par Greylisting
Le greylisting consiste en ce que le serveur, la rception dun mail, rejette temporairement
le mail pour que le serveur SMTP qui e expdi le mail le reprsente plus tard. La plupart
des spammeurs nattendent pas, dabord pour une raison de cot, et ensuite parce que a
augmenterait le risque dtre pris en agrant dlit.
Un exemple de logiciel de greylisting utilisable avec postx est postgrey. On ajoute la ligne
suivante la section smtpd recipient restrictions de /etc/postfix/main.cf :
51
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
check_policy_service inet:[127.0.0.1]:60000,
De plus, il faut congurer postgrey (notamment le temps que le SMTP expditeur doit at-
tendre avant de reprsenter le mail) dans le chier /etc/default/postgrey :
# cat /etc/default/postgrey
# postgrey startup options, created for Debian
# (c)2004 Adrian von Bidder <avbidder@fortytwo.ch>
# Distribute and/or modify at will.
# you may want to set
# --delay=N how long to greylist, seconds (default: 300)
# --max-age=N delete old entries after N days (default: 30)
# see also the postgrey(8) manpage
POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=500 --auto-whitelist-clients=5"
# the --greylist-text commandline argument can not be easily passed through
# POSTGREY_OPTS when it contains spaces. So, insert your text here:
#POSTGREY_TEXT="Your customized rejection message here"
Postgrey est pourvu dun systme dauto-whitelist : un expditeur qui a russi faire passer
5 (par dfaut) mails est mis dans une whitelist et ses mails sont par la suite transmis sans dlai ;
cel minimise linconvnient du dlai pour les utilisteurs. Il y a aussi possibilit de whitelister
des domaines dans /etc/postgrey/whitelist clients.local.
Les logiciels postx et postgrey communiquent travers une socket TCP, par dfaut sur le
port 60000.
8.3 spamassassin
Le logiciel spamassassin permet de dtecter les spams, et ventuellement de les rediriger. Pour
cel, spamassassin attribue un score chaque mail. Plus le score est lev, plus le mail a de
chances dtre un spam.
Pour utiliser spamassassin, il faut lactiver dans postx en modiant le chier /etc/postfix/master.cf.
1) Rajouter loption -o content filter=spamassassin au service smtp :
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - - - - smtpd
-o content_filter=spamassassin
2) Rajouter une interface postx.
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# maildrop. See the Postfix MAILDROP_README file for details.
52
Chapitre 8 : Congurer un serveur de mail avec postfix
#
spamassassin unix - n n - - pipe
user=nobody argv=/usr/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}
Il faut aussi congurer spamassassin dans le chier /etc/spamassassin/local/cf
# cat /etc/spamassassin/local.cf
# This is the right place to customize your installation of SpamAssassin.
#
# See perldoc Mail::SpamAssassin::Conf for details of what can be
# tweaked.
#
# Only a small subset of options are listed below
#
###########################################################################
# Add *****SPAM***** to the Subject header of spam e-mails
#
rewrite_header Subject *****SPAM*****
# Save spam messages as a message/rfc822 MIME attachment instead of
# modifying the original message (0: off, 2: use text/plain instead)
#
#report_safe 1
# Set which networks or hosts are considered trusted by your mail
# server (i.e. not spammers)
#
trusted_networks 193.49.118.0/24.
# Set file-locking method (flock is not safe over NFS, but is faster)
#
# lock_method flock
# Set the threshold at which a message is considered spam (default: 5.0)
#
required_score 5.0
# Use Bayesian classifier (default: 1)
#
use_bayes 1
53
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
# Bayesian classifier auto-learning (default: 1)
#
bayes_auto_learn 1
# Enable or disable network checks
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1
#
# # Mail using languages used in these country codes will not be marked
# # as being possibly spam in a foreign language.
ok_languages all
# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales all
# Set headers which may provide inappropriate cues to the Bayesian
# classifier
#
# bayes_ignore_header X-Bogosity
# bayes_ignore_header X-Spam-Flag
# bayes_ignore_header X-Spam-Status
Enn, pour plus decacit, il faut charger des modules dans /etc/spamassassin/v310.pre.
Pour activer un module, dcommentez la ligne correspondante. Chaque module correspond
une technique de dtection de spam qui fait augmenter le score des mails.
8.4 Milter antivirus amavis
Le logiciel amavis est un antivirus qui va scanner les pices jointes aux mails et liminer certains
contenus.
Pour lutiliser, il faut rajouter la ligne suivante au chier /etc/postfix/main.cf
content_filter = smtp-amavis:[127.0.0.1]:10024
Il faut aussi rajouter une interface postx dans le chier /etc/postfix/master.cf (en
noubliant pas de personaliser le rseau local) :
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# maildrop. See the Postfix MAILDROP_README file for details.
#
54
Chapitre 8 : Congurer un serveur de mail avec postfix
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookup=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
# ne pas oublier de personaliser le rseau local
-o mynetworks=127.0.0.0/8 192.168.1.0/24
-o strict_rfc821_envelopes=yes
8.5 spamass-milter
Le logiciel spamass-milter est un milter qui permet dliminer certains mails qui sont des
spams. spamassassin est un antispam qui attribue un score aux mails suivant leurs chances
dtre des spams. Plus le score est lev, plus le mail a de chances dtre un spam. On peut
mettre spamass-milter en sortie de spamassassin pour rejeter les mails qui ont un score lev
dans spamassassin. Il vaut mieux mettre un seuil lev (15 par exemple) pour viter tout faux
positifs (il nest pas trop grave daccepter un faux ngatif : lutilisateur reoit un spam, mais
cest trs gnant de rejeter un faux positifs : un vrai mail ne parvient pas au client)
8.5.1 Conguration
a) main.cf Dans le chier de conguration de postx /etc/postx/main.cf , ajoutez les lignes :
# spamass-milter configuration
# loption accept est plus sre pour ne pas perdre de mails
milter_default_action = accept
smtpd_milters = unix:/var/run/spamass.sock
# change to this for use as a non_smtpd_milter :
#non_smtpd_milters = unix:/var/run/spamass.sock
Les donnes sont transmises du dmon de spamassassin (appel spamd) spamass-milter
via une socket. Cette socket est transmise suivant le protocole unix (sur la machine locale) via
un chier physique de type socket ici nomm spamass.sock.
55
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
8.5.2 /etc/default/spamass-milter
Voici le chier /etc/default/spamass-milter
# spamass-milt startup defaults
# OPTIONS are passed directly to spamass-milter.
# man spamass-milter for details
# Default, use the nobody user as the default user, ignore messages
# from localhost
# this one is the right one for use a smtpd_milters
# Reject emails with spamassassin scores > 15 : option -r 15
# Do not modify Subject:, Content-Type: or body option -m
OPTIONS="-u nobody -m -r 15 -i 127.0.0.1 -f -p /var/spool/postfix/var/run/spamass.sock"
SOCKET="/var/spool/postfix/var/run/spamass.sock"
SOCKETOWNER="postfix:postfix"
SOCKETMODE="0660"
8.5.3 Cration de la socket
Il faut crer une premire fois les sockets dans le systme de chiers (car la socket nest pas
cre lors de lappel automatique de spamas-milter par postx).
mkdir /var/spool/postfix/var
mkdir /var/spool/postfix/var/run
puis crer les sockets :
# spamass-milter -m -u nobody -f -p /var/run/spamass.sock
# chown postfix.users /var/run/spamass.sock
# spamass-milter -m -u nobody -f -p /var/spool/postfix/var/run/spamass.sock
# chown postfix.users /var/spool/postfix/var/run/spamass.sock
(si jai bien compris, postx tourne en chroot et pas spamass-milter et il faut crer les
deux sockets deux endroits dirents pour quil y ait communication entre les deux sockets.
feedback wellcome)
Comme il faut faire ces quatres dernires commandes chaque reboot, on peut les mettre
dans un script (par exemple) appel /etc/init.d/initspamass et faire lancer ce script au dma-
rage
# chown +x /etc/init.d/initspamass
# update-rc.d initspamass defaults 99
Il faut mettre 99 pour tre sr que ce script est excut aprs le dmon /etc/init.d/spamass-
milter au dmarage.
56
Chapitre 8 : Congurer un serveur de mail avec postfix
8.5.4 Vrication dans les logs
# grep Milter /var/log/mail.log
# grep milter /var/log/mail.log
May 27 08:36:46 laic spamass-milter[29641]: spamass-milter 0.3.1 starting
#
57
Troisi`eme partie
Routage, rewall
58
Chapitre 9
Routage
9.1 Adresses IP et MAC
Chaque interface de chaque ordinateur sera identi par
Son adresse IP : une adresse IP (version 4, protocole IPV4) permet didentier un hte
et un sous-rseau. Ladresse IP est code sur 4 octets. (les adresses IPV6, ou IP next
generation seront codes sur 6 octets).
Ladresse mac de sa carte rseau (carte ethernet ou carte wi) ;
Une adresse IP permet didentier un hte. Une passerelle est un ordinateur qui possde
plusieurs interfaces et qui transmet les paquets dune interface lautre. La passerelle peut ainsi
faire communiquer dirents rseaux. Chaque carte rseau possde une adresse MAC unique
garantie par le constructeur. Lorsquun ordinateur a plusieurs plusieurs interfaces, chacune
possde sa propre adresse MAC et son adresse IP. On peut voir sa conguration rseau par
ifconfig.
$ /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:B2:3A:24:F3:C4
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::2c0:9fff:fef9:95b0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:5
collisions:0 txqueuelen:1000
RX bytes:1520 (1.4 KiB) TX bytes:2024 (1.9 KiB)
Interrupt:10
On voit ladresse MAC 00:B2:3A:24:F3:C4 et ladresse IP 192.168.0.2. Cela signie que
le premier octet de ladresse IP est gal 192, le deuxime 168, le troisme octet est nul, et le
quatrime vaut 2.
59
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
9.2 Sous-rseaux
9.2.1 Classes de sous-rseaux
Les addresses IPV4 sont organises en sous-rseaux. Chaque sous-rseau possde une adresse,
qui est une partie de ladresse IP des machines de ce sous-rseau.
Par exemple, ladresse IP 192.168.4.35 appartient au sous-rseau 192.168.4, parfois aussi
not 192.168.4.0.
Les sous-rseaux sont organiss en classes. Chaque classe de sous-rseaux correspond des
rseaux pouvant contenir un certain nombre de machines.
Classe A : les adresses de de 1.0.0.0 127.0.0.0.
Lidentiants du rseau est alors sur 8 bits et les identiants de machine sont sur 24 bits
(plusieurs millions de machines par sous-rseau ;
Classe B : les adresses de de 128.0.0.0 191.255.0.0. Lidentiants du rseau est
alors sur 16 bits et les identiants de machine sont sur 16 bits (plus de 65000 machines
par sous-rseau) ;
Classe C : les adresses de de 192.0.0.0 223.255.255.0. Lidentiants du rseau est
alors sur 24 bits et les identiants de machine sont sur 8 bits (au plus 254 machines par
sous-rseau, numrotes de 1 254) ;
9.2.2 Masque de sous-rseau
Un masque de sous-rseau est une donne sur 4 octets qui, avec ladresse du sous-rseau,
caractrise les IP du sous-rseau. Un bit du masque de sous-rseau est 1 si pour toutes les
adresses IP du sous-rseau, ce mme bit est le mme pour ladresse IP et le sous-rseau.
Par exemple, pour le rseau de classe A 37.0.0.0 avec le masque de sous-rseau 255.0.0.0,
les 8 premiers bits de toutes les adresses IP du sous-rseau valent 37.
Autre exemple : pour le sous-rseau de classe C 193.56.49.0 et le masque de sous-rseau
255.255.255.0, les 24 premiers bits de toutes les IP du sous-rseau sont 193.56.49.
On peut dsigner un sous-rseau par son adresse et son masque, mais on peut aussi d-
signer le sous-rseau en donnant seulement le nombre de bits du masque. On parle alors,
pour reprendre les deux exemples prcdents, du sous-rseau 37.0.0.0/8 ou du sous-rseau
193.56.49.0/24.
9.3 Routage
Le routage permet de faire communiquer plusieurs sous-rseaux. Une passerelle (en anglais
gateway) est en communication avec dirents sous-rseaux sur direntes interfaces, et assure
la communication entre les dirents sous-rseaux (voir gure 9.1).
9.3.1 Routes
Une route dnie sur une station est un chemin que doivent prendre les paquets destination
dun certain sous-rseau. Prenons lexemple (voir gure 9.1) dune station, appele station 1,
60
Chapitre 9 : Routage
dadresse IP 121.65.77.8 sur un rseau 112.0.0.0/8. Elle est connecte une passerelle qui a
pour IP dans ce rseau 112.65.123.3 sur son interface eth0. La passerelle est aussi connecte
au rseau 192.168.0.0/24 via son interface eth1 qui a pour IP 192.168.0.1. Si la station 1
Figure 9.1: Exemple de passerelle faisant communiquer deux rseaux
veut communiquer directement avec la station, appele station 6, dadresse IP 192.168.0.2
sur le rseau 192.168.0.0/24, trois condition doivent tre runies ;
Une route doit tre dnie sur la station 1 indiquant que les paquets destination du
rseau 192.168.0.0/24 doivent passer par la passerelle 112.65.123.3. Pour cel, on
peut utiliser la commande route :
# route add -net 192.168.0.0/24 gw 112.65.123.3
Une route doit tre dnie sur la station 6 indiquant que les paquets destination du
rseau 112.0.0.0/8 doivent passer par la passerelle 192.168.0.1 ; Pour cel, on peut
utiliser la commande route :
# route add -net 112.0.0.0/8 gw 192.168.0.1
La passerelle doit tre congure pour transmettre (ou forwarder) les paquets IP dun
rseau lautre, ce qui se fait par la commande :
# echo 1 >/proc/sys/net/ipv4/ip_forward
Remarque 9.3.1 Il faut refaire ces commandes aprs un reboot. Pour viter de relancer ces
commandes manuellement, on peut les mettre dans des scripts dinitialisation au dmarage
avec la commande update-rc.d (sous debian)). Pour ajouter une script my script linitia-
lisation :
# mv my_script /etc/init.d
# update-rc.d my_script defaults
61
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
On peut voir ltat des routes avec la commande route -n. Par exemple, sur la station 1 :
# route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 112.65.123.3 255.255.255.0 U 0 0 0 eth2
etc...
Sur la station 6
# route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
112.0.0.0 192.168.0.1 255.0.0.0 U 0 0 0 wlan0
etc...
Pour supprimer une route, par exemple vers le rseau 193.86.46.0/24 via une passerelle
196.24.52.1, on fait :
# route del -net 193.86.46.0/24 gw 196.24.52.1
9.3.2 Route par dfaut (gateway)
Quand on a dni un certain nombre de routes sur une station, on peut dnir une route
spciale pour les paquets IP destination des rseaux non prvus dans les autres routes. On
appelle une telle route une route par dfaut. En gnral, cest la route quil faut employer pour
aller sur internet. On emploie le rseau 0.0.0.0 (masque 255.255.255.255). Pour dnir une
route par dfaut on peu employer route. Par exemple, pour dnir la route par dfaut via la
passerelle 194.56.87.1 :
route add default gw 194.56.87.1
Pour supprimer cette mme route :
route del default gw 194.56.87.1
9.3.3 NAT et masquerading
Lorquun hte ayant une adresse IP sur un rseau local cherche se connecter sur un rseau
plus vaste, par exemple sur internet, via une passerelle, cet hte a besoin dune adresse IP sur
le rseau vaste. Pour cel, soit on demande ce que les adesses du rseau local soient routes
sur le rseau global, mais il faut alors demander rserver un plage dadresses sur le rseau
global, soit ladministrateur de la passerelle a la possibilit de prter lIP de la passerelle aux
machines du rseau local. Pour cela, on utilise iptables avec NAT. Par exemple, si la passerelle
se connecte internet via son interface eth0, il sut dexcuter la commande suivante sur la
passerelle :
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Toute machine du rseau local (par exemple 192.168.0.0/24) qui se connecte internet
via cette passerelle aura alors ladresse IP de la passerelle sur internet. On peut aussi donner
aux machines du rseau local une autre adresse IP que lon spcie avec --to :
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 193.56.17.9
Nous aurons un apperu plus complet des possibilits diptables au chapitre 11.
62
Chapitre 10
Protocoles, services, ports
10.1 La listes des protocles connus du systmes
Un protocole (IP, TCP, UDP,...) est un mode de communication rseau, cest dire une
manire dtablir le contact entre machine et de transfrer les donnes. Sous linux, la liste des
protocoles reconnus par le systme se trouve dans le chier /etc/protocols.
$ cat /etc/protocols
# Internet (IP) protocols
ip 0 IP # internet protocol, pseudo protocol number
#hopopt 0 HOPOPT # IPv6 Hop-by-Hop Option [RFC1883]
icmp 1 ICMP # internet control message protocol
igmp 2 IGMP # Internet Group Management
ggp 3 GGP # gateway-gateway protocol
ipencap 4 IP-ENCAP # IP encapsulated in IP (officially IP)
st 5 ST # ST datagram mode
tcp 6 TCP # transmission control protocol
egp 8 EGP # exterior gateway protocol
igp 9 IGP # any private interior gateway (Cisco)
pup 12 PUP # PARC universal packet protocol
udp 17 UDP # user datagram protocol
hmp 20 HMP # host monitoring protocol
xns-idp 22 XNS-IDP # Xerox NS IDP
rdp 27 RDP # "reliable datagram" protocol
etc... etc...
A chaque protocole est associ un numro didentication standard. Le protocle IP est
rarement utilis directement dans une application et on utilise le plus couramment les protocoles
TCP et UDP.
10.1.1 Le protocole TCP
Le protocole TCP sert tablir une communication able entre deux htes. Pour cela, il assure
les fonctionnalits suivantes :
63
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
Connexion. Lmetteur et le rcepteur se mettent daccord pour tablir un connexion. La
connexion reste ouverte jusqu ce quon la referme.
Fiabilit. Suite au transfert de donnes, des tests sont faits pour vrier quil ny a pas
eu derreur dans la transmission. De plus, les donnes arrivent dans lordre o elles ont
t mises.
Possiblilit de communiquer sous forme de ot de donnes, comme dans un tube (par
exemple avec les fonctions read et write).
10.2 Services et ports
Il peut y avoir de nombreuses applications rseau qui tournent sur la mme machine. Les
numros de port permettent de prciser avec quel programme nous souhaitons dialoguer par le
rseau. Chaque application qui souhaite utiliser les services de la couche IP se voit attribuer un
umro de port. Un numro de port est un entier sur 16 bits (deux octets). Dans un programme
C, on peut stocker un numro de port dans un unsigned short. Il y a un certain nombre de
ports qui sont rservs des services standards. Pour connatre le numro de port correspondant
un service tel que ssh, on peut regarder dans le chier /etc/services.
# Network services, Internet style
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send protocol
msp 18/udp
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
fsp 21/udp fspd
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp
telnet 23/tcp
smtp 25/tcp mail
time 37/tcp timserver
time 37/udp timserver
rlp 39/udp resource # resource location
nameserver 42/tcp name # IEN 116
whois 43/tcp nicname
64
Chapitre 10 : Protocoles, services, ports
tacacs 49/tcp # Login Host Protocol (TACACS)
tacacs 49/udp
re-mail-ck 50/tcp # Remote Mail Checking Protocol
re-mail-ck 50/udp
domain 53/tcp nameserver # name-domain server
domain 53/udp nameserver
mtp 57/tcp # deprecated
etc...
Ladministrateur du systme peut dnir un nouveau service en lajoutant dans /etc/services
et en prcisant le numro de port. Les numros de port infrieurs 1024 sont rservs aux ser-
veurs et dmons lancs par root (ventuellement au dmarage de lordinateur), tels que le
serveur dimpression /usr/sbin/cupsd sur le port ou le serveur ssh /usr/sbin/sshd sur le
port 22.
65
Chapitre 11
Firewall congurs avec iptables
Le pare-feu (en anglais rewall ) netlter, congur avec la commande iptables, permet de
ltrer les paquets rseau entrants, sortants, et transmis, sur une machine. On peut ltrer par
interface, par port, par adresse de source ou de destination des paquets. La conguration
diptables permet aussi de partager une adresse IP (par exemple sur internet) entre plusieurs
machines dun rseau local.
11.1 Principe diptables
11.1.1 Les politiques
Lorsquun paquet IP rentre ou sort de votre machine, on peut adopter trois politiques di-
rents : ACCEPT, REJECT ou DROP. Avec la politique ACCEPT, le paquet est simplement transmis
normalement. Avec la politique REJECT le paquet nest pas transmis et la machine source est
prvenue. Avec la politique DROP, je paquet nest pas transmis et la machine source nest pas
prvenue.
11.1.2 Les directions de paquets
Il y a principalement trois directions de paquets (ces directions de paquets sont appels chanes)
qui circulent sur la machine :
1. INPUT : paquets entrants destination de la machine et venant dune autre machine ;
2. OUTPUT : paquets sortants venant de la machine et destination dun autre machine ;
3. FORWARD paquets venant dun autre machine et destination dune troisime machine
lors de lutilisation de la machine comme passerelle pour le routage.
11.1.3 Les rgles
La conguration iptables consiste en un ensemble de rgles. Une rgle est une commande iptables
en bash comprenant :
-A chaine ou -I chaine : La chane INPUT, OUTPUT ou FORWARD ;
-i interface et/ou -o interface Les interfaces dentre et de sortie (optionnel) ;
66
Chapitre 11 : Firewall congurs avec iptables
-p protocole Le protocole (si besoin) (voir /etc/protocols) ;
--sport ou --dport ; Les ports de source ou de destination (si besoin) ;
-s adresse ou -d adresse : Ladresse (ou le sous-rseau) de provenance ou de destina-
tion (optionnel). On pet aussi utiliser la ngation (avec !) pour exclure une adresse au
lieu dinclure une adresse ;
La politique ACCEPT, REJECT ou DROP, spcie avec loption -j.
Lordre des rgles est important. Si lon met, par exemple, un politique de rejet systmatique
dun certain type de paquets, on peut ensuite mettre une rgles qui accepte ce type de paquet
partir dune certaine machine ou dun certain sous rseau. Cest la dirence entre -A et -I.
Le -A rajoute la rgle la n dune chane et le -I au dbut.
Pour vider toutes les rgles :
iptables -F chane
Pour mettre une politique par dfaut (qui sapplique tous les paquets sauf rgle contraire) :
iptables -P chane politique
En gnral, on met toutes les rgles dans un script qui va crer toutes les tables. On peut aussi
lancer ce script automatiquement au dmarage avec update-rc.d.
11.2 Exemple script de conguration
# On vide toutes les rgles
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
# Politique par dfaut (version trs scurise)
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Autoriser le trafic sur linterface loopback
iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT
# protocole ICMP (dont ping) dans tous les sens
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
# ssh vers lextrieur (client ssh) via linterface eth0
iptables -I INPUT -p tcp -i eth0 --sport ssh -j ACCEPT
67
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
iptables -I OUTPUT -p tcp -o eth0 --dport ssh -j ACCEPT
# ssh vers la machine (serveur ssh) via linterface eth0
iptables -I INPUT -p tcp -i eth0 --dport ssh -j ACCEPT
iptables -I OUTPUT -p tcp -o eth0 --sport ssh -j ACCEPT
Pour lutilisation dun client (ssh, telnet,...), le OUTPUT a pour destination le port corres-
pondant au service et le INPUT a pour source le port correspondant au service.
Pour lutilisation en tant que serveur (ssh, telnet,...), le OUTPUT a pour source le port
correspondant au service et le INPUT a pour destination le port correspondant au service.
Dune manire gnrale, les ports rservs (22 pour ssh, 80 pour www, etc...) sont utiliss
cot serveur. Les ports utiliss cot client sont des ports non privilgis numrots de
1024 65535.
11.3 Le cas de FTP
Le service FTP mrite une attention particulire car aprs la connexion via le port 21 du
serveur, le serveur demande une identication sur le port 113 du client. Aprs ltablissement
de la connection, les donnes sont tansmises sur encore un autre port, ce qui permet de garder
le port 21 libre pour les commandes (put, get,...) : on parle de connexion RELATED. (rviser
son cours sur les sockets : lors de la connection, une nouvelle socket est crer qui va trater
le client dans un processus ls ou un thread). Il faut alors autoriser toutes ces connexions, y
compris les connexions RELATED et les connexions dj tablies ESTABLISHED.
Voici les autorisations minimales sur un serveur FTP avec politique DROP par dfaut :
# chargement du module du noyau spcialis :
modprobe ip_conntrack_ftp
# autorise les connexions FTP de commande vers lintrieur :
iptables -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
# autorise les demande didentification vers lextrieur
iptables -A OUTPUT -m state --state NEW -p tcp --dport 113 -j ACCEPT
# # # autorise les connexions FTP de donnes (ou autre connexion RELATED)
iptables -A INPUT -m state --state RELATED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED -j ACCEPT
# autorise les connexions dj tablies
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
11.4 SNAT, DNAT et masquerading
Dans cette section, on suppose que les routes ont t tablies correctement et que la passerelle
a t congure pour forwarder les paquet IP (voir chapitre 9).
68
Chapitre 11 : Firewall congurs avec iptables
Lorquun hte ayant une adresse IP sur un rseau local cherche se connecter sur un rseau
plus vaste, par exemple sur internet, via une passerelle, cet hte a besoin dune adresse IP sur
le rseau vaste. Pour cel, soit on demande ce que les adesses du rseau local soient routes
sur le rseau global, mais il faut alors demander rserver un plage dadresses sur le rseau
global, soit ladministrateur de la passerelle a la possibilit de prter lIP de la passerelle aux
machines du rseau local. Pour cela, on utilise iptables avec NAT. Par exemple, si la passerelle
se connecte internet via son interface eth0, il sut dexcuter la commande suivante sur la
passerelle :
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Toute machine du rseau local (par exemple 192.168.0.0/24) qui se connecte internet
via cette passerelle aura alors ladresse IP de la passerelle sur internet. On peut aussi donner
aux machines du rseau local une autre adresse IP que lon spcie avec --to :
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 193.56.17.9
On peut aussi changer ladresse de destination avec DNAT. Cel permet de rediriger, par
exemple, un accs sur un certain port vers une autre machine. Par exemple, la passerelle peut
rediriger les accs WEB (port 80) via son interface eth1 sur un serveur web situ sur une autre
machine dIP 192.168.0.5 sur le rseau local :
iptables -A FORWARD -p tcp --sport www -j ACCEPT
iptables -A FORWARD -p tcp --dport www -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport www -j DNAT --to 192.168.0.5
69
Quatri`eme partie
LDAP
70
Chapitre 12
Protocole dannuaire LDAP
LDAP (Lightweight Directory Access Protocol) est le protocole dannuaire sur TCP/IP. Un
annuaire est une base de donnes pouvant reprsenter des personnes ou des lments dinfra-
structure rseau ou autre. Le but est laccs rapide linformation des attributs des objets en
lecture via des requtes. Les accs en criture sont moins optimiss. Cest ce qui direncie les
services dannuaire des systme de gestion de bases de donnes (SGBD) traditionnels. Pour
cel, les donnes de lannuaire sont organises de manire arborescente.
12.1 Le Directory Information Tree (DIT) et les entres
Les donnes de lannuaire sont stockes dans un arbre appel Directory Information Tree (DIT).
Figure 12.1: Exemple de Directory Information Tree (DIT)
Chaque noeud est une entre de lannuaire (Directory Service Entry, DSE).
Au sommet de larbre se trouve Root Entry (ou Sux ou BaseDN) qui caractrise la base
de donnes.
Les autres entres appartiennent direntes classes (objectClass) qui reprsentent dif-
frentes sortes dobjets (des groupes (objectClass organizationalUnit, ou), ou des personnes
(objectClass person ou inetOrgPerson, uid), ou des sevices, etc.)
Chaque objectClass comporte des attributs qui caractrisent les dirents objets de la classe.
Il y a des atributs obligatoires (must) et des attributs facultatifs (may).
71
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
Par exemple, une personne de lobject class person doit avoir un objectclass, un nom
de famille sn, nom usuel ou nom complet cn, et peut avoir un prnom (givenname), une
description, un telephonenumber, un userpassword,...
Les classes peuvent driver les unes des autres comme inetOrgPerson qui hrite des attri-
buts de person.
Lorsquon cre une nouvelle objectClass, il faut la soumettre lInternet Assigned Num-
bers Authority (IANA) pour que la classe soit ociellement rfrence dans LDAP.
12.2 Le Distinguished Name (DN)
Le DN dune entre est le chemin dans larbre jusqu cette entre partir de la racine (voir
la gure 12.2). Il caractrise lentre et permet un accs rapide cette entre et ses attributs
dans le DIT.
Exemple : cn=Remy, ou=personnes, dc=societe, dc=com
Figure 12.2: Exemple de Distinguished Name dn:cn=Remy, ou=personnes, dc=societe,
dc=com.
12.3 Le modle Fonctionnel
Le modle fonctionnel perme deectuer des interrogations (recherches dans la base), de com-
paraison, de mises jour (cration, modication dentres), dauthentication (pour droits
daccs) et de contrle sur le DIT.
12.3.1 Requtes
Les requtes permettent de rechercher des objets et dacher leurs attributs suivant dirents
critres.
base object : lendroit de larbre o doit commencer la recherche (voir gure 12.3). En
eet, on neectue pas ncessairement la recherche dans larbre entier. Par exemple, si
lon recherche une personne, dans lexemple de la gure 12.1, on recherchera en dessous
de lou personnes. On vite ainsi le cot de la recherche dans le reste de larbre.
72
Chapitre 12 : Protocole dannuaire LDAP
scope : la profondeur de la recherche. Exemple : scope = base (1 seul noeud le base
object), scope=subtree (tout le sous-arbre sous le base object).
derefAliases : si on suit les liens vers dautres BD ou pas
size limit : nombre de rponses limite (garde-fou)
time limit : temps maxi allou pour la recherche (garde-fou)
attrOnly : renvoie ou pas la valeur des attributs en plus de leur type
search filter : le ltre de recherche (requte proprement dite).
list of attributes : la liste des attributs que lon souhaite connatre
Figure 12.3: Le base object et le subtree dune requte.
12.3.2 Les ltres de recherche
Syntaxe gnrale des ltres (operator(search operation)(search operation)...))
Exemples de ltres de recherche :
(sn=Rmy Malgouyres) galit Nom de famille vaut Malgouyres
(cn=*elon*) sous-chane Nom contient elon
(cn=Malgoire)
approximation le nom sonne comme Malgoire
(printedPages>=10000) comparaison printedPages suprieur 10000
73
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
(sn=*) existance Tous les noms propres
(&(ou=personnes)(telephoneNumber=*)) ET personne et lattribut numro de tl-
phone est connu
(|(ou=clermont)(ou=le-puy)) OU ou vaut clermont ou le-puy
(!(mail=*)) NON Toutes les entres sans attribut mail
Exemple de ltre compos : (&(objectclass=person)((tel=0473*))) Toutes les en-
tres de type utilisateur avec numro de tlphone commenant par 0473.
12.3.3 Le client ldapsearch
Le client ldapsearch (paquet debian ldap-utils) permet deectuer des requtes en ligne de
commande dans un annuaire LDAP.
On spcie les caractristiques de la requtes (section 12.3.1) avec les options suivantes
(liste non exhaustive, voir man ldapsearch(1) pour plus de dtails) :
-b base object dn : spcication du base object (endroit o commencer la recherche
dans larbre) ;
-H ldaphost : spcification du serveur LDAP consulter ;
ltre : ltre appliquer pour la requte (voir section 12.3.2).
atributes : les attributs des objets acher en sortie de la requte.
-D DN de lutilisateur : connection en sidentiant en tant quutilisateur via son
DN.
-W : prompter pour demander le mot de passe (sutilise avec -D)
-x : authentication simple non crypte. Pour une connection plus sre, utiliser par
exemple SASL.
Exemple de requtes eectues en ligne de commande avec ldapsearch :
Achage des personnes avec un numro de tlphone sur le server LDAP example.com :
ldapsearch -x -H ldap://example.com -b dc=personnes,dc=societe,dc=com telephoneNumber=*
Achage du nom commun (cn) et de la description de tous les objets de la classe simpleSecurityObject.
Connection en tant quadministrateur avec prompt de mot de passe.
ldapsearch -x -D cn=admin,dc=societe,dc=com -W -H ldap://bigboss -b dc=societe, dc=com objectClass=simpleSecurityObject cn description
74
Chapitre 12 : Protocole dannuaire LDAP
12.3.4 Mise jour de la base
Les oprations de mise jour permettent de modier ltat de la base.
Oprations add, delete, rename, modify ;
add : Ajout dune entre qui nexiste pas. Le parent de lentre doit avoir t pralablement
cr. Les attributs objigatoires de lentre (suivant son objectClass) doivent tre spcis.
rename : Modication du DN dune entre. La nouvelle entre doit avoir un parent exis-
tant. Tout le sous-arbre de cette entre est dplac.
modify : modication du contenu (attributs, objectClass...) dune entre.
delete : suppression dune entre. Lentre ne doit pas avoir denfants. Supprimer les
sous-arbres rcursivement.
12.4 LDIF : LDAP Data Interchange Format
Format de chier pour faire des imports/export dentres dans une base ou de bases ou bien
faire des modications sur les entres.
Les chiers LDIF sont cods en ASCII (norme UTF-8). Toute valeur qui nest pas en ASCII
(nombre, etc..) est code en ASCII en base 64.
Pour importer les entres dun chier LDIF en sidentiant partir dun DN de la base (ici
le DN cn=admin, dc=societe, dc=com)
ldapadd -x -D cn=admin, dc=societe, dc=com -f mon_fichier.ldif -W
La forme gnrale est :
dn: <distinguished name
objectClass: <object class>
objectClass: <object class>
[...]
attribute type:<attribute value>
attribute type:<attribute value>
[...]
Exemple de cration dOrganisational Unit :
dn: ou=personnes,dc=societe,dc=com
objectClass: organizationalUnit
ou: personnes
Exemple dentre de type personne (voir gure 12.1) :
dn: cn=Rmy Malgouyres, ou=personnes, dc=societe, dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: remalgou
75
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
cn: Rmy Malgouyres
sn: Malgouyres
givenName: Rmy
mail: remy.malgouyres@societe.com
telephoneNumber: 04 73 17 70 00
userPassword: {sha}GBKC57D5LE
dn: cn=David Delon, ou=personnes, dc=societe, dc=com
objectClass: top
objectClass: person
objectClass: organizationalPersonobjectClass: inetOrgPerson
uid: dadelon
cn: David Delon
sn: Delon
givenName: David
mail: david.delon@societe.com
userPassword: {sha}FDHS5J34AH
La forme gnrale dune mise jour en mode commande est :
dn: distinguished name
changetype identifier
change operation identifier
list of attributes...
-
change operation identifier
list of attributes
Exemple :
dn: cn=Malgouyres, ou=personnes, dc=societe, dc=com
changetype: modify
replace: telephonenumber
telephonenumber: 04 73 17 70 00
-
add: mobile
mobilenumber = 06 07 08 09 10
12.5 Accs la base partir dun client internet
syntaxe :
ldap[s]://<hostname>:<port>/<base_dn>?<attributes>?<scope>?<filter>
exemples :
Toute le sous arbre de ou=personnes,dc=societe,dc=com :
ldap://ldap.societe.com/ou=personnes,dc=societe,dc=com
Telephone number de toutes les personnes de nom de faille Malgouyres
76
Chapitre 12 : Protocole dannuaire LDAP
ldap://ldap.societe.com/sn=Malgouyres,ou=personnes,dc=societe,dc=com?telephonenumber
Adresses mail de tous les utilisateurs de gmail
ldap://ldap.societe.com/ou=personnes,dc=societe,dc=com?mail?subtree?mail=*@gmail.com
12.6 Administrer OpenLDAP : slapd.conf
Le premier chier de conguration dOpenLDAP est /etc/ldap/sldapd.conf qui dcrit les
principaux paramtres de votre annuaire (voir man slapd.conf pour les nombreuses options) :
# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.8.8.6 2001/04/20 23:32:43 kurt Exp $
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
# Inclusion des schmas ncessaires
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
# Options que vous pouvez modifier
#pidfile //var/run/slapd.pid
#argsfile //var/run/slapd.args
#######################################################################
# ldbm database definitions
#######################################################################
# Choix du format de base de donnes pour le stockage des informations.
database ldbm
# Configurer le suffixe (racine) de lannuaire
# en fonction du domaine DNS
suffix "dc=societe,dc=com"
# ou dune autre organisation
#suffix "o=Ma Societe,c=FR"
# Ladministrateur de lannuaire
rootdn "cn=Manager,dc=societe,dc=com"
# Le mot de passe de ladministrateur, prfrer une option crypte
# La commande htpasswd peut trs bien faire laffaire pour encrypter
# rootpw secret
# rootpw {crypt}ijFYNcSNctBYg
77
Rmy Malgouyres, http://www.malgouyres.fr/ Administration systme et rseaux
# Emplacement de la base de donnes
directory /var/lib/ldap
# Cration des index.
# Comme pour une base de donnes, indexer les rubriques
# les plus utilises.
index objectClass,uid,uidNumber,gidNumber,memberUid eq
index cn,mail,surname,givenname eq,subinitial
# La rplication ne sera pas utilise ici
# Vous pouvez rpliquer tout ou partie dun arbre
# active par le daemon slurpd
# Directives de replication
# sinon les mettre dans un fichier part et utiliser
# replogfile /chemincomplet/du/fichier
# Indiquer quels sont les serveurs rplicats
# et la mthode dauthentification
# Ici le serveur local, se rpliquera sur ldap1
#replica host:ldap-1.example.com:389
# bindmethod=simple
# binddn="cn=replicat_slave1, dc=mydomain, dc=fr"
# credential=UnMotDePasse
# Accs par dfaut sur la base
defaultaccess read
Pour modier les droits daccs :
access to <what> [ by <who> <none | compare | search | read | write>]
# Donne un accs en criture pour le manager du domaine
access to * by dn="cn=Manager,dc=mydomain,dc=fr" write
# Donne un accs en lecture tout le monde sur la base
access to * by * read
# Donne un accs en criture sur un attribut pour le manager
# en lecture pour les autres.
access to attr=uid
by dn="manager,dc=mydomain,dc=fr" write
by * none
78