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
AllowIRC = true
AllowWeb = false
Host = 192.168.1.1
IPv4 = true
IPv6 = false
Port = 1337
SSL = false
URIPrefix = /
AllowIRC = true
AllowWeb = false
Host = 192.168.1.1
IPv4 = true
IPv6 = false
Port = 31337
SSL = true
URIPrefix = /
AllowIRC = true
AllowWeb = false
Host = 2001:db8::
IPv4 = false
IPv6 = true
Port = 1337
SSL = false
URIPrefix = /
AllowIRC = true
AllowWeb = false
Host = 2001:db8::
IPv4 = false
IPv6 = true
Port = 31337
SSL = true
URIPrefix = /
AllowIRC = true
AllowWeb = false
Host = 127.0.0.1
IPv4 = true
IPv6 = false
Port = 1337
SSL = false
URIPrefix = /
AllowIRC = false
AllowWeb = true
Host = 127.0.0.1
IPv4 = true
IPv6 = false
Port = 1338
SSL = false
URIPrefix = /
We zullen de identfile-module standaard laden. Dit is nodig om de juiste identificatie te geven met [[nl:openbsd:irc:oidentd|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 [[nl:openbsd:net:relayd|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.