===== Setting up ZNC: an IRC bouncer ===== \\ ==== Firewall ==== The following ports have to be opened in your firewall: 6697/tcp # IRC SSL ---- \\ ==== ZNC ==== > [[https://en.wikipedia.org/wiki/ZNC|ZNC]] is an IRC network bouncer or BNC. It can detach the client from the actual IRC server, and also from selected channels. Multiple clients from different locations can connect to a single ZNC account simultaneously and therefore appear under the same nickname on IRC.\\ \\ === Installation === sudo apt install znc \\ === Creating a user account === sudo useradd --create-home -d /var/lib/znc --system --shell /bin/false --comment "ZNC IRC Bouncer" --user-group znc \\ === Creating a systemd unit file === [Unit] Description=ZNC, an advanced IRC bouncer After=network-online.target [Service] ExecStart=/usr/bin/znc -f --datadir=/var/lib/znc User=znc [Install] WantedBy=multi-user.target \\ === Configuration === sudo -u znc /usr/bin/znc --datadir=/var/lib/znc --makeconf [ ?? ] Listen on port (1025 to 65534): 6697 [ ?? ] Listen using SSL (yes/no) [no]: yes [ ?? ] Listen using both IPv4 and IPv6 (yes/no) [yes]: yes [ ?? ] Username (alphanumeric): user1 [ ?? ] Enter password: ****** [ ?? ] Confirm password: ***** [ ?? ] Nick [admin]: user1 [ ?? ] Alternate nick [admin_]: user1_ [ ?? ] Ident [admin]: user1 [ ?? ] Real name [Got ZNC?]: User One [ ?? ] Set up a network? (yes/no) [yes]: yes [ ?? ] Name [freenode]: freenode [ ?? ] Server host [chat.freenode.net]: chat.freenode.net [ ?? ] Server uses SSL? (yes/no) [yes]: yes [ ?? ] Server port (1 to 65535) [6697]: 6697 [ ?? ] Server password (probably empty): [ ?? ] Launch ZNC now? (yes/no) [yes]: no \\ === SSL certificates === The ''znc.pem'' is a concatination of the private key and the full certficate chain. In case you use Let's Encrypt: sudo su -c 'cat /etc/letsencrypt/live/quietlife.nl/{privkey,fullchain}.pem > /var/lib/znc/znc.pem' == Strong ciphers == SSLCertFile = /var/lib/znc/znc.pem SSLProtocols = -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2 SSLCiphers = AES384+EECDH:AES384+EDH:AES256+EECDH:AES256+EDH \\ === Enabling and starting the daemon === sudo systemctl enable znc.service sudo systemctl start znc.service ---- \\ ==== Client configuration ==== sudo apt install hexchat \\ HexChat > Network List > Add > quietlife.nl Edit > Servers: quietlife.nl/+6697 [x] Connect to this network automatically [x] Use SSL for all the servers on this network Login method: Default Password: Character set: UTF-8 (Unicode) Close > Connect \\ === Enabling SASL for NickServ authentication === From the Freenode menu, run: /znc LoadMod sasl /query *sasl From the SASL menu, run: set $username $password (Use your Freenode NickServ credentials.) ---- \\ ==== SSL certificate renewal ==== Unlike Apache, nginx, Dovecot and Postfix, ZNC does not shortly run as root when started in order to read from ''/etc/ssl/'' or ''/etc/letsencrypt/''. So certificates have to be copied to the ''/var/lib/znc'' directory. If you use Let's Encrypt, this means that you have to renew those copies every three months. This can be automated with a script you run as ''root'': #!/bin/bash cat /etc/letsencrypt/live/quietlife.nl/{privkey,fullchain}.pem > /var/lib/znc/znc.pem chown znc:znc /var/lib/znc/znc.pem chmod 600 /var/lib/znc/znc.pem systemctl restart znc.service