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

<channel>
	<title>Linux &#8211; Garbell.NET</title>
	<atom:link href="https://www.garbell.net/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.garbell.net</link>
	<description>Notes techniques : Linux, réseau et télécoms, depuis 2003</description>
	<lastBuildDate>Thu, 01 Oct 2026 19:17:45 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<site xmlns="com-wordpress:feed-additions:1">65339430</site>	<item>
		<title>Analyser les appels SIP en ligne de commande avec sngrep</title>
		<link>https://www.garbell.net/2026/10/01/analyser-appels-sip-sngrep/</link>
					<comments>https://www.garbell.net/2026/10/01/analyser-appels-sip-sngrep/#respond</comments>
		
		<dc:creator><![CDATA[AMGV]]></dc:creator>
		<pubDate>Thu, 01 Oct 2026 19:17:45 +0000</pubDate>
				<category><![CDATA[Command-Line]]></category>
		<category><![CDATA[Télécom]]></category>
		<category><![CDATA[command-line]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[pcap]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[sngrep]]></category>
		<category><![CDATA[VoIP]]></category>
		<guid isPermaLink="false">https://www.garbell.net/2026/10/01/analyser-appels-sip-sngrep/</guid>

					<description><![CDATA[Un appel qui sonne dans le vide, un poste qui ne s&#8217;enregistre plus, un « 486 Busy Here » inexpliqué : pour comprendre ce qui se passe en SIP, il faut voir les messages échangés. Wireshark le fait très bien, mais demande une interface graphique et un transfert de fichier. sngrep affiche les dialogues SIP [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Un appel qui sonne dans le vide, un poste qui ne s&rsquo;enregistre plus, un « 486 Busy Here » inexpliqué : pour comprendre ce qui se passe en SIP, il faut voir les messages échangés. Wireshark le fait très bien, mais demande une interface graphique et un transfert de fichier. <strong>sngrep</strong> affiche les dialogues SIP et leur diagramme de séquence directement dans le terminal, sur le serveur lui-même : IPBX, SBC ou passerelle.</p>
<p>Les commandes et les écrans ci-dessous ont été vérifiés sur Debian 13 (Trixie) avec sngrep 1.8.2.</p>
<h2>Installation</h2>
<pre>apt install sngrep</pre>
<p>La capture réseau demande les droits root : lancé par un utilisateur normal, sngrep s&rsquo;arrête avec <code>Couldn't activate capture: socket: Operation not permitted</code>. Utilisez <code>sudo</code> pour la capture en direct. La lecture d&rsquo;un fichier pcap, elle, ne demande aucun droit particulier.</p>
<h2>Capture en direct</h2>
<pre>sudo sngrep</pre>
<p>Par défaut, sngrep écoute sur toutes les interfaces (<code>any</code>) et affiche tous les paquets SIP qu&rsquo;il reconnaît. Pour restreindre :</p>
<pre>sudo sngrep -d eth0                      # une seule interface
sudo sngrep -d eth0 port 5060            # filtre BPF, même syntaxe que tcpdump
sudo sngrep -d eth0 host 192.168.1.1 and udp
sudo sngrep -c                           # uniquement les dialogues qui commencent par un INVITE</pre>
<p>L&rsquo;option <code>-c</code> est la plus utile sur un serveur chargé : elle masque les REGISTER, OPTIONS et autres messages qui noient les appels.</p>
<h2>La liste des dialogues</h2>
<p>L&rsquo;écran principal liste un dialogue SIP par ligne : méthode, appelant, appelé, nombre de messages, source et destination.</p>
<pre>                         sngrep - SIP messages flow viewer
  Current Mode: Offline          Dialogs: 2          Filename: test.pcap
  Match Expression:              BPF Filter:
  Display Filter:
      ^Idx Method     SIP From            SIP To                  Msgs  Source              Destination
  [ ] 1    INVITE     101@192.168.1.1     102@192.168.1.1         7     192.168.1.20:5060   192.168.1.1:5060
  [ ] 2    INVITE     101@192.168.1.1     0600000000@192.168.1.1  5     192.168.1.20:5060   192.168.1.1:5060

Esc Quit   Enter Show   Space Select   F1 Help   F2 Save   F3 Search   F4 Extended   F5 Clear   F7 Filter</pre>
<p>Touches principales sur cet écran :</p>
<pre>Entrée    afficher le diagramme du dialogue sélectionné
Espace    sélectionner plusieurs dialogues (Entrée les affiche ensemble)
F3 ou /   filtre d'affichage : ne garder que les lignes contenant un texte
F4 ou x   diagramme étendu (le dialogue et ceux qui lui sont liés)
F6 ou R   messages bruts du dialogue sélectionné
F7 ou F   filtres : SIP From, SIP To, source, destination, contenu, méthodes
F2 ou S   enregistrer la capture
F5        vider la liste (irréversible)
p         suspendre ou reprendre la capture
F1 ou h   aide
Échap, q  revenir à l'écran précédent ou quitter</pre>
<p>Le filtre <code>F7</code> permet notamment de décocher REGISTER, OPTIONS ou NOTIFY pour ne garder que les appels.</p>
<h2>Le diagramme d&rsquo;un appel</h2>
<p>Entrée sur un dialogue affiche son diagramme de séquence, avec l&rsquo;horodatage et le délai entre chaque message. Le message sélectionné est affiché en entier sur la droite.</p>
<pre>                   Call flow for c1@192.168.1.20 (Color by Request/Response)
                                                        │INVITE sip:102@192.168.1.1 SIP/2.0
            192.168.1.20:5060      192.168.1.1:5060     │Via: SIP/2.0/UDP 192.168.1.20:5060;branch=...
          ──────────┬─────────  ──────────┬─────────    │From: &lt;sip:101@192.168.1.1&gt;;tag=ac1
  00:16:40.000000   │        INVITE       │             │To: &lt;sip:102@192.168.1.1&gt;
        +0.010000   │ ──────────────────&gt; │             │Call-ID: c1@192.168.1.20
  00:16:40.010000   │      100 Trying     │             │CSeq: 1 INVITE
        +0.490000   │ &lt;────────────────── │             │Content-Length: 0
  00:16:40.500000   │     180 Ringing     │
        +2.500000   │ &lt;────────────────── │
  00:16:43.000000   │        200 OK       │
        +0.050000   │ &lt;────────────────── │
  00:16:43.050000   │         ACK         │
       +16.950000   │ ──────────────────&gt; │
  00:17:00.000000   │         BYE         │
        +0.020000   │ ──────────────────&gt; │
  00:17:00.020000   │        200 OK       │
                    │ &lt;────────────────── │</pre>
<p>Touches sur cet écran :</p>
<pre>↑ ↓       passer d'un message à l'autre
Entrée    afficher le message sélectionné en brut
Espace    sélectionner deux messages pour les comparer
F2 ou d   afficher le détail SDP (codecs, adresses et ports média)
F3 ou m   afficher ou masquer les flux RTP (avec la capture RTP activée)
s         diagramme compressé
c         changer le mode de couleur
Échap     revenir à la liste</pre>
<p>Ce que l&rsquo;on lit dans le diagramme :</p>
<ul>
<li><strong>Un INVITE répété sans réponse</strong> : les retransmissions indiquent que le message n&rsquo;arrive pas ou que la réponse ne revient pas. On regarde alors le pare-feu ou le routage.</li>
<li><strong>Un 200 OK répété après le décroché</strong> : l&rsquo;ACK n&rsquo;arrive pas au destinataire. Classique avec un NAT mal géré, l&rsquo;appel est souvent coupé au bout d&rsquo;une trentaine de secondes.</li>
<li><strong>Une réponse 4xx, 5xx ou 6xx</strong> : le code donne la cause du refus (401/407 authentification, 404 numéro inconnu, 486 occupé, 488 codecs incompatibles, 503 service indisponible…).</li>
<li><strong>Un appel établi sans son</strong> : comparez les adresses IP du SDP (touche <code>F2</code>) dans l&rsquo;INVITE et dans le 200 OK. Une adresse privée qui part vers l&rsquo;extérieur trahit un problème de NAT.</li>
</ul>
<h2>Expression de recherche : ne capturer que certains appels</h2>
<p>Un texte donné en argument filtre les dialogues dès la capture : si la requête qui ouvre le dialogue contient ce texte, tout le dialogue est conservé, réponses comprises.</p>
<pre>sudo sngrep -c 0600000000</pre>
<p>Seuls les appels contenant ce numéro sont affichés. Attention, la recherche porte sur la requête initiale (l&rsquo;INVITE) : <code>sngrep 486</code> ne trouvera pas les appels rejetés en « 486 Busy Here », car ce code n&rsquo;apparaît que dans la réponse. Pour cela, utilisez le filtre d&rsquo;affichage <code>F3</code> une fois la capture lancée.</p>
<p>Autres options :</p>
<pre>-i        rendre la recherche insensible à la casse
-v        inverser la recherche (exclure les dialogues qui correspondent)</pre>
<h2>Enregistrer et relire une capture</h2>
<p>Enregistrer tout ce qui est capturé dans un fichier pcap, tout en gardant l&rsquo;interface :</p>
<pre>sudo sngrep -d eth0 -O /tmp/sip-$(date +%F-%H%M).pcap port 5060</pre>
<p>Capturer sans interface, par exemple pendant qu&rsquo;on reproduit un problème depuis un poste :</p>
<pre>sudo sngrep -N -c -O /tmp/appels.pcap</pre>
<p>sngrep affiche seulement le nombre de dialogues capturés ; on arrête avec <code>Ctrl+C</code>. Avec une expression de recherche, seuls les dialogues correspondants sont écrits dans le fichier :</p>
<pre>sudo sngrep -N -O /tmp/appel-client.pcap 0600000000</pre>
<p>Relire ensuite le fichier, sur le serveur ou sur un autre poste, sans droits root :</p>
<pre>sngrep -I /tmp/appels.pcap</pre>
<p>Le fichier est au format pcap standard : il s&rsquo;ouvre aussi dans Wireshark ou avec <code>tcpdump -r</code>. Les filtres BPF fonctionnent aussi en lecture : <code>sngrep -I capture.pcap host 192.168.1.1</code>.</p>
<p>Depuis l&rsquo;interface, <code>F2</code> ouvre la fenêtre d&rsquo;enregistrement. On y choisit les dialogues à garder (tous, sélectionnés avec <code>Espace</code>, ou filtrés) et le format : pcap avec le SIP seul, pcap avec SIP et RTP, ou texte.</p>
<pre>  ┌─ Dialogs ───────────────────┐ ┌─ Format ────────────────────┐
  │(*) all dialogs              │ │(*) .pcap (SIP)              │
  │( ) selected dialogs [0]     │ │(-) .pcap (SIP + RTP)        │
  │( ) filtered dialogs [2]     │ │( ) .txt                     │
  └─────────────────────────────┘ └─────────────────────────────┘</pre>
<p>Le format « SIP + RTP » n&rsquo;est disponible que si la capture a été lancée avec <code>-r</code>, qui conserve le contenu des paquets RTP en mémoire :</p>
<pre>sudo sngrep -c -r -O /tmp/appel-avec-son.pcap</pre>
<p>Le son peut ensuite être écouté dans Wireshark (menu Telephony &gt; VoIP Calls). Attention à la mémoire : avec <code>-r</code>, chaque appel occupe nettement plus de place.</p>
<h2>Longues captures</h2>
<p>sngrep garde les dialogues en mémoire, avec une limite par défaut de 20 000 dialogues. Pour le laisser tourner longtemps sur un serveur chargé :</p>
<pre>sudo sngrep -c -l 5000 -R</pre>
<p><code>-l</code> fixe la limite et <code>-R</code> supprime les dialogues les plus anciens quand elle est atteinte, au lieu d&rsquo;arrêter la capture.</p>
<h2>Configuration</h2>
<p>Les réglages par défaut se placent dans <code>/etc/sngreprc</code> (pour tout le système) ou <code>~/.sngreprc</code> (pour un utilisateur). Le fichier livré par Debian contient tous les réglages possibles, en commentaire. Exemple :</p>
<pre>vi ~/.sngreprc</pre>
<pre># Interface et filtre par défaut
set capture.device eth0
set filter.methods INVITE
# Dossier proposé à l'enregistrement (F2)
set sngrep.savepath /tmp/sngrep-captures
# Ne pas demander de confirmation en quittant
set cl.noexitprompt on</pre>
<p>Pour afficher la configuration active : <code>sngrep -D</code>.</p>
<h2>Pour aller plus loin</h2>
<ul>
<li><strong>SIP sur TLS</strong> : l&rsquo;option <code>-k</code> accepte la clé privée RSA du serveur pour déchiffrer les paquets capturés.</li>
<li><strong>HEP/EEP</strong> : sngrep peut recevoir des paquets encapsulés envoyés par un IPBX ou un SBC (<code>-L udp:0.0.0.0:9060</code>) ou en envoyer vers un serveur Homer (<code>-H udp:192.168.1.50:9060</code>). Pratique pour observer un équipement sur lequel on ne peut pas installer sngrep.</li>
</ul>
<h2>En résumé</h2>
<pre>sudo sngrep -c                               # voir les appels en direct
sudo sngrep -c 0600000000                    # suivre un numéro
sudo sngrep -N -c -O /tmp/appels.pcap        # capturer sans interface
sngrep -I /tmp/appels.pcap                   # relire une capture</pre>
<h2>Sources</h2>
<ul>
<li><a href="https://github.com/irontec/sngrep">sngrep sur GitHub (Irontec)</a></li>
<li><a href="https://manpages.debian.org/trixie/sngrep/sngrep.8.en.html">sngrep(8), Debian Trixie</a></li>
<li><a href="https://packages.debian.org/trixie/sngrep">Paquet sngrep, Debian Trixie</a></li>
<li><a href="https://www.rfc-editor.org/rfc/rfc3261">RFC 3261 : SIP</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.garbell.net/2026/10/01/analyser-appels-sip-sngrep/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1631</post-id>	</item>
		<item>
		<title>Pinger plusieurs adresses IP en même temps : gping, noping et fping</title>
		<link>https://www.garbell.net/2026/10/01/pinger-plusieurs-adresses-ip-gping-noping-fping/</link>
					<comments>https://www.garbell.net/2026/10/01/pinger-plusieurs-adresses-ip-gping-noping-fping/#respond</comments>
		
		<dc:creator><![CDATA[AMGV]]></dc:creator>
		<pubDate>Thu, 01 Oct 2026 19:06:57 +0000</pubDate>
				<category><![CDATA[Command-Line]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[command-line]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[fping]]></category>
		<category><![CDATA[gping]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[noping]]></category>
		<category><![CDATA[ping]]></category>
		<guid isPermaLink="false">https://www.garbell.net/2026/10/01/pinger-plusieurs-adresses-ip-gping-noping-fping/</guid>

					<description><![CDATA[La commande ping ne surveille qu&#8217;une seule adresse à la fois. Pour suivre en parallèle la passerelle, un serveur et un DNS public, ou pour repérer quelles machines répondent sur un sous-réseau, trois outils des dépôts Debian font le travail directement dans le terminal : gping, noping et fping. Les commandes ci-dessous ont été vérifiées [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>La commande <code>ping</code> ne surveille qu&rsquo;une seule adresse à la fois. Pour suivre en parallèle la passerelle, un serveur et un DNS public, ou pour repérer quelles machines répondent sur un sous-réseau, trois outils des dépôts Debian font le travail directement dans le terminal : <strong>gping</strong>, <strong>noping</strong> et <strong>fping</strong>.</p>
<p>Les commandes ci-dessous ont été vérifiées sur Debian 13 (Trixie) avec gping 1.19.0, oping 1.10.0 et fping 5.1.</p>
<h2>Lequel choisir ?</h2>
<ul>
<li><strong>gping</strong> : un graphique de latence en temps réel, une courbe colorée par hôte. Idéal pour comparer 2 à 6 cibles.</li>
<li><strong>noping</strong> : un tableau de bord ncurses, un cadre de statistiques par hôte. Reste lisible avec une dizaine de cibles ou plus.</li>
<li><strong>fping</strong> : pas d&rsquo;interface, une sortie texte. Parfait pour balayer une plage d&rsquo;adresses ou pour un script.</li>
</ul>
<h2>gping : le graphique de latence</h2>
<p>gping trace le temps de réponse de chaque hôte sous forme de courbe dans le terminal. Il s&rsquo;appuie sur la commande <code>ping</code> du système, il ne demande donc aucun droit particulier.</p>
<pre>apt install gping</pre>
<pre>gping 192.168.1.254 192.168.1.10 1.1.1.1</pre>
<p>Chaque hôte reçoit sa propre couleur. On quitte avec <code>Ctrl+C</code>.</p>
<p>Options utiles :</p>
<pre>-n 1          intervalle entre deux pings, en secondes (0.2 par défaut)
-b 120        durée affichée dans le graphique, en secondes (30 par défaut)
-4 / -6       forcer IPv4 ou IPv6
-i eth0       choisir l'interface de sortie
-s            graphisme simple, pour les terminaux sans caractères braille Unicode
-c red,blue   imposer les couleurs, dans l'ordre des hôtes
--clear       effacer le graphique en quittant</pre>
<p>Exemple : surveiller une coupure pendant deux minutes, un ping par seconde :</p>
<pre>gping -n 1 -b 120 192.168.1.254 1.1.1.1</pre>
<p>gping sait aussi mesurer la durée d&rsquo;exécution d&rsquo;une commande plutôt qu&rsquo;un ping, avec <code>--cmd</code> :</p>
<pre>gping --cmd "curl -so /dev/null https://www.debian.org"</pre>
<p>Au-delà de cinq ou six courbes, le graphique devient difficile à lire : passez alors à noping.</p>
<h2>noping : le tableau de bord ncurses</h2>
<p>noping est fourni par le paquet <code>oping</code>, avec <code>oping</code>, son équivalent en sortie texte. Il envoie les requêtes ICMP en parallèle, en IPv4 et IPv6, et affiche un cadre par hôte : paquets envoyés et reçus, pourcentage de perte, latence, et un graphique.</p>
<pre>apt install oping</pre>
<pre>noping 192.168.1.254 192.168.1.10 192.168.1.20 1.1.1.1</pre>
<p>Pas besoin de <code>sudo</code> : à l&rsquo;installation, le paquet Debian donne la capacité <code>cap_net_raw</code> aux binaires (ou le bit setuid si <code>setcap</code> n&rsquo;est pas disponible). Vérification :</p>
<pre>getcap /usr/bin/noping
# /usr/bin/noping cap_net_raw=ep</pre>
<p>Les temps de réponse sont colorés : vert pour les valeurs habituelles, jaune pour les valeurs inhabituelles, rouge pour les valeurs aberrantes. Un paquet perdu s&rsquo;affiche sous forme de point d&rsquo;exclamation rouge.</p>
<p>Touches pendant l&rsquo;exécution :</p>
<pre>g     changer le type de graphique
+ -   agrandir ou réduire les cadres
a     ajouter un hôte à la volée</pre>
<p>On quitte avec <code>Ctrl+C</code>.</p>
<p>Pour une liste d&rsquo;équipements à surveiller régulièrement, mettez-les dans un fichier, une adresse par ligne :</p>
<pre>vi ~/hotes.txt</pre>
<pre>192.168.1.254
192.168.1.10
192.168.1.20
192.168.1.30</pre>
<pre>noping -f ~/hotes.txt</pre>
<p>Options utiles :</p>
<pre>-i 0.5        intervalle entre deux pings, en secondes
-g histogram  type de graphique : prettyping (défaut), histogram, boxplot ou none
-H 3          hauteur des cadres, de 1 à 5 lignes (réduire pour voir plus d'hôtes)
-O ping.csv   enregistrer chaque mesure dans un fichier CSV (horodatage, hôte, latence)
-b            bip à chaque réponse, pratique pour suivre le redémarrage d'une machine</pre>
<p>Exemple : cadres compacts pour faire tenir plus d&rsquo;hôtes à l&rsquo;écran, avec enregistrement des mesures :</p>
<pre>noping -H 2 -O ~/ping-$(date +%F).csv -f ~/hotes.txt</pre>
<h2>fping : balayer une plage et scripter</h2>
<p>fping n&rsquo;a pas d&rsquo;interface graphique, mais il est imbattable pour savoir rapidement qui répond sur un réseau.</p>
<pre>apt install fping</pre>
<p>Lister les machines actives d&rsquo;un sous-réseau, avec leur temps de réponse :</p>
<pre>fping -a -e -g 192.168.1.0/24 2>/dev/null</pre>
<pre>192.168.1.10 (0.164 ms)
192.168.1.20 (0.059 ms)
192.168.1.254 (0.201 ms)</pre>
<p>La plage peut aussi s&rsquo;écrire avec une adresse de début et de fin : <code>fping -a -g 192.168.1.1 192.168.1.50</code>. L&rsquo;option <code>-u</code> fait l&rsquo;inverse et liste les cibles qui ne répondent pas.</p>
<p>Envoyer 3 pings à chaque hôte et n&rsquo;afficher que le bilan :</p>
<pre>fping -c 3 -q 192.168.1.254 192.168.1.10 192.168.1.20</pre>
<pre>192.168.1.254 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 0.201/0.253/0.303
192.168.1.10  : xmt/rcv/%loss = 3/3/0%, min/avg/max = 0.118/0.139/0.153
192.168.1.20  : xmt/rcv/%loss = 3/3/0%, min/avg/max = 0.043/0.048/0.053</pre>
<p>Surveiller en continu avec un bilan toutes les 10 secondes :</p>
<pre>fping -l -Q 10 -f ~/hotes.txt</pre>
<p>Le même fichier d&rsquo;hôtes que pour noping fonctionne avec <code>-f</code>.</p>
<h2>En résumé</h2>
<pre>gping 192.168.1.254 1.1.1.1                # comparer quelques hôtes sur un graphique
noping -f ~/hotes.txt                       # tableau de bord pour une liste d'équipements
fping -a -e -g 192.168.1.0/24 2>/dev/null   # qui répond sur le réseau ?</pre>
<h2>Sources</h2>
<ul>
<li><a href="https://github.com/orf/gping">gping sur GitHub</a></li>
<li><a href="https://manpages.debian.org/trixie/oping/noping.8.en.html">noping(8), Debian Trixie</a></li>
<li><a href="https://github.com/octo/liboping">liboping (oping et noping) sur GitHub</a></li>
<li><a href="https://fping.org/">fping.org</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.garbell.net/2026/10/01/pinger-plusieurs-adresses-ip-gping-noping-fping/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1630</post-id>	</item>
		<item>
		<title>Monter un partage réseau CIFS avec systemd</title>
		<link>https://www.garbell.net/2025/02/20/monter-un-volume-reseau-cifs-avec-systemctl/</link>
					<comments>https://www.garbell.net/2025/02/20/monter-un-volume-reseau-cifs-avec-systemctl/#respond</comments>
		
		<dc:creator><![CDATA[AMGV]]></dc:creator>
		<pubDate>Thu, 20 Feb 2025 16:35:24 +0000</pubDate>
				<category><![CDATA[Command-Line]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[cifs]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[command-line]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[systemctl]]></category>
		<category><![CDATA[systemd]]></category>
		<guid isPermaLink="false">https://www.garbell.net/?p=1474</guid>

					<description><![CDATA[Monter un partage réseau avec une unité systemd plutôt qu&#8217;avec une simple ligne mount permet de gérer proprement le remontage du volume après un redémarrage du serveur ou une perte de connectivité. Point de départ, la commande manuelle que l&#8217;on connaît déjà : apt install cifs-utils mount -t cifs //192.168.1.1/shared /mnt/ssd -o credentials=/etc/smbcredentials,uid=1000,gid=1000 On va [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Monter un partage réseau avec une unité systemd plutôt qu&rsquo;avec une simple ligne <code>mount</code> permet de gérer proprement le remontage du volume après un redémarrage du serveur ou une perte de connectivité.</p>
<p>Point de départ, la commande manuelle que l&rsquo;on connaît déjà :</p>
<pre>apt install cifs-utils
mount -t cifs //192.168.1.1/shared /mnt/ssd -o credentials=/etc/smbcredentials,uid=1000,gid=1000</pre>
<p>On va transposer ces informations dans des fichiers d&rsquo;unité systemd.</p>
<h2>Fichier d&rsquo;identifiants</h2>
<p>Ne mettez pas le mot de passe dans l&rsquo;unité : les fichiers de <code>/etc/systemd/system</code> sont lisibles par tous. Créez un fichier dédié, lisible par root uniquement :</p>
<pre>vi /etc/smbcredentials</pre>
<pre>username=myuser
password=MotDePasse</pre>
<pre>chmod 600 /etc/smbcredentials</pre>
<h2>Nommer les unités</h2>
<p>Le nom du fichier doit correspondre au chemin du point de montage. Pour <code>/mnt/ssd</code>, les unités s&rsquo;appellent <code>mnt-ssd.mount</code> et <code>mnt-ssd.automount</code> ; pour <code>/media/star</code>, ce serait <code>media-star.mount</code>. Si le chemin contient des caractères spéciaux (un tiret par exemple), laissez systemd calculer le nom :</p>
<pre>systemd-escape -p --suffix=mount /data/home-backup
# data-home\x2dbackup.mount</pre>
<h2>Création du fichier mnt-ssd.mount</h2>
<pre>vi /etc/systemd/system/mnt-ssd.mount</pre>
<pre>[Unit]
Description=Partage CIFS distant (SSD)
Wants=network-online.target
After=network-online.target

[Mount]
What=//192.168.1.1/shared
Where=/mnt/ssd
Type=cifs
Options=credentials=/etc/smbcredentials,uid=1000,gid=1000,iocharset=utf8
TimeoutSec=30

[Install]
WantedBy=multi-user.target</pre>
<p>Pour un système de fichiers réseau comme CIFS, systemd ajoute de lui-même ces dépendances vers <code>network-online.target</code> ; les écrire explicitement ne fait que rendre l&rsquo;intention lisible.</p>
<h2>Option : montage à la demande (mnt-ssd.automount)</h2>
<p>Avec une unité automount, le partage n&rsquo;est monté qu&rsquo;au premier accès à <code>/mnt/ssd</code>, et peut être démonté après une période d&rsquo;inactivité. Le démarrage n&rsquo;attend plus le serveur distant.</p>
<pre>vi /etc/systemd/system/mnt-ssd.automount</pre>
<pre>[Unit]
Description=Montage automatique du partage CIFS (SSD)

[Automount]
Where=/mnt/ssd
TimeoutIdleSec=600

[Install]
WantedBy=multi-user.target</pre>
<p>Ne mettez pas <code>After=network-online.target</code> dans l&rsquo;unité automount : la documentation systemd précise que cela peut créer un cycle de dépendances. Les dépendances réseau restent dans le .mount.</p>
<h2>Activation</h2>
<p>Choisissez <strong>un</strong> des deux modes.</p>
<pre># Montage au démarrage
systemctl daemon-reload
systemctl enable --now mnt-ssd.mount

# OU montage à la demande (le .mount n'est alors pas activé)
systemctl daemon-reload
systemctl enable --now mnt-ssd.automount
ls /mnt/ssd    # déclenche le montage</pre>
<h2>Gestion</h2>
<pre>systemctl status mnt-ssd.mount
systemctl stop mnt-ssd.mount
systemctl restart mnt-ssd.mount
journalctl -u mnt-ssd.mount</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.garbell.net/2025/02/20/monter-un-volume-reseau-cifs-avec-systemctl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1474</post-id>	</item>
		<item>
		<title>Configurer stunnel</title>
		<link>https://www.garbell.net/2021/07/27/configurer-stunnel/</link>
					<comments>https://www.garbell.net/2021/07/27/configurer-stunnel/#respond</comments>
		
		<dc:creator><![CDATA[AMGV]]></dc:creator>
		<pubDate>Tue, 27 Jul 2021 09:05:58 +0000</pubDate>
				<category><![CDATA[Comment faire ?]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[command-line]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[stunnel]]></category>
		<category><![CDATA[systemctl]]></category>
		<category><![CDATA[Telnet]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Ubuntu 20.04]]></category>
		<category><![CDATA[VPN]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://www.garbell.net/?p=1252</guid>

					<description><![CDATA[stunnel chiffre en TLS une connexion TCP qui ne l&#8217;est pas. Il peut aussi aider à franchir un pare-feu : on peut par exemple faire passer dans stunnel un VPN, tant que celui-ci utilise TCP. L&#8217;exemple ci-dessous protège un service Telnet (port 23), avec authentification mutuelle : le serveur n&#8217;accepte que le client dont il [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="https://www.stunnel.org/"><img decoding="async" src="https://i0.wp.com/www.stunnel.org/img/logo.png?w=750&amp;ssl=1" alt="stunnel" /></a></p>
<p>stunnel chiffre en TLS une connexion TCP qui ne l&rsquo;est pas. Il peut aussi aider à franchir un pare-feu : on peut par exemple faire passer dans stunnel un VPN, tant que celui-ci utilise TCP. L&rsquo;exemple ci-dessous protège un service Telnet (port 23), avec authentification mutuelle : le serveur n&rsquo;accepte que le client dont il connaît le certificat, et inversement.</p>
<h2>Génération des certificats</h2>
<p>Sur une machine disposant d&rsquo;OpenSSL, créez un certificat autosigné pour le serveur et un pour le client :</p>
<pre>openssl req -x509 -newkey rsa:3072 -sha256 -days 825 -nodes \
  -subj "/CN=stunnel-serveur" -keyout serveur.key -out serveur.crt
openssl req -x509 -newkey rsa:3072 -sha256 -days 825 -nodes \
  -subj "/CN=stunnel-client" -keyout client.key -out client.crt</pre>
<p>Copiez sur le serveur : <code>serveur.key</code>, <code>serveur.crt</code> et <code>client.crt</code>. Sur le client : <code>client.key</code>, <code>client.crt</code> et <code>serveur.crt</code>. Les clés privées doivent rester lisibles par root uniquement (<code>chmod 600</code>).</p>
<h2>Serveur (Debian/Ubuntu)</h2>
<pre>apt install stunnel4
vi /etc/stunnel/services.conf</pre>
<pre>cert = /etc/stunnel/serveur.crt
key = /etc/stunnel/serveur.key
; seul le certificat du client est accepté
CAfile = /etc/stunnel/client.crt
verifyPeer = yes
sslVersionMin = TLSv1.2

[telnet]
; port exposé sur Internet
accept = 4443
; service local à protéger
connect = 127.0.0.1:23</pre>
<p>Le paquet Debian fournit un modèle d&rsquo;unité : l&rsquo;instance <code>services</code> lit <code>/etc/stunnel/services.conf</code>.</p>
<pre>systemctl enable --now stunnel@services
journalctl -u stunnel@services</pre>
<p>Autorisez le port 4443/TCP sur le pare-feu (et redirigez-le sur le routeur si le serveur est derrière du NAT).</p>
<h2>Client Debian/Ubuntu</h2>
<pre>apt install stunnel4
vi /etc/stunnel/services.conf</pre>
<pre>client = yes
cert = /etc/stunnel/client.crt
key = /etc/stunnel/client.key
; seul le certificat du serveur est accepté
CAfile = /etc/stunnel/serveur.crt
verifyPeer = yes
sslVersionMin = TLSv1.2

[telnet]
; le client Telnet local se connecte ici
accept = 127.0.0.1:2323
connect = IP_PUBLIQUE_DU_SERVEUR:4443</pre>
<pre>systemctl enable --now stunnel@services</pre>
<h2>Client Windows</h2>
<p><a href="https://www.stunnel.org/downloads.html">Téléchargez stunnel</a>, lancez l&rsquo;installeur, puis placez <code>client.crt</code>, <code>client.key</code> et <code>serveur.crt</code> dans le dossier <code>config</code> du répertoire d&rsquo;installation. Ajoutez au fichier <code>stunnel.conf</code> de ce dossier la même configuration que ci-dessus, avec des chemins relatifs :</p>
<pre>client = yes
cert = client.crt
key = client.key
CAfile = serveur.crt
verifyPeer = yes
sslVersionMin = TLSv1.2

[telnet]
accept = 127.0.0.1:2323
connect = IP_PUBLIQUE_DU_SERVEUR:4443</pre>
<h2>Test</h2>
<p>Depuis le client, ouvrez une session Telnet vers <code>127.0.0.1</code>, port <code>2323</code>. Le trafic entre les deux machines passe chiffré dans le tunnel. En cas d&rsquo;échec, les journaux (<code>journalctl</code> sous Linux, fenêtre de log sous Windows) indiquent si le certificat du pair a été refusé.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.garbell.net/2021/07/27/configurer-stunnel/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1252</post-id>	</item>
		<item>
		<title>Linux System Tools</title>
		<link>https://www.garbell.net/2021/07/18/linux-system-tools/</link>
					<comments>https://www.garbell.net/2021/07/18/linux-system-tools/#respond</comments>
		
		<dc:creator><![CDATA[AMGV]]></dc:creator>
		<pubDate>Sun, 18 Jul 2021 16:55:30 +0000</pubDate>
				<category><![CDATA[Command-Line]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[command-line]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[last]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[sort]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[systemctl]]></category>
		<guid isPermaLink="false">https://www.garbell.net/?p=1043</guid>

					<description><![CDATA[Quelques commandes que j&#8217;utilise tous les jours pour comprendre ce qui se passe sur un serveur Linux : qui ouvre quoi (lsof), qui a lancé quoi (pstree), qui s&#8217;est connecté (last), comment trier et filtrer une sortie (sort, grep) et comment piloter les services (systemctl, journalctl). Les commandes et options ont été vérifiées sous Debian [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Quelques commandes que j&rsquo;utilise tous les jours pour comprendre ce qui se passe sur un serveur Linux : qui ouvre quoi (<code>lsof</code>), qui a lancé quoi (<code>pstree</code>), qui s&rsquo;est connecté (<code>last</code>), comment trier et filtrer une sortie (<code>sort</code>, <code>grep</code>) et comment piloter les services (<code>systemctl</code>, <code>journalctl</code>). Les commandes et options ont été vérifiées sous Debian 13.</p>
<h2>lsof : lister les fichiers ouverts</h2>
<p><code>lsof</code> signifie « LiSt Open Files ». Il indique quels fichiers sont ouverts, et par quels processus. Sous Linux, presque tout est un fichier : fichiers ordinaires, répertoires, périphériques, tubes (pipes), sockets réseau et sockets Unix. <code>lsof</code> permet donc de répondre à des questions très variées.</p>
<p>Lancez-le en root pour voir les fichiers de tous les utilisateurs. Les options <code>-n</code> (pas de résolution DNS) et <code>-P</code> (numéros de port au lieu des noms) accélèrent nettement l&rsquo;affichage.</p>
<pre>apt install lsof</pre>
<h3>Par fichier, répertoire ou périphérique</h3>
<pre>lsof | less</pre>
<p>Liste tous les fichiers ouverts. La liste est longue, d&rsquo;où le <code>less</code>.</p>
<pre>lsof /var/log/apache2/access.log</pre>
<p>Processus qui utilisent ce fichier.</p>
<pre>lsof +D /var/log</pre>
<p>Fichiers ouverts dans ce répertoire et ses sous-répertoires. Pratique quand un <code>umount</code> répond « target is busy ».</p>
<pre>lsof /dev/sda1</pre>
<p>Fichiers ouverts sur ce périphérique (ou sur le système de fichiers qu&rsquo;il porte).</p>
<pre>lsof /dev/tty1</pre>
<p>Processus attachés au terminal <code>tty1</code>.</p>
<h3>Par utilisateur ou par commande</h3>
<pre>lsof -u root</pre>
<p>Fichiers ouverts par les processus de l&rsquo;utilisateur root.</p>
<pre>lsof -u ^root</pre>
<p>Fichiers ouverts par tous les processus qui n&rsquo;appartiennent <strong>pas</strong> à root.</p>
<pre>lsof -c nginx</pre>
<p>Fichiers ouverts par les processus dont le nom commence par <code>nginx</code>.</p>
<pre>lsof -t -u ansible</pre>
<p>L&rsquo;option <code>-t</code> n&rsquo;affiche que les PID, ce qui permet de les passer à une autre commande. Par exemple, pour arrêter tous les processus de l&rsquo;utilisateur ansible :</p>
<pre>kill $(lsof -t -u ansible)</pre>
<p>Commencez par un <code>kill</code> simple (signal TERM), qui laisse aux programmes le temps de se fermer proprement. Ne passez à <code>kill -9</code> que pour les processus qui refusent de s&rsquo;arrêter.</p>
<h3>Combiner les critères : OU ou ET</h3>
<p>Par défaut, les critères de sélection se combinent en <strong>OU</strong> : la commande suivante liste les fichiers de root <em>et</em> ceux de toutes les commandes bash, quel que soit leur propriétaire.</p>
<pre>lsof -u root -c bash</pre>
<p>L&rsquo;option <code>-a</code> les combine en <strong>ET</strong> : ici, uniquement les processus bash appartenant à root.</p>
<pre>lsof -a -u root -c bash</pre>
<h3>Fichiers supprimés mais encore ouverts</h3>
<p>Si l&rsquo;on supprime un fichier qu&rsquo;un processus garde ouvert (un gros fichier de log, typiquement), l&rsquo;espace disque n&rsquo;est pas libéré tant que le processus ne l&rsquo;a pas fermé. <code>df</code> indique alors un disque plein alors que <code>du</code> ne trouve rien. Pour retrouver ces fichiers et le processus qui les tient :</p>
<pre>lsof +L1</pre>
<p><code>+L1</code> sélectionne les fichiers ouverts dont le nombre de liens est inférieur à 1, c&rsquo;est-à-dire supprimés. Redémarrer le service concerné (ou lui faire rouvrir ses logs) libère l&rsquo;espace.</p>
<h3>Réseau</h3>
<pre>lsof -i -n -P</pre>
<p>Tous les fichiers réseau (sockets TCP et UDP).</p>
<pre>lsof -i 4
lsof -i 6</pre>
<p>Uniquement IPv4, ou uniquement IPv6.</p>
<pre>lsof -i TCP:80 -n -P</pre>
<p>Processus qui utilisent le port TCP 80, en écoute ou connectés.</p>
<pre>lsof -i TCP:1-1024 -n -P</pre>
<p>Processus sur les ports TCP 1 à 1024 (les ports « privilégiés »).</p>
<pre>lsof -i TCP -s TCP:LISTEN -n -P</pre>
<p>Uniquement les sockets TCP en écoute.</p>
<pre>lsof -i@10.0.10.19 -n -P</pre>
<p>Connexions avec l&rsquo;adresse IP 10.0.10.19.</p>
<pre>lsof -U</pre>
<p>Sockets Unix (communication locale entre processus).</p>
<p>Pour une vue réseau rapide, <code>ss -tulpn</code> (paquet iproute2) donne aussi les ports en écoute et les processus associés.</p>
<h2>pstree : l&rsquo;arbre des processus</h2>
<p><code>pstree</code> affiche les processus sous forme d&rsquo;arbre, ce qui montre immédiatement qui a lancé quoi. Il fait partie du paquet <code>psmisc</code>, qui n&rsquo;est pas toujours installé par défaut :</p>
<pre>apt install psmisc</pre>
<pre>pstree -p</pre>
<p>Arbre complet avec les PID.</p>
<pre>pstree -a</pre>
<p>Affiche aussi les arguments de chaque commande.</p>
<pre>pstree -u</pre>
<p>Signale les changements d&rsquo;utilisateur (un processus root qui lance un processus www-data, par exemple).</p>
<pre>pstree -p -s 1234</pre>
<p>Remonte la lignée du processus 1234 jusqu&rsquo;à <code>systemd</code> : utile pour savoir d&rsquo;où vient un processus inconnu.</p>
<pre>pstree www-data</pre>
<p>Uniquement les processus d&rsquo;un utilisateur.</p>
<h2>last : l&rsquo;historique des connexions</h2>
<p><code>last</code> liste les dernières ouvertures de session et les redémarrages.</p>
<pre>last
last -n 10
last amgv
last reboot</pre>
<p>Respectivement : tout l&rsquo;historique, les 10 dernières entrées, les sessions d&rsquo;un utilisateur, et les redémarrages.</p>
<pre>last -F
last -x
last -s "2026-09-01 00:00:00" -t "2026-09-30 23:59:59"</pre>
<p>Dates complètes, arrêts du système inclus, et filtre sur une période.</p>
<p><strong>À savoir sous Debian 13</strong> : <code>last</code> est désormais fourni par le paquet <code>wtmpdb</code>, qui enregistre les sessions dans une base SQLite au lieu de l&rsquo;ancien fichier <code>/var/log/wtmp</code>. Les options courantes restent les mêmes, mais <code>lastb</code> (tentatives de connexion échouées) n&rsquo;existe plus. Pour ces échecs, consultez le journal :</p>
<pre>journalctl -u ssh --since today | grep -i "failed"</pre>
<h2>sort : trier une sortie</h2>
<pre>sort fichier.txt
sort -r fichier.txt
sort -u fichier.txt</pre>
<p>Tri alphabétique, tri inverse, tri en supprimant les doublons.</p>
<pre>sort -n nombres.txt</pre>
<p>Tri numérique (sinon 10 arrive avant 9).</p>
<pre>du -sh /var/* | sort -h</pre>
<p>Tri de tailles « humaines » (K, M, G) : trouve les plus gros répertoires.</p>
<pre>sort -t: -k3 -n /etc/passwd</pre>
<p>Tri sur un champ : <code>-t:</code> définit le séparateur, <code>-k3</code> le 3<sup>e</sup> champ (ici l&rsquo;UID).</p>
<pre>cut -d' ' -f1 /var/log/nginx/access.log | sort | uniq -c | sort -rn | head</pre>
<p>Combinaison classique : les 10 adresses IP les plus fréquentes dans un journal d&rsquo;accès. <code>uniq -c</code> compte les lignes identiques consécutives, d&rsquo;où le premier <code>sort</code>.</p>
<h2>grep : chercher dans des fichiers</h2>
<pre>grep "error" /var/log/apache2/error.log
grep -i "error" /var/log/apache2/error.log</pre>
<p>Recherche simple, puis insensible à la casse. <code>grep</code> fonctionne aussi en sortie d&rsquo;une autre commande, par exemple <code>journalctl -b | grep -i error</code> pour les journaux système.</p>
<pre>grep -n "Listen" /etc/apache2/ports.conf
grep -c "/bin/bash" /etc/passwd</pre>
<p>Affiche les numéros de ligne, ou seulement le nombre de lignes trouvées (ici, les comptes dont le shell est bash).</p>
<pre>grep -rn "PermitRootLogin" /etc/ssh/
grep -rl "192.168.31.5" /etc/</pre>
<p>Recherche récursive dans un répertoire, avec numéros de ligne, ou en listant seulement les fichiers concernés.</p>
<pre>grep -rn --include="*.conf" "ServerName" /etc/apache2/</pre>
<p>Recherche limitée à certains types de fichiers.</p>
<pre>grep -w "root" /etc/passwd</pre>
<p>Mot entier uniquement (<code>root</code>, mais pas <code>chroot</code>).</p>
<pre>journalctl -k | grep -A3 -B2 "Out of memory"</pre>
<p>Affiche 3 lignes après et 2 lignes avant chaque résultat (<code>-C3</code> pour 3 lignes de part et d&rsquo;autre).</p>
<pre>grep -Ev '^\s*(#|$)' /etc/ssh/sshd_config</pre>
<p>Affiche un fichier de configuration sans les commentaires ni les lignes vides. <code>-v</code> inverse la sélection, <code>-E</code> active les expressions régulières étendues.</p>
<pre>ps aux | grep "[n]ginx"</pre>
<p>Astuce : les crochets empêchent <code>grep</code> de se trouver lui-même dans la liste des processus.</p>
<h2>systemctl et journalctl : gérer les services</h2>
<h3>État et contrôle</h3>
<pre>systemctl status nginx
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl reload nginx</pre>
<p><code>reload</code> relit la configuration sans couper le service, quand celui-ci le permet ; <code>restart</code> l&rsquo;arrête puis le relance.</p>
<pre>systemctl enable --now nginx
systemctl disable --now nginx</pre>
<p>Active (ou désactive) le démarrage automatique et démarre (ou arrête) le service dans la même commande.</p>
<pre>systemctl is-active nginx
systemctl is-enabled nginx</pre>
<p>Réponses courtes (<code>active</code>, <code>enabled</code>…), utiles dans un script.</p>
<h3>Inventaire</h3>
<pre>systemctl --failed
systemctl list-units --type=service --state=running
systemctl list-unit-files --state=enabled
systemctl list-timers</pre>
<p>Services en échec, services en cours d&rsquo;exécution, services activés au démarrage, et tâches planifiées par des timers systemd.</p>
<h3>Configuration des unités</h3>
<pre>systemctl cat nginx</pre>
<p>Affiche le fichier d&rsquo;unité et ses éventuelles surcharges.</p>
<pre>SYSTEMD_EDITOR=vi systemctl edit nginx</pre>
<p>Crée une surcharge (<code>override.conf</code>) sans toucher au fichier fourni par le paquet, qui serait écrasé à la prochaine mise à jour. La variable <code>SYSTEMD_EDITOR</code> choisit l&rsquo;éditeur.</p>
<pre>systemctl daemon-reload</pre>
<p>À lancer après avoir modifié ou créé un fichier d&rsquo;unité à la main.</p>
<pre>systemctl mask nginx
systemctl unmask nginx</pre>
<p><code>mask</code> empêche totalement le démarrage du service, même manuel ou comme dépendance d&rsquo;un autre service.</p>
<h3>Journaux</h3>
<pre>journalctl -u nginx
journalctl -u nginx -f
journalctl -u nginx --since "1 hour ago"
journalctl -b -p err
journalctl --disk-usage</pre>
<p>Journaux d&rsquo;un service, en suivi continu (comme <code>tail -f</code>), sur la dernière heure, erreurs depuis le dernier démarrage, et place occupée par les journaux.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.garbell.net/2021/07/18/linux-system-tools/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1043</post-id>	</item>
		<item>
		<title>SSH : transfert de fichier bloqué à 2112 Ko (« stalled »), un problème de MTU</title>
		<link>https://www.garbell.net/2014/03/09/ssh-transfert-de-fichier-stoppe-a-2112k-stale/</link>
					<comments>https://www.garbell.net/2014/03/09/ssh-transfert-de-fichier-stoppe-a-2112k-stale/#respond</comments>
		
		<dc:creator><![CDATA[AMGV]]></dc:creator>
		<pubDate>Sun, 09 Mar 2014 11:49:58 +0000</pubDate>
				<category><![CDATA[Command-Line]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[2112k]]></category>
		<category><![CDATA[IPSEC]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MTU]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[ping]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[VPN]]></category>
		<guid isPermaLink="false">https://www.garbell.net/?p=114</guid>

					<description><![CDATA[Dans certains cas, la connexion SSH semble fonctionner correctement, mais un transfert de fichier de plus de 2 Mo (scp, sftp) se bloque vers 2112 Ko et scp affiche « stalled ». Ce problème peut avoir plusieurs causes ; celle dont je parle ici est liée au MTU sur un lien IPsec. Contexte Sur le [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Dans certains cas, la connexion SSH semble fonctionner correctement, mais un transfert de fichier de plus de 2 Mo (scp, sftp) se bloque vers 2112 Ko et scp affiche « stalled ».</p>
<p>Ce problème peut avoir plusieurs causes ; celle dont je parle ici est liée au MTU sur un lien IPsec.</p>
<h2>Contexte</h2>
<p>Sur le site A, un PC Linux est connecté à un pare-feu qui monte le tunnel IPsec, lui-même derrière une passerelle Internet. Le site B dispose des mêmes équipements. Depuis le PC du site A, on se connecte en SSH au PC du site B.</p>
<p>Les petits paquets (l&rsquo;ouverture de session, les commandes) passent. Les gros paquets d&rsquo;un transfert de fichier, eux, dépassent la taille maximale que le tunnel peut transporter une fois l&rsquo;en-tête IPsec ajouté. Si les messages ICMP « fragmentation nécessaire » sont filtrés quelque part sur le chemin, les deux machines ne l&rsquo;apprennent jamais et le transfert s&rsquo;arrête.</p>
<h2>Diagnostic</h2>
<p>Depuis le PC A, envoyez vers le PC B des pings de taille fixe en interdisant la fragmentation. 1472 octets de données + 28 octets d&rsquo;en-têtes IP et ICMP = 1500, le MTU Ethernet standard.</p>
<pre># Linux
ping -M do -s 1472 pc-site-b

# Windows
ping -f -l 1472 pc-site-b</pre>
<p>Si la réponse est une erreur (« Frag needed and DF set », « message too long ») ou si aucune réponse n&rsquo;arrive, diminuez la valeur de <code>-s</code> jusqu&rsquo;à ce que le ping passe. La plus grande valeur qui passe, plus 28, donne le MTU réel du chemin.</p>
<h2>Correction</h2>
<p>Deux approches, selon ce que vous maîtrisez :</p>
<ul>
<li><strong>Sur le poste</strong> : baisser le MTU de l&rsquo;interface à la valeur trouvée (ici 1400 en exemple) :
<pre>ip link set dev eth0 mtu 1400</pre>
</li>
<li><strong>Sur le pare-feu</strong> (préférable, corrige tous les postes) : réduire le MSS annoncé dans les ouvertures de connexion TCP qui traversent le tunnel. Avec iptables :
<pre>iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
  -j TCPMSS --clamp-mss-to-pmtu</pre>
<p>La plupart des pare-feu (OPNsense, pfSense, FortiGate…) proposent un réglage équivalent de MSS sur l&rsquo;interface ou le tunnel.</li>
</ul>
<p>Laissez aussi passer les messages ICMP de type 3 code 4 (« fragmentation needed ») : ils sont indispensables à la découverte automatique du MTU.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.garbell.net/2014/03/09/ssh-transfert-de-fichier-stoppe-a-2112k-stale/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">114</post-id>	</item>
		<item>
		<title>Apache 2.4 : restreindre l&#8217;accès à certaines adresses IP</title>
		<link>https://www.garbell.net/2005/11/26/apache2-restriction-dadresse/</link>
					<comments>https://www.garbell.net/2005/11/26/apache2-restriction-dadresse/#respond</comments>
		
		<dc:creator><![CDATA[AMGV]]></dc:creator>
		<pubDate>Sat, 26 Nov 2005 12:15:09 +0000</pubDate>
				<category><![CDATA[Comment faire ?]]></category>
		<category><![CDATA[Apache2]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[network]]></category>
		<guid isPermaLink="false">https://www.garbell.net/wordpress/?p=29</guid>

					<description><![CDATA[Pour restreindre l&#8217;accès d&#8217;un site à certaines adresses IP, ajoutez une directive Require ip dans le fichier de configuration du site (par exemple /etc/apache2/sites-available/monsite.conf) : &#60;Directory /var/www/monsite&#62; Require ip 127.0.0.1 192.168.2.253 &#60;/Directory&#62; Toutes les autres adresses reçoivent une erreur 403. On peut aussi autoriser un sous-réseau entier : Require ip 192.168.2.0/24 ou seulement la machine [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Pour restreindre l&rsquo;accès d&rsquo;un site à certaines adresses IP, ajoutez une directive <code>Require ip</code> dans le fichier de configuration du site (par exemple <code>/etc/apache2/sites-available/monsite.conf</code>) :</p>
<pre>&lt;Directory /var/www/monsite&gt;
    Require ip 127.0.0.1 192.168.2.253
&lt;/Directory&gt;</pre>
<p>Toutes les autres adresses reçoivent une erreur 403. On peut aussi autoriser un sous-réseau entier :</p>
<pre>Require ip 192.168.2.0/24</pre>
<p>ou seulement la machine locale :</p>
<pre>Require local</pre>
<p>Vérifiez la syntaxe puis rechargez Apache :</p>
<pre>apachectl configtest
systemctl reload apache2</pre>
<h2>Et l&rsquo;ancienne syntaxe ?</h2>
<p>La version initiale de cet article utilisait <code>Order deny,allow</code>, <code>Allow from</code> et <code>Deny from all</code>. C&rsquo;était la syntaxe d&rsquo;Apache 2.2. Depuis Apache 2.4, elle n&rsquo;est acceptée qu&rsquo;avec le module de compatibilité <code>mod_access_compat</code>, et la documentation Apache déconseille de mélanger les deux syntaxes, qui peuvent produire des résultats inattendus.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.garbell.net/2005/11/26/apache2-restriction-dadresse/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">29</post-id>	</item>
		<item>
		<title>IBM Java Virtual Machine, Linux, Power PC.</title>
		<link>https://www.garbell.net/2005/05/26/ibm-java-virtual-machine-linux-power-pc/</link>
					<comments>https://www.garbell.net/2005/05/26/ibm-java-virtual-machine-linux-power-pc/#respond</comments>
		
		<dc:creator><![CDATA[AMGV]]></dc:creator>
		<pubDate>Thu, 26 May 2005 12:03:37 +0000</pubDate>
				<category><![CDATA[Logiciels]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<guid isPermaLink="false">https://www.garbell.net/wordpress/?p=63</guid>

					<description><![CDATA[J&#8217;ai trouvé des PLF (Penguin Liberation Front) pour Ubuntu qui contiennent un paquet super intéressant : La Machine Virtuelle Java d&#8217;IBM pour Power PC (ibm-j2re1.5 1.5.0-0medibuntu1 et ibm-j2sdk1.5 1.5.0-0medibuntu1). Enfin du Java qui s&#8217;installe tout seul ! Dans ce PLF il y a bien évidemment d&#8217;autres paquets : Acrobat Reader 7.0.9, Google Earth 4.0.2735, skype, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>J&rsquo;ai trouvé des <strong>PLF </strong>(<strong>Penguin Liberation Front</strong>) pour <strong>Ubuntu </strong>qui contiennent un paquet super intéressant : La <strong>Machine Virtuelle Java d&rsquo;IBM</strong> pour <strong>Power PC</strong> (ibm-j2re1.5 1.5.0-0medibuntu1 et ibm-j2sdk1.5 1.5.0-0medibuntu1). Enfin du <strong>Java </strong>qui s&rsquo;installe tout seul !</p>
<p>Dans ce <strong>PLF </strong>il y a bien évidemment d&rsquo;autres paquets : Acrobat Reader 7.0.9, Google Earth 4.0.2735, skype, w32codecs</p>
<p>Tout ceci se trouve sur le site <a title="Medibuntu" href="http://medibuntu.sos-sts.com/fr/index.php">Medibuntu</a>. Sur ce site qui est très joli et « unbuntis », il y a la liste complète des paquets et un didacticiel pour ajouter le dépôt à votre « source list ». Les paquets sont disponibles pour <strong>Ubuntu breezy</strong>, <strong>dapper</strong>, <strong>edgy </strong>et <strong>feisty</strong>. En ce qui concerne les plateformes supportées, là aussi il n&rsquo;y a pas de problèmes : <strong>amd64</strong>, <strong>i386 </strong>et <strong>powerpc</strong>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.garbell.net/2005/05/26/ibm-java-virtual-machine-linux-power-pc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">63</post-id>	</item>
	</channel>
</rss>
