<?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>Aukfood</title>
	<atom:link href="https://www.aukfood.fr/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.aukfood.fr/</link>
	<description></description>
	<lastBuildDate>Thu, 30 Apr 2026 07:09:56 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<image>
	<url>https://www.aukfood.fr/wp-content/uploads/2021/04/favicon.png</url>
	<title>Aukfood</title>
	<link>https://www.aukfood.fr/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>CrowdSec + Shorewall : Comment les faire cohabiter</title>
		<link>https://www.aukfood.fr/crowdsec-shorewall-comment-les-faire-cohabiter/</link>
		
		<dc:creator><![CDATA[Killian Prin-Abeil]]></dc:creator>
		<pubDate>Thu, 30 Apr 2026 07:09:56 +0000</pubDate>
				<category><![CDATA[Cybersécurité]]></category>
		<category><![CDATA[Logiciels Libres]]></category>
		<category><![CDATA[Non classé]]></category>
		<category><![CDATA[CrowdSec]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[shorewall]]></category>
		<guid isPermaLink="false">https://www.aukfood.fr/?p=30304</guid>

					<description><![CDATA[<p>Le problème Par défaut, le bouncer CrowdSec (crowdsec-firewall-bouncer) injecte sa propre chaîne dans iptables. Shorewall étant maître des règles firewall, il efface cette chaîne à chaque shorewall safe-restart. Les IPs bannies par CrowdSec ne sont plus bloquées. La solution Deux petites modifications suffisent. 1. Bouncer CrowdSec — /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml Passer le mode de iptables à ipset, [&#8230;]</p>
<p>L’article <a href="https://www.aukfood.fr/crowdsec-shorewall-comment-les-faire-cohabiter/">CrowdSec + Shorewall : Comment les faire cohabiter</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Le problème</h2>
<p>Par défaut, le bouncer CrowdSec (<code>crowdsec-firewall-bouncer</code>) injecte sa propre chaîne dans iptables. Shorewall étant maître des règles firewall, <strong>il efface cette chaîne à chaque <code>shorewall safe-restart</code></strong>. Les IPs bannies par CrowdSec ne sont plus bloquées.</p>
<h2>La solution</h2>
<p>Deux petites modifications suffisent.</p>
<hr />
<h3>1. Bouncer CrowdSec — <code>/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml</code></h3>
<p>Passer le mode de <code>iptables</code> à <code>ipset</code>, et commenter les chaînes iptables :</p>
<pre><code class="language-yaml">mode: ipset

#iptables_chains:
#  - INPUT
#  - FORWARD
#  - DOCKER-USER</code></pre>
<p>Redémarre le bouncer :</p>
<pre><code class="language-bash">systemctl restart crowdsec-firewall-bouncer</code></pre>
<hr />
<h3>2. Shorewall — <code>/etc/shorewall/shorewall.conf</code></h3>
<p>Ajouter ces deux directives :</p>
<pre><code class="language-ini"># Crowdsec
DYNAMIC_BLACKLIST=ipset-only:crowdsec-blacklists
SAVE_IPSETS=Yes</code></pre>
<p><code>DYNAMIC_BLACKLIST</code> indique à Shorewall de déléguer le blocage dynamique à l'ipset <code>crowdsec-blacklists</code> (alimenté par le bouncer), et <code>SAVE_IPSETS=Yes</code> assure la persistance au reboot.</p>
<p>Recharge Shorewall :</p>
<pre><code class="language-bash">shorewall safe-restart</code></pre>
<hr />
<h2>Vérification</h2>
<pre><code class="language-bash"># L&#039;ipset est bien peuplé par CrowdSec
ipset list crowdsec-blacklists

#output
198.244.240.165 timeout 12880 packets 0 bytes 0
39.101.94.83 timeout 11880 packets 15 bytes 900
87.3.25.245 timeout 9865 packets 0 bytes 0
198.244.168.192 timeout 8927 packets 0 bytes 0
89.200.229.42 timeout 10302 packets 0 bytes 0
176.31.139.6 timeout 9534 packets 0 bytes 0
39.101.93.209 timeout 11861 packets 0 bytes 0
198.244.168.182 timeout 12904 packets 0 bytes 0
198.244.183.121 timeout 9057 packets 0 bytes 0
86.97.49.220 timeout 11702 packets 0 bytes 0
39.101.93.55 timeout 13020 packets 0 bytes 0
45.146.8.36 timeout 12929 packets 0 bytes 0</code></pre>
<p>C'est tout, Shorewall et CrowdSec cohabitent sans se marcher dessus.</p>
<p>L’article <a href="https://www.aukfood.fr/crowdsec-shorewall-comment-les-faire-cohabiter/">CrowdSec + Shorewall : Comment les faire cohabiter</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Grafana Alloy sur Windows</title>
		<link>https://www.aukfood.fr/grafana-alloy-sur-windows-server/</link>
		
		<dc:creator><![CDATA[Guillaume Chéramy]]></dc:creator>
		<pubDate>Thu, 26 Mar 2026 10:12:06 +0000</pubDate>
				<category><![CDATA[Infogérance]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[alloy]]></category>
		<category><![CDATA[grafana]]></category>
		<category><![CDATA[observabilité]]></category>
		<guid isPermaLink="false">https://www.aukfood.fr/?p=30298</guid>

					<description><![CDATA[<p>Eh oui ça m'arrive d'avoir des machines Windows sous la main ;). Je profites d'un cours sur la suite LGTM pour rajouter la configuration de Grafana Alloy sur un serveur Windows 2025. Je vous renvoi vers les articles sur Alloy pour les concepts, par exemple https://www.aukfood.fr/remonter-les-metriques-vers-prometheus-avec-grafana-alloy/ Installation Pour l'installation rien de mystérieux, j'ai pris la [&#8230;]</p>
<p>L’article <a href="https://www.aukfood.fr/grafana-alloy-sur-windows-server/">Grafana Alloy sur Windows</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Eh oui ça m'arrive d'avoir des machines Windows sous la main ;). Je profites d'un cours sur la suite LGTM pour rajouter la configuration de <strong>Grafana Alloy</strong> sur un serveur Windows 2025.</p>
<p>Je vous renvoi vers les articles sur Alloy pour les concepts, par exemple <a href="https://www.aukfood.fr/remonter-les-metriques-vers-prometheus-avec-grafana-alloy/">https://www.aukfood.fr/remonter-les-metriques-vers-prometheus-avec-grafana-alloy/</a></p>
<h2>Installation</h2>
<p>Pour l'installation rien de mystérieux, j'ai pris la <a href="https://grafana.com/docs/alloy/latest/set-up/install/windows/" title="documentation officielle">documentation officielle</a>.</p>
<h2>Remonter des métriques.</h2>
<p>Pour les métriques j'ai repris un peu la même configuration que l'articles Linux en adaptant pour Windows.</p>
<pre><code class="language-bash">logging {
    level = &quot;warn&quot;
}

// Export metrics
prometheus.exporter.windows &quot;default&quot; {
  enabled_collectors = [&quot;cpu&quot;,&quot;cs&quot;,&quot;logical_disk&quot;,&quot;net&quot;,&quot;os&quot;,&quot;service&quot;,&quot;system&quot;, &quot;memory&quot;, &quot;scheduled_task&quot;, &quot;tcp&quot;]
}

prometheus.scrape &quot;windows_metrics&quot; {
  targets    = prometheus.exporter.windows.default.targets
  forward_to = [prometheus.remote_write.metrics_service.receiver]
}

// Write metrics to prometheus
prometheus.remote_write &quot;metrics_service&quot; {
endpoint {
        url = &quot;https://url-prom/api/v1/write&quot;

        basic_auth {
           username = &quot;identifiant&quot;
           password = &quot;password&quot;
        }
    }

    external_labels = {
           &quot;client&quot; = &quot;nomclient&quot;,
           &quot;serveur&quot; = &quot;nomserveur&quot;,
    }
}

// Open dashboard Alloy
prometheus.scrape &quot;default&quot; {
  targets = array.concat(
    prometheus.exporter.windows.default.targets,
    [{
      // Self-collect metrics
      job         = &quot;alloy&quot;,
      __address__ = &quot;0.0.0.0:12345&quot;,
    }],
  )

  forward_to = [prometheus.remote_write.metrics_service.receiver]

}</code></pre>
<p>On obtiens donc ceci dans la visualisation Alloy :<br />
<img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2026/03/alloy-prometheus-1024x387.png" alt="" /></p>
<p>Pour Grafana j'ai utilisé ce <a href="https://grafana.com/grafana/dashboards/21697-windows-exporter-dashboard/" title="dashboard">dashboard</a>.</p>
<h2>Remonter les logs</h2>
<p>Pour la remontée des logs vers Alloy :</p>
<pre><code class="language-bash">// Export des logs Windows vers Loki
loki.source.windowsevent &quot;application&quot;  {
    eventlog_name = &quot;Application&quot;
    use_incoming_timestamp = true
    exclude_event_data = true
    forward_to = [loki.write.endpoint.receiver]
    labels = {
       job = &quot;windows_eventlog&quot;,
       instance = constants.hostname,
    }
}

loki.source.windowsevent &quot;security&quot;  {
    eventlog_name = &quot;Security&quot;
    use_incoming_timestamp = true
    forward_to = [loki.write.endpoint.receiver]
    labels = {
       job = &quot;windows_eventlog&quot;,
       instance = constants.hostname,
    }
}

loki.source.windowsevent &quot;system&quot;  {
    eventlog_name = &quot;System&quot;
    use_incoming_timestamp = true
    forward_to = [loki.write.endpoint.receiver]
    labels = {
       job = &quot;windows_eventlog&quot;,
       instance = constants.hostname,
    }
}

loki.source.windowsevent &quot;setup&quot;  {
    eventlog_name = &quot;Setup&quot;
    use_incoming_timestamp = true
    forward_to = [loki.write.endpoint.receiver]
    labels = {
       job = &quot;windows_eventlog&quot;,
       instance = constants.hostname,
    }
}

// Loki Endpoint
loki.write &quot;endpoint&quot; {
    endpoint {
        url =&quot;http://10.87.200.43:3100/loki/api/v1/push&quot;
        }
}</code></pre>
<p>Ce qui va donner ceci dans la visualisation Alloy.</p>
<p><img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2026/03/alloy-loki-1024x383.png" alt="" /></p>
<p>On à donc maintenant notre remontée de métriques et de logs depuis Windows.</p>
<p>L’article <a href="https://www.aukfood.fr/grafana-alloy-sur-windows-server/">Grafana Alloy sur Windows</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mise en place de services HPB pour Nextcloud Talk</title>
		<link>https://www.aukfood.fr/mise-en-place-de-services-hpb-pour-nextcloud-talk/</link>
		
		<dc:creator><![CDATA[Guillaume Chéramy]]></dc:creator>
		<pubDate>Thu, 15 Jan 2026 21:19:40 +0000</pubDate>
				<category><![CDATA[Infogérance]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Logiciels Libres]]></category>
		<category><![CDATA[nextcloud talk]]></category>
		<category><![CDATA[signaling]]></category>
		<category><![CDATA[stun]]></category>
		<category><![CDATA[turn]]></category>
		<category><![CDATA[visioconférence]]></category>
		<guid isPermaLink="false">https://www.aukfood.fr/?p=30284</guid>

					<description><![CDATA[<p>L'objectif ici est de présenter la mise en place d'une infrastructure HPB pour mettre en place les services de visioconférence avancés dans Nextcloud.  Le HPB Le High Performance Backend (HPB) nécessite un service de signalisation et se compose de trois éléments fonctionnant en synergie : un service STUN (Session Traversal Utilities for NAT) pour découvrir [&#8230;]</p>
<p>L’article <a href="https://www.aukfood.fr/mise-en-place-de-services-hpb-pour-nextcloud-talk/">Mise en place de services HPB pour Nextcloud Talk</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>L'objectif ici est de présenter la mise en place d'une infrastructure HPB pour mettre en place les services de visioconférence avancés dans Nextcloud.</p>
<h2> Le HPB</h2>
<p>Le High Performance Backend (HPB) nécessite un service de signalisation et se compose de trois éléments fonctionnant en synergie :</p>
<ul>
<li>un service STUN (Session Traversal Utilities for NAT) pour découvrir les adresses IP externes NATées/protégées par un pare-feu. Nextcloud fournit un serveur STUN par défaut, mais vous pouvez le remplacer par le vôtre.<br />
Exemples : stun.nextcloud.com:443 ou stun.votredomaine.tld:3478 ou les deux</li>
<li>Service TURN (Traversal Using Relays around NAT) tel que « coturn » ou « eturnal » pour connecter des adresses IP externes NATées/protégées par un pare-feu et contrôler les flux WebRTC. Son rôle principal est d'aider les clients WebRTC derrière des routeurs à communiquer et de relayer les données audio et vidéo à travers les pare-feu et les restrictions de port.<br />
Exemples : turn.votredomaine.tld:3478 ou votredomaine.tld:3478.<br />
Le chiffrement est facultatif pour TURN et STUN et sera géré par Nextcloud chiffré.</li>
<li>Un service de signalisation WebRTC tel que « Janus WebRTC server » ou « Spreed WebRTC server » est nécessaire pour les appels et les conversations avec plusieurs participants. Le serveur de signalisation est utilisé pour établir une connexion WebSocket entre les participants à l'appel. Sans lui, tous les participants devraient télécharger individuellement leurs propres fichiers audio/vidéo pour chaque autre participant, ce qui entraînerait des problèmes de connectivité.<br />
Exemple : <a href="https://signal.yourdomain.tld">https://signal.yourdomain.tld</a></li>
</ul>
<h2>Allons un peu plus loin sur le fonctionnement théorique</h2>
<p>Nextcloud Talk repose entièrement sur <strong>WebRTC</strong>. Il faut distinguer clairement <strong>trois couches</strong> :</p>
<pre><code>Client (navigateur / app)
        │
        │ HTTPS / WebSocket
        ▼
Nextcloud Server (logique métier)
        │
        │ WebSocket (signaling)
        ▼
Signaling Server (HPB)
        │
        │ WebRTC (ICE / RTP)
        ▼
P2P direct ou TURN</code></pre>
<p>J'ai demandé à une IA de me générer une image plus claire (ou pas) :</p>
<p><img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2026/01/infra-hpb-683x1024.webp" alt="" /></p>
<h2>SDP — Décrire un appel</h2>
<p><strong>SDP (Session Description Protocol)</strong> est un <strong>document texte</strong> qui décrit une session, mais <strong>ne transporte aucun média</strong>.</p>
<p>Il contient notamment :</p>
<ul>
<li>codecs (opus, VP8, H264…)</li>
<li>types de médias (audio / vidéo / data)</li>
<li>ports et protocoles</li>
<li>directions (sendrecv, recvonly…)</li>
</ul>
<p>Exemple simplifié :</p>
<pre><code>m=audio 9 UDP/TLS/RTP/SAVPF 111
a=rtpmap:111 opus/48000/2
a=sendrecv</code></pre>
<p>Dans Nextcloud Talk :</p>
<ul>
<li>le <strong>client génère le SDP</strong></li>
<li>le <strong>serveur de signaling l’échange</strong></li>
<li>Nextcloud <strong>ne l’interprète pas</strong></li>
</ul>
<p>SDP incorrect = appel impossible avant même ICE.</p>
<hr />
<h2>ICE — Trouver un chemin réseau</h2>
<p><strong>ICE (Interactive Connectivity Establishment)</strong> a pour objectif de trouver <strong>le meilleur chemin réseau possible</strong> entre deux pairs.</p>
<h3>Types de candidats ICE</h3>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>host</code></td>
<td>IP locale</td>
</tr>
<tr>
<td><code>srflx</code></td>
<td>IP publique via STUN</td>
</tr>
<tr>
<td><code>relay</code></td>
<td>IP fournie par TURN</td>
</tr>
</tbody>
</table>
<p>ICE teste les candidats dans cet ordre :</p>
<ol>
<li>host</li>
<li>srflx</li>
<li>relay</li>
</ol>
<p>Le premier chemin fonctionnel est utilisé.</p>
<hr />
<h2>STUN — Découverte d’adresse publique</h2>
<p><strong>STUN</strong> permet à un client de découvrir <strong>comment il est vu depuis Internet</strong>.</p>
<p>Principe :</p>
<pre><code>Client → STUN
STUN → &quot;Tu es 91.x.x.x:port&quot;</code></pre>
<p>Le client crée alors un <strong>candidat srflx</strong>.</p>
<h3>Limites fondamentales de STUN</h3>
<p>STUN échoue avec :</p>
<ul>
<li>NAT symétrique</li>
<li>firewalls stricts</li>
<li>réseaux mobiles complexes</li>
</ul>
<p>STUN est une aide, pas une solution.</p>
<hr />
<h2>TURN — Relais média</h2>
<p><strong>TURN (Traversal Using Relays around NAT)</strong> est utilisé quand <strong>toute communication directe échoue</strong>.</p>
<p>Fonctionnement théorique :</p>
<pre><code>Client A → TURN → Client B</code></pre>
<p>TURN :</p>
<ul>
<li>relaie les paquets RTP chiffrés</li>
<li>ne décode pas le média</li>
<li>consomme beaucoup de bande passante</li>
</ul>
<p>En pratique, <strong>TURN est presque toujours utilisé</strong>.</p>
<hr />
<h2>Signaling — La pièce manquante de WebRTC</h2>
<p>WebRTC <strong>n’inclut volontairement aucun mécanisme de signaling</strong>.</p>
<p>Le signaling sert à :</p>
<ul>
<li>échanger SDP</li>
<li>échanger ICE candidates</li>
<li>gérer l’état des participants</li>
</ul>
<p>Dans Nextcloud Talk :</p>
<ul>
<li>assuré par le <strong>High Performance Backend (HPB)</strong></li>
<li>via WebSocket</li>
<li>totalement séparé du média</li>
</ul>
<hr />
<h2>P2P vs TURN (théorie)</h2>
<h3>P2P direct</h3>
<pre><code>Client &#x2194; Client</code></pre>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> faible latence<br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> fragile, rare en entreprise</p>
<hr />
<h3>TURN relay</h3>
<pre><code>Client → TURN → Client</code></pre>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> fiable<br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> compatible enregistrement<br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> coûteux en ressources<br />
En production, TURN est la norme.</p>
<hr />
<h2> De la théorie à la pratique</h2>
<p>On va voir maintenant comment mettre en place tout ça pour Nextcloud Talk. Il y à plusieurs possibilités pour faire cette mise en place, je vais choisir ici une installation conteneurisée avec des conteneurs, un premier pour le <strong>signaling</strong> et un second pour le <strong>recording</strong>. Il est possible que plus tard je refasse un article avec un autre modèle d'installation.</p>
<h3> HPB Signaling</h3>
<p>On va avoir besoins de tokens pour cette configuration pour les générer voici la commande </p>
<pre><code class="language-bash">openssl rand --hex 16</code></pre>
<p>Les tokens seront les suivants :</p>
<ul>
<li>TURN_SECRET : le token pour accéder au serveur turn</li>
<li>SIGNALING_SECRET : le token entre Nextcloud et le HPB</li>
<li>INTERNAL_SECRET : le token pour la communication entre les composants</li>
</ul>
<h4> Le déploiement</h4>
<p>On va créer un docker-compose pour déployer la partie signaling en un seul conteneur :</p>
<pre><code class="language-vim">name: &#039;hpb&#039;

services:

  nc-talk:
    container_name: talk_hpb
    image: ghcr.io/nextcloud-releases/aio-talk:latest
    init: true
    ports:
      - 3478:3478/tcp
      - 3478:3478/udp
      - 127.0.0.1:8081:8081/tcp
    environment:
      - NC_DOMAIN=url-nextcloud
      - TALK_HOST=url-hpb
      - TURN_SECRET=******
      - SIGNALING_SECRET=****
      - TZ=Europe/Paris
      - TALK_PORT=3478
      - INTERNAL_SECRET=****
    restart: unless-stopped</code></pre>
<h4> Le proxy</h4>
<p>Pour accéder à ce service on va mettre en place un proxy apache2 : </p>
<pre><code class="language-vim">&lt;VirtualHost *:80&gt;
  ServerName url-hpb
  Redirect Permanent / https://url-hpb
&lt;/VirtualHost&gt;
&lt;VirtualHost *:443&gt;
  ServerName hpb-rocks.aukfood.ovh

    LogLevel warn
    ErrorLog &quot;|/usr/bin/rotatelogs -lc /var/log/apache2/signaling_error.%Y.%m.%d 86400&quot;
    CustomLog &quot;|/usr/bin/rotatelogs -lc /var/log/apache2/signaling_access.%Y.%m.%d 86400&quot; combined

    # SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/https://hpb-rocks.aukfood.ovh/standalone-signaling/cert.pem
    SSLCertificateChainFile /etc/letsencrypt/live/url-hpb/chain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/url-hpb/privkey.pem

    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security &quot;max-age=63072000; includeSubdomains; preload&quot;

    # Activate http/2
    Protocols h2 h2c http/1.1

    H2Push          on
    H2PushPriority  *                       after
    H2PushPriority  text/css                before
    H2PushPriority  image/jpeg              after   32
    H2PushPriority  image/png               after   32
    H2PushPriority  application/javascript  interleaved

    # Encoded slashes need to be allowed
    AllowEncodedSlashes NoDecode

    # Container uses a unique non-signed certificate
    SSLProxyEngine On
    SSLProxyVerify None
    SSLProxyCheckPeerCN Off
    SSLProxyCheckPeerName Off

    # keep the host
    ProxyPreserveHost On

    # Preserve host
    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
    RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}

        ProxyPass &quot;/standalone-signaling/&quot; &quot;ws://127.0.0.1:8081/&quot;

        RequestHeader set X-Real-IP %{REMOTE_ADDR}s
        RewriteEngine On
        RewriteRule ^/standalone-signaling/spreed/$ - [L]
        RewriteRule ^/standalone-signaling/api/(.*) http://127.0.0.1:8081/api/$1 [L,P]
&lt;/VirtualHost&gt;</code></pre>
<h4> Configuration Nextcloud</h4>
<p>Dans la partie Talk il faut configurer :</p>
<ul>
<li>Infrastructure Haute Performance</li>
<li>STUN</li>
<li>TURN</li>
</ul>
<p><img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2026/01/Copie-decran_20260115_214051-1024x224.png" alt="" /></p>
<p>L'url est de la forme <a href="https://url-hpb/standalone-signaling">https://url-hpb/standalone-signaling</a></p>
<p><img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2026/01/Copie-decran_20260115_214119-1024x297.png" alt="" /></p>
<h3> HPB Recording</h3>
<p>Une fonction intéressante est de pouvoir enregistrer des réunions, webnaires etc à partir de la visio. C'est pour cela qu'on va rajouter un conteneur hpb recording, l'avantage c'est que les vidéos seront enregistrées directement dans Nextcloud (dans le répertoire Talk de l'initiateur de la visio).</p>
<h4> Déploiement</h4>
<p>On crée le docker-compose suivant :</p>
<pre><code class="language-vim">services:
  nc-recording:
    image: nextcloud/aio-talk-recording:latest
    container_name: nc-recording
    restart: unless-stopped
    shm_size: &#039;4gb&#039;
    ports:
      - &quot;127.0.0.1:1234:1234&quot;
    environment:
      - TZ=Europe/Berlin
      - NC_DOMAIN=url-nextcloud
      - HPB_DOMAIN=url-hpb
      - RECORDING_SECRET=******
      - INTERNAL_SECRET=******
      - TZ=Europe/Paris</code></pre>
<h4> Le proxy https</h4>
<pre><code class="language-vim">&lt;VirtualHost *:80&gt;
  ServerName url-record
  Redirect Permanent / https://url-record
&lt;/VirtualHost&gt;
&lt;VirtualHost *:443&gt;
  ServerName url-record

    LogLevel warn
    ErrorLog &quot;|/usr/bin/rotatelogs -lc /var/log/apache2/recording_error.%Y.%m.%d 86400&quot;
    CustomLog &quot;|/usr/bin/rotatelogs -lc /var/log/apache2/recording_access.%Y.%m.%d 86400&quot; combined

    # SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/url-record/cert.pem
    SSLCertificateChainFile /etc/letsencrypt/live/url-record/chain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/url-recordprivkey.pem

    # HSTS (mod_headers is required) (15768000 seconds = 6 months)
    Header always set Strict-Transport-Security &quot;max-age=63072000; includeSubdomains; preload&quot;

    # Activate http/2
    Protocols h2 h2c http/1.1

    H2Push          on
    H2PushPriority  *                       after
    H2PushPriority  text/css                before
    H2PushPriority  image/jpeg              after   32
    H2PushPriority  image/png               after   32
    H2PushPriority  application/javascript  interleaved

    # Encoded slashes need to be allowed
    AllowEncodedSlashes NoDecode

    # Container uses a unique non-signed certificate
    SSLProxyEngine On
    SSLProxyVerify None
    SSLProxyCheckPeerCN Off
    SSLProxyCheckPeerName Off

    # keep the host
    ProxyPreserveHost On

    # Preserve host
    ProxyPreserveHost On
    RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
    RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}

    ProxyPass / http://127.0.0.1:1234/ 

&lt;/VirtualHost&gt;
</code></pre>
<h4> Reste plus qu'à rajouter la configuration dans Nextcloud</h4>
<p><img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2026/01/Copie-decran_20260115_215256-1024x503.png" alt="" /></p>
<h2>Conclusion</h2>
<p>C'est une façon de faire l'installation elle peut être discutée mais elle fonctionne assez bien, par exemple nos webinairs sont faits directement dans Nextcloud Talk et enregistrés en live.</p>
<p>Je vous invite à consulter nos vidéos ici  : <a href="https://peertube.aukfood.net/">https://peertube.aukfood.net/</a></p>
<p>Un merci à Arno Wezel pour m'avoir partagé son article qui m'a permis de corriger ma configuration : <a href="https://arnowelzel.de/en/nextcloud-talk-high-performance-backend-with-docker">https://arnowelzel.de/en/nextcloud-talk-high-performance-backend-with-docker</a></p>
<p>L’article <a href="https://www.aukfood.fr/mise-en-place-de-services-hpb-pour-nextcloud-talk/">Mise en place de services HPB pour Nextcloud Talk</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apache bloquer certains pays</title>
		<link>https://www.aukfood.fr/apache-bloquer-certains-pays/</link>
		
		<dc:creator><![CDATA[Guillaume Chéramy]]></dc:creator>
		<pubDate>Mon, 12 Jan 2026 20:42:16 +0000</pubDate>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[geoip]]></category>
		<guid isPermaLink="false">https://www.aukfood.fr/?p=30280</guid>

					<description><![CDATA[<p>Un lundi qui commence par un site surchargé par des requêtes, qui après pas mal d'analyse paraissent légitimes mais qui chargent le serveur avec pas mal de paramètres dans la recherche sur un Prestashop. Et donc requêtes SQL à profusions et charge du serveur et donc ralentissement du site. En analysant les IPs (99500 en [&#8230;]</p>
<p>L’article <a href="https://www.aukfood.fr/apache-bloquer-certains-pays/">Apache bloquer certains pays</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Un lundi qui commence par un site surchargé par des requêtes, qui après pas mal d'analyse paraissent légitimes mais qui chargent le serveur avec pas mal de paramètres dans la recherche sur un Prestashop. Et donc requêtes SQL à profusions et charge du serveur et donc ralentissement du site.</p>
<p>En analysant les IPs (99500 en 1/2 journée) on remarque qu'il y a quand même que 1% d'IPS Française, 10% d'US et le reste, beaucoup d'Afrique, d'Inde etc ... Je pourrais faire un schéma par Pays par exemple.</p>
<p>Un petit script sympa : <a href="https://github.com/christophetd/geolocate-ips/blob/master/geolocate.py">https://github.com/christophetd/geolocate-ips/blob/master/geolocate.py</a></p>
<p>L'idée est donc de diminuer le nombre de requêtes en interdisant les Pays chez qui le client ne vend pas. J'ai donc l'idée de bloquer les pays depuis Apache.</p>
<h2> Mise en place du module Apache geoip</h2>
<p>Ajout du module geoip pour Apache :</p>
<pre><code class="language-bash">apt install libapache2-mod-geoip</code></pre>
<p>Le module est automatiquement chargé, plus qu'à redémarrer Apache :</p>
<pre><code class="language-bash">systemctl restart apache2</code></pre>
<p>La base de données des pays se trouve ici <strong>/usr/share/GeoIP/GeoIP.dat</strong></p>
<h2> Configuration Apache</h2>
<p>Deux possibilités pour cette configuration, soit dans <strong>/etc/apache2/apache2.conf</strong> soit dans un vhost, comme pour cet exemple :</p>
<pre><code class="language-vim">  DocumentRoot /var/www/www.monsite.fr/www/public
  &lt;Directory /var/www/www.monsite.fr/www/public&gt;

  &lt;IfModule mod_geoip.c&gt;  
    GeoIPEnable On  

     SetEnvIf GEOIP_COUNTRY_CODE FR AllowCountry
     SetEnvIf GEOIP_COUNTRY_CODE JP AllowCountry
     SetEnvIf GEOIP_COUNTRY_CODE ES AllowCountry

     SetEnvIfNoCase User-Agent &quot;Googlebot|Storebot-Google|AdsBot-Google|Mediapartners-Google&quot; AllowGoogle
     SetEnvIfNoCase User-Agent &quot;Mediapartners-Google|bingbot|BingPreview&quot; AllowOtherSEO

     &lt;RequireAny&gt;
      Require env AllowCountry
      Require env AllowGoogle
      Require env AllowOtherSEO
     &lt;/RequireAny&gt;

    # Optional: Return a custom message  
    ErrorDocument 403 &quot;Access denied: This site is not available in your country.&quot;  
  &lt;/IfModule&gt;

  ...</code></pre>
<h2> Pour tester</h2>
<p>En curl :</p>
<pre><code>curl -A &quot;Googlebot&quot; https://ton-site.tld/</code></pre>
<p>En browser en allant sur <a href="https://www.locabrowser.com/">https://www.locabrowser.com/</a> qui permet de simuler des navigateurs depuis des IPs étrangères.</p>
<h2> Rajouter le code Pays dans les logs Apache</h2>
<p>Cela peut être sympa en plus de rajouter le code pays dans les logs. Dans <strong>/etc/apache2/apache2.conf</strong> rajouter :</p>
<pre><code># Add %{GEOIP_COUNTRY_CODE}e to log country codes  
LogFormat &quot;%h %l %u %t \&quot;%r\&quot; %&gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot; %{GEOIP_COUNTRY_CODE}e&quot; combined_geoip </code></pre>
<p>Et dans la configuration des vhosts :</p>
<pre><code>  LogLevel warn
  ErrorLog &quot;|/usr/bin/rotatelogs -l -L error.log -c /var/www/www.monsite.fr/var/log/apache2/error.%Y.%m.%d 86400&quot;
  CustomLog &quot;|/usr/bin/rotatelogs -l -L access.log -c /var/www/www.monsite.fr/var/log/apache2/access.%Y.%m.%d 86400&quot; combined_geoip</code></pre>
<p>L’article <a href="https://www.aukfood.fr/apache-bloquer-certains-pays/">Apache bloquer certains pays</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sécurité des accès SSH ~ Installation du bastion TELEPORT</title>
		<link>https://www.aukfood.fr/securite-des-acces-ssh-installation-du-bastion-teleport/</link>
		
		<dc:creator><![CDATA[Romain Gautier]]></dc:creator>
		<pubDate>Tue, 16 Dec 2025 09:47:05 +0000</pubDate>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Cybersécurité]]></category>
		<category><![CDATA[Infogérance]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[aukfood]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[virtualisation]]></category>
		<guid isPermaLink="false">https://www.aukfood.fr/?p=30070</guid>

					<description><![CDATA[<p>🧙‍♂️ Teleport – Bastion d’administration SSH 🔐 « Pas de magie noire, du Zero-Trust bien encadré ! » Un bastion d’administration est un point de passage unique et durci par lequel toutes les connexions d’admin doivent transiter, afin de contrôler finement qui se connecte, à quoi, comment et d’enregistrer l’intégralité des actions réalisées. Teleport est [&#8230;]</p>
<p>L’article <a href="https://www.aukfood.fr/securite-des-acces-ssh-installation-du-bastion-teleport/">Sécurité des accès SSH ~ Installation du bastion TELEPORT</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="30070" class="elementor elementor-30070" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-5dd909dc e-flex e-con-boxed e-con e-parent" data-id="5dd909dc" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-3c9a763 elementor-widget elementor-widget-heading" data-id="3c9a763" data-element_type="widget" data-e-type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default"><h3><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9d9-200d-2642-fe0f.png" alt="🧙‍♂️" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Teleport – Bastion d’administration SSH <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h3></h2>				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-35c8a63 e-flex e-con-boxed e-con e-parent" data-id="35c8a63" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-40d4abd elementor-widget elementor-widget-text-editor" data-id="40d4abd" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><em>  
« Pas de magie noire, du Zero-Trust bien encadré ! »  
</em></p>
<p>  
Un <strong>bastion d’administration</strong> est un point de passage unique et durci par lequel toutes les connexions d’admin doivent transiter, afin de contrôler finement qui se connecte, à quoi, comment et d’enregistrer l’intégralité des actions réalisées.  
</p>

<p>
<strong>Teleport</strong> est une plateforme d’accès sécurisé complète, développée par <strong>Gravitational</strong>,
écrite en Go et fournie sous forme de binaire.
</p>
<p>Des démonstrations existent déja avec l&rsquo;interface WEB nous alons donc privilégier au maximum la ligne de commande, ce qui à l&rsquo;avantage d&rsquo;en permettre une meilleure gestion/compréhension. Pas de clé SSH mais des échanges de certificats éphèmeres !
<br>
Nous allons nous aider avec quelques sortilèges, c&rsquo;est parti <em>  
« Zero-Trust Totalus ! »  
</em></p>
<br>								</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-58b01d1 e-flex e-con-boxed e-con e-parent" data-id="58b01d1" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-8b25eef elementor-widget elementor-widget-text-editor" data-id="8b25eef" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Un cluster Teleport, ça fonctionne comment ?</h5>

<p>
<em>« Un couple Auth + Proxy : l’Auth Service centralise identité, rôles et certificats, le Proxy Service expose un point d’entrée unique sécurisé pour toutes les connexions. »</em>
</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa84.png" alt="🪄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Sortilège associé : <em>« Cluster Unificatum ! »</em> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>

<p>Cela permet de centraliser et tracer les connexions :</p>
<ul>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ec.png" alt="🧬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Nodes SSH <br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2638.png" alt="☸" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Clusters Kubernetes <br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5c4.png" alt="🗄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Bases PostgreSQL / MongoDB / CockroachDB / MySQL <br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f329.png" alt="🌩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Services cloud <br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Applications Web internes <br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa9f.png" alt="🪟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Hôtes (Clients &amp; serveurs « propriétaire ») <br>
</ul>
<br>
<p>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Dans ce projet, je l’utilise comme <strong>bastion d’administration</strong> pour sécuriser les
accès SSH des administrateurs vers les serveurs Linux d’Aukfood.
</p>
<br>								</div>
				</div>
		<div class="elementor-element elementor-element-b17dc14 e-con-full e-flex e-con e-child" data-id="b17dc14" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-5500f94 e-con-full e-flex e-con e-child" data-id="5500f94" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-919397e elementor-widget elementor-widget-image" data-id="919397e" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img fetchpriority="high" decoding="async" width="768" height="512" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportGlobal-768x512.png" class="attachment-medium_large size-medium_large wp-image-30232" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportGlobal-768x512.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportGlobal-300x200.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportGlobal-1024x683.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportGlobal.png 1200w" sizes="(max-width: 768px) 100vw, 768px" />															</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-8dab0a7 e-con-full e-flex e-con e-child" data-id="8dab0a7" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-f5a3271 elementor-widget elementor-widget-image" data-id="f5a3271" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="768" height="512" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportFonct-768x512.png" class="attachment-medium_large size-medium_large wp-image-30231" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportFonct-768x512.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportFonct-300x200.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportFonct-1024x683.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportFonct.png 1200w" sizes="(max-width: 768px) 100vw, 768px" />															</div>
				</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-8e38487 e-flex e-con-boxed e-con e-parent" data-id="8e38487" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-de80614 elementor-widget elementor-widget-text-editor" data-id="de80614" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Fonctionnement “Direct” vs “Reverse Tunnel”</h5>

<p>Notre déploiement Teleport repose sur un <strong>Auth Service</strong> (PKI/RBAC/inventaire) et un <strong>Proxy Service</strong> (point d’entrée).<br>
<strong>Dans le lab</strong>, les nodes rejoignent le cluster <strong>directement via l’Auth</strong> (3025) pour obtenir/renouveler leurs certificats et publier leur présence.<br>
Lors d’un tsh ssh, l’admin passe par le Proxy, qui applique le RBAC puis se connecte directement au node sur le port SSH Teleport (3022).</p>
</p>
<strong>En production</strong> (WAN/internet-facing/segmentation forte), on privilégie le <strong>reverse tunnel via Proxy</strong> : les nodes initient une connexion sortante vers le Proxy, souvent 443 en TLS routing et le port 3025 (Auth) ne doit jamais être exposé publiquement.
<br>								</div>
				</div>
		<div class="elementor-element elementor-element-35bb153 e-con-full e-flex e-con e-child" data-id="35bb153" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-aaf75d9 elementor-widget elementor-widget-image" data-id="aaf75d9" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="800" height="238" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-18-161438-1024x305.png" class="attachment-large size-large wp-image-30259" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-18-161438-1024x305.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-18-161438-300x89.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-18-161438-768x229.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-18-161438.png 1821w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-1171589 e-flex e-con-boxed e-con e-parent" data-id="1171589" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-db7a2af elementor-widget elementor-widget-text-editor" data-id="db7a2af" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>1&#x20e3; Prérequis</h4>

<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3f0.png" alt="🏰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Bastion Teleport</h5>
<ul>
<li>Serveur <strong>Debian 13</strong> à jour (APT fonctionnel)</li>
<li>Accès administrateur via un compte dédié (<code>sudo</code>), root désactivé en SSH</li>
<li>Service SSH durci (clé uniquement, un seul compte admin autorisé, port spécifique, ex : <code>666</code>)</li>
<li>
Temps synchronisé (<code>timedatectl</code>, NTP actif) pour :
TLS (certificats), MFA / TOTP, horodatage des journaux
</li>
</ul>
<br>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Réseaux &amp; DNS</h5>
<ul>
<li>FQDN prévu pour le bastion : <code>srvsecteleport.aukfood.net</code></li>
<li>IP fixe, firewalls et DNS fonctionnels</li>
<li>Trafic inter-réseaux maîtrisé + WAN (clients <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> bastion <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Data Center)</li>
<li>
Ouverture des ports selon stratégie / emplacement :
<code>53</code>, <code>443</code>, <code>666</code>, <code>3022</code>, <code>3025</code>&#8230;
</li>
</ul>
<br>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2620.png" alt="☠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Postes d’administration</h5>
<ul>
<li>
Postes Linux à jour avec :
client SSH standard, <code>tsh</code> installé (inclus dans le paquet <code>teleport</code>)
</li>
<li>
Accès HTTPS vers
<a href="https://srvsecteleport.aukfood.net" target="\_blank" rel="noreferrer">
https://srvsecteleport.aukfood.net
</a>
</li>
<br>
</ul>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1faa2.png" alt="🪢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Serveurs cibles (nodes SSH)</h5>
<ul>
<li>Serveurs Linux « Hardened »</li>
<li>SSH durci (clé uniquement puis certificats, pas de root direct, utilisateurs explicitement autorisés)</li>
<li>Comptes Unix créés (<code>romadmin</code>, <code>secops</code>, etc.)</li>
<li>Accès sortant vers <code>srvsecteleport.aukfood.net:3025</code></li>
<li>Pare-feux locaux configurés (UFW ou autre)</li>
</ul>
<br>
<p>
<strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Paquets utiles :</strong>
<code>curl</code>, <code>wget</code>, <code>sudo</code>, <code>ufw</code>, <code>htop</code>,
<code>gnupg</code>, <code>ca-certificates</code>, <code>lsb-release</code>
</p>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-d934135 elementor-widget elementor-widget-text-editor" data-id="d934135" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>2&#x20e3; Objectifs de la mise en place</h4>

<ul>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Centraliser tous les <strong>accès SSH</strong> des admins derrière un bastion unique <br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Appliquer une logique <strong>Zero-Trust</strong> : MFA systématique, certificats éphémères, RBAC <br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6ab.png" alt="🚫" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Supprimer</strong> les ouvertures de port SSH direct depuis les réseaux d’admin <br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4fc.png" alt="📼" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Améliorer la <strong>traçabilité</strong> : audit, enregistrement et replay des sessions <br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ea.png" alt="🧪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tester un outil “enterprise-grade” dans un environnement lab Aukfood pour un <strong>déploiement</strong> postérieur <br>
</ul>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-672aafd elementor-widget elementor-widget-image" data-id="672aafd" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="768" height="512" src="https://www.aukfood.fr/wp-content/uploads/2025/12/ChatGPT-Image-16-dec.-2025-10_11_03-768x512.png" class="attachment-medium_large size-medium_large wp-image-30229" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/ChatGPT-Image-16-dec.-2025-10_11_03-768x512.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/12/ChatGPT-Image-16-dec.-2025-10_11_03-300x200.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/ChatGPT-Image-16-dec.-2025-10_11_03-1024x683.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/ChatGPT-Image-16-dec.-2025-10_11_03.png 1200w" sizes="(max-width: 768px) 100vw, 768px" />															</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-5aee1b1 e-flex e-con-boxed e-con e-parent" data-id="5aee1b1" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-b5523ee elementor-widget elementor-widget-text-editor" data-id="b5523ee" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h4>3&#x20e3; Formats d’installation</h4>

<p>Teleport peut être installé de plusieurs façons <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ed.png" alt="🧭" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>

<ul>
<li>
<strong>Linux tarball (.tar.gz)</strong> :
binaire “brut” à copier dans <code>/usr/local/bin</code>,
très flexible, mais il faut gérer soi-même <code>systemd</code>, chemins et MAJ
</li>
<li>
<strong>Paquet Debian / Ubuntu (.deb)</strong> :
installation via <code>apt</code> depuis le dépôt officiel Teleport, service
<code>systemd</code> livré et intégré
</li>
<li><strong>Paquet RPM</strong> (RHEL / Rocky / Alma…)</li>
<li>
<strong>Docker / Conteneur</strong> :
pratique pour des PoC rapides, mais la partie réseau / volumes / TLS reste à bien cadrer
</li>
<li>
<strong>Helm / Kubernetes</strong> :
adapté aux déploiements HA / scalables en production
</li>
</ul>
<br>
<p>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Pour le projet, j&rsquo;utilise l’installation par <strong>paquet Debian</strong>,
plus logique mais plus contraignante à fixer.
</p>
<br>								</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-9c09bbd e-flex e-con-boxed e-con e-parent" data-id="9c09bbd" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-ce3e5e6 elementor-widget elementor-widget-text-editor" data-id="ce3e5e6" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>4&#x20e3; Architecture « projet »</h4>

<p>
Teleport est déployé comme bastion d’administration au centre d&rsquo;un lab multi-zones
(3 LAN segmentés/séparés + WAN) :
</p>

<ul>
<li>
<strong>Réseau clients </strong> &gt; 192.168.10.0/24 :
postes d’admins avec <code>tsh</code> (client Teleport pour se connecter au cluster)
</li>
<li>
<strong>Réseau bastion </strong> &gt; 172.16.0.0/30 :
un serveur <code>srvsecteleport.aukfood.net</code> qui joue le rôle de Proxy + Auth
</li>
<li>
<strong>Réseau data center</strong> &gt; 10.44.22.0/24 :
des serveurs Linux (<code>srvweb</code>, <code>srvbdd</code>) intégrés comme nodes Teleport
</li>
</ul>
<br>
<h5>Les briques Teleport <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>
<ul>
<li>
<strong>Proxy Service</strong> (port <code>443</code>) →
Portail Web (interface d’administration), API, point d’entrée <code>tsh</code>
</li>
<li>
<strong>Auth Service</strong> (port <code>3025</code>) →
PKI interne, base d’authentification, RBAC, stockage d’état du cluster
</li>
<li>
<strong>Nodes SSH</strong> (port <code>3022</code>) →
agents Teleport installés sur les serveurs Linux (<code>srvweb</code>, <code>srvbdd</code>)
qui se connectent au bastion
</li>
</ul>
<br>
<h5>Flux réseau, ports et firewalls <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>
<ul>
<li>
Depuis les postes d’admin → bastion Teleport :
<strong>TCP 443</strong> (HTTPS / proxy Teleport)
</li>
<li>
Depuis les nodes SSH → bastion Teleport :
<strong>TCP 3025</strong> (Auth Service ok pour direct, non exposé en reverse tunneling)
</li>
<li>
Si configuration Node SSH :
<strong>TCP 3022</strong> (com SSH Teleport)
</li>
<li>
Bloquer les anciens accès SSH directs depuis l’extérieur :
seul <strong>Teleport</strong> est exposé
</li>
<li>
Accès SSH par port <strong>666</strong> Passphrase=50 et clé sécurisée à partir d&rsquo;un seul poste d&rsquo;admin pour config <strong>Teleport</strong>
</li>
</ul>


<br>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa84.png" alt="🪄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <em>« Protego Bastionem !! »</em> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-c731bf2 elementor-widget elementor-widget-image" data-id="c731bf2" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="337" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Tel2CoSSHteleport2.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-30169" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Tel2CoSSHteleport2.jpg 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/Tel2CoSSHteleport2-300x84.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Tel2CoSSHteleport2-1024x288.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Tel2CoSSHteleport2-768x216.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-8f7b4ad elementor-widget elementor-widget-text-editor" data-id="8f7b4ad" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h4>5&#x20e3; Installation du bastion Teleport</h4>

<h5>Préparation du dépôt APT <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </h5>


<pre><code># Teleport Community Edition
export TELEPORT_PKG=teleport
export TELEPORT_VERSION=v18
export TELEPORT_CHANNEL=stable/${TELEPORT_VERSION?}

# Variables OS (définit $ID, $VERSION_CODENAME)
source /etc/os-release
</code></pre>
								</div>
				</div>
				<div class="elementor-element elementor-element-d8b819c elementor-widget elementor-widget-text-editor" data-id="d8b819c" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Ajouter la clé GPG et le dépôt <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f511.png" alt="🔑" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<pre><code>sudo mkdir -p /etc/apt/keyrings

sudo curl https://apt.releases.teleport.dev/gpg \
-o /etc/apt/keyrings/teleport-archive-keyring.asc

echo "deb \[signed-by=/etc/apt/keyrings/teleport-archive-keyring.asc\] \
https://apt.releases.teleport.dev/${ID?} ${VERSION_CODENAME?} \
${TELEPORT_CHANNEL?}" \
| sudo tee /etc/apt/sources.list.d/teleport.list &gt; /dev/null
</code></pre>

<h5>Installer le paquet <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4be.png" alt="💾" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<pre><code>sudo apt-get update
sudo apt install -y ${TELEPORT_PKG?}
</code></pre>

<p><strong>Après installation on obtient :</strong></p>
<ul>
<li>le binaire <code>teleport</code></li>
<li>l’outil d’admin <code>tctl</code></li>
<li>le client <code>tsh</code></li>
<li>le service systemd <code>teleport.service</code></li>
</ul>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-f2d4208 elementor-widget elementor-widget-image" data-id="f2d4208" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="636" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TelaptInstall-scaled.png" class="attachment-1536x1536 size-1536x1536 wp-image-30131" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TelaptInstall-scaled.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelaptInstall-300x159.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelaptInstall-1024x543.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelaptInstall-768x407.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-7c649a6 elementor-widget elementor-widget-text-editor" data-id="7c649a6" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Vérifications de base <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>


<p><strong>Objectifs : </strong>Avoir un Teleport <strong>v18.x</strong> et un FQDN « propre » et résolvable</p>

<pre><code>teleport version
hostname -f
sudo hostnamectl set-hostname srvsecteleport.aukfood.net
</code></pre>

DNS Ok <strong>depuis poste-admin : </strong><code>nslookup/dig srvsecteleport.aukfood.net</code></p>

<br>								</div>
				</div>
				<div class="elementor-element elementor-element-cafaa89 elementor-widget elementor-widget-text-editor" data-id="cafaa89" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Réinitialiser Teleport (re-config cluster ou node) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f9.png" alt="🧹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </h5>

<p><strong>Repartir de zéro :</strong><em>  
</em></p>

<pre><code>sudo systemctl stop teleport 2&gt;/dev/null || true
sudo systemctl disable teleport 2&gt;/dev/null || true

sudo rm -f /etc/teleport.yaml
sudo rm -rf /var/lib/teleport/*
</code></pre>

<ul>
<li><code>/etc/teleport.yaml</code> : ancienne configuration Teleport</li>
<li><code>/var/lib/teleport</code> : état du cluster (CA interne, base, sessions…)</li>
</ul>

<br>
<p>Je peux le purger sans risque : aucun cluster de production n&rsquo;est actuellement en cours d&rsquo;exécution.</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa84.png" alt="🪄" class="wp-smiley" style="height: 1em; max-height: 1em;" /><em>« Réparo !! »</em> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-89b4114 elementor-widget elementor-widget-text-editor" data-id="89b4114" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>6&#x20e3; Configuration du fichier <code>/etc/teleport.yaml</code></h4>
<p>Dans le lab, je laisse Teleport gérer son <strong>certificat TLS</strong> auto-signé, je n&rsquo;utilise pas un FQDN résolu publiquement <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dc.png" alt="📜" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>

<pre><code>teleport configure \
-o file \
--cluster-name=srvsecteleport.aukfood.net \
--data-dir=/var/lib/teleport \
--public-addr=srvsecteleport.aukfood.net:443
</code></pre>
								</div>
				</div>
				<div class="elementor-element elementor-element-7e0f118 elementor-widget elementor-widget-image" data-id="7e0f118" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1536" height="205" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TelConfyaml.png" class="attachment-1536x1536 size-1536x1536 wp-image-30145" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TelConfyaml.png 1863w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelConfyaml-300x40.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelConfyaml-1024x137.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelConfyaml-768x103.png 768w" sizes="(max-width: 1536px) 100vw, 1536px" />															</div>
				</div>
				<div class="elementor-element elementor-element-af1ff18 elementor-widget elementor-widget-text-editor" data-id="af1ff18" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									
<ul>
<li><code>--cluster-name</code> : nom logique du cluster (PKI interne)</li>
<li><code>--data-dir</code> : stockage de l’état du cluster (<code>/var/lib/teleport</code>)</li>
<li><code>--public-addr</code> : FQDN + port utilisés par les admins</li>
</ul>

<br>
<p>
Sans <code>--cert-file</code> / <code>--key-file</code> / <code>--acme</code>, Teleport génère automatiquement un certificat auto-signé.
</p>

<p>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>En production</strong>, ce certificat sera remplacé par un certificat issu de la PKI interne
ou d’une AC publique (Let’s Encrypt, ACME…).
</p>								</div>
				</div>
				<div class="elementor-element elementor-element-7c3dc0f elementor-widget elementor-widget-image" data-id="7c3dc0f" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1459" height="721" src="https://www.aukfood.fr/wp-content/uploads/2025/12/teleportyaml.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-30135" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/teleportyaml.jpg 1459w, https://www.aukfood.fr/wp-content/uploads/2025/12/teleportyaml-300x148.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/teleportyaml-1024x506.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/teleportyaml-768x380.jpg 768w" sizes="(max-width: 1459px) 100vw, 1459px" />															</div>
				</div>
				<div class="elementor-element elementor-element-cb9a534 elementor-widget elementor-widget-text-editor" data-id="cb9a534" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h4>7&#x20e3; Démarrage &amp; premier accès au portail</h4>

<h5>Service systemd <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<pre><code>sudo systemctl enable --now teleport
sudo systemctl status teleport</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-82f6eb0 elementor-widget elementor-widget-image" data-id="82f6eb0" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="228" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TelEnable.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-30142" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TelEnable.jpg 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelEnable-300x57.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelEnable-1024x194.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelEnable-768x146.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-20b2486 elementor-widget elementor-widget-text-editor" data-id="20b2486" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									
<p>Contrôle des <strong>ports en écoute</strong> : <code>sudo ss -tlnp | grep teleport</code></p>
								</div>
				</div>
				<div class="elementor-element elementor-element-947d289 elementor-widget elementor-widget-image" data-id="947d289" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="77" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TelListen.png" class="attachment-1536x1536 size-1536x1536 wp-image-30144" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TelListen.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelListen-300x19.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelListen-1024x66.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelListen-768x49.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-6dff61a elementor-widget elementor-widget-text-editor" data-id="6dff61a" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h5>Premier accès Web, « First Run » <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Depuis poste-admin : <code>https://srvsecteleport.aukfood.net
</code></p>

<p>
Le certificat étant auto-signé, le navigateur affiche un warning, je vérifie le FQDN, j’accepte l’exception et <strong>Go Teleport</strong>.
</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa84.png" alt="🪄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <em>« Revelio !! »</em> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 
								</div>
				</div>
				<div class="elementor-element elementor-element-e1e1818 elementor-widget elementor-widget-image" data-id="e1e1818" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="379" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TelFirstUI.png" class="attachment-1536x1536 size-1536x1536 wp-image-30146" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TelFirstUI.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelFirstUI-300x95.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelFirstUI-1024x324.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelFirstUI-768x243.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-664e418 elementor-widget elementor-widget-text-editor" data-id="664e418" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h4>8&#x20e3; Création du premier admin Teleport (MFA obligatoire) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f451.png" alt="👑" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h4>

<p>Depuis <code>srvsecteleport</code> :</p>

<pre><code>sudo tctl users add romadm --logins=romadm --roles=access,editor,auditor
sudo tctl users ls
</code></pre>
								</div>
				</div>
				<div class="elementor-element elementor-element-9bffddf elementor-widget elementor-widget-image" data-id="9bffddf" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1536" height="105" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TelAdmin.png" class="attachment-1536x1536 size-1536x1536 wp-image-30150" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TelAdmin.png 1597w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelAdmin-300x20.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelAdmin-1024x70.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelAdmin-768x52.png 768w" sizes="(max-width: 1536px) 100vw, 1536px" />															</div>
				</div>
				<div class="elementor-element elementor-element-429a43a elementor-widget elementor-widget-text-editor" data-id="429a43a" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									
<p>La commande retourne une URL d’invitation valable 1h, à utiliser sur le poste d&rsquo;admin.
</p>



<ol>
<li>Ouvrir l’URL d’invitation dans un navigateur</li>
<li>Choisir un mot de passe fort</li>
<li>Enregistrer le MFA (TOTP) dans <strong>Aegis</strong> (coffre fort + biométrie)</li>
<li>Entrer l&rsquo;OTP dans l&rsquo;interface <strong>Teleport</strong></li>
</ol>
<br>
<p>
Teleport impose par défaut <strong>mot de passe + MFA</strong>,
ce qui colle parfaitement à la logique Zero-Trust.
</p>								</div>
				</div>
		<div class="elementor-element elementor-element-6d63b8f e-con-full e-flex e-con e-child" data-id="6d63b8f" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-43f6d32 e-con-full e-flex e-con e-child" data-id="43f6d32" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-fc731fa elementor-widget elementor-widget-image" data-id="fc731fa" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="768" height="657" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Telpass-768x657.png" class="attachment-medium_large size-medium_large wp-image-30158" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Telpass-768x657.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telpass-300x257.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telpass.png 792w" sizes="(max-width: 768px) 100vw, 768px" />															</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-0c60e2d e-con-full e-flex e-con e-child" data-id="0c60e2d" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-7a2dfb2 e-con-full e-flex e-con e-child" data-id="7a2dfb2" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-8c87294 elementor-widget elementor-widget-image" data-id="8c87294" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="768" height="359" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TeleGo1-3.png" class="attachment-large size-large wp-image-30160" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TeleGo1-3.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleGo1-3-300x140.png 300w" sizes="(max-width: 768px) 100vw, 768px" />															</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-b259d51 e-con-full e-flex e-con e-child" data-id="b259d51" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-be62fb1 elementor-widget elementor-widget-image" data-id="be62fb1" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="768" height="268" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TeleGo2-768x268.png" class="attachment-medium_large size-medium_large wp-image-30151" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TeleGo2-768x268.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleGo2-300x105.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleGo2-1024x357.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleGo2.png 1331w" sizes="(max-width: 768px) 100vw, 768px" />															</div>
				</div>
				</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-6d9d073 elementor-widget elementor-widget-image" data-id="6d9d073" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="141" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-150231-scaled.png" class="attachment-1536x1536 size-1536x1536 wp-image-30190" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-150231-scaled.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-150231-300x35.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-150231-1024x120.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-150231-768x90.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-c830969 elementor-widget elementor-widget-text-editor" data-id="c830969" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h4>9&#x20e3; Modèle RBAC &amp; utilisateurs Teleport</h4>
<p>
<h5>Principe général : qui, quoi, sur quelles machines&nbsp;? <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3a8.png" alt="🎨" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>
<p>
  Dans Teleport, on ne donne jamais des droits «&nbsp;en vrac&nbsp;» à un utilisateur. On assemble
  trois briques&nbsp;:
</p>
<ul>
  <li>
    <strong>Les utilisateurs Teleport</strong> : comptes nominatifs (<code>romain</code>,
    <code>killian</code>, <code>guillaume</code>…) qui s’authentifient avec mot de passe + MFA.
  </li>
  <li>
    <strong>Les rôles (RBAC)</strong> : chaque rôle décrit <strong>ce qu’un utilisateur a le droit de faire</strong>
    (ressources, verbes) et <strong>sur quelles cibles</strong>, via des filtres (labels).
  </li>
  <li>
    <strong>Les nodes (serveurs)</strong> : chaque serveur rejoint le cluster avec des
    <strong>labels</strong> (ex. <code>env=lab</code>, <code>role=web</code>, <code>os=linux</code>) qui servent de
    méta-données pour le filtrage.
  </li>
</ul>
<p>
<br>
  Lorsqu’un utilisateur se connecte, Teleport regarde&nbsp;:
</p>
<ol>
  <li>ses <strong>rôles</strong> (ex. <code>auk-secops</code>),</li>
  <li>les <strong>logins Unix</strong> autorisés dans le rôle (ex. <code>secops</code>),</li>
  <li>les <strong>labels des nodes</strong> (ex. <code>env=lab</code>, <code>os=linux</code>).</li>
</ol>
<br>
<p> L’accès est accordé uniquement si tout correspond. Le lien se fait donc par des
  <strong>labels</strong> et des <strong>rôles</strong>.
<br>
<strong>Exemple</strong> : «Killian se connecte de son poste avec le rôle SecOps sur le bastion, la configuration lui permet de se connecter avec le compte <code>secops</code> sur les nodes Linux».</p>

<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2139.png" alt="ℹ" class="wp-smiley" style="height: 1em; max-height: 1em;" /> L’identité Teleport (utilisateur + rôle RBAC) est <strong>mappée sur des logins Unix existants</strong> sur les serveurs à joindre (logins:romadmin, secops).<br />
Teleport ne crée pas ces comptes : s’ils n’existent pas, la connexion échoue (« unknown user »).
</p>								</div>
				</div>
				<div class="elementor-element elementor-element-f90ae9d elementor-widget elementor-widget-image" data-id="f90ae9d" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="647" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Telmenuroles-scaled.png" class="attachment-1536x1536 size-1536x1536 wp-image-30205" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Telmenuroles-scaled.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telmenuroles-300x162.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telmenuroles-1024x552.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telmenuroles-768x414.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-cf9680e elementor-widget elementor-widget-text-editor" data-id="cf9680e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Rôles intégrés &amp; rôles Aukfood <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3ad.png" alt="🎭" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>
<br>
<p>Dans Teleport, les rôles (RBAC) sont décrits en YAML et définissent précisément le périmètre d’accès : comptes Unix autorisés (logins), ressources ciblées via labels (node_labels) et permissions Teleport (rules).<br>
Les rôles intègrent également des contraintes de sécurité (options) telles que des TTL de session courts et des exigences MFA, afin d’appliquer le moindre privilège et de réduire l’impact d’une éventuelle compromission.</p>

<p><strong>Rôles intégrés Teleport :</strong></p>
<ul>
<li><code>access</code> → base utilisateur standard (accès SSH, labels, etc.)</li>
<li><code>editor</code> → admin technique du cluster (créer / modifier la plupart des ressources)</li>
<li><code>auditor</code> → lecture des journaux et enregistrements (aucun droit SSH)</li>
</ul>
<br>
<p><strong>Rôles Aukfood définis en YAML :</strong></p>
<ul>
<li><code>auk-admin-bastion</code> : administrateur du bastion (Romain)</li>
<li><code>auk-secops</code> : rôle Cybersécurité / SecOps (Killian)</li>
<li><code>auk-audit-direction</code> : lecture seule audit / direction (Guillaume)</li>
</ul>
<br>
<p>
Les fichiers sont stockés dans un dossier créé &gt; <code>/etc/teleport/rbac/*.yaml</code> puis appliqués via
<code>tctl create -f</code>.
</p>

<p>
Objectif : respecter le <strong>principe du moindre privilège</strong> : chaque rôle ne
possède que les droits nécessaires à sa mission.
</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa84.png" alt="🪄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <em>« Minima Privilegium ! »</em> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<br>

<h6>Exemple de rôles « simplifiés » <code>auk-admin-bastion / auk-secops</code> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h6>								</div>
				</div>
		<div class="elementor-element elementor-element-edab0ff e-con-full e-flex e-con e-child" data-id="edab0ff" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-97b82ae e-con-full e-flex e-con e-child" data-id="97b82ae" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-c093c70 elementor-widget elementor-widget-image" data-id="c093c70" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="710" height="355" src="https://www.aukfood.fr/wp-content/uploads/2025/12/roleaukadmin.png" class="attachment-medium_large size-medium_large wp-image-30176" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/roleaukadmin.png 710w, https://www.aukfood.fr/wp-content/uploads/2025/12/roleaukadmin-300x150.png 300w" sizes="(max-width: 710px) 100vw, 710px" />															</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-b68e3df e-con-full e-flex e-con e-child" data-id="b68e3df" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-fdf58a2 elementor-widget elementor-widget-image" data-id="fdf58a2" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="710" height="355" src="https://www.aukfood.fr/wp-content/uploads/2025/12/roleauksecops-1.png" class="attachment-medium_large size-medium_large wp-image-30178" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/roleauksecops-1.png 710w, https://www.aukfood.fr/wp-content/uploads/2025/12/roleauksecops-1-300x150.png 300w" sizes="(max-width: 710px) 100vw, 710px" />															</div>
				</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-d09fd6e elementor-widget elementor-widget-text-editor" data-id="d09fd6e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									
<p>Application config :</p>

<pre><code>sudo mkdir -p /etc/teleport/rbac
sudo nano /etc/teleport/rbac/auk-secops.yaml
sudo tctl create -f /etc/teleport/rbac/auk-secops.yaml
sudo chmod 600 /etc/teleport/rbac/*.yaml
</code></pre>
								</div>
				</div>
				<div class="elementor-element elementor-element-fe7c38f elementor-widget elementor-widget-image" data-id="fe7c38f" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1536" height="113" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-141721-scaled.png" class="attachment-1536x1536 size-1536x1536 wp-image-30189" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-141721-scaled.png 1920w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-141721-300x22.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-141721-1024x75.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-141721-768x57.png 768w" sizes="(max-width: 1536px) 100vw, 1536px" />															</div>
				</div>
				<div class="elementor-element elementor-element-a20eb01 elementor-widget elementor-widget-text-editor" data-id="a20eb01" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Même logique pour <code>auk-audit-direction</code>.</p>

<p>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Dans le rôle, on déclare aussi les <strong>logins Unix</strong> (<code>romadmin</code>, <code>secops</code>, etc.) sur lesquels Teleport estautorisé à se connecter.</p>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-bcc0bd6 elementor-widget elementor-widget-text-editor" data-id="bcc0bd6" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Création/gestion des utilisateurs Teleport <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f464.png" alt="👤" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Par la CLI :</p>

<pre><code>sudo tctl users add romain --roles=auk-admin-bastion --logins=romadmin
sudo tctl users add killian --roles=auk-secops --logins=secops
sudo tctl users add guillaume --roles=auk-audit-direction --logins=auditor
# puni Guillaume, pas de SSH !
</code></pre>
Suite à ces commandes on reproduit le même process d&rsquo;inscription que pour l&rsquo;administrateur.
<br>
L&rsquo;utilisateur dispose d&rsquo;une heure pour ouvrir le lien HTTPS fourni, valider son accès et paramétrer ses « crédentials ».								</div>
				</div>
				<div class="elementor-element elementor-element-a22b4f2 elementor-widget elementor-widget-image" data-id="a22b4f2" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="179" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-135709.png" class="attachment-1536x1536 size-1536x1536 wp-image-30182" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-135709.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-135709-300x45.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-135709-1024x152.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-135709-768x114.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-fea23fc elementor-widget elementor-widget-text-editor" data-id="fea23fc" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Par l’UI :</p>

<ol>
<li><strong>Access</strong> → <strong>Users</strong> → <strong>Create user</strong></li>
<li>Saisir identifiant + e-mail</li>
<li>Assigner le rôle (<code>auk-admin-bastion</code>, <code>auk-secops</code>, <code>auk-audit-direction</code>)</li>
<li>Envoyer le lien d’invitation (mot de passe + MFA)</li>
</ol>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-7d605c9 elementor-widget elementor-widget-text-editor" data-id="7d605c9" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f51f.png" alt="🔟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Intégration des serveurs Linux comme nodes Teleport <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h4>
<h5>Principe <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa84.png" alt="🪄" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Sur chaque serveur (<code>srvweb</code>, <code>srvbdd</code>), un <strong>agent Teleport</strong> s’exécute :</p>

<ul>
  <li>il ouvre une connexion sortante vers <code>srvsecteleport.aukfood.net:3025</code></li>
  <li>il reçoit ses certificats internes et ses labels par <code>srvsecteleport.aukfood.net:3022</code></li>
  <li>toutes les connexions SSH passent par le bastion, avec certificats éphémères et audit centralisé</li>
</ul>
<br>
<h5>Check réseau <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>
Tests depuis la cible → <code>srvsecteleport.aukfood.net:3025</code> (TCP) doit être joignable.
</p>

<pre><code>nc -vz srvsecteleport.aukfood.net 3025
</code></pre>

<p>Résultats :</p>
<ul>
<li><code>open</code> / <code>succeeded</code> → réseau OK</li>
<li><code>Connection timed out</code> / <code>No route to host</code> → problème firewall / routing</li>
<li><code>Connection refused</code> → rien n’écoute → vérifier Teleport côté bastion</li>
</ul>
<br>
<p>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2139.png" alt="ℹ" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Il est aussi possible d&rsquo;intégrer des serveurs en « Agentless mode » (sans agents) avec <strong>OpenSSH</strong>.<br />
En raison de la taille de l&rsquo;article je n&rsquo;en ferai pas la démonstration ici.<br>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa84.png" alt="🪄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Vous pouvez faire <em>« Accio Nodes »</em> ca marche aussi <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
</p>								</div>
				</div>
				<div class="elementor-element elementor-element-0373af2 elementor-widget elementor-widget-image" data-id="0373af2" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1536" height="594" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TelSRV.png" class="attachment-1536x1536 size-1536x1536 wp-image-30164" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TelSRV.png 1590w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelSRV-300x116.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelSRV-1024x396.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelSRV-768x297.png 768w" sizes="(max-width: 1536px) 100vw, 1536px" />															</div>
				</div>
				<div class="elementor-element elementor-element-5fa5e72 elementor-widget elementor-widget-text-editor" data-id="5fa5e72" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Génération d’un join token pour un node <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2623.png" alt="☣" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Depuis le bastion <code>srvsecteleport</code> :
<code>sudo tctl tokens add --type=node --ttl=1h
</code></p>

<ul>
  <li>Génère un <strong>token</strong> à usage unique, valide 1h</li>
  <li>Donne aussi une commande <code>teleport start ...</code> d’exemple (que je n’utilise pas ici)</li>
</ul>
<br>
<p>
  Ce token permet à un nouveau node de se présenter au <strong>cluster</strong> Teleport de manière contrôlée.<br />
  Une fois enrôlé, le node reçoit ses certificats internes pour les connexions.
</p>								</div>
				</div>
				<div class="elementor-element elementor-element-c0d7400 elementor-widget elementor-widget-image" data-id="c0d7400" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1467" height="300" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-102031.png" class="attachment-1536x1536 size-1536x1536 wp-image-30173" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-102031.png 1467w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-102031-300x61.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-102031-1024x209.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-102031-768x157.png 768w" sizes="(max-width: 1467px) 100vw, 1467px" />															</div>
				</div>
				<div class="elementor-element elementor-element-19cd0c0 elementor-widget elementor-widget-text-editor" data-id="19cd0c0" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Installation du node <code>srvweb</code> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5a5.png" alt="🖥" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Sur <code>Serveur Cible</code> :</p>

<pre><code>sudo apt update
sudo apt install teleport
</code></pre>

<p><strong>Créer la configuration du node :</strong>
<code>sudo nano /etc/teleport.yaml</code></p>

<p><strong>Exemple :</strong></p>
								</div>
				</div>
				<div class="elementor-element elementor-element-f84b547 elementor-widget elementor-widget-image" data-id="f84b547" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="363" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-102047.png" class="attachment-1536x1536 size-1536x1536 wp-image-30172" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-102047.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-102047-300x91.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-102047-1024x310.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-102047-768x232.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-0e000aa elementor-widget elementor-widget-text-editor" data-id="0e000aa" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									
<p><strong>Points importants :</strong></p>

<ul>
<li><code>auth_servers</code> : liste des Auth Services Teleport à contacter</li>
<li><code>auth_token</code> : token d’enrôlement, utilisé une fois pour rejoindre le cluster</li>
<li><code>labels</code> : métadonnées attachées au node (<code>env=lab</code>, <code>role=web</code>, <code>os=linux</code>) utilisées pour le RBAC</li>
</ul>

<br>
<p><strong>Activer le service :</strong></p>

<pre><code>sudo systemctl enable --now teleport
sudo systemctl status teleport
</code></pre>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-a021a41 elementor-widget elementor-widget-text-editor" data-id="a021a41" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									
<h5>Onboarding graphique</h5>

<p>Depuis l’UI Teleport :</p>

<ol>
<li><strong>Add New</strong> → <strong>Resource</strong> → <strong>Add server</strong></li>
<li>Choisir <strong>Linux / Teleport Agent</strong></li>
<li>Copier la commande proposée</li>
<li>L’exécuter sur la cible via SSH classique</li>
<li>Vérifier l’apparition du node dans la liste avec ses labels</li>
</ol>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-c77fa75 elementor-widget elementor-widget-text-editor" data-id="c77fa75" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3ac.png" alt="🎬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Scénarios de tests et démonstration</h4>

<p>Dans la maquette, Teleport utilise un certificat auto-signé, d’où le
<code>--insecure</code> côté <code>tsh</code>.<br />
En production, on utilisera un certificat de confiance et on supprimera cette option !
</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa84.png" alt="🪄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Sortilège associé <em>« TSH Connectum ! »</em> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>								</div>
				</div>
				<div class="elementor-element elementor-element-2dc3368 elementor-widget elementor-widget-text-editor" data-id="2dc3368" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ec.png" alt="🧬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> login TSH &amp; visibilité des nodes ~ Admin <code>romain</code> : </h5>

<pre><code>tsh login --proxy=srvsecteleport.aukfood.net:443 --user=romain --insecure
tsh status
tsh ls</code></pre>

<ul>
<li>user Teleport = <code>romain</code></li>
<li>proxy = <code>srvsecteleport.aukfood.net</code></li>
<li>nodes <code>srvweb</code>, <code>srvbdd</code> visibles avec leurs labels</li>
</ul>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-020446d elementor-widget elementor-widget-image" data-id="020446d" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="264" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-162521.png" class="attachment-1536x1536 size-1536x1536 wp-image-30175" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-162521.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-162521-300x66.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-162521-1024x225.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-162521-768x169.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-4d7014f elementor-widget elementor-widget-image" data-id="4d7014f" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1479" height="136" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-162647.png" class="attachment-1536x1536 size-1536x1536 wp-image-30174" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-162647.png 1479w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-162647-300x28.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-162647-1024x94.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-162647-768x71.png 768w" sizes="(max-width: 1479px) 100vw, 1479px" />															</div>
				</div>
				<div class="elementor-element elementor-element-54fd300 elementor-widget elementor-widget-text-editor" data-id="54fd300" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> login SSH par UI HTTPS ~ admin <code>Romain</code> sur <code>srvdata</code> avec <code>romadmin</code> :</h5>
<p>Cliquer <code>Connect</code> sur la ressource pour accéder par interface WEB à l&rsquo;interface de ligne de commande du serveur cible</p>
<ul>
<li><code>romain</code> voit uniquement les nodes autorisés par ses labels</li>
<li>SSH Ok en <code>romadmin</code> sur les machines prévues</li>
</ul>								</div>
				</div>
				<div class="elementor-element elementor-element-d239e20 elementor-widget elementor-widget-image" data-id="d239e20" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1536" height="594" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TelSRV.png" class="attachment-1536x1536 size-1536x1536 wp-image-30164" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TelSRV.png 1590w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelSRV-300x116.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelSRV-1024x396.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TelSRV-768x297.png 768w" sizes="(max-width: 1536px) 100vw, 1536px" />															</div>
				</div>
				<div class="elementor-element elementor-element-fed1767 elementor-widget elementor-widget-image" data-id="fed1767" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="391" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-152416.png" class="attachment-1536x1536 size-1536x1536 wp-image-30192" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-152416.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-152416-300x98.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-152416-1024x333.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-15-152416-768x250.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-0721501 elementor-widget elementor-widget-text-editor" data-id="0721501" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ec.png" alt="🧬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> login TSH SSH admin <code>Killian</code> sur <code>srvweb</code> avec <code>secops</code> :</h5>
<pre><code>tsh ssh secops@srvweb
</code></pre>
<ul>
<li><code>killian</code> voit uniquement les nodes autorisés par ses labels</li>
<li> pas de droit sur l&rsquo;administration du bastion
<li>SSH Ok en <code>secops</code> sur les machines prévues</li>
</ul>								</div>
				</div>
				<div class="elementor-element elementor-element-2b44a97 elementor-widget elementor-widget-image" data-id="2b44a97" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="348" src="https://www.aukfood.fr/wp-content/uploads/2025/12/telkilliantshssh.png" class="attachment-1536x1536 size-1536x1536 wp-image-30193" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/telkilliantshssh.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/telkilliantshssh-300x87.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/telkilliantshssh-1024x297.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/telkilliantshssh-768x223.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-2881608 elementor-widget elementor-widget-text-editor" data-id="2881608" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f52e.png" alt="🔮" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Traçabilité : Profil Audit avec <code>guillaume</code><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9d9-200d-2642-fe0f.png" alt="🧙‍♂️" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<ul>
<li>Connexion à l’UI Teleport avec <code>guillaume</code> (password + MFA)</li>
<li>Accès : <strong>Audit / Active Session / Live / Recordings</strong></li>
<li>Lecture des enregistrements sans accès SSH ni droits d’édition</li>
</ul>
<br>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa84.png" alt="🪄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <em>« Expecto Auditum !! »</em> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> </p>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-1c7d480 elementor-widget elementor-widget-text-editor" data-id="1c7d480" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f464.png" alt="👤" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Voir les session SSH en cours</h5>								</div>
				</div>
				<div class="elementor-element elementor-element-37ce2c7 elementor-widget elementor-widget-image" data-id="37ce2c7" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1536" height="523" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-172150-scaled.png" class="attachment-1536x1536 size-1536x1536 wp-image-30196" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-172150-scaled.png 1600w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-172150-300x102.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-172150-1024x349.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Capture-decran-2025-12-10-172150-768x261.png 768w" sizes="(max-width: 1536px) 100vw, 1536px" />															</div>
				</div>
				<div class="elementor-element elementor-element-55a0cca elementor-widget elementor-widget-text-editor" data-id="55a0cca" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f526.png" alt="🔦" class="wp-smiley" style="height: 1em; max-height: 1em;" />  Audit de l&rsquo;ensemble des Logs</h5>								</div>
				</div>
				<div class="elementor-element elementor-element-1c8c393 elementor-widget elementor-widget-image" data-id="1c8c393" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="583" src="https://www.aukfood.fr/wp-content/uploads/2025/12/telauditlog-scaled.png" class="attachment-1536x1536 size-1536x1536 wp-image-30194" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/telauditlog-scaled.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/telauditlog-300x146.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/telauditlog-1024x498.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/telauditlog-768x373.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-ecf4b57 elementor-widget elementor-widget-image" data-id="ecf4b57" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="398" src="https://www.aukfood.fr/wp-content/uploads/2025/12/telauditlog2-1-scaled.png" class="attachment-1536x1536 size-1536x1536 wp-image-30207" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/telauditlog2-1-scaled.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/telauditlog2-1-300x100.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/telauditlog2-1-1024x340.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/telauditlog2-1-768x255.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-637a84a elementor-widget elementor-widget-image" data-id="637a84a" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1536" height="925" src="https://www.aukfood.fr/wp-content/uploads/2025/12/telcertifaudit.png" class="attachment-1536x1536 size-1536x1536 wp-image-30195" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/telcertifaudit.png 1586w, https://www.aukfood.fr/wp-content/uploads/2025/12/telcertifaudit-300x181.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/telcertifaudit-1024x617.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/telcertifaudit-768x462.png 768w" sizes="(max-width: 1536px) 100vw, 1536px" />															</div>
				</div>
				<div class="elementor-element elementor-element-fcc02de elementor-widget elementor-widget-text-editor" data-id="fcc02de" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f39e.png" alt="🎞" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Replay d’une session SSH</h5>								</div>
				</div>
				<div class="elementor-element elementor-element-c2c7218 elementor-widget elementor-widget-image" data-id="c2c7218" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1536" height="711" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Telrecording-scaled.png" class="attachment-1536x1536 size-1536x1536 wp-image-30200" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Telrecording-scaled.png 1920w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telrecording-300x139.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telrecording-1024x474.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telrecording-768x356.png 768w" sizes="(max-width: 1536px) 100vw, 1536px" />															</div>
				</div>
				<div class="elementor-element elementor-element-4c4dd3d elementor-widget elementor-widget-image" data-id="4c4dd3d" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="1200" height="533" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Telrecording2-scaled.png" class="attachment-1536x1536 size-1536x1536 wp-image-30201" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Telrecording2-scaled.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telrecording2-300x133.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telrecording2-1024x455.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Telrecording2-768x341.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />															</div>
				</div>
				<div class="elementor-element elementor-element-b41281d elementor-widget elementor-widget-text-editor" data-id="b41281d" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<br>
<h4><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ab.png" alt="💫" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Apports concrets &amp; limites de Teleport CE</h4>

<h5>Bénéfices observés <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<ul>
<li>
<strong>Réduction de la surface d’attaque</strong><br /> → Plus de SSH direct vers les serveurs, tout passe par le bastion </li> <li> <strong>Fin des clés SSH partagées</strong><br />
→ Certificats SSH éphémères, liés à un compte nominatif + MFA
</li>
<li>
<strong>Traçabilité centralisée</strong><br />
→ Audit, journaux, replay des sessions depuis une seule interface
</li>
<li>
<strong>Separation claire des rôles</strong><br />
→ Admin, SecOps, Audit / Direction avec des droits distincts
</li>
<li>
<strong>Alignement Zero-Trust</strong><br />
→ Auth forte, identité, durée de vie courte des certificats, labels &amp; RBAC
</li>
</ul>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-bf88d61 elementor-widget elementor-widget-text-editor" data-id="bf88d61" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Limites de Teleport Community Edition <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<ul>
<li>Teleport CE couvre <strong>largement</strong> le besoin interne (SSH, RBAC, MFA, audit, SSO GitLab)</li>
<li>
Certaines fonctions avancées (SSO très poussé, HA “clé en main”, support éditeur,
gouvernance d’identité complexe) sont côté EE
</li>
<li>Pour une production client, il faut bien clarifier le périmètre CE vs Enterprise car il existe des restrictions dans le cas de services « vendus ». Il faut bien payer les développeurs, la CE est déja très complète.</li>
</ul>
<br>

<h5>Ouverture : haute disponibilité <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>
L’architecture décrite ici repose sur un bastion unique
(Auth + Proxy sur la même VM, stockage local).
</p>

<p><strong>Pour aller vers une vraie haute disponibilité (HA) </strong>:</p>

<p>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f418.png" alt="🐘" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Utiliser <strong>PostgreSQL</strong> comme backend Teleport (au lieu du stockage local)<br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Déployer plusieurs <strong>Auth Services redondants</strong> pointant sur la même base<br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Placer plusieurs <strong>Proxy Services</strong> (stateless) derrière un <strong>Load Balancer</strong> (OPNsense HAProxy, F5, cloud LB…)<br>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Versionner</strong> la configuration (<code>teleport.yaml</code>, rôles RBAC) dans Git et déployer via <strong>Ansible</strong> / Terraform<br>
</p>
<p>
Ce scénario n’est pas détaillé dans l&rsquo;article malgré des essais intéressants, mais constitue une piste d’évolution « sérieuse » pour une future production ou offre managée.
</p>								</div>
				</div>
				<div class="elementor-element elementor-element-e4a86f0 elementor-widget elementor-widget-image" data-id="e4a86f0" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="768" height="512" src="https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportHA-768x512.png" class="attachment-medium_large size-medium_large wp-image-30233" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportHA-768x512.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportHA-300x200.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportHA-1024x683.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/TeleportHA.png 1200w" sizes="(max-width: 768px) 100vw, 768px" />															</div>
				</div>
				<div class="elementor-element elementor-element-70f4a27 elementor-widget elementor-widget-text-editor" data-id="70f4a27" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Bonnes pratiques &amp; sauvegarde <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bd.png" alt="💽" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h4>

<ul>
<li>Toujours imposer <strong>MFA</strong> pour les comptes sensibles</li>
<li><strong>Jamais de root</strong> exposé via Teleport</li>
<li>Contrôler strictement les <code>AllowUsers</code> / logins autorisés sur les cibles</li>
<li>
<strong>Surveiller</strong> les logs et idéalement les envoyé dans <strong>WAZUH</strong> :
<code>sudo journalctl -u teleport -f</code> sur bastion
idem nodes
</li>
<li>Sauvegarder au minimum :
<ul>
<li><code>/etc/teleport.yaml</code></li>
<li><code>/etc/teleport/rbac/*.yaml</code></li>
<li><code>/var/lib/teleport/</code> (ou backend PostgreSQL si utilisé)</li>
</ul>
</li>
</ul>
<br>
<p>
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>RAID / HA ≠ sauvegarde</strong> : il faut malgré tout une stratégie de
backup régulier et de restore testée.
</p>
<br>								</div>
				</div>
				<div class="elementor-element elementor-element-0a96036 elementor-widget elementor-widget-text-editor" data-id="0a96036" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h3><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3f0.png" alt="🏰" class="wp-smiley" style="height: 1em; max-height: 1em;" />  Conclusion &#8211; Teleport</h3>

<p>
Teleport remplit parfaitement son rôle de
<strong>bastion d’administration Zero-Trust</strong> :
les accès SSH ne passent plus directement par les serveurs, chaque action est
authentifiée, tracée et rejouable, et les rôles RBAC séparent clairement les
responsabilités (ex : administration, SecOps, audit/direction).
</p>

<p>
Cette implémentation reste volontairement simple (un seul nœud Auth/Proxy, stockage local),
mais elle pose des bases solides pour aller plus loin : backend PostgreSQL, haute
disponibilité, intégration SSO avancée et déploiement automatisé via IaC.
</p>

<p>
Cet article complète celui dédié à Warpgate et s’inscrit dans une approche globale
<strong>bastion + durcissement + supervision</strong> pour sécuriser les accès SSH
dans les infrastructures Aukfood et pour nos clients.
</p>

<br>								</div>
				</div>
				<div class="elementor-element elementor-element-e579917 elementor-widget elementor-widget-text-editor" data-id="e579917" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h3><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f51a.png" alt="🔚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conclusion générale du projet</h3>
<h4>Un bastion ca se choisit !</h4>
<p>
  Avec ce triptyque d’articles – analyse des bastions SSH, installation de Warpgate puis mise en place de Teleport – 
  l’objectif n’était pas seulement de tester des outils « qui font joli en démo », mais de poser les bases d’une vraie 
  démarche de sécurisation des accès d’administration chez Aukfood tout en observant leurs limites.
</p>

<p>
  <strong>Warpgate</strong> illustre le bastion <strong>léger, moderne, open source</strong>, parfaitement adapté à des besoins ciblés 
  (SSH / HTTP(S) / BDD) avec une mise en œuvre rapide et sans SaaS ni dépendance obscure.
<br><strong>Teleport</strong>, lui, représente une approche <strong>plus large, globale et industrielle</strong>, orientée Zero-Trust, certificats 
  éphémères, RBAC fin et intégration profonde avec l’écosystème (SSH, bases, Kubernetes, applications web…). 
<br>
<br>
<strong>Les deux solutions ne s’opposent pas</strong> : elles montrent surtout qu’il n’existe pas « un » bastion idéal, mais des réponses 
  différentes selon le contexte, la taille du SI, les exigences d’audit et de conformité.
</p>

<p>
  Au-delà des outils, ce travail met surtout en avant quelques constantes : ne plus exposer les serveurs en direct, 
  imposer une authentification forte, tracer les actions, séparer les rôles, documenter ce qui est fait et penser dès le départ 
  à la résilience (sauvegardes, HA, PKI, supervision).
<br>La suite logique à mon projet sera de mener les déploiements et l&rsquo;industrialisation des solutions : intégrer ces briques dans les pratiques internes, automatiser (IaC, Ansible), renforcer la supervision et aligner le tout avec les recommandations des organismes de référence comme l&rsquo;ANSSI.
</p>

<p>
  <strong>En résumé</strong> : ces trois articles ne clôturent pas le sujet, ils ouvrent au contraire la voie à une 
  <strong>stratégie bastion cohérente</strong>, adaptée au terrain, et prête à évoluer avec les besoins, 
  les risques… et les futurs projets.
</p>
<br>
<p>
Et vous, qu’est ce que vous en pensez ? Votre avis nous intéresse.
<br>
<br>
Merci pour votre lecture, n’hésitez pas à nous suivre sur les réseaux.
<br>
<br>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Romain GAUTIER
</p>								</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-14f5044 e-flex e-con-boxed e-con e-parent" data-id="14f5044" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-3496b5c e-con-full e-flex e-con e-child" data-id="3496b5c" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-be2eb35 elementor-widget elementor-widget-image" data-id="be2eb35" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="768" height="512" src="https://www.aukfood.fr/wp-content/uploads/2025/12/ChatGPT-Image-16-dec.-2025-09_55_37-768x512.png" class="attachment-medium_large size-medium_large wp-image-30230" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/ChatGPT-Image-16-dec.-2025-09_55_37-768x512.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/12/ChatGPT-Image-16-dec.-2025-09_55_37-300x200.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/ChatGPT-Image-16-dec.-2025-09_55_37-1024x683.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/ChatGPT-Image-16-dec.-2025-09_55_37.png 1200w" sizes="(max-width: 768px) 100vw, 768px" />															</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-70f67df e-con-full e-flex e-con e-child" data-id="70f67df" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-348d076 elementor-widget elementor-widget-image" data-id="348d076" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="534" src="https://www.aukfood.fr/wp-content/uploads/2025/12/Article-Teleport-fin-1024x683.png" class="attachment-large size-large wp-image-30239" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/12/Article-Teleport-fin-1024x683.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/12/Article-Teleport-fin-300x200.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/12/Article-Teleport-fin-768x512.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/12/Article-Teleport-fin.png 1536w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>L’article <a href="https://www.aukfood.fr/securite-des-acces-ssh-installation-du-bastion-teleport/">Sécurité des accès SSH ~ Installation du bastion TELEPORT</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>React2Shell : le plat trop épicé de React 19. CrowdSec à la rescousse !</title>
		<link>https://www.aukfood.fr/react2shell-plat-epice-react19-crowdsec-protection/</link>
		
		<dc:creator><![CDATA[Killian Prin-Abeil]]></dc:creator>
		<pubDate>Mon, 08 Dec 2025 15:06:36 +0000</pubDate>
				<category><![CDATA[Cybersécurité]]></category>
		<category><![CDATA[Non classé]]></category>
		<category><![CDATA[appsec]]></category>
		<category><![CDATA[CrowdSec]]></category>
		<category><![CDATA[cve]]></category>
		<category><![CDATA[react2shell]]></category>
		<category><![CDATA[waf]]></category>
		<guid isPermaLink="false">https://www.aukfood.fr/?p=30061</guid>

					<description><![CDATA[<p>Le 3 décembre 2025, l'équipe React a révélé CVE-2025-55182, baptisée &#34;React2Shell&#34;, une faille critique d'exécution de code à distance dans les React Server Components. Avec un score CVSS de 10.0 et un taux d'exploitation proche de 100% sur les configurations par défaut, cette vulnérabilité représente une menace sérieuse pour les infrastructures modernes utilisant React 19 [&#8230;]</p>
<p>L’article <a href="https://www.aukfood.fr/react2shell-plat-epice-react19-crowdsec-protection/">React2Shell : le plat trop épicé de React 19. CrowdSec à la rescousse !</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le 3 décembre 2025, l'équipe React a révélé CVE-2025-55182, baptisée &quot;React2Shell&quot;, une faille critique d'exécution de code à distance dans les React Server Components. Avec un score CVSS de 10.0 et un taux d'exploitation proche de 100% sur les configurations par défaut, cette vulnérabilité représente une menace sérieuse pour les infrastructures modernes utilisant React 19 et Next.js.</p>
<p>L'écosystème open source a réagi rapidement : en quelques heures suivant la disclosure, CrowdSec a déployé des règles de détection spécifiques dans sa collection de virtual patching, démontrant l'agilité et l'efficacité des solutions collaboratives.<br />
&nbsp;</p>
<hr />
<p>&nbsp;</p>
<h3>Analyse technique de React2Shell</h3>
<h4>Nature de la vulnérabilité</h4>
<p>CVE-2025-55182 est une faille de désérialisation non sécurisée dans le protocole &quot;Flight&quot; des React Server Components. Le code serveur traite les charges utiles HTTP sans validation appropriée, permettant à un attaquant d'injecter et d'exécuter du code arbitraire.</p>
<p><strong>Packages vulnérables</strong> (versions 19.0.0 à 19.2.0) :</p>
<ul>
<li><code>react-server-dom-webpack</code></li>
<li><code>react-server-dom-turbopack</code></li>
<li><code>react-server-dom-parcel</code></li>
</ul>
<p><strong>Frameworks impactés</strong> :</p>
<ul>
<li>Next.js 15.0.4 à 16.0.6 (plus canaries 14.3.0-canary.77+)</li>
<li>React Router (mode RSC)</li>
<li>Waku, Vite RSC, Parcel RSC</li>
<li>RedwoodSDK</li>
</ul>
<p>Le point critique : <strong>même une application Next.js fraîche créée via <code>create-next-app</code> est vulnérable par défaut</strong>. Aucune configuration spécifique n'est nécessaire, la simple présence de Server Components suffit.</p>
<h4>Scénario d'attaque</h4>
<p>Un attaquant peut :</p>
<ul>
<li>Envoyer une requête HTTP POST malicieuse vers n'importe quel endpoint</li>
<li>Exploiter la désérialisation pour exécuter du code arbitraire</li>
<li>Obtenir un accès complet au serveur</li>
<li>Exfiltrer des données, installer des backdoors, pivoter vers le réseau interne<br />
&nbsp;</li>
</ul>
<hr />
<p>&nbsp;</p>
<h3>La réactivité de CrowdSec face à React2Shell</h3>
<p><strong>Un écosystème collaboratif rapide</strong><br />
Ce qui différencie l'open source dans la cybersécurité, c'est la réactivité de la communauté. <strong>Quelques heures après la disclosure</strong>, CrowdSec a mis à disposition une règle de détection pour React2Shell : <code>vpatch-CVE-2025-55182</code></p>
<p><strong>Que fait la règle ?</strong></p>
<p>La règle <code>vpatch-CVE-2025-55182</code> de CrowdSec vise à <strong>détecter les tentatives d’exploitation de React2Shell</strong> en identifiant les caractéristiques propres à l’attaque. Elle s’appuie sur cinq signaux combinés, ce qui réduit fortement les faux positifs :</p>
<ul>
<li><strong>Méthode HTTP POST</strong> → les attaques exploitent exclusivement des formulaires envoyés au serveur.</li>
<li><strong>Présence d’en-têtes propres aux React Server Actions</strong> (<code>next-action</code>, <code>rsc-action-id</code>) → indicateurs forts qu’il s’agit d’un flux RSC/Next.js.</li>
<li><strong>Paramètres internes de Flight modifiés</strong> (<code>status</code>, <code>resolved_model</code>) → champs sensibles utilisés par la désérialisation vulnérable.</li>
<li><strong>Payload contenant le motif suspect</strong> <code>$@</code> → signature d’injection associée au contournement du modèle de résolution.</li>
</ul>
<p>CrowdSec corrèle ces éléments pour repérer les patterns d’exploitation connus de React2Shell <strong>sans disposer d’un exploit public fonctionnel</strong>, ce qui en fait un virtual patch préventif, destiné à protéger les applications en attendant que les correctifs officiels soient déployés.</p>
<p><strong>Comment installer la règle de protection CrowdSec</strong></p>
<p>Si vous avez déjà suivi nos précédents tutoriels sur l’installation de CrowdSec, de son module WAF AppSec ou encore sur son automatisation via Ansible, vous êtes déjà parfaitement équipé pour ajouter ce virtual patch.</p>
<p>Pour rappel, nos guides sont disponibles ici :</p>
<ul>
<li><a href="https://www.aukfood.fr/devenez-le-gandalf-de-votre-serveur-lamp-you-shall-not-pass/">Devenez le Gandalf de votre serveur  LAMP : &quot;You SHALL Not Pass!&quot;</a></li>
<li><a href="https://www.aukfood.fr/crowdsec-appsec-component-securise-vos-site-web/">Crowdsec AppSec Component : Sécurié vos site web</a></li>
<li><a href="https://www.aukfood.fr/automatiser-linstallation-et-la-configuration-de-crowdsec-avec-ansible/">Automatiser l'installation et la configuration de CrowdSec avec Ansible</a></li>
</ul>
<p>L’installation de la règle de mitigation pour React2Shell est ensuite très simple. Il suffit d’exécuter :</p>
<pre><code class="language-bash">cscli appsec-rules install crowdsecurity/vpatch-CVE-2025-55182</code></pre>
<p>En quelques secondes, votre WAF AppSec commence à appliquer le virtual patch et à détecter les tentatives d’exploitation liées à CVE-2025-55182.</p>
<p><strong>N’oubliez pas de mettre à jour React et Next.js</strong><br />
L’installation de la règle CrowdSec offre une protection immédiate, mais elle ne remplace pas le correctif officiel. Pour éliminer définitivement React2Shell, veillez à mettre à jour vos dépendances dès que possible :</p>
<ul>
<li><strong>React 19.x</strong> vers la version corrigée</li>
<li><strong>Next.js</strong> (toutes versions impactées) vers la release de sécurité publiée par Vercel<br />
Ces mises à jour corrigent la vulnérabilité à la source et doivent être appliquées même si votre WAF est en place.<br />
&nbsp;</li>
</ul>
<hr />
<p>&nbsp;</p>
<h3>Conclusion</h3>
<p>CVE-2025-55182 (React2Shell) représente une menace sérieuse avec son score CVSS de 10.0, mais l'écosystème open source a démontré sa capacité à réagir rapidement. <strong>CrowdSec a publié des règles de détection quelques heures après la disclosure</strong>, illustrant la puissance du modèle collaboratif.</p>
<p>Chez Aukfood, notre approche Purple Team combinée à CrowdSec nous permet de :</p>
<ol>
<li>Protéger proactivement nos clients via le virtual patching</li>
<li>Améliorer itérativement nos règles de détection</li>
<li>Bénéficier de l'intelligence collective de la communauté CrowdSec</li>
<li>Une validation continue</li>
</ol>
<p><strong>Notre recommandation</strong> : Toutes les organisations utilisant React 19 avec Server Components doivent :</p>
<ol>
<li>Patcher immédiatement vers les versions corrigées</li>
<li>Déployer CrowdSec avec les collections de virtual patching</li>
<li>Surveiller activement les tentatives d'exploitation</li>
<li>Tester régulièrement l'efficacité des défenses (approche Purple Team)</li>
</ol>
<p>L'objectif est d'utiliser les outils open source de manière optimale pour une défense collaborative et proactive, tout en respectant les principes de souveraineté des données qui sont au cœur de nos valeurs chez Aukfood.</p>
<hr />
<h3>Ressources complémentaires</h3>
<ul>
<li><a href="https://www.sysdig.com/blog/detecting-react2shell">Detecting React2Shell: The maximum-severity RCE Vulnerability affecting React Server Components and Next.js</a></li>
<li><a href="https://nextjs.org/blog/CVE-2025-66478">Security Advisory: CVE-2025-66478</a></li>
<li><a href="https://react2shell.com/">React2Shell (CVE-2025-55182)</a></li>
</ul>
<p>L’article <a href="https://www.aukfood.fr/react2shell-plat-epice-react19-crowdsec-protection/">React2Shell : le plat trop épicé de React 19. CrowdSec à la rescousse !</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sécurité des accès SSH ~ Installation du bastion WARPGATE</title>
		<link>https://www.aukfood.fr/securite-des-acces-ssh-installation-du-bastion-warpgate/</link>
		
		<dc:creator><![CDATA[Romain Gautier]]></dc:creator>
		<pubDate>Fri, 28 Nov 2025 15:08:10 +0000</pubDate>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Cybersécurité]]></category>
		<category><![CDATA[Infogérance]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[aukfood]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[virtualisation]]></category>
		<guid isPermaLink="false">https://www.aukfood.fr/?p=29945</guid>

					<description><![CDATA[<p>🏰 Warpgate – Bastion SSH 🔐 « No SaaS bullshit, No Jump hosts, No paid plan, No client » – warp-tech Warpgate est un bastion open source léger et moderne, écrit en Rust, développé par warp-tech, qui permet de sécuriser les accès à : 🧬 SSH&#160;&#160;&#160;&#160; 🌐 HTTP/HTTPS&#160;&#160;&#160;&#160; 🗄️ MySQL&#160;&#160;&#160;&#160; 🐘 PostgreSQL Sans client propriétaire, [&#8230;]</p>
<p>L’article <a href="https://www.aukfood.fr/securite-des-acces-ssh-installation-du-bastion-warpgate/">Sécurité des accès SSH ~ Installation du bastion WARPGATE</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="29945" class="elementor elementor-29945" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-1b8fac90 e-flex e-con-boxed e-con e-parent" data-id="1b8fac90" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-5bd02cee elementor-widget elementor-widget-text-editor" data-id="5bd02cee" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h3><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3f0.png" alt="🏰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Warpgate – Bastion SSH <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h3>

<p>« <em>No SaaS bullshit, No Jump hosts, No paid plan, No client » – warp-tech</em></p>

<p>Warpgate est un bastion open source léger et moderne, écrit en <strong>Rust</strong>, développé par <strong>warp-tech</strong>, qui permet de sécuriser les accès à :</p>

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ec.png" alt="🧬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>SSH</strong>&nbsp;&nbsp;&nbsp;&nbsp; <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>HTTP/HTTPS</strong>&nbsp;&nbsp;&nbsp;&nbsp; <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5c4.png" alt="🗄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>MySQL</strong>&nbsp;&nbsp;&nbsp;&nbsp; <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f418.png" alt="🐘" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>PostgreSQL</strong></p>

<p>Sans client propriétaire, sans plan payant, avec une philosophie très “simple &amp; safe”.<br />
Dans ce labo, Warpgate est utilisé comme <strong>bastion d’administration SSH</strong> pour accéder à des serveurs Linux durcis.</p>

<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Alert RBAC :</strong> <em>Role-Based Access Control <br /> Plusieurs Targets pour des rôles différents sur le même serveur = Des privilèges bien gérés ! &#8211; Mawki</em><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />
								</div>
				</div>
				<div class="elementor-element elementor-element-8c114ea elementor-widget elementor-widget-image" data-id="8c114ea" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="768" height="394" src="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-26-111431-768x394.png" class="attachment-medium_large size-medium_large wp-image-29947" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-26-111431-768x394.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-26-111431-300x154.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-26-111431.png 991w" sizes="(max-width: 768px) 100vw, 768px" />											<figcaption class="widget-image-caption wp-caption-text">Illustration du site Warp-Tech</figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-95c3d18 elementor-widget elementor-widget-text-editor" data-id="95c3d18" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>1&#x20e3; Objectifs de la mise en place</h4>

<ul>
  <li>Centraliser et tracer les accès SSH</li>
  <li>Appliquer une logique <strong>Zero-Trust</strong> (clé + MFA)</li>
  <li>Isoler les serveurs derrière un bastion “internet-facing”</li>
  <li>Tester une solution légère pour un déploiement postérieur dans un environnement pro</li>
</ul>
								</div>
				</div>
				<div class="elementor-element elementor-element-0c4c14e elementor-widget elementor-widget-text-editor" data-id="0c4c14e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>2&#x20e3; Binaire ou Docker ?</h4>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Mode binaire (choix pour le lab)</p>
<ul>
<li>Installation simple, très légère</li>
<li>Intégration directe avec systemd et journalctl</li>
<li>Mises à jour plus manuelles, besoin de durcir d&rsquo;avantage l’OS et les Firewalls</li>
</ul>
<br />
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f40b.png" alt="🐋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Mode Docker</p>
<ul>
<li>Déploiement reproductible (compose, K8s…)</li>
<li>Rollback facile via tags d’images</li>
<li>Isolation accrue (namespaces, volumes…)</li>
<li>Un peu plus de complexité (réseau, volumes, gestion Docker)</li>
</ul>
<br />
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Pour un déploiement en lab ou petite infra, le binaire est confortable. Pour de la prod / HA / Infra as Code, Docker ou K8s sont à privilégier.</p>
<br />								</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-70149b7 e-flex e-con-boxed e-con e-parent" data-id="70149b7" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-56f7735 elementor-widget elementor-widget-text-editor" data-id="56f7735" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>3&#x20e3; Pré-requis</h4>

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e1.png" alt="🛡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Système hôte</strong></p>
<ul>
  <li>Système serveur hôte “hardened” et mis à jour</li>
  <li>Un seul compte admin (<code>sudo</code>) et <strong>root désactivé</strong></li>
</ul>
<br />
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Paquets utiles</strong> : <code>curl</code>, <code>wget</code>, <code>sudo</code>, <code>ufw</code>, <code>htop</code>, <code>gnupg</code>, <code>ca-certificates</code>, <code>lsb-release</code></p>

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Réseau &amp; sécurité</strong></p>

<ul>
  <li>IP fixe, DNS fonctionnel, routage OK</li>
  <li>Pare-feu en amont configuré (ouverture des ports 22/2222, 8888, etc.)</li>
  <li>Trafic inter-zones (clients <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> bastion <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Data Center) maîtrisé</li>
</ul>

<br />
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Serveurs cibles</strong></p>

<ul>
  <li>SSH durci (clé uniquement, comptes dédiés, pas de root direct)</li>
  <li>Pare-feu locaux actif</li>
  <li>De préférence un <strong>port SSH non standard</strong> (ex : <code>666</code> côté cible)</li>
</ul>
<br />
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ec.png" alt="🧬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Bien évidemment, pour la configuration on se connecte en SSH à notre futur hôte !</p>								</div>
				</div>
				<div class="elementor-element elementor-element-16f21ea elementor-widget elementor-widget-image" data-id="16f21ea" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1535" height="648" src="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-26-160053.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-29972" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-26-160053.jpg 1535w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-26-160053-300x127.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-26-160053-1024x432.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-26-160053-768x324.jpg 768w" sizes="(max-width: 1535px) 100vw, 1535px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-ab05db2 elementor-widget elementor-widget-text-editor" data-id="ab05db2" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>4&#x20e3; Installation du binaire Warpgate</h4>
<h5>Téléchargement <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f504.png" alt="🔄" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>
<p>Vérifier la dernière version sur GitHub :<br />
<a href="https://github.com/warp-tech/warpgate/releases">« https://github.com/warp-tech/warpgate/releases »</a></p>
<p>Télécharger le binaire pour Linux :</p>
<pre><code>wget https://github.com/warp-tech/warpgate/releases/download/v0.17.0/warpgate-v0.17.0-x86_64-linux -O warpgate</code></pre>
<h5>Mise en place du binaire <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>
<p>Déplacer le fichier, le rendre exécutable et créer le répertoire de données :</p>
<pre><code>sudo mv warpgate /usr/local/bin/warpgate
sudo chmod +x /usr/local/bin/warpgate
sudo mkdir -p /var/lib/warpgate</code></pre>
<p>Vérifications <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50e.png" alt="🔎" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre><code>which warpgate
warpgate version
warpgate --help</code></pre>
<br />
								</div>
				</div>
				<div class="elementor-element elementor-element-d639904 elementor-widget elementor-widget-text-editor" data-id="d639904" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>5&#x20e3; Setup initial (config de base)</h4>

<p>Warpgate peut être configuré en <strong>mode guidé</strong> ou <strong>non-interactif</strong>.</p>

<h5>« Setup » guidé <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ed.png" alt="🧭" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<pre><code>sudo warpgate setup</code></pre>

<p>Exemple de choix :</p>
 
<pre><code>  Data path : /var/lib/warpgate
  HTTP (Admin UI) : 0.0.0.0:8888
  SSH : 0.0.0.0:2222
  MySQL : 0.0.0.0:33306
  PostgreSQL (optionnel) : 0.0.0.0:55432
  Recordings : activés
  Mot de passe admin : à définir
</code></pre>



<h5>« Unattended-setup » non-interactif <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fa9b.png" alt="🪛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<pre><code>sudo warpgate unattended-setup
  --ssh-port 2222 
  --http-port 8888 
  --data-path /var/lib/warpgate 
  --record-sessions 
  --admin-password 'MotDePasse@dminFort666!'</code></pre>

<p>Après la config, on obtient :</p>

<ul>
  <li>Fichier de config : <code>/etc/warpgate.yaml</code></li>
  <li>Données : <code>/var/lib/warpgate/</code></li>
  <li>DB SQLite par défaut : <code>sqlite:/var/lib/warpgate/db</code></li>
  <li>Recordings : <code>/var/lib/warpgate/recordings</code> (chemin par défaut)</li>
</ul>
<br />

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2139.png" alt="ℹ" class="wp-smiley" style="height: 1em; max-height: 1em;" /> On peut constater à la fin de l&rsquo;installation qu&rsquo;il à aussi généré ses clés, son certificat TLS, l&rsquo;admin (de base) et son rôle.</p>
<br />
								</div>
				</div>
				<div class="elementor-element elementor-element-e4d49e9 elementor-widget elementor-widget-text-editor" data-id="e4d49e9" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>6&#x20e3; Premier lancement et service systemd</h4>
								</div>
				</div>
				<div class="elementor-element elementor-element-11c51e1 elementor-widget elementor-widget-image" data-id="11c51e1" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1200" height="409" src="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-21-170605.png" class="attachment-1536x1536 size-1536x1536 wp-image-29985" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-21-170605.png 1200w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-21-170605-300x102.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-21-170605-1024x349.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-21-170605-768x262.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-48e1be5 elementor-widget elementor-widget-text-editor" data-id="48e1be5" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Test “first run” <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<pre><code>warpgate --config /etc/warpgate.yaml run</code></pre>

<p>Puis accéder à l’interface admin à partir d&rsquo;un client :<br />
<code>https://&lt;IP-ou-FQDN&gt;:8888/@warpgate/admin</code></p>

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Quand le test est OK, stopper avec <code>CTRL+C</code> afin de mettre fin au processus et de le passer en systemd</p><br />

<h5>Intégration systemd <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Créer le fichier <code>/etc/systemd/system/warpgate.service</code> (version simple, durcissement possible, voir GitHub) :</p>

								</div>
				</div>
				<div class="elementor-element elementor-element-7d7bef4 elementor-widget elementor-widget-image" data-id="7d7bef4" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="800" height="210" src="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-28-162424-1024x269.png" class="attachment-large size-large wp-image-29969" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-28-162424-1024x269.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-28-162424-300x79.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-28-162424-768x202.png 768w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-28-162424.png 1328w" sizes="(max-width: 800px) 100vw, 800px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-ae53e58 elementor-widget elementor-widget-text-editor" data-id="ae53e58" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Activer le service et vérifier :</p>

<pre><code>sudo systemctl daemon-reload
sudo systemctl enable --now warpgate
sudo systemctl status warpgate</code></pre>

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/303d.png" alt="〽" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Logs Live &gt; en temps réel</p>

<pre><code>sudo journalctl -u warpgate -f</code></pre>

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2139.png" alt="ℹ" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Vous verrez : Created symlink &lsquo;/etc/systemd/system/multi-user.target.wants/warpgate.service&rsquo; → &lsquo;/etc/systemd/system/warpgate.service&rsquo;<br />

warpgate check peut aussi être utile en cas « d&rsquo;error code »</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> La sortie de commande confirme « Warpgate service is running », on peut effectuer un second test en reboot le serveur.</p>
<br />								</div>
				</div>
				<div class="elementor-element elementor-element-fb19ff7 elementor-widget elementor-widget-image" data-id="fb19ff7" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1200" height="339" src="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-28-164211.jpg" class="attachment-full size-full wp-image-29970" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-28-164211.jpg 1200w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-28-164211-300x85.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-28-164211-1024x289.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-28-164211-768x217.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-ea99610 elementor-widget elementor-widget-text-editor" data-id="ea99610" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>7&#x20e3; Préparation des serveurs cibles (SSH)</h4>

<h5>Comptes de service dédiés <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f464.png" alt="👤" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p><strong>Bonnes pratiques :</strong> j&rsquo;ai créé deux comptes avec des privilèges différents, sans accès password, clé uniquement (on va les gérer via le bastion).<br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2139.png" alt="ℹ" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Dans ce cas, personne ne peut se connecter par MDP, attaque par force brute, connexion sans la clé du bastion et login par erreur sont impossible.</p>

<p>Exemple sur un serveur cible <code>srvweb</code> :</p>

<pre><code>sudo adduser --disabled-password --gecos "" wgtusr
sudo mkdir -p /home/wgtusr/.ssh
sudo chown -R wgtusr:wgtusr /home/wgtusr/.ssh
sudo chmod 700 /home/wgtusr/.ssh
sudo touch /home/wgtusr/.ssh/authorized_keys
sudo chmod 600 /home/wgtusr/.ssh/authorized_keys</code></pre>

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26d4.png" alt="⛔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Si le compte admin local est par exemple <code>romadmin</code>, bien verrouiller les droits de son home : <code>sudo chmod go-w /home/romadmin</code><br /><br />

<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Si les droits sur <code>~/.ssh</code> ou <code>authorized_keys</code> ne sont pas stricts, <code>sshd</code> ignore le fichier et l’authentification sera refusée (“Auth rejected”).</p>
<br />
								</div>
				</div>
				<div class="elementor-element elementor-element-fd5880e elementor-widget elementor-widget-text-editor" data-id="fd5880e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>8&#x20e3; Déploiement de la clé Warpgate sur les cibles</h4>

<p>Sur le bastion, afficher les clés Warpgate <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f511.png" alt="🔑" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>

<pre><code>sudo warpgate client-keys</code></pre>

<p>Exemple de sortie (raccourcie) :</p>

<pre><code>ssh-ed25519 AAAAC3NzaC1lZDI1NTE[...] warpgate
rsa-sha2-256 AAAADHblablabla[...] warpgate</code></pre>

<p>Copier la clé dans <code>authorized_keys</code> des comptes cible, par exemple :</p>

<pre><code>echo "ssh-ed25519 AAAAC3NzaCacestlacledubastion1lZDI1NTE[...] warpgate" | sudo tee -a /home/wgtusr/.ssh/authorized_keys</code></pre>

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tout est prêt pour finaliser l&rsquo;installation !</p>
<br />
								</div>
				</div>
				<div class="elementor-element elementor-element-52bcdd8 elementor-widget elementor-widget-image" data-id="52bcdd8" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1200" height="436" src="https://www.aukfood.fr/wp-content/uploads/2025/11/WARCapture-decran-2025-11-25-154508-scaled.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-30008" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/WARCapture-decran-2025-11-25-154508-scaled.jpg 1200w, https://www.aukfood.fr/wp-content/uploads/2025/11/WARCapture-decran-2025-11-25-154508-300x109.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/WARCapture-decran-2025-11-25-154508-1024x372.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/WARCapture-decran-2025-11-25-154508-768x279.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-c566bc1 e-flex e-con-boxed e-con e-parent" data-id="c566bc1" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-22f791e elementor-widget elementor-widget-text-editor" data-id="22f791e" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>9&#x20e3; Accès à la porte des étoiles : configuration dans l’UI</h4>

<p><strong>Rappel URL admin de base :</strong> <code>https://&lt;host&gt;:8888/@warpgate/admin</code><br /><br />
<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Bien cliquer sur <strong>Update</strong> à chaque changement majeur.</p>
								</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-48d4b8c e-flex e-con-boxed e-con e-parent" data-id="48d4b8c" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-cc314f2 elementor-widget elementor-widget-text-editor" data-id="cc314f2" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Rôles (RBAC) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3ad.png" alt="🎭" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Menu : <code>Config → Roles → Add role</code></p>

<p>Renseigner un nom clair : <code>ops:ssh</code>, <code>admin:bastion</code>, <code>readonly:web</code>, etc.<br />
Un rôle relie <strong>Users <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Targets</strong> :</p>

<ul>
  <li>Un user avec le rôle <code>ops:ssh</code></li>
  <li>Une target autorisant le rôle <code>ops:ssh</code></li>
  <li>L’utilisateur peut accéder à cette target.</li>
</ul>
<br />
<p>Pour des niveaux de privilèges différents sur un même serveur, il est possible de :</p>

<ul>
  <li>Créer plusieurs <strong>comptes locaux</strong> (ex : <code>wgtusr</code> et <code>wgtadmin</code>)</li>
  <li>Créer plusieurs <strong>roles</strong> et <strong>targets</strong> associés</li>
</ul>
<br />
<p>N&rsquo;oubliez pas la phrase de<em> Mawki</em> sûr le RBAC<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />								</div>
				</div>
				<div class="elementor-element elementor-element-b6a6a2b elementor-widget elementor-widget-text-editor" data-id="b6a6a2b" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Utilisateurs Warpgate <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f465.png" alt="👥" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Menu : <code>Config → Users → Add user</code></p>

<p>Checklist :</p>

<ul>
  <li><code>username</code> : ex. <code>romadmin</code>, <code>tfred.eni</code></li>
  <li><code>description</code> : Admin Bastion, DevOps, etc.</li>
  <li>Ajouter les credentials : <code>Add public key</code> (clé SSH du poste client), <code>Add OTP</code> (MFA), éventuellement <code>SSO</code>, <code>Password</code>, selon la politique</li>
  <li>Cocher les auth policies nécessaires (SSH / HTTP / MySQL / PostgreSQL)</li>
  <li>Assigner les rôles créés plus haut</li>
  <li>Optionnel : limiter la bande passante par user</li>
</ul>
<br />
								</div>
				</div>
				<div class="elementor-element elementor-element-6636dea elementor-widget elementor-widget-image" data-id="6636dea" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1200" height="584" src="https://www.aukfood.fr/wp-content/uploads/2025/11/KeyCapture-decran-2025-11-25-151143-scaled.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-30007" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/KeyCapture-decran-2025-11-25-151143-scaled.jpg 1200w, https://www.aukfood.fr/wp-content/uploads/2025/11/KeyCapture-decran-2025-11-25-151143-300x146.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/KeyCapture-decran-2025-11-25-151143-1024x499.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/KeyCapture-decran-2025-11-25-151143-768x374.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-69d7ecb elementor-widget elementor-widget-text-editor" data-id="69d7ecb" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>MFA / OTP sur mobile <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Pour un lab : <strong>TOTP (OTP basé temps)</strong> dans la réalité nous allons utiliser l&rsquo;OIDC &gt; SSO via OpenID Connect (KeyCloak), pour plus de sécurité.<br />
Le TOTP va générer des tokens d&rsquo;accès de 30 secondes, par déverouillage de coffre fort et authentification biométrique, en plus de la clé ssh !</p>

<p>Dans Warpgate : <code>Config → Users → &lt;user&gt; → Add OTP</code> → Warpgate affiche un QR code</p>

<p>Sur le mobile <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4f1.png" alt="📱" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>

<ul>
  <li>Installer un Authenticator open source et le configurer, j&rsquo;ai choisis <strong>Aegis</strong></li>
  <li>Scanner le QR code de l&rsquo;utilisateur</li>
  <li>Valider le premier code OTP</li>
</ul>
<br />

<p>De retour sur Warpgate : Entrer le code et cliquer <code>Update configuration</code> &gt; Cela va valider le compte d&rsquo;authentification<br />
Ensuite, l’accès admin demandera <strong>clé SSH + OTP</strong> (MFA) à chaque demande de connexion.</p>

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26d4.png" alt="⛔" class="wp-smiley" style="height: 1em; max-height: 1em;" />  Éviter les policies du type “Any credential” : forcer <strong>clé + OTP</strong> au minimum pour les comptes sensibles.</p>
<br />
								</div>
				</div>
				<div class="elementor-element elementor-element-56ffc4d elementor-widget elementor-widget-image" data-id="56ffc4d" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1200" height="683" src="https://www.aukfood.fr/wp-content/uploads/2025/11/CODOTPCapture-decran-2025-11-25-140525-scaled.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-30006" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/CODOTPCapture-decran-2025-11-25-140525-scaled.jpg 1200w, https://www.aukfood.fr/wp-content/uploads/2025/11/CODOTPCapture-decran-2025-11-25-140525-300x171.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/CODOTPCapture-decran-2025-11-25-140525-1024x582.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/CODOTPCapture-decran-2025-11-25-140525-768x437.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-7042f12 elementor-widget elementor-widget-text-editor" data-id="7042f12" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h5>Targets (cibles) <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Menu : <code>Config → Targets → Add target</code></p>

<p>Exemple pour un serveur SSH <code>srvweb</code> :</p>

<ul>
  <li>Type : <code>SSH</code></li>
  <li>Name : <code>srvweb_admin</code></li>
  <li>Host : <code>srvweb.aukfood.net</code> ou <code>100.44.22.5</code></li>
  <li>Port : <code>666</code> (port SSH cible)</li>
  <li>Username : <code>wgtadm</code> (compte local sur la cible)</li>
  <li>Roles : cocher <code>ops:ssh</code> (par exemple)</li>
</ul>
<br />

<p>Ensuite, dans la fiche Target : Cliquer sur <code>Check host key</code> pour valider la clé de l’hôte et le lien bastion <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2194.png" alt="↔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> cible.<br /><br />

<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Si la config target, la clé et le lien sont conformes vous verrez :  “Remote host key is thrusted”</p>

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Une target a <strong>un seul username</strong>, tous les utilisateurs Warpgate ayant un rôle autorisé sur cette target arriveront sur la machine <strong>avec ce compte</strong> !</p>
<br />
								</div>
				</div>
				<div class="elementor-element elementor-element-cbe1ceb elementor-widget elementor-widget-image" data-id="cbe1ceb" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1406" height="1536" src="https://www.aukfood.fr/wp-content/uploads/2025/11/TARPG2Capture-decran-2025-12-01-104038.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-30037" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/TARPG2Capture-decran-2025-12-01-104038.jpg 1471w, https://www.aukfood.fr/wp-content/uploads/2025/11/TARPG2Capture-decran-2025-12-01-104038-275x300.jpg 275w, https://www.aukfood.fr/wp-content/uploads/2025/11/TARPG2Capture-decran-2025-12-01-104038-937x1024.jpg 937w, https://www.aukfood.fr/wp-content/uploads/2025/11/TARPG2Capture-decran-2025-12-01-104038-768x839.jpg 768w" sizes="(max-width: 1406px) 100vw, 1406px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-137bb26 elementor-widget elementor-widget-text-editor" data-id="137bb26" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f51f.png" alt="🔟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tests d’accès</h4>

<h5>Accès administrateur du bastion <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f451.png" alt="👑" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Connexion à l’UI via <code>https://srvwgt.aukfood.net:8888/@warpgate/admin</code> &#8211; Authentification par <strong>clé SSH + OTP</strong></p>

<h5>Accès utilisateurs vers leurs serveurs <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f464.png" alt="👤" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h5>

<p>Le login SSH se fait au format : <code>user:target@bastion</code> &#8211; Authentification par <strong>clé SSH + OTP</strong></p>

<p>Exemple connexion admin : <code>ssh 'tfred.eni:srvweb_admin@srvwgt.aukfood.net' -p 2222</code></p>
<p>Exemple première connexion d&rsquo;un utilisateur non admin :
</p>
								</div>
				</div>
				<div class="elementor-element elementor-element-2e63728 elementor-widget elementor-widget-image" data-id="2e63728" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1200" height="499" src="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-25-232401.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-29986" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-25-232401.jpg 1200w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-25-232401-300x125.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-25-232401-1024x426.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-11-25-232401-768x319.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-94b0f26 elementor-widget elementor-widget-text-editor" data-id="94b0f26" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><strong>Le fonctionnement :</strong></p>

<ol>
  <li>Le client se connecte au <strong>bastion</strong> (<code>srvwgt</code>) sur le port 2222</li>
  <li>Warpgate vérifie la clé SSH + OTP de l’utilisateur</li>
  <li>L’utilisateur valide fingerprint pour déclarer à son poste l&rsquo;authenticité du bastion</li>
  <li>Il démarre son Authenticator, déverouille le coffre-fort (empreinte biométrique) et entre le code obtenu</li>
  <li>Warpgate établit la connexion vers la <strong>target</strong> <code>srvweb</code> sur le port 666 en fonction de ses droits (cible admin ou non)</li>
  <li>L’utilisateur est logué avec l&rsquo;user local du serveur et n’a jamais les credentials directs de la cible</li>
  <li>Warpgate conserve les logs et le recording de la session de l&rsquo;utilisateur pour la tracabilté</li>
  <li>Direct &amp; Replay session possibles si actifs, rétention paramétrable<br />
&gt; Si Fred à tout cassé on peut le savoir et surtout comprendre ce qui s&rsquo;est passé, par chance il n&rsquo;avait pas les droits !</li>
</ol>
<br />
								</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-00cbaa6 e-flex e-con-boxed e-con e-parent" data-id="00cbaa6" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-6691ab9 elementor-widget elementor-widget-text-editor" data-id="6691ab9" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Exemple Log et session recording avec Fred :
</p>
								</div>
				</div>
				<div class="elementor-element elementor-element-b260902 elementor-widget elementor-widget-image" data-id="b260902" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1536" height="477" src="https://www.aukfood.fr/wp-content/uploads/2025/11/ACT2Capture-decran-2025-11-27-155202.png" class="attachment-1536x1536 size-1536x1536 wp-image-29994" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/ACT2Capture-decran-2025-11-27-155202.png 1734w, https://www.aukfood.fr/wp-content/uploads/2025/11/ACT2Capture-decran-2025-11-27-155202-300x93.png 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/ACT2Capture-decran-2025-11-27-155202-1024x318.png 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/ACT2Capture-decran-2025-11-27-155202-768x239.png 768w" sizes="(max-width: 1536px) 100vw, 1536px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-70a0827 elementor-widget elementor-widget-image" data-id="70a0827" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1200" height="623" src="https://www.aukfood.fr/wp-content/uploads/2025/11/LOGCapture-decran-2025-11-27-155225.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-29991" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/LOGCapture-decran-2025-11-27-155225.jpg 1200w, https://www.aukfood.fr/wp-content/uploads/2025/11/LOGCapture-decran-2025-11-27-155225-300x156.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/LOGCapture-decran-2025-11-27-155225-1024x532.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/LOGCapture-decran-2025-11-27-155225-768x399.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-b305fd2 elementor-widget elementor-widget-image" data-id="b305fd2" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
												<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="1536" height="479" src="https://www.aukfood.fr/wp-content/uploads/2025/11/RECCapture-decran-2025-11-25-233913-scaled.jpg" class="attachment-1536x1536 size-1536x1536 wp-image-29992" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/RECCapture-decran-2025-11-25-233913-scaled.jpg 1920w, https://www.aukfood.fr/wp-content/uploads/2025/11/RECCapture-decran-2025-11-25-233913-300x94.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/RECCapture-decran-2025-11-25-233913-1024x319.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/RECCapture-decran-2025-11-25-233913-768x240.jpg 768w" sizes="(max-width: 1536px) 100vw, 1536px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
									</div>
				</div>
				<div class="elementor-element elementor-element-26895f2 elementor-widget elementor-widget-text-editor" data-id="26895f2" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4>Bonnes pratiques &amp; sauvegarde <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h4>

<ul>
  <li>Toujours forcer <strong>MFA</strong> pour les comptes sensibles</li>
  <li>Pas d’accès root direct via Warpgate</li>
  <li>Utiliser des comptes de service dédiés sur les cibles</li>
  <li>Surveiller les logs : <code>journalctl -u warpgate -f</code></li>
  <li><strong>Sauvegardes minimales</strong> : <code>/etc/warpgate.yaml</code> + <code>/var/lib/warpgate/</code> (ou DB externe si déporté)</li>
</ul>
<br />

<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> RAID / HA ≠ sauvegarde : Garder au minimum une sauvegarde régulière des fichiers de config et de la base.</p>
<br />
								</div>
				</div>
				<div class="elementor-element elementor-element-8034680 elementor-widget elementor-widget-text-editor" data-id="8034680" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<h4><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ad.png" alt="💭" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Retour d’expérience &amp; avis</h4>

<p>Après mise en place et premiers tests, Warpgate donne globalement une <strong>très bonne impression</strong> :</p>

<p><strong>Points forts :</strong></p>

<ul>
  <li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f527.png" alt="🔧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Installation simple</strong> et config claire en YAML</li>
  <li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ec.png" alt="🧬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Support de <strong>SSH / HTTP(S) / MySQL / PostgreSQL</strong> dans un même outil</li>
  <li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>MFA</strong>, clés SSH, intégration SSO possibles → esprit Zero-Trust</li>
  <li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Traçabilité</strong> : journaux détaillés, enregistrements de sessions, historique</li>
  <li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fab6.png" alt="🪶" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Consommation très faible, binaire Rust, peu de dépendances</li>
</ul>
<br />

<p><strong>Points de vigilance :</strong></p>

<ul>
  <li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> La <strong>HA n’est pas magique</strong> : Il faut penser l’architecture globale : DB externe, load balancer, redondance réseau.</li>
  <li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> La <strong>courbe d’apprentissage RBAC</strong> (rôles, users, targets) peut surprendre au début</li>
  <li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Gestion des enregistrements de sessions à prévoir (stockage, rotation, rétention)</li>
</ul>
<br />

<p><strong>Mon Ressenti :</strong></p>

<ul>
  <li>Très adapté pour un <strong>bastion SSH / HTTP moderne</strong> dans une petite/moyenne infra d&rsquo;admin et un environnement <strong>cloud/VM</strong> où on veut faire <strong>simple et efficace.</strong></li>
  <li>Moins adapté pour une <strong>solution “complète” clef en main</strong> avec déjà tout (portails utilisateurs, workflow d’approbation, catalogue d’applis, etc.) et dans un <strong>écosystème trop complexe</strong>.</li>
</ul>
<br />

<p><strong>Conclusion</strong> :<br /><br />

Warpgate est un <strong>excellent candidat</strong> pour un bastion open source moderne, encore plus si on accepte de <strong>construire soi-même</strong> la partie HA (DB, reverse-proxy, supervision, sauvegardes).<br />
Dans notre contexte, il s’intègre bien à une approche <strong>cloud + open source</strong> avec un bon compromis : <strong>légèreté, sécurité, traçabilité</strong>.<br />
A présent, on va le déployer sur une petite partie de notre infrastructure, histoire de s&rsquo;amuser un peu.<br />
</p>
								</div>
				</div>
				<div class="elementor-element elementor-element-62681f3 elementor-widget elementor-widget-text-editor" data-id="62681f3" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Et vous, qu&rsquo;est ce que vous en pensez ? Vous avez essayé ?  On vous l&rsquo;installe ?</p>
<br />
<p>Merci pour vôtre lecture, n&rsquo;hésitez pas à nous suivre sur les réseaux.</p>
<br />
<h5><p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Romain GAUTIER</p></h5>								</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-57970ae e-flex e-con-boxed e-con e-parent" data-id="57970ae" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-1981f3b elementor-widget elementor-widget-spacer" data-id="1981f3b" data-element_type="widget" data-e-type="widget" data-widget_type="spacer.default">
				<div class="elementor-widget-container">
							<div class="elementor-spacer">
			<div class="elementor-spacer-inner"></div>
		</div>
						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-4f3c225 e-flex e-con-boxed e-con e-parent" data-id="4f3c225" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-cbcb0f8 elementor-widget elementor-widget-image" data-id="cbcb0f8" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="534" src="https://www.aukfood.fr/wp-content/uploads/2025/11/FINwarpgate-1-1024x683.jpg" class="attachment-large size-large wp-image-30038" alt="" srcset="https://www.aukfood.fr/wp-content/uploads/2025/11/FINwarpgate-1-1024x683.jpg 1024w, https://www.aukfood.fr/wp-content/uploads/2025/11/FINwarpgate-1-300x200.jpg 300w, https://www.aukfood.fr/wp-content/uploads/2025/11/FINwarpgate-1-768x512.jpg 768w, https://www.aukfood.fr/wp-content/uploads/2025/11/FINwarpgate-1.jpg 1200w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
					</div>
				</div>
				</div>
		<p>L’article <a href="https://www.aukfood.fr/securite-des-acces-ssh-installation-du-bastion-warpgate/">Sécurité des accès SSH ~ Installation du bastion WARPGATE</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Authentification Nextcloud avec Keycloak</title>
		<link>https://www.aukfood.fr/authentification-nextcloud-avec-keycloak/</link>
		
		<dc:creator><![CDATA[Guillaume Chéramy]]></dc:creator>
		<pubDate>Fri, 07 Nov 2025 11:21:48 +0000</pubDate>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[keycloak]]></category>
		<category><![CDATA[SSO]]></category>
		<guid isPermaLink="false">https://www.aukfood.fr/?p=29903</guid>

					<description><![CDATA[<p>L'idée de cet article assez technique est de mettre à jour les articles précédents sur Keycloak notement l'interaction avec Nextcloud qui a un peu changé. Je vais aussi revoir le déploiement de Keycloak en première partie, ensuite la configuration d'un client et enfin l'intégration avec Nextcloud. Let's go ... Mise en place de Keycloak Je [&#8230;]</p>
<p>L’article <a href="https://www.aukfood.fr/authentification-nextcloud-avec-keycloak/">Authentification Nextcloud avec Keycloak</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>L'idée de cet article assez technique est de mettre à jour les articles précédents sur Keycloak notement l'interaction avec Nextcloud qui a un peu changé.<br />
Je vais aussi revoir le déploiement de Keycloak en première partie, ensuite la configuration d'un client et enfin l'intégration avec Nextcloud.</p>
<p>Let's go ... </p>
<h2>Mise en place de Keycloak</h2>
<p>Je fais le choix d'une installation Keycloak en conteneur Docker pour l'isoler avec une base de données Postgresql.</p>
<p>Bien sûr à adapter, ici j'ai un proxy traefik devant, je vous renvoi à nos articles sur Traefik si besoins.</p>
<p>Oubliez pas le fichier .env avec les valeurs des variables.</p>
<pre><code class="language-vim">services:
  keycloak:
    container_name: keycloak
    image: &quot;quay.io/keycloak/keycloak:26.4.0&quot;
    command: start
    environment:
      PROXY_ADDRESS_FORWARDING: true
      KC_PROXY: edge
      KEYCLOAK_ADMIN: ${KEYCLOAK_USER}
      KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_PASSWORD}
      KC_HOSTNAME: ${KEYCLOAK_URL}
      KC_DB: postgres
      KC_DB_USERNAME: ${POSTGRES_USER}
      KC_DB_PASSWORD: ${POSTGRES_PASSWORD}
      KC_DB_URL_HOST: keycloak_postgres
      KC_DB_URL_DATABASE: keycloak
      KC_HTTP_ENABLED: true
      KC_PROXY_HEADERS: xforwarded
    depends_on:
      keycloak_postgres:
        condition: service_healthy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /etc/localtime:/etc/localtime:ro
      - conf:/opt/keycloak/conf
      - data:/opt/keycloak/data
      - providers:/opt/keycloak/providers
      - themes:/opt/keycloak/themes
    labels:
      - &quot;traefik.enable=true&quot;
      - &quot;traefik.docker.network=traefik-proxy&quot;
      - &quot;traefik.http.routers.keycloak.entrypoints=websecured&quot;
      - &quot;traefik.http.routers.keycloak.rule=Host(`keyurl`)&quot;
      - &quot;traefik.http.routers.keycloak.service=keycloak&quot;
      - &quot;traefik.http.services.keycloak.loadbalancer.server.port=8080&quot;
    networks:
      - &quot;traefik-proxy&quot;
      - &quot;database&quot;

  keycloak_postgres:
    container_name: keycloak_postgres
    image: postgres:17
    restart: always
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - ./postgresql:/var/lib/postgresql/data
    networks:
      - &quot;database&quot;
    healthcheck:
      test: [&quot;CMD-SHELL&quot;, &quot;pg_isready -U ${POSTGRES_USER} -d keycloak&quot;]
      interval: 10s
      timeout: 5s
      retries: 5
    labels:
      - &quot;traefik.enable=false&quot;

networks:
  traefik-proxy:
    external:
      name: traefik-proxy
  database:
    name: database

volumes:
  conf:
    driver: local
  data:
    driver: local
  providers:
    driver: local
  themes:
    driver: local</code></pre>
<h2>Configuration de Keycloak</h2>
<p>Une fois déployé il faut dans un premier temps créer un &quot;royaume&quot; un &quot;realm&quot;, ne jamais utiliser le realm par défaut.</p>
<h3>Créer un client pour Nextcloud</h3>
<p>Ensuite on va créer un client pour notre application Nextcloud.<br />
<img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2025/11/keycloak-create-client-1-1024x377.png" alt="" /></p>
<p><img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2025/11/keycloak-client-2-1024x356.png" alt="" /></p>
<p><img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2025/11/keycloak-client-3-1024x416.png" alt="" /></p>
<h3>Mapping pour les groupes</h3>
<p>Il faut préciser à Keycloak qu'il faut aussi envoyer les informations de groupes pour un utilisateur. Pour cela :</p>
<ul>
<li>aller dans &quot;Client Scopes</li>
<li>il doit y avoir un scope qui s'appelle &quot;nextcloud-dedicated&quot;</li>
<li>créer un mapper de type &quot;Group Membership&quot; comme ceci </li>
</ul>
<p><img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-du-2025-11-07-11-55-06.png" alt="" /></p>
<h3>Créer un utilisateur</h3>
<p>Il faut ensuite créer un utilisateur et spécifier au minima son login, son, email, son nom.</p>
<h3>Créer un ou des groupes</h3>
<p>Il faut créer les groupes et affecter les utilisteurs.</p>
<h2>Paramétrer Nextcloud</h2>
<p>Il faut installer l'application <a href="https://apps.nextcloud.com/apps/oidc_login" title="oidc_login">oidc_login</a> ce qui remplace &quot;social login&quot; utilisé dans les précédents articles.</p>
<p>Une fois installé, dans le fichier <strong>config.php</strong> :</p>
<pre><code class="language-vim">  // OIDC params
  &#039;oidc_login_client_id&#039; =&gt; &#039;nextcloud&#039;,
  &#039;oidc_login_client_secret&#039; =&gt; &#039;id_a_recup_dans_keycloak&#039;, 
  &#039;oidc_login_provider_url&#039; =&gt; &#039;https://url_keycloak/realms/lerealm&#039;,
  &#039;oidc_login_end_session_redirect&#039; =&gt; true,
  &#039;oidc_login_logout_url&#039; =&gt; &#039;https://url_nextcloud/&#039;,
  &#039;oidc_login_auto_redirect&#039; =&gt; true,
  &#039;oidc_login_redir_fallback&#039; =&gt; true,
  &#039;oidc_login_button_text&#039; =&gt; &#039;Connexion Keycloak&#039;,
  &#039;oidc_login_attributes&#039; =&gt; array(
    &#039;id&#039; =&gt; &#039;preferred_username&#039;,
    &#039;mail&#039; =&gt; &#039;email&#039;,
    &#039;groups&#039; =&gt; &#039;groups&#039;,
  ),
  &#039;overwriteprotocol&#039; =&gt; &#039;https&#039;,
  &#039;oidc_login_scope&#039; =&gt; &#039;openid profile roles email&#039;,
  &#039;oidc_login_proxy_ldap&#039; =&gt; false,
  &#039;oidc_login_disable_registration&#039; =&gt; false,
  &#039;oidc_login_redir_fallback&#039; =&gt; false,
  &#039;oidc_login_tls_verify&#039; =&gt; true,
  &#039;oidc_create_groups&#039; =&gt; true,</code></pre>
<p>On a maintenant un bouton &quot;Connexion Keycloak&quot; :<br />
<img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-du-2025-11-07-10-50-24.png" alt="" /></p>
<p>On peut donc maintenant se connecter avec l'utilisateur créé dans Keycloak, les paramètres seront récupérés pour créer l'utilisateur dans Nextcloud.</p>
<p>Good Job ...</p>
<h2>Sources</h2>
<p>Quelques liens intéressants que je vous conseille :</p>
<ul>
<li>les liens Keycloak sur notre site bien sûr <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
<li>cet <a href="https://www.it-connect.fr/tuto-keycloak-installation-avec-docker/" title="article de Connect IT">article de Connect IT</a></li>
<li>cet <a href="https://larsolino.com/2025/01/15/keycloak-groups/" title="article sur le mapping des groupes">article sur le mapping des groupes</a></li>
</ul>
<p>L’article <a href="https://www.aukfood.fr/authentification-nextcloud-avec-keycloak/">Authentification Nextcloud avec Keycloak</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projet R&#038;D ~ Analyse de solutions de bastion d&#8217;administration SSH</title>
		<link>https://www.aukfood.fr/projet-rd-analyse-de-solutions-de-bastion-dadministration-ssh/</link>
		
		<dc:creator><![CDATA[Romain Gautier]]></dc:creator>
		<pubDate>Thu, 06 Nov 2025 13:21:47 +0000</pubDate>
				<category><![CDATA[Cybersécurité]]></category>
		<category><![CDATA[Infogérance]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Logiciels Libres]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[ssh]]></category>
		<guid isPermaLink="false">https://www.aukfood.fr/?p=29872</guid>

					<description><![CDATA[<p>🔒Sécurité des accès SSH, analyse de quatre solutions de bastion pour la protection du SI : Dans le cadre de mon projet chez Aukfood, j’ai mené une recherche approfondie concernant différents bastions d'administration SSH 100% open source. Objectifs : Identifier une solution fiable, moderne, pérenne, adaptée à nos besoins sur le Cloud et compatible avec [&#8230;]</p>
<p>L’article <a href="https://www.aukfood.fr/projet-rd-analyse-de-solutions-de-bastion-dadministration-ssh/">Projet R&amp;D ~ Analyse de solutions de bastion d&rsquo;administration SSH</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h4><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" />Sécurité des accès SSH, analyse de quatre solutions de bastion pour la protection du SI :</h4>
<p>Dans le cadre de mon projet chez Aukfood, j’ai mené une recherche approfondie concernant différents bastions d'administration SSH 100% open source.</p>
<p>Objectifs : Identifier une solution fiable, moderne, pérenne, adaptée à nos besoins sur le Cloud et compatible avec nos &quot;outils&quot; pour renforcer la sécurité des environnements administratifs dans un contexte spécifique.</p>
<p>
Ce bastion sera exposé publiquement, donc potentiellement &quot;visible&quot; ; Il doit accepter des connexions SSH entrantes depuis n’importe où, tout en filtrant, authentifiant, journalisant, chiffrant. Il ne protège pas seulement un LAN, mais filtre des flux vers d’autres services à travers internet!</p>
<p>La solution sera &quot;internet-facing&quot;, une politique de sécurité Zéro-Thrust avec durcissement est donc impérative. Des méthodes adaptées seront implémentées autour afin d'écarter les risques d'attaque. J'ai effectué mes recherches en respectant au maximum les exigences opérationnelles citées ci dessous ;</p>
<ul>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Traçabilité complète des accès SSH</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f465.png" alt="👥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Gestion centralisée des utilisateurs / groupes</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Intégration LDAP / SSO / MFA ...</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f575.png" alt="🕵" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Audit, logs, historique et enregistrements</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4f1.png" alt="📱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Accès multi-plateforme (PC, mobile, CLI)</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Haute disponibilité (HA) et résilience</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Maintenabilité, sécurité et pérennité à long terme
<p> </li>
</ul>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3c5.png" alt="🏅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Classement globale des solutions de Bastion éligibles à nos critères :</h5>
<table>
<thead>
<tr>
<th style="text-align: center">#</th>
<th style="text-align: center">Nom du Bastion</th>
<th style="text-align: center">Visibilité / Réputation</th>
<th style="text-align: center">Communauté</th>
<th>Justification de sélection et limites</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f947.png" alt="🥇" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td style="text-align: center">Teleport<br />Gravitational</p>
<p>92/100</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />Référence mondiale, grands comptes<br />(IBM, Dropbox, Snowflake)</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Très active</td>
<td>Le plus complet et polyvalent, éprouvé et maintenu activement<br />Intègre SSH/RDP/K8s/DB, audit complet et RBAC<br />Limites : Versions CE &amp; EE (Community Edition), config initiale plus technique</td>
</tr>
<tr>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f948.png" alt="🥈" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td style="text-align: center">The Bastion<br />OVH</p>
<p>88/100</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />Reconnu, déployé en production par OVH</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Active</td>
<td>SSH pur, très robuste, totalement conforme aux préconisations ANSSI<br />Bonne traçabilité, parfait pour infrastructures souveraines<br />Limites : pas d’interface web pour évolution future, exclusivement CLI</td>
</tr>
<tr>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f949.png" alt="🥉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td style="text-align: center">Warpgate<br />warp.tech</p>
<p>85/100</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />Croissante, communauté Rust</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Très active</td>
<td>Léger, moderne, innovant, futur prometteur grâce à Rust<br />Intégration OIDC/TOTP native, adapté environnements Cloud/SSH purs<br />Limites : solution récente, manque de complexité config pour HA et RBAC</td>
</tr>
<tr>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3c5.png" alt="🏅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td style="text-align: center">JumpServer<br />Fit2Cloud</p>
<p>84/100</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />Large adoption internationale</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Très active</td>
<td>PAM open source complet, bon compromis fonctionnalités/robustesse<br />Multi-protocole (SSH/RDP/DB), audit avancé, intégration LDAP<br />Limites : docs parfois partielles (origine asiatique), stack plus lourde</td>
</tr>
</tbody>
</table>
<p>L’intérêt de ce classement est de mettre en avant des solutions ayant déjà fait leur preuves en fonction de leurs réputation, visibilité et disponibilité des contenus. La notation est calculée en fonction du niveau de sécurité et en adéquation à nos besoins techniques.<br />
  </p>
<p>  </p>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ee.png" alt="🧮" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Matrice d’exigences technique détaillée :</h5>
<table>
<thead>
<tr>
<th style="text-align: left">Critère</th>
<th style="text-align: center">Teleport</th>
<th style="text-align: center">The Bastion (OVH)</th>
<th style="text-align: center">Warpgate</th>
<th style="text-align: center">JumpServer</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Langage principal</td>
<td style="text-align: center">Go</td>
<td style="text-align: center">Perl / Shell</td>
<td style="text-align: center">Rust</td>
<td style="text-align: center">Python / Go</td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2696.png" alt="⚖" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Licence</td>
<td style="text-align: center">AGPLv3</td>
<td style="text-align: center">Apache 2.0</td>
<td style="text-align: center">Apache 2.0</td>
<td style="text-align: center">GPL-3.0</td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Multi-protocoles (SSH/RDP/DB/K8s)</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Oui</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f534.png" alt="🔴" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Non (SSH uniquement)</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> SSH/HTTP/DB basique</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Oui (SSH pur plus sécurisé)</td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> LDAP / SSO / MFA intégrés</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> OIDC, SAML, TOTP, WebAuthn</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Auth forte, MFA externe possible</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> OIDC, TOTP natif</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> LDAP, MFA</td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f575.png" alt="🕵" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Audit / replay / logs détaillés</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Oui (replay, logs SIEM)</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Oui (audit complet)</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Oui (replay sessions)</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Oui (SSH/RDP logs)</td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f465.png" alt="👥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Gestion utilisateurs / RBAC</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> RBAC complet, certificats courts</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Groupes et délégation</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Rôles simples + OIDC</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> RBAC complet, approbations</td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4f1.png" alt="📱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Accès multi-plateforme</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> CLI/Web, mobile via client SSH</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> SSH natif, pas d’UI mobile</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Compatible Termius/Blink</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Accès web + proxy SSH</td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Haute disponibilité / Clusterisation</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Multi-nœuds Auth/Proxy</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Réplication manuelle</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> LB + PostgreSQL</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Cluster complet Redis+DB</td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Durcissement / Zéro-Trust / Internet-facing</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Natif (reverse tunnel + certs courts)</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> CLI robuste, conforme ANSSI</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Nécessite proxy/LB sécurisé (Traefik /Nginx)</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Possible via durcissement DMZ</td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Pérennité / Maintenabilité</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f535.png" alt="🔵" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Complexité déploiement</td>
<td style="text-align: center">Moyenne/élevée</td>
<td style="text-align: center">Simple/moyenne</td>
<td style="text-align: center">Simple/moyenne</td>
<td style="text-align: center">Moyenne</td>
</tr>
<tr>
<td style="text-align: left"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f30d.png" alt="🌍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Adéquation Cloud / Internet</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Optimisé pour Cloud public</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Utilisé en frontal SSH</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Léger et Cloud-ready</td>
<td style="text-align: center"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Plus orienté LAN, à isoler</td>
</tr>
</tbody>
</table>
<p>Légende   <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conforme et adapté au déploiement       <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Fonction partielle ou nécessitant intégration manuelle       <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f534.png" alt="🔴" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Absent nativement</p>
<p>Cette &quot;matrice&quot; démontre les avantages/inconvénients concernant la partie rôles/fonctions et s'il existe des complexité liées à l'environnement et à la sécurité. C'est une analyse fonctionelle qui nous permet d'observer si la solution peut &quot;matcher&quot; ou non avec ce que l'entreprise souhaite.<br />
  </p>
<p>  </p>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Implications de sécurité à prendre en compte :</h5>
<table>
<thead>
<tr>
<th>Risque</th>
<th>Impact</th>
<th>Recommandations / Contre-mesures</th>
</tr>
</thead>
<tbody>
<tr>
<td>Exposition directe des ports</td>
<td>Attaques par force brute, scans automatisés</td>
<td>- Placer le bastion derrière reverse-proxy ou LB sécurisé (Cloudflare, Traefik, HAProxy) <br />- fail2ban / CrowdSec actifs <br />- Port non standard (ex : 6622)</td>
</tr>
<tr>
<td>Vol d’identifiants / attaque par force brute</td>
<td>Compromission d'accès administratifs</td>
<td>- Authentification OIDC/MFA obligatoire (TOTP, YubiKey, KeyCloack...) <br />- Restrictions password/login</td>
</tr>
<tr>
<td>Exploitation de vulnérabilité logicielle</td>
<td>Exécution de code à distance sur le bastion</td>
<td>- Image durcie <br />- MAJ automatique + monitoring <br />- Sandboxing du service bastion</td>
</tr>
<tr>
<td>Rebond depuis bastion vers Internet</td>
<td>Utilisation du bastion comme proxy d’attaque</td>
<td>- Egress filtering : seules les IP de nos machines en frontal seront autorisées (filtrage de sortie)<br />- Interdiction d'accès Web</td>
</tr>
<tr>
<td>Perte de logs / traçabilité</td>
<td>Non-conformité sécurité</td>
<td>- Centralisation des logs vers Wazuh <br />- Sauvegarde quotidienne chiffrée<br />- Rétention ≥ 12 mois des journaux d’audit</td>
</tr>
</tbody>
</table>
<p>Toutes les solutions doivent donc être durcies et encadrées par des couches externes (WAF, proxy, filtrage sortant, supervision).<br />
La fiabilité du projet dépendra autant de cette enveloppe de sécurité que du choix du bastion lui-même.<br />
  </p>
<p>  </p>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Analyse transversales des solutions et des fonctions</h5>
<table>
<thead>
<tr>
<th>Fonctions</th>
<th>Analyse transversale</th>
</tr>
</thead>
<tbody>
<tr>
<td>Traçabilité et audit</td>
<td>Les quatre solutions offrent une traçabilité satisfaisante ; Teleport et JumpServer se distinguent par la richesse des logs et la granularité des replays. The Bastion reste un modèle d’efficacité sur SSH pur.</td>
</tr>
<tr>
<td>Gestion des accès et RBAC</td>
<td>Teleport et JumpServer disposent de rôles très complets ; Warpgate propose une approche plus simple, adaptée à des environnements agiles.</td>
</tr>
<tr>
<td>Authentification / MFA / SSO</td>
<td>Toutes intègrent MFA ou SSO d’une manière ou d’une autre ; Teleport et Warpgate adoptent OIDC/TOTP nativement, The Bastion reste plus minimaliste mais robuste.</td>
</tr>
<tr>
<td>Haute disponibilité / Scalabilité</td>
<td>Teleport et JumpServer disposent de vraies architectures distribuées ; Warpgate et The Bastion demandent une configuration manuelle (LB ou réplication).</td>
</tr>
<tr>
<td>Durcissement et exposition Internet</td>
<td>Teleport et The Bastion sont les plus adaptés à une exposition publique, grâce à leurs mécanismes d’authentification forte et leurs politiques de chiffrement strictes. Warpgate, plus léger, reste sûr s’il est correctement encapsulé derrière un proxy ou WAF.</td>
</tr>
<tr>
<td>Complexité et maintenabilité</td>
<td>Warpgate et The Bastion sont simples à maintenir ; Teleport et JumpServer nécessitent un peu plus d’expertise système, mais offrent une supervision plus avancée.</td>
</tr>
</tbody>
</table>
<p>  </p>
<h4><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ed.png" alt="🧭" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Analyse finale – Synthèse</h4>
<p>L’étude menée sur ces bastions SSH open source a permis d’identifier quatre solutions matures et techniquement crédibles :</p>
<ul>
<li>Teleport apporte une approche “Enterprise-grade” avec certificats éphémères, SSO, RBAC complet et audit centralisé.</li>
<li>The Bastion (OVH) incarne la philosophie française open-source souveraine, avec une sécurité SSH stricte, une conformité ANSSI-ready, et une maintenance minimaliste.</li>
<li>Warpgate, plus récent, se démarque par sa légèreté, son code Rust sécurisé, et son excellente compatibilité multi-plateforme (PC/mobile).</li>
<li>JumpServer s’impose comme un PAM open source complet couvrant SSH/RDP/DB avec gestion LDAP et clusterisation.
<p>  </li>
</ul>
<h5><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" />Conclusion ouverte</h5>
<p>L’évaluation démontre qu’aucune solution unique ne couvre parfaitement tous les scénarios, mais que chacune possède une forte valeur ajoutée selon le contexte d’exploitation.<br />
Le choix définitif devra être guidé par les priorités internes (sécurité, mobilité, gouvernance, souveraineté), la politique de conformité et de traçabilité imposée aux environnements Cloud.</p>
<p>Dans tous les cas, l’approche Zero Trust, le durcissement de la surface exposée, et la centralisation de l’audit demeurent les véritables garants de la sécurité globale du projet. </p>
<p>L'étude menée lors de la première étape de mon stage m'a permise de découvrir l'environnement technique actuel, de comprendre comment étaient gérés les accès et ce qu'il était possible d'améliorer. La seconde étape consiste à déployer des &quot;environnements de test&quot; virtualisés et de documenter des procédures.</p>
<p>Après réalisation des tests, une décision concrète sera prise avec la direction et la Purple Team concernant la possibilité du déploiement définitif sur l'infrastructure.<br />
  </p>
<p><img decoding="async" src="https://www.aukfood.fr/wp-content/uploads/2025/11/Capture-decran-2025-10-29-113932.png" alt="" /></p>
<p>L’article <a href="https://www.aukfood.fr/projet-rd-analyse-de-solutions-de-bastion-dadministration-ssh/">Projet R&amp;D ~ Analyse de solutions de bastion d&rsquo;administration SSH</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Webinair : Nextcloud : le cloud collaboratif qui envoie les watts !</title>
		<link>https://www.aukfood.fr/webinair-nextcloud-collaboratif-visio/</link>
		
		<dc:creator><![CDATA[Guillaume Chéramy]]></dc:creator>
		<pubDate>Wed, 05 Nov 2025 07:48:41 +0000</pubDate>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Logiciels Libres]]></category>
		<category><![CDATA[Webinair]]></category>
		<category><![CDATA[collaboratif]]></category>
		<category><![CDATA[nextcloud]]></category>
		<category><![CDATA[visioconférence]]></category>
		<guid isPermaLink="false">https://www.aukfood.fr/?p=29854</guid>

					<description><![CDATA[<p>Le replay de notre webinair Nextcloud : le cloud collaboratif qui envoie les watts ! est disponible. Ce webinair en partenariat avec Circuit Libre avait pour objectif de présenter les fonctionnalités majeures de Nextcloud et les nouveautés de la version &#34;Autumn 25&#34;.</p>
<p>L’article <a href="https://www.aukfood.fr/webinair-nextcloud-collaboratif-visio/">Webinair : Nextcloud : le cloud collaboratif qui envoie les watts !</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Le replay de notre webinair <a href="https://peertube.aukfood.net/w/cZsKbRUHaq5RtxdNbHudDN" title="Nextcloud : le cloud collaboratif qui envoie les watts !">Nextcloud : le cloud collaboratif qui envoie les watts !</a> est disponible.</p>
<p>Ce webinair en partenariat avec <a href="https://circuitlibre.fr/" title="Circuit Libre">Circuit Libre</a> avait pour objectif de présenter les fonctionnalités majeures de Nextcloud et les nouveautés de la version &quot;Autumn 25&quot;.</p>
<p>L’article <a href="https://www.aukfood.fr/webinair-nextcloud-collaboratif-visio/">Webinair : Nextcloud : le cloud collaboratif qui envoie les watts !</a> est apparu en premier sur <a href="https://www.aukfood.fr">Aukfood</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
