Znc /

ZNC / BNC

doas nano /home/znc/home/znc/.znc/configs/znc.conf

run znc:
HOME=/home/znc && /usr/sbin/chroot -u znc -g znc /home/znc znc >>/var/log/znc.log 2>&1 &

kill znc:
<Error> ps -aux | grep znc
<Error> kill -9 the znc pid

export HOME=/home/znc
doas pkill -KILL znc

<jrmu> Almajd: run $ doas su
<jrmu> # export HOME=/home/znc
<jrmu> # chroot -u znc -g znc /home/znc znc -D

Copy ssl to znc
doas cp /etc/ssl/domain-name.fullchain.pem /home/znc/home/znc/.znc/
doas cp /etc/ssl/private/domain-name.key /home/znc/home/znc/.znc/

1- doas adduser
Name: znc
Password: ****
Fullname: znc
Uid: 1001
Gid: 1001 (znc)
Groups: znc
Login Class: default
HOME: /home/znc
Shell: /sbin/nologin
OK? (y/n) [y]: y

2- doas rm /etc/login.conf.db
3- doas chsh -s /bin/ksh znc
4- doas su -c znc znc
5- ulimit -a
6- Install needed dependencies:
$ doas pkg_add icu4c-68.2v0
$ doas pkg_add boost-1.72.0
$ doas pkg_add cmake-3.19.4p0v0
7- uname -a
OpenBSD Almajd.host.ircnow.org 6.9 GENERIC#464 amd64
8- doas syspatch
9- $ cd ~
$ curl -L -O https://ircnow.org/software/znc-1.8.2a.tar.gz
$ tar xvzf znc-1.8.2a.tar.gz
$ cd znc-1.8.2
$ mkdir build
$ cd build
$ cmake ..
$ make
$ doas make install
10- /usr/local/bin/znc --makeconf < to generate a config file.

[ .. ] Checking for list of available modules...
[ ** ]
[ ** ] -- Global settings --
[ ** ]
[ ?? ] Listen on port (1025 to 65534): 31337
[ ?? ] Listen using SSL (yes/no) [no]: yes
[ ?? ] Listen using both IPv4 and IPv6 (yes/no) [yes]: no
[ .. ] Verifying the listener...
[ ** ] Unable to locate pem file: [/home/znc/.znc/znc.pem], creating it
[ .. ] Writing Pem file [/home/znc/.znc/znc.pem]...
[ ** ] Enabled global modules [webadmin]
[ ** ]
[ ** ] -- Admin user settings --
[ ** ]
[ ?? ] Username (alphanumeric):

11- lunch znc now: no
12- cp /etc/ssl/domain-name.fullchain.pem /home/znc/home/znc/.znc/
cp /etc/ssl/private/domain-name.key /home/znc/home/znc/.znc/
chown znc:znc /home/znc/home/znc/.znc/domain-name.com.*
13- openssl dhparam -out dhparam.pem 2048
doas chown znc:znc dhparam.pem
doas mv dhparam.pem /home/znc/.znc/
14- Afterwards, to run znc:
# export HOME=/home/znc
# /usr/sbin/chroot -u znc -g znc /home/znc znc >>/var/log/znc.log 2>&1 &
15- /msg *status saveconfig
<*status> Wrote config to /home/znc/.znc/configs/znc.conf
16- add this at the top of /home/znc/.znc/configs/znc.conf

// WARNING
//
// Do NOT edit this file while ZNC is running!
// Use webadmin or *controlpanel instead.
//
// Altering this file by hand will forfeit all support.
//
// But if you feel risky, you might want to read help on /znc saveconfig and /znc rehash.
// Also check https://wiki.znc.in/Configuration

AnonIPLimit = 10000
AuthOnlyViaModule = false
ConfigWriteDelay = 60
ConnectDelay = 1
HideVersion = false
LoadModule = chansaver
LoadModule = lastseen
LoadModule = adminlog
LoadModule = identfile
LoadModule = webadmin
LoadModule = certauth
MaxBufferSize = 10000
PidFile = /home/znc/.znc/znc.pid
ProtectWebSessions = true
SSLCertFile = /home/znc/.znc/domain-name.fullchain.pem
SSLDHParamFile = /home/znc/.znc/dhparam.pem
SSLKeyFile = /home/znc/.znc/domain-name.org.key
ServerThrottle = 1
Skin = forest
StatusPrefix = *
Version = 1.8.2

<Listener listener0>

        AllowIRC = true
        AllowWeb = false
        Host = 38.87.162.30
        IPv4 = true
        IPv6 = false
        Port = 1337
        SSL = false
        URIPrefix = /

</Listener>

<Listener listener1>

        AllowIRC = true
        AllowWeb = false
        Host = 38.87.162.30
        IPv4 = true
        IPv6 = false
        Port = 31337
        SSL = true
        URIPrefix = /

</Listener>

<Listener listener2>

        AllowIRC = true
        AllowWeb = false
        Host = 2602:fccf:1:1030::
        IPv4 = false
        IPv6 = true
        Port = 1337
        SSL = false
        URIPrefix = /

</Listener>

<Listener listener3>

        AllowIRC = true
        AllowWeb = false
        Host = 2602:fccf:1:1030::
        IPv4 = false
        IPv6 = true
        Port = 31337
        SSL = true
        URIPrefix = /

</Listener>

<Listener listener4>

        AllowIRC = true
        AllowWeb = false
        Host = 127.0.0.1
        IPv4 = true
        IPv6 = false
        Port = 1337
        SSL = false
        URIPrefix = /

</Listener>

<Listener listener5>

        AllowIRC = false
        AllowWeb = true
        Host = 127.0.0.1
        IPv4 = true
        IPv6 = false
        Port = 1338
        SSL = false
        URIPrefix = /

</Listener>

17- doas crontab -e // env EDITOR=nano crontab -e
Add a few lines to have ZNC reconnect every 5 minutes. ZNC will only connect if no other ZNC instance is running:
HOME=/home/znc
*/5 * * * * /usr/sbin/chroot -u znc -g znc /home/znc znc >>/var/log/znc.log 2>&1 &

18- While you are at it, you will want to redirect any plaintext requests to the webpanel on port 80 to use SSL on port 443. Add this to /etc/httpd.conf:

server "bnc.almajd.host.ircnow.org" {

        listen on * port 80
        location "/.well-known/acme-challenge/*" {
                root "/acme"
                request strip 2
        }
        location * {
                block return 302 "https://$HTTP_HOST$REQUEST_URI"
        }

}

19- doas rcctl restart httpd
20- Integration with the operating system
doas touch /etc/rc.d/znc
doas chmod +x /etc/rc.d/znc
21- $OpenBSD: znc,v 1.2 2020/01/21 19:27:07 rpe Exp $
daemon_pidfile="/home/znc/home/znc/.znc/znc.pid"
daemon="env HOME=/home/znc /usr/sbin/chroot -u znc -g znc /home/znc znc"
22- doas mkdir /usr/local/project_name/
doas touch /usr/local/project_name/checker_znc.sh
doas chmod +x /usr/local/project_name/checker_znc.sh
23- Now you must add this rule in /etc/pf.conf:
pass in log quick proto tcp to port {http https} keep state (max-src-conn 30, max-src-conn-rate 20/60) #relayd web
pass in log quick proto tcp to port {1337 31337} keep state (max 3000, max-src-conn 200) #bnc