Héberger son serveur avec OpenBSD

Transcription

Héberger son serveur avec OpenBSD
Héberger son serveur
avec OpenBSD
L’auto-hébergement facile et sécurisé
—
Édition 2.0
Xavier Cartron – 12 février 2017– CC-BY-SA
Ce document propose des explications permettant d’héberger chez
soi certains services malheureusement trop souvent confiés à des tiers.
À la fin de la lecture, vous serez en mesure :
— D’héberger votre propre site web ;
— D’héberger votre courrier électronique ;
— De mettre en place une sauvegarde régulière de vos données ;
— De profiter de vos propres applications web : cloud, forum, wiki...
— D’héberger votre radio, un VPN, un service caché TOR...
Notez que les procédures détaillées ici peuvent aussi être déployées
sur des serveurs dédiés.
Cet ouvrage est publié sous licence CC-BY-SA à l’aide de txt2tags.
Les sources sont disponibles à cette adresse :
http://git.yeuxdelibad.net/auto-hebergement openbsd facile securise.
L’ensemble des configurations et extraits de code peuvent être
consultés en ligne à l’adresse suivante : http://yeuxdelibad.net/ah .
Pour contacter l’auteur, l’encourager, lui jeter des cailloux ou lui
dire merci, c’est par ici : https://yeuxdelibad.net/Divers/Contact.html.
2
TABLE DES MATIÈRES
Table des matières
1 Introduction
8
1.1
Avant-propos . . . . . . . . . . . . . . . . . . . . . . .
1.2
L’auto-hébergement : C’est quoi ? Des avantages ? Des
8
inconvénients ? . . . . . . . . . . . . . . . . . . . . . .
9
1.3
Pré-requis . . . . . . . . . . . . . . . . . . . . . . . . .
11
1.4
Quelques mots sur l’installation d’OpenBSD . . . . . .
11
1.4.1
12
Exemple d’installation d’OpenBSD . . . . . . .
2 Surveiller son serveur
22
3 Le Pare–feu
24
4 SSH
29
4.1
Connexion sans mot de passe . . . . . . . . . . . . . .
30
4.2
SFTP . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.3
SFTP avec chroot . . . . . . . . . . . . . . . . . . . .
32
4.3.1
Ajouter un compte sftp . . . . . . . . . . . . .
32
4.3.2
Transferts avec Firefox . . . . . . . . . . . . . .
33
4.3.3
Transferts avec Filezilla . . . . . . . . . . . . .
34
5 Un site web
36
5.1
Un site simple avec httpd . . . . . . . . . . . . . . . .
36
5.2
PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
5.2.1
Configuration minimale . . . . . . . . . . . . .
38
5.2.2
Installation de PHP plus complète . . . . . . .
39
5.2.3
PHP et WˆX . . . . . . . . . . . . . . . . . . .
41
5.3
HTTPS . . . . . . . . . . . . . . . . . . . . . . . . . .
42
5.4
Astuces pour httpd . . . . . . . . . . . . . . . . . . . .
43
5.5
Quelles permissions donner à mon site ? . . . . . . . .
44
5.6
Gestion des entêtes avec relayd . . . . . . . . . . . . .
46
5.6.1
48
Le cas https . . . . . . . . . . . . . . . . . . . .
3
TABLE DES MATIÈRES
6 Maintenir le système à jour
50
6.1
Mettre les paquets à jour . . . . . . . . . . . . . . . .
50
6.2
Mettre le système à jour . . . . . . . . . . . . . . . . .
50
6.2.1
Mise à jour manuelle . . . . . . . . . . . . . . .
51
6.2.2
Mise à jour automatique avec openup . . . . .
52
6.3
Être averti des mises à jour . . . . . . . . . . . . . . .
53
6.4
Changer de version . . . . . . . . . . . . . . . . . . . .
53
7 Les bases de données
54
7.1
SQlite . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
7.2
MariaDB (MySQL) . . . . . . . . . . . . . . . . . . . .
55
7.2.1
Créer une base de données . . . . . . . . . . . .
58
7.3
PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . .
60
8 Courrier électronique
62
8.1
Configuration auprès du registrar pour les mails . . . .
62
8.2
Création des certificats . . . . . . . . . . . . . . . . . .
63
8.3
Configuration d’Opensmtpd . . . . . . . . . . . . . . .
64
8.4
Dovecot pour l’imap . . . . . . . . . . . . . . . . . . .
66
8.5
Configurer son client de messagerie . . . . . . . . . . .
68
8.6
Ne pas être mis dans les spams . . . . . . . . . . . . .
69
8.6.1
Reverse DNS . . . . . . . . . . . . . . . . . . .
69
8.6.2
SPF . . . . . . . . . . . . . . . . . . . . . . . .
69
8.6.3
8.7
8.8
8.9
Signature DKIM . . . . . . . . . . . . . . . . .
69
Installer un antispam . . . . . . . . . . . . . . . . . . .
74
8.7.1
Spamassassin . . . . . . . . . . . . . . . . . . .
74
Antispam avec spamd (difficile) . . . . . . . . . . . . .
76
8.8.1
Comment ça marche ? . . . . . . . . . . . . . .
77
8.8.2
Mise en place . . . . . . . . . . . . . . . . . . .
77
8.8.3
Piéger les spammeurs . . . . . . . . . . . . . .
79
8.8.4
Voir l’activité de spamd . . . . . . . . . . . . .
79
8.8.5
Problèmes avec le greylisting . . . . . . . . . .
80
Ajouter un nouveau compte mail . . . . . . . . . . . .
84
4
TABLE DES MATIÈRES
8.9.1
Redirection de mail
. . . . . . . . . . . . . . .
86
8.9.2
Vérifier que tout fonctionne bien . . . . . . . .
86
9 Sauvegardes
88
9.1
Partitionnement du disque dur . . . . . . . . . . . . .
88
9.2
Sauvegarde du serveur . . . . . . . . . . . . . . . . . .
91
9.3
Sauvegarde de vos données personnelles . . . . . . . .
91
9.4
Un cloud synchronisé avec syncthing . . . . . . . . . .
92
10 Serveur de noms
95
10.1 Résolveur avec cache : Unbound
. . . . . . . . . . . .
11 Travaux pratiques
95
98
11.1 Un cloud avec NextCloud . . . . . . . . . . . . . . . .
98
11.2 Un espace de stockage avec BoZoN . . . . . . . . . . . 102
11.3 Un Webmail . . . . . . . . . . . . . . . . . . . . . . . . 104
11.4 Héberger son blog . . . . . . . . . . . . . . . . . . . . 108
11.5 Un CMS avec Wordpress . . . . . . . . . . . . . . . . . 112
11.6 CardDAV et CalDAV avec Baı̈kal . . . . . . . . . . . . 116
11.7 Un wiki . . . . . . . . . . . . . . . . . . . . . . . . . . 120
11.8 Des statistiques sur les visites de vos sites . . . . . . . 123
11.8.1 Avec webalizer . . . . . . . . . . . . . . . . . . 123
11.8.2 Avec piwik . . . . . . . . . . . . . . . . . . . . 128
12 Gopher
130
13 Seedbox
133
14 Serveur d’impression
139
14.1 Note à propos des imprimantes USB . . . . . . . . . . 141
15 TOR
144
15.1 Configurer un relais . . . . . . . . . . . . . . . . . . . 144
15.2 Configurer un service caché . . . . . . . . . . . . . . . 145
5
TABLE DES MATIÈRES
15.3 Informations sur la charge du serveur . . . . . . . . . . 147
15.3.1 Avec systat . . . . . . . . . . . . . . . . . . . . 147
15.3.2 Avec symon . . . . . . . . . . . . . . . . . . . . 147
16 Serveur de stockage
152
16.1 Solution du fainéant : SSH . . . . . . . . . . . . . . . . 152
16.2 Solution un poil plus compliquée : NFS . . . . . . . . 153
17 Proxy VPN (OpenVPN)
156
17.1 Préparation de la configuration . . . . . . . . . . . . . 157
17.2 Création des certificats . . . . . . . . . . . . . . . . . . 158
17.3 Configuration d’OpenVPN . . . . . . . . . . . . . . . . 159
17.4 Configuration réseau pour OpenVPN . . . . . . . . . . 162
17.5 Création des utilisateurs du VPN . . . . . . . . . . . . 162
17.6 Démarrage du VPN . . . . . . . . . . . . . . . . . . . 163
17.7 Configuration client . . . . . . . . . . . . . . . . . . . 163
18 Radio Web
166
18.1 Configuration d’icecast et mpd . . . . . . . . . . . . . 166
18.2 Diffuser une émission . . . . . . . . . . . . . . . . . . . 168
18.3 Montrer en ligne ce qui est joué . . . . . . . . . . . . . 171
19 Annexes
173
19.1 Liens et références . . . . . . . . . . . . . . . . . . . . 173
19.1.1 Références . . . . . . . . . . . . . . . . . . . . . 173
19.1.2 Liens . . . . . . . . . . . . . . . . . . . . . . . . 174
19.2 Obtenir un certificat SSL . . . . . . . . . . . . . . . . 176
19.2.1 Obtenir un certificat avec letsencrypt
. . . . . 176
19.2.2 Générer un certificat SSL auto-signé . . . . . . 178
19.3 Un nom de domaine . . . . . . . . . . . . . . . . . . . 180
19.4 Gestion des DNS . . . . . . . . . . . . . . . . . . . . . 180
19.5 Rediriger les ports sur son routeur . . . . . . . . . . . 182
19.6 Notes et astuces diverses . . . . . . . . . . . . . . . . . 183
6
TABLE DES MATIÈRES
19.6.1 Que faire en cas de problème ? . . . . . . . . . 183
19.6.2 Quelles permissions donner aux fichiers d’un site ?184
19.6.3 Générer des mots de passe aléatoires . . . . . . 187
19.6.4 Utiliser les portages de logiciels d’OpenBSD . . 189
19.6.5 Équivalences de commandes avec debian . . . . 190
19.6.6 Comment modifier un fichier ?
. . . . . . . . . 191
19.6.7 Gestion des services sous Openbsd . . . . . . . 192
19.6.8 Comment changer le mot de passe ? . . . . . . 192
19.7 FAQ : Foire aux questions . . . . . . . . . . . . . . . . 193
19.8 Merci ! . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
19.9 Exemples et fichiers . . . . . . . . . . . . . . . . . . . 197
19.9.1 /etc/pf.conf . . . . . . . . . . . . . . . . . . . . 197
19.9.2 /etc/httpd.conf . . . . . . . . . . . . . . . . . . 200
19.9.3 /etc/mail/smtpd.conf . . . . . . . . . . . . . . 206
19.9.4 /etc/relayd.conf . . . . . . . . . . . . . . . . . 207
20 ?
210
7
1
Introduction
1.1
Avant-propos
Vous êtes sur le point de plonger dans l’univers de l’auto-hébergement.
Il existe déjà de nombreuses explications sur le web pour réussir cette
aventure. Cependant, il me semble qu’un ouvrage cohérent est plus
pratique, surtout lorsqu’on découvre ces notions. Afin que ce voyage
soit le plus confortable possible, nous utiliserons le système OpenBSD.
Ce dernier est réputé pour être le plus sûr (rien que ça ! ). Qui plus
est, il est aussi, à mon avis, nettement plus simple à configurer que
d’autres systèmes basés sur Linux. Souhaitant rendre plus accessible
la démarche d’auto-hébergement, c’est un avantage non négligeable.
Toutefois, bien que les développeurs d’OpenBSD fournissent de
nombreux efforts pour vérifier le code source et assurer un système
fiable et sécurisé, il faut rester vigilant. Pas de panique, nous verrons quelques éléments de rigueur pour configurer votre serveur, cela
demande juste du bon sens.
Je vais donc présenter dans ce document la configuration d’un serveur pour une utilisation qui devrait convenir à la plupart des lecteurs.
L’objectif principal est de vulgariser l’auto-hébergement, c’est pourquoi les plus aguerris chercheront certainement à approfondir le soin
apporté à leur installation.
Quel que soit votre niveau, vous trouverez en fin d’ouvrage diverses astuces, quelques digressions, ainsi que des exemples de fichiers
de configuration. Puisque le document peut se lire dans le désordre,
n’hésitez pas à faire un tour par la FAQ 1 ou jeter un œil aux astuces 2 .
Vous verrez que s’auto-héberger n’est finalement pas si difficile et
consiste en grande partie à modifier du texte dans des fichiers. Cette
démarche devrait donc être accessible à tous.
Alors, prêt à plonger ? Bonne lecture !
1. → Voir page 193.
2. → Voir page 183.
8
1.2 L’auto-hébergement : C’est quoi ? Des avantages ? Des
inconvénients ?
1.2
L’auto-hébergement : C’est quoi ? Des avantages ? Des inconvénients ?
La plupart des sites web que vous avez l’habitude de consulter
(vos courriels, les réseaux sociaux...) sont hébergés sur des serveurs,
quelque part dans le monde. Un serveur n’est ni plus ni moins qu’un
ordinateur, qui va proposer des services et du contenu à d’autres ordinateurs. La seule différence notable, c’est que cet ordinateur n’est
en général pas relié à un écran.
Lorsque vous voulez consulter vos e-mails, votre navigateur va
chercher sur un serveur quelque part dans le monde tous vos messages, qui sont alors téléchargés vers votre ordinateur. C’est comme
si pour lire votre courrier postal, vous deviez aller à la poste pour
demander au facteur :
Y a-t-il du courrier pour moi ?
Ce dernier va vérifier, puis récupérer votre courrier pour vous le
donner. C’est le bureau de poste qui l’avait, jusqu’à ce que vous le
releviez. Le principe n’est pas si différent lorsque vous allez consultez
vos mails.
Ce procédé n’est pas sans inconvénients. En effet, la centralisation des services permet aux sociétés qui façonnent l’internet selon
leurs souhaits de contrôler les données, pas toujours dans l’intérêt
des utilisateurs. Qui n’a pas râlé parce qu’il n’obtenait pas ce qu’il
espérait d’un service postal ? C’est la même chose pour Google qui
met en avant certains contenus choisis, comme par exemple leurs services commerciaux.
De plus, si l’un de ces fournisseurs tombe en panne, c’est tout une
partie de l’internet qui est inaccessible aux dépens des utilisateurs.
Cela va à l’encontre de l’idée originale du web où chacun devrait pouvoir constituer un nouveau noeud à sa toile.
Héberger chez soi les services que l’on utilise présente plusieurs
avantages :
9
1.2 L’auto-hébergement : C’est quoi ? Des avantages ? Des
inconvénients ?
— Les données restent chez vous. Cela veut dire que vous gardez
le contrôle sur vos fichiers. C’est particulièrement intéressant
si vous aviez l’habitude de partager des documents à l’aide de
service tiers (les photos chez Picasa, les vidéos sur Youtube,
des papiers administratifs sur WeTransfer ou Dropbox...). Vous
êtes ainsi certains que vos données n’ont pas été oubliées sur un
disque dur quelque part dans le monde après un renouvellement
du matériel, voire revendues au plus offrant.
— Votre vie privée est davantage respectée. Par exemple, vos courriels ne seront pas scannés afin de vous proposer gratuitement
des publicités correspondant à vos intérêts. Cela est primordial, même lorsque l’on pense ne rien avoir à cacher (voir :
http://jenairienacacher.fr/).
Prétendre que votre droit à une sphère privée n’est pas
important parce que vous n’avez rien à cacher n’est rien
d’autre que dire que la liberté d’expression n’est pas essentielle car vous n’avez rien à dire.
– E. Snowden
— Vous pouvez avoir à portée de main des services qui répondent
exactement à vos besoins.
— Vous pouvez utiliser du matériel à faible consommation électrique
et faire ainsi attention à la planète.
— S’auto-héberger, c’est amusant et instructif. Cela permet de
mieux comprendre le fonctionnement d’internet.
Cependant, cette démarche n’est pas sans inconvénients :
— Cela prend du temps.
— La bande passante des particuliers n’est pas toujours aussi grande
que ce que l’on voudrait. Vous ne pourrez donc pas envoyer des
données aussi vite que vous le souhaitez. Cela peut être gênant
pour transférer des fichiers à gros volume (vidéos...).
— C’est à vous de vous charger de la sécurité. Cela demande du
soin, mais vous avez au moins la certitude que ce n’est pas effectué avec négligence ou par un inconnu.
10
1.3
Pré-requis
1.3
Pré-requis
Dans ce document, on supposera que :
— Le système sur votre serveur sera OpenBSD en version 6.0.
Quelques conseils sont proposés pour l’installation dans la suite
du document 3 .
— Utiliser la ligne de commande ne vous fait plus peur, tant qu’on
vous explique ce qu’il faut faire.
— Vous êtes capable d’éditer 4 un fichier.
— Vous serez attentif à différencier les commandes à taper dans un
terminal des lignes de configuration à écrire dans un fichier.
— Gardez en tête que les lignes de code trop longues sont automatiquement découpées, précédées d’un alinéa. On les distingue
facilement car lors d’une césure, le symbole \ est ajouté dans la
version papier du présent document.
— Vous disposez d’un vieil ordinateur récupéré qui servira de serveur, ou bien d’un appareil acheté pour l’occasion (basse consommation, configuration adaptée à vos besoins particuliers...). Sachez qu’OpenBSD supporte de nombreuses architectures, comme
amd64 ou armv7.
— Vous disposez d’un nom de domaine. Si vous ignorez ce que c’est,
référez vous à la partie consacrée à ce sujet 5 .
1.4
Quelques mots sur l’installation d’OpenBSD
Voici quelques notes rapides sur l’installation d’OpenBSD. En cas
de besoin, lisez le guide d’installation officiel.
1. Récupérez une image d’installation à partir d’un des miroirs
listés dans le lien suivant :
http://www.openbsd.org/ftp.html.
3. → Voir page 11.
4. → Voir page 190.
5. → Voir page 179.
11
1.4
Quelques mots sur l’installation d’OpenBSD
Pour installer à partir d’un cdrom, choisissez le fichier install60.iso.
À partir d’une clé USB, choisissez alors le fichier install60.fs.
2. Gravez l’image iso sur un cdrom avec un logiciel approprié. Pour
une clé USB, vous pouvez la préparer avec la commande dd. Par
exemple, sur une machine utilisant Linux :
1
dd if = installXX . fs of =/ dev / sdbX
3. Définissez un mot de passe 6 robuste pour le compte root, car il
s’agit de l’utilisateur qui a tous les droits sur le serveur.
4. Activer le service ssh à l’installation est recommandé pour vous
connecter au serveur ensuite. Si vous l’avez relié à un écran par
souci de facilité, ce n’est alors pas obligatoire.
5. Allouez suffisamment d’espace à la partition /var qui contiendra
votre site web, et les logs (journaux des services).
6. Lors du premier démarrage, éditez 7 le fichier /etc/pkg.conf
puis mettez-y :
1
installpath = http :// ftp . fr . openbsd . org / pub /\
OpenBSD /% v / packages /% a /
ou :
1
installpath = ftp :// ftp2 . fr . openbsd . org / pub /\
OpenBSD /% v / packages /% a /
Une liste complète des serveurs est disponible sur le site d’OpenBSD :
https://www.openbsd.org/ftp.html
1.4.1
Exemple d’installation d’OpenBSD
Cette section n’est là que pour rassurer les plus réticents. Pour des
informations plus complètes, n’hésitez pas à consulter la documentation d’OpenBSD.
6. → Voir page 187.
7. → Voir page 190.
12
1.4
Quelques mots sur l’installation d’OpenBSD
On télécharge tout d’abord l’image d’installation de la dernière
version d’OpenBSD, qui est, à l’heure où j’écris ces lignes, la 6.0. Une
liste de miroirs est disponible ici : http://www.openbsd.org/ftp.html.
— Pour installer à partir d’un cdrom, choisisez install60.iso puis
gravez-la sur le CD.
— Pour installer à partir d’une clé USB, choisisez install60.fs. Pour
préparer une clé USB, utilisez l’outil dd (remplacez /dev/sdb
par le chemin vers votre clé USB) :
1
# dd if =/ location / install *. fs of =/ dev / sdb bs =1 M
Les utilisateurs de Windows pourront faire la même chose avec le
logiciel rufus.
Et hop, on insère tout ça dans le lecteur du PC, puis on redémarre
en choisissant de démarrer sur le bon media (boot en anglais). Repérez
les messages qui s’affichent du type F12 : Boot Menu ou F7 : Setup
qui indiquent la touche permettant de configurer le média sur lequel
l’ordinateur démarre en priorité.
Note : les captures suivantes sont réalisées avec qemu pour plus de
simplicité.
Le premier écran nous propose d’ajouter des options pour démarrer
OpenBSD. On n’en a pas besoin, on appuie donc juste sur ”Entrée” :
On lance l’installation avec I :
13
1.4
Quelques mots sur l’installation d’OpenBSD
Les valeurs proposées pour l’installation sont largement suffisantes
dans la plupart des cas. Les choix par défaut sont indiqués entre crochets : [choix]. À chaque fois, des exemples sont disponibles avec ’ ?’.
On choisit une disposition de clavier : fr
On choisit ensuite un nom de machine, par exemple ”mondomaine.com”
Ensuite, on configure la connexion à internet. Notez qu’il n’est pas
obligatoire d’avoir un accès en ligne si vous avez choisi une image
install*.* , bien qu’un serveur sans accès à internet n’ait pas la même
utilité.
14
1.4
Quelques mots sur l’installation d’OpenBSD
Ensuite, l’installateur vous demande le mot de passe de l’administrateur système dont le petit nom est root. Choisissez un mot de passe
robuste 8 .
Vous pouvez ensuite faire en sorte que ssh soit lancé par défaut au
démarrage (conseillé pour un serveur).
On nous demande si on voudra avoir un serveur X (session graphique) : ce n’est absolument pas nécessaire pour un serveur. Autant
attribuer toutes les ressources aux calculs plutôt qu’à l’affichage.
Nous passons ensuite à la configuration du fuseau horaire. L’écran
doit alors ressembler à ça :
8. → Voir page 187.
15
1.4
Quelques mots sur l’installation d’OpenBSD
C’est parti pour le choix du disque :
Nous voilà à la partie sans doute la plus complexe : le partitionnement. Sachez que celui par défaut proposé par l’installateur conviendra dans la majorité des cas.
Je tape donc ”W” dans la suite pour utiliser le disque entier :
16
1.4
Quelques mots sur l’installation d’OpenBSD
Puis ”A” pour le partitionnement automatique.
Vous pouvez modifier le partitionnement par défaut en tapant ”E”.
Ensuite, c’est le manuel de disklabel qui vous permettra de vous
en sortir. Il faut en général indiquer une action (avec une lettre) à
réaliser sur la partition où il faudra l’effectuer.
Par exemple : la suite d f permet de supprimer la partition f, qui
17
1.4
Quelques mots sur l’installation d’OpenBSD
était /usr, et d k pour supprimer le /home.
Ensuite, taper a f permet de recréer cette partition, et d’en définir
la taille. Notez que vous pouvez définir une taille en pourcentage du
disque (par exemple 50%) ou en pourcentage de l’espace libre restant
(50&). Ici, je vais réduire le /home au profit de /usr. De la même
façon avec a k, on recrée /home à la taille souhaitée.
À tous moments, vous pouvez taper p pour afficher les partitions
actuelles, histoire de voir où vous en êtes.
18
1.4
Quelques mots sur l’installation d’OpenBSD
Quelques points à garder en tête :
— La partition ”b” est réservée au swap.
— La lettre ”c” est réservée, elle représente tout le disque.
— Vos sites web seront enregistrés dans /var. Songez à lui attribuer
une place suffisante.
— Vous pouvez définir des tailles en ajoutant une unité (50G), un
pourcentage du disque (5%) ou un pourcentage de l’espace libre
restant (100&).
Taper q permet de valider les changements.
Enfin l’installation des composants du système peut commencer.
bsd.mp est le noyau optimisé pour les systèmes multi-processeurs, et
19
1.4
Quelques mots sur l’installation d’OpenBSD
bsd le noyau classique. bsd.rd est utilisé pour les mises à jour ou le
dépannage car il se charge en mémoire. Vous n’en aurez pas forcément
besoin.
Pour ajouter un set, saisissez simplement son nom, par exemple
games60.tgz. Pour retirer un set, saisissez son nom précédé du signe
moins : -games60.tgz. En cas de doute, laissez coché le set proposé.
Si vous installez les sets à partir du CD, un avertissement sur la
signature apparaı̂t. Rien d’inquiétant, vous pouvez dans ce cas continuer.
L’installation avance
20
1.4
Quelques mots sur l’installation d’OpenBSD
Et voilà, l’installation est terminée, on peut redémarrer en tapant
”reboot”.
21
2
Surveiller son serveur
Une fois votre serveur en marche, il faudra veiller à ce que tout
fonctionne correctement. Ça paraı̂t bête, mais c’est très important.
Heureusement, tout est déjà prévu dans OpenBSD pour nous faciliter
la vie.
En effet, chaque jour un rapport est généré et envoyé à l’administrateur du serveur, cet utilisateur répondant au charmant nom de
”root”. Vous pourrez y lire un tas d’informations utiles comme :
— Une vérification des systèmes de fichier et du réseau sont réalisées.
C’est pratique pour voir si on est bientôt à cours d’espace de stockage.
— Quels fichiers ont été modifiés, lesquels et comment ? Normalement, c’est vous qui vous en êtes chargé. Sinon, c’est qu’il y a
un problème. On vous indique aussi si de nouveaux programmes
ont été ajoutés ou retirés. Cela pourrait ressembler à ceci :
1
Running security (8) :
2
3
Checking mailbox ownership .
4
user spamd . black mailbox is owned by root
5
user spamd . black mailbox is -rw -r - -r - - , group \
wheel
6
7
8
======
9
/ etc / rc . local diffs ( - OLD
+ NEW )
10
======
11
--- / var / backups / etc_rc . local . current
Sat Jun\
4 03:46:48 2016
Thu Oct 20 09:46:54 \
12
+++ / etc / rc . local
13
@@ -1 +1 @@
14
- su pi -c " tmux new -s rtorrent -d rtorrent "
2016
22
15
+/ usr / bin / su pi -c "/ usr / bin / tmux new -s \
rtorrent -d / usr / local / bin / rtorrent "
16
17
18
======
19
/ etc / spwd . db SHA -256 checksums
20
======
21
OLD : 075455 a721ef [...] b 9 42 f 5 9 0f b 8 e 3e d f d 88 c 5 d d4
22
NEW : 37 eba7537dd7 [...]42468 cc4cbe768fcf496b230
Les lignes commençant par un + correspondent à ce qui a été rajouté et celles qui commencent par un - à ce qu’il y avait avant.
Tout ceci, c’est bien beau, mais comment recevoir ces messages ?
Comme vous allez le voir, c’est d’une simplicité enfantine :
1. Éditez 9 le fichier /etc/mail/aliases ;
2. Ajoutez tout en bas une ligne comme celle-ci :
1
root : toto@openmailbox . org
Bien sûr, vous remplacerez l’adresse mail par celle que vous
consultez régulièrement.
3. Lancez maintenant la commande # newaliases.
4. Relancez le serveur mail intégré à OpenBSD : # rcctl restart
smtpd.
Et voilà !
Si vous voulez tester que tout fonctionne comme prévu, saisissez
la commande suivante pour vous envoyer un mail test :
1
echo " Coucou toi !" | mail -s " test " root
Vous devriez le recevoir à l’adresse définie dans /etc/mail/aliases.
Ne vous reste plus qu’à lire soigneusement ces messages que le
serveur va vous envoyer.
9. → Voir page 190.
23
3
Le Pare–feu
Quoi ? Déjà le firewall ?
Eh oui, on va commencer par cet élément essentiel à la sécurité du
serveur. Avouez que ce serait dommage de travailler sur une machine
vulnérable dès le départ. Donc avant d’aller plus loin : le pare-feu !
Sur OpenBSD, le pare-feu s’appelle pf, comme ”packet filter”. Sa
configuration se déroule dans le fichier /etc/pf.conf, et comme vous
le verrez, est nettement plus facile à appréhender que celle d’iptables
(l’outil servant à configurer le pare-feu sous Linux...).
Avant toutes choses, il faut se demander ce dont on va avoir besoin
sur notre serveur. Un serveur http ? Les mails ? Un serveur ftp ? Selon
les réponses à ces questions, nous n’ouvrirons pas les mêmes ports.
En effet, pour assurer un maximum de sécurité, on ne va rien laisser
passer sauf ce que qui est réellement utile. Redoutable.
Pour trouver les ports sur lesquels écoutent les services dont vous
pourriez avoir besoin, regardez le contenu du fichier /etc/services.
Ainsi, écrire www ou 80 revient au même pour pf, mais est plus lisible
pour les humains.
Les règles que vous allez définir seront appliquées dans l’ordre de
lecture du fichier de configuration.
On commence donc par tout bloquer, et enregistrer dans le journal
les paquets interdit avec le mot log. Ensuite, on autorise le trafic à
travers certains ports. Voici ci-dessous un exemple très simple pour
un site web qui écoute sur les ports 80 et 443 :
1
tcp_pass = "{ 80 443 }"
2
block log
3
4
pass out quick on re0 proto tcp to any port \
$tcp_pass keep state
5
pass in quick on re0 proto tcp to any port $tcp_pass\
keep state
24
Remarquez qu’il est possible de définir plusieurs ports dans 1 seule
variable $tcp pass. C’est quand même bien pratique.
T’es mignon hein, mais c’est du charabia tout ça !
D’accord, nous allons expliquer ce que veut dire cette syntaxe.
Intéressons-nous à la ligne suivante :
1
pass out quick on re0 proto tcp to any port \
$tcp_pass keep state
On peut la traduire par : ”laisse passer vers l’extérieur (pass out)
sans t’occuper ensuite des lignes suivantes (quick) à travers l’interface re0 (on re0) pour le protocole tcp (proto tcp) vers n’importe
quelle autre ordinateur (to any) pour les ports dans $tcp pass (port
$tcp pass) et souviens-toi de cette connexion tant qu’elle dure (keep
state)”.
Pfouh !
Notez qu’on a trouvé ici le nom de l’interface re0 en tapant la commande ifconfig. Prenez le temps de lire le retour de cette commande,
votre interface doit avoir une adresse attribuée que vous pouvez lire
après le mot inet, et appartient certainement au groupe egress.
Par exemple :
1
$ ifconfig
2
lo0 : flags =8049 < UP , LOOPBACK , RUNNING , MULTICAST > mtu \
32768
3
priority : 0
4
groups : lo
5
6
inet 127.0.0.1 netmask 0 xff000000
re0 : flags =218843 < UP , BROADCAST , RUNNING , SIMPLEX ,\
MULTICAST , MPSAFE , AUTOCONF6 > mtu 1500
7
lladdr fc : aa :14:65:5 f :86
8
priority : 0
9
10
groups : egress
media : Ethernet autoselect (100 baseTX full -\
duplex , rxpause , txpause )
25
11
status : active
12
inet 192.168.1.66 netmask 0 xffffff00 \
broadcast 192.168.1.255
13
enc0 : flags =0 < >
14
priority : 0
15
groups : enc
16
status : active
17
pflog0 : flags =141 < UP , RUNNING , PROMISC > mtu 33144
18
priority : 0
19
groups : pflog
Ici, lo0 ne nous intéresse pas. C’est l’interface dite ”locale”, utilisée
par certains programmes pour communiquer entre eux au sein du
serveur. enc0 et pflog0 ne nous intéressent pas non plus ici.
Pf dispose d’une autre fonctionnalité très intéressante : les ”tables”
(tableaux). Ça va nous permettre de garder en mémoire certaines
adresses IP de vilains qui tenteraient de compromettre le serveur. Par
exemple, pour protéger le service ssh, on va procéder ainsi :
1. Création d’une table pour enregistrer les IP abusives avec notre
serveur ssh.
2. Bloquer toutes les IP qui seraient dans la table précédente, et
ne pas aller plus loin pour elles.
3. Ouvrir le port ssh, mais enregistrer dans la table précédente
toutes les IP qui tenteraient de se connecter plus de 3 fois par
minute (attaque par bruteforce).
Ça nous donne donc ceci :
1
ssh_port = "22"
2
table < ssh_abuse > persist
3
block in log quick proto tcp from < ssh_abuse > \
4
pass in on $ext_if proto tcp to any port \
to any port $ssh_port
$ssh_port flags S / SA keep state \
5
( max - src - conn - rate 3/60 , overload <\
ssh_abuse > flush global )
26
Notez que nous avons enregistré le numéro du port utilisé pour
le serveur ssh. C’est inutile, car on peut mettre à la place de
$ssh port simplement ssh, c’est-à-dire le nom du service. Cependant, on peut vouloir changer le port par défaut du serveur
ssh, comme décrit dans le chapitre sur ce service 10 .
Vous l’aurez compris, pf nous permet un contrôle de premier
ordre sur notre serveur. On pourra filtrer le trafic entrant et
sortant. On pourra même rediriger 11 une partie de celui-ci vers
des service internes (comme par exemple un anti-spam). Je vous
laisse construire votre fichier /etc/pf.conf selon vos besoins.
N’hésitez pas à consulter l’exemple fournit à la fin du document 12 .
Un dernier mot avant de terminer cette partie. Enfin plutôt quelques
commandes bien pratiques :
— Désactiver le pare-feu : # pfctl -d.
— Activer le pare-feu avec le fichier /etc/pf.conf :
1
# pfctl - ef / etc / pf . conf
— Relancer le pare-feu :
1
# pfctl -d && pfctl - ef / etc / pf . conf
— Recharger la configuration du pare-feu :
1
# pfctl -f / etc / pf . conf
— Vider les règles du pare-feu (Attention !), ça peut être pratique
lorsqu’on s’est auto-banni du serveur (si si, ça arrive même aux
meilleurs...) : # pfctl -F all.
— Voir en temps réel ce que le pare-feu bloque (à condition que
vous ayez mis le mot clé log dans la configuration) : # tcpdump
-n -e -ttt -i pflog0.
10. → Voir page 28.
11. → Voir page 181.
12. → Voir page 197.
27
— Afficher la liste des IP bloquées dans une table :
1
# pfctl -t nom_de_la_table -T show
— Ajouter une IP dans une table
1
# pfctl -t nom_de_la_table -T add \
123.456.678.909
— Retirer une IP d’une table
1
# pfctl -t nom_de_la_table -T delete \
123.456.678.909
1
# pfctl -t nom_de_la_table -T add 123.456.678.909
28
4
SSH
SSH, c’est magique. Cet outil vous permettra de vous connecter
au serveur à partir d’un autre ordinateur. Vous pourrez alors l’administrer à distance sans devoir y brancher un clavier et un écran. À
vrai dire, sauf exception, tous les serveurs sont administrés ainsi, mais
vous êtes chez vous après tout, donc vous pouvez faire comme vous
voulez.
De plus, SSH ne se limite pas ça, car il est capable de créer des
tunnels chiffrés vers votre serveur. Vous serez en mesure d’avoir un
espace de stockage de fichiers en SFTP 13 , voire même d’en faire une
sorte de NAS 14 .
Quoi qu’il en soit, si vous n’avez pas activé SSH lors de l’installation d’OpenBSD, vous pouvez l’activer avec la commande suivante :
1
# rcctl enable sshd
Bien que ce protocole soit fiable, ça ne coûte rien de prendre
quelques précautions de sécurité. On va éditer 15 la configuration de
SSH dans le fichier /etc/ssh/sshd config.
— Vous pouvez changer le port utilisé : Port 222. Dans tous les
cas, pensez à ouvrir le port dans le parefeu 16 et le diriger dans
le routeur 17 .
— Très important, retirez à root la possibilité de se connecter en
ssh avec cette ligne, ceci afin d’éviter des attaques par bruteforce
directement sur l’identifiant ”root” :
1
PermitRootLogin no
Pour vous connecter à la machine, il faudra créer un utilisateur
simple, par exemple toto, avec la commande adduser.
13.
14.
15.
16.
17.
→
→
→
→
→
Voir
Voir
Voir
Voir
Voir
page
page
page
page
page
31.
152.
190.
23.
181.
29
4.1
Connexion sans mot de passe
Une fois les modifications réalisées, relancez ssh :
1
# rcctl reload sshd
Par la suite, pour vous connecter au serveur, vous utiliserez la
commande suivante à partir de votre ordinateur :
1
$ ssh -p 222 toto@votredomaine . com
Ça demandera le mot de passe de toto, puis vous pourrez administrer le serveur à distance.
4.1
Connexion sans mot de passe
Il y a des situations où c’est tout de même plus pratique de pouvoir
se connecter au serveur sans avoir à entrer le mot de passe. C’est le cas
par exemple dans certains scripts. C’est heureusement possible grâce
à un jeu de clés. Voici la marche à suivre :
Sur le serveur, modifiez le fichier /etc/ssh/sshd config pour
qu’il contienne ces lignes :
1
Pubke y A u t h e n t i c ation yes
Maintenant, sur l’ordinateur qui veut accéder au serveur, nous
allons générer la paire de clés avec la commande suivante :
1
$ ssh - keygen -t rsa -f ~/. ssh / votreserveur
Vous prendrez soin d’éditer 18 le fichier ~/.ssh/config de votre
utilisateur pour le remplir ainsi :
1
Host votreserveur
2
HostName nomtreslong . vraimenttroplong . long
3
User jeanbaptiste . professeurdanseur
4
Pa ss w o r d A u t h e n t ica ti on no
5
IdentityFile ~/. ssh / votreserveur
18. → Voir page 190.
30
4.2
SFTP
Bien sûr, vous modifierez le nom de domaine de votre serveur ainsi
que le nom de l’utilisateur qui doit se connecter. Ensuite, lancez la
commande suivante pour copier la clé publique sur le serveur.
1
ssh - copy - id -i ~/. ssh / votreserveur . pub " jeanbaptiste\
. p r o f e s s e u r d a n s e u r @ n o m t r e s l o n g . vraimenttroplong .\
long -p xxx "
Ici, remplacez ”xxx” par le port utilisé par ssh.
Dans le cas où l’outil ssh-copy-id ne serait pas disponible, il faut
copier la clé publique manuellement. Pour l’afficher, tapez
1
$ cat ~/. ssh / votreserveur . pub
Connectez-vous sur le serveur en ssh, puis ajoutez dans le fichier
~/.ssh/authorize keys la clé affichée précédemment.
Une fois ceci fait, vous pouvez vous connecter sans devoir entrer
de mot de passe avec simplement la commande :
1
$ ssh votreserveur
Pratique non ?
Je vous invite à suivre ce lien pour en apprendre davantage :
http://formation-debian.via.ecp.fr/ssh.html#idp11863616
4.2
SFTP
Le protocole sftp ressemble beaucoup au célèbre ftp, mais se base
sur un tunnel SSH. À vrai dire, chaque utilisateur disposant d’un accès
SSH peut envoyer et télécharger des fichiers en SFTP avec ses codes
d’identification habituels.
Pour copier des fichiers, vous pouvez utiliser la commande scp qui
s’utilise ainsi :
1
$ scp -p < port ssh > u t i li s a t eu r @ v ot r e s er v e u r . net :/\
emplacement / de / destination fichier -a - copier
On peut aussi plus simplement utiliser un client graphique comme
décrit plus bas.
31
4.3
SFTP avec chroot
4.3
SFTP avec chroot
L’idée ici est d’enfermer dans un dossier les utilisateurs appartenant au groupe sftpusers. Cela leur évitera de copier n’importe où
leurs documents, mais aussi de supprimer des éléments importants du
serveur.
À titre d’exemple, nous allons mettre le chroot dans le dossier
/mnt/sauvegarde.
Éditez 19 le fichier /etc/ssh/sshd config puis ajoutez les lignes
suivantes :
1
Subsystem
2
Match Group sftpusers
sftp
internal - sftp
3
ChrootDirectory / mnt / sauvegarde / sftp /% u
4
ForceCommand internal - sftp
Pensez à bien modifier la ligne déjà existante qui contient Subsystem.
Ensuite, relancez ssh : rcctl reload sshd
Créez maintenant un dossier /sftp dans le dossier /mnt/sauvegarde
pour que les utilisateurs y soient automatiquement placés à leur connexion.
1
# mkdir -p / mnt / sauvegarde / sftp
Modifiez les droits pour assurer une sécurité supplémentaire :
1
# chown root : wheel / mnt / sauvegarde / sftp
2
# chmod 700 / mnt / sauvegarde / sftp
Dans /mnt/sauvegarde/sftp, il y aura les dossiers portant le nom
des utilisateurs. En fait, on fait comme si le répertoire
1
/ mnt / sauvegarde / sftp / utilisateur
était la nouvelle racine / pour les utilisateurs.
4.3.1
Ajouter un compte sftp
Ajouter un compte sftp revient à créer un nouvel utilisateur et
mettre ce dernier dans le groupe sftpusers.
19. → Voir page 190.
32
4.3
SFTP avec chroot
Il faut quand même faire attention à plusieurs points :
— L’utilisateur ne doit pouvoir faire que du sftp. On va donc lui
attribuer le shell ”nologin”.
— L’utilisateur n’a pas besoin de dossier personnel dans /home,
mais aura besoin de son dossier dans /mnt/sauvegarde/sftp.
— Il faut s’assurer que seul l’utilisateur a les droits d’écriture dans
son dossier. On lui créera un dossier documents prévu à cet effet.
Voici la marche à suivre :
— Création d’un groupe sftpusers : groupadd sftpusers.
— Ajout d’un utilisateur avec création du dossier personnel à l’endroit souhaité et ajout dans le groupe sftpusers.
1
# useradd -G sftpusers -b / documents -s / sbin /\
nologin utilisateur
Il y a un avertissement nous indiquant que l’utilisateur n’a pas
de /home. C’est justement ce que nous souhaitons.
— On modifie le mot de passe avec passwd utilisateur .
— On crée le dossier pour l’utilisateur :
1
# mkdir -p / mnt / sauvegarde / sftp / utilisateur
— On crée le dossier dans lequel l’utilisateur aura le droit d’écrire :
1
# mkdir -p / mnt / sauvegarde / sftp / utilisateur /\
2
# chown utilisateur : sftpusers / mnt / sauvegarde /\
documents
sftp / utilisateur / documents
L’utilisateur peut maintenant utiliser le protocole sftp. Il sera enfermé dans son dossier précédemment créé.
4.3.2
Transferts avec Firefox
C’est la solution sans doute la plus simple pour ceux qui utilisent
déjà ce navigateur. On va ajouter un module à Firefox qui s’appelle
fireftp.
33
4.3
SFTP avec chroot
Pour cela, rendez vous à cette adresse :
https://addons.mozilla.org/fr/firefox/addon/fireftp/
Cliquez sur le bouton ”Ajouter à Firefox”, puis une fois l’installation terminée, redémarrez le navigateur.
Maintenant, Firefox peut se connecter au serveur. Pour cela, tapez
dans la barre d’adresse ceci :
1
sftp :// u t i l i s a t e u r @v o t r es e r v eu r . net :222
Remplacez 222 par le port ssh du serveur (22 par défaut). Bien
sûr, ”utilisateur” est aussi à remplacer (par exemple jean eudes ou
toto).
Un mot de passe vous est demandé, il suffit de le taper.
Reste à utiliser les flèches centrales pour envoyer ou récupérer des
documents.
4.3.3
Transferts avec Filezilla
On va installer le logiciel Filezilla qui permettra de se connecter
au serveur.
Vous pouvez le télécharger via l’adresse ci-dessous, ou l’installer
directement via le gestionnaire de paquets de votre distribution.
http://filezilla-project.org/download.php?type=client
34
4.3
SFTP avec chroot
Ouvrez Filezilla, puis cliquez sur la petite icône en haut à gauche
”Gestionnaire de sites”. Une nouvelle fenêtre s’ouvre :
Cliquez sur ”Nouveau Site”, puis remplissez les champs ainsi :
— Hôte : votreserveur.net
— Port : 222 (à remplacer par le port SSH)
— Protocole : SFTP - SSH File Transfert Protocol
— Type d’authentification : Normale
— Identifiant : votre identifiant
— Mot de passe : votre mot de passe
Il ne vous reste plus qu’à cliquer sur Connexion. Sélectionnez les
fichiers que vous souhaitez envoyer ou récupérer, puis faites un clicdroit pour les télécharger. La même chose est possible avec des glisser/déposer.
35
5
Un site web
OpenBSD intègre par défaut un serveur http qui s’appelle tout
simplement httpd. Il présente un minimum de fonctionnalités, mais
sa légèreté le rend d’autant plus simple à configurer. De plus, il sera
amplement suffisant dans la plupart des cas. Si vous avez réellement
besoin d’un serveur http plus complet, sachez que nginx et apache
sont disponibles.
Avant d’aller plus loin, il est important de noter que pour des
raisons de sécurité, le serveur httpd sera lancé en chroot dans le dossier
/var/www.
Et c’est censé vouloir dire quoi ?
En réalité, pour le serveur http, tous les documents qui sont ”audessus” du dossier /var/www sont totalement inaccessibles. Pour lui,
il s’agit de la racine /. Ce comportement peut être modifié, mais je
vous le déconseille : autant garder un maximum de précautions.
5.1
Un site simple avec httpd
On commence par créer un dossier qui contiendra le site :
1
# mkdir / var / www / htdocs / mon_super_site
Placez maintenant les pages de votre site dans ce dossier (index.html...). Une fois terminé, on va modifier les droits sur ce dossier
pour qu’il appartienne à root et soit accessible au serveur httpd. Cette
étape est facultative mais recommandée :
1
# chown -R root : daemon / var / www / htdocs /\
mon_super_site
Il ne nous reste plus qu’à modifier la configuration du serveur
httpd. Pour cela, on va éditer 20 le fichier /etc/httpd.conf. Vous
pourrez constater que sa configuration est très simple.
20. → Voir page 190.
36
5.1
1
Un site simple avec httpd
types { include "/ usr / share / misc / mime . types " }
2
3
server " votredomaine . net " {
4
listen on * port 80
5
root "/ htdocs / mon_super_site "
6
}
Quelques explications :
— types ... : La première ligne permet de préciser les types des
fichiers que le serveur pourra avoir à fournir. Ce n’est pas obligatoire, mais ça permet par exemple à un visiteur de voir directement une image dans son navigateur plutôt que de la télécharger
lorsqu’il clique dessus.
— server "votredomaine.net" { : On définit ici le nom de domaine du site web, puis on indique que nous allons configurer ce
site en ouvrant une accolade.
— listen ... : Le serveur écoute sur le port 80 (le port www
par défaut). Si vous avez la chance de disposer d’une connexion
IPv6, cette ligne devrait être listen on :: port 80.
— root ... : On indique où se trouve les fichiers du site.
On termine en activant httpd et en le (re)démarrant :
1
# rcctl enable httpd
2
# rcctl restart httpd
Vous pouvez désormais aller admirer votre site. Toutes les pages
html que vous placerez dans /var/www/htdocs/mon super site seront servies.
Petite astuce : vous pouvez envoyer votre site à l’aide d’un client
comme le logiciel Filezilla. Choisissez dans ce cas une connexion sftp
avec vos identifiants ssh. Vous obtiendrez alors un dossier par exemple
dans /home/toto/monsite. Il ne vous reste plus qu’à déplacer les
fichiers de votre site web à partir du compte root :
1
# mv / home / toto / monsite /* / var / www / htdocs /\
mon_super_site
37
5.2
PHP
Et voilà, c’est suffisant pour un simple site. Afin d’y accéder, n’oubliez pas d’ouvrir le port 80 (www) dans le parefeu 21 et de le rediriger 22 .
Si vous voulez en savoir plus, lisez la partie ”Astuces pour httpd” 23 .
5.2
5.2.1
PHP
Configuration minimale
Il est fort possible que vous souhaitiez ajouter le support de PHP
à votre site, surtout si vous voulez héberger un moteur de blog ou un
CMS.
La commande suivante permet d’installer PHP (à remplacer par
la version souhaitée) :
1
# pkg_add php -7.0.8 p0
Pour lister toutes les versions de PHP disponibles, tapez :
1
# pkg_info -Q php
Ensuite, on active PHP et on le démarre :
1
# rcctl enable php70_fpm
2
# rcctl start php70_fpm
Nous pouvons maintenant modifier la configuration de httpd pour
lui dire de servir les pages au travers de PHP. Quelques lignes sont à
ajouter au fichier etc/httpd.conf :
1
server " monserveur . net " {
2
listen on * port 80
3
root "/ htdocs / monsupersite "
4
directory index index . php
5
6
location "*. php *" {
21. → Voir page 23.
22. → Voir page 181.
23. → Voir page 43.
38
5.2
PHP
fastcgi socket "/ run / php - fpm . sock "
7
}
8
9
}
Remarquez l’instruction directory index index.php. Elle permet de rendre l’adresse http://monserveur.net/ équivalente à l’adresse
http://monserveur.net/index.php.
Et voilà, les fichiers .php seront correctement interprétés. Cette
configuration est suffisante dans la plupart des cas.
5.2.2
Installation de PHP plus complète
Je vous propose toutefois d’aller un peu plus loin pour préparer
l’installation d’applications plus complètes (blog, CMS...) en activant
des extensions et des options qui ne le sont pas par défaut, toujours
dans un souci de sécurité.
Vous avez peut-être remarqué lors de l’installation de PHP une
note concernant le dossier /usr/local/share/doc/pkg-readmes. Ce
dernier contient des informations très intéressantes que nous allons
appliquer ici.
Les extensions installées sont dans le dossier /etc/php-7.0.sample.
Afin de les activer, il faut les relier dans le dossier /etc/php-7.0. On
peut le faire en deux commandes :
1
# cd / etc / php -7.0. sample
2
# for i in *; do ln - sf ../ php -7.0. sample / $i ../ php \
-7.0/; done
La plupart des extensions sont déjà présentes, mais vous voudrez
peut-être y ajouter les paquets suivants :
— pear,
— php-curl-7.0.8p0,
— php-gd-7.0.8p0,
— php-mcrypt-7.0.8p0,
— php-zip-7.0.8p0.
39
5.2
PHP
On peut souhaiter modifier la configuration de PHP. Il faut pour
cela éditer 24 le fichier /etc/php-7.0.ini. Je vous conseille notamment de modifier ces quelques lignes :
1
; Augmente la taille des fichiers que vous pouvez \
envoyer sur le site
2
post_max_size = 500 M
3
uploa d _m a x _f i le size = 500 M
4
; une application php peut chercher du contenu \
5
allow_url_fopen = On
6
; Le fuseau horaire
7
date . timezone = Europe / Paris
8
; configuration du cache
9
opcache . enable =1
distant ( images ..)
10
opcache . mem or y_ consumption =128
11
opcache . i n t e r n e d _s t ri ng s _b u ff er =8
12
opcache . m a x _ a c c ele rated _fil es =4000
13
opcache . e n a b l e _ file_override =1
Il est possible que votre site doive récupérer des informations venant d’autres sites. Malheureusement, si vous vous souvenez bien, le
serveur http est dans un chroot. Où se trouve ce chroot déjà ?
Dans /var/www ! ! !
Très bien Jean-Eudes ! Il y en a au moins un qui suit.
On va donc être obligé de mettre quelques fichiers qui normalement
se trouvent dans /etc à l’intérieur du chroot. Cela permettra à PHP
d’être capable de résoudre les noms de domaines, vérifier les certificats
SSL, être à l’heure...
Voici la procédure :
1
# cd / var / www
# On va dans le chroot
24. → Voir page 190.
40
5.2
PHP
2
# mkdir etc /
3
### On copie 2 fichiers pour resoudre les domaines :
# On fabrique un dossier etc
4
# cp / etc / resolv . conf etc / resolv . conf
5
# cp / etc / hosts etc / hosts
6
### Bon fuseau horaire :
7
# cp / etc / localtime etc / localtime
8
# mkdir etc / ssl
# On cree un autre dossier
9
### Pour verifier les certificats ssl :
10
# cp / etc / ssl / cert . pem etc / ssl / cert . pem
Vous aurez peut-être besoin d’être capable d’envoyer des mails à
partir de vos sites. Puisque PHP est dans un chroot, il ne pourra
pas communiquer avec le programme responsable de l’envoi des mail :
sendmail. Heureusement, lorsque vous avez installé PHP, l’outil femailchroot a été lui aussi installé grâce au jeu des dépendances. Pour que
PHP puisse l’utiliser, il faut copier ”sh” dans le chroot (voir le fichier
/usr/local/share/doc/pkg-readmes/femail-chroot*).
1
cp / bin / sh / var / www / bin
Une fois toutes vos modifications réalisées, n’oubliez pas de relancer PHP avec rcctl restart php70 fpm.
5.2.3
PHP et WˆX
Par défaut, OpenBSD active par défaut la protection mémoire
WˆX. Cette précaution peut empêcher certains programmes de fonctionner correctement, comme PHP.
Normalement, à partir d’OpenBSD en version 6.0, tout est prévu et
vous n’avez rien à modifier. Sinon, vérifier dans le fichier /etc/fstab
qu’il y a l’option wxallowed sur /usr/local :
1
e0ca6b318b796701 . f / usr / local ffs rw , nodev , wxallowed\
1 2
41
5.3
HTTPS
5.3
HTTPS
Prévoir un accès avec chiffrement pour votre site n’est pas obligatoire. C’est malgré tout intéressant si :
— Certaines parties de votre site nécessitent un mot de passe (interface d’administration d’un blog, d’un forum...).
— Vous vous souciez de la vie privée de vos visiteurs.
Procurez-vous tout d’abord un certificat SSL 25 (lisez le paragraphe
concerné si besoin).
Ensuite, on va préciser dans la configuration d’un site le chemin
vers le certificat et vers la clé privée.
1
# extrait de / etc / httpd . conf
2
server " votreserveur . net " {
3
listen on * tls port 443
4
root "/ htdocs / monsupersite "
5
tls {
6
7
certificate "/ etc / ssl / acme /\
8
key
votredomaine - fullchain . com . pem "
"/ etc / ssl / acme / private /\
votredomaine - privkey . com . pem "
}
9
10
hsts
Vous remarquerez que la connexion se fait désormais sur le port
443 (https), qu’il faut ouvrir dans le parefeu 26 et rediriger 27 dans le
routeur.
L’option hsts rend l’échange des clés et donc la qualité du chiffrement plus sûrs. Pour un mot en plus, ça ne fait pas de mal.
Afin de diriger les visiteurs qui arriveraient avec l’adresse ”http ://votreserveur.net” vers ”https ://votreserveur.net”, on ajoute le bloc
suivant :
25. → Voir page 176.
26. → Voir page 23.
27. → Voir page 181.
42
5.4
Astuces pour httpd
1
# extrait de / etc / httpd . conf
2
server " votreserveur . net " {
3
listen on * port 80
4
block return 301 " https ://\
$ S ER V E R _N A M E $R E Q U ES T _ U RI "
5
}
5.4
Astuces pour httpd
Je ne peux m’empêcher de vous inciter à lire le man httpd.conf.
On y trouve tout ce qui est écrit ici, et plus encore.
— Pour changer le dossier de chroot où le serveur http est enfermé
(/var/www par défaut), on peut mettre en début de configuration
1
chroot "/ autre / repertoire "
Ne le faı̂tes pas :) !
— Vous pouvez choisir un fichier spécifique où seront enregistrés les
logs dans la section de chaque site. Cela peut être pratique avec
webalizer 28 par exemple. Ils sont par défaut enregistrés dans le
dossier /var/www/logs.
1
log access " nom_du_site . log "
Pour désactiver les logs, mettez no log.
— Si votre serveur est accessible en IPv6, ajoutez ceci pour que
httpd écoute sur cette adresse :
1
listen on :: port 80
— Pour protéger l’accès à un site ou une partie du site par un mot
de passe, utilisez la commande htpasswd pour créer un fichier
d’accès :
1
# htpasswd / var / www / secret . htpw login
28. → Voir page 123.
43
5.5
Quelles permissions donner à mon site ?
Remplacez login par le nom d’utilisateur que vous souhaiterez
utiliser, puis définissez un mot de passe solide 29 . Protégez ensuite ce fichier :
1
# chown www / var / www / secret . htpw
2
# chmod 400 / var / www / secret . htpw
Enfin, dans la configuration de httpd, pour protéger l’accès au
sous-dossier /dossier protege :
1
location "/ dossier_protege /" {
2
authenticate " Acces restreint " with "/\
3
}
secret . htpw "
Remarquez que l’emplacement du fichier secret.htpw est relatif
au chroot de httpd, on fait comme si /var/www était /.
Pour protéger un site complet, mettez location "/".
— Afin de lister automatiquement les fichiers présents dans un dossier, mettez dans le fichier /etc/httpd.conf :
1
location "/ dossier /*" {
directory auto index
2
3
5.5
}
Quelles permissions donner à mon site ?
Attribuer les permissions 30 adéquates aux fichiers constituant vos
sites web est très important d’un point de vue sécurité. Il n’y a cependant pas de règles générales, car cela dépend des besoins de l’application hébergée et des vôtres. Voici cependant quelques exemples :
— Les fichiers du site devraient appartenir au serveur http :
1
# chown -R www : daemon / var / www / htdocs / mon_site
29. → Voir page 187.
30. → Voir page 184.
44
5.5
Quelles permissions donner à mon site ?
— Dans le cas d’un site statique (sans PHP), il est inutile de laisser
les droits d’exécution (-x). De même, s’il est statique, il n’y aura
pas besoin d’écrire dedans(-w). On ajoute quand même le droit
de se déplacer dans les répertoires (+X).
1
# chmod -R a - xw / var / www / htdocs / mon_site
2
# chmod -R ug + X / var / www / htdocs / mon_site
On commence par retirer les droits non-souhaités à tout le monde
avant d’en donner au propriétaire et au groupe.
— Pour un site dynamique, le serveur aura peut-être besoin d’écrire
dans les dossiers et d’en exécuter une partie.
1
# chmod -R a - xw / var / www / htdocs / mon_site
2
# chmod -R u + xwX / var / www / htdocs / mon_site
3
# chmod -R g + rX / var / www / htdocs / mon_site
Là aussi, on commence par retirer tous les droits avant d’en
donner au cas par cas.
ATTENTION : il sera certainement judicieux de modifier les
permissions plus finement. Dans tous les cas, la meilleure pratique est
de se poser la question concernant les droits.
À titre informatif, la plupart des hébergeurs appliquent uniquement les droits suivants :
— Pour les répertoires : lecture et écriture pour le propriétaire et
seulement lecture pour les autres. (755)
— Pour un fichier, seul le propriétaire a le droit d’écrire dedans,
les autres peuvent seulement le lire. (644)
Tout ceci peut se faire en quelques lignes :
1
### retrait des droits :
2
# chmod -R a - rwx / var / www / htdocs / site
3
### tout le monde peut lire les dossiers :
4
# chmod -R a + rX / var / www / htdocs
5
### seul le proprietaire peut ecrire :
6
# chmod -R u + w / var / www / htdocs
45
5.6
Gestion des entêtes avec relayd
On retire d’abord l’ensemble des permissions. Ensuite, on donne
accès en lecture aux dossiers et fichiers. Attention, à cette étape, il
s’agit d’un X majuscule. Enfin, on accorde au propriétaire les droits
d’écriture dans les dossiers et fichiers.
5.6
Gestion des entêtes avec relayd
Httpd n’est pas capable de gérer les entêtes (ou headers). Heureusement, tout est prévu : nous allons utiliser relayd et le placer avant
httpd.
Inutile d’installer quoi que ce soit, relayd est déjà présent dans
OpenBSD. Elle est pas belle la vie ?
La configuration de relayd est écrite dans le fichier /etc/relayd.conf
que nous allons éditer 31 .
À l’intérieur, et à titre d’exemple, nous allons mettre les lignes
suivantes :
1
table < local > { 127.0.0.1 }
2
ext_ip = 192.168.1.66
3
4
http protocol " http " {
5
tcp { nodelay , sack , socket buffer 65536 , \
6
match response header set " Cache - Control " value \
backlog 100 }
" max - age =1814400"
7
match request header remove " Proxy "
8
return error
pass
9
10
}
11
12
13
relay " www " {
listen on $ext_ip port 80
14
protocol " http "
15
forward to < local > port 8080 check tcp
31. → Voir page 190.
46
5.6
16
Gestion des entêtes avec relayd
}
Voici ce que ces lignes signifient :
— table <local> { 127.0.0.1 } : Cela indique quelle est l’adresse
locale du serveur. Il n’y a rien à changer ici.
— ext ip = 192.168.1.66 : Il s’agit de l’adresse IP locale du serveur. Pour retrouver cette adresse, vous pouvez taper la commande suivante : ifconfig |grep inet.
— http protocol "http" { : On ouvre la configuration pour tout
ce qui concerne le protocole http.
— tcp { nodelay, ...} : On ajoute quelques options pour sécuriser
la connexion.
— match response header set "Cache-Control" value "max-age=1814
On augmente la valeur du cache, afin que les visiteurs de votre
site gardent plus longtemps les données récupérées au lieu de
les télécharger à nouveau de votre serveur. Cette règle permet
d’envoyer un entête à la personne qui consulte votre site.
— match request header remove "Proxy" : On retire un entête
qui peut poser des soucis de sécurité. Cela se produit à l’arrivée
de la requête et permet de ne pas envoyer de mauvais entêtes au
serveur httpd.
— return error : On renvoie une erreur s’il y a eu le moindre
souci.
— pass : S’il n’y a pas eu de problèmes, on laisse passer.
— relay "www" { : On va définir ici la redirection vers le serveur.
— listen on $ext ip port 80 : On écoute sur le port 80, puisque
c’est http.
— protocol "http" : On utilise la configuration énoncée plus haut.
— forward to <local> port 8080 check tcp : On renvoie sur
le port 8080 en local. C’est sur ce port que httpd devra maintenant écouter.
47
5.6
Gestion des entêtes avec relayd
Puisque relayd est relié à httpd par le port 8080, il faut modifier
la configuration de ce dernier pour lui dire d’écouter en local sur le
bon port. Dans le fichier /etc/httpd.conf, nous aurons alors :
1
listen on 127.0.0.1 port 8080
Après avoir réalisé vos modifications, n’oubliez pas d’activer relayd
et de redémarrer les services :
1
# rcctl enable relayd
2
# rcctl restart httpd
3
# rcctl start relayd
Désormais, lorsque vous accéderez à votre site, vous passerez par
relayd (port 80) qui fera l’intermédiaire avec httpd (port 8080).
Vous pouvez consulter une exemple de configuration à la fin du
document 32 .
5.6.1
Le cas https
Si votre site propose une connexion chiffrée avec une adresse https ://...,
(c’est bien ! ), la configuration de relayd peut-être déroutante.
Ci-dessous, voici un exemple de configuration de relayd qui renvoie
tout ce qui arrive sur le port 443 vers le port 8443 en local avec support
tls :
1
table < local > { 127.0.0.1 }
2
ext_ip = 192.168.1.66
3
4
5
http protocol " https " {
tcp { nodelay , sack , socket buffer 65536 , \
backlog 100 }
6
match response header set " Cache - Control " value \
7
match request header remove " Proxy "
8
return error
" max - age =1814400"
32. → Voir page 207.
48
5.6
Gestion des entêtes avec relayd
pass
9
tls { no client - renegotiation , cipher - server -\
10
preference }
11
}
12
13
relay " tlsforward " {
listen on $ext_ip port 443 tls
14
15
protocol " https "
16
forward to < local > port 8443 mode loadbalance \
check tcp
17
}
Désormais, dans le configuration de httpd, il y a :
1
listen on localhost port 8443
Toutefois, il faut que relayd puisse vérifier les certificats. Afin qu’il
y accède, il faut les placer dans /etc/ssl/private/adresse.key
pour la clé et dans /etc/ssl/adresse.crt pour le certificat. Ici,
”adresse” est l’IP 192.168.1.66. Dans le cas où vous auriez récupéré
un certificat avec acme-client 33 , vous pouvez alors faire des liens symboliques ainsi :
1
# ln -s / etc / ssl / acme / private / votredomaine - privkey .\
com . pem / etc / ssl / private /192.168.1.66. key
2
# ln -s / etc / ssl / acme / votredomaine - fullchain . com . pem\
/ etc / ssl / private /192.168.1.66. crt
Inutile de préciser quoi que ce soit en plus dans la configuration
de relayd ou httpd, tout fonctionne normalement comme prévu avec
l’utilisation de vos certificats ;)
33. → Voir page 176.
49
6
Maintenir le système à jour
Pour conserver un système robuste et sécurisé, il est essentiel de
le maintenir à jour. Voici quelques conseils à ce sujet.
6.1
Mettre les paquets à jour
Mettre les paquets à jour est l’histoire d’une seule commande :
1
# pkg_add -u
Oui, c’est tout.
Cela ne sera pas nécessaire la plupart du temps sauf lors d’un
changement de version. En effet, les failles importantes de sécurité
sont corrigée dans le système (voir paragraphe suivant). Si la faille
concerne un paquet, il faut alors passer par les ports 34 pour le mettre
à jour. Vous pouvez aussi utiliser le service M :Tier 35 décrit un peu
plus loin.
6.2
Mettre le système à jour
Tout d’abord, un petit rappel : OpenBSD est fournie en 3 ”saveurs” (flavour) :
— release : il s’agit de la version publiée et que vous avez sans doute
téléchargée pour installer OpenBSD.
— stable : c’est la version release avec plusieurs correctifs de sécurité.
C’est celle-ci que nous souhaiterons suivre.
— current : c’est la prochaine mouture en préparation d’OpenBSD,
dans le dépôt CVS (qui sert au développement du code source).
Il peut en effet arriver que des bugs soient découverts. À chaque
fois, des correctifs sont rapidement proposés. Il est alors recommandé
d’appliquer les patches de sécurité. Vous pouvez suivre les indications de la page errata (https://www.openbsd.org/errata.html) pour
34. → Voir page 188.
35. → Voir page 52.
50
6.2
Mettre le système à jour
réaliser cette manipulation. Cependant, comme appliquer les correctifs n’est pas forcément facile, voici un résumé des pages suivantes que
vous devriez lire :
— https://www.openbsd.org/stable.html
— https://www.openbsd.org/anoncvs.html#starting
6.2.1
Mise à jour manuelle
Pour commencer, on récupère les sources ”patchées” et corrigées :
1
# cd / usr
2
# cvs - qd anoncvs@anoncvs . fr . openbsd . org :/ cvs get -\
3
# cvs - qd anoncvs@anoncvs . ca . openbsd . org :/ cvs get -\
rOPENBSD_6_0 -P src
rOPENBSD_6_0 -P ports
La première fois, c’est long. Pas d’inquiétudes donc, préparez un
petit café pendant ce temps. Si vous aviez déjà les sources, il suffit
alors de lancer :
1
# cd / usr / src
2
# cvs -q up - rOPENBSD_6_0 - Pd
3
# cd / usr / ports
4
# cvs -q up - rOPENBSD_6_0 - Pd
Vous serez peut-être intéressés par les changements effectués dans
les sources depuis la dernière fois. Vous pouvez lancer cette commande :
1
cvs log - rOPENBSD_6_0 :
Ou alors, qui donne un résultat moins long :
1
cvs diff -u - rOPENBSD_6_0
Ensuite, les commandes suivantes permettront de compiler le noyau :
1
# cd / usr / src / sys / arch / $ ( uname -m ) / compile / GENERIC .\
MP
2
# make obj
51
6.2
Mettre le système à jour
3
# make config
4
# make
5
# make install
Si vous ne disposez pas d’un processeur multi-coeurs, vous remplacerez ‘GENERIC.MP‘ par ‘GENERIC. Laissez ‘GENERIC‘ en cas de
doute.
Vous voudrez peut-être prendre un autre café selon la puissance
de votre machine.
Il faut maintenant redémarrer sur le nouveau noyau (commande
reboot) avant de passer à la suite, où l’on met à jour les fichiers du
système après un petit nettoyage.
1
# rm - rf / usr / obj /*
2
# cd / usr / src
3
# make obj
4
# cd / usr / src / etc && env DESTDIR =/ make distrib - dirs
5
# cd / usr / src
6
# make build
Voilà, rien de plus qu’une série de petites commandes.
Cette opération peut paraı̂tre pour certains relativement lourde.
Heureusement, il existe le service M :Tier, qui permet de vérifier les
éventuelles mises à jour disponibles et de les installer tout simplement.
Si ça vous intéresse, lisez la suite.
6.2.2
Mise à jour automatique avec openup
M:tier met à disposition un script qui automatise et facilite la mise
à jour du système OpenBSD. Pour l’utiliser :
— Récupérer le script openup ;
— Lancer ce script ;
— C’est tout.
Vraiment, c’est extrêmement simple, non ?
En somme, ça tient en une ligne :
52
6.3
1
Être averti des mises à jour
# ftp -o - https :// stable . mtier . org / openup | sh
6.3
Être averti des mises à jour
Pour savoir si des mises à jour doivent être appliquées, vous pouvez
recevoir un mail de la part de l’équipe OpenBSD.
Inscrivez-vous à cette liste de diffusion en envoyant un mail à [email protected]. Vous écrirez à l’intérieur :
1
subscribe announce
Puis envoyez un second message avec :
1
subscribe security - announce
La page des errata contient la liste des patches de sécurités :
https://www.openbsd.org/errata60.html.
6.4
Changer de version
Lorsqu’une nouvelle version majeure d’OpenBSD est disponible, la
procédure de mise à jour est toujours détaillée sur le site officiel. Vous
pouvez si vous voulez consulter les notes de version lors du passage
de la 5.9 à la 6.0 à la page ci-dessous :
https://www.openbsd.org/faq/upgrade60.html
53
7
Les bases de données
Une base de données permet à une application de retrouver rapi-
dement des informations reliées entre elles.
Par exemple, si on prend le cas d’un blog, alors les commentaires
peuvent être stockés dans une base de données. Chaque commentaire
est écrit pour un certain article, par un visiteur donné, à une date
précise. Le commentaire comme l’article ont un lien bien précis. L’utilisateur peut avoir donné son adresse e-mail pour être averti de nouveaux messages...
Vous l’aurez compris, toutes ces données s’entrecroisent, et il est
plus efficace d’utiliser une base de données pour les retrouver rapidement.
Cependant, ce n’est pas forcément obligatoire. Surtout sur un serveur auto-hébergé, où vous n’aurez sans doute pas des milliers d’utilisateurs.
Comprenez donc bien que si vous pouvez choisir des applications
qui n’ont pas besoin de base de données, c’est un avantage pour vous
car c’est un élément en moins à administrer et sécuriser. Eh oui, car
une base de données peut elle aussi subir des attaques.
Une alternative est d’utiliser dans ce cas SQLite, puisque ce moteur
de base de données ne nécessite pas d’administration particulière, c’est
l’application qui se chargera de tout. Tous les avantages d’une base
de données avec ceux des fichiers simples en somme.
7.1
SQlite
SQlite est un moteur de base de données tout simplement génial.
Vous n’avez rien de particulier à faire pour l’administrer, c’est
l’application qui en a besoin qui se chargera de créer la base. En plus,
c’est très facile à sauvegarder puisqu’il s’agit dans ce cas d’un simple
fichier. Enfin, ce moteur sait se montrer léger et fonctionne bien même
sur du matériel peu puissant.
54
7.2
MariaDB (MySQL)
Alors certains diront que ce n’est pas le moteur le plus performant.
C’est vrai. Il reste plus efficace que pas de base de données du tout.
À moins d’avoir des milliers de visiteurs sur votre site, vous ne verrez
pas la différence avec un autre moteur de base de données. N’hésitez
pas, il y a plus d’avantages que d’inconvénients à utiliser SQLite en
auto-hébergement.
Pour l’installer, c’est tout bête : pkg add sqlite3.
7.2
MariaDB (MySQL)
MySQL est un autre moteur de base de données, sans doute le plus
répandu. Puisqu’Oracle possède désormais MySQL et en distribue une
version propriétaire, un fork a été créé qui s’appelle MariaDB. Ce
dernier est entièrement libre et est empaqueté pour OpenBSD.
Veillez à vous renseigner sur la sécurisation de ce service pour
compléter les informations suivantes.
Vous voudrez certainement utiliser MariaDB avec PHP. Installez
dans ce cas le paquet php-mysqli-7.0.* et activez l’extension mysqli
comme indiqué dans la partie sur PHP 36 .
Afin d’installer MariaDB, il faut lancer les commandes suivantes :
1
# pkg_add mariadb - server
2
# / usr / local / bin / mysql_install_db
La deuxième commande prépare la base de données par défaut et
les fichiers dont mariaDB aura besoin.
On ajoute ensuite les lignes suivantes au fichier /etc/login.conf
afin de laisser l’utilisateur mysqld travailler :
1
mysqld :\
2
: openfiles - cur =1024:\
3
: openfiles - max =2048:\
4
: tc = daemon :
36. → Voir page 39.
55
7.2
MariaDB (MySQL)
On peut maintenant lancer la commande suivante pour prendre
les changements en compte :
1
# [ -f / etc / login . conf . db ] && cap_mkdb / etc / login .\
conf
On démarre mysql :
1
# rcctl enable mysqld
2
# rcctl start mysqld
Très importante, la commande suivante permet de sécuriser un
minimum l’installation de mysql :
1
# / usr / local / bin / m y s q l _ s e c u r e _ i n s t a l l a ti o n
Donner un mot de passe fort 37 pour l’utilisateur root, et suivez
les recommandations. Cela ressemblera à ça :
1
Setting the root password ensures that nobody can \
2
root user without the proper authorisation .
log into the MySQL
3
4
You already have a root password set , so you can \
safely answer ’n ’.
5
6
7
Change the root password ? [ Y / n ] n
... skipping .
8
9
By default , a MySQL installation has an anonymous \
user , allowing anyone
10
to log into MySQL without having to have a user \
11
them .
12
go a bit smoother .
account created for
This is intended only for testing , and to \
make the installation
You should remove them before \
moving into a
37. → Voir page 187.
56
7.2
13
MariaDB (MySQL)
production environment .
14
15
16
Remove anonymous users ? [ Y / n ] Y
... Success !
17
18
Normally , root should only be allowed to connect \
from ’ localhost ’.
19
This
ensures that someone cannot guess at the root \
password from the network .
20
21
22
Disallow root login remotely ? [ Y / n ] Y
... Success !
23
24
By default , MySQL comes with a database named ’ test ’\
25
access .
26
before moving into a production environment .
that anyone can
This is also intended only for testing , and\
should be removed
27
28
29
30
Remove test database and access to it ? [ Y / n ] Y
- Dropping test database ...
ERROR 1008 ( HY000 ) at line 1: Can ’ t drop database ’\
test ’; database doesn ’ t exist
31
... Failed !
32
- Removing privileges on test database ...
Not critical , keep moving ...
33
... Success !
34
35
Reloading the privilege tables will ensure that all \
36
will take effect immediately .
changes made so far
37
38
39
Reload privilege tables now ? [ Y / n ] Y
... Success !
40
41
Cleaning up ...
57
7.2
MariaDB (MySQL)
42
If you ’ ve completed all of the above \
43
All done !
44
installation should now be secure .
steps , your MySQL
45
46
Thanks for using MySQL !
MariaDB devra être accessible par le serveur web. Ce dernier étant
dans un chroot, on lance la commande suivante qui nous permet
de reproduire la structure de la racine tout en attribuant les droits
nécessaires pour l’utilisateur mysql :
1
# install -d -m 0711 -o _mysql -g _mysql / var / www /\
var / run / mysql
Il faut en plus mettre ces lignes dans le fichier /etc/my.cnf, afin
de modifier les chemins pour le serveur http :
1
2
[ client ]
socket = / var / www / var / run / mysql / mysql . sock
3
4
5
[ mysqld ]
socket = / var / www / var / run / mysql / mysql . sock
Enfin, on relance mysql :
1
# rcctl restart mysqld
À partir de ce moment, vous pouvez créer et utiliser des bases de
données avec MariaDB.
7.2.1
Créer une base de données
À titre d’exemple, on va créer une nouvelle base de données pour
wordpress. Adaptez-le à votre cas.
Entrez la commande mysql -u root -p afin ”d’entrer” dans MariaDB (MySQL). Les commandes à exécuter sont indiquées ci-dessous
avec la réponse attendue :
58
7.2
MariaDB (MySQL)
1
# mysql -u root -p
2
Enter password :
3
Welcome to the MariaDB monitor .
Commands end with ;\
or \ g .
4
Your MariaDB connection id is 3
5
Server version : 10.0.23 - MariaDB - log openBSD port : \
mariadb - server -10.0.23 p0v1
6
7
Copyright ( c ) 2000 , 2015 , Oracle , MariaDB \
Corporation Ab and others .
8
9
Type ’ help ; ’ or ’\h ’ for help . Type ’\c ’ to clear \
the current input statement .
10
11
MariaDB [( none ) ] > CREATE DATABASE wordpress_base ;
12
Query OK , 1 row affected (0.01 sec )
13
14
MariaDB [( none ) ] > CREATE USER ’wp ’@ ’ localhost ’ \
IDENTIFIED BY ’ motdepasse ’;
15
Query OK , 0 rows affected (0.01 sec )
16
17
MariaDB [( none ) ] > GRANT ALL PRIVILEGES ON \
wordpress_base .* TO ’wp ’@ ’ localhost ’;
18
Query OK , 0 rows affected (0.00 sec )
19
20
MariaDB [( none ) ] > FLUSH PRIVILEGES ;
21
Query OK , 0 rows affected (0.00 sec )
22
23
MariaDB [( none ) ] > exit
24
Bye
Et voilà, vous pouvez utiliser cette base dans votre application.
Quelques explications tout de même :
— CREATE DATABASE wordpress base; : On crée la base de donnée
pour wordpress, appelée wordpress base,
59
7.3
PostgreSQL
— CREATE USER ’wp’@’localhost’ IDENTIFIED BY ’motdepasse’; :
On crée un utilisateur wp avec son mot de passe,
— La ligne suivante accorde à l’utilisateur wp les droits suffisants
sur la base créée juste avant.
GRANT ALL PRIVILEGES ON wordpress_base .* TO ’wp \
1
’@ ’ localhost ’;
7.3
PostgreSQL
PostgreSQL est un autre moteur de base de données, entièrement
libre.
Pour l’installer, il faut le paquet postgresql-server.
Afin de l’utiliser avec PHP, installez php-pgsql-7.0.*. Veillez à
bien lire le contenu du fichier
1
/ usr / local / share / doc / pkg - readmes / postgresql *
Ensuite, créez une base par défaut :
1
# su - _postgresql
2
$ mkdir / var / postgresql / data
3
$ initdb -D / var / postgresql / data -U postgres -E UTF8\
-A md5 -W
4
$ exit
Des options supplémentaires seront à adapter à votre cas dans le
fichier :
1
/ var / postgresql / data / postgresql . conf
Par exemple, pour que le serveur http qui est enfermé dans un
chroot puisse accéder à la base :
1
u ni x _ s o c k e t _ d i r e c to ri e s = ’/ var / www / run ’ # comma -\
separated list of directories
Démarrez le serveur postgresql avec :
60
7.3
PostgreSQL
1
# rcctl enable postgresql
2
# rcctl start postgresql
Pour se connecter à postgresql, on utilise la commande :
1
# su postgres -c psql
Voici quelques commandes permettant de gérer PostgreSQL.
— Modifier le mot de passe administrateur
1
# su postgres -c psql ALTER USER postgres WITH \
PASSWORD ’ mot_de_passe ’;
— Ajouter un utilisateur à la base :
1
# su postgres -c psql CREATE USER ’\
nouvelutilisateur ’ \
WITH PASSWORD ’\
2
mot_de_passe_de_l_utilisateur ’;
— Créer une nouvelle base
1
# su postgres -c psql << EOF
2
\ connect template1
3
CREATE DATABASE " nom_de_base " WITH ENCODING ’\
4
GRANT ALL PRIVILEGES ON DATABASE " nom_de_base " \
UTF -8 ’;
TO " utilisateur ";
5
ALTER DATABASE " nom_de_base " OWNER TO "\
utilisateur ";
6
\q
61
8
Courrier électronique
Cette partie explique l’installation d’un serveur de courriel à la
maison. Aucune base de données ne sera utilisée, puisque cela ne
représente aucun intérêt en auto-hébergement.
La mise en place d’un serveur mail est souvent considérée comme
délicate. On va donc détailler l’installation pas à pas suivant des étapes
simples :
— Configuration d’enregistrements DNS 38 particuliers ;
— Création des certificats pour sécuriser l’authentification avec le
serveur ;
— Configuration d’opensmtpd, qui se charge d’envoyer et recevoir
votre courrier ;
— Configuration de dovecot, qui permet la réception du courrier
avec un client comme thunderbird ;
— Faire le nécessaire pour que vos messages ne soient pas considérés
comme des spams ;
— Installer un antispam.
Nous verrons en passant comment ajouter de nouveaux comptes
mail sur votre serveur, et comment configurer votre client de messagerie pour l’utiliser.
N’hésitez pas à faire un tour sur la FAQ 39 qui vous explique ce qu’il
se passe lorsqu’un mail est envoyé et que votre serveur est inaccessible.
8.1
Configuration auprès du registrar pour les mails
Chez votre registre, ajoutez deux nouveaux champs :
— Un champ de type A qui pointe vers votre IP (sans doute déjà
présent) :
1
votredomaine . net A 109.190.193.182
38. → Voir page 180.
39. → Voir page 193.
62
8.2
Création des certificats
Bien sûr, remplacez 109.190.193.182 par votre IP.
— Un champ de type MX qui pointe vers le A précédent
1
votredomaine . net . MX 1 votredomaine . net .
Notez l’importance du . final.
Si vous disposez d’une IPv6, la configuration est identique, il suffit
seulement d’enregistrer un champ AAAA à la place du champ A.
Vérifiez auprès de votre registre qu’un ”reverse DNS ” est bien
configuré pour votre adresse IP.
Ça sera tout pour cette partie.
8.2
Création des certificats
Ces certificats permettront de chiffrer la communication entre votre
serveur et le logiciel qui récupère vos mails. Il saura ainsi qu’il est bien
en train de parler à votre serveur et pas à un autre, et la communication ne pourra pas être interceptée.
Nous avons ces deux commandes à lancer :
1
# openssl genrsa - out / etc / ssl / private / mail .\
votreserveur . net . key 4096
2
# openssl req - new - x509 - key / etc / ssl / private / mail .\
votreserveur . net . key \
3
- out / etc / ssl / certs / mail . votreserveur . net . crt -\
days 730
On modifie les permissions sur ces deux fichiers par sécurité :
1
# chmod 640 / etc / ssl / private / mail . votreserveur . net .\
key
2
# chmod 640 / etc / ssl / certs / mail . votreserveur . net . crt
Et voilà !
63
8.3
Configuration d’Opensmtpd
8.3
Configuration d’Opensmtpd
Opensmtpd est le serveur mail par défaut sur OpenBSD. Il est
déjà installé, reste à le configurer.
Cependant, avant toutes choses, ouvrez et redirigez 40 les ports
suivants : 25 (smtp), 587 (submission) et 993 (imaps).
Pour configurer opensmtpd, on édite /etc/mail/smtpd.conf pour
y mettre par exemple :
1
table aliases file :/ etc / mail / aliases
2
3
pki votreserveur . net key "/ etc / ssl / private / mail .\
4
pki votreserveur . net certificate "/ etc / ssl / certs /\
votreserveur . net . key "
mail . votreserveur . net . crt "
5
6
# Deliver
7
listen on lo0
8
listen on re0 port smtp hostname votreserveur . net \
9
listen on re0 port submission hostname votreserveur .\
tls pki votreserveur . net
net tls - require pki votreserveur . net auth
10
11
accept from local for local
alias < aliases > deliver\
to maildir "~/ Maildir "
12
accept from any for domain " votreserveur . net " \
deliver to maildir "~/ Maildir "
13
14
# Relay
15
accept from local for any relay
Vous n’avez quasiment rien à modifier dans ce fichier, mis à part
votreserveur.net à remplacer par votre nom de domaine.
STOOOP ! On veut des détails !
40. → Voir page 181.
64
8.3
Configuration d’Opensmtpd
Regardons les lignes de ce fichier les unes après les autres. Vous
avez certainement déjà remarqué que la syntaxe ressemble beaucoup
à celle du parefeu 41 .
— table aliases ... : On précise dans quel fichier se trouvent
les alias entre les utilisateurs.
— pki ... : On indique où se trouve la clé et le certificat correspondant servant à identifier le serveur.
Les lignes suivantes servent à l’envoi du courrier :
— listen on lo0 : On écoute en local, principalement pour les
messages émis par le système.
— La ligne suivante signifie qu’on écoute le port smtp sur l’interface
réseau re0. Les messages sont destinés à votre nom de domaine.
Enfin, on active le chiffrement TLS à la demande avec la clé
générée auparavant.
1
listen on re0 port smtp filter filter - pause \
hostname votreserveur . net tls pki \
votreserveur . net
— listen on re0 port submission hostname votreserveur.net
tls-require pki votreserveur.net auth : Comme le précédent,
avec le chiffrement sur le port imaps pour une sécurité lors de la
récupération des messages avec un logiciel comme Thunderbird.
Les lignes suivantes concernent la réception du courrier :
— accept from local for local alias <aliases> deliver to
maildir "~/Maildir" : On distribue le courrier local pour chaque
alias indiqué dans le fichier /etc/mail/aliases, autrement dit aux
utilisateurs du système.
— accept from any for domain "votreserveur.net" deliver
to maildir "~/Maildir" : On distribue le courrier venant de
l’extérieur.
Et enfin on envoie le courrier destiné aux autres serveurs :
41. → Voir page 23.
65
8.4
Dovecot pour l’imap
— accept from local for any relay
Nous passons maintenant à une étape simple mais importante afin
que les mails soient correctement émis. Il faut indiquer dans le fichier
/etc/myname votre nom de domaine :
1
votredomaine . net
Nous pouvons maintenant activer et relancer le serveur smtpd :
1
# rcctl enable smtpd
2
# rcctl restart smtpd
Voilà pour opensmtpd.
Je vous invite à faire en sorte que les messages du système que
l’utilisateur root reçoit soient transférés à un compte utilisateur simple
pour lequel vous récupérerez les messages. S’il s’agit par exemple de
toto, nous allons ajouter dans le fichier /etc/mail/aliases :
1
root :
toto
Ainsi, lorsque toto consultera son courrier, il pourra lire les informations du système (alertes de sécurité... 42 ).
8.4
Dovecot pour l’imap
Dovecot va être utilisé comme serveur imap, afin de pouvoir récupérer
son courrier à partir d’un client comme Thunderbird.
On installe dovecot :
1
# pkg_add dovecot
On édite 43 maintenant le fichier /etc/dovecot/local.conf pour
y mettre le contenu suivant :
1
# listen both ipv4 and ipv6
2
listen = * , [::]
3
42. → Voir page 21.
43. → Voir page 190.
66
8.4
Dovecot pour l’imap
4
# we use maildir
5
mail_location = maildir :~/ Maildir
6
7
# imap > pop
8
protocols = imap
9
10
# no plaintext , let ’ s keep it secure with ssl
11
ssl = yes
12
ssl_cert = </ etc / ssl / certs / mail . votreserveur . net . crt
13
ssl_key = </ etc / ssl / private / mail . votreserveur . net .\
14
d i s a b l e _ p la in tex t_ au th = yes
key
15
16
passdb {
driver = bsdauth
17
18
}
19
20
userdb {
driver = passwd
21
22
}
Afin que dovecot fonctionne correctement, il faut maintenant éditer 44
le fichier /etc/login.conf pour ajouter quelques lignes : (voir le fichier /usr/local/share/doc/pkg-readmes/dovecot*)
1
dovecot :\
2
: openfiles - cur =512:\
3
: openfiles - max =2048:\
4
: tc = daemon :
On prend en compte les changements récents avec la commande
suivante :
1
# [ -f / etc / login . conf . db ] && cap_mkdb / etc / login .\
conf
44. → Voir page 190.
67
8.5
Configurer son client de messagerie
Pour terminer cette partie, on active dovecot et on relance les
différents éléments constituant le serveur mail.
1
# rcctl enable dovecot
2
# rcctl start dovecot
3
# rcctl restart smtpd
Il vous est désormais possible d’utiliser votre serveur pour recevoir
et envoyer du courrier.
8.5
Configurer son client de messagerie
Pour consulter vos mails sur le serveur, vous pouvez utiliser un
client de messagerie comme l’excellent Thunderbird, logiciel-libre respectueux de votre vie privée.
Voici les paramètres qu’il faudra indiquer au logiciel pour envoyer
et recevoir des courriels. Notez que tous ne vous seront peut-être pas
demandés :
— Nom du serveur : votredomaine.net
— Adresse électronique : [email protected]
— Nom d’utilisateur : l’identifiant choisi à la création d’un compte
mail 45 .
— Serveur entrant : IMAP
— port : 993
— SSL : SSL/TLS
— Serveur sortant : SMTP
— port : 587
— SSL : STARTTLS
Vous souhaiterez peut-être plutôt utiliser un webmail 46 , afin d’accéder
à votre messagerie à partir d’un navigateur web.
45. → Voir page 84.
46. → Voir page 104.
68
8.6
Ne pas être mis dans les spams
8.6
Ne pas être mis dans les spams
En l’état, vous pouvez recevoir et envoyer des messages. Cependant, il se peut que certains serveurs de messagerie considèrent vos
mails comme des spams. Heureusement, il existe quelques petites
manipulations pour rendre vos messages légitimes. Nous allons les
détailler dans les paragraphes suivants. Gardez à l’esprit qu’elles se
complètent.
8.6.1
Reverse DNS
Chez votre registrar, ajoutez à l’IP de votre serveur un reverse
DNS ou en français DNS inverse.
Alors que votre nom de domaine est relié à l’IP du serveur, il faut
aussi configurer la réciproque, c’est-à-dire relier à votre IP le nom de
domaine.
8.6.2
SPF
Ajoutez un champ DNS 47 de type SPF auprès de votre registrar
tel que celui-ci :
1
votredomaine . net .
SPF ‘‘v = spf1 a mx ~ all ’ ’
ou bien sous forme de champ TXT si le SPF n’est pas disponible :
1
votredomaine . net . TXT ‘‘v = spf1 a mx ~ all ’ ’
8.6.3
Signature DKIM
Cette technique consiste à signer les messages émis par le serveur
à l’aide d’une clé privée. On ajoute ensuite dans un champ DNS 48 la
clé publique qui permettra au destinataire de vérifier que le mail reçu
provient bien de votre serveur avec la signature.
47. → Voir page 180.
48. → Voir page 180.
69
8.6
Ne pas être mis dans les spams
Je n’ai rien compris !
Je reprends. Nous allons créer une clé privée et une clé publique.
La clé privée servira à signer les messages. On l’appelle ”privée”
car vous devez être la seule personne capable de signer (comme pour
vos chèques ou vos impôts). La clé publique est là pour vérifier que la
signature est bien authentique. On peut voir ça comme une pièce de
puzzle unique, qui est la seule à pouvoir entrer dans l’empreinte créée
par la signature.
Les commandes suivantes permettent de fabriquer la paire de clés
qui servira à signer les mails émis :
1
### Dossier pour les clef
2
# mkdir -p / etc / dkimproxy / private
3
### On protege le dossier
4
# chown _dkimproxy : wheel / etc / dkimproxy / private
5
### en modifiant les permissions
6
# chmod 700 / etc / dkimproxy / private
7
### On va dans le dossier
8
# cd / etc / dkimproxy / private
9
### On genere les clef
10
# openssl genrsa - out private . key 1024
11
# openssl rsa - in private . key - pubout - out public .\
12
### On protege les clef
13
# chown _dkimproxy : wheel private . key public . key
14
# chmod 600 private . key
key
On peut maintenant installer dkimproxy comme d’habitude :
1
# pkg_add dkimproxy
Afin de configurer la signature des messages envoyés, il faut éditer 49
le ficher /etc/dkimproxy out.conf ainsi :
1
listen
127.0.0.1:10027
49. → Voir page 190.
70
8.6
Ne pas être mis dans les spams
2
relay
127.0.0.1:10028
3
domain
votredomaine . net
4
signature dkim ( c = relaxed )
5
signature domainkeys ( c = nofws )
6
keyfile
/ etc / dkimproxy / private / private . key
7
selector
pubkey
Euh, c’est quoi tout ça ?
Quelques menues explications :
— Les lignes listen et relay indiquent respectivement les ports
locaux où dkimproxy recevra les mails à chiffrer et où il les fera
suivre.
— domain décrit votre nom de domaine : à modifier selon votre cas.
— keyfile permet d’indiquer où se trouve le chemin vers la clé
servant à signer les mails.
— selector définit l’identifiant qui sera présent dans le champ
DNS 50 que l’on va définir ensuite.
Bien, reste à indiquer à opensmtpd de signer les mails. On va donc
ajouter dans le fichier /etc/mail/smtpd.conf une ligne pour écouter
sur le port 10028 en local, afin d’envoyer les mails que dkimproxy aura
signé. On leur donne l’étiquette ”DKIM” pour les repérer ensuite.
1
listen on lo0 port 10028 tag DKIM
Les messages qui auront l’étiquette ”DKIM” peuvent être envoyés.
On n’envoie plus les mails s’ils ne sont pas passés par dkimproxy.
1
accept tagged DKIM for any relay
Enfin, les messages pas encore signés sont envoyés à dkimproxy :
1
accept from local for any relay via smtp\
: //1 27.0.0.1:10027
Le fichier /etc/mail/smtpd.conf ressemble désormais à ça :
50. → Voir page 180.
71
8.6
1
Ne pas être mis dans les spams
table aliases file :/ etc / mail / aliases
2
3
pki mail . votreserveur . net key "/ etc / ssl / private / mail\
4
pki mail . votreserveur . net certificate "/ etc / ssl /\
. votreserveur . net . key "
certs / mail . votreserveur . net . crt "
5
6
# Deliver
7
listen on lo0
8
listen on lo0 port 10028 tag DKIM
9
listen on re0 port 25 hostname mail . votreserveur . net\
tls pki mail . votreserveur . net
10
listen on re0 port 587 hostname mail . votreserveur .\
net tls - require pki mail . votreserveur . net auth
11
12
accept from local for local
alias < aliases > deliver\
13
accept from any for domain " votreserveur . net " \
to maildir "~/ Maildir "
deliver to maildir "~/ Maildir "
14
15
# Relay
16
# dkim tagged can be sent
17
accept tagged DKIM for any relay
18
# if not dkim tagged , send it to dkimproxy
19
accept from local for any relay via smtp\
:/ /1 27 .0 .0 .1 :10027
Ça va ? Vous suivez toujours ? Je vois à votre regard pétillant que
vous attendez la fin avec impatience !
Pour terminer, nous allons ajouter un nouveau champ dans vos
DNS 51 auprès de votre registrar. Eh oui, encore ! On va en réalité
indiquer le nécessaire pour pouvoir vérifier la signature des messages
qui auront un drapeau ”pubkey”.
Il s’agira d’un champ DKIM ou TXT selon ce qui est disponible.
51. → Voir page 180.
72
8.6
Ne pas être mis dans les spams
Remplissez-le ainsi :
— Nom de domaine : pubkey. domainkey.votredomaine.net.
— Contenu : v=DKIM; k=rsa; p=... Recopiez à la place des points
de suspension le contenu du fichier public.key, que vous pouvez
afficher avec la commande cat :
1
# cat / etc / dkimproxy / private / public . key
Finalement, activez dkimproxy puis rechargez opensmtpd avant
de tester si vous avez réussi à configurer correctement l’envoi de vos
mails.
1
# rcctl enable dkimproxy_out
2
# rcctl start dkimproxy_out
3
# rcctl restart smtpd
Pour vérifier que vous n’êtes pas en spam, suivez les indications
du site mail-tester. Vous allez envoyer un message à l’adresse donnée,
et normalement, vous devriez obtenir au moins une note de 9/10 :
73
8.7
Installer un antispam
Il se peut qu’on vous parle d’un enregistrement dmarc. Libre à
vous de l’ajouter à vos DNS, mais ce n’est pas obligatoire. À vrai
dire, le score obtenu est déjà meilleur qu’avec nombre de ”grands”
services de messagerie.
8.7
Installer un antispam
Votre serveur n’est actuellement pas à l’abri des spams. Nous allons
donc voir une méthode simple avec spamassassin pour s’en protéger.
Notez qu’il existe des techniques plus efficaces mais nettement plus
difficiles à mettre en place puisque les gros fournisseurs de messagerie
disposent de nombreuses adresses IP. Pour ceux que le sujet intéresse,
vous pouvez consulter la documentation de spamd et de bgpd. Nous
en parlerons rapidement dans un second temps.
8.7.1
Spamassassin
Nous allons faire simple et nous appuyer sur l’excellent spamassassin. Notez qu’avec ce dernier, j’ai dû recevoir une dizaine de spams
au début le temps qu’il s’entraı̂ne. Il a très vite appris et ces gêneurs
arrivent désormais en quantité homéopathique.
C’est parti, on commence par installer les paquets utiles :
1
# pkg_add p5 - Mail - SpamAssassin spampd
74
8.7
Installer un antispam
Pour que spampd puisse faire le lien entre le serveur smtp et spamassassin qui vérifie les messages, il doit tourner en arrière-plan. On
active donc ce service
1
# rcctl enable spampd
2
# rcctl start spampd
On s’assure que spampd va bien étiqueter chaque message :
1
rcctl set spampd flags " - - tagall "
Il en va de même pour spamassassin qui doit être actif :
1
# rcctl enable spamassassin
2
# rcctl start spamassassin
Nous allons maintenant faire passer tous les messages entrants par
spamassassin qui va les vérifier. Pour cela, il faut les envoyer sur le
port 10025. S’il ne s’agit pas de spam, alors spampd se charge de les
renvoyer sur le port 10026. Tous les messages arrivant ainsi recevront
l’étiquette ”NOSPAM”, pour que l’on sache qu’il faut les distribuer.
Voici donc les lignes à ajouter au fichier /etc/mail/smtpd.conf :
1
2
# Messages verifies par spamassassin
3
listen on lo0 port 10026 tag NOSPAM
4
5
# Message venant du èsystme
6
accept from local for local alias < aliases > deliver \
7
# Message NOSPAM
8
accept tagged NOSPAM for domain " votreserveur . net " \
9
# Message venant d ’ ailleurs , on scanne avec \
to maildir "~/ Maildir "
deliver to maildir "~/ Maildir "
spamassassin
10
accept from any for domain " votreserveur . net " relay \
via smtp ://127.0.0.1:10025
75
8.8
Antispam avec spamd (difficile)
Référez-vous à l’exemple plus complet à la fin 52 du document si
vous le souhaitez pour bien comprendre comment les choses fonctionnent.
À ce point du document, le serveur smtp fonctionne ainsi :
8.8
Antispam avec spamd (difficile)
Spamd fait semblant d’être un serveur mail afin de rejeter les
spams. Il a été écrit dans l’optique d’être très efficace et ne pas ralentir
la machine. Bien sûr, il transmet les mails légitimes au serveur smtp
52. → Voir page 206.
76
8.8
Antispam avec spamd (difficile)
ensuite.
Ce qui est rigolo, c’est qu’il va faire en sorte de ralentir les spammeurs en communiquant tout doucement avec eux et leur faire consommer inutilement leur ressources :) .
Enfin, avantage non négligeable, il est présent par défaut dans
OpenBSD.
8.8.1
Comment ça marche ?
Afin de reconnaı̂tre les pourriels, spamd va mettre en attente ceux
qui contactent le serveur. Ils sont mis sur liste grise.
Normalement, un serveur expéditeur légitime réessaie automatiquement de délivrer le message après un certain temps. Lors du 2e
essai, ce serveur est mis sur liste blanche.
Les spammeurs ne vont pas réessayer de délivrer le message. Dans
ce cas, ils sont mis après un délai assez long sur liste noire. Par la
suite, votre serveur n’écoutera même plus les requêtes provenant de
ces spammeurs.
Attention : Cette méthode, bien que très efficace, suppose que
l’expéditeur fait les choses comme il faut. Ce n’est malheureusement
pas toujours le cas, notamment pour certains sites marchands. Pensezy. Vous devriez de toute manière utiliser une adresse poubelle comme
guerrilamail par exemple dans ces cas de figure.
Afin d’enregistrer les vilains expéditeurs, il faudra exécuter la commande spamdb régulièrement.
8.8.2
Mise en place
On commence par activer spamd au démarrage, en indiquant les
options dont il aura besoin, puis on le lance :
1
rcctl enable spamd
2
rcctl set spamd flags " - v -G 25:4:4242"
3
rcctl start spamd
77
8.8
Antispam avec spamd (difficile)
Le premier chiffre correspond au nombre de minutes qu’un expéditeur
doit attendre avant de réessayer de nous renvoyer son mail (puisque
les spammeurs envoie des salves de mails très rapidement). Le second
correspond au temps qu’une entrée reste dans la liste grise, et le dernier le temps pendant lequel une entrée restera sur la liste blanche (en
heures).
On va maintenant éditer 53 la configuration du parefeu 54 et filtre
de paquets (packet filter). Il va envoyer à spamd tous le flux destiné au
serveur smtp, qui relaiera ensuite le mail normalement s’il est légitime.
Voici ce qu’il faut donc ajouter dans /etc/pf.conf :
1
table < nospamd > persist file "/ etc / mail / nospamd "
2
pass in on egress proto tcp from any to any port \
smtp divert - to 127.0.0.1 port spamd
3
pass in on egress proto tcp from < nospamd > to any \
port smtp
4
pass in log on egress proto tcp from < spamd - white > \
to any port smtp
Dans l’ordre des lignes :
— On crée un fichier /etc/mail/nospamd qui contiendra les expéditeurs
légitimes.
— On dévie tout ce qui devait arriver sur le port smtp pour aller
dans spamd.
— On laisse passer toutes les IP qui étaient dans le premier fichier.
— On laisse passer les IP enregistrées par spamd dans la liste
blanche (en mémoire). spamd et pf partagent ici la même table.
Voilà pour le parefeu 55 . N’oubliez pas de le recharger :
1
# pfctl -d && pfctl - ef / etc / pf . conf
Il est nécessaire de régulièrement charger la liste noire des spammeurs dans pf afin que spamd fonctionne bien. Nous allons nous servir
53. → Voir page 190.
54. → Voir page 23.
55. → Voir page 23.
78
8.8
Antispam avec spamd (difficile)
d’une tâche cron pour ça. Saisissez # crontab -e, puis ajoutez la ligne
suivante :
1
*/10
*
*
*
*
/ usr / libexec / spamd - setup
Pour l’édition, référez-vous aux rappels sur l’utilisation de vi 56 .
Nous lançons ici spamd-setup toutes les 10 minutes. Ce temps doit
être inférieur au temps que doit attendre un expéditeur pour tenter
de renvoyer son message définit dans l’appel de spamd. Nous avions
mis 25 minutes.
8.8.3
Piéger les spammeurs
Vous pouvez piéger les spammeurs en laissant traı̂ner sur le web
une fausse adresse mail. Si spamd voit un message arriver pour cette
adresse, alors il sait déjà que c’est un spam : il peut donc le mettre
sur liste noire. Vous voilà protégés pour l’avenir.
Afin de glisser cette ”adresse-piège” sur le web sans que ça soit
visible par les humains, vous pouvez l’insérer ainsi dans le code html
de votre site :
1
<a href =" mailto : bl ackh ole@y euxd eliba d . net " > </a >
Pour indiquer à spamdb cette adresse piège, il faut ajouter les options suivantes à spamdb (attention au ”b” final, ce n’est pas spamd). :
1
# spamdb -T -a ’ blac khole @yeu xdeli bad . net ’
Bien entendu, cette adresse piège ne doit pas être créée et ne risque
pas de servir à quiconque.
8.8.4
Voir l’activité de spamd
Pour voir l’activité de spamd, lancez la commande spamdb pour
voir apparaı̂tre des choses comme ça :
56. → Voir page 190.
79
8.8
1
Antispam avec spamd (difficile)
WHITE\
|62.4.1.33|||1462699174|1462699174|1465809574|1|0\
2
GREY |182.70.43.24| abts - mum - dynamic -024.43.70.182.\
airtelbroadband . in | < Estella32@thunderguy . co . uk \
>| < t hu ba n@ ye uxdelibad . net \
>|1473409924|1473424324|1473424324|1|0
3
GREY |14.183.132.63| static . vnpt . vn | < Abby5@toddelliott\
. com >| < th ub an@yeuxdelibad . net \
>|1473410586|1473424986|1473424986|1|0
On peut lire dans l’ordre :
— Si l’IP est sur liste blanche (WHITE) ou grise (GREY).
— L’IP concernée.
— Temps où cette entrée a été vue la première fois.
— Le moment où l’IP sera passée en liste blanche.
— Le moment où l’IP sera retirée de la base de données.
— Le nombre de fois où cette IP a été bloquée.
— Le nombre de fois où cette IP a été autorisée.
Il n’y a pas à dire, les ”temps” sont illisibles pour les humains.
Utiliser la commande date pour avoir un format lisible :
1
2
$ date -r 1462699174
Sun May
8 11:19:34 CEST 2016
Pour manuellement mettre sur liste blanche une IP que vous
savez valide, utilisez :
1
# spamdb -a "62.4.1.37"
8.8.5
Problèmes avec le greylisting
Trop de personnes utilisent encore un fournisseur de mail, comme
par exemple Gmail. Ces derniers disposent de plusieurs serveurs et
donc de plusieurs adresses IP. Malheureusement, le temps que l’adresse
IP du premier serveur à tenter l’envoi d’un message soit mise sur liste
80
8.8
Antispam avec spamd (difficile)
blanche, c’est un autre de leurs serveurs avec une IP différente qui
prend le relais. Au final, ils ne sont jamais mis sur liste blanche.
Vous pouvez déjà commencer par enregistrer une liste pré-remplie
d’IP connues comme légitimes, située à l’adresse suivante (merci à
Peter N.M. Hansteen) : http://www.bsdly.net/˜peter/nospamd .
1
# ftp -o / etc / mail / nospamd http :// www . bsdly . net /~\
peter / nospamd
Cependant, cette précaution peut ne pas toujours suffire. Je vous
propose alors de profiter de bgp-spamd : http://bgp-spamd.net. Ce
service communautaire propose de récupérer des listes de spammeurs
et d’expéditeurs légitimes. Pour l’instant, seuls des serveurs vérifiés
et de confiance participent à ce service, mais chacun peut en profiter.
Vous serez alors tranquilles pour la plupart des cas.
Il repose sur le service bgpd, que l’on va configurer ainsi dans le
fichier /etc/bgpd.conf :
1
spamdAS ="65066"
2
3
AS 65001
4
fib - update no
5
# Mandatory , to not update the
# local routing table
6
7
group " spamd - bgp " {
8
remote - as $spamdAS
9
multihop 64
10
announce none
# Do not send Route Server \
any information
11
12
# us . bgp - spamd . net
13
neighbor 64.142.121.62
14
15
# eu . bgp - spamd . net
16
neighbor 217.31.80.170
17
81
8.8
Antispam avec spamd (difficile)
18
# IPv6 eu . bgp - spamd . net
19
neighbor 2 a00 :15 a8 :0:100:0: d91f :50 aa :1
20
}
21
22
# ’ match ’ is required , to remove entries when routes\
23
match from group spamd - bgp community $spamdAS :42
are withdrawn
\
set pftable " bgp - spamd - bypass "
Il y aura donc dans le groupe spamd-bgp toutes les IP connues
des spammeurs. Sera créée aussi une table pour pf nommée bgpspamd-bypass qui contient la liste des expéditeurs légitimes connus.
Il faut donc ajouter ces quelques lignes dans le fichier /etc/pf.conf :
1
set limit table - entries 400000
# Full list is 200\
k entries as of March 1
2
table <bgp - spamd - bypass > persist
3
4
#[...]
5
6
# Sous la section concernant spamd
7
pass in log quick on egress proto tcp from <bgp -\
spamd - bypass > to any port smtp
Référez-vous à l’exemple de pf.conf à la fin du document 57 en cas
de doute.
Relancez le parefeu 58 :
1
# pctfl -d && pfctl - ef / etc / pf . conf
Activez et démarrez maintenant bgpd :
1
rcctl enable bgpd
2
rcctl start bgpd
Il ne reste plus qu’à faire prendre en compte ces listes par spamd.
Nous allons utiliser la même technique qu’auparavant, à savoir une
57. → Voir page 197.
58. → Voir page 23.
82
8.8
Antispam avec spamd (difficile)
tâche cron. Tapez # crontab -e puis remplacez la ligne qui appelait
spamd-setup par :
1
*/10
*
*
*
*
/ usr / local / sbin / bgp - spamd . black . sh
Créez maintenant le script /usr/local/sbin/bgp-spamd.black.sh
pour y mettre
1
#!/ bin / sh
2
AS =65066
3
4
bgpctl show rib community $ { AS }:666 |
sed -e ’1 ,4d ’ -e ’s /\/.* $ // ’ -e ’s /[ \
5
\*\ >]*// ’ > / var / mail / spamd . black
6
7
/ usr / libexec / spamd - setup
8
9
/ usr / bin / logger -p mail . info -t spamd - update " spamd \
black list updated ; bgp - spamd - bypass : $ (/ sbin /\
pfctl -t bgp - spamd - bypass -T show | / usr / bin / wc \
-l ) "
N’oubliez pas de le rendre exécutable avec
1
# chmod + x / usr / local / sbin / bgp - spamd . black . sh
Vous noterez que ce script appelle bien spamd-setup.
Nous avons presque terminé, il faut maintenant modifier le fichier
de configuration de spamd situé à l’emplacement /etc/mail/spamd.conf :
1
# Configuration file for spamd . conf
2
3
4
all :\
: nixspam : bgp - spamd :
5
6
# Nixspam recent sources list .
7
# Mirrored from http :// www . heise . de / ix / nixspam
8
nixspam :\
83
8.9
Ajouter un nouveau compte mail
: black :\
9
10
: msg =" Your address % A is in the nixspam list\
11
See http :// www . heise . de / ix / nixspam / dnsbl_en /\
\n\
for details ":\
12
: method = http :\
13
: file = www . openbsd . org / spamd / nixspam . gz
14
15
bgp - spamd :\
16
: black :\
17
: msg =" Your address % A has sent mail to a \
spamtrap \ n \
18
within the last 24 hours ":\
19
: method = file :\
20
: file =/ var / mail / spamd . black :
8.9
Ajouter un nouveau compte mail
Un compte mail est en fait un simple compte d’utilisateur. Vous
pouvez donc en créer un nouveau avec la commande adduser. Il faudra
juste veiller à donner à l’utlisateur le shell nologin par mesure de
sécurité. Ainsi, il ne pourra pas exécuter de commandes sur le serveur.
Voici à quoi ça ressemblera :
1
root@votre serveur [~] # adduser
2
Use option ‘‘- silent ’ ’ if you don ’ t want to see all \
warnings and questions .
3
4
Reading / etc / shells
5
Check / etc / master . passwd
6
Check / etc / group
7
8
Ok , let ’ s go .
9
Don ’ t worry about mistakes . There will be a chance \
later to correct any input .
84
8.9
Ajouter un nouveau compte mail
10
Enter username []: toto
11
Enter full name []: Jean - Eudes
12
Enter shell csh ksh nologin sh [ nologin ]: nologin
13
Uid [1005]:
14
Login group toto [ toto ]:
15
Login group is ‘‘ toto ’ ’. Invite toto into other \
groups : guest no
16
[ no ]:
17
Login class authpf bgpd daemon default dovecot \
18
[ default ]:
19
Enter password []:
20
Enter password again []:
pbuild staff unbound
21
22
Name :
toto
23
Password :
***************
24
Fullname :
Jean - Eudes
25
Uid :
1005
26
Gid :
1005 ( toto )
27
Groups :
toto
28
Login Class : default
29
HOME :
/ home / toto
30
Shell :
/ sbin / nologin
31
OK ? ( y / n ) [ y ]: y
32
Added user ‘‘ toto ’ ’
33
Add another user ? ( y / n ) [ y ]: n
34
Goodbye !
Bien sûr, vous aurez choisi un mot de passe de qualité 59 .
Pour supprimer l’utilisateur, c’est nettement plus rapide :
1
# userdel toto
2
# groupdel toto
Et voilà !
59. → Voir page 187.
85
8.9
Ajouter un nouveau compte mail
8.9.1
Redirection de mail
Il est simplissime de transférer les mails reçus sur une adresse vers
un autre compte de messagerie.
Par exemple, vous disposez d’une adresse [email protected]
et souhaitez que tous les messages reçus par bibi soient transférés
automatiquement à [email protected].
Pour ça, il suffit d’éditer 60 le fichier /etc/mail/aliases, puis d’y
ajouter une ligne comme celle-ci :
1
bibi : jean - eud es@openmailbox . org
De façon générale, ça donne :
1
utilisateur : adresse1 . mail . com , adresse2 . mail . com
Afin que ce changement soit pris en compte, il reste à lancer les
commandes suivantes :
1
# newaliases
2
# rcctl restart smtpd
C’est tout ! Je vous l’avait dit que c’était simple.
8.9.2
Vérifier que tout fonctionne bien
Vous voudrez peut-être tester votre serveur mail après tous ces
efforts. Vous l’avez bien mérité. Vous pouvez bien entendu écrire à
des amis, mais cela peut poser des soucis :
— Il faudra attendre leur réponse ;
— Ils ne vous retourneront pas toutes les informations dont vous
pourriez avoir besoin ;
— Il faut avoir des amis.
Il existe heureusement des robots auxquels ont peut écrire un mail,
qui vous répondront très vite en vous donnant de précieuses informations. Nous avons déjà parlé de www.mail-tester.com un peu plus haut.
Il existe aussi les adresses suivantes :
60. → Voir page 190.
86
8.9
Ajouter un nouveau compte mail
— [email protected][email protected][email protected]
Vous en trouverez d’autres sur cette page :
http://www.bortzmeyer.org/repondeurs-courrier-test.html .
87
9
Sauvegardes
On peut utiliser un serveur à la maison pour sauvegarder ses do-
cuments. C’est une précaution qui ne fait jamais de mal.
Il faut penser aussi à sauvegarder le serveur en cas de défaillance
du disque dur qui vieillit un peu, d’un orage virulent ou encore d’un
dérapage incontrôlé du chat qui joue derrière les meubles...
Pour l’exemple, nous allons réaliser le tout sur un disque dur
supplémentaire (disque dur externe) que l’on va préparer afin d’avoir
deux partitions :
— Une partition pour sauvegarder le serveur ;
— Une partition pour les sauvegardes personnelles.
9.1
Partitionnement du disque dur
Branchez le disque dur au serveur. Si vous lancez la commande
dmesg, vous verrez apparaı̂tre quelque chose comme ça :
1
umass0 at uhub0 port 1 configuration 1 interface 0 "\
Western Digital Ext HDD 1021" rev 2.00/20.21 \
addr 2
2
umass0 : using SCSI over Bulk - Only
3
scsibus2 at umass0 : 2 targets , initiator 0
4
sd1 at scsibus2 targ 1 lun 0: <WD , Ext HDD 1021 , \
2021 > SCSI2 0/ direct fixed serial\
. 1 0 5 8 1 0 2 1 3 8 3 2353 73034
5
sd1 : 1907727 MB , 512 bytes / sector , 3907024896 sectors
Ces messages nous apprennent que le disque branché sera identifié
par sd1.
On initialise le disque avec fdisk en créant une grande partition :
1
# fdisk -i sd1
On va diviser cette partition en 2 avec disklabel.
1
# disklabel -E sd1
88
9.1
Partitionnement du disque dur
Maintenant, on peut créer les partitions l’une après l’autre. En cas
de doute, appuyez sur p pour afficher l’état actuel du disque.
— Pour créer la première partition, on tape a a. Cela signifie ”ajouter une partition a”.
— Laissez l’offset par défaut.
— Réglez la taille de la partition selon vos besoins. Notez que
vous pouvez définir une taille avec une unité : 4G ; avec
une proportion du disque : 50% ; ou avec un pourcentage de
l’espace libre restant : 25&.
— Choisissez le système de fichier 4.2BSD.
— Créez la deuxième partition de la même façon avec cette fois-ci
la combinaison a d. Notez qu’on ne peut pas créer une partition
”c”, cette lettre étant réservée pour désigner le disque entier. De
même, je préfère ne pas utiliser ”b” ici, car c’est souvent (mais
pas obligatoirement) utilisé pour une partition de type ”swap”.
Toutes les autres lettres de l’alphabet restent valables.
Une fois terminé, appliquez les changements avec la lettre q.
Regardons maintenant l’état du disque en tapant disklabel
sd1 :
1
# / dev / rsd1c :
2
type : SCSI
3
disk : SCSI disk
4
label : Ext HDD 1021
5
duid : 782 f1ddb783cdd13
6
flags :
7
bytes / sector : 512
8
sectors / track : 63
9
tracks / cylinder : 255
10
sectors / cylinder : 16065
11
cylinders : 243201
12
total sectors : 3907024896
13
boundstart : 64
89
9.1
Partitionnement du disque dur
14
boundend : 3907024065
15
drivedata : 0
16
17
16 partitions :
18
#
size
[ fsize bsize
19
a:
20
d:
21
c:
offset
fstype \
64
4.2 BSD \
629153536
4.2 BSD \
cpg ]
629153472
4096 32768
1
3277870464
8192 65536
1
3907024896
0
unused
Au secours, c’est quoi tout ça ? ? ?
Pas de panique, tout n’est pas important. Commençons pour une
fois par les dernières lignes. Chaque partie décrit une caractéristique
la partition.
Partition
Taille
Début
Système de fichier
Divers
a:
629153472
64
4.2BSD
4096 3...
d:
3277870464
629153536
4.2BSD
8192 6...
L’autre point important (parce qu’il faut l’avouer, il y a beaucoup
d’informations qui ne nous serviront pas), c’est le ”duid”.
1
duid : 782 f1ddb783cdd13
Cet élément nous servira à identifier le disque lorsqu’on voudra le
monter.
Nous avons presque terminé, il faut maintenant formater les deux
partitions créées (a et d) :
1
# newfs / dev / rsd1a
2
# newfs / dev / rsd1d
90
9.2
Sauvegarde du serveur
9.2
Sauvegarde du serveur
OpenBSD a déjà pensé à tout. En effet, il sauvegardera chaque
jour le système si une partition /altroot est présente.
Nous allons donc ajouter la ligne suivante dans le fichier /etc/fstab :
1
782 f1ddb783cdd13 . a / altroot ffs xx 0 0
Vous remarquerez qu’on identifie la partition avec <numéro duid
du disque>.a.
Afin que chaque nuit, le serveur soit sauvegardé, ajoutez maintenant la ligne suivante dans le fichier /etc/daily.local :
1
ROOTBACKUP =1
Et c’est tout !
Si un jour le disque du serveur a une défaillance, vous pourrez
quand même démarrer le serveur pour le dépanner. Il faudra alors
booter sur la partition de sauvegarde. Tout cela se passera au tout
début du démarrage de la machine, lorsque vous verrez le prompt
boot >. Vous écrirez à ce moment là :
1
boot > set device hd1a
2
boot > boot -s
Ou tout en une seule fois :
1
boot > boot -s hd1a :/ bsd
Si le moment venu vous ne savez plus sur quelle partition se trouve
votre sauvegarde, tapez ceci :
1
boot > machine diskinfo
9.3
Sauvegarde de vos données personnelles
Nous allons utiliser la seconde partition du disque externe pour y
sauvegarder nos données. Tout d’abord, on crée un point de montage :
1
# mkdir -p / mnt / sauvegardes
91
9.4
Un cloud synchronisé avec syncthing
Ensuite, on ajoute une ligne au fichier /etc/fstab pour monter
ce disque :
1
782 f1ddb783cdd13 . d / mnt / sauvegardes ffs rw , nodev ,\
nosuid , softdep , noatime 1 2
Afin de le monter, tapez mount -a.
Vous pouvez changer les droits en écriture sur ce disque avec chmod
ou l’attribuer à un utilisateur.
Pour un exemple d’utilisation, installez rsync sur le serveur et sur
un ordinateur qui devra être sauvegardé.
À partir de cet ordinateur, lancez la commande :
1
$ rsync -e " ssh -p < port ssh >" - avz -- progress --\
delete / dossier / a / sauvegarder \
tot o@votreserveur . net :/ mnt / sauvegarde / toto
2
On utilise une connexion ssh avec le compte toto pour envoyer
tout un dossier sur le serveur.
Cette solution peut ne pas convenir, en particulier si vous souhaitez
permettre à plusieurs utilisateurs de réaliser des sauvegardes. Préférez
dans ce cas la mise en place d’un chroot sftp 61 .
9.4
Un cloud synchronisé avec syncthing
Syncthing permet de sauvegarder ses données et facilement les
répartir sur plusieurs appareils. Il dispose de plusieurs clients (logiciels
permettant de l’utiliser) pour Windows, Linux et même OpenBSD.
Par défaut, tout est chiffré ce qui est tout de même rassurant.
Notez qu’il a été empaqueté pour OpenBSD, on peut donc l’installer en une simple commande :
1
# pkg_add syncthing
61. → Voir page 31.
92
9.4
Un cloud synchronisé avec syncthing
Nous allons le laisser tourner en arrière-plan sur notre serveur afin
que vous puissiez à tout moment synchroniser vos documents et les
sauvegarder. Pour cela, lancez ces commandes :
1
# rcctl enable syncthing
2
# rcctl start syncthing
Par défaut, syncthing va stocker sa configuration et les fichiers
synchronisés dans /var/syncthing. Ce dossier contient :
— Un dossier Sync qui contient tous les documents sauvegardés.
— Un dossier .config qui contient la configuration.
Nous pourrions configurer syncthing en éditant ces fichiers, cependant, l’ajout d’autres appareil avec lesquels se synchroniser va vite
devenir insupportable. Heureusement, il existe une interface d’administration pour syncthing. Elle n’est disponible qu’à partir du serveur,
ce qui n’est pas pratique pour s’en servir car on a besoin d’un navigateur web pour y accéder. Heureusement, ssh est là.
En effet, nous allons créer un tunnel ssh qui va relier votre ordinateur au serveur. En passant par ce tunnel, nous pourront accéder à
l’interface d’administration de syncthing très facilement.
À partir de votre ordinateur, lancez la commande suivante :
1
ssh -N -L 9999:127.0.0.1:8384 -p 22222 \
u t i l i s a t e u r s s h @ v o t r e s e r v e r . net
Remplacez 22222 par le port configuré dans la partie dédiée à
ssh 62 , tout comme l’utilisateur.
Tant que la session est ouverte, vous pouvez ouvrir un navigateur sur votre ordinateur et aller à l’adresse http://localhost:9999 afin
d’administrer syncthing :
62. → Voir page 28.
93
9.4
Un cloud synchronisé avec syncthing
Vous pouvez maintenant ajouter des machines avec lesquelles le
serveur restera synchronisé, comme si vous étiez sur le serveur.
Afin que tout fonctionne bien, vous devriez ouvrir les ports suivant
dans le pare-feu :
— Port 22000 en TCP ;
— Port 21027 en UDP.
Je vous laisse visiter le site officiel pour télécharger le client
OpenBSD et en savoir plus si vous le souhaitez :
https://syncthing.net/
94
10
Serveur de noms
Si vous avez lu la partie concernant les [DNS 63 #dns], vous aurez
compris qu’ils sont essentiels pour un humain sur le web. Mais votre
serveur lui-même en a besoin.
Si vous envoyez un mail, vous allez écrire une adresse comme
”[email protected]”. Votre serveur doit savoir comment communiquer avec ”serveurmail.org”. Pour cela, une résolution
DNS 64 est nécessaire pour connaı̂tre l’adresse IP correspondant au
nom de domaine ”serveurmail.org”. Actuellement, c’est votre fournisseur d’accès à internet qui vous donne cette information. On dit qu’on
”résout un nom de domaine”.
Je vous propose dans ce chapitre d’installer tout le nécessaire pour
faire la même chose, mais nous-mêmes. Cela présente plusieurs avantages :
— Résolutions plus rapides grâce à un système de cache ;
— Indépendance et vie-privée améliorée.
10.1
Résolveur avec cache : Unbound
Unbound est présent par défaut dans OpenBSD. Il permet en l’état
de résoudre les noms de domaines. Nous allons cependant lui ajouter
la possibilité de valider les noms de domaines pour se prémunir contre
le ”Cache poisoning”, qui consiste à la mise en cache d’une fausse IP.
On édite 65 le fichier /var/unbound/etc/unbound.conf pour le
remplir ainsi :
1
2
server :
interface : 127.0.0.1
3
interface : ::1
4
do - ip6 : yes
5
do - ip4 : yes
63. → Voir page 180.
64. → Voir page 180.
65. → Voir page 190.
95
10.1
Résolveur avec cache : Unbound
6
do - udp : yes
7
do - tcp : yes
8
9
# seul le serveur a le droit
10
# d ’ utiliser unbound en local
11
access - control : 0.0.0.0/0 refuse
12
access - control : ::0/0 refuse
13
access - control : 127.0.0.0/8 allow
14
access - control : ::1 allow
15
16
hide - identity : yes
17
hide - version : yes
18
19
auto - trust - anchor - file : "/ var / unbound / db /\
root . key "
20
21
prefetch : yes
Avant de lancer unbound, on va récupérer le fichier permettant de
faire la vérification DNSSEC. Puisque ce fichier devra être mis à jour
régulièrement, nous allons profiter du fichier /etc/weekly.local qui
permettra de lancer la commande de mise à jour toutes les semaines.
Éditez 66 ce fichier puis ajoutez-y ceci :
1
unbound - anchor -a "/ var / unbound / db / root . key "
Lancez ce script manuellement pour cette fois avec
1
# sh / etc / weekly . local
Il nous reste à activer unbound avec les commandes habituelles :
1
# rcctl enable unbound
2
# rcctl start unbound
Pour indiquer au serveur de demander la résolution des noms de
domaines au résolveur local unbound, on édite 67 le fichier /etc/resolv.conf
66. → Voir page 190.
67. → Voir page 190.
96
10.1
Résolveur avec cache : Unbound
pour y mettre :
1
nameserver 127.0.0.1
Dans le cas où votre serveur se connecte via dhcp, ajoutez alors
cette ligne à la fin du fichier /etc/dhclient.conf :
1
prepend domain - name - servers 127.0.0.1;
Et voilà !
Vous pouvez tester l’efficacité d’unbound avec la commande dig :
1
$ dig 3 hg . toile - libre . org
2
[...]
3
;; Query time : 61 msec
Il a fallu ici 61 millisecondes pour avoir une réponse. Relancez une
deuxième fois cette commande pour voir la différence :
1
$ dig 3 hg . toile - libre . org
2
[...]
3
;; Query time : 0 msec
C’est toujours un gain de performance bienvenu !
Pour aller plus loin dans la découverte d’unbound et ses nombreuses possibilités, vous pouvez consulter le wiki d’OBSD4* :
http://obsd4a.net/wiki/doku.php?id=network:config:unbound dnssec
97
11
Travaux pratiques
Cette section propose des exemples de services que vous pouvez auto-héberger. Il conviendra de ne pas reproduire bêtement les
procédures indiquées, et de vérifier que la démarche est à jour avec la
version du service que vous souhaitez installer.
Comme vous le constaterez, la démarche est sensiblement la même
pour la plupart des applications :
1. On crée un dossier pour le nouveau site dans /var/www/htdocs ;
2. On télécharge l’application, souvent sous forme d’archive que
l’on décompresse ;
3. On déplace les fichiers de l’application dans le dossier prévu à
cet effet ;
4. On change les propriétaires des fichiers avec
1
chown -R www : daemon / var / www / htdocs / lesite
5. On ajoute une sections dans /etc/httpd.conf ;
6. On recharge httpd ave rcctl reload httpd ;
7. On termine l’installation en allant sur le nouveau site.
Je suppose ici que vous avez déjà procédé à l’installation de httpd 68
et de PHP 69 .
11.1
Un cloud avec NextCloud
NextCloud est un service qui vous permet de synchroniser vos
documents, contacts, rendez-vous sur n’importe quelle machine grâce
à ses multiples clients.
On va commencer par créer un dossier pour nextcloud :
1
# mkdir / var / www / htdocs / nextcloud
Ensuite, sans surprise, on le télécharge.
68. → Voir page 36.
69. → Voir page 38.
98
11.1
Un cloud avec NextCloud
1
# cd / var / www / htdocs / nextcloud
2
# ftp " https :// download . nextcloud . com / server /\
releases / nextcloud -10.0.0. tar . bz2 "
Il faut maintenant vérifier l’intégrité de l’archive. Pour cela, on va
télécharger la somme sha256 :
1
# ftp https :// download . nextcloud . com / server / releases\
/ nextcloud -10.0.0. tar . bz2 . sha256
Et on vérifie l’archive :
1
# sha256 -C nextcloud -10*. sha256 nextcloud *. tar . bz2
2
( SHA256 ) nextcloud -10.0.0. tar . bz2 : OK
On décompresse cette archive puis on modifie les droits pour que
ces nouveaux fichiers appartiennent au serveur web :
1
# tar xvjf nextcloud -10*. tar . bz2
2
# chown -R www : daemon nextcloud
On peut désormais éditer 70 le fichier /etc/httpd.conf afin d’ajouter une section pour nextcloud :
1
server " cloud . exemple . net " {
2
listen on * port 80
3
block return 301 " https ://\
$ S ER V E R _N A M E $R E Q U ES T _ UR I "
4
}
5
6
server " cloud . exemple . net " {
7
listen on * tls port 443
8
root "/ htdocs / nextcloud / nextcloud "
9
directory index index . php
10
hsts
tls {
11
certificate "/ etc / ssl / acme /\
12
votredomaine - fullchain .\
com . pem "
70. → Voir page 190.
99
11.1
Un cloud avec NextCloud
key
13
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
}
14
15
16
# Set max upload size to 513 M ( in bytes )
17
connection max request body 537919488
18
19
# First deny access to the specified files
20
location "/ db_structure . xml " { block }
21
location "/. ht *"
{ block }
22
location "/ README "
{ block }
23
location "/ data *"
{ block }
24
location "/ config *"
{ block }
25
location "/*. php *" {
26
fastcgi socket "/ run / php - fpm . sock "
27
}
28
29
30
}
Avant de relancer les services, on installe les dépendances PHP
dont nextcloud aura besoin :
1
# pkg_add php - intl php - bz2 pecl - redis icu4c
On active ces extensions :
1
# cd / etc / php -7.0. sample
2
# for i in *; do ln - sf ../ php -7.0. sample / $i ../ php \
-7.0/; done
Enfin, on recharge httpd et PHP avec :
1
# rcctl reload httpd
2
# rcctl restart php70_fpm
Pour terminer l’installation, ouvrez un navigateur à l’adresse de
votre cloud https://cloud.exemple.net/ .
100
11.1
Un cloud avec NextCloud
Ne reste plus qu’à suivre les étapes (bon, il n’y en a qu’une) :
101
11.2
Un espace de stockage avec BoZoN
Si vous avez des erreurs à propos de l’UTF-8 qui apparaissent, lancez les commandes suivantes pour résoudre ce problème dû au chroot :
1
# mkdir -p / var / www / usr / share / locale / UTF -8/
2
# cp / usr / share / locale / UTF -8/ LC_CTYPE / var / www / usr /\
share / locale / UTF -8/
Autre remarque, afin d’augmenter la limite en taille des fichiers que
vous aurez à envoyer, vous devez modifier le fichier /etc/php-7.0.ini
pour changer les valeurs dans les variables suivantes :
1
post_max_size = 500 M
2
uploa d _m a x _f i le size = 500 M
Ici, nous avons utilisé la base de données SQLite. Rien ne vous
empêche d’utiliser MySQL (MariaDB) ou PostgreSQL si vous préférez.
Référez-vous dans ce cas à la partie sur les bases de données 71
11.2
Un espace de stockage avec BoZoN
BoZoN est ce qu’on peut appeler un cloud simplifié. Il vous permettra de stocker vos documents sur votre serveur et de les partager
facilement. Il n’a pas besoin de base de données pour fonctionner et
remplacera dropbox dans la plupart des cas.
Tout ce dont vous aurez besoin pour bozon, c’est du serveur httpd 72
et de PHP 73 .
On télécharge bozon avec l’archive présente sur github . Avec l’outil ftp, on le fait ainsi :
1
# ftp -o / tmp / bozon . zip " https :// github . com /\
broncowdd / BoZoN / archive / master . zip "
On décompresse l’archive dans /var/www/htdocs, puis on renomme
le dossier créé avant d’en changer les droits pour le serveur http :
71. → Voir page 53.
72. → Voir page 36.
73. → Voir page 38.
102
11.2
Un espace de stockage avec BoZoN
1
# cd / var / www / htdocs
2
# unzip / tmp / bozon . zip
3
# mv BoZoN - master bozon
4
# chown -R www : daemon / var / www / htdocs / bozon
On peut maintenant éditer 74 le fichier /etc/httpd.conf afin d’ajouter une section pour BoZoN :
1
server " cloud . exemple . net " {
2
listen on * port 80
3
block return 301 " https ://\
$ S ER V E R _N A M E $R E Q U ES T _ UR I "
4
}
5
6
server " cloud . exemple . net " {
7
listen on * tls port 443
8
root "/ htdocs / bozon "
9
10
directory index index . php
hsts
tls {
11
certificate "/ etc / ssl / acme /\
12
votredomaine - fullchain .\
com . pem "
key
13
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
}
14
15
# Set max upload size to 513 M ( in bytes )
16
connection max request body 537919488
17
18
location "/*. php *" {
fastcgi socket "/ run / php - fpm . sock "
19
20
}
21
22
# Protect some files
74. → Voir page 190.
103
11.3
Un Webmail
23
location "/ uploads *"
{ block }
24
location "/ private *"
{ block }
25
location "/ thumbs *"
{ block }
26
location "/ core /"
{ block }
27
location "/ core /*. js "
{ pass }
location "/ private / temp /*. zip " { pass }
28
29
}
On recharge httpd rcctl reload httpd puis on se dirige à l’adresse
https://cloud.exemple.net/ pour finir l’installation.
Vous pouvez alors utiliser BoZon. Cliquez sur ”Se connecter” pour
créer un compte administrateur.
Pour augmenter la restriction en taille des fichiers que vous aurez
à envoyer, vous devez modifier le fichier /etc/php-7.0.ini afin de
changer les valeurs dans les variables suivantes :
1
post_max_size = 500 M
2
uploa d _m a x _f i le size = 500 M
11.3
Un Webmail
Le webmail vous servira à consulter votre messagerie à partir d’un
navigateur web. Nous allons ici installer le très connu roundcube.
Installons tout d’abord quelques dépendances :
1
# pkg_add sqlite
2
# pkg_add php - pspell -7.0.8 p0 php - zip -7.0.8 p0 php -\
3
# pkg_add php - intl -7.0.8 p0 pear php - ldap -7.0.8 p0
mcrypt -7.0.8 p0
Tout d’abord, on doit modifier la configuration de PHP. On édite 75
le fichier /etc/php-7.0.ini pour y mettre à la fin :
1
[ suhosin ]
2
suhosin . session . encrypt = 0
75. → Voir page 190.
104
11.3
Un Webmail
Une fois cette modification effectuée, relancez PHP :
1
# rcctl enable php70_fpm
2
# rcctl restart php70_fpm
On va mettre roundcube dans le dossier /var/www/htdocs/roundcube
1
# mkdir -p / var / www / htdocs / roundcube
On télécharge l’archive de roundcube qu’on décompresse :
1
# cd / var / www / htdocs / roundcube
2
# ftp -o roundcube . tgz
3
# https :// github . com / roundcube / roundcubemail /\
releases / download /1.2.1/ roundcubemail -1.2.1 -\
complete . tar . gz
4
# tar xvzf roundcube . tgz
Maintenant, on renomme le nouveau dossier roundcubemail* puis
on crée les dossiers nécessaires au bon fonctionnement de roundcube :
1
# mv roundcubemail -* roundcube
2
# mkdir -p roundcube / temp roundcube / logs
Nous allons créer la base sqlite pour roundcube. On crée un dossier
qui contiendra la base de données :
1
# mkdir / var / www / htdocs / roundcube / roundcube / db
La commande suivante crée la base :
1
# cd / var / www / htdocs / roundcube
2
# sqlite3 - init roundcube / SQL / sqlite . initial . sql \
roundcube / db / sqlite . db
3
-- Loading resources from SQL / sqlite . initial . sql
4
5
SQLite version 3.9.2 OpenBSD
6
Enter ". help " for usage hints .
7
8
( Tapez . exit pour quitter sqlite3 )
Enfin, on modifie les droits de tous ces nouveaux fichiers :
105
11.3
Un Webmail
1
# cd / var / www / htdocs / roundcube
2
# chown -R www : daemon roundcube
3
# chmod 0775 roundcube / db
4
# chmod 0660 roundcube / db / sqlite . db
On ajoute le nouveau site dans la configuration de httpd. Pour
cela, on édite 76 le fichier /etc/httpd.conf et on ajoute quelque chose
comme :
1
server " webmail . votreserveur . net " {
2
listen on * port 80
3
block return 301 " https ://\
4
no log
$ S E R V E R _N A M E $R E Q U ES T _ U RI "
5
}
6
7
server " webmail . votreserveur . net " {
8
listen on * tls port 443
9
root "/ htdocs / roundcube "
10
directory index index . php
11
no log
12
13
hsts
tls {
14
certificate "/ etc / ssl / acme /\
15
votredomaine - fullchain .\
com . pem "
key
16
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
}
17
18
location "*. php *" {
fastcgi socket "/ run / php - fpm . sock "
19
20
}
21
# Deny Protected directories
76. → Voir page 190.
106
11.3
Un Webmail
22
location "/ config *" { block }
23
location "/ temp *" { block }
24
location "/ logs *" { block }
25
location "/ README " { block }
26
location "/ INSTALL " { block }
27
location "/ LICENSE " { block }
28
location "/ CHANGELOG " { block }
29
location "/ UPGRADING " { block }
30
location "/ bin *" { block }
31
location "/ SQL *" { block }
32
location "/ db *" { block }
33
location "*. md " { block }
location "\.*" { block }
34
35
}
Rechargez httpd et PHP puis allez à l’adresse de votre nouveau
webmail : https://webmail.votreserveur.net/installer.
Suivez les indications données. La plupart des choses n’ont pas
besoin d’être modifiées. Vérifiez tout de même que :
— Pour la base de données, vous choisissez SQLite.
— Le nom de la base de données (Database name) doit être celuici :
////htdocs/roundcube/roundcube/db/sqlite.db
— Les autres champs pour la base de données doivent être vides.
— Pour smtp server, la valeur doit être localhost.
Dans le navigateur sera générée la configuration. Enregistrez-la
dans le fichier
1
/ var / www / roundcubemail / config / config . inc . php
Vérifiez bien qu’il contient au moins ceci (attention au nombre de
/) :
1
$config [ ’ db_dsnw ’] = ’ sqlite ://// htdocs / roundcube /\
roundcube / db / sqlite . db ? mode =0660 ’;
107
11.4
2
Héberger son blog
$config [ ’ smtp_server ’] = ’ localhost ’;
Vous avez une dernière page de test, puis vous pouvez allez à l’URL
de votre webmail http://webmail.votreserveur.net pour voir que tout
fonctionne.
Bien que tout semble être en état de marche, n’oublions pas la
sécurité. Modifiez le fichier config.inc.php pour désactiver l’installateur.
1
$config [ ’ enable_installer ’] = false ;
Puis supprimez le dossier d’installation totalement :
1
# rm -r / var / www / htdocs / roundcube / roundcube /\
installer
Ça y est, votre webmail est prêt !
11.4
Héberger son blog
Blogotext est un moteur de blog léger mais pourtant puissant et
esthétique. Il pourra vous permettre en outre d’envoyer et partager
des fichiers, faire office d’aggrégateur de flux RSS, marque page de
liens, prise de notes...
Pour vous faire une idée, regardez les captures d’écran à cette
adresse : http://lehollandaisvolant.net/blogotext/fr/?screenshots.
108
11.4
Héberger son blog
Son installation est très simple et ne nécessite qu’une dépendance,
à savoir le paquet sqlite. Vous y ajouterez php-curl s’il n’est pas
déjà installé.
Pour télécharger blogotext, on peut utiliser ftp :
1
# ftp -o / tmp / blogotext . zip " https :// github . com /\
BoboTiG / blogotext / archive / master . zip "
On décompresse l’archive à partir du dossier /var/www/htdocs :
1
# cd / var / www / htdocs
2
# unzip / tmp / blogotext . zip
Un dossier blogotext est créé. Maintenant, on modifie les droits
pour que ces nouveaux fichiers appartiennent au serveur web :
1
# chown -R www : daemon / var / www / htdocs / blogotext
On peut alors éditer 77 le fichier /etc/httpd.conf afin d’ajouter
une section pour blogotext :
1
server " blog . exemple . net " {
2
listen on * port 80
3
block return 301 " https ://\
$ S ER V E R _N A M E $R E Q U ES T _ UR I "
4
}
5
6
server " blog . exemple . net " {
7
listen on * tls port 443
8
root "/ htdocs / blogotext "
9
directory index index . php
10
11
# taille maximale que l ’ on peut envoyer en \
bytes
12
connection max request body 1537919488
13
hsts
tls {
14
77. → Voir page 190.
109
11.4
Héberger son blog
certificate "/ etc / ssl / acme /\
15
votredomaine - fullchain .\
com . pem "
key
16
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
}
17
18
location "/*. php *" {
19
fastcgi socket "/ run / php - fpm . sock "
20
}
21
22
}
On recharge httpd avec
1
# rcctl reload httpd
puis on se dirige à l’adresse https://blog.exemple.net/ afin de terminer l’installation.
110
11.4
Héberger son blog
111
11.5
Un CMS avec Wordpress
Pour poster de nouveaux articles et administrer votre blog, rendez
vous à l’adresse https://blog.exemple.net/admin/auth.php. Notez que
par sécurité, vous pouvez renommer le dossier admin sur votre serveur.
11.5
Un CMS avec Wordpress
Wordpress est un moteur très lourd mais qui peut permettre de
créer n’importe quel site. Si vous recherchez un CMS plus léger et
facile à installer, regardez du côté de PluXML.
En attendant, nous sommes dans la partie ”travaux pratiques”,
alors au boulot !
112
11.5
Un CMS avec Wordpress
Quelques dépendances sont à installer, dont la base de données
MariaDB 78 :
1
# pkg_add php - mysqli -7.0.10 mariadb - server
2
# cd / etc / php -7.0. sample
3
# for i in *; do ln - sf ../ php -7.0. sample / $i ../ php \
4
# rcctl restart php70_fpm
-7.0/; done
Vous devez maintenant créer une base de données dans MariaDB,
le clone libre de MySQL. Référez-vous à la partie dédiée à cette manipulation 79 . Veillez à retenir le nom de la base choisie, l’utilisateur
et le mot de passe.
On télécharge ensuite la dernière version de wordpress :
1
# ftp -o / tmp / wordpress . tar . gz " https :// wordpress .\
org / latest . tar . gz "
On décompresse l’archive dans le dossier /var/www/htdocs
1
# cd / var / www / htdocs
2
# tar xvzf / tmp / wordpress . tar . gz
On modifie les droits du nouveau dossier :
1
# chown -R www : daemon / var / www / htdocs / wordpress
On ajoute maintenant une section dans /etc/httpd.conf
1
server " blog . votreserveur . net " {
2
listen on * tls port 443
3
root "/ htdocs / wordpress "
4
directory index index . php
5
hsts
tls {
6
certificate "/ etc / ssl / acme /\
7
votredomaine - fullchain .\
com . pem "
78. → Voir page 55.
79. → Voir page 55.
113
11.5
Un CMS avec Wordpress
key
8
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
}
9
10
# Set max upload size to 513 M ( in bytes )
11
connection max request body 537919488
12
13
# protected files and dir
14
location "/.*"
{ block }
15
location "/ upload /*. php "
{ block }
16
location "/ files /*. php "
{ block }
17
18
# Any other PHP file
19
location "/*. php *" {
fastcgi socket "/ run / php - fpm . sock "
20
}
21
22
}
Enfin, on recharge httpd : rcctl reload httpd.
Dirigez-vous à l’adresse du nouveau site pour terminer l’installation et remplir les informations concernant la base de données qui
vient d’être créée.
114
11.5
Un CMS avec Wordpress
115
11.6
CardDAV et CalDAV avec Baı̈kal
L’installation de wordpress est terminée :) .
11.6
CardDAV et CalDAV avec Baı̈kal
Baı̈kal est un serveur Cal et CardDAV permettant de synchroniser
votre calendrier et vos contacts. Il ne fait que ça, c’est pourquoi il le
116
11.6
CardDAV et CalDAV avec Baı̈kal
fait bien et sait rester léger.
Vous aurez besoin pour l’utiliser de PHP 80 et de SQlite 81 .
Vérifiez (https://github.com/fruux/Baikal/releases) quelle est la
dernière version de baikal. Vous pouvez ensuite la télécharger avec
ftp :
1
# ftp -o / tmp / baikal . zip " https :// github . com / fruux /\
Baikal / releases / download /0.4.6/ baikal -0.4.6. zip "
On se déplace dans le dossier web pour décompresser baikal et
modifier les droits sur les fichiers :
1
# cd / var / www / htdocs /
2
# unzip / tmp / baikal . zip
3
# chown -R www : daemon baikal
Ajoutez une nouvelle section dans le fichier /etc/httpd.conf pour
configurer httpd. Notez qu’on ne configure ici qu’un accès via une
adresse en ”https” :
1
2
server " dav . votreserveur . net " {
3
listen on * tls port 443
4
root "/ htdocs / baikal / html "
5
directory index index . php
6
hsts
7
tls {
8
certificate "/ etc / ssl / acme /\
9
key
votredomaine - fullchain . com . pem "
"/ etc / ssl / acme / private /\
votredomaine - privkey . com . pem "
10
}
11
12
location "/. well - known / caldav " {
block return 301 " https ://\
13
$SERVER_NAME / dav . php "
80. → Voir page 38.
81. → Voir page 54.
117
11.6
CardDAV et CalDAV avec Baı̈kal
14
}
15
location "/. well - known / carddav " {
block return 301 " https ://\
16
$SERVER_NAME / dav . php "
}
17
18
19
location "/. ht *" { block }
20
location "/ Core *" { block }
21
location "/ Specific *" { block }
22
location "*. php *" {
23
fastcgi socket "/ run / php - fpm . sock "
24
}
25
26
}
Reste à recharger httpd avec rcctl reload httpd. Vous pouvez
désormais vous rendre à l’adresse https://dav.votreserveur.net pour
terminer l’installation.
118
11.6
CardDAV et CalDAV avec Baı̈kal
119
11.7
Un wiki
Pour utiliser votre calendrier, vous pouvez récupérer l’excellente
extension lightning pour Thunderbird (iceowl sous debian). Vous trouverez un exemple de configuration à cette adresse :
https://www.guillaume-leduc.fr/synchronisez-baikal-avec-thunderbirdet-lightning.html.
11.7
Un wiki
Il existe tellement de moteurs de wiki qu’il est difficile de faire un
choix. Ces derniers sont souvent très configurables et permettent d’en
faire des blogs voire des sites complets.
Nous allons nous intéresser ici à l’installation de dokuwiki, un des
moteurs les plus connus et les plus pratiques grâce à ses multiples
extensions et le peu de dépendances qu’il nécessite. Vous aurez besoin
de PHP 82 et SQLite 83 .
L’installation est semblable à la plupart des sites web comme vous
pourrez le voir, c’est pourquoi elle ne sera pas exhaustive.
Téléchargement de dokuwiki :
1
# ftp -o / tmp / dokuwiki . tgz " http :// download . dokuwiki\
. org / src / dokuwiki / dokuwiki - stable . tgz "
Extraction de l’archive :
1
# cd / var / www / htdocs
2
# tar xvzf / tmp / dokuwiki . tgz
82. → Voir page 38.
83. → Voir page 54.
120
11.7
Un wiki
On renomme le dossier et on change les droits :
1
# mv dokuwiki -* wiki
2
# chown -R www : daemon wiki
La configuration de httpd peut se réaliser ainsi dans le fichier
/etc/httpd.conf :
1
server " wiki . exemple . net " {
2
listen on * port 80
3
block return 301 " https ://\
$ S ER V E R _N A M E $R E Q U ES T _ UR I "
no log
4
5
}
6
7
server " wiki . exemple . net " {
8
listen on * tls port 443
9
root "/ htdocs / wiki "
10
directory index doku . php
11
connection max request body 537919488
12
hsts
tls {
13
certificate "/ etc / ssl / acme /\
14
votredomaine - fullchain .\
com . pem "
key
15
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
}
16
17
18
location "*. php *" {
fastcgi socket "/ run / php - fpm . sock "
19
20
}
21
22
location "/ data *"
{ block }
23
location "/ conf *"
{ block }
24
location "/ bin *"
{ block }
121
11.7
location "/ inc *"
25
26
Un wiki
{ block }
}
Rechargez httpd avec rcctl reload httpd, puis ouvrez dans un
navigateur l’adresse de votre wiki pour terminer l’installation.
Une fois l’installation terminée, supprimez le fichier install.php
1
# rm / var / www / htdocs / wiki / install . php
122
11.8
Des statistiques sur les visites de vos sites
11.8
Des statistiques sur les visites de vos sites
11.8.1
Avec webalizer
Webalizer est un outil qui peut générer graphiques et tableaux
à partir des logs (journaux) de votre serveur. En un clin d’œil vous
pourrez trouver à propos de votre site :
— Horaires de visites ;
— Nombre de clics ;
— Quantité de données chargées ;
— Pages 404 (pratique pour traquer les liens morts) ;
— D’où viennent les visiteurs...
D’autres outils identiques existent, en particulier piwik. Ce dernier
est toutefois moins facile à mettre en place (base de données MySQL)
et nécessite l’insertion de code html dans toutes vos pages web. Il
est aussi moins efficace si les visiteurs utilisent des addons Firefox
comme noscript ou µblock. Cependant, les données récoltées sont plus
pertinentes. Vous voudrez donc peut-être compléter l’installation de
webalizer avec piwik 84 .
Quoi qu’il en soit, nous allons voir ici une méthode pour obtenir
de belles statistiques avec webalizer.
Comme d’habitude, on commence par l’installer avec la commande
magique :
1
# pkg_add webalizer
Pour le configurer, nous allons utiliser comme base le modèle fournit. On le copie par exemple dans /etc/ :
1
# cp / usr / local / share / examples / webalizer / sample . conf\
/ etc / webalizer . votreserveur . conf
Éditez 85 ce nouveau fichier pour l’adapter à vos besoins. Voici
quelques options pratiques que vous voudrez certainement changer :
84. → Voir page 128.
85. → Voir page 190.
123
11.8
Des statistiques sur les visites de vos sites
— LogFile /var/www/logs/access.log : Emplacement des journaux du serveur web.
— OutputDir /var/www/htdocs/votreserveur.net/stats : Vous
choisissez où seront enregistrées les pages html générées. Référezvous à la partie sur httpd 86 pour configurer votre serveur http
et accéder aux statistiques avec un navigateur.
— HideSite *votreserveur.net et HideReferrer votreserveur.net/ :
On cache les liens provenant des clics réalisés sur votre site vers
votre site.
— HideURL *.css , HideURL *.woff : On cache les extensions
de fichiers non souhaitées.
— IgnoreURL /favicon.ico : On ignore certaines URL lorsque
les statistiques sont générées.
— Color* : Pour changer les couleurs, car le thème par défaut,
n’est pas très attrayant tout de même.
Vous pouvez générer une première fois les statistiques avec la commande suivante :
1
# webalizer -c / etc / webalizer . votreserveur . conf
Et hop, toutes les pages html et les graphiques sont dans le dossier
défini par la variable OutputDir, il suffit de vous y rendre avec un
navigateur web pour les étudier.
Cependant, vous voudrez certainement régler encore quelques petits détails. Par exemple, la partie des ”Referers” qui recense les sites
sur lesquels le votre est cité doit être bien maigre. Il faut régler la
façon dont httpd produit les logs. Rien de bien compliqué, il faut
juste ajouter dans le fichier /etc/httpd.conf la ligne suivante dans
le site pour lequel on veut des statistiques : log style combined.
Euh, on peut avoir un exemple siouplé ?
Voici :
86. → Voir page 36.
124
11.8
1
Des statistiques sur les visites de vos sites
server " votreserveur . net " {
2
listen on * tls port 443
3
root "/ htdocs / votreserveur . net "
4
directory index index . html
5
log style combined
6
hsts
7
tls {
8
certificate "/ etc / ssl / acme /\
9
votredomaine - fullchain . com . pem "
key
10
"/ etc / ssl / acme / private /\
votredomaine - privkey . com . pem "
}
11
12
}
N’oubliez pas de recharger httpd avec rcctl reload httpd.
Mais on doit lancer la commande webalizer manuellement ?
C’est nul ce truc !
On n’en reste pas là bien entendu. Afin que les statistiques soient
générées par exemple tous les jours, nous pourrions profiter du fichier
/etc/daily.local. Toutefois, il faut éviter que les logs n’aient été
archivés auparavant.
Nous allons donc modifier la configuration de l’outil qui archive
les logs toutes les heures. Il s’agit de newsyslog. On édite 87 le fichier
/etc/newsyslog.conf qui ressemble à ça :
1
$OpenBSD : newsyslog . conf , v 1.34 2015/10/14 \
#
20:54:07 millert Exp $
2
#
3
# configuration file for newsyslog
4
#
5
# logfile_name
when
owner : group
flags
87. → Voir page 190.
125
mode count size \
11.8
6
Des statistiques sur les visites de vos sites
/ var / cron / log
*
7
/ var / log / aculog
24
/ var / log / authlog
9
/ var / log / daemon
*
11
/ var / log / maillog
12
uucp : dialer
660
7
*
\
root : wheel
640
7
*
\
640
5
30
\
640
7
10
\
640
7
*
\
644
5
30
\
600
7
*
\
644
7
*
\
640
7
250
\
600
3
250
\
Z
Z
Z
/ var / log / secure
168
14
\
/ var / log / messages
*
13
10
Z
/ var / log / lpd - errs
24
3
Z
10
*
600
Z
8
168
root : wheel
Z
Z
/ var / log / wtmp
$W6D4 B
15
/ var / log / xferlog
16
/ var / log / pflog
*
*
Z
ZB " pkill - HUP -u root -U root -t - -x \
pflogd "
17
/ var / www / logs / access . log
$W0
18
644
/ var / www / logs / error . log
*
4
*
\
Z " pkill - USR1 -u root -U root -x httpd "
644
7
250
\
Z " pkill - USR1 -u root -U root -x httpd "
C’est l’avant-dernière ligne que nous allons changer afin de lancer
webalizer avant de faire tourner les logs. Elle ressemblera à :
1
/ var / www / logs / access . log
$W0
644
4
*
\
Z "/ usr / local / bin / webalizer -c / etc /\
webalizer . votreserver . conf && pkill - USR1 -u \
root -U root -x httpd "
Pour vérifier que tout fonctionne bien, lancer newsyslog en le
126
11.8
Des statistiques sur les visites de vos sites
forçant à archiver les logs et en le faisant parler. Vous devriez obtenir quelque chose de la sorte :
1
# newsyslog - vF
2
/ var / cron / log <3Z >: size ( KB ) : 7.24 [10] --> \
3
/ var / log / authlog <7Z >: age ( hr ) : 88 [168] --> \
4
/ var / log / daemon <5Z >: size ( KB ) : 0.41 [30] --> \
5
/ var / log / lpd - errs <7Z >: size ( KB ) : 2.02 [10] --> \
6
/ var / log / maillog <7Z >: age ( hr ) : 16 [24] --> \
trimming log ....
trimming log ....
trimming log ....
trimming log ....
trimming log ....
7
/ var / log / messages <5Z >: size ( KB ) : 0.45 [30] --> \
trimming log ....
8
/ var / log / secure <7Z >: age ( hr ) : -1 [168] --> \
trimming log ....
9
10
/ var / log / wtmp <7B >: --> trimming log ....
/ var / log / xferlog <7Z >: size ( KB ) : 0.00 [250] --> \
trimming log ....
11
/ var / log / pflog <3 ZB >: size ( KB ) : 64.26 [250] --> \
trimming log ....
12
/ var / www / logs / access . log <4Z >: --> trimming log ....
13
/ var / www / logs / error . log <7Z >: size ( KB ) : 212.87 \
14
/ var / www / logs / mateteestmalade . log <7Z >: size ( KB ) : \
[250] --> trimming log ....
3.93 [250] --> trimming log ....
15
Webalizer Xtended RB30 (06 - Apr -2014) / [ OpenBSD http\
:// www . openbsd . org /] 5.9 amd64 / English
16
Copyright 2005 -2014 by Patrick K . Frei
17
Based on Webalizer V2 .23 -08
18
Using logfile / var / www / logs / access . log ( clf )
19
Using GeoIP Country Edition (/ var / db / GeoIP / GeoIP . dat\
)
20
GEO -106 FREE 20151201 Build 1 Copyright ( c ) 2015 \
127
11.8
Des statistiques sur les visites de vos sites
MaxMind Inc All Rights Reserved
21
Creating output in / var / www / htdocs / yeuxdelibad . net /\
22
Hostname for reports is ’ yeuxdelibad . net ’
23
Reading history file ... webalizer . hist
stats
24
Skipping bad record (1)
25
No valid records found !
26
Generating summary report
Il y a les messages de webalizer qui montrent qu’il a été exécuté.
Et voilà, les statistiques sont générées à chaque fois avant que les
logs soient archivés.
11.8.2
Avec piwik
Piwik est nettement plus lourd. Si votre serveur a une puissance
limitée, préférez webalizer 88 .
Je ne vais pas détailler l’installation pas à pas dans cette partie. Je
suppose donc que vous avez lu et compris la partie sur PHP 89 ainsi
que celle sur MySQL 90 .
Pour PHP, installez et activez ces paquets : php-curl php-gd. Il
y a aussi besoin des bibliothèques geoip et cli qui sont normalement
intégrées dans le paquet PHP d’OpenBSD.
Installez une base MySQL (mariadb) 91 . Voici un récapitulatif tiré
de la documentation de piwik :
1
# mysql -u root -p
2
mysql > CREATE DATABASE piwik_db_name_here ;
3
mysql > CREATE USER ’ piwik ’@ ’ localhost ’ IDENTIFIED BY\
4
mysql > GRANT SELECT , INSERT , UPDATE , DELETE , CREATE ,\
’ password ’;
DROP , ALTER , CREATE TEMPORARY TABLES , LOCK \
88.
89.
90.
91.
→
→
→
→
Voir
Voir
Voir
Voir
page
page
page
page
123.
38.
55.
55.
128
11.8
Des statistiques sur les visites de vos sites
TABLES ON piwik_db_name_here .* TO ’ piwik ’@ ’\
localhost ’;
Ensuite, on télécharge piwik dans le dossier /var/www/htdocs/piwik :
1
# mkdir -p / var / www / htdocs / piwik
2
# cd / var / www / htdocs / piwik
3
# ftp -o / tmp / piwik . zip " http :// builds . piwik . org /\
piwik . zip " && unzip / tmp / piwik . zip
Configurez maintenant un nouveau site dans le fichier /etc/httpd.conf :
1
server " stats . votreserveur . net " {
2
listen on * tls port 443
3
root "/ htdocs / piwik / piwik /"
4
directory index index . php
5
hsts
6
tls {
7
8
certificate "/ etc / ssl / acme /\
9
key
votredomaine - fullchain . com . pem "
"/ etc / ssl / acme / private /\
votredomaine - privkey . com . pem "
}
10
11
location "*. php *" {
12
fastcgi socket "/ run / php - fpm . sock "
13
}
14
15
}
Modifiez les droits sur ce dossier :
1
# chown -R www : daemon / var / www / htdocs / piwik
Rechargez httpd avec rcctl reload httpd puis dirigez-vous avec
un navigateur sur l’adresse du site fraı̂chement activé pour terminer
l’installation de piwik.
N’oubliez pas d’ajouter à vos pages web le code d’intégration
donné.
129
12
Gopher
J’en entends déjà rire en lisant ce titre. Non, le protocole gopher
n’est pas mort. Bien que très peu utilisé, on y trouve encore quelques
trésors. Gopher vous permettra d’écrire et d’échanger des documents
tout simplement.
On dit aussi que ce protocole est très léger et permet le transfert
de données même avec de minuscules bandes passantes.
Que ce soit par utilité ou par jeu, nous allons voir comment installer un serveur gopher sous OpenBSD.
Tout d’abord, on installe le serveur avec pkg add :
1
# pkg_add gophernicus
Ensuite, on doit éditer 92 le fichier /etc/inetd.conf pour y mettre
la ligne suivante :
1
gopher stream tcp nowait _gophernicus / usr / local /\
libexec / in . gophernicus in . gophernicus -h \
votredomaine . net
N’oubliez-pas de remplacer votredomaine.net par votre nom de
domaine puis activez et redémarrez ce service avec rcctl :
1
# rcctl enable inetd
2
# rcctl start inetd
À partir de ce moment là, il ne reste plus qu’à ouvrir et rediriger 93
le port 70 (TCP).
Mettez vos fichiers textes, vos images, vos vidéos (...) dans le dossier /var/gopher, ils seront automatiquement disponibles à l’adresse
gopher://votredomaine.net .
Pour personnaliser un peu plus votre site, vous pouvez créer un
fichier gophermap dans lequel vous déposez un message pour les visiteurs. Terminez ce fichier avec un * pour qu’il y ait une liste automatiquement générée des documents disponibles.
92. → Voir page 190.
93. → Voir page 181.
130
Par exemple :
____
1
_
2
| __ ) ( _ ) ___ _ ____
_____ _ __
_
_
___
3
|
4
| |_) | |
5
| ____ /| _ |\ ___ | _ | | _ |\ _ / \ ___ | _ | | _ |\ __ , _ |\ ___ |
6
----------------------------------------------
_ \| |/ _ \ ’_ \ \ / / _ \ ’_ \| | | |/ _ \
__ / | | \ V /
__ / | | | | _ | |
__ /
7
8
9
*
Note : Pour accéder à un site hébergé avec le protocole gopher,
vous pouvez utiliser l’extension Firefox OverbiteFF.
Un site peut alors ressembler à ça :
131
132
13
Seedbox
Ce chapitre décrit comment mettre en place une seedbox.
On commence par installer l’excellent rtorrent :
1
# pkg_add rtorrent
On ajoute maintenant un utilisateur dont l’unique tâche sera de
faire tourner rtorrent :
1
# adduser
2
Use option ‘‘- silent ’ ’ if you don ’ t want to see all \
warnings and questions .
3
4
Reading / etc / shells
5
Check / etc / master . passwd
6
Check / etc / group
7
8
Ok , let ’ s go .
9
Don ’ t worry about mistakes . There will be a chance \
later to correct any input .
10
Enter username []: _rtorrent
11
Enter full name []: rtorrent daemon
12
Enter shell csh ksh nologin sh [ nologin ]: ksh
13
Uid [1005]:
14
Login group _rtorrent [ _rtorrent ]:
15
Login group is ‘‘ _rtorrent ’ ’. Invite _rtorrent into \
16
[ no ]:
17
Login class authpf bgpd daemon default dovecot \
other groups : guest no
pbuild staff unbound
18
[ default ]:
19
Enter password []:
20
Enter password again []:
21
22
Name :
_rtorrent
23
Password :
***************
133
24
Fullname :
rtorrent daemon
25
Uid :
1005
26
Gid :
1005 ( _rtorrent )
27
Groups :
_rtorrent
28
Login Class : default
29
HOME :
/ home / _rtorrent
30
Shell :
/ sbin / ksh
31
OK ? ( y / n ) [ y ]: y
32
Added user ‘‘ _rtorrent ’ ’
33
Add another user ? ( y / n ) [ y ]: n
34
Goodbye !
Nous pouvons maintenant nous connecter en tant qu’utilisateur
rtorrent :
1
# su _rtorrent
Nous allons créer les dossiers qui serviront à télécharger les torrents, ainsi qu’un dossier dans lequel tous les fichiers .torrent ajoutés
seront directement pris en charge par rtorrent :
1
$ mkdir -p Telechargements /{ download , session ,\
torrents }
On crée maintenant le fichier ~/.rtorrent.rc. Vous pouvez copier
l’exemple fournit avec le paquet :
1
$ cp / usr / local / share / examples / rtorrent ~/. rtorrent .\
rc
On modifie la configuration selon nos besoins :
1
# Maximum and minimum number of peers to connect to \
2
# min_peers = 40
3
# max_peers = 100
per torrent .
4
5
# Same as above but for seeding completed torrents \
( -1 = same as downloading )
134
6
# min_peers_seed = 10
7
# max_peers_seed = 50
8
9
# Maximum number of simultanious uploads per torrent\
.
10
# max_uploads = 15
11
12
# Global upload and download rate in KiB . "0" for \
unlimited .
13
# download_rate = 0
14
upload_rate = 20
15
16
# Default directory to save the downloaded torrents .
17
directory = ~/ Telechargements / download
18
19
# Default session directory . Make sure you don ’ t run\
20
# of rtorrent using the same session directory . \
multiple instance
Perhaps using a
21
# relative path ?
22
session = ~/ Telechargements / session
23
24
# Watch a directory for new torrents , and stop those\
25
# deleted .
26
schedule = watch_directory ,5 ,5 , load_start =~/\
27
schedule = untied_directory ,5 ,5 , stop_untied =
that have been
Telechargements / torrents /*. torrent
28
29
# Close torrents when diskspace is low .
30
# schedule = low_diskspace ,5 ,60 , close_low_diskspace\
=100 M
31
32
# The ip address reported to the tracker .
33
# ip = 127.0.0.1
135
34
# ip = rakshasa . no
35
36
# The ip address the listening socket and outgoing \
37
# bound to .
38
# bind = 127.0.0.1
39
# bind = rakshasa . no
connections is
40
41
# Port range to use for listening .
42
# port_range = 6890 -6999
43
44
# Start opening ports at a random position within \
45
# port_random = no
the port range .
46
47
# Check hash for finished torrents . Might be usefull\
48
# fixed that causes lack of diskspace not to be \
until the bug is
properly reported .
49
# check_hash = no
50
51
# Set whether the client should try to connect to \
UDP trackers .
52
# use_udp_trackers = yes
53
54
# Alternative calls to bind and ip that should \
55
# schedule = ip_tick ,0 ,1800 , ip = rakshasa
56
# schedule = bind_tick ,0 ,1800 , bind = rakshasa
handle dynamic ip ’ s .
57
58
# Encryption options , set to none ( default ) or any \
59
# allow_incoming , try_outgoing , require , require_RC4 \
60
#
combination of the following :
, enable_retry , prefer_plaintext
136
61
# The example value allows incoming encrypted \
connections , starts unencrypted
62
# outgoing connections but retries with encryption \
63
# plaintext to RC4 encryption after the encrypted \
64
#
65
encryption = allow_incoming , require , require_rc4 ,\
if they fail , preferring
handshake
enable_retry
66
67
# Enable DHT support for trackerless torrents or \
when all trackers are down .
68
# May be set to " disable " ( completely disable DHT ) , \
" off " ( do not start DHT ) ,
69
# " auto " ( start and stop DHT as needed ) , or " on " (\
start DHT immediately ) .
70
# The default is " off ". For DHT to work , a session \
71
#
72
dht = auto
directory must be defined .
73
74
# UDP port to use for DHT .
75
#
76
# dht_port = 6881
77
78
# Enable peer exchange ( for torrents not marked \
79
#
80
# peer_exchange = yes
private )
81
82
system . method . set_key = event . download . finished ,\
notify_me ," execute =~/. rtorrent_mail . sh , $d .\
get_name ="
83
84
# scgi_port = 127.0.0.1:5000
137
Afin d’être averti lorsqu’un téléchargement est terminé, on crée le
script ~/.rtorrent mail.sh :
1
#!/ bin / sh
2
echo " $ ( date ) : $1 - Download completed ." | mail -s \
"[ rtorrent ] - Download completed : $1 " root
Notez que tous les fichiers .torrents qui seront déposés dans le
dossier watch seront directement ajoutés dans rtorrent. Si vous voulez
ajouter un fichier torrent à partir de votre ordinateur habituel, vous
pouvez utiliser un client SFTP 94 ou la commande scp :
1
$ scp -p < port_ssh > _r to rre nt @v otr ed om ain e . net :/ home\
/ _rtorrent / Telechargements / watch
Reste à lancer rtorrent en arrière-plan à chaque démarrage du
serveur. Revenez sur le compte root (ctrl-D) puis ajoutez la commande
suivante dans le fichier /etc/rc.local :
1
/ usr / bin / su _rtorrent -c "/ usr / bin / tmux new -s \
rtorrent -d / usr / local / bin / rtorrent "
On utilise l’excellent tmux installé par défaut sur OpenBSD pour
envoyer rtorrent en arrière-plan.
Si vous souhaitez administrer rtorrent par la suite, connectez-vous
en ssh avec l’utilisateur rtorrent, et affichez rtorrent avec la commande tmux a -t rtorrent. Appuyez successivement sur ”ctrl-b”
puis la touche d pour vous détacher de rtorrent.
94. → Voir page 31.
138
14
Serveur d’impression
Nous allons voir dans ce chapitre comment relier une imprimante
au serveur et la rendre accessible afin de pouvoir imprimer de n’importe où depuis le réseau local. Ça peut être très pratique pour convertir une imprimante USB en imprimante sans-fil.
On commence par installer cups et des pilotes d’imprimante :
1
# pkg_add cups cups - filters gutenprint foomatic - db
Pensez à ouvrir dans le parefeu 95 le port 631 (ipp). Pour un réseau
local, inutile de le rediriger 96 dans le routeur.
Maintenant, il faut autoriser l’accès à distance à l’interface d’administration de l’imprimante (à moins que vous ne réalisiez toute la
configuration directement sur le serveur avec un navigateur en mode
console comme w3m ou lynx). Pour cela, modifiez de cette façon le
fichier /etc/cups/cupsd.conf :
1
Listen 0.0.0.0:631
2
Listen / var / run / cups / cups . sock
3
4
# Restrict access to the server ...
5
< Location / >
6
Order deny , allow
7
Deny From All
8
Allow From 192.168.1.*
9
Allow From 127.0.0.1
10
Allow From @LOCAL
11
</ Location >
Quelques explications :
— Deny From All : on interdit l’accès à tout le monde avant d’ajouter des exceptions.
— Allow From 192.168.1.* permet à tous les ordinateurs locaux
dont l’adresse IP est de ce type de se connecter au serveur. Selon
95. → Voir page 23.
96. → Voir page 181.
139
votre routeur, cette adresse peut être aussi 192.168.0.* (* veut
dire n’importe quel chiffre). Pour le savoir, lancez la commande
/sbin/ifconfig |grep inet et regardez l’IP locale attribuée à
l’ordinateur actuellement utilisé.
— Allow From 127.0.0.1 permet l’accès en local. En fait, cette
adresse est la même chose que “localhost”.
On active ensuite cups, puis on le démarre :
1
# rcctl enable cupsd
2
# rcctl start cupsd
Maintenant, reliez votre imprimante sur le serveur. Ouvrez un navigateur à l’adresse suivante : http://localhost:631. Sur un serveur,
cela peut être avec w3m, un navigateur en console. Sinon utilisez
votre ordinateur de bureau, et indiquez l’adresse locale du serveur
à la place de localhost (que vous pouvez trouver en tapant la commande ifconfig |grep inet sur le serveur). Cela donnerait quelque
chose comme http://192.168.1.22:631.
Pour installer l’imprimante, allez dans “Administration, Ajouter
une imprimante” puis suivez les indications. Si le modèle de votre
imprimante n’est pas dans la liste, choisissez la version la plus proche.
Important : n’oubliez pas de cocher la case ”Partager cette imprimante”.
Finalement, vous pouvez ajouter cette imprimante sur les ordinateurs qui auront besoin d’y accéder. Ouvrez un navigateur sur votre
ordinateur puis allez à l’adresse http://localhost:631/admin. Suivez
la procédure d’installation d’imprimante, mais cette fois choisissez
“Internet Printing Protocol (http)”. Vous devez entrer l’adresse de
l’imprimante.
Pour la trouver, affichez l’interface de CUPS du serveur, puis cliquez en haut à droite sur “Imprimantes” et cliquez sur le nom de
l’imprimante fraı̂chement installée. Notez l’adresse qui est du type
http://192.168.1.32:631/printers/HL2130.
140
14.1
Note à propos des imprimantes USB
Vous devrez alors pour l’installer sur un ordinateur préciser une
URL de ce type :
ipp://192.168.1.32:631/printers/Brother HL-2130 series.
Cliquez sur “Continuer” et terminez l’installation. Et voilà, votre
serveur d’impression est prêt.
14.1
Note à propos des imprimantes USB
La gestion des imprimantes USB sous OpenBSD est un peu particulière. Comme décrit dans /usr/local/share/doc/pkg-readme/cups*,
il faut autoriser l’accès au port USB pour l’utilisateur cups. Tapez
alors la commande usbdevs -vd. Vous obtenez une sortie de ce type :
1
# usbdevs - vd
2
Controller / dev / usb0 :
3
addr 1: high speed , self powered , config 1 , EHCI \
root hub (0 x0000 ) , Intel (0 x8086 ) , rev 1.00
4
5
uhub0
port 1 addr 2: high speed , self powered , config 1 , \
Rate Matching Hub (0 x0024 ) , Intel (0 x8087 ) , rev \
0.00
6
uhub2
7
port 1 powered
8
port 2 addr 3: low speed , power 100 mA , config 1 , \
USB Mouse (0 x1205 ) , Genesys Logic (0 x05e3 ) , rev \
1.00
9
uhidev0
10
port 3 powered
11
port 4 powered
12
port 5 powered
13
14
port 6 powered
port 2 powered
15
Controller / dev / usb1 :
16
addr 1: high speed , self powered , config 1 , EHCI \
root hub (0 x0000 ) , Intel (0 x8086 ) , rev 1.00
141
14.1
uhub1
17
18
Note à propos des imprimantes USB
port 1 addr 2: high speed , self powered , config 1 , \
Rate Matching Hub (0 x0024 ) , Intel (0 x8087 ) , rev \
0.00
uhub3
19
port 1 addr 3: high speed , self powered , config 1 ,\
20
HL -2130 series (0 x003f ) , Brother (0 x04f9 ) , rev \
1.00 , iSerialNumber E2N507126
ugen0
21
On remarque que l’imprimante (Brother) est identifiée par ugen0
sur le contrôleur /dev/usb1. Pour permettre à cups d’accéder à l’imprimante on lance la commande suivante :
1
# chown _cups / dev / ugen0 .* / dev / usb1
Afin que ces modifications soient automatiques à chaque fois que
l’imprimante est reliée au serveur, installez le démon hotplugd puis
activez-le :
1
# pkg_add hotplug - diskmount
2
# rcctl enable hotplugd
3
# rcctl start hotplugd
Créez maintenant le script /etc/hotplug/attach pour y mettre :
1
#!/ bin / sh
2
3
DEVCLASS = $1
4
DEVNAME = $2
5
6
case $DEVCLASS in
7
0)
8
if [ -n " $ ( echo $DEVNAME | grep -o " ugen [0 -9]") "\
]; then
9
DEVDESCR = $ ( usbdevs -d | grep - B1 $DEVNAME | \
sed - Ee ’s / addr [0 -9]+: (.+) $ /\1/ ’ -e 1\
q)
142
14.1
Note à propos des imprimantes USB
if [ " $ { DEVDESCR }" == " HL -2130 series , \
10
Brother " ]; then
chown _cups / dev / $ { DEVNAME }.* / dev / usb1
11
fi
12
fi
13
14
;;
15
2)
16
# disk devices
17
echo " Things for disks "
18
;;
19
esac
20
21
exit
Si votre imprimante n’était pas identifiée par quelque chose comme
”ugen1” mais ”ulpt”, alors il faut modifier la configuration du noyau
pour désactiver ce module. Cela se fait ainsi :
1
# config - fe / bsd
2
OpenBSD 6.0 - stable ( GENERIC . MP ) #1: Fri Sep
2 \
10:41:52 CEST 2016
3
root @votreserveur . net : / usr / src / sys / arch / amd64 /\
compile / GENERIC . MP
4
Enter ’ help ’ for information
5
ukc > disable ulpt
6
291 ulpt * disabled
7
ukc > quit
8
Saving modified kernel .
Un redémarrage du serveur est nécessaire pour prendre les changements en compte.
143
15
TOR
Tor est un logiciel libre permettant de renforcer la vie privée de
ses utilisateurs et ainsi passer outre les surveillances subies lors de
l’utilisation d’internet. Lorsqu’on l’utilise, les communications sont
réparties à travers une maille de serveurs, afin d’obtenir un onion
router. En gros, ce que vous demandez sur le web circule entre une
série de serveurs (les couches de l’oignon), ce qui rend très difficile de
savoir d’où viennent les paquets, et donc de vous localiser !
15.1
Configurer un relais
Il vous est possible de participer à ce réseau en étant un serveur
relais. Qui plus est, cela rendra d’autant plus difficile de déterminer
vos propres activités, puisque vos centres d’intérêt seront noyés parmi
le trafic sortant de votre connexion.
Installez et activez Tor ainsi :
1
# pkg_add tor
2
# rcctl enable tor
Assurez-vous d’ouvrir dans votre pare-feu, et de rediriger 97 dans
votre routeur le port 9001.
Ensuite, éditez 98 le fichier /etc/tor/torrc , afin d’obtenir ces
quelques lignes :
1
SOCKSPort 0
2
ORPort 9001
3
Nickname Surnom
4
RelayB an dw id th Rate 75 KB
5
Relay B an d w id t hB urst 100 KB
6
ContactInfo votrenom < adresse AT email dot fr >
7
ExitPolicy reject *:* # no exits allowed
97. → Voir page 181.
98. → Voir page 190.
144
15.2
Configurer un service caché
Modifiez les valeurs pour RelayBandwidthRate et RelayBandwidthBurst
selon votre accès à internet. Il s’agit de la bande passante que vous
laissez disponible pour Tor.
Enfin, démarrez Tor avec rcctl start tor et attendez de voir
apparaı̂tre dans le fichier /var/log/messages :
1
May 12 12:20:41 votreserveur Tor [12059]: \
Bootstrapped 80%: Connecting to the Tor network
2
May 12 12:20:41 votreserveur Tor [12059]: \
Bootstrapped 85%: Finishing handshake with first\
hop
3
May 12 12:20:42 votreserveur Tor [12059]: \
Bootstrapped 90%: Establishing a Tor circuit
4
May 12 12:20:44 votreserveur Tor [12059]: Tor has \
successfully opened a circuit . Looks like client\
functionality is working .
5
May 12 12:20:44 votreserveur Tor [12059]: \
Bootstrapped 100%: Done
6
May 12 12:20:44 votreserveur Tor [12059]: Now \
checking whether ORPort 109.190. xxx . xxx :9001 is \
reachable ... ( this may
7
take up to 20 minutes -- look for log messages \
8
May 12 12:21:10 votreserveur Tor [12059]: Self -\
indicating success )
testing indicates your ORPort is reachable from \
the outside . Excellent . Publishing server \
descriptor .
9
May 12 12:21:12 votreserveur Tor [12059]: Performing \
bandwidth self - test ... done .
15.2
Configurer un service caché
Vous pouvez proposer votre site web (ou n’importe quel autre service) au travers du réseau Tor. Ceux qui voudront y accéder utiliseront une adresse se terminant par ”.onion”, comme par exemple
145
15.2
Configurer un service caché
”5rud2tr7sm3oskw5.onion”.
Avant d’aller plus loin, notez qu’il est très fortement déconseillé
d’héberger un relais et un service caché en même temps.
Ceci étant dit, vous pouvez activer votre site caché en éditant
le fichier /etc/torrc. Décommentez les lignes correspondantes ou
ajoutez-les :
1
SOCKSPort 0
2
HiddenServiceDir / var / tor / hidden /
3
HiddenServ icePort 80 127.0.0.1:80
Relancez Tor pour activer ce service caché : rcctl restart tor.
Deux nouveaux fichiers vont apparaı̂tre dans le dossier /var/tor/hidden/ :
”hostname” et ”private key”. L’adresse de votre site en .onion se
trouve dans le fichier hostname. Notez-la :
1
# cat / var / tor / hidden / hostname
2
5 rud2tr7sm3oskw5 . onion
Cependant, ne communiquez jamais le contenu de private key.
Il ne nous reste plus qu’à configurer httpd 99 pour lui dire de recevoir les connexions vers l’adresse en ”.onion” et de les servir. Le fichier
/etc/httpd.conf pourra alors contenir ceci :
1
server "5 rud2tr7sm3oskw5 . onion " {
2
listen on 127.0.0.1 port 80
3
# emplacement du site
4
root "/ htdocs / votresite . net "
5
directory index index . html
6
[...]
7
8
}
Vous pouvez tester votre site (après un rcctl reload httpd bien
sûr) avec le navigateur torbrowser.
99. → Voir page 36.
146
15.3
Informations sur la charge du serveur
Mais, ce n’est pas chiffré dans une adresse https ! Est-ce
vraiment sécurisé ?
Bonne remarque. Le chiffrement TLS n’est pas nécessaire ici, puisque
le tunnel ouvert par Tor pour accéder au site est entièrement chiffré.
De plus, le navigateur devrait valider le certificat, or, ce dernier n’est
pas enregistré pour un domaine en ”.onion”. Notez que si vous pouvez obtenir un certificat pour cette adresse, c’est alors possible de
configurer un accès en https.
15.3
Informations sur la charge du serveur
Il peut être intéressant de garder un œil sur la charge que le serveur
subit, afin d’être sûr qu’il dispose de suffisamment de ressources. Il
existe de nombreuses solutions, que l’on ne pourra pas toutes présenter
ci-dessous. Mon choix s’est porté sur systat 100 et symon 101 .
15.3.1
Avec systat
Systat est présent par défaut dans OpenBSD. Vous pouvez obtenir
des informations sur le système en temps réel en tapant la commande
systat vm.
Pour des informations concernant la température du matériel (attention à la surchauffe !), tapez systat sensors
1
cpu0 . temp0
51.00 degC
2
acpitz0 . temp0
26.80 degC
zone temperature
À chaque fois, appuyez sur la touche q pour quitter.
15.3.2
Avec symon
Symon va vous permettre d’obtenir des statistiques sur votre serveur et de les consulter sur une page web.
Commençons par installer le nécessaire :
100. → Voir page 147.
101. → Voir page 147.
147
15.3
1
Informations sur la charge du serveur
# pkg_add symon symux syweb
On modifie ensuite la configuration de symon qui va surveiller le
système. Pour cela, on modifie le fichier /etc/symon.conf pour garder
les informations qui nous intéressent :
1
monitor { cpu (0) ,
mem ,
if ( lo0 ) ,
2
3
if ( re0 ) ,
4
pf ,
5
mbuf ,
6
sensor ( cpu0 . temp0 ) ,
7
proc ( httpd ) ,
8
io ( wd0 ) ,
9
io ( wd1 ) ,
10
df ( sd1b )
11
} stream to 127.0.0.1 2100
— cpu(0) : On surveille la charge du processeur,
— mem : On surveille la mémoire,
— if(re0) : On surveille l’interface web re0,
— pf : On surveille le parefeu 102 ,
— mbuf : On surveille la mémoire cache,
— sensor(cpu0.temp0) : On surveille la température du processeur,
— proc(httpd) : On surveille l’activité du démon httpd,
— io(wd0) : On regarde l’activité sur le disque wd0,
— df(sd1b) : On surveille l’espace restant sur la partition sd1b.
De la même façon, on configure symux qui va analyser les données
recueillies par symon. On édite 103 le fichier /etc/symux.conf :
1
mux 127.0.0.1 2100
2
3
source 127.0.0.1 {
102. → Voir page 23.
103. → Voir page 190.
148
15.3
Informations sur la charge du serveur
4
accept { cpu (0) ,
5
if ( lo0 ) ,
6
if ( re0 ) ,
7
pf ,
8
mbuf ,
mem ,
sensor ( cpu0 . temp0 ) ,
9
10
proc ( httpd ) ,
11
io ( wd0 )
12
io ( wd1 ) ,
df ( sd1b )
13
}
14
15
datadir "/ var / www / symon / rrds / localhost "
16
17
}
On ne fait que reproduire les mêmes éléments que dans /etc/symon.conf.
Attention à bien indiquer le chemin vers les données datadir. On va
d’ailleurs le créer dès maintenant :
1
# mkdir -p -m 0755 / var / www / symon / rrds / localhost
On crée maintenant les fichiers rrd :
1
# / usr / local / share / examples / symon / c_smrrds . sh all
Puisque le serveur web est dans un chroot, il faut lancer la commande suivante pour installer l’outil d’analyse des données (rddtool) :
1
# / usr / local / share / examples / rrdtool / rrdtool - chroot \
enable
Une fois ceci fait, il faut préciser dans la configuration de syweb où
trouver l’outil rrdtool. Dans le fichier /var/www/htdocs/syweb/setup.inc,
modifiez la ligne contenant $symon[’rrdtool path’] ainsi :
1
$symon [ ’ rrdtool_path ’]= ’/ usr / local / bin / rrdtool ’;
Reste une dernière modification à apporter. Puisque le serveur web
est en chroot, il faut lui donner accès au shell /bin/sh afin que PHP
puisse lancer rrdtool qui génère les graphiques :
149
15.3
Informations sur la charge du serveur
1
# mkdir -p / var / www / bin
2
# cp / bin / sh / var / www / bin
On recharge tous les nouveaux démons après les avoir activés :
1
# rcctl enable symon
2
# rcctl enable symux
3
# rcctl start symon
4
# rcctl start symux
On ajoute la configuration convenable pour le serveur http 104 ,
dans le fichier /etc/httpd.conf :
1
server " statistiques . votreserveur . net " {
2
listen on * port 80
3
root "/ htdocs / syweb "
4
directory index index . php
5
location "*. php *" {
6
fastcgi socket "/ run / php - fpm . sock "
7
}
8
9
}
Reste à recharger ce dernier avec # rcctl reload httpd puis à
aller sur le site définit pour voir les beaux graphiques.
104. → Voir page 36.
150
15.3
Informations sur la charge du serveur
151
16
Serveur de stockage
Aussi appelé NAS, ces serveurs permettent de stocker et partager
des fichiers dans un réseau domestique.
Pour mettre en place cette fonctionnalité, nous verrons deux solutions : l’une basée sur SSH et l’autre sur NFS.
16.1
Solution du fainéant : SSH
Si vous avez déjà configuré SSH 105 , nous pouvons utiliser l’outil
sshfs qui permet de monter dans un dossier les fichiers contenus sur le
serveur, un peu comme avec une clé USB. Cette solution fonctionnera
quel que soit l’endroit qui vous sert de point d’accès à internet et
restera sûr.
Admettons que vous souhaitez monter le dossier /mnt/partage du
serveur dans votre dossier /home/toto/serveur. Vous utiliserez alors
la commande suivante
1
sshfs u t i l i s a t e u r _ s s h @ v o t r e s e r v e u r . net :/ mnt / partage \
/ home / toto / serveur
On demandera le mot de passe de l’utilisateur ssh, puis ensuite
vous pourrez voir les documents du serveur dans /home/toto/serveur
comme s’ils étaient sur votre ordinateur.
Notez que ce n’est pas toujours pratique d’avoir à entrer le mot
de passe, surtout lorsqu’on souhaite que le dossier du serveur soit
monté automatiquement à chaque démarrage. Vous pouvez dans ce
cas consulter l’authentification par clés 106 .
105. → Voir page 28.
106. → Voir page 30.
152
16.2
Solution un poil plus compliquée : NFS
16.2
Solution un poil plus compliquée : NFS
NFS veut dire ”Network File System”, autrement dit ”Système de
fichiers en réseau”.
Cependant, nous n’allons pas ouvrir le partage NFS au monde entier comme on peut le fait pour d’autres services, car nous ne pouvons
pas restreindre l’accès à certains utilisateurs. L’utilisation de NFS sera
donc adaptée à un partage local, c’est à dire pour toutes les machines
utilisant votre routeur pour se connecter.
Tout d’abord, nous devons activer sur le serveur les services nécessaires.
On s’en occupe avec rcctl :
1
# rcctl enable portmap mountd nfsd
Afin que le partage NFS fonctionne comme prévu, nous allons
configurer les options pour le lancer. Remplacez dans la commande
ci-dessous le chiffre 4 par le nombre de connexions maximales vers le
serveur que vous souhaitez :
1
# rcctl set nfsd flags - tun 4
Nous avons activé ici les protocoles TCP (-t), UDP (-u), ainsi
que 4 connexions maximales vers le serveur NFS.
Maintenant, il faut préciser qui aura le droit d’accéder au NFS.
Pour cela, il faut éditer 107 le fichier /etc/exports pour préciser les
adresses IP qui pourront s’y connecter. Éditez 108 ce fichier pour y
mettre par exemple :
1
/ mnt / partage - alldirs - network =192.168.1.0/24 - mask\
=255.255.255.0
Ici, nous souhaitons restreindre l’accès au réseau local, c’est à dire
tous les appareils connectés à la même *box que votre serveur. La
difficulté ici est de connaı̂tre l’ensemble des adresses IP que votre modem attribue aux appareils qui s’y connectent. Lancez la commande
suivante :
107. → Voir page 190.
108. → Voir page 190.
153
16.2
1
Solution un poil plus compliquée : NFS
$ ifconfig | grep inet
Vous voyez apparaı̂tre quelque chose comme :
1
inet6 ::1 prefixlen 128
2
inet6 fe80 ::1% lo0 prefixlen 64 scopeid 0 x4
3
inet 127.0.0.1 netmask 0 xff000000
4
inet6 fe80 ::290: f5ff : febc :7 b56 % trunk0 prefixlen 64 \
scopeid 0 x5
5
inet6 2001:41 d0 : fe3c :6 a00 :290: f5ff : febc :7 b56 \
6
inet6 2001:41 d0 : fe3c :6 a00 :48 ac :26 f5 : c808 :9 f69 \
7
e 148836
8
inet 192.168.1.88 netmask 0 xffffff00 broadcast \
prefixlen 64 autoconf pltime 0 vl
prefixlen 64 autoconf autoconfpr
192.168.1.255
Il y a beaucoup d’information ici. Ce qui nous intéresse, c’est la
toute dernière ligne avec l’IP 192.168.1.88. Cela nous permet de
remarquer que les IP du réseau local seront de la forme 192.168.1.xx.
Afin d’en savoir plus sur ces plages d’adresse, le vous invite à lire les
articles suivants :
http://www.it-connect.fr/les-adresses-ip-privees-et-publiques/
et
https://fr.wikibooks.org/wiki/R%C3%A9seaux TCP/IP/Adressage IP v4
Si vous souhaitez y accéder de n’importe où, retirez les options
-network et -mask. Cependant, notez bien que cela donnera accès au
NFS à tout le monde.
On peut maintenant démarrer les services avec :
1
# rcctl start portmap mountd nfsd
Dans le cas où vous modifiez le fichier /etc/exports, pensez à
recharger la configuration avec :
1
# rcctl reload mountd
154
16.2
Solution un poil plus compliquée : NFS
Pensez à ouvrir les ports 111 et 2049 en TCP et UDP dans le
parefeu 109 afin qu’une machine du réseau local puisse accéder au partage NFS. Pour voir la liste des ports utilisés, lancez # rpcinfo -p
127.0.0.1. Ces ports peuvent changer lors d’un redémarrage. Pour
un partage local, vous pouvez ouvrir votre NAS à tout le réseau local
avec cette ligne dans /etc/pf.conf :
1
pass in on $ext_if from 192.168.1.0/24
Vous pourrez maintenant monter le partage NFS sur votre système.
La démarche dépend du système d’exploitation, mais dans la plupart
des cas, ajouter une entrée dans le fichier /etc/fstab de l’ordinateur
qui doit monter le NFS suffit. Cette entrée ressemblera à :
1
192.168.1.2:/ mnt / partage / mnt nfs rw , nodev , nosuid 0 \
0
Remplacez l’IP par celle du serveur, que vous pouvez trouver en
lançant la commande ifconfig |grep inet sur ce dernier.
109. → Voir page 23.
155
17
Proxy VPN (OpenVPN)
Un VPN veut dire ”Réseau privé virtuel”. Cela permet de disposer
d’un tunnel chiffré pour que tout le trafic sorte par votre serveur. Et
dans ce cas, le mot ”tunnel” est une image tout à fait adaptée car un
VPN présente plusieurs intérêts, notamment :
— Le trafic est chiffré, il ne peut donc être analysé par un tiers,
— Si vous êtes connecté sur un réseau public (hotspot, chez McDo,
à l’hôtel), vous ignorez si le trafic n’est pas analysé. Vous souhaitez vraiment aller interroger votre compte bancaire ou réaliser
des achats en ligne alors que tout peut être intercepté ?
— Sans parler de données sensibles, il faut prendre en compte votre
vie privée. En effet, l’administrateur réseau est en mesure de
savoir que vous avez une passion pour le tricot d’après vos recherches et les pages web visitées, même si vous souhaitez garder
ça secret.
Un VPN permet de se protéger de ces atteintes abusives à la vie
privée.
— Si vous vous connectez à partir de votre lieu de travail par
exemple, il se peut que l’administrateur ait fermé l’accès à certains sites. Or si vous voulez aller sur les forums de tricot pendant votre pause, qui devrait vous en empêcher ?
Convaincu de l’utilité d’un VPN ?
La mise en place va se passer en deux temps :
1. Sur le serveur, nous allons générer des certificats et installer
OpenVPN.
2. Sur les machines qui voudront passer par le tunnel VPN, il faudra faire passer le trafic par notre serveur. Afin de s’identifier,
des certificats sont souvent utilisés, mais nous utiliserons plutôt
des identifiants et mots de passe.
Cette démarche n’est pas forcément facile. Prenez le temps de lire
et relire ce qui suit et suivez pas à pas les étapes proposées.
156
17.1
Préparation de la configuration
Notez aussi que des choix ont été faits afin de simplifier la procédure.
Le résultat est donc un compromis entre sécurité et facilité d’utilisation pour l’administrateur et l’utilisateur. On pourra par exemple
remarquer que :
— OpenVPN ne sera pas exécuté dans un chroot.
— On n’utilisera pas de certificat pour chaque client car c’est un
processus trop pénible à gérer pour un débutant.
— On utilisera à la place une identification par mot de passe. On
rappelle l’importance de bien les choisir 110 .
— Chaque utilisateur autorisé à utiliser le VPN sera créé pour l’occasion et sera placé dans un groupe spécifique.
Les plus aguerris voudront certainement lire la page suivante pour
aller plus loin :
http://openbsdsupport.org/openvpn-on-openbsd.html
17.1
Préparation de la configuration
On commence par installer OpenVPN :
1
# pkg_add openvpn openvpn_bsdauth
Vous voudrez peut-être lire la documentation fournie avec le paquet :
1
less / usr / local / share / doc / pkg - readmes / openvpn -2.3.11
Pour l’instant, nous allons créer les dossiers nécessaires à openvpn.
Ces derniers contiendront la configuration, les certificats, et on termine
par le dossier qui contiendra les journaux d’openvpn :
1
# install -m 700 -d / etc / openvpn / private
2
# install -m 755 -d / etc / openvpn / certs
3
# install -m 755 -d / var / log / openvpn
La commande install est très pratique pour créer des dossiers
avec les permissions adéquates.
110. → Voir page 187.
157
17.2
Création des certificats
C’est tout pour l’instant, on y va doucement mais sûrement.
17.2
Création des certificats
On va maintenant créer les certificats et autres fichiers servant à
l’authentification du serveur. Par simplicité, nous allons utiliser l’outil
easy-rsa :
1
# pkg_add easy - rsa
Afin de créer les fichiers dont on aura besoin, on se place dans
un dossier temporaire /tmp/openvpn dans lequel on copie les fichiers
nécessaires à easy-rsa :
1
# mkdir -p / tmp / openvpn
2
# cd / tmp / openvpn
3
# cp -r / usr / local / share / easy - rsa /* .
On va maintenant configurer easy-rsa en éditant un fichier dont le
petit nom est vars. On copie tout d’abord l’exemple donné :
1
# cp vars . example vars
Éditez 111 ce fichier. Vous devriez changer au moins les variables
suivantes selon votre cas :
1
set_var E AS Y R SA _REQ_COUNTRY
" FR "
2
set_var E A S Y R S A _REQ_PROVINCE
" France "
3
set_var EASYRSA_REQ_CITY
" Nantes "
4
set_var EASYRSA_REQ_ORG " PuffyCorp "
5
set_var EA SYRSA_REQ_EMAIL
" me@example . net "
6
set_var EASYRSA_REQ_OU
" PuffyCorpUnit "
set_var EASYRSA_KEY_SIZE
4096
7
8
Ensuite, on va générer les certificats en lançant les commandes
suivantes :
111. → Voir page 190.
158
17.3
Configuration d’OpenVPN
1
# ./ easyrsa init - pki
2
# ./ easyrsa build - ca nopass
3
# ./ easyrsa build - server - full server nopass
4
# ./ easyrsa gen - dh
C’est long, il y a des ., des + qui apparaissent, c’est normal.
On en profite pour générer au passage le certificat de révocation,
qui vous sera peut-être utile un jour :
1
# ./ easyrsa gen - crl
Une fois terminé, on va changer les permissions sur les fichiers
générés :
1
chown -R _openvpn : wheel pki /*
2
chmod -R 600 pki /*
On retourne dans le dossier d’openvpn, dans lequel on copie les
fichiers créés précédemment :
1
# cd / etc / openvpn
2
# cp -p / tmp / openvpn / pki / ca . crt certs / ca . crt
3
# cp -p / tmp / openvpn / pki / issued / server . crt certs /\
server . crt
4
# cp -p / tmp / openvpn / pki / private / server . key private /\
5
# cp -p / tmp / openvpn / pki / dh . pem dh . pem
6
# cp -p / tmp / openvpn / pki / crl . pem crl . pem
server . key
Pensez à supprimer le dossier /tmp/openvpn :
1
# rm - rf / tmp / openvpn
17.3
Configuration d’OpenVPN
Afin de configurer OpenVPN, on va définir un mot de passe pour
restreindre l’administration. Mettez ce bon mot de passe 112 dans
112. → Voir page 187.
159
17.3
Configuration d’OpenVPN
le fichier /etc/openvpn/private/mgmt.pwd. Modifier les permissions
vers ce fichier pour en restreindre l’accès :
1
# chown root : wheel / etc / openvpn / private / mgmt . pwd
2
# chmod 600 / etc / openvpn / private / mgmt . pwd
Nous pouvons maintenant configurer openvpn en créant le fichier
/etc/openvpn/server.conf. Afin qu’il soit pré-rempli, on va copier
l’exemple fournit avec la commande :
1
# cp / usr / local / share / examples / openvpn / sample - config \
- files / server . conf / etc / openvpn / server . conf
Éditez 113 maintenant ce fichier. Vous devrez au moins changer ces
lignes :
1
# configuration reseau
2
dev tun0
3
server 10.8.0.0 255.255.255.0
4
push " redirect - gateway def1 "
5
# On propose le resolveur de FDN
6
# https :// www . fdn . fr / actions / dns /
7
push " dhcp - option DNS 80.67.169.12"
8
# Si le serveur a son propre resolveur
9
push " dhcp - option DNS 10.8.0.1"
10
11
# les certificats
12
ca / etc / openvpn / certs / ca . crt
13
cert / etc / openvpn / certs / server . crt
14
key / etc / openvpn / private / server . key
15
dh / etc / openvpn / dh . pem
16
crl - verify / etc / openvpn / crl . pem
17
18
# options diverses
19
comp - lzo
20
daemon openvpn
113. → Voir page 190.
160
17.3
Configuration d’OpenVPN
21
float
22
group _openvpn
23
user _openvpn
24
ifconfig - pool - persist / var / openvpn / ipp . txt
25
keepalive 10 120
26
management 127.0.0.1 1195 / etc / openvpn / private / mgmt .\
pwd
27
max - clients 100
28
persist - key
29
persist - tun
30
port 1194
31
proto udp
32
33
# authentification
34
client - cert - not - required
35
username - as - common - name
36
script - security 3 system
37
auth - user - pass - verify / usr / local / libexec /\
openvpn_bsdauth via - env
38
auth - nocache
39
40
# journaux
41
log - append
/ var / log / openvpn / openvpn . log
42
status / var / log / openvpn / openvpn - status . log
43
verb 3
On modifie les permissions vers ce fichier :
1
# chown root : _openvpn / etc / openvpn / server . conf
2
# chmod 640 / etc / openvpn / server . conf
Ça sera tout pour la configuration du serveur.
161
17.4
Configuration réseau pour OpenVPN
17.4
Configuration réseau pour OpenVPN
Nous devons modifier la configuration du parefeu 114 afin de rediriger 115 le trafic provenant du VPN. Dans le fichier /etc/pf.conf,
vous aurez alors cette ligne en plus :
1
pass out on $ext_if from 10.8.0.0/24 to any nat - to (\
$ext_if )
Il faut aussi autoriser le trafic à travers le tunnel VPN :
1
pass in quick on $tun_if keep state
N’oubliez pas au passage d’ouvrir et de rediriger 116 le port 1194
en UDP.
On peut maintenant relancer le pare-feu avec pfctl -d && pfctl
-ef /etc/pf.conf.
Il faut autoriser le transfert d’IP (ou ”l’IP packet forwarding”) en
éditant le fichier /etc/sysctl.conf pour y mettre :
1
net . inet . ip . forwarding =1
Pour ne pas avoir à redémarrer le serveur, vous pouvez activer
cette option avec la commande :
1
# sysctl net . inet . ip . forwarding =1
Si vous avez la chance de disposer d’une IPv6, n’oubliez pas l’équivalent :
1
# sysctl net . inet6 . ip6 . forwarding =1
2
# echo ’ net . inet6 . ip6 . forwarding =1 ’ >> / etc / sysctl .\
conf
17.5
Création des utilisateurs du VPN
C’est presque finit ! Courage !
114. → Voir page 23.
115. → Voir page 181.
116. → Voir page 181.
162
17.6
Démarrage du VPN
Seuls quelques utilisateurs auront le droit d’utiliser le VPN. Les
élus autorisés seront ceux appartenant au groupe openvpnusers.
Pour créer ces utilisateurs, utilisez la commande suivante :
1
# useradd -G _openvpnusers utilisateur
Profitez-en pour attribuer un mot de passe robuste 117 pour ce
dernier :
1
# passwd utilisateur
17.6
Démarrage du VPN
Afin de lancer le VPN automatiquement à chaque fois que le serveur démarre, une interface de type ”tunnel” doit être créée. Tout
ceci peut être réalisé automatiquement par OpenBSD en ajoutant un
fichier /etc/hostname.tun0 pour mettre dedans :
1
up
2
!/ usr / local / sbin / openvpn -- config / etc / openvpn /\
server . conf
Afin de le lancer manuellement, tapez :
1
# sh / etc / netstart
Vous pouvez alors vérifier que openvpn est bien en cours de fonctionnement en regardant les journaux :
1
# tail -f / var / log / openvpn /*
Afin d’arrêter openvpn pour une raison ou une autre, vous pouvez
tuer son processus avec la commande kill -9 $(pgrep openvpn).
17.7
Configuration client
Il existe des outils graphiques permettant de faciliter la configuration d’une connexion avec openvpn. Libre à vous d’en installer un sur
votre ordinateur ou smartphone.
117. → Voir page 187.
163
17.7
Configuration client
Le plus souvent, vous devrez fournir le certificat du serveur afin
que le client puisse se connecter. Envoyez-le par mail ou tout autre
moyen. Il s’agit du fichier /etc/openvpn/certs/ca.crt. Vous pouvez
afficher son contenu avec la commande cat :
1
# cat / etc / openvpn / certs / ca . crt
2
3
----- BEGIN CERTIFICATE - - - - -
4
5
M I I G N T C C A h 2 g A w I B A g I J A L x L 5 R t 5 / p1TMA0GCSqGSIb3D
6
BAMMC3lldXhkZWxpYmFkMB4XDTE2MTAyMzA5MTk0NloXD
7
FjE9MBIGA1UEAwwLeWV1eGRlbGliYWQwggEiMA0GCSqGS
8
0 NRT4WgYexgM6Dh + S / t M q 8 J c i Q M U E g M w L Z Z r F Z n 7 m D B t 1
9
...
10
...
11
j q u d e p B h 8 7 d b Z U B S b m r 9 Q u O V 1 s d P A 6 T U p + yn8Ytyfd0M2
12
n y P o a p W c I t o u a t M e 4 2 g z o 0 f 3 N P k H S I h i / dXv9BGNa1jxG
13
OTIdoOdFmQw3BlD + T C y Y D M g K p W K a F i 6 t 9 J y j i 7 W J s t 6 8 +
14
u2WyqiFXS / FrWqxoTs4WWGuAM / LPzMvhhNZ5eiP / l0aIR
15
16
----- END CERTIFICATE - - - - -
Ensuite, reste à copier ce contenu dans un fichier pour l’envoyer
au client.
Avec la configuration proposée ci-dessus, l’utilisateur devra se connecter avec les identifiants créés rien que pour lui.
Selon le logiciel vous permettant de vous connecter à votre VPN,
la configuration générée ressemblera à ceci pour les clients :
1
client
2
dev tun0
3
proto udp
4
remote votreserveur . net 1194
5
ca ca . crt
6
auth - user - pass
7
comp - lzo
164
17.7
8
Configuration client
auth - nocache
Remarquez qu’on retrouve les mêmes options que celles définies
pour le serveur. Le fichier ca.crt correspond au certificat du serveur
récupéré plus tôt, qu’il faudra enregistrer sur le client.
Une fois vos identifiants entrés, vos communications passent par
votre VPN. Vous pouvez le vérifier en utilisant un service web qui vous
donne votre adresse IP, comme par exemple http://whatismyipv6.com/.
Ce dernier doit afficher l’IP du serveur et non l’IP de votre ordinateur.
165
18
Radio Web
Dans cette partie, nous allons voir comment proposer une radio
web. L’objectif sera d’avoir un service qui ne prend pas toutes les
ressources du serveur.
L’idéal serait de pouvoir diffuser des émissions en direct. Lorsque
personne ne parle sur la radio, de la musique sera automatiquement
jouée à partir d’une liste de lecture.
Nous allons utiliser les outils icecast et mpd.
18.1
Configuration d’icecast et mpd
Commençons par les installer :
1
# pkg_add icecast mpd
On va copier l’exemple de configuration d’icecast avant de l’éditer 118 :
1
# cp / usr / local / share / examples / icecast / icecast . xml .\
dist / var / icecast / icecast . xml
Configurez ce fichier à votre goût. Voici un exemple de ce que j’ai
modifié :
1
< location > Sur Mars </ location >
2
3
< authentication >
4
< source - password > motdepasse </ source - password \
5
< relay - password > motdepasse </ relay - password >
>
6
7
< admin - user > admin </ admin - user >
8
< admin - password > adminpw </ admin - password >
9
</ authentication >
10
11
< hostname > votredomaine . net </ hostname >
118. → Voir page 190.
166
18.1
Configuration d’icecast et mpd
12
<! - - You may have multiple < listener > elements -->
13
< listen - socket >
< port >8000 </ port >
14
< bind - address >0.0.0.0 </ bind - address >
15
16
</ listen - socket >
17
18
< mount >
19
< mount - name >/ play . ogg </ mount - name >
20
<no - mount >1 </ no - mount >
21
</ mount >
22
< mount >
23
< mount - name >/ live . ogg </ mount - name >
24
< fallback - mount >/ play . ogg </ fallback - mount >
25
< fallback - override >1 </ fallback - override >
26
</ mount >
On voit bien dans cette configuration que lorsqu’un ”live” est en
cours, il est diffusé, sinon ça bascule automatiquement sur la playlist.
On active icecast puis on le lance :
1
# rcctl enable icecast
2
# rcctl start icecast
Ensuite, nous allons configurer le lecteur de musique, qui sera ici
mpd. Éditez 119 le fichier /etc/mpd.conf de cette façon :
1
# Dossier contenant toute la musique
2
music_directory
"/ mnt / bigstorage /\
Musique "
3
4
# Pour icecast . Pensez à modifier le mot de passe
5
audio_output {
6
type
" shout "
7
encoding
" ogg "
8
name
" Ma super radio "
9
host
" localhost "
119. → Voir page 190.
167
18.2
Diffuser une émission
10
port
"8000"
11
mount
"/ play . ogg "
12
password
" motdepasse "
13
bitrate
"128"
14
format
"44100:16:2"
15
}
Je n’ai listé ci-dessus seulement ce que j’ai eu besoin de modifier.
Changez bien le mot de passe pour envoyer la musique à icecast.
Enfin, activez mpd et lancez-le :
1
# rcctl enable mpd
2
# rcctl start mpd
Vous pouvez lancer la lecture en utilisant un client mpd, comme
par exemple mpc. Il s’installe tout simplement :
1
# pkg_add mpc
Voici quelques commandes bien pratiques :
— Lecture : mpc play
— Remplir la liste d lecture avec toutes les musiques : mpc ls |
mpc add
— Lecture aléatoire : mpc random on
— Lecture en boucle : mpc repeat on
— Fondu entre les pistes mpc crossfade 3
Avant d’essayer d’écouter votre musique, ouvrez et redirigez 120 le
port 8000 dans votre pare-feu et routeur.
Pour tester votre radio, ouvrez l’adresse suivante avec un lecteur
de musique (vlc par exemple) : http://votreserveur.net:8000/live.ogg
.
18.2
Diffuser une émission
Afin de diffuser une émission, il faudra utiliser n’importe quel logiciel capable de communiquer avec icecast. La seule différence sera que
120. → Voir page 181.
168
18.2
Diffuser une émission
l’on diffusera sur ”/live.ogg” directement et non plus sur ”/play.ogg”.
Si vous souhaitez faire des podcasts, je vous conseille l’excellent
logiciel idjc.
En attendant, prenons pour exemple vlc qui va jouer ce que vous
voulez pour l’envoyer sur le serveur.
Une fois vlc ouvert, cliquez sur “Media” -> “Flux”. Ajoutez un
fichier puis cliquez sur diffuser.
Cliquez sur “Next, puis choisissez dans “Nouvelle destination “IceCast. Cliquez sur “Ajouter.
169
18.2
Diffuser une émission
Remplissez ensuite les différents champs :
— Adresse : votredomaine.net
— Port utilisé : 8000 par défaut
— Point de montage : /live.ogg
— Utilisateur :mot de passe : source:votremotdepasse
L’utilisateur ici est “source”, à moins d’avoir modifié le fichier
de configuration sur ce point.
170
18.3
Montrer en ligne ce qui est joué
Vous pouvez activer le transcodage si vous le souhaitez. Audio
Vorbis (OGG) fonctionne bien en général. Il vous reste à valider la
suite.
18.3
Montrer en ligne ce qui est joué
Vous voudrez peut-être afficher sur votre site web ce que la radio
est en train de jouer. Mettez alors ceci dans /var/icecast/web/all.xsl
1
< xsl : stylesheet xmlns : xsl =" http :// www . w3 . org /1999/\
XSL / Transform " >
2
< xsl : output method =" xml "/ >
3
< xsl : template match ="*" >
4
< xsl : copy - of select ="."/ >
5
</ xsl : template >
6
</ xsl : stylesheet >
Ensuite, dans un fichier /var/icecast/web/onair.xsl, mettez :
1
< xsl : stylesheet xmlns : xsl =" http :// www . w3 . org /1999/\
2
< xsl : output method =" text "/ >
XSL / Transform " >
3
4
< xsl : template match ="/ icestats " >
5
<! - - only show the first source -->
6
< xsl : apply - templates select =" source [1]"/ >
7
</ xsl : template >
8
9
< xsl : template match =" source " >
10
< xsl : choose >
11
< xsl : when test =" title or artist " >
12
< xsl : if test =" artist " > < xsl : value - of select =" artist " \
13
< xsl : value - of select =" title " / >
/ > - </ xsl : if >
14
</ xsl : when >
15
< xsl : otherwise > Unknown </ xsl : otherwise >
16
</ xsl : choose >
171
18.3
17
Montrer en ligne ce qui est joué
</ xsl : template >
18
19
</ xsl : stylesheet >
Les personnes allant à http://votreserveur.net:8000/onair.xsl pourront voir ce qui est joué. Dans votre code html, il suffirait alors de
rajouter ceci pour l’afficher sur une page :
1
<h3 > Now playing </ h3 >
2
< iframe id =" icecast " src =" http :// votreserveur . net\
:8000/ onair . xsl " >
3
</ iframe >
4
< audio src =" http :// votreserveur . net :8000/ live . ogg " \
controls =" controls " > </ audio >
172
19
Annexes
19.1
Liens et références
19.1.1
Références
Ce document n’est pas le fruit de mon invention, mais rassemble
des informations glanées ci et là.
— FAQ d’OpenBSD : http://www.openbsd.org/faq/index.html
— FAQ sur pf : http://www.openbsd.org/faq/pf/filter.html
— FAQ d’Opensmtpd : https://www.opensmtpd.org/faq/index.html
— Absolute OpenBSD : http://blather.michaelwlucas.com/archives/846
— Installation détaillée d’un serveur mail :
http://technoquarter.blogspot.fr
— Notes de Vigdis : https://chown.me
— Configuration de spamd :
https://www.pantz.org/software/spamd/configspamd.html
— Configuration de symon :
https://dummyobsd.blogspot.fr/2013/12/openbsd-basic-configurationsymon.html
— Configuration d’owncloud (nextcloud) :
https://github.com/reyk/httpd/wiki/Running-ownCloud-with-httpdon-OpenBSD
— Wiki auto-hébergement : http://wiki.auto-hebergement.fr/
— Un annuaire d’applications et de services à auto-héberger :
http://waah.quent1.fr/doku.php
— Des applications simples à auto-héberger sélectionnées par sebsauvage :
http://sebsauvage.net/auto/
— Documentation PHP :
https://secure.php.net/manual/en/install.unix.openbsd.php
173
19.1
Liens et références
— De nombreux autres forums et blogs perdus dans l’oubli...
19.1.2
Liens
Voici plusieurs liens énoncés au cours de ce document, plus ou
moins dans leur ordre d’apparition :
— Site d’OpenBSD : http://www.openbsd.org/
— Conférence ”Je n’ai rien à cacher” : http://jenairienacacher.fr
— Documentation officielle pour l’installation d’OpenBSD :
http://www.openbsd.org/faq/faq4.html
— Miroirs de téléchargement d’OpenBSD :
http://www.openbsd.org/ftp.html
— Logiciel Rufus : https://rufus.akeo.ie/
— Manuel de disklabel :
http://man.openbsd.org/OpenBSD-current/man8/disklabel.8
— OpenSSH : http://www.openssh.com/
— SQlite : https://www.sqlite.org/
— Client de messagerie Thunderbird :
https://www.mozilla.org/fr/thunderbird/
— Tester si ses messages sont des spams : https://www.mail-tester.com/
— Documentation sur la mise en place d’une solution antispan avec
bgpd : http://bgp-spamd.net/client/
— Site officiel du projet tor : https://www.torproject.org/
— Navigateur Torbrowser :
https://www.torproject.org/projects/torbrowser.html.en
— Extension Firefox pour naviguer sur les site gopher :
http://gopher.floodgap.com/overbite/
— Page errata d’OpenBSD pour connaı̂tre les patches de sécurité
disponibles : http://www.openbsd.org/errata.html
174
19.1
Liens et références
— M :Tier : http://www.mtier.org/
— Webmail roundcube : https://roundcube.net/
— Nextcloud : https://nextcloud.com/ –
https://docs.nextcloud.com/server/10/admin manual/
— BoZon et son adresse de téléchargement : http://bozon.pw/fr –
https://github.com/broncowdd/BoZoN/archive/master.zip
— Blogotext et ses captures d’écran :
http://lehollandaisvolant.net/blogotext/fr/ –
http://lehollandaisvolant.net/blogotext/fr/?screenshots
— Wordpress : https://wordpress.org/
— Baı̈kal et son adresse de téléchargement : http://sabre.io/baikal/
–
https://github.com/fruux/Baikal/releases
— Extension pour Thunderbird de gestion de calendrier :
https://www.mozilla.org/en-US/projects/calendar/
et
https://www.guillaume-leduc.fr/synchronisez-baikal-avec-thunderbirdet-lightning.html
— Exemple de configuration de Thunderbird avec Baı̈kal :
https://www.mozilla.org/en-US/projects/calendar/
— Site de Dokuwiki : https://www.dokuwiki.org/fr:dokuwiki
— Site de Webalizer : http://www.patrickfrei.ch/webalizer/
— Site de Piwik : https://piwik.org/
— Documentation officielle de piwik concernant son installation :
https://piwik.org/docs/requirements/
— Certificats SSL avec Letsencrypt : https://letsencrypt.org/
— Documentation officielle de letsencrypt : https://letsencrypt.org/gettingstarted/
175
19.2
Obtenir un certificat SSL
— Tester la qualité du chiffrement de votre site avec ssllabs :
https://www.ssllabs.com/
— FDN : http://www.fdn.fr/
— Liste de diffusion d’OpenBSD : https://www.openbsd.org/mail.html
— Forum et wiki francophone OBSD4* : http://obsd4a.net/qa/ http://obsd4a.net/wiki
— Documentation sur l’utilisation de vi :
http://wiki.linux-france.org/wiki/Utilisation de vi
— Wiki des applications auto-hébergées : http://waah.quent1.fr/
— Sécuriser son shell SSH : https://www.guillaume-leduc.fr/securisersecure-shell-ssh.html
— Contrôle tes données : https://controle-tes-donnees.net/
— Divers tutoriels en anglais pour OpenBSD : http://2f30.org/guides.html
— Mise en place d’OpenVPN : http://openbsdsupport.org/openvpnon-openbsd.html
— Configuration de relayd :
http://www.reykfloeter.com/post/41814177050/relayd-ssl-interception
19.2
19.2.1
Obtenir un certificat SSL
Obtenir un certificat avec letsencrypt
Le site lestencrypt.org fournit un client permettant d’obtenir un
certificat qui sera automatiquement considéré comme ”de confiance”
par tous les navigateurs. C’est un service absolument génial tout à
fait adapté à l’auto-hébergement.
De base est inclus dans OpenBSD l’outil acme-client qui vous
permettra d’obtenir un certificat avec letsencrypt.
Cet outil va vérifier que vous avez bien accès au domaine pour
lequel vous souhaitez un certificat. Il ira donc chercher un fichier dans
176
19.2
Obtenir un certificat SSL
”.well-known/acme-challenge”. Il faut donc rendre disponible ce dossier via http. Normalement, vous n’avez rien à faire. Sinon, ajoutez ces
quelques lignes dans votre fichier httpd.conf comme indiqué dans le
chapitre correspondant.
1
location "/. well - known / acme - challenge /*" {
root "/ acme "
2
root strip 2
3
}
4
Avant d’utiliser cet outil, nous allons le configurer en ajoutant
cette ligne à la fin du fichier /etc/acme-client.conf :
1
include "/ etc / acme - client - custom . conf "
Ainsi, nous pourrons mettre notre configuration dans un nouveau
fichier /etc/acme-client-custom.conf sans risquer de voir nos modifications écrasées par des mises à jour.
Dans ce dernier fichier, nous allons donc mettre ces lignes :
1
domain votredomaine . com {
alternative names { webmail .\
2
votredomaine . com www .\
votredomaine . com }
domain key "/ etc / ssl / acme / private /\
3
votredomaine - privkey . com . pem "
4
domain certificate "/ etc / ssl / acme /\
5
domain chain certificate "/ etc / ssl /\
6
domain full chain certificate "/ etc /\
votredomaine - cert . com . pem "
acme / votredomaine - chain . com . pem "
ssl / acme / votredomaine - fullchain .\
com . pem "
7
sign with letsencrypt
8
challengedir "/ var / www / htdocs /\
votresite "
9
}
177
19.2
Obtenir un certificat SSL
Remplacez les éléments suivants :
— votredomaine.com par votre nom de domaine.
— Complétez alternative names avec les sous-domaines à certifier.
— Adaptez l’emplacement de la clé et du certificat obtenus dans
domain key, domain certificate, domain chain certificate
et domain full chain certificate. Ce sont ces fichiers que
vous préciserez lorsque vous voudrez utiliser ces certificats.
— Changez le répertoire où se trouve votre site dans challengedir.
Vous pourrez ensuite générer vos certificats en lançant :
1
# acme - client - vAD votredomaine . com
Pour mettre à jour les certificats, il suffira de lancer cette commande à nouveau.
19.2.2
Générer un certificat SSL auto-signé
Nous allons ici auto-signer le certificat. Les visiteurs de votre site
risquent juste d’avoir un avertissement de ce type :
Sachez qu’il est possible d’acheter une autorité de certification.
Mais dépenser votre argent n’est pas nécessaire n’est-ce pas ? De plus
178
19.2
Obtenir un certificat SSL
un certificat auto-signé ne retire en rien la protection du chiffrement
SSL.
Pour créer un certificat et le signer, il faut lancer la commande
suivante. Bien sûr, remplacez le nom du fichier certificat.pem à votre
convenance :
1
# openssl req - x509 - sha512 - nodes - days 365 - newkey\
rsa :4096 \
2
- keyout / etc / ssl / private / certificat . pem \
3
- out / etc / ssl / private / certificat . pem
Quelques questions vous seront posées. Vous n’êtes pas obligé de
remplir tous les champs.
Finalement, il faut protéger ce certificat. Lancez ces deux dernières
commandes afin d’en restreindre les permissions :
1
# chown root : root / etc / ssl / private / certificat . pem
2
# chmod 600 / etc / ssl / private / certificat . pem
Retenez bien le chemin vers ce certificat. Il faudra le préciser dans
la configuration de votre serveur http.
Pour les plus intéressés, vous pourrez tester la sécurité de votre serveur sur le site sslabs, qui fournit d’excellents conseils pour l’améliorer.
179
19.3
Un nom de domaine
19.3
Un nom de domaine
Vous voudrez certainement obtenir un nom de domaine, qui permettra à tous d’accéder plus facilement votre serveur. Cela vous donne
aussi la possibilité de mieux vous organiser avec des sous-domaines,
par exemple mail.mondomaine.com, blog.mondomaine.com...
Mais c’est quoi un nom de domaine ?
Imaginons que M. Ali Gator vit au 5 rue du moulin à Picsouville. Pour aller lui rendre visite, c’est à cette adresse que vous allez
vous rendre. Sur le web, l’adresse de votre serveur, c’est une série de
nombres. Par exemple 93.22.160.7. C’est pratique pour les machines,
pas pour les humains.
Un nom de domaine nous permet d’utiliser l’adresse wikipedia.org,
qui est traduit par les ordinateurs en 91.198.174.192. Avouez que c’est
plus facile à retenir.
La série de nombres indiquant “l’adresse” d’un serveur est ce qu’on
appelle une adresse IP. L’association d’une IP avec un nom de domaine est possible grâce aux enregistrements DNS 121 (Domain Name
System).
Vous pouvez acheter un nom de domaine auprès de ce que l’on
appelle un registre ou registrar comme OVH ou Gandi. Il en existe
aussi des gratuits, comme ceux de FDN ou freenom.com.
Une fois votre domaine acquis, configurer les champs DNS 122 pour
le faire pointer vers votre adresse IP. Pour ça, référez vous à la partie
sur les DNS 123 .
19.4
Gestion des DNS
Lorsque un ordinateur doit aller sur un site dont le nom est ”mondomaine.com”, alors il va demander à un serveur DNS 124 (qu’on ap121.
122.
123.
124.
→
→
→
→
Voir
Voir
Voir
Voir
page
page
page
page
180.
180.
180.
180.
180
19.4
Gestion des DNS
pelle résolveur) à quelle adresse IP ce nom de domaine correspond.
Une fois que vous avez un nom de domaine, il faut le relier à
l’adresse IP de votre serveur. Mais si, souvenez-vous, cette série de
nombres ressemblant à 91.198.174.192. Pour cela, enregistrez un
champ de type A dans l’interface d’administration du registre. Par
exemple :
1
mondomaine . com
A
34.121.124.123
Comment connaı̂tre mon adresse IP ?
Rien de plus simple, il existe de nombreux services qui vous permettent de la retrouver. Quelques exemples :
— http://lehollandaisvolant.net/tout/ip
— http://who.is/
— http://www.whatsmyip.org/
Vous pouvez aussi la retrouver en tapant dans un terminal :
1
# / sbin / ifconfig
Notez qu’il existe plusieurs types d’enregistrements :
— Les champs A pour les adresses IPv4. ex : 12.123.123.12 ;
— Les champs AAAA pour les adresses IPv6. ex :
2001:db8:4212:4212:4212:4212:4212:4212 ;
— Les champs CNAME. Ils sont très utiles pour définir des sousdomaines et organiser votre serveur. Vous aurez alors plusieurs
CNAME qui pointeront vers le champ A précédent. Par exemple :
1
blog . mondomaine . com CNAME mondomaine . com
2
wiki . mondomaine . com CNAME mondomaine . com
3
webmail . mondomaine . com CNAME mondomaine . com
— Les champs MX, NS ,TXT.
181
19.5
19.5
Rediriger les ports sur son routeur
Rediriger les ports sur son routeur
Votre serveur, tout comme votre ordinateur actuellement, sera certainement connecté à internet par l’intermédiaire d’un modem (une
*box). Il faut s’assurer que lorsqu’un visiteur voudra accéder à votre
serveur, la *box le redirige bien vers votre serveur, et non vers une
autre machine du réseau local. On dit que l’on configure le routeur.
Autrement dit, imaginez votre *box comme un grand mur avec dedans plusieurs portes. Chaque porte est numérotée. Quand quelqu’un
veut accéder à votre serveur, il va venir frapper à l’une des portes,
par exemple la numéro 80 pour un serveur http. Afin que tout fonctionne bien, il est nécessaire de savoir où mène la porte numéro 80. Si
la box ne le sait pas, alors la porte reste fermée et votre serveur est
inaccessible. Bien sûr, pour plus de sécurité encore, une fois la porte
80 passée, votre serveur sera équipé d’un parefeu 125 pour vérifier que
vous avez bien le droit d’entrer.
Dans le schéma ci-dessus, seuls les ports 443, 80 et 22 sont associés
au serveur. Si le petit malin demande un port qui n’est pas redirigé
vers le serveur (la porte est fermée), alors la requête ne peut pas aller
jusqu’au bout. C’est comme s’il demandait d’aller à une destination
qui n’existe pas. En revanche, lorsque le visiteur demande de passer
par la porte 80, il est bien renvoyé vers le serveur.
La configuration du routeur se déroule toujours de la même façon :
1. Vous accédez à l’interface de configuration du modem ;
2. Vous précisez le port d’écoute par lequel vont arriver les requêtes.
125. → Voir page 23.
182
19.6
Notes et astuces diverses
Par exemple, le port 80 pour un site web ;
3. Vous indiquez que ce qui est adressé à ce port doit être mis
en relation avec le port 80 de votre serveur (et pas un autre
ordinateur connecté à la *box).
Cependant, l’interface de configuration n’est pas la même selon si
vous avez une livebox, freebox, modem OVH... Pas d’inquiétude, on
peut trouver l’adresse à taper dans un navigateur web pour accéder à
cette interface. Essayez dans l’ordre suivant (Bien sûr, cette “adresse”
est à utiliser sur un ordinateur lui-même connecté à la *box.) :
— 192.168.0.1
— 192.168.1.1
— 192.168.1.254
— Pour une freebox, cela se passe sur la page de gestion de votre
compte.
Il est possible qu’un nom d’utilisateur et un mot de passe soient
demandés. Essayez dans ce cas admin/admin, sinon, demandez directement à votre fournisseur d’accès à internet. Une fois connecté, allez
dans la section ”Configurer mon routeur”.
Pour plus d’informations, cette page peut vous être utile :
https://craym.eu/tutoriels/utilitaires/ouvrir les ports de sa box.html.
19.6
Notes et astuces diverses
19.6.1
Que faire en cas de problème ?
Un service ne veut plus démarrer ? Votre site web n’est plus accessible ? Voici quelques astuces :
— Un service ne démarre plus : vous pouvez lancer ce service manuellement et voir les messages d’erreurs qu’il retourne. Par
exemple, avec httpd, vous pouvez saisir cette commande pour
avoir plus d’informations : rcctl -d start httpd.
— Aller voir dans le dossier /usr/local/share/doc/pkg-readmes
s’il y a des précisions sur le programme posant problème.
183
19.6
Notes et astuces diverses
— Consultez les journaux du système avec la commande tail :
1
# tail -f / var / log / messages / var / log / daemon
Pour un site web :
1
# tail -f / var / www / logs /*
Pour un problème d’identification :
1
# tail -f / var / log / authlog
— Lancez la commande dmesg qui peut vous donner une information sur un périphérique.
— Si c’est le pare-feu qui pose problème, vous pouvez analyser le
trafic avec tcpdump : tcpdump -n -e -ttt -i pflog0.
— Bien sûr, lire le man de la commande problématique.
— Demander de l’aide sur la liste de diffusion.
— Demander de l’aide sur le forum OBSD4* : http://obsd4a.net/qa/.
19.6.2
Quelles permissions donner aux fichiers d’un site ?
Une méthode simple et pourtant redoutable pour sécuriser son site
web consiste à modifier les droits et le propriétaire des fichiers dudit
site. Voici quelques explications succinctes sur le sujet.
Afin de connaı̂tre la situation des fichiers, vous pouvez utiliser la
commande ls -l. Dans la suite, on utilisera l’exemple ci-dessous :
1
$ ls -l
2
total 120
3
-rw -r - -r - -
4
-rw -r - -r - -
1 www
daemon
18092 May
5 17:09 \
1 www
daemon
306 May
5 17:09 \
1 www
daemon
23 May
5 17:09 \
2 www
daemon
512 May
COPYING
README
5
-rw -r - -r - VERSION
6
drwxr - xr - x
184
5 17:10 bin
19.6
Notes et astuces diverses
7
drwxr - xr - x
2 www
daemon
1024 May
5 17:10 conf
8
drwxr - xr - x
12 www
daemon
512 May
5 17:10 data
9
-rw -r - -r - -
1 www
daemon
3674 May
5 17:09 doku .\
1 www
daemon
19372 May
5 17:09 feed .\
php
10
-rw -r - -r - -
11
drwxr - xr - x
6 www
daemon
1536 May
12
-rw -r - -r - -
1 www
daemon
182 May
5 17:09 index\
php
5 17:10 inc
. php
13
drwxr - xr - x
8 www
daemon
512 May
5 17:10 lib
14
drwxr - xr - x
5 www
daemon
512 May
5 17:10 \
vendor
On observe une ligne par fichier/dossier. Chaque ligne est découpée
de cette façon :
1
< permissions > < inode > < proprietaire > < groupe > <\
taille > < date dernier acces > < nom du ficher >
Propriétaire et groupe
Chaque fichier appartient à un propriétaire et fait partie d’un
groupe. Cela nous permettra de donner certaines permissions aux propriétaires, qui ne seront pas forcément les mêmes que celles données
au membre du groupe.
Pour modifier le propriétaire et le groupe, on utilise la commande
chown (change owner ).
1
# chown < proprietaire >: < groupe > nom_du_fichier
Les permissions
Les lettres en début de ligne décrivent les permissions accordées
au fichier. Nous pouvons retenir deux choses :
185
19.6
Notes et astuces diverses
1. Si le premier caractère est un d, alors il s’agit d’un répertoire.
Sinon, c’est un fichier (sauf exceptions).
2. Les caractères restants se lisent 3 par 3. Chaque ”trio” décrit respectivement les permissions pour le propriétaire, pour le groupe
puis pour tous les autres.
Par exemple, pour cette ligne :
1
drwxr - xr - x
2 www
daemon
512 May
5 17:10 \
bin
On voit qu’il s’agit d’un répertoire. Ensuite :
— rwx : Le propriétaire www peut :
— Le lire : r
— Écrire à l’intérieur : w
— L’exécuter (se déplacer dedans pour un répertoire) : x
— r-x : Ceux appartenant au groupe daemon peuvent
— Le lire : r
— L’exécuter (se déplacer dedans) : x
— r-x : Tous les autres peuvent :
— Le lire : r
— L’exécuter (se déplacer dedans) : x
En règle générale, il faut éviter autant que possible de donner les
droits d’écriture et d’exécution à d’autres personnes que le serveur
web. Parfois, on retire aussi les droits de lecture sur certains fichiers
(mots de passe...).
Pour changer les droits, il existe plusieurs méthodes. Certains utilisent une série de chiffres, comme par exemple chmod 700. Je trouve
cette façon peu claire pour un débutant. Quitte à devoir taper quelques
commandes en plus, préférez utiliser chmod <personne>< + ou ><permission> où :
— <personne> peut décrire l’utilisateur (u), le groupe (g), les
autres (o) ou tous à la fois (a).
186
19.6
Notes et astuces diverses
— + ou - pour respectivement ajouter ou retirer les permissions à
la personne choisie précédemment
— <permission> qui peut être x,r ou w.
Vous prendrez bien quelques exemples ?
— chmod g+r fichier : accorde le droit de lecture aux membres
du groupe.
— chmod o-w fichier : retire aux personnes qui ne sont pas membres
du groupe ni propriétaires le droit d’écrire dans le fichier.
— chmod og-rwx fichier : retire aux membres du groupe et aux
autres utilisateurs les droits de lecture, d’écriture et d’exécution
sur le fichier.
Ces modifications peuvent être appliquées récursivement (à tous
les sous-documents d’un dossier) avec l’option -R.
Astuce : pour autoriser à se déplacer dans les dossiers, sans rendre
exécutables les fichiers, utilisez X au lieu de x.
19.6.3
Générer des mots de passe aléatoires
Faire des pieds et des mains pour sécuriser son système ne sert à
rien si on choisit des mots de passe de 5 lettres. En effet, pour les mots
de passe, il n’y a qu’une chose à retenir : ”Plus c’est long, plus c’est
bon !”.
Ce n’est qu’une question de mathématique : un pirate va tenter
toutes les combinaisons possibles de mots de passe. Pour l’exemple,
imaginons qu’il y ait 26 caractères possibles (on simplifie en oubliant
les chiffres, les majuscules et les caractères spéciaux).
— Pour un mot de passe d’une lettre, ça fait 26 combinaisons à
tenter.
— Pour un mot de passe de deux lettres, ça en fait 26 × 26 soit
676.
— Pour un mot de passe de 6 lettres, ça en fait 26 × 26 × 26 × 26 ×
26 × 26 soit 308915776.
Jusque là, un ordinateur finit par trouver le bon mot de passe par
187
19.6
Notes et astuces diverses
essais successifs en quelques secondes voire quelques minutes. Mais si
on allonge encore un peu le mot de passe :
— 10 lettres : 141167095653376 possibilités
— 13 lettres : 2481152873203736600 possibilités
Ça commence à faire beaucoup ! Ajoutez les majuscules et les
chiffres, on passe de 26 à 62 possibilités par caractères. Cela donne un
peu plus de 800 000 000 000 000 000 combinaisons possibles pour
un mot de passe de 10 caractères ! Finalement, il faut tellement de
temps pour tenter toutes les possibilités que cela n’arrive jamais. Et
qui plus est, vous aurez certainement ajouté des règles anti-bruteforce
dans votre parefeu 126 .
Oubliez donc les histoires de symboles spéciaux à inclure absolument, ce n’est pas utile de torturer vos méninges.
Quelques idées :
— Transformez une phrase en mot de passe. Par exemple, Respirer
de la compote fait tousser devient
Respirerdelacompotefaittousser.
— Transformez quelques lettres d’une phrase. Par exemple Ceci
est un long mot de passe devient :
C3ci est un long mot d3 pass3.
Ou alors, si vous aimez avoir mal à la tête, vous pouvez utiliser une
des commandes suivantes pour générer des mots de passe aléatoires
(Remplacez le ”15” par le nombre de caractères souhaités) :
1
$ openssl rand 15 - base64
ou plus classique :
1
$ dd if =/ dev / urandom count =128 bs =1 M 2 >&1 | md5 | \
cut -b -15
126. → Voir page 23.
188
19.6
Notes et astuces diverses
19.6.4
Utiliser les portages de logiciels d’OpenBSD
Vous le savez déjà, OpenBSD dispose de nombreux paquets vérifiés
avec soin. Cependant, c’est impossible pour les développeurs d’examiner tous les programmes pouvant être installés. Vous pourrez alors
installer un programme ne figurant pas dans les paquets grâce au
système de ports.
Il s’agit d’un arbre contenant toutes les instructions pour compiler
et installer vous même les paquets. Pas de panique, vous aurez besoin
uniquement de la commande make. En effet, le nécessaire pour compiler un paquet, les petites modifications au code source apportées par
les développeurs d’OpenBSD et un tas d’autres détails sont précisés
dans les ports, si bien que vous n’avez pas à vous en préoccuper.
Nous supposons par la suite que vous utilisez OpenBSD en branche
-stable 127 . Vous disposerez ainsi des correctifs de sécurité pour les
programmes dans le cas d’une éventuelle faille.
Voici la marche à suivre :
1. On récupère les ports. Pour cela, on se déplace dans le dossier
/usr puis on lance la commande suivante :
1
# cvs - qd anoncvs@anoncvs . ca . openbsd . org :/ cvs \
get - rOPENBSD_6_0 -P ports
Si vous aviez déjà récupéré les ports, vérifiez qu’il n’y a pas eu
de changements avec la commande :
1
# cd / usr / ports && cvs -q up - rOPENBSD_6_0 - Pd
2. Cherchez le paquet qui vous intéresse. Par exemple, pour compiler php7.0, je vais chercher où se trouve son port en utilisant
la commande make search key=ma recherche dans le dossier
/usr/ports. Puisqu’il risque d’y avoir beaucoup de résultats, on
filtre avec la commande grep pour ne voir que ce qui contient
7.0
127. → Voir page 50.
189
19.6
Notes et astuces diverses
1
# cd / usr / ports
2
# make search key = php | grep 7.0
On constate alors que le port se trouve dans le dossier (on le
repère avec le mot Path) /usr/ports/lang/php/7.0.
3. Afin de compiler et installer ce port, il ne reste plus qu’à taper
make install dans ce dossier :
1
# cd / usr / ports / lang / php /7.0
2
# make install
Toutes les dépendances sont alors récupérées et installées sous
forme de paquets que vous pourrez modifier plus tard avec pkg .
Afin d’installer tous les ”sous-paquets”, c’est-à-dire les extensions de PHP (php-curl, php-gd...), on lance :
1
# make install - all
Pour installer les dépendances à partir des paquets déjà compilés
s’il sont disponibles, ajoutez dans le fichier /etc/mk.conf la ligne
suivante :
1
FETCH_PACKAGES = yes
Ça peut faire gagner un peu de temps.
19.6.5
Équivalences de commandes avec debian
Voici quelques équivalences de commandes avec debian :
Debian
OpenBSD
apt-get upgrade
pkg add -u
apt-get autoremove
pkg delete -a
apt-cache search
pkg info -Q
apt-cache show
pkg info
190
19.6
Notes et astuces diverses
19.6.6
Comment modifier un fichier ?
Il existe une ribambelle d’éditeurs de texte (vim, nano...). L’éditeur
par défaut sur OpenBSD est vi. Il peut être étonnant à utiliser au
premier abord, vous voudrez peut-être installer à la place nano.
Voici quelques conseils pour utiliser vi au travers d’un exemple.
Pour éditer 128 le fichier /etc/iloverocknroll, vous saisirez ceci :
1
$ vi / etc / iloverocknroll
Apparaı̂tra alors le contenu de ce fichier dans le terminal :
Pour pouvoir écrire et modifier le fichier, appuyez sur la touche i.
Vous voilà en mode édition, vous pouvez écrire tout ce que vous
voulez. Afin de quitter le mode édition, appuyez sur la touche échap.
Pour enregistrer les modifications, appuyez sur : puis sur w. Validez avec entrée. On peut maintenant quitter en écrivant :q. Notez
que vous pouvez aller plus vite en saisissant directement :wq.
Afin de chercher un texte, ce qui est bien utile dans les gros fichiers,
appuyez sur la touche / puis écrivez votre recherche.
Si vous souhaitez quitter sans enregistrer vos modifications, saisissez alors :q!.
Cela devrait être suffisant dans un premier temps. Si le fonctionnement de vi vous intéresse, vous pouvez consulter cette documentation :
http://wiki.linux-france.org/wiki/Utilisation de vi.
128. → Voir page 190.
191
19.6
Notes et astuces diverses
19.6.7
Gestion des services sous Openbsd
Afin d’activer/désactiver des services (qu’on appelle ”démons” car
ils tournent en arrière-plan), la commande rcctl est prévue à cet
effet. Tous les services disponibles sont dans le dossier /etc/rc.d.
Voici quelques rappels :
— Activer un service au démarrage de la machine : rcctl enable
service
— Démarrer un service : rcctl start service
— Arrêter un service : rcctl stop service
— Relancer un service : rcctl restart service
— Recharger un service : rcctl reload service
— Modifier les options d’un service : rcctl set service flags
"-v -autre option"
Si vous préférez la méthode manuelle, alors il vous est possible
d’éditer 129 directement le fichier /etc/rc.conf.local qui gère les
services lancés au démarrage.
19.6.8
Comment changer le mot de passe ?
Vous pouvez changer le mot de passe de n’importe quel utilisateur
avec la commande passwd. Exemple :
1
# passwd cocolasticot
Pour changer le mot de passe du superutilisateur, c’est un peu plus
difficile. On pourrait se contenter d’un passwd root, mais veillez à ce
que le message indique bien que le changement est pour l’utilisateur
“root‘, ce n’est pas forcément le cas selon la façon dont vous êtes
passés superutilisateur.
Sinon, il faut redémarrer la machine, et lorsque vous voyez le terminal de démarrage (prompt boot), démarrez en mode ”single user” :
1
boot > boot -s
129. → Voir page 190.
192
19.7
FAQ : Foire aux questions
Vous verrez un message comme :
1
Enter pathname of shell or RETURN for sh :
Appuyez sur ENTREE, puis les commandes suivantes afin de monter le système de fichiers
1
# mount - uw /
2
# mount / usr
Enfin, changez le mot de passe puis redémarrez normalement :
1
# passwd
2
# reboot
19.7
FAQ : Foire aux questions
— Je dispose d’un vieil ordinateur. Je pense que l’alimentation
n’est pas adaptée pour rester allumée 24 h/24, 7 j/7, non ?
Pour la consommation, regarde ce qui est écrit sur l’alimentation. La puissance en watt te donnera une idée de la consommation engendrée. En général, une puissance de 1W, c’est environ
1 euro/an d’électricité.
— Est-ce qu’une bête *Box (Freebox) suffit pour assurer convenablement un tel service sur la durée ?
Oui !
— C’est quoi un sous-domaine ?
Réponse rapide : un domaine c’est superdomaine.net. Un
sous-domaine c’est sousdomaine.superdomaine.net.
Réponse longue : Le domaine principal est enregistré chez
votre registre par un champ A pointant vers l’adresse IP de votre
serveur. Ensuite, vous pouvez ajouter autant de sous-domaines
que vous voulez en créant dans les DNS des champs de type
CNAME, qui renvoient vers le champ A précédent. En gros, les
193
19.7
FAQ : Foire aux questions
visiteurs sont toujours dirigés vers votre serveur, mais selon le
domaine/sous-domaine tapé dans la barre d’adresse, votre serveur leur fournit un contenu différent.
Un champ CNAME se présente donc sous cette forme :
1
sousdomaine
IN CNAME
domaine . net .
Le point final est important !
— Il paraı̂t que pour un serveur, on peut utiliser un vieux PC. Mais
quelle taille de disque dur est nécessaire au minimum ?
Ça dépend. La réponse ne sera pas la même selon ce que vous
voulez faire du serveur. Pour un petit site web, quelques Go
suffiront amplement.
Si c’est un site contenant images et vidéos à gogo, alors il faudra
un espace plus conséquent.
Si votre serveur fait office de seedbox ou de mediacenter, alors
il faut compter encore plus.
Dans la majorité des cas, 10G à 20G seront suffisants.
— Et pour le processeur, quelle puissance au moins ?
Là aussi, ça dépend. Pour un simple site avec quelques visites
par jour, peu de puissance est nécessaire.
S’il y a du PHP, il faut alors une puissance un peu plus élevée.
Enfin, si le serveur propose de la messagerie instantanée, un site
avec PHP, des mails... Vous l’aurez compris, il faudra encore une
puissance plus grande.
Il en va de même pour la mémoire vive d’ailleurs.
— Admettons que mon site soit sur http://serveur-à-moi , comment est-il visible sur internet par d’autres personnes ?
Lorsque quelqu’un tape l’adresse de votre site dans son navigateur, c’est traduit en une série de chiffres qui permet de retrouver
votre serveur. Il s’agit du fonctionnement des DNS, expliqué au
paragraphe consacré 130 .
130. → Voir page 180.
194
19.7
FAQ : Foire aux questions
— Mon fournisseur d’accès ne me donne pas une adresse IP fixe.
C’est effectivement embêtant. Car dans ce cas, l’adresse IP associée à votre domaine ”machintruc.com” doit régulièrement
être mise à jour.
Sachez qu’il existe pour ça DynDNS. C’est un service qui permet
de réaliser cette opération, et la plupart des *box ont une option
pour le configurer.
Cela peut toutefois être fastidieux, et vous préférerez peut-être
changer de fournisseur d’accès. FDN par exemple ?
— Où trouver des applications pour mon serveur ?
Le site WAAH, Wiki des Applications Auto-Hébergées recense
de nombreuses applications que l’on peut héberger sur son serveur. Il en existe sûrement d’autres, mais celui-ci est particulièrement complet.
Il existe aussi alternative.to qui recense quelques projets.
— Comment devenir superutilisateur (root) ?
Tapez su — Quand on héberge ses mails, que se passe t’il quand le serveur
de mail est, pour une raison quelconque, inaccessible ?
Voilà une question qu’on se pose forcément à un moment donné.
Lorsque le serveur est inaccessible, il se passe à peu près la même
chose que lorsque le facteur doit délivrer un recommandé : le serveur expéditeur essaie une première fois et échoue. Il va repasser
une fois suivante un peu plus tard. En cas de second échec, il
réessaie à nouveau plus tard.
Bien évidemment, après plusieurs échecs, il abandonne.
Vous devez vous demander combien d’essais et quels intervalles
entre chaque essais ? À cela je n’ai pas de réponse précise, car
ça dépend de la configuration du serveur expéditeur. On peut
toutefois raisonnablement considérer que les essais peuvent se
poursuivre pendant une dizaine de jours.
195
19.8
Merci !
— Comment éviter ce problème de serveur inaccessible ?
Plusieurs astuces sont possibles :
— Solution facile : utiliser un onduleur. C’est une sorte de batterie
de secours en cas de coupure de courant. On y branche dessus
le routeur qui donne accès à internet et le serveur. Mais bon,
puisque les mails sont ré-envoyés en cas de pépin, ce n’est pas
très utile.
— Avoir un copain qui héberge un enregistrement MX de secours
correspondant à celui de ton serveur. Il ”stockera” tes mails en
attendant que tu redeviennes accessible. À nouveau, ça reste
inutile pour des courtes coupures de courant.
Dans le cas où l’interruption du serveur est due à un bug quelconque, sachez que tous les jours, OpenBSD génère un rapport de
sécurité qui peut dire : ”ce service devrait être en route mais ne l’est
pas”. Ainsi, vous pouvez aller vérifier assez rapidement quel est le
problème.
En somme, pas de quoi s’alarmer outre mesure.
19.8
Merci !
Ce document ne s’est pas fait tout seul. Au risque d’en oublier,
je tiens à remercier Starsheep pour la quatrième de couverture et son
enthousiasme ainsi qu’arpinux pour son amitié, sa confiance et son
soutient sans failles.
Je tiens aussi à remercier Stéphane qui m’a beaucoup aidé dans
ma découverte d’OpenBSD, ainsi que Fred Galusik, PengouinPdt et
kuniyoshi qui m’ont accompagnés et m’accompagnent encore dans
l’aventure d’ obsd4*.
Merci à tous les contributeurs qui m’ont aidé à financer la publication de ce livre, en particulier Trefix et kuniyoshi, mais aussi
jeau-2, laloke, alexbat, arndriel, sync, lotr, pfercour, reme-2, nellsounds, ddaugareil bart-26, throlen, ducobu89, javascript, saintraph,
196
19.9
Exemples et fichiers
maxc62, alainbaudier, atbd, phil s comete-7, thy-4, gillaume, mencattini, tomazinio, greazi, goujonjean, Florestan Fournier, monsieurnicolas, mmeinert, cedprad, piebriola, nicolas3, mignotjm, harlie, goerfra, pep1 gbabinfr, michel-106, sganarel69, doublefracture, hadrienv2, mathias44wolff, lpox eparthuisot, monge08, palm123, nhix, chdorb,
alkeo, ggr, iterreros, xuoro, matheus974 ygster, linuxmario, fredgalusik, the big lebowski, anopenbsd, jfch , ecnerrolf, hucste nicolas51,
tiubuk, nicolassimond, bendia-2, arnaudsenet, starsheep-2, ayl-a, roelandtn bricabraco, fredbezies, pafzedog, rico00 et arpinux.
Merci à Goofy, saintraph et arpinux pour la relecture.
Merci Péhä pour tes encouragements et tes conseils afin d’illustrer
ce livre, ainsi que pour le super dessin à la fin du livre (sous licence
CC-BY-SA).
Un coucou tout spécial à mon ami JB.
Et puisque j’aime garder le meilleur pour la fin, un merci tout
spécial pour ma maı̂tresse favorite qui est toujours à mes côtés malgré
l’odeur de café répandue par un vilain barbu tapotant sur un clavier
à l’heure de la sieste.
19.9
19.9.1
1
Exemples et fichiers
/etc/pf.conf
# See pf . conf (5) and / etc / examples / pf . conf
2
3
## Configuration generale ##
4
# voir / etc / services pour les noms des ports
5
ext_if = " re0 "
6
tun_if = " tun0 "
7
ssh_port = "222"
8
http_ports = "{ www https }"
9
10
# interface
# vpn
# port ssh
# ports http ( s )
mail_ports = "{ submission imaps }"
# ports mails
tcp_pass = "{ 8888 domain ipp }"
# ports tcp \
ouverts
197
19.9
11
Exemples et fichiers
# ports udp \
udp_pass = "{ 1195 ipp }"
ouverts
12
set block - policy drop
# bloque silencieusement
13
set skip on lo
# Pas de filtre en local
14
set limit table - entries 400000
15
16
## tables pour les vilains bruteforceurs
17
table < ssh_abuse > persist
18
table < http_abuse > persist
19
table < mail_abuse > persist
20
21
# antispam avec greylisting
22
table < spamd - white > persist
23
table < nospamd > persist file "/ etc / mail / nospamd "
24
table <bgp - spamd - bypass > persist
25
26
## Traitement des paquets ##
27
# Paquets partiels ou invalides
28
match in all scrub ( max - mss 1440 no - df random - id \
29
block in quick from urpf - failed
30
# antispoof quick for $ext_if # idem
reassemble tcp )
# Protection pour \
le vol d ’ ip
31
32
## Les regles du pare - feu ##
33
# on bloque tout par defaut
34
block
35
36
# on bloque les ip blacklistees
37
block in log quick proto tcp from < http_abuse >
38
block in log quick proto tcp from < ssh_abuse >
39
block in log quick proto tcp from < mail_abuse >
40
41
# antispam
42
pass in on $ext_if proto tcp from any to any port \
198
19.9
Exemples et fichiers
smtp \
43
divert - to 127.0.0.1 port spamd
44
pass in on $ext_if proto tcp from < nospamd > to any \
45
pass in log on $ext_if proto tcp from < spamd - white > \
46
pass in log quick on $ext_if proto tcp from <bgp -\
port smtp
to any port smtp
spamd - bypass > to any port smtp
47
48
# anti bruteforce
49
# Si + de 3 connections toutes les 60 secondes sur \
le port ssh
50
# on ajoute l ’ ip pour la bloquer .
51
pass in on $ext_if proto tcp to any port $ssh_port \
flags S / SA modulate state \
52
( max - src - conn - rate 3/60 , overload < ssh_abuse > \
flush global )
53
54
# Si + de 40 connections toutes les 5 secondes sur \
55
# ou si elle essaie de se connecter + de 100 fois
56
# on ajoute l ’ ip pour la bloquer .
57
pass in on $ext_if proto tcp to any port $http_ports\
les ports http ( s )
flags S / SA modulate state \
58
( max - src - conn 100 , max - src - conn - rate 40/5 , \
overload < http_abuse > flush )
59
60
# Protection bruteforce pour les mails
61
pass in on $ext_if proto tcp to any port $mail_ports\
flags S / SA modulate state \
62
( max - src - conn - rate 5/60 , overload < mail_abuse > \
flush global )
63
64
# on ouvre les autres ports
65
pass in quick on $ext_if proto tcp to any port \
199
19.9
Exemples et fichiers
$tcp_pass modulate state
66
pass in quick on $ext_if proto udp to any port \
$udp_pass modulate state
67
68
# on laisse entrer les mails
69
pass in log quick on $ext_if proto tcp from any to \
any port smtp
70
71
# on autorise le ping
72
pass quick inet6 proto ipv6 - icmp all icmp6 - type { \
73
pass quick inet proto icmp all icmp - type { echoreq , \
echoreq , unreach , timex , paramprob }
unreach }
74
75
# vpn
76
pass in quick on $tun_if modulate state
77
pass out on $ext_if from 10.8.0.0/24 to any nat - to (\
$ext_if )
78
79
# tout ouvert en sortie
80
pass out on $ext_if proto { tcp udp icmp } all \
modulate state
19.9.2
1
/etc/httpd.conf
server " default " {
2
listen on * port 80
3
root "/ htdocs / votreserveur . net "
4
}
5
6
types { include "/ usr / share / misc / mime . types " }
7
8
9
10
server " votreserveur . net " {
listen on * port 80
block return 301 " https ://\
$ S E R V E R _N A M E $R E Q U ES T _ U RI "
200
19.9
11
Exemples et fichiers
}
12
13
server " votreserveur . net " {
14
alias " www . votreserveur . net "
15
listen on * tls port 443
16
root "/ htdocs / votreserveur . net "
17
directory index index . html
18
log style combined
19
20
hsts
tls {
21
certificate "/ etc / ssl / acme /\
22
votredomaine - fullchain .\
com . pem "
key
23
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
}
24
25
26
location "/ Blog /" {
directory index index . php
27
28
}
29
30
location "*. php *" {
fastcgi socket "/ run / php - fpm . sock "
31
32
}
33
34
location "/ DL / PDF /" {
directory auto index
35
36
}
37
38
location "/ educ /" {
39
authenticate " education " with "/ htdocs /\
40
directory auto index
educ . htpw "
201
19.9
}
41
42
Exemples et fichiers
}
43
44
server " site2 . votreserveur . net " {
45
alias " www . site2 . votreserveur . net "
46
listen on * port 80
47
listen on * tls port 443
48
root "/ htdocs / site2 "
49
directory index index . html
50
log access " site2 . log "
51
hsts
52
tls {
53
certificate "/ etc / ssl / acme /\
54
votredomaine - fullchain .\
com . pem "
key
55
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
}
56
57
location "*. php *" {
58
fastcgi socket "/ run / php - fpm . sock "
59
60
}
61
location "/ downloads /" {
directory index index . php
62
}
63
64
}
65
66
server " autresite . votreserveur . net " {
67
listen on * port 80
68
root "/ htdocs / autresite "
69
directory index index . html
log access " mateteestmalade . log "
70
71
}
202
19.9
Exemples et fichiers
72
73
server " deb . votreserveur . net " {
74
listen on * port 80
75
root "/ htdocs / deb "
76
directory auto index
no log
77
78
}
79
80
server " webmail . votreserveur . net " {
81
listen on * port 80
82
block return 301 " https ://\
$ S ER V E R _N A M E $R E Q U ES T _ UR I "
no log
83
84
}
85
86
server " webmail . votreserveur . net " {
87
listen on * tls port 443
88
root "/ roundcubemail "
89
directory index index . php
90
no log
91
92
hsts
tls {
93
certificate "/ etc / ssl / acme /\
94
votredomaine - fullchain .\
com . pem "
key
95
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
}
96
97
98
location "*. php *" {
fastcgi socket "/ run / php - fpm . sock "
99
100
}
101
# Deny Protected directories
203
19.9
Exemples et fichiers
102
location "/ config " { block }
103
location "/ logs " { block }
104
location "/ logs " { block }
105
location "/ README " { block }
106
location "/ INSTALL " { block }
107
location "/ LICENSE " { block }
108
location "/ CHANGELOG " { block }
109
location "/ UPGRADING " { block }
110
location "/ bin " { block }
111
location "/ SQL " { block }
112
location "/ db " { block }
113
location "*. md " { block }
114
location "\.*" { block }
115
116
}
117
118
server " wiki . votreserveur . net " {
119
listen on * port 80
120
listen on * tls port 443
121
root "/ htdocs / dokuwiki "
122
directory index doku . php
123
no log
124
125
126
hsts
tls {
certificate "/ etc / ssl / acme /\
127
votredomaine - fullchain .\
com . pem "
key
128
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
129
}
130
131
132
location "*. php *" {
fastcgi socket "/ run / php - fpm . sock "
204
19.9
Exemples et fichiers
}
133
134
135
location "/ data *"
136
location "/ conf *"
137
location "/ bin *"
{ block }
location "/ inc *"
{ block }
138
139
{ block }
{ block }
}
140
141
server " cloud . votreserveur . net " {
142
listen on * port 80
143
block return 301 " https ://\
$ S ER V E R _N A M E $R E Q U ES T _ UR I "
log access " owncloud . log "
144
145
}
146
147
server " cloud . votreserveur . net " {
148
listen on * tls port 443
149
root "/ htdocs / owncloud "
150
directory index index . php
151
hsts
152
tls {
certificate "/ etc / ssl / acme /\
153
votredomaine - fullchain .\
com . pem "
key
154
"/ etc / ssl / acme /\
private / votredomaine -\
privkey . com . pem "
155
}
156
log access " owncloud . log "
157
log error " owncloud . log "
158
159
# Set max upload size to 513 M ( in bytes )
160
connection max request body 537919488
161
162
# First deny access to the specified files
205
19.9
Exemples et fichiers
163
location "/ db_structure . xml " { block }
164
location "/. ht *"
{ block }
165
location "/ README "
{ block }
166
location "*/ data *"
{ block }
167
location "*/ config *"
{ block }
168
169
# Any other PHP file
170
location "/*. php *" {
fastcgi socket "/ run / php - fpm . sock "
171
}
172
173
}
19.9.3
1
/etc/mail/smtpd.conf
table aliases file :/ etc / mail / aliases
2
3
pki votreserveur . net key "/ etc / ssl / private / mail .\
votreserveur . net . key "
4
pki votreserveur . net certificate "/ etc / ssl / certs /\
mail . votreserveur . net . crt "
5
6
## RECEPTION ##
7
# Messages avec signature DKIM
8
listen on lo0 port 10028 tag DKIM
9
# Messages verifies par spamassassin
10
listen on lo0 port 10026 tag NOSPAM
11
# Messages locaux
12
listen on lo0
13
14
## ENVOI ##
15
# Pour utiliser un client mail
16
listen on re0 port smtp hostname votreserveur . net \
tls pki votreserveur . net
17
listen on re0 port submission hostname votreserveur .\
net tls - require pki votreserveur . net auth
18
206
19.9
Exemples et fichiers
19
## RECEPTION ##
20
# Message venant du èsystme
21
accept from local for local alias < aliases > deliver \
22
# Message NOSPAM
23
accept tagged NOSPAM for domain " votreserveur . net " \
to maildir "~/ Maildir "
deliver to maildir "~/ Maildir "
24
# Message venant d ’ ailleurs , on scanne avec \
spamassassin
25
accept from any for domain " votreserveur . net " relay \
via smtp ://127.0.0.1:10025
26
27
## ENVOI ##
28
# Mail sortant portant une signature DKIM
29
accept tagged DKIM for any relay
30
31
# Mail en envoi pas encore signe avec DKIM
32
accept from local for any relay via smtp\
: //1 27.0.0.1:10027
19.9.4
/etc/relayd.conf
1
prefork 5
2
table < local > { 127.0.0.1 }
3
ext_ip = 192.168.1.66
4
5
http protocol " http " {
6
tcp { nodelay , sack , socket buffer 65536 , \
7
match response header set " Cache - Control " value \
8
match request header remove " Proxy "
9
match response header set " Frame - Options " value \
backlog 100 }
" max - age =1814400"
" SAMEORIGIN "
10
match response header set "X - Frame - Options " \
value " SAMEORIGIN "
207
19.9
Exemples et fichiers
match response header set "X - Xss - Protection " \
11
value "1; mode = block "
12
return error
13
pass
14
}
15
relay " www " {
listen on $ext_ip port 80
16
17
protocol " http "
18
forward to < local > port 8080 check tcp
19
}
20
21
http protocol " https " {
tcp { nodelay , sack , socket buffer 65536 , \
22
backlog 100 }
match response header set " Cache - Control " value \
23
" max - age =1814400"
24
match request header remove " Proxy "
25
match response header set " Frame - Options " value \
" SAMEORIGIN "
match response header set "X - Frame - Options " \
26
value " SAMEORIGIN "
match response header set "X - Xss - Protection " \
27
value "1; mode = block "
28
return error
29
pass
30
tls { no client - renegotiation , cipher - server -\
preference }
31
}
32
33
# put vertificate in / etc / ssl / private / $ext_ip . key
34
# put vertificate in / etc / ssl / $ext_ip . crt
35
# ln -s / etc / letsencrypt / live / yeuxdelibad . net /\
privkey . pem / etc / ssl / private /192.168.1.66. key
36
# chmod 600 / etc / ssl / private /*. key
37
# ln -s / etc / letsencrypt / live / yeuxdelibad . net /\
208
19.9
Exemples et fichiers
fullchain . pem / etc / ssl /192.168.1.66. crt
38
39
40
relay " tlsforward " {
listen on $ext_ip port 443 tls
41
42
protocol " https "
43
forward to < local > port 8443 mode loadbalance \
check tcp
44
}
209
20
?
Un
po
pe
ur
u
n
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o. t. . . . . .p. . . . . d. . . . . . .
ren ’es
es
p
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .e.t. g. . . . d. r.e. . . . .ac. e.
rib
d
o
e
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .u.il.l . . . s. . .
er.
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
210
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
....................................................................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
211