{"id":2633,"date":"2021-01-23T15:24:12","date_gmt":"2021-01-23T15:24:12","guid":{"rendered":"https:\/\/oursoide.wordpress.com\/?p=2633"},"modified":"2021-01-23T15:24:12","modified_gmt":"2021-01-23T15:24:12","slug":"helios-64-part-3-ajout-dun-service-transmission","status":"publish","type":"post","link":"https:\/\/blog.nanuq.me\/?p=2633","title":{"rendered":"[ARCHIVE] Helios 64 \/ Part 3 \/ Ajout d&rsquo;un service (Transmission)"},"content":{"rendered":"<p><em>\ud83d\uddd3\ufe0f Note : Cet article est une archive import\u00e9e de mon ancien blog. Certaines informations peuvent ne plus \u00eatre \u00e0 jour.<\/em><\/p>\n<p>Ou comment installer et configurer Transmission sur notre Helios 64<\/p>\n<p><!--more--><\/p>\n<p>Cet article fait suite \u00e0 cet <a href=\"https:\/\/blog.nanuq.me\/2021\/01\/13\/helios64\/\">article ci<\/a> , et cet <a href=\"https:\/\/blog.nanuq.me\/2021\/01\/22\/helios-64-part-2-installons-un-serveur-web-caddy\/\">article l\u00e0<\/a>.<\/p>\n<h1>Disclaimer<\/h1>\n<p>Bon, je vous refais pas le topo complet mais pour faire vite et bien :<br>\nJe suis ni d\u00e9veloppeur, ni programmeur, ni informaticien, juste un ours un peu geek qui tente des trucs ; et des fois : \u00e7a marche ! Ce qui suit est le r\u00e9sultat de mes nombreux \u00e9checs et de ma compr\u00e9hension globale du biniou. Il doit y avoir d&rsquo;autres mani\u00e8res de faire, et peut \u00eatre des trucs \u00ab\u00a0mieux\u00a0\u00bb ou \u00ab\u00a0plus simple\u00a0\u00bb. Je consid\u00e8re d\u00e9sormais que je peux me permettre de vulgariser un peu moins (je ne pr\u00e9ciserai pas qu&rsquo;il faut se connecter via SSH ou se genre de chose&#8230;) Enfin, il y a certainement des coquilles, n&rsquo;h\u00e9sitez pas \u00e0 me faire remonter l&rsquo;info.<\/p>\n<p>&nbsp;<\/p>\n<h1>Torrent<\/h1>\n<p>&nbsp;<\/p>\n<h2>C&rsquo;est quoi ?<\/h2>\n<p>Sur mon Helios64; je vais installer un serveur Torrent. Si vous ne savez pas ce que c&rsquo;est, j&rsquo;en ai rapidement d\u00e9j\u00e0 <a href=\"https:\/\/blog.nanuq.me\/2020\/10\/12\/torrent-quand-les-petits-ruisseaux-font-les-grandes-rivieres\/\">parl\u00e9 ici !<\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>Choix du logiciel<\/h2>\n<p>Il en existe une ribambelle , en voici quelques un : <a href=\"https:\/\/deluge-torrent.org\/\">Deluge<\/a>, <a href=\"https:\/\/www.qbittorrent.org\/\">qBittorent<\/a>, <a href=\"https:\/\/transmissionbt.com\/\">Transmission<\/a> &#8230;<\/p>\n<p>Personnellement je vais choisir Transmission, parceque j&rsquo;ai l&rsquo;habitude de faire avec lui (c&rsquo;\u00e9tait \u00e7a aussi sur Yunohost (<a href=\"https:\/\/blog.nanuq.me\/2020\/05\/09\/comme-sur-un-petit-nuage\/\">cf cet article<\/a>) )<\/p>\n<p>&nbsp;<\/p>\n<h2>BONUS : Ajout d&rsquo;espace de stockage (facultatif)<\/h2>\n<p>Je ne sais pas si vous vous souvenez mais mon Helios64 contient un disque dur de 1To. J&rsquo;aimerai en profiter car l&rsquo;eMMC ne fait que quelques giga&#8230; L&rsquo;id\u00e9e c&rsquo;est donc d&rsquo;utiliser toute cette m\u00e9moire de stockage plut\u00f4t que de se limiter \u00e0 la m\u00e9moire eMMC. Ca sera super utile pour stocker les fichiers qui seront \u00e9chang\u00e9 via bittorrent. Ce qui suit est fortement inspir\u00e9 de <a href=\"https:\/\/yunohost.org\/#\/external_storage\">ceci<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3>1 &#8211; Identifier le disque dur<\/h3>\n<pre>On tape la commande <code class=\"hljs lang-bash\">lsblk<\/code> qui doit donner quelquechose comme \u00e7a : <code class=\"hljs lang-bash\">NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT\nsda            8:0    0 931.5G  0 disk \n\u2514\u2500sda1         8:1    0 931.5G  0 part \nmmcblk1      179:0    0  14.6G  0 disk \n\u2514\u2500mmcblk1p1  179:1    0  14.4G  0 part \/\nmmcblk1boot0 179:32   0     4M  1 disk \nmmcblk1boot1 179:64   0     4M  1 disk \nzram0        251:0    0   1.9G  0 disk [SWAP]\nzram1        251:1    0    50M  0 disk \/var\/log<\/code><\/pre>\n<p>Avec la colonne <em>SIZE<\/em> j&rsquo;arrive \u00e0 d\u00e9terminer que mon disque dur de 1To semble \u00eatre sda1. Si vous vous demandez pourquoi le 1To donne 931.5G et pas 1000 G <a href=\"https:\/\/www.tech2tech.fr\/pourquoi-la-capacite-des-disques-dur-nest-jamais-celle-annoncee\/\">c&rsquo;est ici que \u00e7a se passe.<\/a><br>\nSi j&rsquo;avais plusieurs disques, je verrai sda, sdb, sdc, etc&#8230;<\/p>\n<h3><\/h3>\n<h3>2 &#8211; Cr\u00e9er la partition<\/h3>\n<p>Mon disque dur \u00e9tant neuf, il n&rsquo;a pas de partition dessus. Il faut donc la cr\u00e9er. On peut le faire en ligne de commande. Dans mon cas je vais taper :<\/p>\n<p><code class=\"hljs lang-bash\">fidsk \/dev\/sda<br>\n<\/code><strong>\/!\\ remplacer sda par la configuration que vous avez vous localement \/!\\<br>\n<\/strong><br>\nPuis, il faut :<\/p>\n<ul>\n<li>taper <code class=\"hljs lang-bash\">n<\/code> pour nouvelle partition, puis <strong>entr\u00e9e<\/strong><\/li>\n<li>taper <code class=\"hljs lang-bash\">p<\/code> pour indiquer une partition primaire, puis <strong>entr\u00e9e<\/strong><\/li>\n<li>taper <code class=\"hljs lang-bash\">1<\/code> pour indiquer que c&rsquo;est la premi\u00e8re partition, puis <strong>entr\u00e9e<\/strong><\/li>\n<li>appuyez sur <strong>entr\u00e9e<\/strong> \u00e0 nouveau pour valider la configuration par d\u00e9faut<\/li>\n<li>appuyez une nouvelle fois sur <strong>entr\u00e9e<\/strong> pour valider la configuration par d\u00e9faut (ici, on va utiliser tout l&rsquo;espace disponible)<\/li>\n<li>enfin taper <code class=\"hljs lang-bash\">w<\/code> pour valider l&rsquo;\u00e9criture de cette nouvelle partition et appuyez sur<strong> entr\u00e9e<\/strong>. Patientez jusqu&rsquo;\u00e0 ce que vous ayez \u00e0 nouveau la main.<\/li>\n<\/ul>\n<p>Pour plus d&rsquo;informations \u00e0 propos de fdisk, <a href=\"https:\/\/debian-facile.org\/doc:systeme:fdisk\">c&rsquo;est par ici que \u00e7a se passe.<\/a><\/p>\n<h3><\/h3>\n<h3>3 &#8211; Formater la partition<\/h3>\n<p>Si n\u00e9cessaire, vous pouvez formater la partition :<\/p>\n<p><code class=\"hljs lang-bash\">mkfs.ext4 \/dev\/sda1<\/code><\/p>\n<ul>\n<li>ext4 correspond au format de fichier<\/li>\n<li><strong>\/!\\ attention, ici je pr\u00e9cise sda1\u00a0 : <\/strong> sda pour le disque \u00ab\u00a0sda\u00a0\u00bb et \u00ab\u00a01\u00a0\u00bb pour la premiere partition. <strong>A adapter selon votre configuration !<\/strong><\/li>\n<\/ul>\n<p>Plus d&rsquo;information concernant <a href=\"https:\/\/debian-facile.org\/doc:systeme:mkfs\">mkfs<\/a> c&rsquo;est ici !<\/p>\n<p>&nbsp;<\/p>\n<h3>4 &#8211; Monter le disque dur<\/h3>\n<p>On vas d&rsquo;abord cr\u00e9er un r\u00e9pertoire qui sera notre point de montage du disque dur. Pour ma part j&rsquo;ai choisis <code class=\"hljs lang-bash\">\/hdd<\/code> mais ca peut etre <code class=\"hljs lang-bash\">\/media<\/code> ou meme <code class=\"hljs lang-bash\">\/toto\/bidule\/truc\/muche<\/code> !<\/p>\n<p><code class=\"hljs lang-bash\">mkdir \/hdd<\/code><br>\n(\u00e0 adapter selon votre configuration)<\/p>\n<p>Puis, on va monter le disque dur sur ce r\u00e9pertoire.<\/p>\n<p><code class=\"hljs lang-bash\">mount \/dev\/sda1 \/hdd<\/code><br>\n(encore une fois : \u00e0 adapter selon votre configuration ! Chez moi c&rsquo;est<code class=\"hljs lang-bash\">sda1<\/code> et <code class=\"hljs lang-bash\">\/hdd<\/code> chez vous, ca sera peut \u00eatre <code class=\"hljs lang-bash\">sdc1<\/code> et <code class=\"hljs lang-bash\">\/media\/documents<\/code> par exemple !)<\/p>\n<p>&nbsp;<\/p>\n<h3>5 &#8211; Monter le disque automatiquement au d\u00e9marrage<\/h3>\n<p>En cas de red\u00e9marrage, il faudra remonter le disque \u00e0 la main (cf <code class=\"hljs lang-bash\">mount \/dev\/sda1 \/hdd<\/code> ) ce qui n&rsquo;est pas pratique. Heureusement, on peut demander \u00e0 notre machine de faire \u00e7a automatiquement pour nous \u00e0 chaque d\u00e9marrage.<\/p>\n<p><code class=\"hljs lang-bash\">blkid | grep <span class=\"hljs-string\">\"\/dev\/sda1:<\/span><\/code><br>\n(\u00e0 adapter selon votre configuration ! C&rsquo;est peut \u00eatre pas <code class=\"hljs lang-bash\">sda1<\/code> chez vous&#8230;)<\/p>\n<p>Cette commande devrait vous retourner quelquechose comme :<\/p>\n<p><code class=\"hljs lang-bash\"><span class=\"hljs-comment\">\/dev\/sda1:UUID=\"cea0b7ae-2fbc-4f01-8884-3cb5884c8bb7\" TYPE=\"ext4\" PARTUUID=\"34e4b02c-02\"<\/span><\/code><\/p>\n<p><a href=\"https:\/\/fr.wikipedia.org\/wiki\/Universally_unique_identifier\">L&rsquo;UUID pour Universsaly Unique Identifier<\/a> est (comme son nom l&rsquo;indique) un identifiant unique pour rep\u00e9rer votre disque dur avec un petit nom rien qu&rsquo;\u00e0 lui. Et c&rsquo;est avec ce nom qu&rsquo;on va d\u00e9signer le disque dur \u00e0 la machine.<\/p>\n<p>Pour \u00e7a, il faut \u00e9diter un fichier de configuration :<\/p>\n<p><code class=\"hljs lang-bash\">nano \/etc\/fstab<\/code><br>\n(j&rsquo;utilise <strong>nano<\/strong> mais \u00e9videmment vous pouvez utiliser ce que vous voulez comme \u00e9diteur&#8230; <a href=\"https:\/\/openclassrooms.com\/fr\/courses\/43538-reprenez-le-controle-a-laide-de-linux\/39267-nano-lediteur-de-texte-du-debutant\">Cliquez ici si vous souhaitez des informations sur nano<\/a>)<\/p>\n<p>Normalement, il doit y avoir d\u00e9ja une (ou plusieurs) lignes dans ce fichier. Il ne faut pas s&rsquo;en pr\u00e9ocupper mais simplement rajouter la ligne suivante :<\/p>\n<p><code class=\"hljs lang-bash\">UUID=<span class=\"hljs-string\">\"cea0b7ae-2fbc-4f01-8884-3cb5884c8bb7\"<\/span> \/hdd ext4 defaults,nofail 0 0<\/code><br>\n<strong>\/!\\ A adapter selon votre configuration. Il faut prendre l&rsquo;UUID que vous avez g\u00e9n\u00e9r\u00e9 juste avant, et remplacer <code class=\"hljs lang-bash\">\/hdd<\/code> par le point de montage que l&rsquo;on a cr\u00e9\u00e9 tout \u00e0 l&rsquo;heure.<\/strong><\/p>\n<p>On peut redemarrer notre machine pour v\u00e9rifier que sa fonctionne. Ainsi, si vous tapez <code class=\"hljs lang-bash\">lsblk<\/code> vous pourrez v\u00e9rifier. Dans mon cas :<\/p>\n<p><code class=\"hljs lang-bash\">\u2514\u2500sda1         8:1    0 931.5G  0 part \/hdd<\/code><br>\n(Dans mon cas c&rsquo;est la ligne relative \u00e0 <code class=\"hljs lang-bash\">sda1<\/code> qui m&rsquo;int\u00e9resse. Je vois que c&rsquo;est mont\u00e9 automatiquement sur <code class=\"hljs lang-bash\">\/hdd<\/code> , c&rsquo;est parfait !)<\/p>\n<h3>6 &#8211; Cr\u00e9er les repertoires<\/h3>\n<p>Nous allons cr\u00e9er deux r\u00e9pertoires pour y d\u00e9poser les t\u00e9l\u00e9chargements complet, et les t\u00e9l\u00e9chargements incomplets.<\/p>\n<p><code class=\"hljs lang-bash\">mkdir -p \/hdd\/downloads \/hdd\/downloads-incomplete<br>\n<\/code><\/p>\n<p>Evidemment, vous pouvez choisir les chemins que vous souhaitez. <strong>C&rsquo;est \u00e0 adapter selon votre configuration.<\/strong><\/p>\n<p>&nbsp;<\/p>\n<h2>Installation de Transmission<\/h2>\n<p>Bien, maintenant, on peut rentrer dans le vif du sujet. Apr\u00e8s une recherche sur les internets : on apprend \u00e0 installer transmission avec les commandes suivantes :<\/p>\n<pre><code class=\"cmd\"><span class=\"bash\">sudo apt update\nsudo apt-get install transmission-cli transmission-common transmission-daemon<\/span><\/code><\/pre>\n<p>Normalement, apr\u00e8s l&rsquo;installation, transmission se met automatiquement en marche. Sinon :<\/p>\n<pre><code>sudo systemctl start transmission-daemon<\/code><\/pre>\n<h2>Connexion en local<\/h2>\n<p>Dans votre navigateur internet, vous pouvez taper votre adresse IP (prenez la votre) local suivi du port 9091 (le port utilis\u00e9 par bittorrent) :<\/p>\n<p><code>192.168.x.y:9091<\/code><\/p>\n<p>Vu que l&rsquo;on a rien param\u00e9trer on doit avoir cette erreur :<\/p>\n<blockquote><p><em>Unauthorized IP Address.<\/em><\/p>\n<p><em>Either disable the IP address whitelist or add your address to it.<\/em><\/p>\n<p><em>If you&rsquo;re editing <strong>settings.json<\/strong>, see the &lsquo;rpc-whitelist&rsquo; and &lsquo;rpc-whitelist-enabled&rsquo; entries.<\/em><\/p>\n<p><em>If you&rsquo;re still using ACLs, use a whitelist instead. See the transmission-daemon for details.<\/em><\/p><\/blockquote>\n<p>Bien, on va maintenant aller configurer le fichier <em><strong>\u00ab\u00a0settings.json\u00a0\u00bb<\/strong><\/em> comme on nous le demande si gentiment&#8230; Mais avant, il faut couper Transmission !<\/p>\n<p><code>sudo systemctl stop transmission-daemon<\/code><\/p>\n<h2>Param\u00e9trage<\/h2>\n<p>Le fichier <em><strong>settings.json<\/strong><\/em> se situe par d\u00e9faut \u00e0 cet emplacement :<\/p>\n<p><code>\/etc\/transmission-daemon\/settings.json<\/code><\/p>\n<p>Si il n&rsquo;y est pas, une petite recherche avec :<\/p>\n<p><code>sudo find \/ -name \"settings.json\"<\/code><\/p>\n<p>Une fois localis\u00e9 on va d&rsquo;abord faire une copie de sauvegarde (on sait jamais, si on fait une erreur on pourra r\u00e9tablir par d\u00e9faut) . Pour se rendre dans le bon r\u00e9pertoire :<\/p>\n<p><code>cd \/etc\/transmission-daemon<\/code><\/p>\n<p>Pour faire la copie de sauvegarde (le nom settings.backup est arbitraire)<\/p>\n<p><code><\/code><code>cp settings.json settings.backup<\/code><\/p>\n<p>Puis, on va \u00e9diter le fichier .json :<\/p>\n<p><code>nano settings.json<\/code><\/p>\n<p>&nbsp;<\/p>\n<p>Vous allez voir un long fichier de configuration. Attardons nous sur quelques lignes, et rempla\u00e7ons les valeurs par d\u00e9faut par \u00e7a :<strong> (\u00e0 adapter selon votre configuration)<\/strong><\/p>\n<ul>\n<li>Sp\u00e9cifions le r\u00e9pertoire des t\u00e9l\u00e9chargements :\n<ul>\n<li><strong>\u00ab\u00a0download-dir\u00a0\u00bb : \u00ab\u00a0\/hdd\/downloads\u00a0\u00bb,<\/strong><\/li>\n<\/ul>\n<\/li>\n<li>Celui des t\u00e9l\u00e9chargements \u00ab\u00a0en cours\u00a0\u00bb :\n<ul>\n<li><strong>\u00ab\u00a0incomplete-dir\u00a0\u00bb: \u00ab\u00a0\/hdd\/downloads-incomplete\u00a0\u00bb,<\/strong><\/li>\n<\/ul>\n<\/li>\n<li>Activons le r\u00e9pertoire des t\u00e9l\u00e9chargements \u00ab\u00a0en cours\u00a0\u00bb (si cette option est activ\u00e9, les t\u00e9l\u00e9chargements se feront dans le r\u00e9pertoire sp\u00e9cifi\u00e9s, et ils seront d\u00e9plac\u00e9s dans le r\u00e9pertoire des t\u00e9l\u00e9chargements une fois compl\u00e9t\u00e9)\n<ul>\n<li><strong>\u00ab\u00a0incomplete-dir-enabled\u00a0\u00bb : true,<\/strong><\/li>\n<\/ul>\n<\/li>\n<li>Sp\u00e9cifions la white list, si vous \u00eates dessus : vous avez le droit d&rsquo;y entrer (un peu comme en boite) :\n<ul>\n<li><strong>\u00ab\u00a0rpc-whitelist\u00a0\u00bb: 192.168.x.y,<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>On peut enregistrer et redemarrer transmission :<\/p>\n<p><code>sudo systemctl start transmission-daemon<\/code><\/p>\n<p>Et si on teste <strong>192.168.x.y:9091 dans une barre d&rsquo;adresse :<\/strong><\/p>\n<p><a href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/transmission-1-1.jpeg\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2643 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/transmission-1.jpeg\" alt=\"\" width=\"846\" height=\"324\"><\/a><\/p>\n<p>Youpi !<\/p>\n<p>(Si on vous demande un login \/ mot de passe c&rsquo;est \u00ab\u00a0transmission\u00a0\u00bb et \u00ab\u00a0transmission\u00a0\u00bb \ud83d\ude42<\/p>\n<p>&nbsp;<\/p>\n<h2>Rendre Transmission acessible<\/h2>\n<p>Bien : l\u00e0, on peut acc\u00e9der \u00e0 notre client depuis le r\u00e9seau local. Moi, j&rsquo;aimerai bien y acc\u00e9der depuis n&rsquo;importe o\u00f9. Du coup, si vous avez suivi les \u00e9pisodes pr\u00e9c\u00e9dents vous vous dites :<\/p>\n<blockquote><p>Ha ba facile ! Il suffit d&rsquo;aller d&rsquo;ouvrir les ports et de faire de la redirection comme on l&rsquo;a fait avec Caddy !<\/p><\/blockquote>\n<p>&#8230;<\/p>\n<h1>Non !<\/h1>\n<h3>Explications<\/h3>\n<p>Internet est une zone dangereuse. Le fait d&rsquo;ouvrir un port, ouvre une porte vers ce monde pernicieux. Votre modem\/routeur est l\u00e0 pour s&rsquo;assurer qu&rsquo;aucunes connexions de l&rsquo;ext\u00e9rieur ne puissent facilement se frayer un chemin jusqu&rsquo;\u00e0 vos appareils install\u00e9s sur votre r\u00e9seau local. Il faut donc limiter au maximum les ports ouverts vers le monde ext\u00e9rieur. En aucun un port doit rediriger directement vers une application (pour des raisons de s\u00e9curit\u00e9).<\/p>\n<p>L&rsquo;id\u00e9e, c&rsquo;est de tout faire transiter via le port HTTP (et tant qu&rsquo;a faire HTTPS) , et de rediriger ensuite vers le port local. Ca tombe bien, Caddy sait faire \u00e7a !<\/p>\n<p><a href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/caddy-1-schema-1-1.jpeg\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-2645 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/caddy-schema-1.jpeg\" alt=\"\" width=\"1177\" height=\"499\"><\/a><\/p>\n<p>Si vous souhaitez plus d&rsquo;informations (en anglais) \u00e0 ce sujet, <a href=\"https:\/\/caddy.community\/t\/using-caddy-as-a-reverse-proxy-in-a-home-network\/9427\">je vous recommande ce post.<\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>Cr\u00e9ation d&rsquo;un sous domaine<\/h2>\n<p>Pour que ce soit bien rang\u00e9 chez moi, j&rsquo;ai choisis d&rsquo;utiliser des sous domaines; j&rsquo;aurai le site principal : <strong><em>\u00ab\u00a0https:\/\/monsupersite.truc\u00a0\u00bb<\/em><\/strong> et pour chaque service, un sous domaine.<\/p>\n<ul>\n<li><strong><em>blog.monsupersite.truc<\/em><\/strong><\/li>\n<li><strong><em>torrent.monsupersite.truc<\/em><\/strong><\/li>\n<li><strong><em>rss.monsupersite.truc<\/em><\/strong><\/li>\n<li><em><strong>trucmuche.monsu<\/strong><\/em>&#8230; bref vous avez compris<\/li>\n<\/ul>\n<p>Pour faire \u00e7a, \u00e7a se passe encore au niveau de votre registrar au niveau des enregistrements DNS. Il suffit de rajouter simplement autant de ligne que n\u00e9cessaire selon le mod\u00e9le suivant :<\/p>\n<table class=\"TableWrapper-table_3r9-Q\">\n<tbody class=\"\">\n<tr class=\"TableRow-root_1oCUV\">\n<td class=\"Box-boxSizing-border__V1q3 Box-padding-none_3tJVQ Box-backgroundColor-white_3LQ-e Box-hoverable_1FPu7 Box-paddingY-xsmall_34kFF Box-paddingTop-xsmall_22Udt Box-paddingBottom-xsmall_15dmU Box-paddingX-small_2LJQE Box-paddingLeft-small_1mVBq Box-paddingRight-small_Mw0L5 TableCell-root_2ayRR TableCell-hoverable_IIp0K TableRow-hoverchild_3Mb_0\"><em>nom-du-sous-domaine<\/em><\/td>\n<td class=\"Box-boxSizing-border__V1q3 Box-padding-none_3tJVQ Box-backgroundColor-white_3LQ-e Box-hoverable_1FPu7 Box-paddingY-xsmall_34kFF Box-paddingTop-xsmall_22Udt Box-paddingBottom-xsmall_15dmU Box-paddingX-small_2LJQE Box-paddingLeft-small_1mVBq Box-paddingRight-small_Mw0L5 TableCell-root_2ayRR TableCell-hoverable_IIp0K TableRow-hoverchild_3Mb_0\"><em>CNAME<\/em><\/td>\n<td class=\"Box-boxSizing-border__V1q3 Box-padding-none_3tJVQ Box-backgroundColor-white_3LQ-e Box-hoverable_1FPu7 Box-paddingY-xsmall_34kFF Box-paddingTop-xsmall_22Udt Box-paddingBottom-xsmall_15dmU Box-paddingX-small_2LJQE Box-paddingLeft-small_1mVBq Box-paddingRight-small_Mw0L5 TableCell-root_2ayRR TableCell-hoverable_IIp0K TableRow-hoverchild_3Mb_0\"><em>10800<\/em><\/td>\n<td class=\"Box-boxSizing-border__V1q3 Box-padding-none_3tJVQ Box-backgroundColor-white_3LQ-e Box-hoverable_1FPu7 Box-paddingY-xsmall_34kFF Box-paddingTop-xsmall_22Udt Box-paddingBottom-xsmall_15dmU Box-paddingX-small_2LJQE Box-paddingLeft-small_1mVBq Box-paddingRight-small_Mw0L5 TableCell-root_2ayRR TableCell-hoverable_IIp0K TableRow-hoverchild_3Mb_0 DnsRecordsTableView-tableCell__ZKDlE\"><em>nomdudomaine.truc.<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong><span style=\"text-decoration: underline;\">J&rsquo;attire votre attention qu&rsquo;il y a un point apr\u00e8s \u00ab\u00a0truc\u00a0\u00bb !<\/span><br>\n<\/strong><\/p>\n<p>Si on reprend notre exemple ci dessus \u00e7a donnerait :<\/p>\n<ul>\n<li><em><strong>blog CNAME 10800 monsupersite.truc.<\/strong><\/em><\/li>\n<li><em><strong>torrent CNAME 10800 monsupersite.truc.<\/strong><\/em><\/li>\n<li><em><strong>rss CNAME 10800 monsupersite.truc.<\/strong><\/em><\/li>\n<li><em><strong>trucmuche CNAME 10800 monsupersite.truc.<\/strong><\/em><\/li>\n<li><em>etc &#8230; etc&#8230;<\/em><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Configuration de Caddyfile<\/h2>\n<p>On retourne configurer Caddyfile (<a href=\"https:\/\/blog.nanuq.me\/2021\/01\/22\/helios-64-part-2-installons-un-serveur-web-caddy\/\">cf la partie 2 si vous n&rsquo;avez pas tout suivi&#8230;<\/a>)<\/p>\n<p><code>nano \/etc\/caddy\/Caddyfile<br>\n<\/code><br>\nOn l&rsquo;avait laiss\u00e9 dans cet \u00e9tat l\u00e0 :<\/p>\n<pre class=\"wp-block-code\"><code>[...]\nmonsupersite.truc\n\n# Set this path to your site's directory.\nroot * \/var\/www\/html\n\n# Enable the static file server.\nfile_server\n[...]<\/code><\/pre>\n<p>D\u00e9ja, on va rendre \u00e7a un peu plus pr\u00e9sentable. On peut utiliser des { et des } (mais c&rsquo;est pas obligatoire) et retirer les # :<\/p>\n<pre class=\"wp-block-code\"><code>[...]\nmonsupersite.truc {\n root * \/var\/www\/html\n file_server\n}\n[...]<\/code><\/pre>\n<p>Maintenant, on va rajouter notre nouveau sous domaine :<\/p>\n<p><code>[...]<br>\nmonsupersite.truc {<br>\n<\/code><code><\/code><code>root * \/var\/www\/html<br>\nfile_server<br>\n{<br>\n<\/code><code>torrent.monsupersite.truc{<br>\nreverse_proxy 192.168.x.y:9091<br>\n}<br>\n[...]<\/code><\/p>\n<p>Bon, je le dit une derniere fois : <strong>\u00e0 adapter selon votre configuration !<\/strong><\/p>\n<p>On enregistre, et on recharge caddy avec ces nouveaux param\u00e9tres !<\/p>\n<p><code>cd \/etc\/caddy<br>\ncaddy reload<\/code><\/p>\n<p>Voil\u00e0, et l\u00e0 normalement <strong>https:\/\/torrent.monsupersite.truc<\/strong> est accessible et vous renvoie sur Transmission !<\/p>\n<p>&nbsp;<\/p>\n<h2>S\u00e9curiser un peu tout \u00e7a&#8230;<\/h2>\n<p>Actuellement, bien qu&rsquo;on soit en HTTPS avec un reverse proxy via Caddy (ce qui fait qu&rsquo;on expose pas directement les ports de Transmission) , c&rsquo;est quand meme pas folichon en terme de s\u00e9curit\u00e9.<\/p>\n<p>En effet, n&rsquo;importe qui peut acc\u00e9der \u00e0 votre client torrent et faire ce qu&rsquo;il veut avec. Et \u00e7a, on veut pas !<\/p>\n<p>Bien sur, vous allez me dire que c&rsquo;est s\u00e9curiser par un login et un mot de passe. Qu&rsquo;il suffit de modifier ceux par d\u00e9faut (pour rappel<em> transmission<\/em> et <em>transmission<\/em>) . On peut le faire via le fichier <strong>settings.json <\/strong>c&rsquo;est vrai.<\/p>\n<p>N\u00e9anmoins, si quelqu&rsquo;un de mal attentionn\u00e9 est d\u00e9termin\u00e9, il peut \u00ab\u00a0forcer\u00a0\u00bb le passage en essayant toutes les combinaisons possibles. C&rsquo;est relativement simple \u00e0 faire, avec un petit programme qui va tenter toutes les combinaisons possibles. Ca peut \u00eatre assez long (si vous avez un mot de passe robuste, <a href=\"https:\/\/blog.nanuq.me\/2020\/03\/20\/conseils-de-securite-pour-vous-proteger-des-pirates-informatiques\/\">j&rsquo;en parlais ici.<\/a>) mais quand meme, au bout d&rsquo;un moment ca peut casser. Et puis, ca va aussi saturer et cr\u00e9er un joli bouchon devant chez vous.<\/p>\n<h2>&#8230; avec Fail2ban !<\/h2>\n<p>L&rsquo;id\u00e9e, c&rsquo;est de rajouter une couche de s\u00e9curit\u00e9 avec Fail2ban. C&rsquo;est un petit programme qui va scruter les logs de connexion, et qui va bannir quiconque ayant une activit\u00e9 suspecte. Par exemple, si il voit une connection qui essaye de se connecter 5 fois d&rsquo;affil\u00e9s en se trompant de mot de passe.<\/p>\n<p>Il faut savoir que j&rsquo;ai pas mal gal\u00e9r\u00e9 \u00e0 mettre \u00e7a en place. Je vous \u00e9pargne mes p\u00e9rigrinations mais sachez que Transmission g\u00e9n\u00e9re des fichiers de log, mais pas par rapport aux connexions au client. (ou alors : j&rsquo;ai pas trouv\u00e9 !). Pour contourner le probl\u00e9me, on peut faire en sorte que l&rsquo;authentification se fasse par Caddy plutot que directement dans Transmission. Caddy lui, en tant que serveur web, peut g\u00e9n\u00e9rer des logs de connection , et ce sont ces derniers qui seront analys\u00e9 par fail2ban pour mettre les m\u00e9chants \u00e0 la porte. Vous \u00eates pret ? C&rsquo;est parti !<\/p>\n<h2>Disclaimer<\/h2>\n<p><strong>Je ne suis pas un expert en s\u00e9curit\u00e9 informatique. Ce qui suit n&rsquo;est que le r\u00e9sultat de mes bidouilles personnelles. Il y a (peut etre) des failles et ca ne garantit en rien une quelconque inviolabilit\u00e9 de votre systeme. Vous utiliserez donc cet article en votre \u00e2me et conscience sans garanti de r\u00e9sultat ! Et moi, je ne pourrai pas \u00eatre tenu responsable ! Vous voil\u00e0 averti \ud83d\ude42<br>\n<\/strong><\/p>\n<h3>1 &#8211; Autoriser toutes les connexions dans Transmission<\/h3>\n<p>Pour \u00e7a, on retourne couper le service pour \u00e9diter le fichier <strong>settings.json :<\/strong><\/p>\n<p><code>sudo systemctl stop transmission-daemon<br>\nnano \/etc\/transmission-daemon\/settings.json<\/code><\/p>\n<p>On s&rsquo;int\u00e9resse \u00e0 trois lignes en particulier :<\/p>\n<ol>\n<li><code>\"rpc-authentication-required\": false,<\/code><\/li>\n<li><code>\"rpc-whitelist-enabled\": false,<\/code><\/li>\n<li><code>\"rpc-host-name\":\"torrent.monsupersite.truc\"<\/code><\/li>\n<\/ol>\n<p>La ligne 1 et 2 permettent de d\u00e9sactiver l&rsquo;authentification et de permettre \u00e0 quiconque d&rsquo;atteindre le service.<\/p>\n<p>Si on ne pr\u00e9cise pas la ligne 3, vous aurez une erreur de ce type \u00e0 la prochaine connection sur votre client : (je sais, j&rsquo;ai tent\u00e9 \ud83d\ude00 )<\/p>\n<blockquote><p><em>421: Misdirected RequestTransmission received your request, but the hostname was unrecognized.To fix this, choose one of the following options:Enable password authentication, then any hostname is allowed.Add the hostname you want to use to the whitelist in settings.If you&rsquo;re editing settings.json, see the &lsquo;rpc-host-whitelist&rsquo; and &lsquo;rpc-host-whitelist-enabled&rsquo; entries.This requirement has been added to help prevent DNS Rebinding attacks.<\/em><\/p><\/blockquote>\n<p>On peut relancer le service, faire un test, mais recouper le tout de suite apr\u00e9s parceque c&rsquo;est pas s\u00e9curiser donc on va pas laisser la porte ouverte !<\/p>\n<p>&nbsp;<\/p>\n<h3>2 &#8211; Demander \u00e0 Caddy de s&rsquo;occuper de l&rsquo;authentification<\/h3>\n<p><strong>Attention d&rsquo;apr\u00e9s <a href=\"https:\/\/caddyserver.com\/docs\/caddyfile\/directives\/basicauth\">la documentation officielle<\/a> de Caddy :<\/strong><\/p>\n<blockquote><p><em>Notez que l&rsquo;authentification de base n&rsquo;est pas s\u00e9curis\u00e9e sur un HTTP ordinaire. Faites preuve de discernement lorsque vous d\u00e9cidez ce que vous voulez prot\u00e9ger avec l&rsquo;authentification de base HTTP.<\/em><\/p><\/blockquote>\n<h4>2.1 G\u00e9n\u00e9rer le hash du mot de passe<\/h4>\n<p>Pour des raisons de s\u00e9curit\u00e9 \u00e9vidente, le mot de passe que l&rsquo;on va utiliser pour prot\u00e9ger transmission ne sera pas \u00e9crit \u00ab\u00a0en clair\u00a0\u00bb dans Caddyfille mais uniquement son hash.<br>\nPour g\u00e9n\u00e9rer un hash il suffit de taper :<\/p>\n<p><code>caddy hash-password<\/code><\/p>\n<p>Puis de suivre les instructions \u00e0 l&rsquo;\u00e9cran (caddy vous demandera de taper votre mot de passe deux fois) ; \u00e0 la suite de quoi vous obtiendrez le hash de votre mot de passe. Ca ressemble \u00e0 un truc comme \u00e7a :<\/p>\n<p><code>JDJhJDE0JC5idEs0WFp5c0JodWxRQnRxZUpNWC41TndIZHhHdGs4LmRXb0dNc2lmM2pDMHpnUWxMZU5P<br>\n<\/code><br>\nJe vais encore insister sur ce point : utilisez un mot de passe <strong>robuste.<\/strong><\/p>\n<h4>2.2 Editer Caddyfile pour ajouter basicauth<\/h4>\n<p><code>nano \/etc\/caddy\/Caddyfile<\/code><\/p>\n<p>On va modifier la partie qui concerne transmission :<\/p>\n<p><code>torrent.monsupersite.truc {<br>\nbasicauth \/* {<br>\ntoto hash-du-mot-de-passe<br>\n}<br>\nreverse_proxy 192.168.x.y:9091<br>\n}<\/code><\/p>\n<p>Vous remplacer <em><strong>\u00ab\u00a0toto\u00a0\u00bb<\/strong><\/em> par le login que vous souhaitez, et le <em><strong>\u00ab\u00a0hash-du-mot-de-passe\u00a0\u00bb<\/strong><\/em> par ce qu&rsquo;on a obtenu pr\u00e9c\u00e9demment.<\/p>\n<p><a href=\"https:\/\/caddyserver.com\/docs\/caddyfile\/directives\/basicauth\">Lien vers la doc officielle \u00e0 propos de basicauth.<\/a><\/p>\n<h4>2.3 Editer Caddyfile pour g\u00e9n\u00e9rer des logs<\/h4>\n<p>Maintenant, on va pouvoir rajouter la partie qui va g\u00e9n\u00e9rer les logs. (<a href=\"https:\/\/caddyserver.com\/docs\/caddyfile\/directives\/log#log\">Lien vers la documentation officielle concernant log<\/a>) . Voici ce qu&rsquo;on rajoute <strong>(en gras) :<\/strong><\/p>\n<p><code>torrent.monsupersite.truc {<br>\nbasicauth \/* {<br>\ntoto hash-du-mot-de-passe<br>\n}<br>\n<strong>log {<\/strong><br>\n<strong>\u00a0format single_field common_log<\/strong><br>\n<strong>\u00a0output file \/var\/log\/caddy-torrent.log {<\/strong><br>\n<\/code><code><strong>\u00a0 roll_size 20MiB<\/strong><br>\n<strong>\u00a0 roll_keep 3<\/strong><br>\n<strong>\u00a0 roll_keep for 48h<\/strong><br>\n<strong>}<\/strong><br>\n<strong>}<\/strong><br>\n<\/code><code>reverse_proxy 192.168.x.y:9091<br>\n}<\/code><\/p>\n<ul>\n<li><strong>log <\/strong>permet de signifier qu&rsquo;on souhaite des logs<\/li>\n<li><strong>format single_field <\/strong>permet de signifier qu&rsquo;on souhaite que chaque log tienne sur une seule ligne<\/li>\n<li><strong>common_log<\/strong> permet de signifier une certaine syntaxe du log. Ca sera tr\u00e9s utile par la suite.<\/li>\n<li><strong>output file \/var\/log\/caddy-torrent.log <\/strong>permet de signifier qu&rsquo;on veut sauvegarder ses logs dans un fichier . Le chemin et le nom du fichier est \u00e0 votre discr\u00e9tion<\/li>\n<li><strong>roll_size 20MiB <\/strong>signifie que le fichier log n&rsquo;exc\u00e9dera pas 20 m\u00e9ga.<\/li>\n<li><strong>roll_keep 3 <\/strong>signifie qu&rsquo;on gardera 3 fichiers log. (D\u00e9s que ca d\u00e9passe 20 m\u00e9ga on en cr\u00e9e un nouveau, et on garde 3 en faisant un roulement).<\/li>\n<li><strong>roll_keep for 48h <\/strong>signifie qu&rsquo;on garde ses fichiers au maximum 48h.<\/li>\n<\/ul>\n<p>Ce sont des r\u00e9glages \u00ab\u00a0au pif\u00a0\u00bb qui me paraisse bien vu que Fail2ban va regarder ce qui se passe dans les logs presque en temps r\u00e9el.<\/p>\n<h4>2.4 Relancer Caddyfile pour appliquer ses mises \u00e0 jour<\/h4>\n<p><code>cd \/etc\/caddy\/Caddyfile<br>\ncaddy reload<\/code><\/p>\n<h4>2.5 Relancer Transmission (vu que maintenant il est \u00ab\u00a0prot\u00e9g\u00e9\u00a0\u00bb)<\/h4>\n<p><code>sudo systemctl stop transmission-daemon<\/code><\/p>\n<h4>2.6 Etudier le fichier de log<\/h4>\n<p>Essayons de nous connecter \u00e0 notre client, en utilisant des mauvais mot de passe puis en utilisant le bon mot de passe. Ca va permettre de g\u00e9n\u00e9rer quelques logs. Puis, allons \u00e9tudier ces derniers : (on a d\u00e9finit le chemin pr\u00e9cdemment dans le Caddyfile)<\/p>\n<p><code>nano \/var\/log\/caddy-torrent.log<\/code><\/p>\n<p>Voil\u00e0 le genre de chose que vous devriez obtenir :<\/p>\n<figure id=\"attachment_2675\" aria-describedby=\"caption-attachment-2675\" style=\"width: 1006px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/log100-1-1.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-2675 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/log100-1.jpg\" alt=\"\" width=\"1006\" height=\"275\"><\/a><figcaption id=\"caption-attachment-2675\" class=\"wp-caption-text\">L&rsquo;adresse IP a \u00e9t\u00e9 caviard\u00e9 pour des raisons \u00e9videntes.<\/figcaption><\/figure>\n<p>On remarque quoi ? Que les premiers essais sont tous des \u00e9checs (j&rsquo;ai volontairement mis le mauvais mot de passe). En revanche, on voit sur la derniere ligne que l&rsquo;utilisateur \u00ab\u00a0bob\u00a0\u00bb a r\u00e9ussi \u00e0 se connecter (l\u00e0, j&rsquo;avais mis les bons identifiants).<br>\nOn constat que sur les \u00e9checs,<strong> on obtient \u00e0 chaque fois l&rsquo;erreur 401<\/strong>. C&rsquo;est \u00e7a qu&rsquo;on va traquer avec Fail2ban.<\/p>\n<p>&nbsp;<\/p>\n<h3>3 &#8211; Fail2ban<\/h3>\n<h4>3.1 Installer Fail2ban<\/h4>\n<p><code>sudo apt-get update &amp;&amp; sudo apt-get install fail2ban<\/code><\/p>\n<h4>3.2 Premier lancement de Fail2Ban<\/h4>\n<p>Lancer le service fail2ban :<\/p>\n<pre class=\"code\"><code>systemctl start fail2ban<\/code><\/pre>\n<p>Faire en sorte qu&rsquo;il d\u00e9marre automatiquement :<\/p>\n<pre class=\"code\"><code>systemctl enable fail2ban<\/code><\/pre>\n<p>Et enfin on peut v\u00e9rifier son statut (c&rsquo;est \u00e0 dire qu&rsquo;il est lanc\u00e9)<code><\/code><\/p>\n<pre><code class=\"hljs yaml\"><span class=\"hljs-string\">fail2ban-client<\/span> <span class=\"hljs-string\">status<\/span><\/code><\/pre>\n<p>Normalement, vous aurez comme retour quelque chose comme \u00e7a (de m\u00e9moire, je crois que fail2ban se lance par d\u00e9faut avec la <em>jail sshd<\/em> active) :<\/p>\n<p><!-- wp:code --><\/p>\n<pre class=\"wp-block-code\"><code>Status\n|- Number of jail:\t1\n`- Jail list:\tsshd<\/code><\/pre>\n<p><!-- \/wp:code --><\/p>\n<p>&nbsp;<\/p>\n<p><!-- wp:paragraph --><\/p>\n<h4>3.3 Cr\u00e9er notre propre r\u00e8gle<\/h4>\n<p>Si vous souhaitez creuser le sujet en profondeur <a href=\"https:\/\/wiki.visionduweb.fr\/index.php\/Installer_et_utiliser_Fail2ban\">\u00a0c&rsquo;est ici que \u00e7a se passe. <\/a><\/p>\n<p>Le principe de fail2ban est simple mais j&rsquo;ai \u00e9t\u00e9 d\u00e9rout\u00e9 au d\u00e9but. Les fichiers de configurations sont normalement situ\u00e9s dans<strong> \/etc\/fail2ban\/<\/strong><\/p>\n<p>Le fichier <strong>jail.conf <\/strong>contient toutes les r\u00e8gles de bannissements par d\u00e9faut. Il est fortement conseiller de ne pas y toucher. Les r\u00e8gles dans ce fichier sont toutes d\u00e9sactiv\u00e9es. (Vous pouvez quand meme le consulter \u00e0 des fins d&rsquo;informations \/ d&rsquo;apprentissage)<\/p>\n<p>On peut alors soit cr\u00e9er notre propre fichier <strong>jail.local <\/strong>dans lequel on viendra activer ou non les r\u00e8gles par d\u00e9faut (voire m\u00eame cr\u00e9er nos propres r\u00e9gles) ou cr\u00e9er un fichier dans le r\u00e9pertoire <strong>jail.d <\/strong>; c&rsquo;est cette option que je vais choisir.<\/p>\n<p>Allons dans le dossier <strong>jail.d <\/strong>et voyons voir ce qu&rsquo;il contient<\/p>\n<p><code class=\"hljs yaml\"><span class=\"hljs-string\">cd \/etc\/fail2ba\/jail.d &amp;&amp; ls<\/span><\/code><\/p>\n<p>Il y a (chez moi en tout cas) d\u00e9ja un fichier : <strong>defaults-debian.conf <\/strong>. Editons le.<\/p>\n<p><code class=\"hljs yaml\"><span class=\"hljs-string\">nano defaults-debian.conf<br>\n<\/span><\/code><\/p>\n<p>Par d\u00e9faut, il contient une seule r\u00e9gle :<\/p>\n<p><code class=\"hljs yaml\"><span class=\"hljs-string\">[sshd]<br>\nenabled = true<\/span><\/code><\/p>\n<p>Fail2ban va consid\u00e9rer le<strong> enabled = true <\/strong>puis consid\u00e9rer tout ce que contient le fichier contenant les r\u00e9gles : <strong>jail.conf<\/strong><\/p>\n<p>On reparlera de ssh plus tard, en attendant, nous allons param\u00e9trer un peu en ajoutant les r\u00e9gles de banissements un peu plus poussives que celle par d\u00e9faut :<\/p>\n<p><!-- \/wp:paragraph --><\/p>\n<p><!-- wp:code --><\/p>\n<pre class=\"wp-block-code\"><code>\n[DEFAULT]\n# les ip suivant seront ignor\u00e9s (la plage d'ip locaux de 192.168.1.1 \u00e0 192.168.1.10, ainsi que mon IPv4 et IPv6 pour \u00e9viter de m'auto-ban)\nignoreip = 192.168.1.1\/10 11.22.333.444 2000:111:222:333:444:5555:666<\/code><\/pre>\n<pre class=\"wp-block-code\"><code># Regle de banissement : Si 3 essais rat\u00e9 \nmax retry = 3 \n# sur 10 minutes (600 secondes) \nfindtime = 600 \n# alors ban 24 heures (86400 secondes)\nbantime = 86400\n<!-- \/wp:code --><\/code><\/pre>\n<p>Puis, on va cr\u00e9er une r\u00e8gle pour transmission, car elle n&rsquo;existe pas dans les configurations par d\u00e9faut.<\/p>\n<p><!-- wp:code --><\/p>\n<pre class=\"wp-block-code\"><code>\n[transmission]\nenabled = true\nfilter = transmission\nlogpath = \/var\/log\/caddy-torrent.log\nport = 80,443\n<!-- \/wp:code --><\/code><\/pre>\n<ul>\n<li><strong>enabled = true\u00a0<\/strong>pour signifier qu&rsquo;on active la r\u00e8gle<\/li>\n<li><strong>filter = transmission<\/strong> le nom du filtre (on va le cr\u00e9er apr\u00e8s)<\/li>\n<li><strong>logpath = \/var\/log\/caddy-torrent.log <\/strong>le chemin vers le log g\u00e9n\u00e9r\u00e9 par caddy<\/li>\n<li><strong>port = 80,443<\/strong> les ports \u00e0 \u00e9couter (ici HTTP et HTTPS les seuls ouverts vers l&rsquo;ext\u00e9rieur)<\/li>\n<\/ul>\n<h4><\/h4>\n<h4>3.4 Cr\u00e9er notre propre filtre<\/h4>\n<p>Les filtres sont situ\u00e9s dans le dossier <strong>filter.d<\/strong> ; on va y cr\u00e9er un fichier que l&rsquo;on appellera <strong>\u00ab\u00a0transmission\u00a0\u00bb<\/strong> conform\u00e9ment a ce qu&rsquo;on a sp\u00e9cifier pr\u00e9c\u00e9demment.<\/p>\n<p><code>nano \/etc\/fail2ban\/filter.d\/transmission.conf<\/code><\/p>\n<p>Les filtres, sont en fait des &#8230; des&#8230; <strong>regex<\/strong>.<\/p>\n<figure id=\"attachment_2684\" aria-describedby=\"caption-attachment-2684\" style=\"width: 333px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/arwan-sutanto-h566w24fyl8-unsplash-scaled-1.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-2684\" title=\"\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/arwan-sutanto-h566w24fyl8-unsplash-scaled-1.jpg?w=200\" alt=\"\" width=\"333\" height=\"500\"><\/a><figcaption id=\"caption-attachment-2684\" class=\"wp-caption-text\"><em><strong>Noooon ! PAS LES REGEX !<\/strong><\/em><\/figcaption><\/figure>\n<p>Si vous ne savez pas ce que c&rsquo;est , je vous renvoie \u00e0 <a href=\"https:\/\/www.lucaswillems.com\/fr\/articles\/25\/tutoriel-pour-maitriser-les-expressions-regulieres\">cet article<\/a> qui est plut\u00f4t bien fait (et ca m&rsquo;\u00e9vitera de m&rsquo;\u00e9terniser sur ce sujet). Mais pour aller vite, ca permet de trouver rapidement des chaines de caract\u00e9res dans un texte. Nous, dans nos logs, on veut trouver une chaine de caract\u00e9re qui finit par<strong> \u00ab\u00a0401\u00a0\u00bb <\/strong>; puis de d\u00e9terminer dans cette ligne de caract\u00e9re l&rsquo;adresse IP.<\/p>\n<p>Pour m&rsquo;aider dans la r\u00e9daction du regex qui-va-bien, je me suis aid\u00e9 de <a href=\"https:\/\/regexr.com\/\">https:\/\/regexr.com\/<\/a> qui permet de tester des regex sur un texte. J&rsquo;ai donc coller l\u00e0 dedans mon extrait de log, et commenc\u00e9 \u00e0 faire des tests.<\/p>\n<figure id=\"attachment_2688\" aria-describedby=\"caption-attachment-2688\" style=\"width: 1597px\" class=\"wp-caption aligncenter\"><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/regexr-1-1.jpeg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-2688 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/regexr-1.jpeg\" alt=\"\" width=\"1597\" height=\"857\"><\/a><figcaption id=\"caption-attachment-2688\" class=\"wp-caption-text\">Les IPs sont caviard\u00e9es pour des raisons \u00e9videntes. Remarquez l&rsquo;aide en bas de l&rsquo;\u00e9cran.<\/figcaption><\/figure>\n<p>Voil\u00e0, sur ce petit essai, en tripatouillant quelques dizaines de minutes, on arrive a trouver le bon regex (\u00e0 savoir : <strong>&#8211; &#8211; \\[.*\\] \u00ab\u00a0.*\u00a0\u00bb 401 . <\/strong>) Avec \u00e7a, on arrive \u00e0 filtrer les lignes o\u00f9 la connection \u00e9choue.<\/p>\n<p>Du coup, on peut retourner dans notre fichier conf&rsquo; :<\/p>\n<p><code>nano \/etc\/fail2ban\/filter.d\/transmission.conf<\/code><\/p>\n<p><code>[Definition]<br>\nfailregex= &lt;HOST&gt; - - \\[.*\\] \".*\" 401 .<\/code><\/p>\n<p>On rajoute <strong>&lt;HOST&gt;<\/strong> pour sp\u00e9cifier \u00e0 fail2ban que le morceau qui reste (si vous reprenez le screenshot au dessus, vous remarquez bien que l&rsquo;IP n&rsquo;est pas en surbrillance)\u00a0 est l&rsquo;IP \u00e0 bannir.<\/p>\n<p>Il n&rsquo;y a plus qu&rsquo;a enregistrer tout \u00e7a.<\/p>\n<h4>3.5 Tester le filtre<\/h4>\n<p>Fail2ban poss\u00e9de un outil pour tester notre filtre avant de le lancer \u00ab\u00a0officiellement\u00a0\u00bb dans la nature. C&rsquo;est l&rsquo;outil <code>fail2ban-regex<\/code>\u00a0 . Voil\u00e0 la syntaxe :<\/p>\n<p><code>fail2ban-regex  [OPTIONS] &lt;LOG&gt; &lt;REGEX&gt; [IGNOREREGEX]<\/code><\/p>\n<p>Je vous laisse regarder dans l&rsquo;aide de fail2ban pour savoir quelles options on peut sp\u00e9cifier. Nous, on a simplement sp\u00e9cifier le chemin du log, et le chemin de notre filtre (regex)<\/p>\n<p><code>fail2ban-regex \/var\/log\/caddy-torrent.log \/etc\/fail2ban\/filter.d\/transmission.conf<\/code><\/p>\n<figure id=\"attachment_2691\" aria-describedby=\"caption-attachment-2691\" style=\"width: 971px\" class=\"wp-caption aligncenter\"><a title=\"\" href=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/fail2ban-1-1.jpeg\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-2691 size-full\" src=\"https:\/\/blog.nanuq.me\/wp-content\/uploads\/2021\/01\/fail2ban-1.jpeg\" alt=\"\" width=\"971\" height=\"490\"><\/a><figcaption id=\"caption-attachment-2691\" class=\"wp-caption-text\">Notez que sur mes 8 lignes de tout \u00e0 l&rsquo;heure. On voit bien que 7 ont \u00ab\u00a0match\u00e9\u00a0\u00bb comme \u00e9tant des lignes \u00e0 bannir. Une seul \u00e0 r\u00e9ussi , c&rsquo;est celle qui est indiqu\u00e9e en bas : celle ou je me connecte en tant que \u00ab\u00a0bob\u00a0\u00bb. (Caviard\u00e9e pour les raisons \u00e9vidente)<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<h4>3.6 Relancer Fail2ban<\/h4>\n<p><span class=\"code\"><code>sudo fail2ban-client reload<\/code><\/span><\/p>\n<p>&nbsp;<\/p>\n<h4>3.7 Verifier l&rsquo;\u00e9tat<\/h4>\n<p><span class=\"code\"><code>sudo fail2ban-client status<\/code><br>\ndevrait vous retourner :<br>\n<\/span><\/p>\n<p><span class=\"code\"><code>Status<\/code><\/span><br>\n<span class=\"code\"><code>|- Number of jail: 2<\/code><\/span><br>\n<span class=\"code\"><code>Jail list: sshd, transmission<\/code><\/span><\/p>\n<p>On peut \u00e9galement v\u00e9rifier l&rsquo;\u00e9tat d&rsquo;une jail en particulier :<\/p>\n<p><span class=\"code\"><code>sudo fail2ban-client status transmission<\/code><br>\nCe qui devrait nous retourner :<\/span><\/p>\n<p><!-- wp:code --><\/p>\n<pre class=\"wp-block-code\"><code>\nStatus for the jail: transmission\n|- Filter\n|  |- Currently failed:\t1\n|  |- Total failed:\t1\n|  `- File list:\t\/var\/log\/caddy-torrent.log\n`- Actions\n   |- Currently banned:\t1\n   |- Total banned:\t1\n   `- Banned IP list: xx.xxx.xxx.xxx\t\n`- Jail list:\tsshd<\/code><\/pre>\n<p>&nbsp;<\/p>\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n<p>Sur ce extrait, on voit qu&rsquo;une IP (caviard\u00e9e) a \u00e9t\u00e9 banni . C&rsquo;est simple, j&rsquo;ai fait un test avec un autre ordinateur (qui n&rsquo;est pas sur mon r\u00e9seau local car rappelez vous on a mis des r\u00e9gles pour ignorer que l&rsquo;on s&rsquo;auto-ban) et au bout de 5 \u00e9chec cons\u00e9cutif : poof ! On est banni pour 24 heures.<\/p>\n<p>Ca fonctionne !<\/p>\n<h3>4 &#8211; Continuer de garder un oeil<\/h3>\n<p>Comme j&rsquo;a l&rsquo;ai d\u00e9ja dit : je ne suis pas expert sur le sujet. Et se baser sur 6 lignes de log pour certifier une regex, c&rsquo;est pas la joie. Dans les prochains jours \/ semaines, je vous recommanderai d&rsquo;etre tr\u00e9s attentif \u00e0 votre fichier de log pour voir si des petits malins ne passeraient pas \u00e0 travers les mailles du filet.<\/p>\n<h2>Conclusion<\/h2>\n<p>Ca marche, on est content, on va pouvoir partage des fichiers via ce fabuleux protocole bittorrent ! Pourquoi pas des distributions linux ?<br>\nPour aller plus loin, on peut rajouter un lien dans notre code HTML !<\/p>\n<p><code>nano \/var\/www\/html\/index.html <\/code><\/p>\n<p><!-- \/wp:code --><\/p>\n<p>Et on bricole quelquechose comme \u00e7a :<\/p>\n<p><!-- wp:syntaxhighlighter\/code --><\/p>\n<pre class=\"wp-block-syntaxhighlighter-code\"><strong><em>&lt;!doctype html&gt;\n&lt;html lang=\"fr\"&gt;\n\n    &lt;head&gt;\n        &lt;meta charset=\"utf-8\"&gt;\n        &lt;title&gt;Mon super site&lt;\/title&gt;\n        &lt;meta name=\"description\" content=\"The HTML5 Herald\"&gt;\n        &lt;meta name=\"author\" content=\"SitePoint\"&gt;\n    &lt;\/head&gt;\n\n    &lt;body&gt;\n        &lt;h1&gt; youpikay ! &lt;\/h1&gt;\n        &lt;p&gt;\n            &lt;a href=\"https:\/\/torrent.monsupersite.truc\"&gt; Transmission c'est par ici ! &lt;\/a&gt;\n        &lt;\/p&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n<\/em><\/strong><\/pre>\n<p><!-- \/wp:syntaxhighlighter\/code --><\/p>\n<p>&nbsp;<\/p>\n<p>Et voil\u00e0 le travail \ud83d\ude42<\/p>\n<p>&nbsp;<\/p>\n<h1>Et apr\u00e9s ?<\/h1>\n<p>Bon il manque encore pas mal de choses&#8230; :<\/p>\n<ol>\n<li>S&rsquo;arranger pour que caddy d\u00e9marre tout seul (actuellement, c&rsquo;est pas le cas)<\/li>\n<li>Am\u00e9liorer la s\u00e9curit\u00e9 du serveur<\/li>\n<li>Permettre un acc\u00e9s SSH depuis l&rsquo;ext\u00e9rieur<\/li>\n<li>Continuer de rendre le serveur carr\u00e9ment trop cool<\/li>\n<\/ol>\n<p>Merci d&rsquo;avoir lu cet article, j&rsquo;esp\u00e9re qu&rsquo;il vous a plu et que vous avez appris des choses. N&rsquo;h\u00e9sitez pas si vous avez des remarques \u00e0 faire , ou si j&rsquo;ai laissez un cadenas sur une porte ouverte avec la fen\u00eatre cass\u00e9 \u00e0 cot\u00e9.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\uddd3\ufe0f Note : Cet article est une archive import\u00e9e de mon ancien blog. Certaines informations peuvent ne plus \u00eatre \u00e0 jour. Ou comment installer et&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2652,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2,4],"tags":[18,29,62,107,116,119],"_links":{"self":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts\/2633"}],"collection":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2633"}],"version-history":[{"count":0,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/wp\/v2\/posts\/2633\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=\/"}],"wp:attachment":[{"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2633"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2633"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nanuq.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}