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 :
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 à cette adresse : http://git.yeuxdelibad.net/auto-hebergement_openbsd_facile_securise.
Si vous souhaitez une version papier, vous pouvez en profiter pour encourager l'auteur en achetant une version imprimée :
Sinon, le code css de la page a été optimisé pour l'impression. Utilisez un navigateur récent comme firefox pour en profiter.
Ce document est libre, tout comme son prix. Vos dons sont donc les bienvenus. Vous pouvez si vous le souhaitez utiliser le service Liberapay qui ne prend aucune commission :
Pour contacter l'auteur, l'encourager, lui jeter des cailloux ou lui dire merci, c'est par ici : https://yeuxdelibad.net/Divers/Contact.html.
J'avais déjà écrit un document parlant d'auto-hébergement. Cependant, je me suis aperçu qu'il n'était pas aussi clair et facile d'accès que ce que j'aurais souhaité. Autant recommencer le travail sur des bases encore plus solides : le système OpenBSD. Ce dernier est réputé pour être le plus sûr (rien que ça!). Qui plus est, il est aussi nettement plus simple à configurer. 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é, vous n'êtes pas à l'abri d'un "piratage". Pas de panique, nous verrons quelques éléments de rigueur pour configurer votre serveur dans ce sens. Cela suppose notamment que vous serez particulièrement attentif aux mots de passes (phrases de passes) attribués, aux applications installées...
Je vais donc tenter de présenter dans ce document la configuration d'un serveur de façon la plus simple possible 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 la rigueur de 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.
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, pour peu que l'on dispose d'un peu de patience.
Bonne lecture!
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 de 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 et vous donner votre courrier. 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 confère un certain pouvoir à ces sociétés qui façonnent l'internet selon leurs souhaits, 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?
De plus, si l'un de ces fournisseurs tombe en panne, c'est tout une partie de l'internet qui est inaccessible au 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 :
Cependant, cette démarche n'est pas sans inconvénients :
Dans la suite du document, on supposera que :
Voici quelques notes rapides sur l'installation d'OpenBSD. En cas de besoin, lisez le guide d'installation officiel.
dd
. Par exemple,
sur une machine utilisant linux :
dd if=installXX.fs of=/dev/sdbX
/var
qui contiendra
votre site web, et les logs (journaux des services).
/etc/pkg.conf
puis
mettez-y :
installpath = http://ftp.fr.openbsd.org/pub/OpenBSD/%v/packages/%a/
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.
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 5.9. Une liste de miroirs est disponible ici : http://www.openbsd.org/ftp.html.
dd
(remplacez /dev/sdb
par le chemin
vers votre clé USB):
# dd if=/location/install*.fs of=/dev/sdb bs=1M
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 booter sur le bon media. 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 :
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é.
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.
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 :
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:
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 é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.
Quelques points à garder en tête :
/var
. Songez à lui attribuer une
place suffisante.
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 optimisé pour les systèmes multi-processeurs et bsd.rd
peut être
pratique pour les mises à jour puisqu'il est chargé en mémoire.
Pour ajouter un
set, tapez simplement son nom, par exemple games59.tgz
. Pour retirer un set,
tapez son nom précédé du signe moins : -games58.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
Et voilà, l'installation est terminée, on peut redémarrer en tapant "reboot".
Quoi? Déjà le parefeu?
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 : parefeu!
Sur OpenBSD, le parefeu 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 parefeu de 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'ouvriront pas les mêmes ports. En effet, pour assurer un maximum de sécurité, on ne va rien laisser passer sauf ce que l'on a réellement besoin. 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. 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 :
tcp_pass = "{ 80 443 }" block all pass out quick on re0 proto tcp to any port $tcp_pass keep state pass in quick on re0 proto tcp to any port $tcp_pass keep state
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 :
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
.
Pf dispose d'une autre fonctionnalité très intéressante : les "tables". Ç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 :
ssh_port = "22" table <ssh_abuse> persist block in log quick proto tcp from <ssh_abuse> to any port $ssh_port pass in on $ext_if proto tcp to any port $ssh_port flags S/SA keep state \ (max-src-conn-rate 3/60, overload <ssh_abuse> flush global)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.
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 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.
Un dernier mot avant de terminer cette partie. Enfin plutôt
quelques commandes bien pratiques :
pfctl -d
.
# pfctl -ef /etc/pf.conf
# pfctl -d && pfctl -ef /etc/pf.conf
pfctl -F all
.
SSH 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 faîtes comme vous voulez.
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 :
# 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 la configuration de SSH dans le fichier
/etc/ssh/sshd_config
.
Port 22222
. Dans tous les
cas, pensez à ouvrir le port dans le parefeu et le diriger dans le routeur.
PermitRootLogin noPour vous connecter à la machine, il faudra créer un utilisateur simple, par exemple toto, avec la commande
adduser
. Petit rappel, afin de passer root, il faut utiliser la
commande su -
.
Une fois les modifications réalisées, relancez ssh :
# rcctl reload sshdPar la suite, pour vous connecter au serveur, vous utiliserez la commande suivante à partir de votre ordinateur :
$ ssh -p 22222 toto@votredomaine.comÇa demandera le mot de passe de toto, puis vous pourrez administrer le serveur à distance.
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 :
$ scp -p <port ssh> utilisateur@votreserveur.net:/emplacement/de/destination fichier-a-copier
On peut aussi plus simplement utiliser un client graphique comme décrit plus bas.
L'idée ici est d'enfermer dans un dossier les utilisateurs appartenant au groupe
sftpusers
. Cela leur évitera de copier n'importe où leur 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 le fichier /etc/ssh/sshd_config
puis ajoutez les lignes suivantes :
Subsystem sftp internal-sftp Match Group sftpusers ChrootDirectory /mnt/sauvegarde/sftp/%u 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.
# mkdir -p /mnt/sauvegarde/sftp
Modifiez les droits pour assurer une sécurité supplémentaire :
# chown root:wheel /mnt/sauvegarde/sftp # 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
/mnt/sauvegarde/sftp/utilisateur
était la
nouvelle racine /
pour les utilisateurs.
Ajouter un compte sftp revient à créer un nouvel utilisateur et mettre ce dernier dans le groupe sftpusers.
Il faut quand même faire attention à plusieurs points :
/home
, mais aura besoin de son dossier dans
/mnt/sauvegarde/sftp
.
documents
prévu à cet effet.
Voici la marche à suivre :
groupadd sftpusers
.
# useradd -G sftpusers -b /documents -s /sbin/nologin utilisateurIl y a un avertissement nous indiquant que l'utilisateur n'a pas de
/home
.
C'est justement ce que nous souhaitons.
passwd utilisateur
.
# mkdir -p /mnt/sauvegarde/sftp/utilisateur
# mkdir -p /mnt/sauvegarde/sftp/utilisateur/documents # chown utilisateur:sftpusers /mnt/sauvegarde/sftp/utilisateur/documents
L'utilisateur peut maintenant utiliser le protocole sftp. Il sera enfermé dans son dossier précédemment créé.
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.
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 :
sftp://utilisateur@votreserveur.net:22222
Remplacez 22222
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.
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
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 :
Il ne vous reste plus qu'à cliquer sur Connexion. Sélectionnez les fichiers que vous souhaitez envoyer ou récupérer, puis faites un clic-droit pour les télécharger. La même chose est possible avec des glisser/déposer.
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
"au-dessus" 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.
On commence par créer un dossier qui contiendra le site :
# 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 :
# 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 le fichier /etc/httpd.conf
. Vous pourrez constater
que sa configuration est très simple.
types { include "/usr/share/misc/mime.types" } server "votredomaine.net" { listen on * port 80 root "/htdocs/mon_super_site" }
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 :
# rcctl enable httpd # 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 :
# mv /home/toto/monsite/* /var/www/htdocs/mon_super_site
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 et de le rediriger.
Si vous voulez en savoir plus, dirigez-vous vers la partie "Astuces pour httpd".
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 :
# pkg_add php-5.6
Ensuite, on active php et on le démarre :
# rcctl enable php56_fpm # rcctl start php56_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
:
server "monserveur.net" { listen on * port 80 root "/htdocs/monsupersite" directory index index.php location "*.php*" { fastcgi socket "/run/php-fpm.sock" } }
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.
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-5.6.sample
.
Afin de les activer, il faut les relier dans le dossier
/etc/php-5.6
. On peut le faire en deux commandes :
# cd /etc/php-5.6.sample # for i in *; do ln -sf ../php-5.6.sample/$i ../php-5.6/; done
La plupart des extensions sont déjà présentes, mais vous voudrez peut-être y ajouter les paquets suivants :
pear
,
php-curl-5.6.18
,
php-gd-5.6.18
,
php-mcrypt-5.6.18
,
php-zip-5.6.18
.
On peut souhaiter modifier la configuration de php. Il faut pour cela éditer le
fichier /etc/php-5.6.ini
. Je vous conseille notamment de modifier ces quelques lignes
; Augmente la taille des fichiers que vous pouvez envoyer sur le site post_max_size = 500M upload_max_filesize = 500M ; une application php peut chercher du contenu distant (images..) allow_url_fopen = On ; Le fuseau horaire date.timezone = Europe/Paris ; configuration du cache opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.enable_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 :
# cd /var/www # On va dans le chroot # mkdir etc/ # On fabrique un dossier etc ### On relie 2 fichiers pour resoudre les domaines: # ln -s /etc/resolv.conf etc/resolv.conf # ln -s /etc/hosts etc/hosts ### Bon fuseau horaire : # ln -s /etc/localtime etc/localtime # mkdir etc/ssl # On cree un autre dossier ### Pour verifier les certificats ssl : # ln -s /etc/ssl/cert.pem
Une fois toutes vos modifications réalisées, n'oubliez pas de relancer
php avec rcctl restart php56_fpm
.
Prévoir un accès avec chiffrement pour votre site n'est pas obligatoire. C'est malgré tout intéressant si :
Procurez-vous tout d'abord un certificat ssl (voir 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.
# extrait de /etc/httpd.conf server "votreserveur.net" { listen on * tls port 443 root "/htdocs/monsupersite" tls { certificate "/etc/letsencrypt/live/votresite.net/fullchain.pem" key "/etc/letsencrypt/live/votresite.net/privkey.pem" } hsts
Vous remarquerez que la connexion se fait désormais sur le port 443 (https), qu'il faut ouvrir dans le parefeu et rediriger dans le routeur.
L'option hsts
rend l'échange des clés et donc la qualité du
chiffrement plus sûrs. Pour 1 mot en plus, ça ne fait pas
de mal.
Afin de renvoyer de façon transparente les visiteurs qui arriveraient avec l'adresse "http://votreserveur.net" et non "https://votreserveur.net", on rajoute le bloc suivant :
# extrait de /etc/httpd.conf server "votreserveur.net" { listen on * port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" }
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.
/var/www
par défaut), on peut mettre en début de configuration
chroot "/autre/repertoire"Ne le faîtes pas ☺ !
/var/www/logs
.
log access "nom_du_site.log"Pour désactiver les logs, mettez
no log
.
listen on :: port 80
htpasswd
pour créer un fichier d'accès :
# htpasswd /var/www/secret.htpw loginRemplacez login par le nom d'utilisateur que vous souhaiterez utiliser, puis définissez un mot de passe solide. Protégez ensuite ce fichier :
# chown www /var/www/secret.htpw # chmod 400 /var/www/secret.htpwEnfin, dans la configuration de httpd, pour protéger l'accès au sous-dossier
/dossier_protege
:
location "/dossier_protege/" { authenticate "Acces restreint" with "/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 "/"
.
/etc/httpd.conf
:
location "/dossier/*" { directory auto index }
Attribuer les permissions 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 :
# chown -R www:daemon /var/www/htdocs/mon_site
-x
). De même, s'il est statique, il n'y aura pas besoin d'écrire
dedans( -w
). On rajoute quand même le droit de se déplacer dans les
répertoires (+X
).
# chmod -R a-xw /var/www/htdocs/mon_site # chmod -R ug+X /var/www/htdocs/mon_siteOn commence par retirer les droits non-souhaités à tout le monde avant d'en donner au propriétaire et au groupe.
# chmod -R a-xw /var/www/htdocs/mon_site # chmod -R u+xwX /var/www/htdocs/mon_site # chmod -R g+rX /var/www/htdocs/mon_siteLà 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 :
Plus simplement, tout ceci peut se faire en quelques lignes :
### retrait des droits : # chmod -R a-rwx /var/www/htdocs/site ### tout le monde peut lire les dossiers : # chmod -R a+rX /var/www/htdocs ### seul le proprietaire peut ecrire : # chmod -R u+w /var/www/htdocs
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.
Une base de données permet à une application de retrouver rapidement des informations imbriqué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.
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.
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 sqlite
MySQL est un autre moteur de base 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-5.6.*
et activez l'extension mysqli comme indiqué dans la
partie sur php.
Afin d'installer MariaDB, il faut lancer les commandes suivantes :
# pkg_add mariadb-server # /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 :
mysqld:\ :openfiles-cur=1024:\ :openfiles-max=2048:\ :tc=daemon:
On peut maintenant lancer la commande suivante pour prendre les changements en compte :
# [ -f /etc/login.conf.db ] && cap_mkdb /etc/login.conf
On peut maintenant lancer mysql :
# rcctl enable mysqld # rcctl start mysqld
Très importante, la commande suivante permet de sécuriser un minimum l'installation de mysql :
# /usr/local/bin/mysql_secure_installation
Donner un mot de passe fort pour l'utilisateur root, et suivez les recommandations. Cela ressemblera à ça :
Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping. By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] Y ... Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. 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 ... Failed! Not critical, keep moving... - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MySQL installation should now be secure. 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 :
# 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 :
[client] socket = /var/www/var/run/mysql/mysql.sock [mysqld] socket = /var/www/var/run/mysql/mysql.sock
Enfin, on relance mysql :
# rcctl restart mysqld
À partir de ce moment, vous pouvez créer et utiliser des bases de données avec MariaDB.
À 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 :
# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.0.23-MariaDB-log openBSD port: mariadb-server-10.0.23p0v1 Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE wordpress_base; Query OK, 1 row affected (0.01 sec) MariaDB [(none)]> CREATE USER 'wp'@'localhost' IDENTIFIED BY 'motdepasse'; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpress_base.* TO 'wp'@'localhost'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> exit 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
,
CREATE USER 'wp'@'localhost' IDENTIFIED BY 'motdepasse';
: On crée un utilisateur wp
avec son mot de passe,
wp
les droits suffisants sur la base créée juste avant.
GRANT ALL PRIVILEGES ON wordpress_base.* TO 'wp'@'localhost';
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-5.6.*
.
Veillez à bien lire
le contenu du fichier
/usr/local/share/doc/pkg-readmes/postgresql*
Ensuite, créez une base par défaut :
# su - _postgresql $ mkdir /var/postgresql/data $ initdb -D /var/postgresql/data -U postgres -E UTF8 -A md5 -W $ exit
Des options supplémentaires seront à adapter à votre cas dans le fichier :
/var/postgresql/data/postgresql.conf
Par exemple, pour que le serveur http qui est enfermé dans un chroot puisse accéder à la base :
unix_socket_directories = '/var/www/run' # comma-separated list of directories
Démarrez le serveur postgresql avec :
# rcctl enable postgresql # rcctl start postgresql
Pour se connecter à postgreysql, on utilise la commande :
# su postgres -c psql
Voici quelques commandes permettant de gérer PostgreSQL.
# su postgres -c psql ALTER USER postgres WITH PASSWORD 'mot_de_passe';
# su postgres -c psql CREATE USER 'nouvelutilisateur' \ WITH PASSWORD 'mot_de_passe_de_l_utilisateur';
# su postgres -c psql << EOF \connect template1 CREATE DATABASE "nom_de_base" WITH ENCODING 'UTF-8'; GRANT ALL PRIVILEGES ON DATABASE "nom_de_base" TO "utilisateur"; ALTER DATABASE "nom_de_base" OWNER TO "utilisateur"; \q
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 :
Nous verrons en passant comment ajouter de nouveaux comptes mail sur votre serveur, et comment configurer votre client de messagerie pour l'utiliser.
Chez votre registre, ajoutez deux nouveaux champs :
votredomaine.net A 109.190.193.182Bien sûr, remplacez
109.190.193.182
par votre ip.
votredomaine.net. MX 1 votredomaine.net.Notez l'importance du
.
final.
Si vous disposer 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.
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.
Nous avons ces deux commandes à lancer :
# openssl genrsa -out /etc/ssl/private/mail.votreserveur.net.key 4096 # openssl req -new -x509 -key /etc/ssl/private/mail.votreserveur.net.key \ -out /etc/ssl/certs/mail.votreserveur.net.crt -days 730
On modifie les permissions sur ces deux fichiers par sécurité :
# chmod 640 /etc/ssl/private/mail.votreserveur.net.key # chmod 640 /etc/ssl/certs/mail.votreserveur.net.crt
Et voilà!
Opensmtpd est le serveur mail par défaut sur OpenBSD. Il est déjà installé, reste à le configurer. Nous allons malgré tout y ajouter quelques plugins pratiques :
# pkg_add opensmtpd-extras
Cependant, avant toutes choses, ouvrez et redirigez les ports suivants : 25 (smtp), 587 (submission) et 993 (imaps).
Pour configurer opensmtpd, on édite
/etc/mail/smtpd.conf
pour y mettre par exemple :
filter filter-pause pause table aliases file:/etc/mail/aliases pki votreserveur.net key "/etc/ssl/private/mail.votreserveur.net.key" pki votreserveur.net certificate "/etc/ssl/certs/mail.votreserveur.net.crt" # Deliver listen on lo0 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 accept from local for local alias <aliases> deliver to maildir "~/Maildir" accept from any for domain "votreserveur.net" deliver to maildir "~/Maildir" # Relay 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!
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.
filter filter-pause pause
: Il s'agit d'un filtre qui va mettre en attente les
connexions entrantes pendant 5 secondes (par défaut). C'est une précaution
pour éviter une partie des spams.
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.
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é accrue afin d'envoyer des messages.
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 :
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 :
votredomaine.net
Nous pouvons maintenant activer et relancer le serveur smtpd :
# rcctl enable smtpd # 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
:
root: toto
Ainsi, lorsque toto consultera son courrier, il pourra lire les informations du système (alertes de sécurité...).
Dovecot va être utilisé comme serveur imap, afin de pouvoir récupérer son courrier à partir d'un client comme thunderbird.
On installe dovecot :
# pkg_add dovecot
On édite maintenant le fichier /etc/dovecot/local.conf
pour y mettre
le contenu suivant :
# listen both ipv4 and ipv6 listen = *, [::] # we use maildir mail_location = maildir:~/Maildir # imap > pop protocols = imap # no plaintext, let's keep it secure with ssl ssl = yes ssl_cert = </etc/ssl/certs/mail.yeuxdelibad.net.crt ssl_key = </etc/ssl/private/mail.yeuxdelibad.net.key disable_plaintext_auth = yes passdb { driver = bsdauth } userdb { driver = passwd }
Afin que dovecot fonctionne correctement, il faut maintenant éditer le
fichier /etc/login.conf
pour ajouter quelques lignes :
(voir le fichier
/usr/local/share/doc/pkg-readmes/dovecot*
)
dovecot:\ :openfiles-cur=512:\ :openfiles-max=2048:\ :tc=daemon:
On prend en compte les changements récents avec la commande suivante :
# [ -f /etc/login.conf.db ] && cap_mkdb /etc/login.conf
Pour terminer cette partie, on active dovecot et on relance les différents éléments constituant le serveur mail.
# rcctl enable dovecot # rcctl start dovecot # rcctl restart smtpd
Il vous est désormais possible d'utiliser votre serveur pour recevoir et envoyer du courrier.
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 :
votredomaine.net
toto@votredomaine.net
Vous souhaiterez peut-être plutôt utiliser un webmail, afin d'accéder à votre messagerie à partir d'un navigateur web.
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.
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.
Ajoutez un champ DNS de type SPF auprès de votre registrar tel que celui-ci :
votredomaine.net. SPF ``v=spf1 a mx ~all''
ou bien sous forme de champ TXT si le SPF n'est pas disponible :
votredomaine.net. TXT ``v=spf1 a mx ~all''
Cette technique consiste à signer les messages émis par le serveur à l'aide d'une clé privée. On ajoute ensuite dans un champ DNS la clé publique qui permettra au destinataire de vérifier que le mail reçu provient bien de votre serveur avec la signature.
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 créer la paire de clés qui servira à signer les mails émis :
### Dossier pour les clef # mkdir -p /etc/dkimproxy/private ### On protege le dossier # chown _dkimproxy:wheel /etc/dkimproxy/private ### en modifiant les permissions # chmod 700 /etc/dkimproxy/private ### On va dans le dossier # cd /etc/dkimproxy/private ### On genere les clef # openssl genrsa -out private.key 1024 # openssl rsa -in private.key -pubout -out public.key ### On protege les clef # chown _dkimproxy:wheel private.key public.key # chmod 600 private.key
On peut maintenant installer dkimproxy comme d'habitude :
# pkg_add dkimproxy
Afin de configurer la signature des messages envoyés, il faut éditer le ficher
/etc/dkimproxy_out.conf
ainsi :
listen 127.0.0.1:10027 relay 127.0.0.1:10028 domain votredomaine.net signature dkim(c=relaxed) signature domainkeys(c=nofws) keyfile /etc/dkimproxy/private/private.key selector pubkey
Euh, c'est quoi tout ça?
Quelques menues explications :
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 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 envoyer les mails que dkimproxy aura signé. On leur donne
l'étiquette "DKIM" pour les repérer ensuite.
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.
accept tagged DKIM for any relay
Enfin, les messages pas encore signés sont envoyés à dkimproxy :
accept from local for any relay via smtp://127.0.0.1:10027
Le fichier /etc/mail/smtpd.conf
ressemble désormais à ça :
filter filter-pause pause table aliases file:/etc/mail/aliases pki mail.votreserveur.net key "/etc/ssl/private/mail.votreserveur.net.key" pki mail.votreserveur.net certificate "/etc/ssl/certs/mail.votreserveur.net.crt" # Deliver listen on lo0 listen on lo0 port 10028 tag DKIM listen on re0 port 25 filter filter-pause hostname mail.votreserveur.net tls pki mail.votreserveur.net listen on re0 port 587 hostname mail.votreserveur.net tls-require pki mail.votreserveur.net auth accept from local for local alias <aliases> deliver to maildir "~/Maildir" accept from any for domain "votreserveur.net" deliver to maildir "~/Maildir" # Relay # dkim tagged can be sent accept tagged DKIM for any relay # if not dkim tagged, send it to dkimproxy accept from local for any relay via smtp://127.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 allonrs ajouter un nouveau champ dans vos DNS 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. Remplissez-le ainsi :
pubkey._domainkey.votredomaine.net
.
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
:
# 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.
# rcctl enable dkimproxy_out # rcctl start dkimproxy_out # 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 :
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.
Votre serveur n'est actuellement pas à l'abri des spams. Nous allons donc voir une méthode 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 allons faire simple et s'appuyer sur l'excellent spamassassin. Notez qu'avec ce dernier, j'ai dû recevoir une dizaine de spams au début le temps que spamassassin 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 :
# pkg_add opensmtpd-extras-spamassassin opensmtpd-extras p5-Mail-Spamassassin
On peut maintenant activer et démarrer spamassassin :
# rcctl enable spamassassin # rcctl start spamassassin
Enfin, on modifie la configuration d'opensmtpd, toujours en éditant le fichier
/etc/mail/smtpd.conf
.
On rajoute un filtre au tout début du fichier qui permet de passer les messages à spamassasin :
filter filter-spamassassin spamassassin "-s reject"
On applique ensuite ce filtre aux mails arrivants :
listen on re0 port 25 filter filter-spamassassin hostname mail.votreserveur.net tls pki mail.votreserveur.net
Si les messages passent, c'est que spamassassin ne les a pas détectés comme spam.
Et voilà, avouez que ce n'était pas compliqué.
On peut rajouter quelques filtres qui se basent sur les noms de domaine. Créez
le fichier /etc/mail/filter-regex.conf
pour y mettre :
helo ! ^\[ helo ^\. helo \.$ helo ^[^\.]*$
Enfin, on ajoute des filtres à la configuration d'opensmtpd pour obtenir :
filter filter-pause pause filter filter-regex regex filter filter-dnsbl-sorbs dnsbl filter filter-dnsbl-spamcop dnsbl "-h bl.spamcop.net" filter filter-dnsbl-spamhaus dnsbl "-h sbl-xbl.spamhaus.org" filter filter-spamassassin spamassassin "-s reject" filter all chain filter-pause filter-regex filter-dnsbl-sorbs filter-dnsbl-spamcop filter-dnsbl-spamhaus filter-spamassassin
Référez-vous à l'exemple plus complet à la fin du document.
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 :
root@votreserveur[~] # adduser Use option ``-silent'' if you don't want to see all warnings and questions. Reading /etc/shells Check /etc/master.passwd Check /etc/group Ok, let's go. Don't worry about mistakes. There will be a chance later to correct any input. Enter username []: toto Enter full name []: Jean-Eudes Enter shell csh ksh nologin sh [nologin]: nologin Uid [1005]: Login group toto [toto]: Login group is ``toto''. Invite toto into other groups: guest no [no]: Login class authpf bgpd daemon default dovecot pbuild staff unbound [default]: Enter password []: Enter password again []: Name: toto Password: *************** Fullname: Jean-Eudes Uid: 1005 Gid: 1005 (toto) Groups: toto Login Class: default HOME: /home/toto Shell: /sbin/nologin OK? (y/n) [y]: y Added user ``toto'' Add another user? (y/n) [y]: n Goodbye!
Bien sûr, vous aurez choisi un mot de passe de qualité.
Pour supprimer l'utilisateur, c'est nettement plus rapide :
# userdel toto # groupdel toto
Et voilà!
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 bibi@mondomaine.com et souhaitez que tous les messages reçus par bibi soient transférés automatiquement à jean-eudes@openmailbox.org.
Pour ça, il suffit d'éditer le fichier /etc/mail/aliases
, puis d'y
ajouter une ligne comme celle-ci :
bibi: jean-eudes@openmailbox.org
De façon générale, ça donne :
utilisateur: adresse1.mail.com, adresse2.mail.com
Afin que ce changement soit pris en compte, il reste à lancez la commande suivante :
# newaliases
C'est tout! Je vous l'avait dit que c'était simple.
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 :
# pkg_add cups cups-filters gutenprint foomatic-db
Pensez à ouvrir dans le parefeu le port 631 (ipp). Pour un réseau local, inutile de le rediriger 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
:
# Restrict access to the server... <Location /> Order deny,allow Deny From All Allow From 192.168.1.* Allow From 127.0.0.1 Allow From @LOCAL </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 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 :
# rcctl enable cupsd # rcctl start cupsd
Ensuite, installez 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 le 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.
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.
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 -d
. Vous obtenez une sortie de ce type :
# usbdevs -d addr 1: xHCI root hub, Intel uhub0 addr 2: Ext HDD 1021, Western Digital umass0 addr 3: Bluetooth Radio, Realtek ugen0 addr 4: HL-2130 series, Brother ugen1
On remarque que l'imprimante est identifiée par ugen1
sur l'adresse 4.
Pour permettre à cups d'accéder à l'imprimante à chaque redémarrage du serveur,
on ajoute dans le fichier /etc/rc.local
la commande suivante :
# chown _cups /dev/ugen1.* /dev/usb3
Remarquez que nous avons écrit /dev/usb3
et non /dev/usb4
, tout
simplement parce que la numérotation commence à 0. Après un rédémarrage du
serveur (ou l'exécution manuelle de la commande précédente), cups sera en mesure
d'accéder à l'imprimante.
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 :
# config -fe /bsd OpenBSD 5.9 (GENERIC.MP) #2: Mon May 2 10:11:35 CEST 2016 jasper@stable-59-amd64.mtier.org:/binpatchng/work-binpatch59-amd64/src/sys/arch/amd64/compile/GENERIC.MP Enter 'help' for information ukc> disable ulpt 282 ulpt* disabled ukc> quit Saving modified kernel.
Un redémarrage du serveur est nécessaire pour prendre les changements en compte.
Ce chapitre décrit comment mettre en place une seedbox.
On commence par installer l'excellent rtorrent :
# pkg_add rtorrent
On ajoute maintenant un utilisateur donc la tâche sera de faire tourner rtorrent :
# adduser Use option ``-silent'' if you don't want to see all warnings and questions. Reading /etc/shells Check /etc/master.passwd Check /etc/group Ok, let's go. Don't worry about mistakes. There will be a chance later to correct any input. Enter username []: _rtorrent Enter full name []: rtorrent daemon Enter shell csh ksh nologin sh [nologin]: ksh Uid [1005]: Login group _rtorrent [_rtorrent]: Login group is ``_rtorrent''. Invite _rtorrent into other groups: guest no [no]: Login class authpf bgpd daemon default dovecot pbuild staff unbound [default]: Enter password []: Enter password again []: Name: _rtorrent Password: *************** Fullname: rtorrent daemon Uid: 1005 Gid: 1005 (_rtorrent) Groups: _rtorrent Login Class: default HOME: /home/_rtorrent Shell: /sbin/ksh OK? (y/n) [y]: y Added user ``_rtorrent'' Add another user? (y/n) [y]: n Goodbye!
Nous pouvons maintenant nous connecter en tant qu'utilisateur _rtorrent :
# 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 :
$ mkdir -p Telechargements/{download,session,torrents}
On crée maintenant le fichier ~/.rtorrent.rc
. Vous pouvez copier l'exemple
fournit avec le paquet :
$ cp /usr/local/share/examples/rtorrent ~/.rtorrent.rc
On modifie la configuration selon nos besoins :
# Maximum and minimum number of peers to connect to per torrent. #min_peers = 40 #max_peers = 100 # Same as above but for seeding completed torrents (-1 = same as downloading) #min_peers_seed = 10 #max_peers_seed = 50 # Maximum number of simultanious uploads per torrent. #max_uploads = 15 # Global upload and download rate in KiB. "0" for unlimited. #download_rate = 0 upload_rate = 20 # Default directory to save the downloaded torrents. directory = ~/Telechargements/download # Default session directory. Make sure you don't run multiple instance # of rtorrent using the same session directory. Perhaps using a # relative path? session = ~/Telechargements/session # Watch a directory for new torrents, and stop those that have been # deleted. schedule = watch_directory,5,5,load_start=~/Telechargements/torrents/*.torrent schedule = untied_directory,5,5,stop_untied= # Close torrents when diskspace is low. #schedule = low_diskspace,5,60,close_low_diskspace=100M # The ip address reported to the tracker. #ip = 127.0.0.1 #ip = rakshasa.no # The ip address the listening socket and outgoing connections is # bound to. #bind = 127.0.0.1 #bind = rakshasa.no # Port range to use for listening. #port_range = 6890-6999 # Start opening ports at a random position within the port range. #port_random = no # Check hash for finished torrents. Might be usefull until the bug is # fixed that causes lack of diskspace not to be properly reported. #check_hash = no # Set whether the client should try to connect to UDP trackers. #use_udp_trackers = yes # Alternative calls to bind and ip that should handle dynamic ip's. #schedule = ip_tick,0,1800,ip=rakshasa #schedule = bind_tick,0,1800,bind=rakshasa # Encryption options, set to none (default) or any combination of the following: # allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext # # The example value allows incoming encrypted connections, starts unencrypted # outgoing connections but retries with encryption if they fail, preferring # plaintext to RC4 encryption after the encrypted handshake # encryption = allow_incoming,require,require_rc4,enable_retry # Enable DHT support for trackerless torrents or when all trackers are down. # May be set to "disable" (completely disable DHT), "off" (do not start DHT), # "auto" (start and stop DHT as needed), or "on" (start DHT immediately). # The default is "off". For DHT to work, a session directory must be defined. # dht = auto # UDP port to use for DHT. # # dht_port = 6881 # Enable peer exchange (for torrents not marked private) # # peer_exchange = yes system.method.set_key = event.download.finished,notify_me,"execute=~/.rtorrent_mail.sh,$d.get_name=" #scgi_port = 127.0.0.1:5000
Afin d'être averti lorsqu'un téléchargement est terminé, on crée le script
~/.rtorrent_mail.sh
:
#!/bin/sh 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. Afin
d'ajouter un fichier torrent, sur votre ordinateur habituel, vous pouvez
utiliser un client SFTP ou la commande scp :
$ scp -p <port_ssh> _rtorrent@votredomaine.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
:
su _rtorrent -c "tmux new -s rtorrent -d 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 afficher rtorrent avec la commande
tmux a -t rtorrent
. Appuyez successivement sur "ctrl-b" puis la touche d
pour vous détacher de rtorrent.
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 internet 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!
Il vous est possible de participer à ce réseau en étant un serveur relai. 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 :
# pkg_add tor # rcctl enable tor
Assurez-vous d'ouvrir dans votre pare-feu, et de rediriger dans votre routeur le port 9001.
Ensuite, éditez le fichier /etc/tor/torrc
, afin d'obtenir ces quelques lignes :
SOCKSPort 0 ORPort 9001 Nickname Surnom RelayBandwidthRate 75 KB RelayBandwidthBurst 100 KB ContactInfo votrenom <adresse AT email dot fr> ExitPolicy reject *:* # no exits allowed
Augmentez les valeurs pour RelayBandwidthRate
et
RelayBandwidthBurst
selon votre connexion 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 apparaitre dans
le fichier /var/log/messages
:
May 12 12:20:41 votreserveur Tor[12059]: Bootstrapped 80%: Connecting to the Tor network May 12 12:20:41 votreserveur Tor[12059]: Bootstrapped 85%: Finishing handshake with first hop May 12 12:20:42 votreserveur Tor[12059]: Bootstrapped 90%: Establishing a Tor circuit May 12 12:20:44 votreserveur Tor[12059]: Tor has successfully opened a circuit. Looks like client functionality is working. May 12 12:20:44 votreserveur Tor[12059]: Bootstrapped 100%: Done May 12 12:20:44 votreserveur Tor[12059]: Now checking whether ORPort 109.190.xxx.xxx:9001 is reachable... (this may take up to 20 minutes -- look for log messages indicating success) May 12 12:21:10 votreserveur Tor[12059]: Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor. May 12 12:21:12 votreserveur Tor[12059]: Performing bandwidth self-test...done.
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 "5rud2tr7sm3oskw5.onion".
Avant d'aller plus loin, notez qu'il est très fortement déconseillé d'héberger un relai 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 :
SOCKSPort 0 HiddenServiceDir /var/tor/hidden/ HiddenServicePort 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 :
# cat /var/tor/hidden/hostname 5rud2tr7sm3oskw5.onion
Cependant, ne communiquez jamais le contenu de private_key
.
Il ne nous reste plus qu'à configurer httpd 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 :
server "5rud2tr7sm3oskw5.onion" { listen on 127.0.0.1 port 80 # emplacement du site root "/htdocs/votresite.net" directory index index.html [...] }
Vous pouvez tester votre site (après un rcctl reload httpd
bien sûr) avec le
navigateur torbrowser.
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.
Si vous avez lu la partie concernant les DNS, vous aurez compris qu'ils sont essentiels pour un humain sur l'internet. Mais votre serveur lui même en a besoin.
Si vous envoyez un mail, vous allez écrire une adresse comme "zouzoulepetitours@serveurmail.org". Votre serveur doit savoir comment communiquer avec "serveurmail.org". Pour cela, une résolution DNS 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 :
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.
Nous allons donc éditer le fichier /var/unbound/etc/unbound.conf
pour le
remplir ainsi :
server: interface: 127.0.0.1 interface: ::1 do-ip6: yes do-ip4: yes do-udp: yes do-tcp: yes # seul le serveur a le droit # d'utiliser unbound en local access-control: 0.0.0.0/0 refuse access-control: ::0/0 refuse access-control: 127.0.0.0/8 allow access-control: ::1 allow hide-identity: yes hide-version: yes auto-trust-anchor-file: "/var/unbound/db/root.key" 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 ce fichier puis ajoutez-y
ceci :
unbound-anchor -a "/var/unbound/db/root.key"
Lancez ce script manuellement pour cette fois avec
# sh /etc/weekly.local
Il nous reste à activer unbound avec les commandes habituelles :
# rcctl enable unbound # rcctl start unbound
Pour indiquer au serveur de demander la résolution des noms de domaines au
résolveur local unbound, on édite le fichier /etc/resolv.conf
pour y mettre :
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
:
prepend domain-name-servers 127.0.0.1;
Et voilà!
Vous pouvez tester l'efficacité d'unbound avec la commande dig :
$ dig handylinux.org [...] ;; 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 :
$ dig handylinux.org [...] ;; Query time: 0 msec
C'est toujours un gain de performance bienvenu!
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 de la façon la plus simple possible.
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 :
# pkg_add gophernicus
Ensuite, il est nécessaire d'éditer le fichier /etc/inetd.conf
pour y mettre
la ligne suivante :
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 :
# rcctl enable inetd # rcctl start inetd
À partir de ce moment là, il ne reste plus qu'à ouvrir et rediriger 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.
Par exemple :
____ _ | __ )(_) ___ _ ____ _____ _ __ _ _ ___ | _ \| |/ _ \ '_ \ \ / / _ \ '_ \| | | |/ _ \ | |_) | | __/ | | \ V / __/ | | | |_| | __/ |____/|_|\___|_| |_|\_/ \___|_| |_|\__,_|\___| ---------------------------------------------- *
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 :
On peut utiliser un serveur à la maison pour sauvegarder ses documents. 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 :
Branchez le disque dur au serveur. Si vous lancez la commande dmesg
, vous
verrez apparaître quelque chose comme ça :
umass0 at uhub0 port 1 configuration 1 interface 0 "Western Digital Ext HDD 1021" rev 2.00/20.21 addr 2 umass0: using SCSI over Bulk-Only scsibus2 at umass0: 2 targets, initiator 0 sd1 at scsibus2 targ 1 lun 0: <WD, Ext HDD 1021, 2021> SCSI2 0/direct fixed serial.10581021383235373034 sd1: 1907727MB, 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:
# fdisk -i sd1
On va diviser cette partition en 2 avec disklabel
.
# disklabel -E sd1
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.
a a
. Cela signifie "ajouter une
partition a".
4G
; avec une proportion du disque :
50%
; ou avec un pourcentage de l'espace libre restant : 25&
.
4.2BSD
.
a b
. Notez
qu'on ne peut pas créer une partition "c", cette lettre étant réservée pour
désigner le disque entier. Mais il n'y a pas de soucis avec le reste de l'alphabet.
Une fois terminé, appliquez les changements avec la lettre q
.
Regardons maintenant l'état du disque en tapant disklabel sd1
:
# /dev/rsd1c: type: SCSI disk: SCSI disk label: Ext HDD 1021 duid: 782f1ddb783cdd13 flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 255 sectors/cylinder: 16065 cylinders: 243201 total sectors: 3907024896 boundstart: 64 boundend: 3907024065 drivedata: 0 16 partitions: # size offset fstype [fsize bsize cpg] a: 629153472 64 4.2BSD 4096 32768 1 b: 3277870464 629153536 4.2BSD 8192 65536 1 c: 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... |
b: | 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".
duid: 782f1ddb783cdd13
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 b) :
# newfs /dev/rsd1a # newfs /dev/rsd1b
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 rajouter la ligne suivante dans le fichier /etc/fstab
:
782f1ddb783cdd13.a /altroot ffs xx 0 0
Vous remarquerez que 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
:
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à :
boot > set device hd1a boot > boot -s
Ou tout en une seule fois :
boot > boot -s hd1a:/bsd
Si le moment venu vous ne savez plus sur quelle partition se trouve votre sauvegarde, tapez ceci :
boot > machine diskinfo
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 :
# mkdir -p /mnt/sauvegardes
Ensuite, on ajoute une ligne au fichier /etc/fstab
pour monter ce disque :
782f1ddb783cdd13.b /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 :
$ rsync -e "ssh -p <port ssh>" -avz --progress --delete /dossier/a/sauvegarder \ toto@votreserveur.net:/mnt/sauvegarde/toto
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.
Pour conserver un système robuste et sécurisé, il est essentiel de le maintenir à jour. Voici quelques conseils à ce sujet.
Mettre les paquets à jour est l'histoire d'une seule commande :
# pkg_add -u
Oui, c'est tout.
Tout d'abord, un petit rappel : OpenBSD est fournit en 3 "saveurs" (flavour) :
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 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 :
Pour commencer, on récupère les sources "patchées" et corrigées :
# cd /usr # cvs -qd anoncvs@anoncvs.fr.openbsd.org:/cvs get -rOPENBSD_5_9 -P src # cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -rOPENBSD_5_9 -P ports
Si vous aviez déjà les sources, il suffit alors de lancer :
# cd /usr/src # cvs -q up -rOPENBSD_5_9 -Pd # cd /usr/ports # cvs -q up -rOPENBSD_5_9 -Pd
La première fois, c'est long. Pas d'inquiétudes donc, préparez un petit café pendant ce temps.
Ensuite, les commandes suivantes permettront de compiler le noyau :
# cd /usr/src/sys/arch/$(uname -m)/conf # config GENERIC # cd /usr/src/sys/arch/$(uname -m)/compile/GENERIC # make clean && make # make install
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.
# rm -rf /usr/obj/* # cd /usr/src # make obj # cd /usr/src/etc && env DESTDIR=/ make distrib-dirs # cd /usr/src # 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.
M:tier met à disposition un script qui automatise et facilite la mise à jour du système OpenBSD. Pour l'utiliser :
Vraiment, c'est extrêmement simple, non?
En somme, ça tient en une ligne :
# curl -s https://stable.mtier.org/openup | sh
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 à majordomo@OpenBSD.org. Vous écrirez à l'intérieur :
subscribe announce
Lorsqu'une nouvelle version majeure d'OpenBSD est disponible, la procédure de mise à jour est toujours détaillée sur le site officielle. Vous pouvez si vous voulez consulter les notes de version lors du passage de la 5.8 à la 5.9 à la page ci-dessous :
https://www.openbsd.org/faq/upgrade59.html
Cette section propose des exemples de services que vous pouvez auto-héberger. Il conviendra de ne pas reproduire bêtement les procédures proposé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 procédure est sensiblement la même pour la plupart des applications :
/var/www/htdocs
;
chown -R www:daemon /var/www/htdocs/lesite
/etc/httpd.conf
;
rcctl reload httpd
;
Je suppose ici que vous avez déjà procédé à l'installation de httpd et de php.
Le webmail vous servira à consulter votre messagerie à partir d'un navigateur web. Nous allons ici installer le très connu roundcube.
Tout d'abord, on doit modifier la configuration de PHP. On édite le fichier
/etc/php-5.6.ini
pour y mettre à la fin :
[suhosin] suhosin.session.encrypt = 0
Une fois cette modification effectuée, relancez php :
# rcctl restart php56_fpm
Installons maintenant roundcube ainsi que sqlite :
# pkg_add roundcubemail sqlite
Nous allons créer la base sqlite pour roundcube. On se déplace tout d'abord dans le dossier de roundcube, puis on crée un dossier qui contiendra la base de données :
# cd /var/www/roundcubemail # mkdir db
Puisqu'on a utilisé un paquet intégré à OpenBSD, on doit créer la base de données manuellement :
# sqlite3 -init SQL/sqlite.initial.sql db/sqlite.db (type .exit to quit sqlite3)
Enfin, on modifie les droits de tous ces nouveaux fichiers :
# chown -R root:www db # chmod 0775 db # chmod 0660 db/sqlite.db
On ajoute le nouveau site dans la configuration de httpd. Pour cela, on édite le
fichier /etc/httpd.conf
et on ajoute quelque chose comme :
server "webmail.votreserveur.net" { listen on * port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" no log } server "webmail.votreserveur.net" { listen on * tls port 443 root "/roundcubemail" directory index index.php no log hsts tls { certificate "/etc/letsencrypt/live/votreserveur.net/fullchain.pem" key "/etc/letsencrypt/live/votreserveur.net/privkey.pem" } location "*.php*" { fastcgi socket "/run/php-fpm.sock" } # Deny Protected directories location "/config" { block } location "/temp" { block } location "/logs" { block } location "/README" { block } location "/INSTALL" { block } location "/LICENSE" { block } location "/CHANGELOG" { block } location "/UPGRADING" { block } location "/bin" { block } location "/SQL" { block } location "/db" { block } location "*.md" { block } location "\.*" { block } }
Pour terminer l'installation de roundcube, il faut activer l'installateur. Pour cela, on édite le fichier
/var/www/roundcubemail/config/defaults.inc.php
Il n'est pas accessible en écriture, donc avant de le modifier, tapez :
# chmod +w /var/www/roundcubemail/config/defaults.inc.php
Vous pouvez maintenant activer l'installateur dans ce fichier:
$config['enable_installer'] = true;
Rechargez httpd et php puis allez à l'adresse de votre nouveau webmail https://webmail.votreserveur.net/installer.
Suivez les indications données. Dans le navigateur, sera générée la configuration. Enregistrez-là dans le fichier
/var/www/roundcubemail/config/config.inc.php
Vérifiez bien qu'il contient au moins ceci (attention au nombre de
/
) :
$config['db_dsnw'] = 'sqlite:////roundcubemail/db/sqlite.db?mode=0660'; $config['smtp_server'] = 'localhost';
Une fois terminé, modifiez de nouveau le fichier defaults.inc.php
pour
désactiver l'installateur.
$config['enable_installer'] = false;
Puis retirez les droits d'écriture :
# chmod -w /var/www/roundcubemail/config/defaults.inc.php
Ça y est, votre webmail est prêt!
On ne présente plus owncloud, 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 owncloud :
# mkdir /var/www/htdocs/owncloud
Ensuite, sans surprise, on le télécharge.
# curl -o /var/www/htdocs/owncloud/setup-owncloud.php "https://download.owncloud.com/download/community/setup-owncloud.php"
Maintenant, on modifie les droits pour que ces nouveaux fichiers appartiennent au serveur web :
# chown -R www:daemon /var/www/htdocs/owncloud
On peut désormais éditer le fichier /etc/httpd.conf
afin d'ajouter une
section pour owncloud :
server "cloud.exemple.net" { listen on * port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" } server "cloud.exemple.net" { listen on * tls port 443 root "/htdocs/owncloud" directory index index.php hsts tls { certificate "/etc/letsencrypt/live/exemple.net/fullchain.pem" key "/etc/letsencrypt/live/exemple.net/privkey.pem" } # Set max upload size to 513M (in bytes) connection max request body 537919488 # First deny access to the specified files location "/db_structure.xml" { block } location "/.ht*" { block } location "/README" { block } location "/data*" { block } location "/config*" { block } location "/*.php*" { fastcgi socket "/run/php-fpm.sock" } }
Avant de relancer les services, on installe les dépendances php dont owncloud aura besoin :
# pkg_add php-intl php-bz2 pecl-redis icu4c
On active ces extensions :
# cd /etc/php-5.6.sample # for i in *; do ln -sf ../php-5.6.sample/$i ../php-5.6/; done
Enfin, on recharge httpd et php avec :
# rcctl reload httpd # rcctl restart php56_fpm
Pour terminer l'installation, ouvrez dans un navigateurà l'adresse https://cloud.exemple.net/setup-owncloud.php.
Ne reste plus qu'à suivre les étapes :
On installe dans le répertoire courant, donc on indique ".". Cette étape est assez longue selon votre vitesse de téléchargement.
Vous remarquez qu'il n'a pas pu supprimer tout seul le fichier d'installation. Vérifiez que c'est bien le cas en lançant à la main :
# rm /var/www/htdocs/owncloud/setup-owncloud.php
Puis allez à l'adresse de votre cloud : httpd://cloud.exemple.net/.
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 :
# mkdir -p /var/www/usr/share/locale/UTF-8/ # 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-5.6.ini
pour changer les
valeurs dans les variables suivantes :
post_max_size = 500M upload_max_filesize = 500M
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 et de php.
On télécharge bozon avec l'archive présente sur github . Avec l'outil curl, on le fait ainsi :
# curl -L -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 :
# cd /var/www/htdocs # unzip /tmp/bozon.zip # mv BoZoN-master bozon # chown -R www:daemon /var/www/htdocs/bozon
On peut maintenant éditer le fichier /etc/httpd.conf
afin d'ajouter une
section pour BoZoN :
server "cloud.exemple.net" { listen on * port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" } server "cloud.exemple.net" { listen on * tls port 443 root "/htdocs/bozon" directory index index.php hsts tls { certificate "/etc/letsencrypt/live/exemple.net/fullchain.pem" key "/etc/letsencrypt/live/exemple.net/privkey.pem" } # Set max upload size to 513M (in bytes) connection max request body 537919488 location "/*.php*" { fastcgi socket "/run/php-fpm.sock" } # Protect some files location "/uploads*" { block } location "/private*" { block } location "/thumbs*" { block } location "/core/" { block } location "/core/*.js" { pass } location "/private/temp/*.zip" { pass } }
On recharge httpd rcctl reload httpd
puis on se dirige à l'adresse
https://cloud.exemple.net/ pour finir.
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-5.6.ini
afin de changer les
valeurs dans les variables suivantes :
post_max_size = 500M upload_max_filesize = 500M
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.
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 curl :
# curl -o /tmp/blogotext.zip "http://lehollandaisvolant.net/blogotext/blogotext.zip"
On décompresse l'archive à partir du dossier /var/www/htdocs
:
# cd /var/www/htdocs # unzip /tmp/blogotext.zip
Un dossier blogotext
est créé.
Maintenant, on modifie les droits pour que ces nouveaux fichiers appartiennent
au serveur web :
# chown -R www:daemon /var/www/htdocs/blogotext
On peut alors éditer le fichier /etc/httpd.conf
afin d'ajouter une
section pour blogotext :
server "blog.exemple.net" { listen on * port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" } server "blog.exemple.net" { listen on * tls port 443 root "/htdocs/blogotext" directory index index.php # taille maximale que l'on peut envoyer en bytes connection max request body 1537919488 hsts tls { certificate "/etc/letsencrypt/live/exemple.net/fullchain.pem" key "/etc/letsencrypt/live/exemple.net/privkey.pem" } location "/*.php*" { fastcgi socket "/run/php-fpm.sock" } }
On recharge httpd avec
# rcctl reload httpd
puis on se dirige à l'adresse https://blog.exemple.net/ afin de terminer l'installation.
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.
Wordpress est un moteur très lourd mais qui peut permettre de créer n'importe quel site.
Quelques dépendances sont à installer, dont la base de données MariaDB :
# pkg_add php-mysqli-5.6.18 mariadb-server # cd /etc/php-5.6.sample # for i in *; do ln -sf ../php-5.6.sample/$i ../php-5.6/; done # rcctl restart php56_fpm
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. 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 :
# curl -o /tmp/wordpress.tar.gz "https://wordpress.org/latest.tar.gz"
On décompresse l'archive dans le dossier /var/www/htdocs
# cd /var/www/htdocs # tar xvzf /tmp/wordpress.tar.gz
On modifie les droits du nouveau dossier :
# chown -R www:daemon /var/www/htdocs/wordpress
On ajoute maintenant une section dans /etc/httpd.conf
server "blog.votreserveur.net" { listen on * tls port 443 root "/htdocs/wordpress" directory index index.php hsts tls { certificate "/etc/letsencrypt/live/votreserveur.net/fullchain.pem" key "/etc/letsencrypt/live/votreserveur.net/privkey.pem" } # Set max upload size to 513M (in bytes) connection max request body 537919488 # protected files and dir location "/.*" { block } location "/upload/*.php" { block } location "/files/*.php" { block } # Any other PHP file location "/*.php*" { fastcgi socket "/run/php-fpm.sock" } }
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.
L'installation de wordpress est terminée ☺ .
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 fait bien et sait rester léger.
Vous aurez besoin pour l'utiliser de php et de sqlite.
Vérifiez (https://github.com/fruux/Baikal/releases) quelle est la dernière version de baikal. Vous pouvez ensuite la télécharger avec curl :
# curl -L -o /tmp/baikal.zip "https://github.com/fruux/Baikal/releases/download/0.4.4/baikal-0.4.4.zip"
On se déplace dans le dossier web pour décompresser baikal et modifier les droits sur les fichiers :
# cd /var/www/htdocs/ # unzip /tmp/baikal.zip # 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" :
server "dav.yeuxdelibad.net" { listen on * tls port 443 root "/htdocs/baikal/html" directory index index.php hsts tls { certificate "/etc/letsencrypt/live/exemple.net/fullchain.pem" key "/etc/letsencrypt/live/exemple.net/privkey.pem" } location "/.well-known/caldav" { block return 301 "https://$SERVER_NAME/dav.php" } location "/.well-known/carddav" { block return 301 "https://$SERVER_NAME/dav.php" } location "/.ht*" { block } location "/Core*" { block } location "/Specific*" { block } location "*.php*" { fastcgi socket "/run/php-fpm.sock" } }
Reste à recharger httpd avec rcctl reload httpd
. Vous pouvez désormais vous
rendre à l'adresse https://dav.votreserveur.net pour terminer l'installation.
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-thunderbird-et-lightning.html.
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 et sqlite.
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 :
# curl -o /tmp/dokuwiki.tgz "http://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz"
Extraction de l'archive :
# cd /var/www/htdocs # tar xvzf /tmp/dokuwiki.tgz
On renomme le dossier et on change les droits :
# mv dokuwiki-* wiki # chown -R www:daemon wiki
La configuration de httpd peut se réaliser ainsi dans le fichier
/etc/httpd.conf
:
server "wiki.exemple.net" { listen on * port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" no log } server "wiki.exemple.net" { listen on * tls port 443 root "/htdocs/wiki" directory index doku.php connection max request body 537919488 hsts tls { certificate "/etc/letsencrypt/live/exemple.net/fullchain.pem" key "/etc/letsencrypt/live/exemple.net/privkey.pem" } location "*.php*" { fastcgi socket "/run/php-fpm.sock" } location "/data*" { block } location "/conf*" { block } location "/bin*" { block } location "/inc*" { 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
# rm /var/www/htdocs/wiki/install.php
Webalizer est un outil qui peut générer graphiques et tableaux à partir des logs de votre serveur. En un clin d'oeil vous pourrez trouver à propos de votre site :
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 ublock. Cependant, les données récoltées sont plus pertinentes. Vous voudrez donc peut-être compléter l'installation de webalizer avec piwik.
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 :
# pkg_add webalizer
Pour le configurer, nous allons utiliser comme base le modèle fournit. On le
copie par exemple dans /etc/
:
# cp /usr/local/share/examples/webalizer/sample.conf /etc/webalizer.votreserveur.conf
Éditez ce nouveau fichier pour l'adapter à vos besoins. Voici quelques options pratiques que vous voudrez certainement changer :
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érez-vous à la partie sur
httpd pour configurer votre serveur http et accéder aux statistiques.
HideSite *votreserveur.net
et HideReferrer votreserveur.net/
: On cache les liens provenant de ses propres clics.
HideURL *.css , HideURL *.woff
: On cache les extensions 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 :
# webalizer -c /etc/webalizer.votreserveur.conf
Et hop, toutes les pages html et les graphiques sont dans le dossier définit 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 :
server "votreserveur.net" { listen on * tls port 443 root "/htdocs/votreserveur.net" directory index index.html log style combined hsts tls { certificate "/etc/letsencrypt/live/votreserveur.net/fullchain.pem" key "/etc/letsencrypt/live/votreserveur.net/privkey.pem" } }
N'oubliez pas de recharger httpd avec rcctl reload httpd
.
Mais on doit lancer la commande 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 le fichier
/etc/newsyslog.conf
qui ressemble à ça :
# $OpenBSD: newsyslog.conf,v 1.34 2015/10/14 20:54:07 millert Exp $ # # configuration file for newsyslog # # logfile_name owner:group mode count size when flags /var/cron/log root:wheel 600 3 10 * Z /var/log/aculog uucp:dialer 660 7 * 24 Z /var/log/authlog root:wheel 640 7 * 168 Z /var/log/daemon 640 5 30 * Z /var/log/lpd-errs 640 7 10 * Z /var/log/maillog 640 7 * 24 Z /var/log/messages 644 5 30 * Z /var/log/secure 600 7 * 168 Z /var/log/wtmp 644 7 * $W6D4 B /var/log/xferlog 640 7 250 * Z /var/log/pflog 600 3 250 * ZB "pkill -HUP -u root -U root -t - -x pflogd" /var/www/logs/access.log 644 4 * $W0 Z "pkill -USR1 -u root -U root -x httpd" /var/www/logs/error.log 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 à :
/var/www/logs/access.log 644 4 * $W0 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 forçant à archiver les logs et en le faisant parler. Vous devriez obtenir quelque chose de la sorte :
# newsyslog -vF /var/cron/log <3Z>: size (KB): 7.24 [10] --> trimming log.... /var/log/authlog <7Z>: age (hr): 88 [168] --> trimming log.... /var/log/daemon <5Z>: size (KB): 0.41 [30] --> trimming log.... /var/log/lpd-errs <7Z>: size (KB): 2.02 [10] --> trimming log.... /var/log/maillog <7Z>: age (hr): 16 [24] --> trimming log.... /var/log/messages <5Z>: size (KB): 0.45 [30] --> trimming log.... /var/log/secure <7Z>: age (hr): -1 [168] --> trimming log.... /var/log/wtmp <7B>: --> trimming log.... /var/log/xferlog <7Z>: size (KB): 0.00 [250] --> trimming log.... /var/log/pflog <3ZB>: size (KB): 64.26 [250] --> trimming log.... /var/www/logs/access.log <4Z>: --> trimming log.... /var/www/logs/error.log <7Z>: size (KB): 212.87 [250] --> trimming log.... /var/www/logs/dontpanic.log <7Z>: size (KB): 149.15 [250] --> trimming log.... /var/www/logs/mateteestmalade.log <7Z>: size (KB): 3.93 [250] --> trimming log.... /var/www/logs/cartrongerard.log <7Z>: size (KB): 53.59 [250] --> trimming log.... Webalizer Xtended RB30 (06-Apr-2014) / [OpenBSD http://www.openbsd.org/] 5.9 amd64 / English Copyright 2005-2014 by Patrick K. Frei Based on Webalizer V2.23-08 Using logfile /var/www/logs/access.log (clf) Using GeoIP Country Edition (/var/db/GeoIP/GeoIP.dat) GEO-106FREE 20151201 Build 1 Copyright (c) 2015 MaxMind Inc All Rights Reserved Creating output in /var/www/htdocs/yeuxdelibad.net/stats Hostname for reports is 'yeuxdelibad.net' Reading history file... webalizer.hist Skipping bad record (1) No valid records found! Generating summary report
Il y a bien les messages de webalizer, il a bien été exécuté.
Et voilà, les statistiques sont générées à chaque fois avant que les logs soient archivés.
Piwik est nettement plus lourd. Si votre serveur a une puissance limitée, préférez webalizer.
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 ainsi que celle sur MySQL.
Pour php, installez et activez ces paquets : php5-curl php5-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). Voici un récapitulatif tiré de la documentation de piwik:
# mysql -u root -p mysql> CREATE DATABASE piwik_db_name_here; mysql> CREATE USER 'piwik'@'localhost' IDENTIFIED BY 'password'; mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON piwik_db_name_here.* TO 'piwik'@'localhost';
Ensuite, on télécharge piwik dans le dossier /var/www/htdocs/piwik
:
# mkdir -p /var/www/htdocs/piwik # cd /var/www/htdocs/piwik # curl -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
:
server "stats.votreserveur.net" { listen on * tls port 443 root "/htdocs/piwik/piwik/" directory index index.php hsts tls { certificate "/etc/letsencrypt/live/votreserveur.net/fullchain.pem" key "/etc/letsencrypt/live/votreserveur.net/privkey.pem" } location "*.php*" { fastcgi socket "/run/php-fpm.sock" } }
Modifiez les droits sur ce dossier :
# 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é.
Ce document n'est pas le fruit de mon invention, mais rassemble des informations glanées ci et là.
Je tiens aussi à remercier Stéphane qui m'a beaucoup aidé dans ma découverte d'OpenBSD, ainsi que Fred Galusik.
Voici plusieurs liens énoncés au cours de ce document, plus ou moins dans leur ordre d'apparition :
Le site lestencrypt.org fournit un client permettant d'obtenir un certificat qui sera automatiquement considéré "de confiance" par tous les navigateurs. C'est un service absolument génial tout à fait adapté à l'auto-hébergement.
Tout d'abord, installez letsencrypt, disponible dans les paquets d'OpenBSD.
# pkg_add letsencrypt
Si vous avez déjà un serveur http en marche, vous pouvez obtenir un certificat ainsi :
# letsencrypt certonly --webroot --rsa-key-size 4096 -w /var/www/htdocs/votresite -d votredomaine.com -d www.votredomaine.com
Adaptez les éléments suivants :
/var/www/htdocs/votresite
: il faut indiquer le dossier
qui contient votre site web.
-d votredomaine.com
: à remplacer par votre nom de domaine.
Notez que vous pouvez ajouter autant de domaines et
sous-domaines que vous voulez en rajoutant une option -d
à
chaque fois.
Si le serveur http n'est pas en fonctionnement, récupérez le certificat avec cette commande :
# letsencrypt certonly --standalone --rsa-key-size 4096 -d votredomaine.com -d www.votredomaine.com -d autredomaine...
À l'avenir, pour renouveler les certificats, il faudra simplement
lancer letsencrypt renew
. En cas de doute, n'hésitez pas à vous
référer à la
documentation officielle.
Le certificat obtenu se trouve dans le dossier :
/etc/letsencrypt/live/votredomaine.com/
.
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 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 :
# openssl req -x509 -sha512 -nodes -days 365 -newkey rsa:4096 \ -keyout /etc/ssl/private/certificat.pem \ -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 :
# chown root:root /etc/ssl/private/certificat.pem # 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.
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 l’internet, 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 (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.
Une fois votre domaine acquis, configurer les champs DNS pour le faire pointer vers votre adresse IP. Pour ça, référez vous à la partie sur les DNS .
Lorsque un ordinateur doit aller sur un site dont le nom est "mondomaine.com", alors il va demander à un serveur DNS (qu'on appelle 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 :
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 :
Vous pouvez aussi la retrouver en tapant dans un terminal :
# /sbin/ifconfig
Notez qu'il existe plusieurs types d’enregistrements :
12.123.123.12
;
2001:db8:4212:4212:4212:4212:4212:4212
;
blog.mondomaine.com CNAME mondomaine.com wiki.mondomaine.com CNAME mondomaine.com webmail.mondomaine.com CNAME mondomaine.com
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 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 :
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.) :
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.
Un service ne veut plus démarrer? Votre site web n'est plus accessible? Voici quelques astuces :
httpd -d
.
/usr/local/share/doc/pkg-readmes
s'il y a des
précisions sur le programme posant problème.
tail
:
# tail -f /var/log/messagesPour un site web :
# tail -f /var/www/logs/*Pour un problème d'identification :
# tail -f /var/log/authlog
man
de la commande problématique.
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 :
$ ls -l total 120 -rw-r--r-- 1 www daemon 18092 May 5 17:09 COPYING -rw-r--r-- 1 www daemon 306 May 5 17:09 README -rw-r--r-- 1 www daemon 23 May 5 17:09 VERSION drwxr-xr-x 2 www daemon 512 May 5 17:10 bin drwxr-xr-x 2 www daemon 1024 May 5 17:10 conf drwxr-xr-x 12 www daemon 512 May 5 17:10 data -rw-r--r-- 1 www daemon 3674 May 5 17:09 doku.php -rw-r--r-- 1 www daemon 19372 May 5 17:09 feed.php drwxr-xr-x 6 www daemon 1536 May 5 17:10 inc -rw-r--r-- 1 www daemon 182 May 5 17:09 index.php drwxr-xr-x 8 www daemon 512 May 5 17:10 lib 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 :
<permissions> <inode> <proprietaire> <groupe> <taille> <date dernier acces> <nom du ficher>
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).
# chown <proprietaire>:<groupe> nom_du_fichier
Les lettres en début de ligne décrivent les permissions accordées au fichier. Nous pouvons retenir deux choses :
d
, alors il s'agit d'un répertoire. Sinon,
c'est un fichier (sauf exceptions).
drwxr-xr-x 2 www daemon 512 May 5 17:10 binOn voit qu'il s'agit d'un répertoire. Ensuite :
rwx
: Le propriétaire www
peut :
r
w
x
r-x
: ceux appartenant au groupe daemon
peuvent
r
x
r-x
: tous les autres peuvent :
r
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>±<permission>
où :
<personne>
peut décrire l'utilisateur (u
), le groupe (g
), les autres
(o
) ou tous à la fois (a
).
+
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
.
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).
Jusque là, un ordinateur finit par trouver le bon mot de passe par essais successifs en quelques secondes voire quelques minutes. Mais si on allonge encore un peu le mot de passe :
Ça commence à faire beaucoup! Rajoutez 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.
Oubliez donc les histoires de symboles spéciaux à inclure absolument, ce n'est pas utile de torturer vos méninges.
Quelques idées :
Respirer de la compote fait tousser
devient
Respirerdelacompotefaittousser
.
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):
$ openssl rand 15 -base64
ou plus classique :
$ dd if=/dev/urandom count=128 bs=1 2>&1 | md5 | cut -b-15
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 |
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 le fichier /etc/iloverocknroll
, vous
taperez ceci :
$ vi /etc/iloverocknroll
Apparaîtra alors le contenu de ce fichier dans le terminal :
Pour pouvoir écrire et modifier le fichier, tapez sur la touche i
.
Vous voilà en mode édition, vous pouvez taper tout ce que vous voulez. Afin de quitter le mode édition, appuyez sur la touche échap.
Pour enregistrer les modifications, tapez sur :
puis sur w
.
Validez avec entrée.
On peut maintenant quitter en tapant :q
. Notez que vous pouvez aller
plus vite en tapant directement :wq
.
Afin de chercher un texte, ce qui est bien utile dans les gros fichiers,
appuyez sur la touche /
puis tapez votre recherche.
Si vous souhaitez quitter sans enregistrer vos modifications, tapez
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.
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
.
rcctl enable service
rcctl start service
rcctl stop service
rcctl restart service
rcctl reload service
rcctl set service flags "-v -autre_option
Si vous préférez la méthode manuelle, alors il vous est possible
d'éditer directement le fichier /etc/rc.conf.local
qui gère les
services lancés au démarrage.
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 rajouter 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 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 :
sousdomaine IN CNAME domaine.net.Le point final est important!
# See pf.conf(5) and /etc/examples/pf.conf ## Configuration generale ## # voir /etc/services pour les noms des ports ext_if = "re0" # interface ssh_port = "2222" # port ssh http_ports = "{ www https }" # ports http(s) mail_ports = "{ submission imaps }" # ports mails tcp_pass = "{ 8888 domain ipp }" # ports tcp ouverts udp_pass = "{ domain ipp }" # ports udp ouverts set block-policy drop # bloque silencieusement set skip on lo # Pas de filtre en local set limit table-entries 400000 ## tables pour les vilains table <ssh_abuse> persist table <http_abuse> persist table <mail_abuse> persist ## Traitement des paquets ## match in all scrub (no-df) # Paquets partiels block in quick from urpf-failed # Protection pour le vol d'ip ## Les règles du [parefeu #pf] ## # on bloque tout par defaut block all # on bloque les ip blacklistees block in log quick proto tcp from <http_abuse> to any port $http_ports block in log quick proto tcp from <ssh_abuse> to any port $ssh_port # Si + de 3 connections toutes les 60 secondes sur le port ssh # on rajoute l'ip pour la bloquer. pass in on $ext_if proto tcp to any port $ssh_port flags S/SA keep state \ (max-src-conn-rate 3/60, overload <ssh_abuse> flush global) # Si + de 40 connections toutes les 5 secondes sur les ports http(s) # ou si elle essaie de se connecter + de 100 fois # on rajoute l'ip pour la bloquer. pass in on $ext_if proto tcp to any port $http_ports flags S/SA keep state \ (max-src-conn 100, max-src-conn-rate 40/5, overload <http_abuse> flush) # Protection bruteforce pour les mails pass in on $ext_if proto tcp to any port $mail_ports flags S/SA keep state \ (max-src-conn-rate 10/60, overload <mail_abuse> flush global) # on ouvre les autres ports pass in quick on $ext_if proto tcp to any port $tcp_pass keep state pass in quick on $ext_if proto udp to any port $udp_pass keep state # on laisse entrer les mails pass in log quick on $ext_if proto tcp from any to any port smtp # on autorise le ping pass quick inet6 proto ipv6-icmp all icmp6-type { echoreq, unreach } pass quick inet proto icmp all icmp-type { echoreq, unreach } # tout ouvert en sortie pass out on $ext_if proto { tcp udp icmp } all modulate state
server "default" { listen on * port 80 root "/htdocs/votreserveur.net" } types { include "/usr/share/misc/mime.types" } server "votreserveur.net" { listen on * port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" } server "votreserveur.net" { alias "www.votreserveur.net" listen on * tls port 443 root "/htdocs/votreserveur.net" directory index index.html log style combined hsts tls { certificate "/etc/letsencrypt/live/votreserveur.net/fullchain.pem" key "/etc/letsencrypt/live/votreserveur.net/privkey.pem" } location "/Blog/" { directory index index.php } location "*.php*" { fastcgi socket "/run/php-fpm.sock" } location "/DL/PDF/" { directory auto index } location "/educ/" { authenticate "education" with "/htdocs/educ.htpw" directory auto index } } server "site2.votreserveur.net" { alias "www.site2.votreserveur.net" listen on * port 80 listen on * tls port 443 root "/htdocs/site2" directory index index.html log access "site2.log" hsts tls { certificate "/etc/letsencrypt/live/votreserveur.net/fullchain.pem" key "/etc/letsencrypt/live/votreserveur.net/privkey.pem" } location "*.php*" { fastcgi socket "/run/php-fpm.sock" } location "/downloads/" { directory index index.php } } server "autresite.votreserveur.net" { listen on * port 80 root "/htdocs/autresite" directory index index.html log access "mateteestmalade.log" } server "deb.votreserveur.net" { listen on * port 80 root "/htdocs/deb" directory auto index no log } server "webmail.votreserveur.net" { listen on * port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" no log } server "webmail.votreserveur.net" { listen on * tls port 443 root "/roundcubemail" directory index index.php no log hsts tls { certificate "/etc/letsencrypt/live/votreserveur.net/fullchain.pem" key "/etc/letsencrypt/live/votreserveur.net/privkey.pem" } location "*.php*" { fastcgi socket "/run/php-fpm.sock" } # Deny Protected directories location "/config" { block } location "/logs" { block } location "/logs" { block } location "/README" { block } location "/INSTALL" { block } location "/LICENSE" { block } location "/CHANGELOG" { block } location "/UPGRADING" { block } location "/bin" { block } location "/SQL" { block } location "/db" { block } location "*.md" { block } location "\.*" { block } } server "wiki.votreserveur.net" { listen on * port 80 listen on * tls port 443 root "/htdocs/dokuwiki" directory index doku.php no log hsts tls { certificate "/etc/letsencrypt/live/votreserveur.net/fullchain.pem" key "/etc/letsencrypt/live/votreserveur.net/privkey.pem" } location "*.php*" { fastcgi socket "/run/php-fpm.sock" } location "/data*" { block } location "/conf*" { block } location "/bin*" { block } location "/inc*" { block } } server "cloud.votreserveur.net" { listen on * port 80 block return 301 "https://$SERVER_NAME$REQUEST_URI" log access "owncloud.log" } server "cloud.votreserveur.net" { listen on * tls port 443 root "/htdocs/owncloud" directory index index.php hsts tls { certificate "/etc/letsencrypt/live/votreserveur.net/fullchain.pem" key "/etc/letsencrypt/live/votreserveur.net/privkey.pem" } log access "owncloud.log" log error "owncloud.log" # Set max upload size to 513M (in bytes) connection max request body 537919488 # First deny access to the specified files location "/db_structure.xml" { block } location "/.ht*" { block } location "/README" { block } location "*/data*" { block } location "*/config*" { block } # Any other PHP file location "/*.php*" { fastcgi socket "/run/php-fpm.sock" } }
filter filter-pause pause filter filter-regex regex filter filter-dnsbl-sorbs dnsbl filter filter-dnsbl-spamcop dnsbl "-h bl.spamcop.net" filter filter-dnsbl-spamhaus dnsbl "-h sbl-xbl.spamhaus.org" filter filter-spamassassin spamassassin "-s reject" filter all chain filter-pause filter-regex filter-dnsbl-sorbs filter-dnsbl-spamcop filter-dnsbl-spamhaus filter-spamassassin table aliases file:/etc/mail/aliases pki mail.votreserveur.net key "/etc/ssl/private/mail.votreserveur.net.key" pki mail.votreserveur.net certificate "/etc/ssl/certs/mail.votreserveur.net.crt" # Deliver listen on lo0 port 10028 tag DKIM listen on lo0 listen on re0 port 25 filter all hostname mail.votreserveur.net tls pki mail.votreserveur.net listen on re0 port 587 hostname mail.votreserveur.net tls-require pki mail.votreserveur.net auth accept from local for local alias <aliases> deliver to maildir "~/Maildir" accept from any for domain "votreserveur.net" deliver to maildir "~/Maildir" # dkim tagged can be sent accept tagged DKIM for any relay # if not dkim tagged, send it to dkimproxy accept from local for any relay via smtp://127.0.0.1:10027