mirror of
https://github.com/almet/notmyidea.git
synced 2025-04-28 19:42:37 +02:00
165 lines
No EOL
13 KiB
HTML
165 lines
No EOL
13 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<title>
|
|
Setting up a <span class="caps">IRC</span> Bouncer with <span class="caps">ZNC</span> - Alexis Métaireau </title>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<link rel="stylesheet"
|
|
href="https://blog.notmyidea.org/theme/css/main.css?v2"
|
|
type="text/css" />
|
|
<link href="https://blog.notmyidea.org/feeds/all.atom.xml"
|
|
type="application/atom+xml"
|
|
rel="alternate"
|
|
title="Alexis Métaireau ATOM Feed" />
|
|
</head>
|
|
<body>
|
|
<div id="content">
|
|
<section id="links">
|
|
<ul>
|
|
<li>
|
|
<a class="main" href="/">Alexis Métaireau</a>
|
|
</li>
|
|
<li>
|
|
<a class=""
|
|
href="https://blog.notmyidea.org/journal/index.html">Journal</a>
|
|
</li>
|
|
<li>
|
|
<a class="selected"
|
|
href="https://blog.notmyidea.org/code/">Code, etc.</a>
|
|
</li>
|
|
<li>
|
|
<a class=""
|
|
href="https://blog.notmyidea.org/weeknotes/">Notes hebdo</a>
|
|
</li>
|
|
<li>
|
|
<a class=""
|
|
href="https://blog.notmyidea.org/lectures/">Lectures</a>
|
|
</li>
|
|
<li>
|
|
<a class=""
|
|
href="https://blog.notmyidea.org/projets.html">Projets</a>
|
|
</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<header>
|
|
<h1 class="post-title">Setting up a <span class="caps">IRC</span> Bouncer with <span class="caps">ZNC</span></h1>
|
|
<time datetime="2023-09-27T00:00:00+02:00">27 septembre 2023</time>
|
|
|
|
|
|
</header>
|
|
<article>
|
|
<p>It’s been a while since I’ve used <span class="caps">IRC</span>, but I needed to connect to it today to discuss around <a href="https://docs.peewee-orm.com">Peewee</a>.</p>
|
|
<p>The main issue with <span class="caps">IRC</span> is that you need to be connected to see the answer, and to get the context of the conversation. Unless… you set up a bouncer.</p>
|
|
<p>The bouncer is named <a href="https://znc.in"><span class="caps">ZNC</span></a>, and the <span class="caps">IRC</span> client I use is <a href="https://weechat.org">Weechat</a>.</p>
|
|
<p>So, that’s what I did:</p>
|
|
<h2 id="installation-of-znc">Installation of <span class="caps">ZNC</span></h2>
|
|
<div class="highlight"><pre><span></span><code>apt<span class="w"> </span>install<span class="w"> </span>znc
|
|
sudo<span class="w"> </span>-u<span class="w"> </span>_znc<span class="w"> </span>/usr/bin/znc<span class="w"> </span>--datadir<span class="o">=</span>/var/lib/znc<span class="w"> </span>--makeconf
|
|
sudo<span class="w"> </span>systemctl<span class="w"> </span><span class="nb">enable</span><span class="w"> </span>znc
|
|
</code></pre></div>
|
|
|
|
<p>You can answer the questions asked by <code>--makeconf</code>, it will generate you a configuration file like this (stored in <code>/var/lib/znc/configurations/znc.conf</code>):</p>
|
|
<div class="highlight"><pre><span></span><code>AnonIPLimit<span class="w"> </span>=<span class="w"> </span>10
|
|
AuthOnlyViaModule<span class="w"> </span>=<span class="w"> </span>false
|
|
ConfigWriteDelay<span class="w"> </span>=<span class="w"> </span>0
|
|
ConnectDelay<span class="w"> </span>=<span class="w"> </span>5
|
|
HideVersion<span class="w"> </span>=<span class="w"> </span>false
|
|
LoadModule<span class="w"> </span>=<span class="w"> </span>webadmin
|
|
MaxBufferSize<span class="w"> </span>=<span class="w"> </span>500
|
|
ProtectWebSessions<span class="w"> </span>=<span class="w"> </span>true
|
|
SSLCertFile<span class="w"> </span>=<span class="w"> </span>/var/lib/znc/znc.pem
|
|
SSLDHParamFile<span class="w"> </span>=<span class="w"> </span>/var/lib/znc/znc.pem
|
|
SSLKeyFile<span class="w"> </span>=<span class="w"> </span>/var/lib/znc/znc.pem
|
|
ServerThrottle<span class="w"> </span>=<span class="w"> </span>30
|
|
Version<span class="w"> </span>=<span class="w"> </span>1.8.2
|
|
|
|
<span class="nt"><Listener</span><span class="w"> </span><span class="err">listener0</span><span class="nt">></span>
|
|
<span class="w"> </span>AllowIRC<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>AllowWeb<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>IPv4<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>IPv6<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>Port<span class="w"> </span>=<span class="w"> </span>6697
|
|
<span class="w"> </span>SSL<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>URIPrefix<span class="w"> </span>=<span class="w"> </span>/
|
|
<span class="nt"></Listener></span>
|
|
|
|
<span class="nt"><User</span><span class="w"> </span><span class="err">alexis</span><span class="nt">></span>
|
|
<span class="w"> </span>Admin<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>Allow<span class="w"> </span>=<span class="w"> </span>*
|
|
<span class="w"> </span>AltNick<span class="w"> </span>=<span class="w"> </span>alexis_
|
|
<span class="w"> </span>AppendTimestamp<span class="w"> </span>=<span class="w"> </span>false
|
|
<span class="w"> </span>AuthOnlyViaModule<span class="w"> </span>=<span class="w"> </span>false
|
|
<span class="w"> </span>AutoClearChanBuffer<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>AutoClearQueryBuffer<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>BindHost<span class="w"> </span>=<span class="w"> </span>skate.notmyidea.org
|
|
<span class="w"> </span>ChanBufferSize<span class="w"> </span>=<span class="w"> </span>50
|
|
<span class="w"> </span>DenyLoadMod<span class="w"> </span>=<span class="w"> </span>false
|
|
<span class="w"> </span>DenySetBindHost<span class="w"> </span>=<span class="w"> </span>false
|
|
<span class="w"> </span>Ident<span class="w"> </span>=<span class="w"> </span>alexis
|
|
<span class="w"> </span>JoinTries<span class="w"> </span>=<span class="w"> </span>10
|
|
<span class="w"> </span>LoadModule<span class="w"> </span>=<span class="w"> </span>chansaver
|
|
<span class="w"> </span>LoadModule<span class="w"> </span>=<span class="w"> </span>controlpanel
|
|
<span class="w"> </span>MaxJoins<span class="w"> </span>=<span class="w"> </span>0
|
|
<span class="w"> </span>MaxNetworks<span class="w"> </span>=<span class="w"> </span>1
|
|
<span class="w"> </span>MaxQueryBuffers<span class="w"> </span>=<span class="w"> </span>50
|
|
<span class="w"> </span>MultiClients<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>Nick<span class="w"> </span>=<span class="w"> </span>alexis
|
|
<span class="w"> </span>NoTrafficTimeout<span class="w"> </span>=<span class="w"> </span>180
|
|
<span class="w"> </span>PrependTimestamp<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>QueryBufferSize<span class="w"> </span>=<span class="w"> </span>50
|
|
<span class="w"> </span>QuitMsg<span class="w"> </span>=<span class="w"> </span>See<span class="w"> </span>you<span class="w"> </span>:)
|
|
<span class="w"> </span>RealName<span class="w"> </span>=<span class="w"> </span>N/A
|
|
<span class="w"> </span>StatusPrefix<span class="w"> </span>=<span class="w"> </span>*
|
|
<span class="w"> </span>TimestampFormat<span class="w"> </span>=<span class="w"> </span>[%H:%M:%S]
|
|
|
|
<span class="w"> </span><span class="nt"><Network</span><span class="w"> </span><span class="err">liberachat</span><span class="nt">></span>
|
|
<span class="w"> </span>FloodBurst<span class="w"> </span>=<span class="w"> </span>9
|
|
<span class="w"> </span>FloodRate<span class="w"> </span>=<span class="w"> </span>2.00
|
|
<span class="w"> </span>IRCConnectEnabled<span class="w"> </span>=<span class="w"> </span>true
|
|
<span class="w"> </span>JoinDelay<span class="w"> </span>=<span class="w"> </span>0
|
|
<span class="w"> </span>LoadModule<span class="w"> </span>=<span class="w"> </span>simple_away
|
|
<span class="w"> </span>RealName<span class="w"> </span>=<span class="w"> </span>N/A
|
|
<span class="w"> </span>Server<span class="w"> </span>=<span class="w"> </span>irc.libera.chat<span class="w"> </span>+6697
|
|
<span class="w"> </span>TrustAllCerts<span class="w"> </span>=<span class="w"> </span>false
|
|
<span class="w"> </span>TrustPKI<span class="w"> </span>=<span class="w"> </span>true
|
|
|
|
<span class="w"> </span><span class="nt"><Chan</span><span class="w"> </span><span class="err">#peewee</span><span class="nt">></span>
|
|
<span class="w"> </span><span class="nt"></Chan></span>
|
|
<span class="w"> </span><span class="nt"></Network></span>
|
|
|
|
<span class="w"> </span><span class="nt"><Pass</span><span class="w"> </span><span class="err">password</span><span class="nt">></span>
|
|
<span class="w"> </span>Hash<span class="w"> </span>=<span class="w"> </span>REDACTED
|
|
<span class="w"> </span>Method<span class="w"> </span>=<span class="w"> </span>SHA256
|
|
<span class="w"> </span>Salt<span class="w"> </span>=<span class="w"> </span>REDACTED
|
|
<span class="w"> </span><span class="nt"></Pass></span>
|
|
<span class="nt"></User></span>
|
|
</code></pre></div>
|
|
|
|
<p>You can access a web interface on the exposed port. I had to make a change in my Firefox configuration, in <code>about:config</code>, set <code>network.security.ports.banned.override</code> to <code>6697</code>, otherwise, Firefox prevents you from connecting to these ports (which might actually be a good idea).</p>
|
|
<h2 id="weechat-configuration">Weechat configuration</h2>
|
|
<p>Now, to use this in weechat, here are some useful commands. First, get the fingerprint of the <span class="caps">SSL</span> certificate generated on your server:</p>
|
|
<div class="highlight"><pre><span></span><code>cat<span class="w"> </span>/var/log/znc/znc.pem<span class="w"> </span><span class="p">|</span><span class="w"> </span>openssl<span class="w"> </span>x509<span class="w"> </span>-sha512<span class="w"> </span>-fingerprint<span class="w"> </span>-noout<span class="w"> </span><span class="p">|</span><span class="w"> </span>tr<span class="w"> </span>-d<span class="w"> </span><span class="s1">':'</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>tr<span class="w"> </span><span class="s1">'A-Z'</span><span class="w"> </span><span class="s1">'a-z'</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>cut<span class="w"> </span>-d<span class="w"> </span><span class="o">=</span><span class="w"> </span>-f<span class="w"> </span><span class="m">2</span>
|
|
</code></pre></div>
|
|
|
|
<p>Then, in weechat :</p>
|
|
<div class="highlight"><pre><span></span><code><span class="o">/</span><span class="nv">server</span><span class="w"> </span><span class="nv">add</span><span class="w"> </span><span class="nv">znc</span><span class="w"> </span><span class="nv">host</span><span class="o">/</span><span class="mi">6697</span><span class="w"> </span><span class="o">-</span><span class="nv">tls</span><span class="w"> </span><span class="o">-</span><span class="nv">username</span><span class="o">=<</span><span class="nv">username</span><span class="o">></span><span class="w"> </span><span class="o">-</span><span class="nv">password</span><span class="o">=<</span><span class="nv">yourpass</span><span class="o">></span><span class="w"> </span><span class="o">-</span><span class="nv">autoconnect</span>
|
|
<span class="o">/</span><span class="nv">set</span><span class="w"> </span><span class="nv">irc</span>.<span class="nv">server</span>.<span class="nv">znc</span>.<span class="nv">tls_fingerprint</span><span class="w"> </span><span class="o"><</span><span class="nv">fingerprint</span><span class="o">-</span><span class="nv">goes</span><span class="o">-</span><span class="nv">here</span><span class="o">></span>
|
|
<span class="o">/</span><span class="k">connect</span><span class="w"> </span><span class="nv">znc</span>
|
|
</code></pre></div>
|
|
|
|
<p>And you should be all set!</p>
|
|
<p>Resources : <a href="https://wiki.znc.in/Weechat">The <span class="caps">ZNC</span> Wiki on Weechat</a> and the <a href="https://wiki.debian.org/ZNC">Debian page on <span class="caps">ZNC</span></a></p>
|
|
<p>
|
|
<a href="https://blog.notmyidea.org/tag/znc.html">#ZNC</a>, <a href="https://blog.notmyidea.org/tag/weechat.html">#Weechat</a>, <a href="https://blog.notmyidea.org/tag/irc.html">#IRC</a> - Posté dans la catégorie <a href="https://blog.notmyidea.org/code/">code</a>
|
|
</p>
|
|
</article>
|
|
<footer>
|
|
<a id="feed" href="/feeds/all.atom.xml">
|
|
<img alt="RSS Logo" src="/theme/rss.svg" />
|
|
</a>
|
|
</footer>
|
|
</div>
|
|
</body>
|
|
</html> |