<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux Archives - Mon linux</title>
	<atom:link href="https://www.monlinux.net/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.monlinux.net/category/linux/</link>
	<description>by Belgotux</description>
	<lastBuildDate>Wed, 12 Feb 2025 18:25:53 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>

<image>
	<url>https://www.monlinux.net/wp-content/uploads/cropped-mon-linux-logo-grey-512-32x32.png</url>
	<title>Linux Archives - Mon linux</title>
	<link>https://www.monlinux.net/category/linux/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Mysqldump benchmark compression</title>
		<link>https://www.monlinux.net/2024/02/mysqldump-benchmark-compression/</link>
					<comments>https://www.monlinux.net/2024/02/mysqldump-benchmark-compression/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Thu, 22 Feb 2024 17:20:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[mysql]]></category>
		<guid isPermaLink="false">http://www.monlinux.net/?p=1067</guid>

					<description><![CDATA[<p>Mysqldump tout le monde l&#8217;utilise pour exporter des donn&#233;es MySQL. Cependant, le volume de donn&#233;es g&#233;n&#233;r&#233; par Mysqldump peut rapidement devenir consid&#233;rable. Il est tr&#232;s utile de pouvoir compresser ces dump pour r&#233;duire leur taille, mais sans avoir des pertes... <a class="more-link" href="https://www.monlinux.net/2024/02/mysqldump-benchmark-compression/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2024/02/mysqldump-benchmark-compression/">Mysqldump benchmark compression</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Mysqldump tout le monde l&rsquo;utilise pour exporter des données MySQL. Cependant, le volume de données généré par Mysqldump peut rapidement devenir considérable. Il est très utile de pouvoir compresser ces dump pour réduire leur taille, mais sans avoir des pertes de performances inutiles. J&rsquo;ai mesuré l&rsquo;impact de différentes méthodes de compression gzip, pigz, xz et pixz. Afin de mettre en lumière les performances de Mysqldump et les gains en termes d&rsquo;espace de stockage.</p>



<span id="more-1067"></span>



<h2 class="wp-block-heading">Protocole de test</h2>



<ul class="wp-block-list">
<li>Une base de données de dump brute de 7Go avec innodb a été utilisée</li>



<li>Cela tourne sous MySQL 5.7, c&rsquo;est une veille app comme il en reste beaucoup. Il faudra tester également avec MySQL 8.0.</li>



<li>VM sous ESXi avec 12 vCPU intel Xeon qui ont 5ans.</li>
</ul>



<h3 class="wp-block-heading">Compressions utilisées</h3>



<p>La compression de texte se passant mal pour bzip2, je l&rsquo;ai d&rsquo;office exclus. J&rsquo;envisage donc Gzip et XZ. Il y a le monde un seul thread avec :</p>



<ul class="wp-block-list">
<li>Gzip</li>



<li>XZ</li>
</ul>



<p>Et multi-thread avec : </p>



<ul class="wp-block-list">
<li>pigz</li>



<li>pixz</li>
</ul>



<p>Quand il n&rsquo;y a plus de gain selon le niveau de compression (pouvant aller de 1 à 9), j&rsquo;arrête les tests inutiles.</p>



<h2 class="wp-block-heading">Tableau benchmark compression Mysqldump</h2>



<p>Pour Gzip, il n&rsquo;y a plus de gain de taille après une compression de 7.</p>



<p>Pour XZ, il n&rsquo;y a plus de gain de taille après un niveau de 5.</p>



<figure class="wp-block-table"><table><tbody><tr><td rowspan="3">Algorithme</td><td rowspan="3">Proc</td><td colspan="5">Compression</td><td colspan="2">Décompression</td></tr><tr><td rowspan="2">Niveau</td><td>Taille</td><td rowspan="2">Ratio</td><td rowspan="2">Temps (min)</td><td>Vitesse</td><td>Temps</td><td>Vitesse</td></tr><tr><td>(Mo)</td><td>(Mo/s)</td><td>(min)</td><td>(Mo/s)</td></tr><tr><td rowspan="3">gzip</td><td rowspan="3">1</td><td>3</td><td>1291</td><td>18,06%</td><td>2,82</td><td>42,30</td><td>1,93</td><td>61,62</td></tr><tr><td>5</td><td>1143</td><td>15,99%</td><td>3,70</td><td>32,20</td><td>1,52</td><td>78,55</td></tr><tr><td>7</td><td>1115</td><td>15,60%</td><td>5,53</td><td>21,53</td><td>1,43</td><td>83,12</td></tr><tr><td rowspan="9">pigz</td><td rowspan="3">2</td><td>3</td><td>1287</td><td>18,01%</td><td>1,62</td><td>73,69</td><td>1,65</td><td>72,20</td></tr><tr><td>5</td><td>1143</td><td>15,99%</td><td>1,98</td><td>60,07</td><td>1,55</td><td>76,86</td></tr><tr><td>7</td><td>1115</td><td>15,60%</td><td>2,73</td><td>43,59</td><td>1,57</td><td>76,04</td></tr><tr><td rowspan="3">3</td><td>3</td><td>1287</td><td>18,01%</td><td>1,38</td><td>86,12</td><td>1,38</td><td>86,12</td></tr><tr><td>5</td><td>1143</td><td>15,99%</td><td>2,17</td><td>54,98</td><td>1,53</td><td>77,70</td></tr><tr><td>7</td><td>1115</td><td>15,60%</td><td>2,30</td><td>51,80</td><td>1,6</td><td>74,46</td></tr><tr><td rowspan="3">4</td><td>3</td><td>1287</td><td>18,01%</td><td>1,45</td><td>82,16</td><td>1,40</td><td>85,10</td></tr><tr><td>5</td><td>1143</td><td>15,99%</td><td>1,63</td><td>72,94</td><td>1,62</td><td>73,69</td></tr><tr><td>7</td><td>1115</td><td>15,60%</td><td>1,87</td><td>63,82</td><td>1,55</td><td>76,86</td></tr><tr><td colspan="10">&nbsp;</td></tr><tr><td rowspan="3">xz</td><td rowspan="3">1</td><td>1</td><td>841</td><td>11,77%</td><td>8,52</td><td>13,99</td><td>2,4</td><td>49,64</td></tr><tr><td>3</td><td>771</td><td>10,79%</td><td>24,25</td><td>4,91</td><td>1,73</td><td>68,73</td></tr><tr><td>5</td><td>680</td><td>9,51%</td><td>56,13</td><td>2,12</td><td>1,63</td><td>72,94</td></tr><tr><td rowspan="12">pixz</td><td rowspan="2"><strong>2</strong></td><td><strong>1</strong></td><td><strong>841</strong></td><td><strong>11,77%</strong></td><td><strong>8,07</strong></td><td>14,77</td><td>1,62</td><td>73,69</td></tr><tr><td>3</td><td>771</td><td>10,79%</td><td>17,32</td><td>6,88</td><td>1,72</td><td>69,40</td></tr><tr><td rowspan="2">3</td><td>1</td><td>841</td><td>11,77%</td><td>9,07</td><td>13,14</td><td>3,13</td><td>38,02</td></tr><tr><td>3</td><td>771</td><td>10,79%</td><td>26,90</td><td>4,43</td><td>3,03</td><td>39,27</td></tr><tr><td rowspan="4">4</td><td>1</td><td>841</td><td>11,77%</td><td>8,82</td><td>13,51</td><td>1,98</td><td>60,07</td></tr><tr><td>3</td><td>771</td><td>10,79%</td><td>19,22</td><td>6,20</td><td>2,00</td><td>59,57</td></tr><tr><td>4</td><td>768</td><td>10,74%</td><td>31,03</td><td>3,84</td><td>1,97</td><td>60,58</td></tr><tr><td>5</td><td>680</td><td>9,51%</td><td><span style="color: #ff0000;">47,73</span></td><td>2,50</td><td>1,92</td><td>62,16</td></tr><tr><td rowspan="2"><strong>5</strong></td><td>1</td><td>841</td><td>11,77%</td><td>8,12</td><td>14,68</td><td>2,98</td><td>39,93</td></tr><tr><td><strong>3</strong></td><td><strong>771</strong></td><td><strong>10,79%</strong></td><td><strong>17,38</strong></td><td>6,85</td><td>3,02</td><td>39,49</td></tr><tr><td rowspan="2">6</td><td>1</td><td>841</td><td>11,77%</td><td>8,00</td><td>14,89</td><td>2,58</td><td>46,12</td></tr><tr><td>3</td><td>771</td><td>10,79%</td><td>17,08</td><td>6,97</td><td>2,07</td><td>57,65</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Résultats de compression Mysqldump</h3>



<p>Le meilleur temps qui ne consomme pas trop de ressources, c&rsquo;est <strong>pigz avec 4 threads et une compression de niveau 3</strong>. La compression est très bonne un niveau 7, mais 3% de taille en moins pour 28% de temps en plus, est-ce utile ? Vous savez quoi utilise pour gagner 5,5x l&rsquo;espace disque en impactant très peu la charge CPU.</p>



<p>Comme vous pouvez le voir, il y a deux options si vous avez besoin d&rsquo;archiver à long terme beaucoup de données :</p>



<ul class="wp-block-list">
<li>soit vous cherchez la rapidité et avoir un gain important de place par rapport à gzip et vous utiliserez pixz avec un niveau 1 de compression et 2 processus.</li>



<li>soit vous cherchez une compression importante et vous utiliserez <strong>pixz avec un niveau 3 de compression et 5 processus</strong>. Un niveau plus haut que 3 ne sert à rien, trop de temps perdu pour un gain minime de compression, comme on peut le voir avec un niveau 5</li>
</ul>



<p>Si vous avez une architecture master/slave MySQL, je vous conseille de le faire sur votre slave pour éviter les lock tables sur votre master.</p>



<p>J&rsquo;ai effectué un comparatif également pour <a href="https://www.monlinux.net/2017/11/xtrabackup-benchmark-compression-mysql/">les backups compressés d&rsquo;XtraBackup</a>.</p>
<p>L’article <a href="https://www.monlinux.net/2024/02/mysqldump-benchmark-compression/">Mysqldump benchmark compression</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.monlinux.net/2024/02/mysqldump-benchmark-compression/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MQTTS sécuriser Mosquitto MQTT</title>
		<link>https://www.monlinux.net/2023/11/mqtts-securiser-mosquitto-mqtt/</link>
					<comments>https://www.monlinux.net/2023/11/mqtts-securiser-mosquitto-mqtt/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Wed, 08 Nov 2023 22:04:00 +0000</pubDate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[domotique]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[MQTT]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1924</guid>

					<description><![CDATA[<p>Il est important de savoir que laisser communiquer en clair son IoT de sa domotique n&#8217;est pas DU TOUT conseill&#233;. C&#8217;est important de s&#233;curiser plusieurs choses apr&#232;s avoir compris les bases de MQTT : Vous devez faire le bon compromis... <a class="more-link" href="https://www.monlinux.net/2023/11/mqtts-securiser-mosquitto-mqtt/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/11/mqtts-securiser-mosquitto-mqtt/">MQTTS sécuriser Mosquitto MQTT</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Il est important de savoir que laisser communiquer en clair son IoT de sa domotique n&rsquo;est pas DU TOUT conseillé. C&rsquo;est important de sécuriser plusieurs choses <a href="https://www.monlinux.net/2023/10/mqtt-broker/">après avoir compris les bases de MQTT</a> : </p>



<ul class="wp-block-list">
<li>L&rsquo;identification du serveur et la sécurisation du flux</li>



<li>L&rsquo;identification du client</li>



<li>L&rsquo;authentification du client</li>
</ul>



<p>Vous devez faire le bon compromis entre sécurité et flexibilité. Il ne faut pas forcément pousser le bouton à fond pour tous les cas de figures.</p>



<h2 class="wp-block-heading">Génération des clés et certificats</h2>



<p>Pour MQTTS, 2 options s&rsquo;offre à vous comme pour un serveur HTTPS : </p>



<ul class="wp-block-list">
<li>générer vos certificats auto-signé</li>



<li>via une autorité de certification</li>
</ul>



<p>Dans mon cas ce n&rsquo;est que du local, ce sera donc de l&rsquo;auto-signé.</p>



<p>Je génère toujours les clés et certificats sur ma machine perso et ensuite je copie les certificats/clés sur le serveur et les clients, afin de les archiver. C&rsquo;est donc à faire dans un dossier à garder sous Linux ou en WSL sous Windows.</p>



<p>Veillez bien à remplacer les DNS suivants par votre domaine externe pointant sur votre serveur ainsi que votre DNS interne ou IP interne pour joindre votre serveur MQTT (dans mon cas installé sur mon serveur Jeedom) : <code>DNS:jeedom.YOURDOMAIN.TLD,DNS:jeedom.home</code></p>



<pre class="wp-block-code"><code class="">mkdir ca broker clients

<em>#CA</em>
openssl genrsa -out ca/ca.key 2048
openssl req -new -x509 -days 9999 -subj "/C=BE/CN=<mark>MQTT</mark>-CA/O=home" -key ca/ca.key -out ca/ca.crt

<em>#broker</em>
openssl genrsa -out broker/mosquitto.key 2048
openssl req -new -subj "/C=BE/O=home/CN=<mark>MQTT</mark>-mosquitto" -key broker/mosquitto.key -out broker/mosquitto.csr
openssl x509 -req -extfile &lt;(printf "subjectAltName = DNS:jeedom.YOURDOMAIN.TLD,DNS:jeedom.home,DNS:localhost,IP:127.0.0.1,IP:::1") -in broker/mosquitto.csr
 -CA ca/ca.crt -CAkey ca/ca.key -CAcreateserial -out broker/mosquitto.crt -days 9999 -sha256
 
<em>#client</em> (facultatif) si on souhaite une authentification par certificat du client au lieu de password
openssl genrsa -out clients/local-tasmotas.key 2048
openssl req -new -subj "/C=BE/O=home/CN=<mark>MQTT</mark>-client-tasmotas" -key clients/local-tasmotas.key -out clients/local-tasmotas.csr
openssl x509 -req -in clients/local-tasmotas.csr -CA ca/ca.crt -CAkey ca/ca.key -CAcreateserial -out clients/local-tasmotas.crt -days 9999 -sha256</code></pre>



<h2 class="wp-block-heading" id="côté-broker">MQTTS côté broker Mosquitto</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Les certificats et clés privées doivent être archivés, ils ne le sont pas dans le backup Jeedom.</p>
</blockquote>



<p>La configuration de base du fichier Debian est : /etc/mosquitto/mosquitto.conf </p>



<pre class="wp-block-code"><code class=""># Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d</code></pre>



<p>C&rsquo;est conseillé d&rsquo;utiliser un fichier dans conf.d : dans mon cas sous Jeedom avec l&rsquo;installation du plugin jMQTT, le fichier suivant est créé et sera utilisé : <code>/etc/mosquitto/conf.d/jMQTT.conf</code></p>



<p>Copie des fichiers nécessaires du broker sur le serveur Jeedom :</p>



<pre class="wp-block-code"><code class="">scp ca/ca.crt broker/mosquitto.crt broker/mosquitto.key jeedom:
ssh jeedom
sudo mv ca.crt mosquitto.crt mosquitto.key /etc/mosquitto/certs/
ls -l /etc/mosquitto/certs</code></pre>



<p>Editer via l&rsquo;interface web la configuration du fichier jMQTT.conf ou via vim <code>/etc/mosquitto/conf.d/jMQTT.conf</code></p>



<ul class="wp-block-list">
<li>on laisse les connexions en clair du port 1883 provenant de localhost uniquement (127.0.0.1), <strong>plus d&rsquo;accès en clair depuis l&rsquo;extérieur</strong> (sert pour jeedom se connecter au broker Mosquitto)</li>



<li>on active le port TLS 8883 sur toutes les interfaces</li>
</ul>



<pre class="wp-block-code"><code class=""><em># jMQTT Mosquitto configuration file</em>
listener 1883 127.0.0.1
allow_anonymous true

<em># jMQTTS</em>
listener 8883 0.0.0.0
protocol <mark>mqtt</mark>
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/mosquitto.crt
keyfile /etc/mosquitto/certs/mosquitto.key

<em># Only allow clients with a valid certificat (false to only trus the broker and not the clients)</em>
require_certificate true


</code></pre>



<p>Rédémarrez le service et vérifier que le port 8883 est ouvert pour tous et 1883 n&rsquo;est plus accessible que par 127.0.0.1 :</p>



<pre class="wp-block-code"><code class="">sudo systemctl restart mosquitto.service
sudo ss -tlpn | egrep '(1883|8883)'
LISTEN    0         100                0.0.0.0:8883             0.0.0.0:*        users:(("mosquitto",pid=14185,fd=6))
LISTEN    0         100              127.0.0.1:1883             0.0.0.0:*        users:(("mosquitto",pid=14185,fd=5))</code></pre>



<p>A ce moment là, le trafic entre nos clients et notre serveur est sécurisé. Mais n&rsquo;importe quel client peut se connecter à notre serveur sans mot de passe!</p>



<p>Basé sur <a href="https://domotruc.github.io/jMQTT/fr_FR/" target="_blank" rel="noreferrer noopener">la documentation jMQTT officielle</a>, d&rsquo;autres informations et <a href="https://openest.io/linux-embarque/communication-linux/chiffrement-communication-mqtt-tls-ssl-mosquitto-et-paho/">erreurs courantes sont disponibles sur ce blog</a>.</p>



<h1 class="wp-block-heading" id="authentification">Authentification</h1>



<p>Mes clients étant des ESP32 qui disposent de Wifi ou mon pc avec MQTT explorer pour le debug, tout en local, une authentification par mot de passe est suffisante. Je distingue les clients IoT avec un seul mot de passe et mes 2 pc avec chacun un mot de passe différent.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Pour un serveur MQTTS publique, l&rsquo;authentification des clients par certificat est recommandé</p>
</blockquote>



<ol class="wp-block-list">
<li>Créer les fichiers de mot de passe :&nbsp;<code>mosquitto_passwd -c &lt;password file&gt; &lt;username&gt;</code><br>sudo mosquitto_passwd -c /etc/mosquitto/distant.passwd tasmota</li>



<li>Configurer le broker avec la ligne :&nbsp;<code>password_file &lt;path to the configuration file&gt;</code></li>



<li>Ajout d&rsquo;un second utilisateur&nbsp;<code>sudo mosquitto_passwd /etc/mosquitto/distant.passwd hp</code></li>



<li>Redémarrer :&nbsp;<code>sudo systemctl restart mosquitto.service</code></li>
</ol>



<p>Le fichier <code>/etc/mosquitto/conf.d/jMQTT.conf</code></p>



<pre class="wp-block-code"><code class="">per_listener_settings true

# jMQTT Mosquitto configuration file
listener 1883 127.0.0.1
allow_anonymous true

# jMQTTS
listener 8883 0.0.0.0
protocol mqtt
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/mosquitto.crt
keyfile /etc/mosquitto/certs/mosquitto.key
allow_anonymous false
persistence false
require_certificate false
password_file /etc/mosquitto/distant.passwd</code></pre>



<p>Si vous préférez utiliser un mot de passe pour Jeedom en local, selon si le plugin vous l&rsquo;impose, vous pouvez le faire : </p>



<pre class="wp-block-code"><code class="">per_listener_settings true

# jMQTT Mosquitto configuration file
listener 1883 127.0.0.1
allow_anonymous false
persistence false
password_file /etc/mosquitto/local.passwd

# jMQTTS
listener 8883 0.0.0.0
protocol mqtt
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/mosquitto.crt
keyfile /etc/mosquitto/certs/mosquitto.key
allow_anonymous false
persistence false
require_certificate false
password_file /etc/mosquitto/distant.passwd</code></pre>



<p><a href="https://mosquitto.org/documentation/authentication-methods/">source</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/11/mqtts-securiser-mosquitto-mqtt/">MQTTS sécuriser Mosquitto MQTT</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.monlinux.net/2023/11/mqtts-securiser-mosquitto-mqtt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MQTT broker</title>
		<link>https://www.monlinux.net/2023/10/mqtt-broker/</link>
					<comments>https://www.monlinux.net/2023/10/mqtt-broker/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Fri, 27 Oct 2023 20:40:00 +0000</pubDate>
				<category><![CDATA[Domotique]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[domotique]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[MQTT]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1919</guid>

					<description><![CDATA[<p>Avec la domotique Jeedom, je suis pass&#233; aux plugins z2m, zwavejs et jMQTT, j&#8217;ai donc install&#233; et configur&#233; Mosquitto pour mes besoins. C&#8217;est un broker MQTT comme il en existe plusieurs. Voici quelques bases d&#8217;explications, que vous pouvez compl&#233;ter avec... <a class="more-link" href="https://www.monlinux.net/2023/10/mqtt-broker/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/10/mqtt-broker/">MQTT broker</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Avec la domotique Jeedom, je suis passé aux plugins z2m, zwavejs et jMQTT, j&rsquo;ai donc installé et configuré Mosquitto pour mes besoins. C&rsquo;est un broker MQTT comme il en existe plusieurs.</p>



<p>Voici quelques bases d&rsquo;explications, que vous pouvez compléter avec<a href="https://mqtt.org/#pub-sub-graphic" target="_blank" rel="noreferrer noopener"> la documentation officielle du protocole</a>.</p>



<h2 class="wp-block-heading" id="architecture-de-communication">architecture de communication de MQTT</h2>



<p>Nous avons un broker, celui qui passe les messages.<br>Des clients Publisher vont envoyer des messages avec un nom appelé Topic<br>Des clients Subscriber vont recevoir des messages s&rsquo;ils sont abonnés à ce Topic</p>



<h2 class="wp-block-heading" id="architecture-du-protocol">architecture du protocole MQTT</h2>



<p>C&rsquo;est organisé en Topic / sujets</p>



<p>On peut faire un topic racine :&nbsp;<code>toto</code><br>Et des sous topic :</p>



<ul class="wp-block-list">
<li>toto/test1/o1</li>



<li>toto/test1/o2</li>



<li>toto/test2/o1</li>



<li>toto/test2/o2</li>



<li>toto/test3</li>
</ul>



<p>On peut souscrire à plusieurs Topic via&nbsp;<code>toto/*</code>&nbsp;ou&nbsp;<code>toto/#</code><br>Il n&rsquo;est pas possible de mettre&nbsp;<code>#</code>&nbsp;pour la racine</p>



<p>On peut s&rsquo;inscrire à plusieurs&nbsp;<strong>sous</strong>&nbsp;Topic via le + :&nbsp;<code>toto/+/o1</code></p>



<h2 class="wp-block-heading" id="broker">MQTT Broker</h2>



<p>Le plus utilisé : Mosquitto. Il est open-source et simple de configuration.</p>



<h2 class="wp-block-heading" id="organisation-des-topic-home">Organisation des Topic Jeedom</h2>



<p>Il faut vous organiser à l&rsquo;avance pour l&rsquo;arborescence des topic qui seront utilisé chez vous. Voici ce que j&rsquo;ai organisé chez moi pour les niveaux :</p>



<ol class="wp-block-list">
<li>mettre le protocole passerelle </li>



<li>mettre la pièce ou une référence à la pièce</li>



<li>mettre le device</li>



<li>mettre les topics du device</li>
</ol>



<p>Cela permet par exemple de matcher tous les objets du bureau quelque soit son protocole!</p>



<ul class="wp-block-list">
<li><mark>MQTT</mark>&nbsp;direct : ip/piece/device/xxx
<ul class="wp-block-list">
<li>si plusieurs composant pour un seul objet, mettre cet objet devant le device : ip/display-rdc/matrixled-temp/xxx et ip/display-rdc/matrixled-spotify/xxx par exemple</li>
</ul>
</li>



<li>modbus2mqtt : modbus/rdc/device/xxx</li>



<li>zigbee2mqtt : zigbee/bureau/device/xxx</li>



<li>zwaveJS : zwave/bureau/device/xxx</li>
</ul>



<h2 class="wp-block-heading" id="clients">clients</h2>



<ul class="wp-block-list">
<li>Windows :&nbsp;<mark>MQTT</mark>&nbsp;Explorer permet le&nbsp;<mark>MQTT</mark>&nbsp;en clair, en MQTTS avec certificat serveur uniquement ou avec la pair de certificat/clé client</li>



<li>Android j&rsquo;en cherche encore un bon pour le debug</li>
</ul>
<p>L’article <a href="https://www.monlinux.net/2023/10/mqtt-broker/">MQTT broker</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.monlinux.net/2023/10/mqtt-broker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>LimeSurvey migration 3.15 vers 6.1.8</title>
		<link>https://www.monlinux.net/2023/09/limesurvey-migration-3-15-vers-6-1-8/</link>
					<comments>https://www.monlinux.net/2023/09/limesurvey-migration-3-15-vers-6-1-8/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Sat, 02 Sep 2023 17:09:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1911</guid>

					<description><![CDATA[<p>Migrer une vieille version d&#8217;application d&#233;laiss&#233;e n&#8217;est pas chose facile&#8230; Cela passe parfois par plusieurs &#233;tapes, comme ici avec un LimeSurvey 3.15 ayant quelques ann&#233;es et qui sera mis &#224; jour vers ma version actuelle 6.1.8. Il existe une version... <a class="more-link" href="https://www.monlinux.net/2023/09/limesurvey-migration-3-15-vers-6-1-8/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/09/limesurvey-migration-3-15-vers-6-1-8/">LimeSurvey migration 3.15 vers 6.1.8</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Migrer une vieille version d&rsquo;application délaissée n&rsquo;est pas chose facile&#8230; Cela passe parfois par plusieurs étapes, comme ici avec un LimeSurvey 3.15 ayant quelques années et qui sera mis à jour vers ma version actuelle 6.1.8.</p>



<p>Il existe une version mineure LTS 3.28.66 supportée jusque juin 2023. Plus de version LTS après cela!</p>



<p>L&rsquo;OS utilisé passant à Ubuntu 22.04, il faut déjà trouver un intermédiaire pour faire fonctionner la version actuelle et la mettre à jour. La version installée ne supporte uniquement que PHP 7.0.</p>



<p>Le but à atteindre étant d&rsquo;utiliser la dernière version de l&rsquo;application 6.1.8 et sa version PHP supportée 8.0.</p>



<h2 class="wp-block-heading">Phases de migration LimeSurvey</h2>



<ol class="wp-block-list">
<li>Migrer en dernière version LTS 3.28.66 (support PHP 7.4 max)</li>



<li>Mise à jour de PHP 7.0 vers 7.4</li>



<li>Migrer vers 5.6.31 (supports PHP 7.2.5 to 8.0.x)</li>



<li>Migrer vers 6.1.8 (requires PHP 7.4.x or newer)</li>



<li>Mise à jour de PHP 7.4 vers 8.0</li>
</ol>



<h2 class="wp-block-heading">Pré-requis</h2>



<ol class="wp-block-list">
<li>On va devoir utiliser une sandbox docker ayant différentes versions de PHP pour faire la migration de l&rsquo;application du à l&rsquo;incompatibilité entre les version PHP de l&rsquo;app et la nouvelle machine</li>



<li>On va ajouter un dépôt pour gérer les versions de PHP qui ne sont pas dans le dépôt ubuntu <code>https://ppa.launchpadcontent.net/ondrej/php/ubuntu/ jammy main</code></li>
</ol>



<p>Pour utiliser docker sous Windows,<a href="https://www.monlinux.net/2023/02/minimal-docker-desktop-stack-de-developpement-sous-windows/"> je vous réfère à mon article sur Docker Desktop</a>.</p>



<h2 class="wp-block-heading">Export/Import base de donnée LimeSurvey actuel</h2>



<p>Export :</p>



<pre class="wp-block-code"><code class="">cd /var/www
sudo tar -czf /home/b/lime-prod.tgz limesurvey
sudo mysqldump --defaults-file=/etc/mysql/debian.cnf limesurveydb | gzip --to-stdout > /home/b/lime-prod.sql.gz</code></pre>



<p>import :</p>



<pre class="wp-block-code"><code class="">scp new-srv:lime-prod.* ./
zcat lime-prod.sql.gz | sudo mysql lime
cd /data/www
sudo tar -xf /home/b/lime-prod.tgz
sudo chown -R www-data limesurvey/tmp limesurvey/upload limesurvey/application/config</code></pre>



<h2 class="wp-block-heading">Migrer LimeSurvey en dernière version LTS</h2>



<p>Sur la sandbox docker, ajouter le support de PHP 7.0 et 7.4 via un <a href="https://tecadmin.net/how-to-install-php-on-ubuntu-22-04/">dépôt supplémentaire</a>.</p>



<p>La version Version 3.15 ne supportant pas php 7.4, il faut passer par le 7.0 pour mettre à jour vers la 3.28.66 et puis essayer de passer php en 7.4</p>



<h3 class="wp-block-heading">Situation fonctionnelle</h3>



<ul class="wp-block-list">
<li>Ajout du dépôt</li>
</ul>



<pre class="wp-block-code"><code class="">sudo add-apt-repository ppa:ondrej/php</code></pre>



<ul class="wp-block-list">
<li>ajout des paquets</li>
</ul>



<pre class="wp-block-code"><code class="">sudo apt update
sudo apt install php7.0 php7.0-curl php7.0-mysql php7.0-mbstring php7.0-zip php7.0-gd php7.0-ldap php7.0-simplexml
sudo apt install php7.4 php7.4-curl  php7.4-mysql  php7.4-mbstring  php7.4-zip  php7.4-gd  php7.4-ldap  php7.4-simplexml</code></pre>



<ul class="wp-block-list">
<li>Switch du PHP par défaut :</li>
</ul>



<pre class="wp-block-code"><code class="">sudo update-alternatives --config php
There are 3 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php8.1   81        auto mode
  1            /usr/bin/php7.0   70        manual mode
  2            /usr/bin/php7.4   74        manual mode
  3            /usr/bin/php8.1   81        manual mode

Press &lt;enter&gt; to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/php7.0 to provide /usr/bin/php (php) in manual mode</code></pre>



<ul class="wp-block-list">
<li>Vérifier : <code>php -v</code></li>



<li>Activer dans apache la version à utiliser, ici 7.0 d&rsquo;abord:</li>
</ul>



<pre class="wp-block-code"><code class="">sudo a2dismod php8.1
sudo a2enmod php7.0
sudo systemctl restart apache2</code></pre>



<ul class="wp-block-list">
<li>Importer les fichiers tgz + db</li>
</ul>



<pre class="wp-block-code"><code class="">zcat limesurvey.sql.gz | mysql lime
cd /data/www
tar -xf lime-prod.tgz</code></pre>



<ul class="wp-block-list">
<li>changer les accès db dans <code>application/config/config.php</code></li>
</ul>



<p>Pour le <a href="https://manual.limesurvey.org/Optional_settings#Development_and_debugging">debug limesurvey</a> :<br>application/config/config.php<br>&lsquo;debug&rsquo;=&gt;2,</p>



<h3 class="wp-block-heading">Migration de LimeSurvey 3.15.3 vers 3.28.66</h3>



<p><a href="https://manual.limesurvey.org/Upgrading_from_a_previous_version">Notes de migration anciennes version</a></p>



<pre class="wp-block-code"><code class="">cd
wget https://download.limesurvey.org/latest-3.x-LTS/limesurvey3.28.66+230719.zip
cur_version=3.15.3
cd /data/www
sudo mv limesurvey limesurvey-$cur_version
sudo unzip /home/b/limesurvey3.28.66+230719.zip
sudo cp limesurvey-$cur_version/application/config/config.php limesurvey/application/config/
sudo cp -ar limesurvey-$cur_version/upload limesurvey/
sudo chown -R www-data limesurvey/tmp limesurvey/upload limesurvey/application/config</code></pre>



<p>Upgrade DB en console :</p>



<pre class="wp-block-code"><code class="">sudo -u www-data php limesurvey/application/commands/console.php updatedb
Update mysql:host=localhost;port=3306;dbname=lime_stag; with prefix :lime_ from 355 to 366
Database has been successfully upgraded to version 366</code></pre>



<p>Après connexion à l&rsquo;interface admin, pas de message pour upgrade la DB. Et vérifier si erreur template.</p>



<p>==> Etat OK, customisation logo, templates formulaire également.</p>



<h3 class="wp-block-heading">Switch de PHP 7.0 vers PHP 7.4</h3>



<p>Pour les versions suivantes, la version minimum est PHP 7.2.5 et il faut donc abandonné PHP7.0. Allons directement en 7.4 qui est censé être supporté par la version 3.28.66….</p>



<pre class="wp-block-code"><code class="">sudo update-alternatives --config php
There are 3 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
  0            /usr/bin/php8.1   81        auto mode
* 1            /usr/bin/php7.0   70        manual mode
  2            /usr/bin/php7.4   74        manual mode
  3            /usr/bin/php8.1   81        manual mode

Press &lt;enter&gt; to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/php7.4 to provide /usr/bin/php (php) in manual mode
Time: 0h:00m:03s
php -v
sudo a2dismod php7.0
sudo a2enmod php7.4
sudo systemctl restart apache2</code></pre>



<p>==> Etat OK également!</p>



<h2 class="wp-block-heading">Migrer LimeSurvey vers 5.6.31</h2>



<p>Cette version 5.6.31 supporte PHP 7.2.5 à 8.0.x.</p>



<pre class="wp-block-code"><code class="">cd
wget https://download.limesurvey.org/latest-5.x/limesurvey5.6.31+230718.zip
cur_version=3.28.66
sudo mysqldump lime | gzip --to-stdout > lime-${cur_version}.sql.gz
cd /data/www
sudo mv limesurvey limesurvey-$cur_version
sudo unzip /home/b/limesurvey5.6.31+230718.zip
sudo cp limesurvey-$cur_version/application/config/config.php limesurvey/application/config/
sudo cp -ar limesurvey-$cur_version/upload limesurvey/
sudo chown -R www-data limesurvey/tmp limesurvey/upload limesurvey/application/config</code></pre>



<p>On est à la version 366 de la base de données pour rappel.</p>



<p>Update en console possible :</p>



<pre class="wp-block-code"><code class="">sudo -u www-data php limesurvey/application/commands/console.php updatedb
Update mysql:host=localhost;port=3306;dbname=lime; with prefix :lime_ from 366 to 497
Database has been successfully upgraded to version 497
Time: 0h:00m:18s</code></pre>



<p>Si erreur pour faire l&rsquo;update entre 418 et 497, voir si bien en php 7.4 et recommencer depuis la 3.28.66. Un oubli arrive vite&#8230;</p>



<h2 class="wp-block-heading">Migrer LimeSurvey vers 6.1.8</h2>



<p>Cette version 6.1.8 de Limesurvey nécessite PHP 7.4.x ou plus.</p>



<h3 class="wp-block-heading">Upgrade 5.6.31 vers 6.1.8</h3>



<p>Attention l&rsquo;interface est très différente, à voir l&rsquo;impacte sur les utilisateurs de l&rsquo;application !</p>



<pre class="wp-block-code"><code class="">cd
wget https://download.limesurvey.org/latest-master/limesurvey6.1.8+230717.zip
cur_version=5.6.31
sudo mysqldump lime | gzip --to-stdout > lime-${cur_version}.sql.gz
cd /data/www
sudo mv limesurvey limesurvey-$cur_version
sudo unzip /home/b/limesurvey6.1.8+230717.zip
sudo cp limesurvey-$cur_version/application/config/config.php limesurvey-$cur_version/application/config/security.php limesurvey/application/config/
sudo cp -ar limesurvey-$cur_version/upload limesurvey/
sudo chown -R www-data limesurvey/tmp limesurvey/upload limesurvey/application/config</code></pre>



<p>On est à la version 497 de la base de données</p>



<p>Update en console possible :</p>



<pre class="wp-block-code"><code class="">sudo -u www-data php limesurvey/application/commands/console.php updatedb
Update mysql:host=localhost;port=3306;dbname=lime; with prefix :lime_ from 497 to 607
Database has been successfully upgraded to version 607
Time: 0h:00m:04s</code></pre>



<h3 class="wp-block-heading">Switch de PHP 7.4 vers PHP 8.0</h3>



<p>Pour les versions suivantes de LimeSurvey, la version minimum est PHP 7.4.x. Pas d&rsquo;infos officielles sur la version maximal, mais un information sur le forum :</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>8.1 and 8.2 are not supported, yet.<br>The maximum PHP version currently supported by LimeSurvey 5 is 8.0.x.</p>
</blockquote>



<p>Il faut donc tester… Résultat des tests :</p>



<ul class="wp-block-list">
<li>PHP 7.4 est OK</li>



<li>PHP 8.0 est OK</li>



<li>PHP 8.1 ne semble pas supporté!!!</li>



<li>PHP 8.2 non testé</li>
</ul>



<p>Il faut donc utiliser PHP 8.0.</p>



<h4 class="wp-block-heading">Installer :</h4>



<pre class="wp-block-code"><code class="">sudo apt install php8.0 php8.0-curl  php8.0-mysql  php8.0-mbstring  php8.0-zip  php8.0-gd  php8.0-ldap  php8.0-simplexml
sudo a2dismod php7.4
sudo a2enmod php8.0
sudo systemctl restart apache2</code></pre>



<pre class="wp-block-code"><code class="">sudo update-alternatives --config php
There are 4 choices for the alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
  0            /usr/bin/php8.1   81        auto mode
  1            /usr/bin/php7.0   70        manual mode
* 2            /usr/bin/php7.4   74        manual mode
  3            /usr/bin/php8.0   80        manual mode
  4            /usr/bin/php8.1   81        manual mode

Press &lt;enter&gt; to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/php8.0 to provide /usr/bin/php (php) in manual mode
php -v</code></pre>



<h2 class="wp-block-heading">Conclusion</h2>



<p>La tâche n&rsquo;était pas simple sans avoir une manipulation officielle d&rsquo;un changement de version application + PHP. Il faut donc faire quelques raté pour en arriver à cette manipulation. Espérant aider le plus grand nombre!</p>
<p>L’article <a href="https://www.monlinux.net/2023/09/limesurvey-migration-3-15-vers-6-1-8/">LimeSurvey migration 3.15 vers 6.1.8</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.monlinux.net/2023/09/limesurvey-migration-3-15-vers-6-1-8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Python pip installation offline de librairies</title>
		<link>https://www.monlinux.net/2023/06/python-pip-installation-offline-de-librairies/</link>
					<comments>https://www.monlinux.net/2023/06/python-pip-installation-offline-de-librairies/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Sun, 18 Jun 2023 18:26:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1803</guid>

					<description><![CDATA[<p>Il arrive parfois de devoir intervenir sur des machines &#233;tant off-grid n&#8217;ayant pas d&#8217;acc&#232;s au net. La plupart du temps un proxy socks, tunnel reverse et l&#8217;utilisation de variable d&#8217;environnement permet d&#8217;aller chercher les choses dont nous avons besoins. Mais... <a class="more-link" href="https://www.monlinux.net/2023/06/python-pip-installation-offline-de-librairies/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/06/python-pip-installation-offline-de-librairies/">Python pip installation offline de librairies</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Il arrive parfois de devoir intervenir sur des machines étant off-grid n&rsquo;ayant pas d&rsquo;accès au net. La plupart du temps un proxy socks, tunnel reverse et l&rsquo;utilisation de variable d&rsquo;environnement permet d&rsquo;aller chercher les choses dont nous avons besoins. Mais pour python pip, lui-même à besoin d&rsquo;une librairie « pysocks » et donc cela coince un peu&#8230; </p>



<p>Si vous essayé d&rsquo;utiliser les variables d&rsquo;environnement <code>https_proxy=socks5://votreserver:port</code> vous aurez l&rsquo;erreur suivante : </p>



<pre class="wp-block-code"><code class="">InvalidSchema: Missing dependencies for SOCKS support.</code></pre>



<p>La solution est de télécharger les dépendances nécessaires sur une machine ayant l&rsquo;accès à Internet!</p>



<h2 class="wp-block-heading">Dépendances pip sur la machine ayant le net :</h2>



<pre class="wp-block-code"><code lang="bash" class="language-bash">mkdir pipdep &amp;&amp; cd pipdep
echo pysocks &gt; requirements.txt
echo pyvmomi &gt;&gt; requirements.txt
pip download -r requirements.txt</code></pre>



<p>Vous copier le dossier sur la machine cible</p>



<h2 class="wp-block-heading">Installation des dépendances python pip sur la machine cible </h2>



<p>C&rsquo;est à exécuter en temps d&rsquo;utilisateur pour rappel :</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">pip install -r requirements.txt --no-index --find-links .</code></pre>



<p><a href="https://gist.github.com/belgotux/94e748cc3ca36b1734724d5da814c17d" target="_blank" rel="noreferrer noopener">Le gist est disponible sur Github</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/06/python-pip-installation-offline-de-librairies/">Python pip installation offline de librairies</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.monlinux.net/2023/06/python-pip-installation-offline-de-librairies/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>NMAP &#8211; identification exacte de l&#8217;OS d&#8217;un Windows</title>
		<link>https://www.monlinux.net/2023/06/nmap-obtenir-version-os-exacte-dune-machine-windows/</link>
					<comments>https://www.monlinux.net/2023/06/nmap-obtenir-version-os-exacte-dune-machine-windows/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Sun, 04 Jun 2023 20:33:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Réseaux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">http://www.monlinux.net/?p=850</guid>

					<description><![CDATA[<p>Nmap est un outil de reconnaissance de r&#233;seau tr&#232;s populaire utilis&#233; pour scanner les syst&#232;mes cibles sur un r&#233;seau. Lorsqu&#8217;il est utilis&#233; afin identifier l&#8217;OS Windows, Nmap peut &#234;tre tr&#232;s pr&#233;cis en utilisant diverses techniques telles que la comparaison de... <a class="more-link" href="https://www.monlinux.net/2023/06/nmap-obtenir-version-os-exacte-dune-machine-windows/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/06/nmap-obtenir-version-os-exacte-dune-machine-windows/">NMAP &#8211; identification exacte de l&rsquo;OS d&rsquo;un Windows</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Nmap est un outil de reconnaissance de réseau très populaire utilisé pour scanner les systèmes cibles sur un réseau. Lorsqu&rsquo;il est utilisé afin identifier l&rsquo;OS Windows, Nmap peut être très précis en utilisant diverses techniques telles que la comparaison de signatures de paquets, la reconnaissance de services et la collecte d&rsquo;informations d&rsquo;en-tête.</p>



<p>Pour utiliser Nmap pour identifier l&rsquo;OS Windows, vous pouvez utiliser la commande suivante :</p>



<pre class="wp-block-code"><code class="">nmap -O [IP_ADDRESS]</code></pre>



<p>Pour l&rsquo;identification plus poussée via le protocole SMB :</p>



<pre class="wp-block-code"><code class="">export NMAPDIR=.
mkdir scripts

wget http://nmap.org/svn/scripts/smb-os-discovery.nse

nmap --script smb-os-discovery.nse -p445 127.0.0.1

nmap -sU -sS --script smb-os-discovery.nse -p U:137,T:139 127.0.0.1

Nmap scan report for 10.xx.xx.xx
Host is up (0.00020s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: F8:BC:xx:xx:xx:xx (Unknown)
Host script results:
| smb-os-discovery:
|   OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)
|   NetBIOS computer name: IHATEWINDOWS
|   Workgroup: WORKGROUP
|_  System time: 2015-03-20 22:55:05 UTC+1

Nmap done: 1 IP address (1 host up) scanned in 0.49 seconds</code></pre>



<p>La librairie se trouve ici : <a href="http://nmap.org/nsedoc/scripts/smb-os-discovery.html">smb-os-discovery NSE Script</a>.</p>



<p>Ce ne sera que les windows répondant à SMB.</p>



<p>Et la version qui essaye d&rsquo;authentifier l&rsquo;OS comme précédemment + les hotes en samba (plus fouillis mais au moins on prouve que c&rsquo;est du matos switch, linux, vmware, etc)</p>



<pre class="wp-block-code"><code class="">nmap --script smb-os-discovery.nse -O -p445 10.102.69.0/22 --exclude 10.102.69.107 > scan-$(date '+%d-%m-%Y-%H-%M.txt')</code></pre>



<p>Disponible en version graphique avec zenmap.</p>
<p>L’article <a href="https://www.monlinux.net/2023/06/nmap-obtenir-version-os-exacte-dune-machine-windows/">NMAP &#8211; identification exacte de l&rsquo;OS d&rsquo;un Windows</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.monlinux.net/2023/06/nmap-obtenir-version-os-exacte-dune-machine-windows/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AutoMySQLBackup &#8211; sauvegarde MySQL</title>
		<link>https://www.monlinux.net/2023/05/automysqlbackup-sauvegarde-mysql/</link>
					<comments>https://www.monlinux.net/2023/05/automysqlbackup-sauvegarde-mysql/#comments</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Sun, 21 May 2023 19:32:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1858</guid>

					<description><![CDATA[<p>Vous vous souvenez surement avoir utilis&#233; il y a encore quelques ann&#233;es AutoMySQLBackup sur SourceForge ? Il &#233;tait rapide &#224; mettre en place pour g&#233;rer la sauvegarde mysql. Mais il est en d&#233;su&#233;tude depuis longtemps, il n&#8217;y a plus de... <a class="more-link" href="https://www.monlinux.net/2023/05/automysqlbackup-sauvegarde-mysql/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/05/automysqlbackup-sauvegarde-mysql/">AutoMySQLBackup &#8211; sauvegarde MySQL</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Vous vous souvenez surement avoir utilisé il y a encore quelques années <a href="https://sourceforge.net/projects/automysqlbackup/" target="_blank" rel="noreferrer noopener">AutoMySQLBackup sur SourceForge</a> ? Il était rapide à mettre en place pour gérer la sauvegarde mysql. Mais il est en désuétude depuis longtemps, il n&rsquo;y a plus de support. J&rsquo;ai décidé de reprendre ce script en hébergeant <a href="https://github.com/belgotux/automysqlbackup" target="_blank" rel="noreferrer noopener">AutoMySQLBackup sur github</a>.</p>



<p>L&rsquo;utilisation est presque la même, hormis l&rsquo;utilisation préférable d&rsquo;un fichier my.cnf pour ne plus avoir les identifiants MySQL dans la ligne de commande&#8230; Le mot de passe est stocké dans un fichier à devoir remplir dans la variable <code>CONFIG_mysql_mycnf_file</code> . </p>



<p>D&rsquo;autres bugfix ont été réglés pour des arguments actuellement dépréciés &#8211;ssl, ainsi que des problèmes lié à un accès refusé pour les tablespaces.</p>



<p>Pour ceux qui ne connaissent pas, AutoMySQLBackup permet un fonctionnement en mode whitelist ou blacklist des bases de données à sauvegarder. Souvent, on va lui dire que tout sauvegarder sauf <code>information_schema, performance_schema, sys</code>. C&rsquo;est donc une sauvegarde MySQL automatique ! Et toute nouvelle base de données ajoutée sur le serveur mutualisé sera automatiquement sauvegardée ! Il permet de gérer une rétention différente pour les backups journaliers, hebdomadaires ou mensuels.</p>



<h2 class="wp-block-heading">Installation d&rsquo;AutoMySQLBackup</h2>



<p>Voici les étapes d&rsquo;installation : </p>



<ul class="wp-block-list">
<li>Pré-requis de bonne pratique, créer un utilisateur dédié au dump MySQL pour AutoMySQLBackup</li>
</ul>



<pre class="wp-block-code"><code class="">CREATE USER 'automysqlbackup'@'localhost' IDENTIFIED BY  '&lt;MOT_DE_PASSE&gt;';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER,USAGE ON *.* TO 'automysqlbackup'@'localhost' ;</code></pre>



<ul class="wp-block-list">
<li>Copier le répertoire git OU directement le dernière version de l&rsquo;archive</li>
</ul>



<pre class="wp-block-code"><code class="">git clone https://github.com/belgotux/automysqlbackup.git
wget https://github.com/belgotux/automysqlbackup/archive/refs/heads/main.zip &amp;&amp; unzip main.zip</code></pre>



<ul class="wp-block-list">
<li>Installer le script et les fichiers de configuration</li>
</ul>



<pre class="wp-block-code"><code class="">sudo bash install.sh</code></pre>



<ul class="wp-block-list">
<li>Créer le fichier contenant les identifiants de connexion <code>/etc/automysqlbackup/votre-server.cnf</code></li>
</ul>



<pre class="wp-block-code"><code class="">[mysqldump]
user=automysqlbackup
password=""
[mysql]
user=automysqlbackup
password=""
[mysqlshow]
user=automysqlbackup
password=""</code></pre>



<ul class="wp-block-list">
<li>Créer le fichier de configuration <code>/etc/automysqlbackup/votre-server.conf</code> en vous basant sur le <a href="https://github.com/belgotux/automysqlbackup/blob/main/template.conf" target="_blank" rel="noreferrer noopener">template</a>. Les points importants sont : </li>
</ul>



<pre class="wp-block-code"><code class="">CONFIG_mysql_mycnf_file='/etc/automysqlbackup/votre-server.cnf'
CONFIG_mysql_dump_host='localhost'
CONFIG_backup_dir='/backup/db'
CONFIG_db_names=()  # laisser vide pour sauvegarder toutes les bases de données
CONFIG_db_month_names=() # idem
CONFIG_db_exclude=( 'information_schema' 'performance_schema' 'sys' ) # exclus ces bases
CONFIG_table_exclude=('mysql.event') # exclus cette table
CONFIG_do_monthly="01"
CONFIG_do_weekly="6"
CONFIG_rotation_daily=7
CONFIG_rotation_weekly=4
CONFIG_rotation_monthly=180
CONFIG_mysql_no_tablespaces='yes'
CONFIG_mysql_dump_use_separate_dirs='yes'
CONFIG_mysql_dump_compression='gzip'
CONFIG_mysql_dump_latest='yes'
CONFIG_mysql_dump_latest_clean_filenames='no'
CONFIG_mailcontent='quiet'
CONFIG_mail_address='root'</code></pre>



<ul class="wp-block-list">
<li>Créer le cron <code>/etc/cron.d/automysqlbackup</code></li>
</ul>



<pre class="wp-block-code"><code class="">0 21 * * *       root    /usr/local/bin/automysqlbackup /etc/automysqlbackup/votre-server.conf &gt; /dev/null</code></pre>



<ul class="wp-block-list">
<li>Tester manuellement une première fois pour vérifier la création des dossiers daily/weekly/monthly</li>
</ul>



<pre class="wp-block-code"><code class="">/usr/local/bin/automysqlbackup /etc/automysqlbackup/votre-server.conf</code></pre>



<p>Voilà, vos sauvegardes MySQL sont maintenant automatisées, vous recevez un mail en cas de problème du script!</p>



<p>Si vous utilisez une <a href="https://www.monlinux.net/2018/01/mysql-probleme-replication-master-slave/">architecture MySQL master-slave</a>, je vous conseille de le faire sur le slave, afin de ne pas faire durer un lock table sur le master. Une désynchronisation du slave est préférable, voir un slave dédié si vous ne pouvez vous permettre une désynchro de quelques secondes <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>L’article <a href="https://www.monlinux.net/2023/05/automysqlbackup-sauvegarde-mysql/">AutoMySQLBackup &#8211; sauvegarde MySQL</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.monlinux.net/2023/05/automysqlbackup-sauvegarde-mysql/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Ansible rôle de configuration Debian &#8211; Ubuntu</title>
		<link>https://www.monlinux.net/2023/05/ansible-role-de-configuration-debian-ubuntu/</link>
					<comments>https://www.monlinux.net/2023/05/ansible-role-de-configuration-debian-ubuntu/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Sun, 07 May 2023 20:45:00 +0000</pubDate>
				<category><![CDATA[ansible]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1672</guid>

					<description><![CDATA[<p>J&#8217;ai cr&#233;&#233; un r&#244;le Ansible pour la configuration rapide d&#8217;un nouveau serveur Debian ou Ubuntu mis en place. Il est aussi utile pour la mise &#224; jour de commandes, cl&#233; SSH, nouvel utilisateur, scripts, alias, configuration vim, etc. Ce r&#244;le... <a class="more-link" href="https://www.monlinux.net/2023/05/ansible-role-de-configuration-debian-ubuntu/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/05/ansible-role-de-configuration-debian-ubuntu/">Ansible rôle de configuration Debian &#8211; Ubuntu</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>J&rsquo;ai créé un rôle Ansible pour la configuration rapide d&rsquo;un nouveau serveur Debian ou Ubuntu mis en place. Il est aussi utile pour la mise à jour de commandes, clé SSH, nouvel utilisateur, scripts, alias, configuration vim, etc. <a href="https://galaxy.ansible.com/belgotux/basic" target="_blank" rel="noreferrer noopener">Ce rôle basic est disponible sur Ansible Galaxy</a> et <a href="https://github.com/belgotux/ansible-role-basic" target="_blank" rel="noreferrer noopener">le projet est disponible sur github</a> également.</p>



<h2 class="wp-block-heading">Installation du rôle basic</h2>



<p>Pour installer ce rôle de configuration sous Debian ou Ubuntu rien de plus simple : </p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">ansible-galaxy install belgotux.basic</code></pre>



<h3 class="wp-block-heading">Pré-requis sur un host Debian</h3>



<p><a href="https://github.com/belgotux/ansible-role-basic/blob/main/playbook-init-server.yml" target="_blank" rel="noreferrer noopener">Un playbook d&rsquo;initialisation playbook-init-server.yml</a> est à exécuter seulement sur un host Debian. Pour Ubuntu si vous avez installé en y ajoutant votre clé SSH dès l&rsquo;installation, vous n&rsquo;aviez rien à faire. Exemple : </p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">ansible-playbook -i inventories/prod roles/basic/playbook-init-server.yml -e 'myhost=node9 user=devops become_meth=sudo' -kK</code></pre>



<h3 class="wp-block-heading">Pré-requis pour Debian ou Ubuntu</h3>



<p>Vous devez copier <code>basic.aliases.example</code> vers <code>basic.aliases</code> pour pouvoir ajouter vos propres alias, il y en a déjà certains utiles dans le <a href="https://github.com/belgotux/ansible-role-basic/blob/main/files/basic.aliases.example" target="_blank" rel="noreferrer noopener">fichier d&rsquo;exemple</a>.</p>



<h2 class="wp-block-heading">Configuration des variables Ansible</h2>



<ul class="wp-block-list">
<li><code>bm</code> prend la valeur yes pour installer des outils pour serveur physique</li>



<li><code>ssh_key_filename</code> clé SSH généré pour root, utile pour les accès serveur à serveur (default id_rsa)</li>



<li><code>basic_list_users</code> liste d&rsquo;utilisateur et clé SSH :
<ul class="wp-block-list">
<li><code>name</code> utilisateur</li>



<li><code>primarygroup</code> groupe par défaut de l&rsquo;utilisateur</li>



<li><code>groups</code> groupes de l&rsquo;utilisateur</li>



<li><code>pubkeys</code> liste de clés publiques de l&rsquo;utilisateur, les fichiers dans le dossier <code>files</code></li>



<li><code>home</code> home utilisateur (default <code>/home/username</code>)</li>



<li><code>shell</code> prompt utilisateur (default <code>/bin/bash</code>)</li>



<li><code>create_home</code> créer le répertoire utilisateur (default <code>true</code>)</li>



<li><code>append</code> ajouter ou remplacer les groupes (default <code>true</code> to append)</li>



<li><code>passwd</code> hash du mot de passe de l&rsquo;utilisateur
<ul class="wp-block-list">
<li><code>mkpasswd --method=sha-512</code> résultat du genre <code>$6$</code></li>



<li><code>docker run --rm -it ulikoehler/mkpasswd</code> résultat en yescript <code>$y$</code> pour ubuntu &gt;22.04</li>
</ul>
</li>



<li><code>generate_ssh_key</code> générer une paire de clé SSH (default <code>false</code>)</li>
</ul>
</li>



<li><code>root_public_keys</code> liste de clés publiques à copier depuis le dossier <code>files</code> pour root</li>



<li><code>bash_alias_shared</code> activer le partage d&rsquo;alias (installé dans /usr/share uniquement avec l&rsquo;utilisateur root via <code>remote_user</code> ou <code>become</code> dans le playbook) (default installe seulement  les alias dans le répertoire home de l&rsquo;utilisateur via <code>remote_user</code>)</li>



<li><code>bash_alias_dir_share</code> (default /usr/share)</li>
</ul>



<h3 class="wp-block-heading"><a href="https://github.com/belgotux/ansible-role-basic#optional"></a></h3>



<h3 class="wp-block-heading">optional</h3>



<ul class="wp-block-list">
<li><code>auto_upgrade</code> Configurer inattended-upgrades (default false)</li>



<li><code>basic_packages_default</code>&nbsp;Liste des paquets commun à installer</li>



<li><code>basic_packages_extra</code>&nbsp;Liste d&rsquo;autres paquets supplémentaire pour un groupe ou une machine spécifiques</li>



<li><code>staff_directories</code> liste des répertoires qui peuvent être modifiés par le groupe staff</li>



<li><code>basic_custom_scripts_common</code> liste des scripts locaux commun à copier dans /usr/local/bin</li>



<li><code>basic_custom_scripts_local</code> liste des scripts locaux supplémentaires à copier dans /usr/local/bin (à utiliser dans hosts)</li>
</ul>



<h2 class="wp-block-heading">Exemple de playbook</h2>



<pre class="wp-block-code"><code lang="yaml" class="language-yaml">- hosts: [homeservers,vps]
  remote_user: root
  roles:
    - name: basic
      vars: 
        basic_list_users:
          - name: belgotux
            primarygroup: belgotux
            groups: sudo,users,staff,adm
            shell: "/bin/zsh"
            passwd: $6$xxxx
            pubkeys:
              - xxx.pub
              - yyy.pub
        bash_alias_shared: yes
        staff_directories:
          - /usr/local/bin
          - /usr/local/etc
        auto_upgrade: true</code></pre>
<p>L’article <a href="https://www.monlinux.net/2023/05/ansible-role-de-configuration-debian-ubuntu/">Ansible rôle de configuration Debian &#8211; Ubuntu</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.monlinux.net/2023/05/ansible-role-de-configuration-debian-ubuntu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Relais mail Postfix &#8211; envoyer ses mails sécurisés vers M365</title>
		<link>https://www.monlinux.net/2023/04/relais-mail-postfix-envoyer-ses-mails-securises-vers-m365/</link>
					<comments>https://www.monlinux.net/2023/04/relais-mail-postfix-envoyer-ses-mails-securises-vers-m365/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Sun, 09 Apr 2023 19:12:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[M365]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1713</guid>

					<description><![CDATA[<p>Cet article est dans la suite des articles consacr&#233;s &#224; postfix, je vais d&#233;tailler la gestion des mails pour une infrastructure cons&#233;quente, sans toutefois rentrer dans la HA. Il y a 2 types de flux &#224; traiter : ceux en... <a class="more-link" href="https://www.monlinux.net/2023/04/relais-mail-postfix-envoyer-ses-mails-securises-vers-m365/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/04/relais-mail-postfix-envoyer-ses-mails-securises-vers-m365/">Relais mail Postfix &#8211; envoyer ses mails sécurisés vers M365</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Cet article est dans la suite des articles consacrés à postfix, je vais détailler la gestion des mails pour une infrastructure conséquente, sans toutefois rentrer dans la HA. Il y a 2 types de flux à traiter : ceux en interne de nos serveurs vers notre relais SMTP postfix et le flux mail qu&rsquo;il faut sécuriser vers M365.</p>



<p>L&rsquo;utilisation d&rsquo;un relais tel que Microsoft 365 facilite la sécurisation de nos échanges mails, car une intégration de DKIM et DMARC est déjà gérée nativement! Si vous avez déjà vos mails ou l&rsquo;ensemble de votre active directory, c&rsquo;est dans cette direction qu&rsquo;il faut se diriger pour une mise en place efficace.</p>



<p>Je suppose qu&rsquo;il est possible de faire cela également avec Infomaniak pour ceux disposant de comptes pro chez eux. Avec mon compte perso je n&rsquo;ai pas vu cette option. Avec OVH, oubliez directement! Du temps où j&rsquo;étais encore client chez eux, j&rsquo;avais parlé DKIM DMARC au support, et on m&rsquo;a posés des questions pour savoir pourquoi je veux ces fonctions etc. Vraiment comme si j&rsquo;étais un extraterrestre! On était tout de même en 2020&#8230; Rien n&rsquo;était fait pour le mail mutualisé donc&#8230; Longtemps client perso et pro je suis passé chez Infomaniak pour la partie mutualisée en partie pour cela. J&rsquo;arrête le OFF là <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>



<h2 class="wp-block-heading">Configuration dans l&rsquo;Exchange 365</h2>



<p>Il faut créer un <a href="https://admin.exchange.microsoft.com/#/connectors" target="_blank" rel="noreferrer noopener">connector </a>dans mail flow &gt; connectors &gt; Add a connector : </p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="495" height="421" src="https://www.monlinux.net/wp-content/uploads/image-24.png" alt="connectors exchange" class="wp-image-1715" srcset="https://www.monlinux.net/wp-content/uploads/image-24.png 495w, https://www.monlinux.net/wp-content/uploads/image-24-300x255.png 300w" sizes="(max-width: 495px) 100vw, 495px" /></figure>



<p>L&rsquo;authentification est faite par adresse IP ou certificat&nbsp;<strong>valide</strong>. Il faut savoir que votre serveur relais interne postfix va lui-même se connecter sur VOTRE_DNS.mail.protection.outlook.com et celui-ci présente un certificat valide. Votre « client » va donc authentifier le serveur de Microsoft comme valide (notre serveur relais est client par rapport au relais M365).</p>



<p>L&rsquo;authentification par IP est déjà suffisante en soit. Mais vous pouvez décider que les serveurs relais de Microsoft n&rsquo;acceptent QUE les mails si le serveur client (votre relais SMTP) présente le bon certificat client. Ce qui fait qu&rsquo;il y a une identification et authentification de part et d&rsquo;autre!</p>



<ul class="wp-block-list">
<li>Configurer une restriction par votre IP publique de sortie :</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="560" height="350" src="https://www.monlinux.net/wp-content/uploads/image-25.png" alt="" class="wp-image-1716" srcset="https://www.monlinux.net/wp-content/uploads/image-25.png 560w, https://www.monlinux.net/wp-content/uploads/image-25-300x188.png 300w" sizes="(max-width: 560px) 100vw, 560px" /></figure>



<ul class="wp-block-list">
<li>Configurer une restriction par un certificat valide : dans ce cas cela ne doit pas forcément être le certificat *.votredomain.tld, cela peut très bien être monrelais.mondomainetechnique.tld. La seule règle étant que ce certificat soit émis par une autorité de certification reconnue.</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="573" height="400" src="https://www.monlinux.net/wp-content/uploads/image-26.png" alt="" class="wp-image-1717" srcset="https://www.monlinux.net/wp-content/uploads/image-26.png 573w, https://www.monlinux.net/wp-content/uploads/image-26-300x209.png 300w" sizes="(max-width: 573px) 100vw, 573px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Mettre un certbot avec let&rsquo;s encrypt sur votre serveur est envisageable si vous utilisez une vérification let&rsquo;s encrypt par dns.</p>
</blockquote>



<p>Si vous souhaitez plus d&rsquo;infos, <a href="https://learn.microsoft.com/en-us/exchange/troubleshoot/email-delivery/office-365-notice" target="_blank" rel="noreferrer noopener">la documentation Microsoft</a> est bien faite.</p>



<p>Remarque : Les&nbsp;<a href="https://learn.microsoft.com/en-us/office365/servicedescriptions/exchange-online-service-description/exchange-online-limits#sending-limits-1">limites d&rsquo;envoie pour M365</a>&nbsp;sont larges et dépendent de votre licence.</p>



<h2 class="wp-block-heading">Un mot sur le serveur Postfix</h2>



<p>Il faut tout de suite savoir que Postfix est à la fois un serveur <strong>et un client</strong>. Il faut donc bien distinguer les directives. Veillez donc bien au début qui peut être : </p>



<ul class="wp-block-list">
<li>smtp_tls_xxx en tant que client</li>



<li>smtpd_tls_xxx en tant que serveur</li>
</ul>


<figure class="wp-block-post-featured-image"><img loading="lazy" decoding="async" width="600" height="157" src="https://www.monlinux.net/wp-content/uploads/image-23-600x157.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" srcset="https://www.monlinux.net/wp-content/uploads/image-23-600x157.png 600w, https://www.monlinux.net/wp-content/uploads/image-23-300x78.png 300w, https://www.monlinux.net/wp-content/uploads/image-23-1024x267.png 1024w, https://www.monlinux.net/wp-content/uploads/image-23-768x200.png 768w, https://www.monlinux.net/wp-content/uploads/image-23-1536x401.png 1536w, https://www.monlinux.net/wp-content/uploads/image-23-945x247.png 945w, https://www.monlinux.net/wp-content/uploads/image-23.png 1632w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>


<p>Notre serveur relais est serveur par rapport à nos serveurs internes. Il est client par rapport à Microsoft 365.</p>



<h3 class="wp-block-heading">Configuration de notre relais mail Postfix</h3>



<p>J&rsquo;ai distingué les directives serveurs et clients pour que la configuration soit lisible.</p>



<p>Pour le comportement serveur du relais SMTP : </p>



<ul class="wp-block-list">
<li><code>smtpd_tls_security_level=may</code> <a href="http://www.postfix.org/postconf.5.html#smtp_tls_security_level" target="_blank" rel="noreferrer noopener">permet</a> de spécifier que notre serveur accepte une liaison client en TLS mais également en clair. Il faut penser aux copieurs ou autre matériel ne gérant pas le TLS interne à notre réseau</li>



<li><code>smtpd_tls_loglevel</code> permet d&rsquo;avoir une trace des connexions TLS dans les logs avec les ciphers pris en compte, pratique pour voir quel client envoie encore en clair et s&rsquo;il peut être modifié</li>



<li><code>smtpd_tls_cert_file</code> et <code>smtpd_tls_key_file</code> renseignent le certificat et la clé utilisé <strong>en interne</strong></li>



<li><code>smtpd_tls_chain_files</code> est le nouveau format pour pouvoir contenir plusieurs clés et certificats pour différents noms de domaine. Il faut <strong>toujours</strong> la clé et puis la chaîne de certificat et le certificat final</li>



<li><code>smtpd_tls_session_cache_database</code> permet d&rsquo;avoir un peu de performance quand beaucoup de mails sont envoyés</li>
</ul>



<pre class="wp-block-code"><code lang="bash" class="language-bash">### SERVER ###
smtpd_tls_security_level=may
smtpd_tls_loglevel = 1

smtpd_tls_cert_file=/etc/xxx.crt
smtpd_tls_key_file=/etc/xxx.key
#alternative
#smtpd_tls_chain_files=/etc/your-key-and-local-crt-and-chain-with-your-local-ca-combined.all

#optionel
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache



### CLIENT ###
relayhost = your-domain.mail.protection.outlook.com
smtp_tls_security_level = encrypt # optionnel : secure
smtp_tls_mandatory_ciphers = high
smtp_tls_loglevel = 1
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
#optionnel
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_chain_files = /etc/xxx.all
</code></pre>



<p>Pour le comportement client du relais SMTP : </p>



<ul class="wp-block-list">
<li><code>relayhost</code> on vient mettre le DNS de notre tenant M365</li>



<li><code>smtp_tls_security_level</code> <a href="http://www.postfix.org/postconf.5.html#smtpd_tls_security_level" target="_blank" rel="noreferrer noopener">le niveau de securité</a> minimal accepté en TLS. Je vous conseille secure</li>



<li><code>smtp_tls_mandatory_ciphers</code> high contient un « bundle » de ciphers satisfaisant</li>



<li><code>smtp_tls_loglevel</code> permet d&rsquo;avoir une trace des connexions TLS</li>



<li><code>smtp_tls_CAfile</code> permet de spécifié le fichier des CA faisant autorité. Un fichier du système contient déjà les CA connus du monde</li>



<li><code>smtp_tls_session_cache_database</code> permet d&rsquo;avoir un peu de performance quand beaucoup de mails sont envoyés</li>



<li><code>smtp_tls_chain_files</code> spécifiez la chaine de certificats client qui est utiliser si vous aviez choisi une restriction par  un certificat client pour votre connector M365. L&rsquo;ordre dans la chaine est <strong>importante</strong> : votre clé privée, suivie de votre certificat, ensuite le certificat intermédiaire et pour finir le certificat du CA</li>
</ul>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Par défaut&nbsp;<a href="http://www.postfix.org/postconf.5.html#smtp_tls_security_level">en niveau de sécurité</a>&nbsp;<code>encrypt</code>&nbsp;ou&nbsp;<code>verify</code>&nbsp;ou&nbsp;<code>secure</code>&nbsp;vont authoriser le trust du nom de domaine lui-même et de son dns parent. Respectivement&nbsp;<code>nexthop</code>&nbsp;et&nbsp;<code>dot-nexthop</code>. M365 n&rsquo;émettant un certificat que pour&nbsp;<code>mail.protection.outlook.com</code>&nbsp;et pas&nbsp;<code>your-domain.mail.protection.outlook.com</code>.<br>Ce comportement peut être changer via le paramètre&nbsp;<a href="http://www.postfix.org/postconf.5.html#smtp_tls_secure_cert_match">smtp_tls_secure_cert_match</a>.</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>S&rsquo;il y a un problème d&rsquo;accès au relais M365 dans les logs postfix comme ci-dessous, vérifier que l&rsquo;IP de sortie ou le certificat sont ok : </p>



<pre class="wp-block-code"><code class="">host xxx.mail.protection.outlook.com[104.47.2.7] said: 550 5.4.1 Recipient address rejected: Access denied. AS(201776281) [AB4EUR01RT057.eop-EUR01.prod.protection.outlook.com] (in reply to RCPT TO command)</code></pre>
</div></div>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>En cas de succès avec un certificat client vous aurez : </p>



<pre class="wp-block-code"><code class="">postfix/smtp[71318]: your-domain.mail.protection.outlook.com[104.47.0.36]:25: matched peername: *.mail.protection.outlook.com
postfix/smtp[71318]: your-domain.mail.protection.outlook.com[104.47.0.36]:25: subject_CN=mail.protection.outlook.com, issuer_CN=DigiCert Cloud Services CA-1, fingerprint=6A:DD:32:6D:2A:0C:C5:3A:9E:D7:E7:91:3D:6F:5C:F4, pkey_fingerprint=20:78:41:CD:EC:4F:19:7A:E0:B2:01:4F:3C:3D:1C:EE
postfix/smtp[71318]: Verified TLS connection established to your-domain.mail.protection.outlook.com[104.47.0.36]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
</code></pre>
</div></div>



<h4 class="wp-block-heading">Fichier main.cf d&rsquo;un relais SMTP Postfix complet :</h4>



<pre class="wp-block-code"><code lang="bash" class="language-bash">myorigin = /etc/hostname
mydomain = your-local-domain
mydestination = $myhostname, $myorigin, localhost.localdomain, localhost, localhost.your-local-domain

# Backward compatibility off
compatibility_level = 3.6
relay_domains = $mydestination
append_dot_mydomain = yes
smtputf8_enable=yes
smtpd_banner = $myhostname ESMTP
biff = no
readme_directory = no

# TLS parameters server
smtpd_tls_chain_files=/etc/your-key-and-local-crt-and-chain-with-your-local-ca-combined.all
#alternative
#smtpd_tls_cert_file=/etc/xxx.cer
#smtpd_tls_key_file=/etc/xxx.key
smtpd_tls_security_level=may
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

# TLS parameters client
relayhost = xxx.mail.protection.outlook.com
smtp_tls_security_level = secure
smtp_tls_mandatory_ciphers = high
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

# Client certificat to be identified by M365
#smtp_tls_chain_files = /etc/xxx.all

smtpd_client_restrictions = permit_mynetworks reject
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

mynetworks = 10.0.0.0/22,xxx
mailbox_size_limit = 0
message_size_limit = 29480000
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

header_checks = regexp:/etc/postfix/header_checks_regexp
smtp_header_checks = regexp:/etc/postfix/replace_header_checks_regexp

sender_canonical_maps = regexp:/etc/postfix/sender_canonical_regexp</code></pre>



<h3 class="wp-block-heading">Configuration d&rsquo;un serveur client interne linux</h3>



<p>Voici la partie TLS d&rsquo;un fichier <code>main.cf</code> d&rsquo;un postfix « satellite » qui se connecte à notre relais interne. Il dois évidement avoir le certificat serveur de notre relais ou notre CA interne de configuré dans les certificats du système ou via la directive <code>smtp_tls_CAfile</code>.</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">smtp_tls_security_level = may
smtp_tls_loglevel = 1
<em>#optionnel</em>
smtp_tls_security_level = secure
smtp_tls_mandatory_ciphers = high
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache</code></pre>
<p>L’article <a href="https://www.monlinux.net/2023/04/relais-mail-postfix-envoyer-ses-mails-securises-vers-m365/">Relais mail Postfix &#8211; envoyer ses mails sécurisés vers M365</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.monlinux.net/2023/04/relais-mail-postfix-envoyer-ses-mails-securises-vers-m365/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Réécriture de mail &#8211; serveur relais postfix</title>
		<link>https://www.monlinux.net/2023/03/reecriture-de-mail-serveur-relais-postfix/</link>
					<comments>https://www.monlinux.net/2023/03/reecriture-de-mail-serveur-relais-postfix/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Sun, 26 Mar 2023 20:13:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1704</guid>

					<description><![CDATA[<p>Que vous envoyez vos mails en direct sur le net ou via un relais SMTP externe tel que M365, il faut penser &#224; v&#233;rifier que les domaines utilis&#233;s soient les bons. Il arrive souvent d&#8217;avoir un nom de domaine ou... <a class="more-link" href="https://www.monlinux.net/2023/03/reecriture-de-mail-serveur-relais-postfix/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/03/reecriture-de-mail-serveur-relais-postfix/">Réécriture de mail &#8211; serveur relais postfix</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Que vous envoyez vos mails en direct sur le net ou via un relais SMTP externe tel que M365, il faut penser à vérifier que les domaines utilisés soient les bons. Il arrive souvent d&rsquo;avoir un nom de domaine ou suffixe DNS interne utilisé par les serveurs. Il est <strong>impératif de le retranscrire</strong> vers un nom de domaine publiquement valide.</p>



<p>J&rsquo;explique ici le cas où le suffixe DNS interne est yourdomain.lan et le domaine externe est your-domain.tld</p>



<p>D&rsquo;abord il faut distinguer 2 types de mails : </p>



<ul class="wp-block-list">
<li>Ceux envoyés directement à partir de la machine ou une de ses applications locales</li>



<li>Ceux envoyés depuis la machine qui fait office de relais.</li>
</ul>



<p>Ce sont bien <strong>2 choses différentes pour postfix et donc 2 types de filtre différents</strong>.</p>



<h3 class="wp-block-heading">Filtre de sortie pour les mails générés sur la machine</h3>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Votre serveur relais pouvant lui même envoyer un mail pour de la maintenance, mise à jour etc. Il est lui-même un serveur applicatif.</p>



<p>Dans le fichier <code>main.cf</code>, il faut renseigner cette directive : </p>



<pre class="wp-block-code"><code class="">sender_canonical_maps = regexp:/etc/postfix/sender_canonical_regexp</code></pre>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Exemple de contenu de <code>/etc/postfix/sender_canonical_regexp</code> pour rediriger que certains domaines :</p>



<pre class="wp-block-code"><code class="">/^(.*)@(.*)\.your-local-domain\.lan$/ ${2}-${1}@your-domain.tld
/^(.*)\ &lt;(.*)@(.*)\.your-local-domain\.lan&gt;$/ ${1} &lt;${3}-${2}@your-domain.tld&gt;</code></pre>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>On oublie pas de faire un postmap : </p>



<pre class="wp-block-code"><code class="">postmap /etc/postfix/sender_canonical_regexp</code></pre>
</div></div>



<p>Vous pouvez toujours ajouter un « catch all » à la fin comme décrit dans l&rsquo;article précédent de réécriture de mail simple avec postfix.</p>



<h3 class="wp-block-heading">Filtre de sortie pour les mails transitant sur notre relais interne</h3>



<p>Typiquement vous avez un relais mail interne utilisé par vos autres serveurs. Il faut dans un premier temps ajouter votre adresse IP publique de sortie dans le champ SPF de votre nom de domaine. Le DKIM et DMARC permettent de sécurisé encore mieux l&rsquo;authenticité de vos messages, mais une chose à la fois <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>



<p>Vous pouvez utilisez la directive <a href="http://www.postfix.org/postconf.5.html#header_checks" target="_blank" rel="noreferrer noopener">header_checks</a> ou <a href="http://www.postfix.org/postconf.5.html#smtp_header_checks" target="_blank" rel="noreferrer noopener">smtp_header_checks</a>. Dans mon cas j&rsquo;ai besoin de faire 2 opérations pour le même filtre mail, <strong>ce qui n&rsquo;est pas possible de base</strong>. Mais en jouant avec ces 2 directives, je peux arriver à mes fins : marquer les mails à problème et faire une réécriture de mail :<br><strong>ATTENTION à l&rsquo;ordre :</strong> c&rsquo;est d&rsquo;abord <code>header_checks</code> qui est interprété et ensuite <code>smtp_header_checks</code>. Il faut d&rsquo;abords mettre le WARN et ensuite le REPLACE</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Exemple pour faire un WARN et un REPLACE, on ajoute les directives dans le fichier <code>main.cf</code> :</p>



<pre class="wp-block-code"><code class="">header_checks = regexp:/etc/postfix/warn_checks_regexp
smtp_header_checks = regexp:/etc/postfix/header_checks_regexp</code></pre>
</div></div>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>cat warn_checks_regexp :</p>



<pre class="wp-block-code"><code class="">/^From:\ (.*)@(.*)\.yourdomain\.lan$/ WARN bad sender
/^From:\ (.*)\ &lt;(.*)@(.*)\.yourdomain\.lan&gt;$/ WARN bad sender</code></pre>
</div></div>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>cat header_checks_regexp :</p>



<pre class="wp-block-code"><code class="">/^From:\ (.*)@(.*)\.your-local-domain\.lan$/ REPLACE From: ${2}-${1}@your-domain.tld
/^From:\ (.*)\ &lt;(.*)@(.*)\.your-local-domain\.lan&gt;$/ REPLACE From: ${1} &lt;${3}-${2}@your-domain.tld&gt;</code></pre>
</div></div>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>On oublie pas de faire un postmap : </p>



<pre class="wp-block-code"><code class="">postmap /etc/postfix/warn_checks_regexp
postmap /etc/postfix/header_checks_regexp</code></pre>
</div></div>



<p>Le reste de votre configuration postfix dépendra :</p>



<ul class="wp-block-list">
<li>Si vous envoyez directement les mails vers Internet, auquel cas je vous conseille de configurer les signatures DKIM et d&rsquo;utiliser le record DNS DMARC</li>



<li>Si vous utilisez un serveur relais tel que M365 si vous y géré déjà vos services mails</li>
</ul>
<p>L’article <a href="https://www.monlinux.net/2023/03/reecriture-de-mail-serveur-relais-postfix/">Réécriture de mail &#8211; serveur relais postfix</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.monlinux.net/2023/03/reecriture-de-mail-serveur-relais-postfix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/

Mise en cache de page à l’aide de Disk: Enhanced 
Mise en cache de la base de données de 42/66 requêtes en 0.041 secondes utilisant Disk

Served from: www.monlinux.net @ 2026-05-13 23:03:58 by W3 Total Cache
-->