FIXME Deze pagina is nog niet volledig vertaald. Help alsjeblieft de vertaling compleet te maken.
(verwijder deze paragraaf als de vertaling is voltooid)

U wilt een door ddos ​​gefilterd IPv4 en een IPv6-subnet van uw internetprovider.

Maak de gebruiker znc aan:

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

Ik weet niet zeker of dit nodig is, maar in /etc/login.conf voeg ik het volgende toe:

znc:\
  :openfiles-cur=4096:\
  :openfiles-max=8182:\
  :openfiles=4096:\
  :stacksize-cur=48M:\
  :stacksize-max=48M:\
  :maxproc-max=infinity:\
  :maxproc-cur=4096:\
  :tc=daemon:

Ik controleer of znc is ingesteld op de juiste inlogklasse.

$ doas vipw

Er zou een regel met znc moeten zijn die er zo uitziet (ik controleer of znc de juiste inlogklasse heeft):

znc:*:1001:1001::0:0:znc:/home/znc:/bin/sh

Je zult cap_mkdb willen uitvoeren:

cap_mkdb /etc/login.conf
$ doas su -c znc znc
$ ulimit -a
time(cpu-seconds)    unlimited
file(blocks)         unlimited
coredump(blocks)     unlimited
data(kbytes)         33554432
stack(kbytes)        32768
lockedmem(kbytes)    329478
memory(kbytes)       985092
nofiles(descriptors) 4096
processes            1310

Ik heb vervolgens de standaardshell ingesteld op /sbin/nologin:

$ doas vipw

...

znc:*:1001:1001:znc:0:0:znc:/home/znc:/sbin/nologin

Voer dit installatiescript (getest voor OpenBSD 6.6 en znc-1.7.4) uit als root om znc in de chroot op /home/znc te plaatsen:

mkdir -p /home/znc/usr/lib/
mkdir -p /home/znc/usr/libexec/
mkdir -p /home/znc/etc/ssl
mkdir -p /home/znc/dev/
mkdir -p /home/znc/var/run/
mkdir -p /home/znc/home/znc/
mknod -m 644 /home/znc/dev/random c 45 0
mknod -m 644 /home/znc/dev/urandom c 45 2
mknod -m 666 /home/znc/dev/null c 2 2
cp /usr/lib/libc++.so.4.0      /home/znc/usr/lib/libc++.so.4.0
cp /usr/lib/libc++abi.so.2.1   /home/znc/usr/lib/libc++abi.so.2.1
cp /usr/lib/libc.so.96.0       /home/znc/usr/lib/libc.so.96.0
cp /usr/lib/libcrypto.so.46.1  /home/znc/usr/lib/libcrypto.so.46.1
cp /usr/lib/libm.so.10.1       /home/znc/usr/lib/libm.so.10.1
cp /usr/lib/libpthread.so.26.1 /home/znc/usr/lib/libpthread.so.26.1
cp /usr/lib/libssl.so.48.1     /home/znc/usr/lib/libssl.so.48.1
cp /usr/lib/libz.so.5.0        /home/znc/usr/lib/libz.so.5.0
cp /usr/libexec/ld.so          /home/znc/usr/libexec/ld.so
cp /etc/resolv.conf            /home/znc/etc/resolv.conf
cp /etc/ssl/cert.pem           /home/znc/etc/ssl/cert.pem
cp /var/run/ld.so.hints        /home/znc/var/run/ld.so.hints
pkg_add -B /home/znc znc
chown -R root:wheel /home/znc/dev /home/znc/etc /home/znc/usr /home/znc/var
chown -R znc:znc /home/znc/home/znc/

In eerste instantie moet u een conf-bestand maken:

# HOME=/home/znc/
# chroot -u znc -g znc /home/znc znc --makeconf
[ .. ] 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): 
# cp /etc/ssl/my.example.com.fullchain.pem /home/znc/home/znc/.znc/
# cp /etc/ssl/private/my.example.com.key /home/znc/home/znc/.znc/
# chown znc:znc /home/znc/home/znc/.znc/my.example.com.*

binnen ~:

$ openssl dhparam -out dhparam.pem 2048
$ doas chown znc:znc dhparam.pem
$ doas mv dhparam.pem /home/znc/home/znc/.znc/

Om daarna znc uit te voeren:

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

Nu moet je deze regel toevoegen 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)
pass in log quick proto tcp to port { 1337 31337 } keep state (max 3000, max-src-conn 200) #bnc
$ doas pfctl -f /etc/pf.conf

(Hier zijn de stappen een beetje uit de chronologie)

Om de uitsmijter te starten, voer ik deze opdracht uit:

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

Als je uitsmijter al online is, zorg er dan voor dat je de configuratie opslaat door in te loggen op je irc-client, verbonden met de uitsmijter:

/msg *status saveconfig

Voeg dit dan toe bovenaan /home/znc/home/znc/.znc/configs/znc.conf (ja, ik negeer opzettelijk de waarschuwingen):

AnonIPLimit = 200
AuthOnlyViaModule = false
ConfigWriteDelay = 0
ConnectDelay = 5
HideVersion = false
LoadModule = chansaver
LoadModule = lastseen
LoadModule = adminlog
LoadModule = identfile
LoadModule = webadmin
LoadModule = certauth
MaxBufferSize = 10000
ProtectWebSessions = true
SSLCertFile = /home/znc/.znc/my.example.com.fullchain.pem
SSLDHParamFile = /home/znc/.znc/dhparam.pem
SSLKeyFile = /home/znc/.znc/my.example.com.key
ServerThrottle = 30
Version = 1.7.4

<Listener listener0>
        AllowIRC = true
        AllowWeb = false
        Host = 192.168.1.1
        IPv4 = true
        IPv6 = false
        Port = 1337
        SSL = false
        URIPrefix = /
</Listener>

<Listener listener1>
        AllowIRC = true
        AllowWeb = false
        Host = 192.168.1.1
        IPv4 = true
        IPv6 = false
        Port = 31337
        SSL = true
        URIPrefix = /
</Listener>

<Listener listener2>
        AllowIRC = true
        AllowWeb = false
        Host = 2001:db8::
        IPv4 = false
        IPv6 = true
        Port = 1337
        SSL = false
        URIPrefix = /
</Listener>

<Listener listener3>
        AllowIRC = true
        AllowWeb = false
        Host = 2001:db8::
        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>

We zullen de identfile-module standaard laden. Dit is nodig om de juiste identificatie te geven met oidentd. Volg de instructies in de link om ident te configureren.

Ik heb znc binden aan poort 1338 zonder SSL voor de webserver. Ik zal later relayd gebruiken om TLS-versnelling op poort 443 te bieden.

Replace with your own IP addresses. Then, on your irc client logged into the bouncer:

/msg *status rehash
$ doas 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 &

To test the connection (and SSL certificate), run:

$ openssl s_client -connect my.example.com:31337

Make sure you have the proper SSL cert configured.

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.example.com" {
        listen on * port 80
        location "/.well-known/acme-challenge/*" {
                root "/acme"
                request strip 2
        }
        location * {
                block return 302 "https://$HTTP_HOST$REQUEST_URI"
        }
}

Go ahead and reboot the web server:

$ doas rcctl restart httpd

Note: If you are using IPv6 and IPv4 for the same listener, perl IO::Socket::INET is unable to connect. Use two separate listeners.