<?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/tag/linux-2/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.monlinux.net/tag/linux-2/</link>
	<description>by Belgotux</description>
	<lastBuildDate>Wed, 12 Feb 2025 18:22:51 +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/tag/linux-2/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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>Systemd &#8211; point de montage CIFS</title>
		<link>https://www.monlinux.net/2023/07/systemd-point-de-montage-cifs/</link>
					<comments>https://www.monlinux.net/2023/07/systemd-point-de-montage-cifs/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Sun, 16 Jul 2023 20:12:00 +0000</pubDate>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1903</guid>

					<description><![CDATA[<p>Pour ne pas bloquer la boot d&#8217;une machine au d&#233;marrage, il est pr&#233;f&#233;rable d&#8217;&#233;viter le montage d&#8217;une ressource r&#233;seau via /etc/fstab. Utiliser directement systemd &#224; cet avantage. Au final nos point de montage dans /etc/fstab sont ajout&#233; &#224; systemd sous... <a class="more-link" href="https://www.monlinux.net/2023/07/systemd-point-de-montage-cifs/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/07/systemd-point-de-montage-cifs/">Systemd &#8211; point de montage CIFS</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Pour ne pas bloquer la boot d&rsquo;une machine au démarrage, il est préférable d&rsquo;éviter le montage d&rsquo;une ressource réseau via <code>/etc/fstab</code>. Utiliser directement systemd à cet avantage. Au final nos point de montage dans <code>/etc/fstab</code> sont ajouté à systemd sous la forme <code>mon_point_de_montage.mount</code></p>



<p>Systemd va pouvoir avoirune dépendance au réseau par exemple, pour monter le CIFS uniquement si la daemon réseau a bien été démarré. Le système pourra booter en level 3 même si le CIFS n&rsquo;est pas joignable!</p>



<h2 class="wp-block-heading">Le fichier systemd à placer dans <code>/etc/systemd/system/</code></h2>



<pre class="wp-block-code"><code class="">[Unit]
  Description=cifs mount script
  Requires=network-online.target
  After=network-online.service

[Mount]
  What=//192.168.56.1/mp$
  Where=/mnt/mp
  #Options=username=yourCifsUser,password=Secretpassword,workgroup=YourDomain,rw
  Options=credentials=/etc/systemd.cred.MonNas
  Type=cifs

[Install]
  WantedBy=multi-user.target</code></pre>



<p>Je conseille d&rsquo;utiliser le format avec un fichier de credentials qui aura des droits stricts 600 pour que seul root y accède. Laissant notre fichier systemd lisible.</p>



<ul class="wp-block-list">
<li><code>network-online</code> permet d&rsquo;<a href="https://systemd.io/NETWORK_ONLINE/" target="_blank" rel="noreferrer noopener">attendre que la ressource réseau soit accessible</a> avant de tenter le montage</li>



<li><code>What </code>est notre ressource distante</li>



<li><code>where </code>est notre point de montage local</li>



<li><code>Options</code> permet de définir les options, voir <code>man mount.cifs</code></li>



<li><code>Type</code> est cifs dans ce cas-ci</li>



<li><code>multi-user</code> est le niveau 3 de démarrage, un classique</li>
</ul>



<h3 class="wp-block-heading">Le fichier credentials</h3>



<pre class="wp-block-code"><code class="">username=MonUser
password=MonPass
domain=domain.tld</code></pre>



<h2 class="wp-block-heading">Nommage du fichier de configuration</h2>



<p>Pour choisir un nom de fichier, attention que systemd est capricieux, il faut échapper pour être certain. Pour un répertoire, une option <code>-p</code> est prévue ainsi que <code>--suffix</code>.<br>Préféré un nom de point de montage avec des underscores plutôt que des tirets pour une meilleure lisibilité :</p>



<pre class="wp-block-code"><code class="">~$ systemd-escape -p --suffix=mount "/data/MON-DUMP-DB"
data-MON\x2dDUMP\x2dDB.mount
~$ systemd-escape -p --suffix=mount "/data/MON_DUMP_DB"
data-MON_DUMP_DB.mount</code></pre>



<p>On relance et on active systemd :</p>



<pre class="wp-block-code"><code class="">sudo systemctl daemon-reload
sudo systemctl enable mnt-dp.mount
sudo systemctl start mnt-dp.mount</code></pre>



<p>Quelques infos avec une <a href="https://michlstechblog.info/blog/systemd-mount-examples-for-cifs-shares/" target="_blank" rel="noreferrer noopener">variante pour un démontage après un temps d&rsquo;inutilisation</a> via automount.</p>



<p>Personnellement j&rsquo;utilise ce montage pour faire les <a href="https://www.monlinux.net/2023/05/automysqlbackup-sauvegarde-mysql/">dump DB MySQL et mariaDB</a> sur un NAS, afin de ne pas faire un backup d&rsquo;une vm contenant elle-même des backups&#8230;</p>
<p>L’article <a href="https://www.monlinux.net/2023/07/systemd-point-de-montage-cifs/">Systemd &#8211; point de montage CIFS</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/07/systemd-point-de-montage-cifs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Rôle Ansible Automysqlbackup</title>
		<link>https://www.monlinux.net/2023/07/role-ansible-automysqlbackup/</link>
					<comments>https://www.monlinux.net/2023/07/role-ansible-automysqlbackup/#respond</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Sat, 01 Jul 2023 15:10:00 +0000</pubDate>
				<category><![CDATA[ansible]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1888</guid>

					<description><![CDATA[<p>J&#8217;ai cr&#233;&#233; ce r&#244;le Ansible Automysqlbackup qui est compatible Debian, Ubuntu et la branche Redhat pour d&#233;ployer le fork d&#8217;Automysqlbackup remis aux normes actuelles. Ce r&#244;le est disponible sur Ansible Galaxy et le projet est disponible sur github &#233;galement. Installation... <a class="more-link" href="https://www.monlinux.net/2023/07/role-ansible-automysqlbackup/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/07/role-ansible-automysqlbackup/">Rôle Ansible Automysqlbackup</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éé ce rôle Ansible Automysqlbackup qui est compatible Debian, Ubuntu et la branche Redhat pour déployer <a href="https://www.monlinux.net/2023/05/automysqlbackup-sauvegarde-mysql/">le fork d&rsquo;Automysqlbackup</a> remis aux normes actuelles. Ce rôle est disponible sur <a href="https://galaxy.ansible.com/belgotux/automysqlbackup" target="_blank" rel="noreferrer noopener">Ansible Galaxy</a> et le projet est <a href="https://github.com/belgotux/ansible-role-automysqlbackup" target="_blank" rel="noreferrer noopener">disponible sur github</a> également.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Installation du rôle Ansible Automysqlbackup</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.automysqlbackup</code></pre>



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



<p>Il est préférable de créer un utilisateur spécifique pour automysqlbackup sur chaque serveur devant être sauvegardé. Pour cela les droits suivants sont nécessaire : </p>



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



<p>Pour utiliser le rôle Ansible Automysqlbackup en local, les droits suivants : </p>



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



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



<h3 class="wp-block-heading">Nécessaires</h3>



<p>Configuration du serveur : </p>



<ul class="wp-block-list">
<li><code>automysqlbackup_repo</code> répertoire où déposer le projet git (défaut <code>/opt</code>)</li>



<li><code>automysqlbackup_client</code> binaire sql client à utiliser, soit mariadb-client ou mysql-client (défaut <code>mariadb-client</code>)</li>



<li><code>automysqlbackup_bin</code> répertoire où copier le script (défaut <code>/usr/local/bin</code>)</li>



<li><code>automysqlbackup_conf</code> répertoire des configurations (défaut <code>/etc/automysqlbackup</code>)</li>



<li><code>automysqlbackup_backupdir</code> répertoire des sauvegardes</li>
</ul>



<p>Configuration du client SQL</p>



<ul class="wp-block-list">
<li><code>automysqlbackup_default_user</code> utilisateur MySQL utilisé par défaut pour les serveurs (défaut <code>automysqlbackup</code>)</li>



<li><code>automysqlbackup_default_passwd</code> mot de passe MySQL utilisé par défaut pour les serveurs</li>



<li><code>automysqlbackup_configurations</code> liste des serveurs à sauvegarder. Prend la valeur de <code>automysqlbackup_default_user</code>, <code>automysqlbackup_default_passwd</code>, etc si <code>user</code>, <code>passwd</code>, etc n&rsquo;est pas défini</li>
</ul>



<pre class="wp-block-code"><code class="">automysqlbackup_configurations:
- name: server1
  server: xxx.yourdomain.tld
  port: 3306            # default use 3306
  user: test            # default use `automysqlbackup_default_user`
  passwd: testpwd       # default use `automysqlbackup_default_passwd`
  cron: "0 23 * * *"    # default use `automysqlbackup_default_cron`
  montly: 01            # default use `automysqlbackup_monthly`
  weekly: 5             # default use `automysqlbackup_weekly`
  daily_to_keep: 5      # default use `automysqlbackup_daily_to_keep`
  weekly_to_keep: 4     # default use `automysqlbackup_weekly_to_keep`
  monthly_to_keep: 3    # default use `automysqlbackup_monthly_to_keep`
- name: server2
  server: 192.168.x.x
</code></pre>



<ul class="wp-block-list">
<li><code>automysqlbackup_default_db_exclude</code> liste des bases de données exclues par défaut si la variable <code>db_names</code> n&rsquo;est pas remplie sur la configuration serveur (défaut « <code>('information_schema' 'performance_schema' 'sys' )</code>« )</li>



<li><code>automysqlbackup_default_table_exclude</code> liste des tables à exclure au format db_name.table_name (défaut « <code>('mysql.event')</code>« )</li>



<li><code>automysqlbackup_default_cron</code> défini le cron par défaut à utiliser pour tous les serveurs, exemple <code>"0 23 * * *"</code></li>



<li><code>automysqlbackup_create_user</code> utilisateur système à créer par le rôle, <code>true</code> or <code>false</code> ? Crée <code>automysqlbackup_default_cron_user</code> (défaut <code>true</code>)</li>
</ul>



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



<h3 class="wp-block-heading" id="server-configuration-1">Server configuration</h3>



<ul class="wp-block-list">
<li><code>automysqlbackup_multicore</code> utilisation de compression multicore pigz pour gzip ou pbzip2 pour bzip2. Peut être <code>'yes'</code> ou <code>'no'</code> (défaut <code>'no'</code>)</li>



<li><code>automysqlbackup_multicore_threads</code> nombre de cpu à utiliser. Peut être un nombre ou <code>auto</code> pour laisser pigz ou pbzip2 choisir (défaut <code>auto</code>)</li>



<li><code>automysqlbackup_default_cron_user</code> utilisateur à utiliser pour exécuter le cron (default <code>automysqlbackup</code>)</li>



<li><code>automysqlbackup_default_cron_group</code> groupe à utiliser pour le dossier de backup (défaut <code>users</code>)</li>



<li><code>automysqlbackup_default_cron_path</code> répertoire cron (défaut <code>/etc/cron.d</code>)</li>
</ul>



<h3 class="wp-block-heading" id="sql-client-configuration-1">SQL client configuration</h3>



<ul class="wp-block-list">
<li><code>automysqlbackup_monthly</code> quelle jour faire le backup mensuel ? (01 à 31) mettre 0 pour désactivé le backup mensuel (défaut <code>01</code>)</li>



<li><code>automysqlbackup_weekly</code> uelle jour faire le backup hebdomadaire ? (1 à 7 ou 1 est lundi) mettre 0 pour désactivé le backup hebdomadaire (défaut <code>5</code>)</li>



<li><code>automysqlbackup_daily_to_keep</code> combien de backups journaliers à garder (défaut <code>6</code>)</li>



<li><code>automysqlbackup_weekly_to_keep</code> combien de backups hebdomadaires à garder (défaut <code>28</code>)</li>



<li><code>automysqlbackup_monthly_to_keep</code> combien de backups mensuels à garder (défaut <code>180</code>)</li>



<li><code>automysqlbackup_no_tablespaces</code> le droits sql PROCESS est nécessaire depuis MySQL 5.7.31 et 8.0.21, l&rsquo;option &#8211;no-tablespaces permet d&rsquo;éviter d&rsquo;avoir l&rsquo;erreur. Peut être <code>'yes'</code> ou <code>'no'</code> (défaut <code>'yes'</code>)</li>



<li><code>automysqlbackup_dump_usessl</code> Utiliser le chiffrement SSL avec mysqldump ? Peut être <code>'yes'</code> ou <code>'no'</code> (défaut <code>'no'</code>)</li>



<li><code>automysqlbackup_dump_single_transaction</code> Lors de l&rsquo;utilisation de cette option, il est important de noter que seules les tables InnoDB sont sauvegardées dans un état cohérent. Par exemple, toutes les tables MyISAM ou MEMORY sauvegardées lors de l&rsquo;utilisation de cette option peuvent encore changer d&rsquo;état. Peut être <code>'yes'</code> ou <code>'no'</code> (défaut <code>'no'</code>)</li>



<li><code>automysqlbackup_dump_dbstatus</code> Statut de sauvegarde de table(s) dans un fichier texte. Cela est très utile lors de la restauration des sauvegardes, car cela donne une idée des changements survenus entre-temps. Peut être <code>'yes'</code> ou <code>'no'</code> (défaut <code>'no'</code>)</li>



<li><code>automysqlbackup_dump_create_database</code> Inclure la commande CREATE DATABASE dans le backup. Peut être <code>'yes'</code> ou <code>'no'</code> (défaut <code>'no'</code>)</li>



<li><code>automysqlbackup_dump_use_separate_dirs</code> séparer le répertoire de backup pour chaque base de données. Peut être <code>'yes'</code> ou <code>'no'</code> (défaut <code>'yes'</code>)</li>



<li><code>automysqlbackup_dump_compression</code> choisir une compression du type <code>gzip</code> or <code>bzip2</code> (défaut <code>gzip</code>)</li>



<li><code>automysqlbackup_dump_latest</code> Stocker une copie supplémentaire (lien physique) de la dernière sauvegarde dans un emplacement standard afin qu&rsquo;elle puisse être téléchargée par des scripts tiers. Peut être <code>'yes'</code> ou <code>'no'</code> (défaut <code>'yes'</code>)</li>



<li><code>automysqlbackup_dump_latest_clean_filenames</code> Supprimer toutes les informations de date et d&rsquo;heure des noms de fichiers dans le dossier le plus récent. (défaut yes)</li>



<li><code>automysqlbackup_mailcontent</code> Que souhaitez-vous recevoir par courrier électronique : <code>log</code> (envoi les log), <code>files</code> (envoie les logs et fichiers sql en attaché), <code>stdout</code> (affiche les log dans la sortie standard utile pour l&rsquo;exécution manuelle), <code>quiet</code> (envoie les log uniquement si une erreur apparait) (défaut <code>log</code>)</li>



<li><code>automysqlbackup_mail_address</code> addresse mail du destinataire</li>



<li><code>automysqlbackup_dryrun</code> Simulation de ce qui sera fait, ne fait rien en réalité. <code>0</code> mode inactif, <code>1</code> mode actif (défaut <code>0</code>)</li>
</ul>
<p>L’article <a href="https://www.monlinux.net/2023/07/role-ansible-automysqlbackup/">Rôle Ansible Automysqlbackup</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/07/role-ansible-automysqlbackup/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>Ansible proxy avec machine sans internet</title>
		<link>https://www.monlinux.net/2023/05/ansible-proxy-avec-machine-sans-internet/</link>
					<comments>https://www.monlinux.net/2023/05/ansible-proxy-avec-machine-sans-internet/#comments</comments>
		
		<dc:creator><![CDATA[belgotux]]></dc:creator>
		<pubDate>Wed, 31 May 2023 18:52:00 +0000</pubDate>
				<category><![CDATA[ansible]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[proxy]]></category>
		<guid isPermaLink="false">https://www.monlinux.net/?p=1892</guid>

					<description><![CDATA[<p>Il m&#8217;arrive parfois d&#8217;&#234;tre confront&#233; &#224; d&#233;ployer ses playbooks Ansible sur une machine sans acc&#232;s &#224; internet en zone restreinte. Mais il faut d&#233;ployer des t&#226;ches ayant un d&#233;p&#244;t github par exemple&#8230; Dans ce cas, l&#8217;utilisation d&#8217;un proxy socks sur... <a class="more-link" href="https://www.monlinux.net/2023/05/ansible-proxy-avec-machine-sans-internet/">Continue Reading &#8594;</a></p>
<p>L’article <a href="https://www.monlinux.net/2023/05/ansible-proxy-avec-machine-sans-internet/">Ansible proxy avec machine sans internet</a> est apparu en premier sur <a href="https://www.monlinux.net">Mon linux</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Il m&rsquo;arrive parfois d&rsquo;être confronté à déployer ses playbooks Ansible sur une machine sans accès à internet en zone restreinte. Mais il faut déployer des tâches ayant un dépôt github par exemple&#8230; Dans ce cas, l&rsquo;utilisation d&rsquo;un proxy socks sur ce serveur est très utile!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Utilisation simple d&rsquo;un Ansible proxy socks</h2>



<p>Pour expliquer l&rsquo;utilisation de proxy avec Ansible, il faut d&rsquo;abord comprendre la base : créer un proxy socks depuis une machine sans internet en zone restreinte vers une machine ayant internet en ssh. Pour ma part, je préfère ouvrir ssh dans un screen pour laisser un visu et fermer la connexion par la suite. Il est possible d&rsquo;utiliser l&rsquo;argument ssh permettant créer la connexion en arrière plan.</p>



<p>Sur notre serveur sans internet : </p>



<pre class="wp-block-code"><code class="">~$ ssh -4 -D 8888 mon_serveur_avec_internet
~$ curl -m 5 perdu.com
curl: (28) Failed to connect to perdu.com port 80 after 3852 ms: Connection timed out
~$ export ALL_PROXY="socks5://localhost:8888"
~$ curl -m 5 perdu.com
&lt;html&gt;&lt;head&gt;&lt;title&gt;Vous Etes Perdu ?&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;Perdu sur l'Internet ?&lt;/h1&gt;&lt;h2&gt;Pas de panique, on va vous aider&lt;/h2&gt;&lt;strong&gt;&lt;pre&gt;    * &lt;----- vous &amp;ecirc;tes ici&lt;/pre&gt;&lt;/strong&gt;&lt;/body&gt;&lt;/html&gt;
~$ export ALL_PROXY=</code></pre>



<p>On a donc bien accès à internet depuis notre machine.</p>



<p>Il arrive parfois que vous n&rsquo;ayez même pas un serveur sur qui rebondir&#8230; A ce moment là il est possible d&rsquo;utiliser votre propre machine comme passerelle! Pour cela il faut faire 2 choses :</p>



<ul class="wp-block-list">
<li>Depuis votre pc, vous créez avec ssh un bind de port reverse sur votre propre machine en vous connectant sur la machine n&rsquo;ayant pas accès à internet : </li>
</ul>



<pre class="wp-block-code"><code class="">~$ ssh -R 2222:127.0.0.1:22 serveur_sans_internet</code></pre>



<ul class="wp-block-list">
<li>La console vers le serveur sans internet s&rsquo;ouvre</li>



<li>Vous créez le port dynamique pour le socks sur le port local 2222 du serveur (qui va rediriger vers le ssh de votre pc</li>
</ul>



<pre class="wp-block-code"><code class="">
~$ ssh -4 -D 8888 -p 2222 127.0.0.1
</code></pre>



<ul class="wp-block-list">
<li>Vous ouvrez un second terminal pour vous connecter directement au serveur et vous avez accès au net</li>
</ul>



<pre class="wp-block-code"><code class="">~$ export ALL_PROXY="socks5://localhost:8888"
~$ curl -m 5 perdu.com
&lt;html&gt;&lt;head&gt;&lt;title&gt;Vous Etes Perdu ?&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;Perdu sur l'Internet ?&lt;/h1&gt;&lt;h2&gt;Pas de panique, on va vous aider&lt;/h2&gt;&lt;strong&gt;&lt;pre&gt;    * &lt;----- vous &amp;ecirc;tes ici&lt;/pre&gt;&lt;/strong&gt;&lt;/body&gt;&lt;/html&gt;</code></pre>



<h2 class="wp-block-heading">Ansible et proxy ssh socks</h2>



<h3 class="wp-block-heading">Variable d&rsquo;environnement du role Ansible</h3>



<p>Dans un playbook, nous pouvons ajouter directement une directive <code>environment</code> qui sera utilisée sur un role ou une tasks. Exemple dans un playbook <a href="https://galaxy.ansible.com/belgotux/automysqlbackup" target="_blank" rel="noreferrer noopener">automysqlbackup </a>:</p>



<pre class="wp-block-code"><code class="">- name: Automysqlbackup Installation
  hosts: databases_dump_server

  roles:
    - role: roles/database/belgotux.automysqlbackup
      environment:
        all_proxy: "socks5://localhost:8888"</code></pre>



<p>Cela va faire l&rsquo;équivalent de l&rsquo;export vu plus haut : <code>export ALL_PROXY="socks5://localhost:8888"</code></p>



<p>Pour en savoir plus sur <a href="https://www.monlinux.net/2023/07/role-ansible-automysqlbackup/">le rôle Ansible Automysqlbackup</a>.</p>



<h3 class="wp-block-heading">Utilisation plus générique et facultative sur un playbook existant</h3>



<p>On peut utiliser une variable <code>proxy</code> qui sera utilisée dans les variables de l&rsquo;hôte ou du groupe si besoin d&rsquo;utiliser un proxy. Avec l&rsquo;option default pour ne pas que notre playbook soit inutilisable sur un serveur n&rsquo;ayant pas besoin de proxy&#8230;</p>



<p>playbook.yml :</p>



<pre class="wp-block-code"><code class="">- name: Automysqlbackup Installation
  hosts: databases_dump_server

  roles:
    - role: roles/database/belgotux.automysqlbackup
      environment:
        all_proxy: "{{ proxy | default('')}}"</code></pre>



<p>hote.yml :</p>



<pre class="wp-block-code"><code class="">proxy: "socks5://localhost:8888"</code></pre>
<p>L’article <a href="https://www.monlinux.net/2023/05/ansible-proxy-avec-machine-sans-internet/">Ansible proxy avec machine sans internet</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-proxy-avec-machine-sans-internet/feed/</wfw:commentRss>
			<slash:comments>1</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>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>
	</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 34/94 requêtes en 0.066 secondes utilisant Disk

Served from: www.monlinux.net @ 2026-06-16 21:30:21 by W3 Total Cache
-->