<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>selinux &amp;mdash; Cyberdyne Systems</title>
    <link>https://noblogo.org/aytin/tag:selinux</link>
    <description>&#34;Fare o non fare. Non c&#39;è provare!&#34;</description>
    <pubDate>Thu, 05 Nov 2026 16:15:21 +0000</pubDate>
    <item>
      <title>Usare dnscrypt-proxy come resolver</title>
      <link>https://noblogo.org/aytin/usare-dnscrypt-proxy-come-resolver</link>
      <description>&lt;![CDATA[tux-dnscrypt&#xA;dnscrypt-proxy è l&#39;applicazione ufficiale per la risoluzione dei nomi via dnscrypt (rif. https://dnscrypt.info/implementations).&#xA;&#xA;Si tratta di un proxy dns come AdGuard Home che inoltra su server upstream le nostre richieste di risoluzione.&#xA;&#xA;Può essere messo sul singolo host o può diventare il resolver dell&#39;intera rete, come abbiamo visto qui.&#xA;!--more--&#xA;Pronti? Via!&#xA;Obiettivo: Installare dnscrypt-proxy sul nostro pc.&#xA;&#xA;Scaricare il binario dnscrypt-proxy per il proprio sistema (nel mio caso gnu/linux),&#xA;oppure installare da repository&#xA;c&#39;è anche come container (https://github.com/DNSCrypt/dnscrypt-server-docker)&#xA;&#xA;La versione attuale è la 2.1.20 (rif. https://github.com/DNSCrypt/dnscrypt-proxy/releases/latest)&#xA;&#xA;scarica&#xA;wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/2.1.20/dnscrypt-proxy-linuxx8664-2.1.20.tar.gz&#xA;&#xA;scompatta&#xA;tar -xzf dnscrypt-proxy-linuxx8664-2.1.20.tar.gz -C /opt/&#xA;&#xA;rifinisce&#xA;mv /opt/linux-x8664 /opt/dnscrypt-proxy&#xA;chown -R root:root  /opt/dnscrypt-proxy&#xA;&#xA;abilita file di configurazione&#xA;cp /opt/dnscrypt-proxy/example-dnscrypt-proxy.toml  /opt/dnscrypt-proxy/dnscrypt-proxy.toml&#xA;&#xA; Creazione servizio&#xA;&#39;/opt/dnscrypt-proxy/dnscrypt-proxy -service install&#xA;&#xA;avvio servizio&#xA;systemctl start dnscrypt-proxy.service&#xA;&#xA;Finito. Ora siamo pronti per risolvere nomi con dnscrypt, basta dichiarare come dns primario della nostra connessione il listener dichiarato nel file dnscrypt-proxy.toml (default:127.0.0.1:53).&#xA;&#xA;Test:&#xA;dnscrypt-proxy -resolve www.google.com&#xA;Resolving [www.google.com] using 127.0.0.1 port 53&#xA;&#xA;Resolver      : 176.123.4.231 (public.deepdns.net.)&#xA;&#xA;Canonical name: www.google.com.&#xA;&#xA;IPv4 addresses: 142.251.154.119, 142.251.150.119, 142.251.155.119, 142.251.151.119, 142.251.153.119, 142.251.157.119, 142.251.156.119, 142.251.152.119&#xA;IPv6 addresses: 2001:4860:482d:7700::, 2001:4860:4829:7700::, 2001:4860:482b:7700::, 2001:4860:4826:7700::, 2001:4860:482a:7700::, 2001:4860:4828:7700::, 2001:4860:4827:7700::, 2001:4860:482c:7700::&#xA;&#xA;Name servers  : no name servers found&#xA;DNSSEC signed : no&#xA;Mail servers  : no mail servers found&#xA;&#xA;HTTPS alias   : -&#xA;HTTPS info    : [alpn]=[h2,h3]&#xA;&#xA;Host info     : -&#xA;TXT records   : -&#xA;Possibili problemi&#xA;1. SELinux impedisce l&#39;avvio del servizio&#xA;Su Fedora, se non si installa da package manager, ci potrebbero essere problemi con l&#39;avvio del servizio se SELinux è attivato.&#xA;&#xA;Potrebbe essere notificato un errore di questo tipo:&#xA;&#xA;Unable to locate executable &#39;/opt/dnscrypt-proxy/dnscrypt-proxy&#39;: Permission denied&#xA;Failed at step EXEC spawning /opt/dnscrypt-proxy/dnscrypt-proxy: Permission denied&#xA;status=203/EXEC&#xA;Se si riavvia il servizio e si analizza l&#39;audit esaminando l&#39;Access Vector Cache (AVC), abbiamo informazioni molto interessanti:&#xA;ausearch -m AVC,USERAVC -ts recent&#xA;----&#xA;...&#xA;avc:  denied  { execute }&#xA;comm=&#34;(pt-proxy)&#34; &#xA;name=&#34;dnscrypt-proxy&#34; &#xA;dev=&#34;dm-0&#34; ino=1186741 &#xA;scontext=systemu:systemr:initt:s0 tcontext=unconfinedu:objectr:usertmpt:s0 &#xA;tclass=file&#xA;In sostanza, SELinux nega l&#39;esecuzione con systemctl perché il contesto atteso non è quello posseduto dal file, come confermato anche da questo comando che mostra i contesti di tutti i file.&#xA;ls -Z /opt/dnscrypt-proxy/&#xA;unconfinedu:objectr:usertmpt:s0 dnscrypt-proxy             unconfinedu:objectr:usertmpt:s0 example-captive-portals.txt   unconfinedu:objectr:usertmpt:s0 public-resolvers.md&#xA;unconfinedu:objectr:usertmpt:s0 dnscrypt-proxy.toml&#xA;...&#xA;mentre questo comando mostra il contesto atteso:&#xA;matchpathcon /opt/dnscrypt-proxy/dnscrypt-proxy&#xA;/opt/dnscrypt-proxy/dnscrypt-proxy&#x9;systemu:objectr:bint:s0&#xA;Il binario è etichettato come file di tipo temporaneo (usertmpt) appartenente a un contesto utente (unconfinedu), mentre invece SELinux si aspetta che l&#39;eseguibile sia di tipo bint appartenente a systemu.&#xA;&#xA;Quello che bisogna fare, è cambiare l&#39;etichetta dell&#39;eseguibile in modo che possa essere eseguito come servizio.&#xA;&#xA;Configurazione SELinux&#xA;cambia l&#39;utente in systemt e il tipo in bint&#xA;semanage fcontext -a -s systemt -t bint &#39;/opt/dnscrypt-proxy/dnscrypt-proxy&#39;&#xA;forza il restore e rendo permanenti tutti i campi in accordo a matchpathcon&#xA;restorecon -Fv /opt/dnscrypt-proxy/dnscrypt-proxy&#xA;facoltativo: se l&#39;utente non dovesse essere cambiato, forzarne il cambio con chcon&#xA;chcon -u systemu /opt/dnscrypt-proxy/dnscrypt-proxy&#xA;&#xA;check. Devono dare tutti lo stesso risultato&#xA;semanage fcontext -C -l&#xA;matchpathcon /opt/dnscrypt-proxy/dnscrypt-proxy&#xA;ls -Z /opt/dnscrypt-proxy/&#xA;2. Il servizio non parte perché la porta 53 risulta occupata&#xA;dnscrypt-proxy non si avvia perché rileva un errore di porta occupata tipo questo:&#xA;[FATAL] listen udp4 127.0.0.1:53: bind: address already in use&#xA;date time host systemd[1]: dnscrypt-proxy.service: Main process exited, code=exited, status=255/EXCEPTION&#xA;date time host systemd[1]: dnscrypt-proxy.service: Failed with result &#39;exit-code&#39;.&#xA;Molto probabile che stia andando in conflitto con lo stub resolver di systemd.&#xA;&#xA;Se così fosse (basta dare un&#39;occhiata a /etc/resolv.conf), una soluzione rapida potrebbe consistere nel disabilitare systemd-resolved.&#xA;&#xA;Oppure fare in modo che i loro listener siano differenti.&#xA;&#xA;Agiamo su quello di dnscrypt-proxy per es.:&#xA;vi /opt/dnscrypt-proxy/dnscrypt-proxy.toml&#xA;...&#xA;listenaddresses = [&#39;127.0.53.53:53&#39;]&#xA;...&#xA;Ricordiamoci sempre di configurare la nostra connessione con questo listener e buon divertimento.&#xA;&#xA;Il traffico delle nostre risoluzioni è definitivamente NOSTRO.&#xA;&#xA;#dns #dnscrypt #dnscryptproxy #selinux]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://pixelfed.uno/storage/m/_v2/489827599091373610/4796c06ff-5eacf7/w1LBQdC1V3yO/KPW2BowHFBAQxTSSgm6Sc3Ebra0p1ITZq5AvFIcG.jpg" alt="tux-dnscrypt">
<strong>dnscrypt-proxy</strong> è l&#39;applicazione ufficiale per la risoluzione dei nomi via dnscrypt (rif. <a href="https://dnscrypt.info/implementations" rel="nofollow">https://dnscrypt.info/implementations</a>).</p>

<p>Si tratta di un proxy dns come <strong>AdGuard Home</strong> che inoltra su server upstream le nostre richieste di risoluzione.</p>

<p>Può essere messo sul singolo host o può diventare il resolver dell&#39;intera rete, come abbiamo visto <a href="/aytin/installazione-adguard-home" rel="nofollow">qui</a>.
</p>

<h2 id="pronti-via">Pronti? Via!</h2>

<p><strong>Obiettivo:</strong> Installare <strong>dnscrypt-proxy</strong> sul nostro pc.</p>
<ul><li>Scaricare il binario <code>dnscrypt-proxy</code> per il proprio sistema (nel mio caso gnu/linux),</li>
<li>oppure installare da repository</li>
<li>c&#39;è anche come container (<a href="https://github.com/DNSCrypt/dnscrypt-server-docker" rel="nofollow">https://github.com/DNSCrypt/dnscrypt-server-docker</a>)</li></ul>

<p>La versione attuale è la <strong>2.1.20</strong> (rif. <a href="https://github.com/DNSCrypt/dnscrypt-proxy/releases/latest" rel="nofollow">https://github.com/DNSCrypt/dnscrypt-proxy/releases/latest</a>)</p>

<pre><code class="language-bash"># scarica
wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/2.1.20/dnscrypt-proxy-linux_x86_64-2.1.20.tar.gz

# scompatta
tar -xzf dnscrypt-proxy-linux_x86_64-2.1.20.tar.gz -C /opt/

# rifinisce
mv /opt/linux-x86_64 /opt/dnscrypt-proxy
chown -R root:root  /opt/dnscrypt-proxy

# abilita file di configurazione
cp /opt/dnscrypt-proxy/example-dnscrypt-proxy.toml  /opt/dnscrypt-proxy/dnscrypt-proxy.toml

# Creazione servizio
&#39;/opt/dnscrypt-proxy/dnscrypt-proxy -service install

#  avvio servizio
systemctl start dnscrypt-proxy.service
</code></pre>

<p>Finito. Ora siamo pronti per risolvere nomi con dnscrypt, basta dichiarare come dns primario della nostra connessione il listener dichiarato nel file <code>dnscrypt-proxy.toml</code> (default:127.0.0.1:53).</p>

<h2 id="test">Test:</h2>

<pre><code class="language-bash">dnscrypt-proxy -resolve www.google.com
Resolving [www.google.com] using 127.0.0.1 port 53

Resolver      : 176.123.4.231 (public.deepdns.net.)

Canonical name: www.google.com.

IPv4 addresses: 142.251.154.119, 142.251.150.119, 142.251.155.119, 142.251.151.119, 142.251.153.119, 142.251.157.119, 142.251.156.119, 142.251.152.119
IPv6 addresses: 2001:4860:482d:7700::, 2001:4860:4829:7700::, 2001:4860:482b:7700::, 2001:4860:4826:7700::, 2001:4860:482a:7700::, 2001:4860:4828:7700::, 2001:4860:4827:7700::, 2001:4860:482c:7700::

Name servers  : no name servers found
DNSSEC signed : no
Mail servers  : no mail servers found

HTTPS alias   : -
HTTPS info    : [alpn]=[h2,h3]

Host info     : -
TXT records   : -
</code></pre>

<h2 id="possibili-problemi">Possibili problemi</h2>

<h3 id="1-selinux-impedisce-l-avvio-del-servizio">1. SELinux impedisce l&#39;avvio del servizio</h3>

<p>Su Fedora, se non si installa da package manager, ci potrebbero essere problemi con l&#39;avvio del servizio se SELinux è attivato.</p>

<p>Potrebbe essere notificato un errore di questo tipo:</p>

<pre><code class="language-bash">Unable to locate executable &#39;/opt/dnscrypt-proxy/dnscrypt-proxy&#39;: Permission denied
Failed at step EXEC spawning /opt/dnscrypt-proxy/dnscrypt-proxy: Permission denied
status=203/EXEC
</code></pre>

<p>Se si riavvia il servizio e si analizza l&#39;audit esaminando l&#39;<strong>A</strong>ccess <strong>V</strong>ector <strong>C</strong>ache (<strong>AVC</strong>), abbiamo informazioni molto interessanti:</p>

<pre><code class="language-bash">ausearch -m AVC,USER_AVC -ts recent
----
...
avc:  denied  { execute }
comm=&#34;(pt-proxy)&#34; 
name=&#34;dnscrypt-proxy&#34; 
dev=&#34;dm-0&#34; ino=1186741 
scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_tmp_t:s0 
tclass=file
</code></pre>

<p>In sostanza, SELinux nega l&#39;esecuzione con systemctl perché il contesto atteso non è quello posseduto dal file, come confermato anche da questo comando che mostra i contesti di tutti i file.</p>

<pre><code class="language-bash">ls -Z /opt/dnscrypt-proxy/
unconfined_u:object_r:user_tmp_t:s0 dnscrypt-proxy             unconfined_u:object_r:user_tmp_t:s0 example-captive-portals.txt   unconfined_u:object_r:user_tmp_t:s0 public-resolvers.md
unconfined_u:object_r:user_tmp_t:s0 dnscrypt-proxy.toml
...
</code></pre>

<p>mentre questo comando mostra il contesto <strong>atteso</strong>:</p>

<pre><code class="language-bash">matchpathcon /opt/dnscrypt-proxy/dnscrypt-proxy
/opt/dnscrypt-proxy/dnscrypt-proxy	system_u:object_r:bin_t:s0
</code></pre>

<p>Il binario è etichettato come file di tipo temporaneo (<code>user_tmp_t</code>) appartenente a un contesto utente (<code>unconfined_u</code>), mentre invece SELinux si aspetta che l&#39;eseguibile sia di tipo <code>bin_t</code> appartenente a <code>system_u</code>.</p>

<p>Quello che bisogna fare, è cambiare l&#39;etichetta dell&#39;eseguibile in modo che possa essere eseguito come servizio.</p>

<p><strong>Configurazione SELinux</strong></p>

<pre><code class="language-bash"># cambia l&#39;utente in system_t e il tipo in bin_t
semanage fcontext -a -s system_t -t bin_t &#39;/opt/dnscrypt-proxy/dnscrypt-proxy&#39;
# forza il restore e rendo permanenti tutti i campi in accordo a matchpathcon
restorecon -Fv /opt/dnscrypt-proxy/dnscrypt-proxy
# facoltativo: se l&#39;utente non dovesse essere cambiato, forzarne il cambio con chcon
chcon -u system_u /opt/dnscrypt-proxy/dnscrypt-proxy

# check. Devono dare tutti lo stesso risultato
semanage fcontext -C -l
matchpathcon /opt/dnscrypt-proxy/dnscrypt-proxy
ls -Z /opt/dnscrypt-proxy/
</code></pre>

<h3 id="2-il-servizio-non-parte-perché-la-porta-53-risulta-occupata">2. Il servizio non parte perché la porta 53 risulta occupata</h3>

<p><code>dnscrypt-proxy</code> non si avvia perché rileva un errore di porta occupata tipo questo:</p>

<pre><code>[FATAL] listen udp4 127.0.0.1:53: bind: address already in use
&lt;date time host&gt; systemd[1]: dnscrypt-proxy.service: Main process exited, code=exited, status=255/EXCEPTION
&lt;date time host&gt; systemd[1]: dnscrypt-proxy.service: Failed with result &#39;exit-code&#39;.
</code></pre>

<p>Molto probabile che stia andando in conflitto con lo stub resolver di systemd.</p>

<p>Se così fosse (basta dare un&#39;occhiata a <code>/etc/resolv.conf</code>), una soluzione rapida potrebbe consistere nel disabilitare <code>systemd-resolved</code>.</p>

<p>Oppure fare in modo che i loro listener siano differenti.</p>

<p>Agiamo su quello di dnscrypt-proxy per es.:</p>

<pre><code class="language-bash">vi /opt/dnscrypt-proxy/dnscrypt-proxy.toml
...
listen_addresses = [&#39;127.0.53.53:53&#39;]
...
</code></pre>

<p>Ricordiamoci sempre di configurare la nostra connessione con questo listener e buon divertimento.</p>

<p>Il traffico delle nostre risoluzioni è definitivamente <strong>NOSTRO</strong>.</p>

<p><a href="/aytin/tag:dns" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">dns</span></a> <a href="/aytin/tag:dnscrypt" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">dnscrypt</span></a> <a href="/aytin/tag:dnscryptproxy" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">dnscryptproxy</span></a> <a href="/aytin/tag:selinux" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">selinux</span></a></p>
]]></content:encoded>
      <guid>https://noblogo.org/aytin/usare-dnscrypt-proxy-come-resolver</guid>
      <pubDate>Wed, 04 Nov 2026 16:09:50 +0000</pubDate>
    </item>
  </channel>
</rss>