How to Setup your Matrix Synapse Messaging Homeserver (Updated Mar 2021/English)

Updated with Jitsi Video Conference Integration!

Feel free to link to this page if you like this blog post, but do not copy/paste the text somewhere else without asking. If you want to post the text in full or partial on your site or blog you must add in bold inside a h1 tag:

This is the server side part, find client intro here:

This is the server side part. If you need a tutorial for the client side using Element Matrix Messenger (former Riot Messenger) I wrote an very detailed english version for my https://EURAFRI.com Business Networking Project! In German you can find infos here: https://kmj.at/riot-im-messenger-kurzanleitung-fuer-benutze-updated/ . Updated Infos will follow on this blog soon.

If you installed a server using one of the older tutorials double check the configs, especially Apache, Turnserver and Matrix. There was changes made which should be added to your server too.

Changelog:

FreeBSD PostgresQL Update 2019-10-30:

Be careful with updating, see updating section below. FreeBSD pkg wants PostgreSQL 11.5 now for py36-psycopg2 and turnserver. You can end up with deinstalled PostgreSQL 9.5 Server and create a problem. Read section below carefully!

Security Fix 2020-04-03:

The Twisted fix was already mentioned in the 1.12.0 release note, but due to a sqlite module load error, even one does not use it, updates was delayed till 1.12.1 comes out. Please upgrade Twisted to >=20.3.0 while env is activated using:

pip install 'Twisted>=20.3.0'

Cross Signing Update 2020-05-06

Jitsi Integration Update 2021-03-01

Added description of server side Jisi Domain settings for Element Clients and others respecting /.well-known/matrix/client


Just to be clear

This is how I have done it. Whatever you do, you do it for yourself. I am in no way responsible for anything. Everything you do is on your own risk!

Public Matrix Room

There is a public room #kmj:matrix.ctseuro.com where I answer questions from time to time in English or German. Please join if you have questions. I do not accept 1:1 requests for any support question. Join with typing /join #kmj:matrix.ctseuro.com in the box where you write a message and press .

A guide to setup a Matrix Synapse Homeserver

End-to-end encrypted messenger and collaboration server using Python 3.7. We will add Turnserver for voice based communication, add the settings for integration of a self hosted Jitsi Voice/Video Conference instance (https://jitsi.org), add a firewall and more. If we are done you run your own homeserver which is able to communicate with all other Matrix servers on the Internet via federation. Prefered Client on Linux, Mac, Windows, Android and IOS is Element Matrix Messenger https://element.io .

At the time of writing this age we use FreeBSD 12.2. Newer FreeBSD Versions are very similar to setup.

prepare everything

For bare bone setup write the ISO to some USB stick, for virtual setup using Proxmox or VMWare, place the ISO on your host and create a virtual machine booting with the ISO file.

The required resources are:

  • RAM 4-8 GB for up to 100 users
  • 2-4 Cores
  • 200GB Harddisk
  • network card
  • static IP address with DNS entry pointing to it

Assume we create the homeserver matrix.ourdomain.com on IP 1.2.3.4. Each Matrix Synapse server is called homeserver. We have pointed an DNS A record matrix.ourdomain.com to IP 1.2.3.4. Check with nslookup matrix.ourdomain.com, or ping matrix.ourdomain.com that the name resolves.

NOTE: you must change ourdomain.com to your domain name and 1.2.3.4 to your IP!

Setup FreeBSD

Boot the ISO file and do a minimum setup of FreeBSD as described on FreeBSD.org. Enable sshd to be able to login. This sets the hostname, creates your user account, formats the harddisk and creates the partitions. Do not install ports or other stuff, except sshd. Finally reboot and login with the user you created. Detailed FreeBSD setup instructions is out of the scope of this document.

Setup additional software

use su to become root and enter y if asked to fetch and install pkg system.

pkg install ca_root_nss gcc mc bash curl wget
pkg install libffi libxslt jpeg
pkg install py37-virtualenv
pkg install py37-psycopg2 
pkg clean -a

Create Environment

mkdir -p /home/synapse/env
virtualenv-3.7 -p python3.7 /home/synapse/env

Always use sh for working with virtualenv.

sh
. /home/synapse/env/bin/activate
(env) #

The env # must be shown and do not forget to add the . at the beginning of the line. If it is not shown you have made some error! Go back and recheck if this happens!

Setup basic Synapse inside virtualenv

While still showing (env) # do:

- pip install --upgrade pip
- pip install --upgrade setuptools

This should show:

 . /home/synapse/env/bin/activate
(env) # pip install --upgrade pip
Requirement already up-to-date: pip in /usr/home/synapse/env/lib/python3.7/site-packages (19.1.1)
(env) # pip install --upgrade setuptools
Requirement already up-to-date: setuptools in /usr/home/synapse/env/lib/python3.7/site-packages (41.0.1)

If this is fine, continue with:

pip install matrix-synapse[all]

This will take some time, download different things and should finally end without error.

Setup PostgreSQL Database

leave virtualenv with typing: deactivate<enter> 
you should only see # without env now
pkg install postgresql11-server
sysrc postgresql_enable=yes
service postgresql initdb
service postgresql start

now we have a running PostgreSQL database engine.

Setup the Firewall, DNS, NTP and Mail.

Before we continue we should setup our firewall to avoid attacks while runnign our setup.

Create /etc/rc.firewall.KMJ with the following content:

#!/bin/sh -
#
# Setup system for ipfw(4) firewall service.
#

# Suck in the configuration variables.
if [ -z "${source_rc_confs_defined}" ]; then
        if [ -r /etc/defaults/rc.conf ]; then
                . /etc/defaults/rc.conf
                source_rc_confs
        elif [ -r /etc/rc.conf ]; then
                . /etc/rc.conf
        fi
fi

############

setup_loopback() {
        ############
        # Only in rare cases do you want to change these rules
        #
        ${fwcmd} add 100 pass all from any to any via lo0
        ${fwcmd} add 200 deny all from any to 127.0.0.0/8
        ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any
        ${fwcmd} add 400 deny all from any to ::1
        ${fwcmd} add 500 deny all from ::1 to any
}

. /etc/rc.subr
. /etc/network.subr

############
# Set quiet mode if requested
#
case ${firewall_quiet} in
[Yy][Ee][Ss])
        fwcmd="/sbin/ipfw -q"
        ;;
*)
        fwcmd="/sbin/ipfw"
        ;;
esac

############
# Flush out the list before we begin.
#
${fwcmd} -f flush
setup_loopback

############
#
# We do not allow IPv6 Traffic
${fwcmd} add deny  ip6 from any to any

# Allow TCP through if setup succeeded
${fwcmd} add pass tcp from any to any established

# Allow IP fragments to pass through
${fwcmd} add pass all from any to any frag

# Allow setup of incoming connections
         
${fwcmd} add pass tcp from ${MGMTIP} to me 22 setup     # SSH

${fwcmd} add pass tcp from any to me 8448 setup         # MATRIX
${fwcmd} add pass tcp from any to me 3478 setup         # TURN
${fwcmd} add pass udp from any to me 3478 keep-state    # TURN
${fwcmd} add pass tcp from any to me 5349 setup         # TURN TLS
${fwcmd} add pass udp from any to me 5349 keep-state    # TURN TLS
${fwcmd} add pass udp from any to any 49152-65535 keep-state    # Turn high ports

${fwcmd} add pass tcp from any to me 80 setup           # letsencrypt only
${fwcmd} add pass tcp from any to me 443 setup          # https rev proxy fuer matrix

# Allow setup of outgoing TCP connections only
${fwcmd} add pass tcp from me to any setup

# Disallow setup of all other TCP connections
${fwcmd} add deny tcp from any to any setup

# Allow DNS queries out in the world
${fwcmd} add pass udp from me to any 53 keep-state

# Allow NTP queries out in the world
${fwcmd} add pass udp from me to any 123 keep-state

# Deny the Rest
${fwcmd} add deny all from any to any

Assuming you have an IPv4 connectivity only we block all IPv6 traffic. Furthermore it is not recommended to open SSH to the public. I assume you are a good administrator and restrict ssh access to the static IP of your notebook or desktop system. Otherwise you should setup OpenVPN to access your server. Do not use any as MGMTIP. If you open critial services to the public you will regret it later. They will brute force you and one day somebody will break into your system. Be smart and work like a professional!

Now add or change the settings in /etc/rc.conf. We already add settings we need later. You network configuration is not shown here and should not be touched.

Do not change

  • hostname=
  • ifconfig_
  • defaultrouter=

parameters.

keymap="de.kbd" # do not change your keymap. we use german
clear_tmp_enable="YES"
syslogd_flags="-ss"
dumpdev="NO"

MGMTIP="5.6.8.9" # change to static IP of your notebook or desktop system
 
firewall_enable="YES"           # Set to YES to enable firewall functionality
firewall_script="/etc/rc.firewall.KMJ" # Which script to run to set up the firewall
firewall_type="KMJ"         # Firewall type (see /etc/rc.firewall)
firewall_quiet="NO"             # Set to YES to suppress rule display
firewall_logging="YES"          # Set to YES to enable events logging
firewall_logif="NO"             # Set to YES to create logging-pseudo interface

#######################
 
local_unbound_enable="YES"
sshd_enable="YES"
ntpd_enable="YES"

apache24_enable="YES"
postgresql_enable="YES"

synapse_enable="YES"
turnserver_enable="YES"

###############################

now change /etc/resolv.conf so it reads:

search ourdomain.com
nameserver 127.0.0.1
options edns0

The final setting requires that our server is able to send out e-mails.

cd /etc/mail
make
make install
  • edit /etc/mail/aliases and uncomment the root: entry.
  • change it to root: you@yourmaildomain.com

Then run:

newaliases

Using this settings we run a local cache DNS and resolve locally. Furthermore we run a time syncing via NTP daemon. To make sure everything is done OK, we should reboot now.

shutdown -r now

Check our Setup

  • login after reboot
  • do a ps -xaj and check that local-ubound, syslogd, ntpd and postgresql deamons are running
  • do a mail -s “test” root, enter some text+ and press CTRL+d to send. You should receive your root mail. Check /var/log/maillog if not,

Setup Turnserver

To handle voice calls behind NAT you should setup Turnserver as kind of proxy. Setup is pretty easy.

pkg install turnserver

create /usr/local/etc/turnserver.conf like below, but change 1.2.3.4 to your IP, and also domain and secret!

realm=matrix.ourdomain.com
listening-ip=1.2.3.4
min-port=49152
max-port=65535
#lt-cred-mech
use-auth-secret
static-auth-secret=1cd6c96c1f8d4f1008042d76d646691e3b0512e830d7f486d6ad6b702bfc234e
no-cli
no-tcp-relay
no-multicast-peers
user-quota=12 # 4 streams per video call, so 12 streams = 3 simultaneous relayed calls per user.
total-quota=1200
# special case the turn server itself so that client->TURN->TURN->client flows work
allowed-peer-ip=1.2.3.4
cert=/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/cert.pem
pkey=/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/privkey.pem
syslog

do not start turnserver now!

Setup Apache Reversed-Proxy and SSL Cert

We want Apache to handle the connections to https Port 443 from the clients. Federation is done via port 8448. So we need to setup an Apache Reversed-Proxy and get a free SSL Cert from Letsencrypt.

pkg install apache24 cronolog
  • we already added apache24_enable=“YES” to /etc/rc.conf earlier
  • save /usr/local/etc/apache24/httpd.conf and replace its content with

replace ourdomain.com with your domain!

ServerRoot "/usr/local"

ServerSignature Off

Listen 80

LoadModule authn_file_module libexec/apache24/mod_authn_file.so
LoadModule authn_core_module libexec/apache24/mod_authn_core.so
LoadModule authz_host_module libexec/apache24/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache24/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache24/mod_authz_user.so
LoadModule authz_core_module libexec/apache24/mod_authz_core.so
LoadModule access_compat_module libexec/apache24/mod_access_compat.so
LoadModule auth_basic_module libexec/apache24/mod_auth_basic.so
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
LoadModule reqtimeout_module libexec/apache24/mod_reqtimeout.so
LoadModule filter_module libexec/apache24/mod_filter.so
LoadModule mime_module libexec/apache24/mod_mime.so
LoadModule log_config_module libexec/apache24/mod_log_config.so
LoadModule env_module libexec/apache24/mod_env.so
LoadModule headers_module libexec/apache24/mod_headers.so
LoadModule setenvif_module libexec/apache24/mod_setenvif.so
LoadModule version_module libexec/apache24/mod_version.so
LoadModule ssl_module libexec/apache24/mod_ssl.so
LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
LoadModule unixd_module libexec/apache24/mod_unixd.so
LoadModule autoindex_module libexec/apache24/mod_autoindex.so
<IfModule !mpm_prefork_module>
        #LoadModule cgid_module libexec/apache24/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
        #LoadModule cgi_module libexec/apache24/mod_cgi.so
</IfModule>
LoadModule dir_module libexec/apache24/mod_dir.so
LoadModule userdir_module libexec/apache24/mod_userdir.so
LoadModule alias_module libexec/apache24/mod_alias.so
LoadModule rewrite_module libexec/apache24/mod_rewrite.so

LoadModule proxy_module libexec/apache24/mod_proxy.so
LoadModule proxy_connect_module libexec/apache24/mod_proxy_connect.so
LoadModule proxy_http_module libexec/apache24/mod_proxy_http.so
IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.conf
<IfModule unixd_module>
    User www
    Group www
</IfModule>

ServerAdmin hostmaster@ourdomain.com
ServerName matrix.ourdomain.com:80

DirectoryIndex index.html

<Directory />
    AllowOverride none
    Require all denied
</Directory>

DocumentRoot "/usr/local/www/apache24/data"
<Directory "/usr/local/www/apache24/data">
    Options -Indexes +FollowSymLinks -ExecCGI -MultiViews
    AllowOverride None
    Require all granted
</Directory>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog  "|/usr/local/sbin/cronolog /var/log/www/%Y/%m/%d/errors.log"
LogLevel warn

LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i port:%p\"" combined
CustomLog "|/usr/local/sbin/cronolog /var/log/www/%Y/%m/%d/access.log" combined

<IfModule mime_module>
    #
    TypesConfig etc/apache24/mime.types
    #AddType application/x-gzip .tgz
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

Include etc/apache24/extra/httpd-ssl.conf

SSLRandomSeed startup builtin
SSLRandomSeed connect builtin

Include etc/apache24/Includes/*.conf

then save /usr/local/etc/apache24/extra/httpd-ssl.conf and replace it with the following content. Again replace IP and ourdomain.com with yours.

listen 443
listen 8448

SSLCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA
SSLProxyCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA

SSLHonorCipherOrder on

SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3

SSLPassPhraseDialog  builtin

SSLSessionCache        "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout  300

##### 443 ######
<VirtualHost _default_:443>

ServerName matrix.ourdomain.com:443
ServerAdmin hostmaster@ourdomain.com

DocumentRoot "/usr/local/www/apache24/data-ssl"
SSLEngine on

SSLCertificateFile /usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/cert.pem
SSLCertificateKeyFile /usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/privkey.pem
SSLCertificateChainFile //usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/fullchain.pem

UserDir disabled
DirectoryIndex index.html index.htm

<Directory /usr/local/www/apache24/data-ssl>
    Options -Indexes -FollowSymLinks -ExecCGI -MultiViews
    AllowOverride None
    require all granted
</Directory>

################################################################################
# Matrix Synapse
################################################################################

RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
AllowEncodedSlashes NoDecode
ProxyPass /_matrix http://127.0.0.1:8008/_matrix nocanon
ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix
ProxyPass /_synapse/client http://127.0.0.1:8008/_synapse/client nocanon
ProxyPassReverse /_synapse/client http://127.0.0.1:8008/_synapse/client

# Jitsi Integration
# CORS/ACAO Headers for .well-known/matrix/client
# Base Domain for Matrix is what is used in :matrix.ourdomain.com
Header Set Access-Control-Allow-Origin "*"

################################################################################

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i port:%p\"" combined
CustomLog "|/usr/local/sbin/cronolog /var/log/www/%Y/%m/%d/access.log" combined

</VirtualHost>

<VirtualHost _default_:8448>

ServerName matrix.ourdomain.com:8448
ServerAdmin hostmaster@ourdomain.com

DocumentRoot "/usr/local/www/apache24/data-ssl"
SSLEngine on

SSLCertificateFile /usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/cert.pem
SSLCertificateKeyFile /usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/privkey.pem
SSLCertificateChainFile //usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/fullchain.pem

UserDir disabled
DirectoryIndex index.html index.htm

<Directory /usr/local/www/apache24/data-ssl>
    Options -Indexes -FollowSymLinks -ExecCGI -MultiViews
    AllowOverride None
    require all granted
</Directory>

################################################################################
# Matrix Synapse
################################################################################
    
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
AllowEncodedSlashes NoDecode
ProxyPass /_matrix http://127.0.0.1:8008/_matrix nocanon
ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix

# CORS/ACAO Headers for .well-known/matrix/client
# Base Domain for Matrix is what is used in :matrix.ourdomain.com
Header Set Access-Control-Allow-Origin "*"

################################################################################

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i port:%p\"" combined
CustomLog "|/usr/local/sbin/cronolog /var/log/www/%Y/%m/%d/access.log" combined

</VirtualHost>

Now create the SSL directory:

mkdir /usr/local/www/apache24/data-ssl
touch /usr/local/www/apache24/data-ssl/index.html
echo "Server is offline" > /usr/local/www/apache24/data-ssl/index.html

NOTE

To be able to receive our cert from Letsenrypt, temporary change

  • Include etc/apache24/extra/httpd-ssl.conf

to

  • #Include etc/apache24/extra/httpd-ssl.conf

in httpd.conf. This must be changed back after we received the initial cert.

Now create the Letsencrypt stuff

mkdir -p /home/letsencrypt/cts
mkdir -p /usr/local/etc/matrix-synapse/certs

create /home/letsencrypt/cts/Run_Certs.sh with the following content

#!/bin/sh

cd /home/letsencrypt/cts
chmod 750 dehydrated
/home/letsencrypt/cts/dehydrated  -c  --config /home/letsencrypt/cts/conf-ip1/config.sh \
                                      --hook /home/letsencrypt/cts/conf-ip1/hook.sh

/usr/sbin/service apache24 restart

########################################################################

HOST=`hostname`
echo "copy cert for synapse / matrix server on ${HOST}"

/bin/cp -r /usr/home/letsencrypt/cts/conf-ip1/certs/${HOST} /usr/local/etc/matrix-synapse/certs
/usr/sbin/chown -R root:nobody /usr/local/etc/matrix-synapse/certs
/bin/chmod -R 755 /usr/local/etc/matrix-synapse/certs

/usr/sbin/service synapse restart

/bin/ps -xaj | /usr/bin/grep synapse
########################################################################

Then do:

chown root:wheel /home/letsencrypt/cts/Run_Certs.sh
chmod 750 /home/letsencrypt/cts/Run_Certs.sh

create /home/letsencrypt/cts/dehydrated with the following commands:

cd  /home/letsencrypt/cts/
wget https://github.com/lukas2511/dehydrated/raw/master/dehydrated
chown root:wheel /home/letsencrypt/cts/dehydrated
chmod 750 /home/letsencrypt/cts/dehydrated

We now need to create some additional stuff for our Letsencrypt script. Remember to change IP and ourdomain.com to yours!

mkdir -p /home/letsencrypt/cts/conf-ip1
mkdir -p /usr/home/letsencrypt/cts/www/wellknown/acme-challenge
touch /usr/home/letsencrypt/cts/www/wellknown/acme-challenge/index.html
ln -s /usr/home/letsencrypt/cts/www/wellknown /usr/local/www/apache24/data/.well-known
echo "matrix.ourdomain.com" > /home/letsencrypt/cts/conf-ip1/domains.txt

create /home/letsencrypt/cts/conf-ip1/config.sh with the following content:

#!/usr/bin/env /usr/local/bin/bash
# FreeBSD special:
alias openssl='/usr/bin/openssl'
# Path to license agreement (default: https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf)
#LICENSE="https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf"
# Which challenge should be used? Currently http-01 and dns-01 are supported
CHALLENGETYPE="http-01"
#WELLKNOWN="${BASEDIR}/.acme-challenges"
WELLKNOWN="/home/letsencrypt/cts/www/wellknown/acme-challenge"

do:

chown root:wheel /home/letsencrypt/cts/conf-ip1/config.sh
chmod 750 /home/letsencrypt/cts/conf-ip1/config.sh

create /home/letsencrypt/cts/conf-ip1/hook.sh with the following command:

cd /home/letsencrypt/cts/conf-ip1/
wget https://github.com/lukas2511/dehydrated/raw/master/docs/examples/hook.sh
chown root:wheel /home/letsencrypt/cts/conf-ip1/hook.sh
chmod 750 /home/letsencrypt/cts/conf-ip1/hook.sh

to receive our first cert we should start Apache and accept the terms in advance.

service apache24 start
cd /home/letsencrypt/cts
chmod 750 dehydrated
/home/letsencrypt/cts/dehydrated  --register --accept-terms  --config /home/letsencrypt/cts/conf-ip1/config.sh
./Run_Certs.sh

if all goes well you should have placed your certs in

  • /home/letsencrypt/cts/conf-ip1/certs

and

  • /usr/local/etc/matrix-synapse/certs

Add the following to /etc/crontab:

#######################################################################
# Run letsencrypt renewals every thuesday @ 9:01
#######################################################################

5       9       *       *       2       root    /home/letsencrypt/cts/Run_Certs.sh

Now where we have the correct cert, change back

  • #Include etc/apache24/extra/httpd-ssl.conf

to

  • Include etc/apache24/extra/httpd-ssl.conf

in /usr/local/etc/apache24/httpd.conf and do

service apache24 restart

Point your browser to https://matrix.ourdomain.com and check if you get a secure connection. Logs are in /var/log/www.

We have done most of our way. Lets finalize everything.

Finish PostgreSQL Setup

su to user postgres and create synape user and database.su - postgres

su - postgres
createdb postgres
createuser --pwprompt synapse_user
# check with
psql
\l
\du
\?
CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C'  template=template0  OWNER synapse_user;
\l
\q
exit

Finish Matrix Synapse setup

Add a synapse user, so we do not need to run the homeserver as root.

adduser synapse

adduser synapse
Username: synapse
Full name: synapse
Uid (Leave empty for default): 
Login group [synapse]: 
Login group is synapse. Invite synapse into other groups? []: 
Login class [default]: 
Shell (sh csh tcsh bash rbash nologin) [sh]: nologin
Home directory [/home/synapse]: 
Home directory permissions (Leave empty for default): 
Use password-based authentication? [yes]: 
Use an empty password? (yes/no) [no]: 
Use a random password? (yes/no) [no]: yes
Lock out the account after creation? [no]: 
Username   : synapse
Password   : <random>
Full Name  : synapse
Uid        : 1002
Class      : 
Groups     : synapse 
Home       : /nonexistent
Home Mode  : 
Shell      : /usr/sbin/nologin
Locked     : no
OK? (yes/no): yes

Now lets create a base config for our homeserver. Again, do not forget to change ourdomain.com to yours!

sh
. /home/synapse/env/bin/activate
cd /usr/local/etc/matrix-synapse
python -m synapse.app.homeserver --server-name matrix.ourdomain.com --config-path homeserver.yaml --generate-config --report-stats=no

We need to load a template which is not in the standard setup:

mkdir -p  /usr/local/etc/matrix-synapse/res/templates
cd /usr/local/etc/matrix-synapse/res/templates
wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/password_reset.html
wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/password_reset.txt
wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/registration.html
wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/registration.txt
wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/add_threepid.html
wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/add_threepid.txt

Replace the content of homeserver.yaml with:

tls_certificate_path: "/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/cert.pem"
tls_certificate_path: "/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/fullchain.pem"
tls_private_key_path: "/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/privkey.pem"

# PEM dh parameters for ephemeral keys
tls_dh_params_path: "/usr/local/etc/matrix-synapse/tls.dh"

# Don't bind to the https port
no_tls: False

tls_fingerprints: []

## Server ##
server_name: "matrix.ourdomain.com"
pid_file: /var/run/matrix-synapse/homeserver.pid
# We don't want the web client
web_client: False

public_baseurl: "https://matrix.ourdomain.com/"

soft_file_limit: 0

listeners:
  - port: 8008
    tls: false
    bind_addresses: ['127.0.0.1']
    type: http

    x_forwarded: true

    resources:
      - names: [client]
        compress: true
      - names: [federation]
        compress: false

# Database configuration
database:
  name: "psycopg2"
  args:
    database: "synapse"
    user: "synapse_user"
    password: "yourpassword"
    cp_min: 5
    cp_max: 10

event_cache_size: "10K"

verbose: 0

#log_file: "/var/log/matrix-synapse/homeserver.log"
log_config: "/usr/local/etc/matrix-synapse/matrix.ourdomain.com.log.config"

rc_messages_per_second: 0.2
rc_message_burst_count: 10.0
federation_rc_window_size: 1000
federation_rc_sleep_limit: 10
federation_rc_sleep_delay: 500
federation_rc_reject_limit: 50
federation_rc_concurrent: 3

media_store_path: "/var/db/matrix-synapse/media_store"
uploads_path: "/var/db/matrix-synapse/uploads"
max_upload_size: "1M"
max_image_pixels: "32M"
dynamic_thumbnails: false

# List of thumbnail to precalculate when an image is uploaded.
thumbnail_sizes:
- width: 32
  height: 32
  method: crop
- width: 96
  height: 96
  method: crop
- width: 320
  height: 240
  method: scale
- width: 640
  height: 480
  method: scale
- width: 800
  height: 600
  method: scale

url_preview_enabled: False

max_spider_size: "1M"
recaptcha_public_key: "DISABLED"
recaptcha_private_key: "DISABLED"
enable_registration_captcha: False

recaptcha_siteverify_api: "https://www.google.com/recaptcha/api/siteverify"

## Turn ##
## CHANGE AS USED above in turnserver.conf!!!!!!!!!

# The public URIs of the TURN server to give to clients
turn_uris: [
            "turn:matrix.ourdomain.com:3478?transport=udp",
            "turn:matrix.ourdomain.com:3478?transport=tcp"
            "turns:matrix.ourdomain.com:3478?transport=udp",
            "turns:matrix.ourdomain.com:3478?transport=tcp"
           ]
turn_shared_secret: "1cd6c96c1f8d4f1008042d76d646691e3b0512e830d7f486d6ad6b702bfc234e"
turn_user_lifetime: "1h"
turn_allow_guests: False

## Registration ##
enable_registration: False
registration_shared_secret: "jkdshkdjshdfzv9d87v89df77v897df987v89df7v87df89vu89df7v89df7v7df897vsdfuvhfdjkhvdf89"
bcrypt_rounds: 12
allow_guest_access: False

trusted_third_party_id_servers:
    - matrix.org
    - vector.im


enable_metrics: False
report_stats: False

room_invite_state_types:
    - "m.room.join_rules"
    - "m.room.canonical_alias"
    - "m.room.avatar"
    - "m.room.name"


app_service_config_files: []
macaroon_secret_key: "hfdjkfhdjkshjbncnsuivhsdf8sduv8duv8dfuvufd8uv8fdu89"
expire_access_token: False

## Signing Keys ##

# Path to the signing key to sign messages with
signing_key_path: "/usr/local/etc/matrix-synapse/matrix.ourdomain.com.signing.key"

old_signing_keys: {}
key_refresh_interval: "1d" # 1 Day.

# The trusted servers to download signing keys from.
perspectives:
  servers:
    "matrix.org":
      verify_keys:
        "ed25519:auto":
          key: "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw"

# Enable password for login.
password_config:
   enabled: true
   # Uncomment and change to a secret random string for extra security.
   # DO NOT CHANGE THIS AFTER INITIAL SETUP!
   #pepper: ""

email:
   enable_notifs: false
   smtp_host: "localhost"
   smtp_port: 25
   require_transport_security: False
   notif_from: "Ourdomain MATRIX <noreply@ourdomain.com>"
   app_name: Matrix
   template_dir:  /usr/local/etc/matrix-synapse/res/templates
   riot_base_url: "https://matrix.ourdomain.com/riot"


#server_notices:
#   system_mxid_localpart: serveralarm
#   system_mxid_display_name: "Server Infos and Alerts"
#   system_mxid_avatar_url: "https://matrix.ourdomain.com/_matrix/media/v1/thumbnail/matrix.ourdomain.com/fcpNAbnjbfjjHIegqEMoPFew"
#   room_name: "Server Infos and Alerts"

and do:

mkdir -p /var/run/matrix-synapse
chown synapse /var/run/matrix-synapse
mkdir -p /var/log/matrix-synapse/
chown synapse /var/log/matrix-synapse/
change log file in matrix.ourdomain.com.log.config to
filename: /var/log/matrix-synapse/homeserver.log
mkdir -p /var/db/matrix-synapse/media_store
mkdir -p /var/db/matrix-synapse/uploads
chown -R synapse:synapse /var/db/matrix-synapse

create tls.h file in /usr/local/etc/matrix-synapse

cd /usr/local/etc/matrix-synapse/
openssl dhparam -out tls.dh 2048

Finally we need a startup script for Matrix Synapse. Lets create /usr/local/etc/rc.d/synapse:

#!/bin/sh
#
# Created by: Karl M. Joch <k.joch@cts.at>
#

# PROVIDE: synapse
# REQUIRE: LOGIN postgresql
# KEYWORD: shutdown

# synapse_enable="YES"

. /etc/rc.subr

#----------------------
# we run in virtual env
#----------------------
VIRTUAL_ENV="/home/synapse/env"
export VIRTUAL_ENV
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
# to check run here: env

name=synapse

rcvar=synapse_enable
load_rc_config ${name}

: ${synapse_enable:=NO}
: ${synapse_user:=synapse}
: ${synapse_conf:=/usr/local/etc/matrix-synapse/homeserver.yaml}
: ${synapse_dbdir:=/var/db/matrix-synapse}
: ${synapse_logdir:=/var/log/matrix-synapse}
: ${synapse_pidfile:=/var/run/matrix-synapse/homeserver.pid}

pidfile="${synapse_pidfile}"
procname=/usr/home/synapse/env/bin/python3.7
command=/usr/home/synapse/env/bin/python3.7
command_args="-m synapse.app.homeserver --daemonize -c ${synapse_conf}"
start_precmd=start_precmd

start_precmd()
{
        if [ ! -d ${synapse_pidfile%/*} ] ; then
                install -d -o synapse -g wheel ${synapse_pidfile%/*};
        fi

        if [ ! -d ${synapse_dbdir} ] ; then
                install -d -o synapse -g wheel ${synapse_dbdir};
        fi

        if [ ! -d ${synapse_logdir} ] ; then
                install -d -o synapse -g wheel ${synapse_logdir};
        fi

        if $(grep -q CHANGEME ${synapse_conf}) ; then
                echo "Error: Default secret values in config."
                echo "Please replace the CHANGEME values in ${synapse_conf}"
                exit 1
        fi
}

run_rc_command "$1"

continue with:

chown root:wheel /usr/local/etc/rc.d/synapse
chmod 750 /usr/local/etc/rc.d/synapse

Add Jitsi Settings

If you run your own Jitsi - More secure, more flexible, and completely free video conferencing - instance (https://jitsi.org) you are able to direct the Element CLients directly to your Jitsi instance for group video and voice conferences. You have 2 options,

  • 1 set Jitsi default instance for all of your users

create /usr/local/www/apache24/data-ssl/.well-known/matrix/client :

{
  "im.vector.riot.jitsi": {
    "preferredDomain": "your.jitsi.yourdomain.com"
  }
}

or

  • 2 create a custom config.json for Element Deaktop on per user setting

config.json (custom one in element user directory as usual) Labs enables Backgroung Blur and Lobby Beta Mode

{
    "showLabsSettings": true,
    "jitsi": {
      "preferredDomain": "jitsi.yourdomain.com"
    }
}

Start Matrix Synapse the first time

service synapse start

will hopefully end in something like this:

2019-05-11 18:02:13,846 - synapse.server - 222 - INFO - None - Setting up.
2019-05-11 18:02:13,884 - synapse.storage.event_push_actions - 471 - INFO - None - Searching for stream ordering 1 month ago
2019-05-11 18:02:13,885 - synapse.storage.event_push_actions - 477 - INFO - None - Found stream ordering 1 month ago: it's 0
2019-05-11 18:02:13,885 - synapse.storage.event_push_actions - 479 - INFO - None - Searching for stream ordering 1 day ago
2019-05-11 18:02:13,885 - synapse.storage.event_push_actions - 485 - INFO - None - Found stream ordering
2019-05-11 18:02:13,887 - synapse.server - 226 - INFO - None - Finished setting up.

You can check the running synapse with ps -xaj and netstat -an should show you listeners on 80,443, 8008 and 8448. If yes, you can open the first beer. Your log is in /var/log/matrix-synapse.

Adding the admin user

Again, change ourdomain.com to your domain!!!!!

- sh
. /home/synapse/env/bin/activate
cd /usr/local/etc/matrix-synapse
register_new_matrix_user -c homeserver.yaml https://matrix.ourdomain.com:8448 
**make this user the admin for you!**

reboot your server, to restart everything

- shutdown -r now

download the Element Matrix Messenger from https://element.io for your platform and login

  • test everything

if everything works as expected:

  • create all other users the same way, but without being admin!

UPDATING

Updating FreeBSD and Packages

  • freebsd-update fetch
  • freebsd-update install
  • pkg update
  • pkg upgrade

Updating Matrix Synapse

  • service synapse stop
  • sh
  • . /home/synapse/env/bin/activate
  • pip install -U matrix-synapse[all]
  • service synapse start
  • if massive update, simply reboot the server

Join my public room

If you like this blog entry feel free to join my public room by entering

/join #kmj:matrix.ctseuro.com

anywhere in the box to send a message! Feedback welcome!

Enterprise Support


Extra

Upgrade notes PostgreSQL 9.5 to 11.5

READ BELOW FOR POSTGRES UPDATE 9.5 to 11.5 if you are below 11.5!!

While upgrading Matrix/Synapse to 1.5.0 a problem with the pkg system occured. The depencies for py37-psycopg2 and turnserver changed to postgresql11-client-11.5 and it ended up with deinstalled postgresql95-server, which was not nice. Thanks to the Proxmox virtualization infrastructure I was able to move back to the snapshot before the update, skipped the pkg upgrade section and put the server online again. So far so good, but now there is need to upgrade to postgresql11-server-11.5 to be on track again.

As written in the documentation (https://www.postgresql.org/docs/11/upgrading.html): “The traditional method for moving data to a new major version is to dump and reload the database, though this can be slow. A faster method is pg_upgrade.” I already had the dump/restore idea because the FreeBSD 11.5 port also changes the location of the servers data.

The steps done to make it work (read 18.6.1 of PostgreSQL docu in advance):

  • deactivate some services on boot in /etc/rc.conf

    apache24_enable=“NO” synapse_enable=“NO” turnserver_enable=“NO”

  • full server shutdown and snapshot creation of Proxmox VM

  • as alternate if bare installed do a full server backup

  • now we need to create a full database dump of the 9.5 server

    su
    # create temp migration dir
    mkdir /var/pgupdate
    chmod 777 /var/pgupdate
    # change to user pgsql
    su - pgsql
    cd /var/pgupdate
    # backup config changes
    cp /usr/local/pgsql/data/pg_hba.conf .
    cp /usr/local/pgsql/data/postgresql.conf .
    # dump database
    pg_dumpall > database_dump_95.sql
    # be patient, depending on server this can take time 
    exit
    # we are root again
    service postgresql stop
    # rename old data dir
    mv /usr/local/pgsql/data /usr/local/pgsql/data-9.5
    # delete your postgresql packages / use pkg info first
    pkg delete postgresql95-client-9.5.19 postgresql95-server-9.5.19
    # this will delete "Installed packages to be REMOVED:"
    # postgresql95-client-9.5.19 postgresql95-server-9.5.19
    # py36-psycopg2-2.8.3 turnserver-4.5.1.1
    # which is ok for us. we reinstall last 2 later
    # install server 11 which includes install of client
    pkg install postgresql11-server
    # initialize the database, run
    /usr/local/etc/rc.d/postgresql initdb
    # check for changes in pg_hba.conf and postgresql.conf
    # best using 
    diff -u  /var/pgupdate/pg_hba.conf /var/db/postgres/data11/pg_hba.conf | more
    diff -u  /var/pgupdate/postgresql.conf /var/db/postgres/data11/postgresql.conf | more
    # reinstall py36-psycopg2 turnserver
    pkg install py36-psycopg2 turnserver
    # start the postgres server
    service postgresql start
    # if start runs well, reload the data
    su - postgres
    psql -d postgres -f /var/pgupdate/database_dump_95.sql
    # be patient again!
    # if all goes well exit to be root again
    exit
    # finally upgrade all packages and clean out stuff
    pkg update
    pkg upgrade
    pkg clean -a
    # delete old psql data dir and user if all is finished
    rm -r /usr/local/pgsql/data
    rmuser pgsql
    rm -r /var/pgupdate
  • reactivate some services on boot in /etc/rc.conf

    apache24_enable=“YES” synapse_enable=“YES” turnserver_enable=“YES”

    # as root start the services and check if all is fine
    service apache24 start
    service turnserver start
    service synapse start

have fun with Riot/Matrix/Synapse again.

NOTE Older versions used user pgsql for PostgreSQL, now user is named postgres and /var/db/postgres is owned in that way!

NOTE from Package The port is set up to use autovacuum for new databases, but you might also want to vacuum and perhaps backup your database regularly. There is a periodic script, /usr/local/etc/periodic/daily/502.pgsql, that you may find useful. You can use it to backup and perform vacuum on all databases nightly. Per default, it performs `vacuum analyze’. See the script for instructions. For autovacuum settings, please review ~pgsql/data/postgresql.conf.

Want your own blog with payment and paywall function? Try https://cpv.agency !

Am Android Tablet oder Telefon mit LineageOS für Privatsphäre sorgen. (Teil 5)

NEUE VERSION DES ARTIKELS FINDET SICH HIER:

Deutsch: https://cpv.agency/kmjblog/2020/12/07/am-android-tablet-oder-smartphone-mit-lineageos-fuer-sicherheit-und-privatsphaere-sorgen/

English: https://cpv.agency/kmjblog/en/2020/12/07/am-android-tablet-oder-smartphone-mit-lineageos-fuer-sicherheit-und-privatsphaere-sorgen/

LineageOS, ein alternatives Android Betriebssystem für Tablet und Telefon!

LineageOS ist ein Betriebssystem für Smartphones und Tabletcomputer. Es ist eine Modifizierung des von Google entwickelten freien Betriebssystems Android und der Nachfolger des eingestellten Custom-ROMs CyanogenMod. LineageOS ist Freie Software und wird von einer Gemeinschaft Freiwilliger entwickelt, die das Betriebssystem gratis zum Herunterladen bereitstellen. Mehr Infos auf der Wikipedia Seite (https://de.wikipedia.org/wiki/LineageOS)

Vorraussetzung ist ein Geräte welches offiziell unterstützt wird (https://wiki.lineageos.org/devices/) oder ein Custom Rom, z.B. von https://forum.xda-developers.com/ existiert.

WICHTIG: Mit diesem Vorgang verlieren Sie Ihre Garantie, können Ihr Gerät zerstören und niemand wird Ihnen helfen. Ich beschreibe hier den Vorgang meiner Umstellung und ermutige Sie in keinem Fall den Vorgang an Ihrem Gerät durchzuführen. Wenn Sie es machen, dann sind Sie auf sich alleine gestellt und für den Fall dass Sie das Gerät zerstören sind einzig und alleine Sie selbst verantwortlich. Niemand und schon gar nicht ich, hafte für Dinge die Sie mit Ihrem Gerät tun!

Teil 5

Upgrade auf LineageOS 17.1 (Android 10 basiert) und Custom Script Erweiterung um den DNS außerhalb des Home WLAN’S über Orbot (Tor) zu routen).

Basierend auf dem ersten Tests von LineageOS auf einem Samsung SM-T585 Tablet (https://kmj.at/2018-09-12-android-lineageos-samsung-sm-t585-privacy/), sowie dem Teil 2 der Serie (https://kmj.at/2018-10-01-android-lineageos-privacy-teil2/) wurden im Teil 3 die ersten Releasewechsel durchgeführt (https://kmj.at/android-lineageos-privacy-teil3/). Teil 4 (https://kmj.at/android-lineageos-privacy-teil4/) beschäftigt sich mit

Zwischenzeitlich kann LineageOS auch als virtuelle Maschine betrieben werden (https://kmj.at/betrieb-einer-virtuellen-maschine-vm-mit-lineageos-android-unter-proxmox/).

Im Teil 4 ging es bereits darum, den kompletten Datenverkehr ins Internet und damit die Übertragungvon Daten zu Drittanbietern zu verhindern, sowie auch das “Calling Home” von Software (Apps) zu verhindern und trotzdem eine perfekte Funktion zu erhalten.

Nun wollen wir jedes DNS Leak außerhalb des Home WLAN’s unterbinden und die DNS Abfragen über Tor umleiten.

Schritte:

  • Sichern der Apps und Daten am besten mit Titanium
  • Installation von LineageOS 17.1 laut Project Webseite am Gerät
  • Einrichten von Magisk zum rooten der Device
  • Setup von Afwall+ und Orbot
  • Rücksichern von Apps und Einstellugnen mit z.B. Titanium

Der komplette Vorgang war absolut unproblematisch. Es gab nur ein Problem, dass ein Problem geschaffen hat. Im F-Droid Store ist AFWall+ in der Version 3.4.x verfügbar und diese Version hat Probleme mit LineageOS 17.1 am Mobile Interface.

Die Installation des 3.5.x Paketes, welches auf Github (https://github.com/ukanth/afwall/releases) zur Verfügung steht, löste das Problem und nun sind wirklich auch alle Cor und System Prozessen ohne Internet Zugang.

Durch das Custom Script haben alle Apps Zugang zu meinen Servern (Statische IPs) und benötigen keine Freigabe in AFWall+! Alle Browser und der Updater erhalten Wifi,Mobile und Tor als Freigaben, damit wird der komplette Traffic über Tor (Orbot) geroutet.

Einige wenige Ausnahmen erhalten Wifi und Mobile und können direkt ins Internet.

Damit ist die Device sehr gut geschützt. Nur ein DNS leak Risiko bleibt, sobald wir uns im mobilen Datennetz (3G,4G,5G) befinden. Im Home Wlan sind wir mit Pi-Hole und Pfsense, incl. DNS-over-TLS forwarding zu eigenen, externen DNS Servern gut geschützt. Im mobilen Datennetz sind wir von dem jeweiligen Netz Provider abhängig, welcher DNS zuweisen kann und auch einen transparenten DNS Proxy mit Mitlesefunktion einrichten kann. Dies wollen wir verhindern.

DNS am rmnet[*] über Orbot DNS Port 5400 umleiten

Das mobile Daten Interface heisst rmnet0. Wir müssen nun die ausgehenden Pakete, welche unser Gerät über rmnet0 zu einer IP und deren Port 53 verlässt so umleiten, dass wir den von Orbot auf 127.0.0.1 Port 5400 angebotenen DNS verwenden. Dieser wird dann verschlüsselt über Tor geleitet.

AFWALL+ Custom Script erweiter

Wir ändern das Script aus Teil 4, welches die passenden Iptable Einträge zum Zugriff auf die eigenen Server beinhaltet. Ich bevorzuge generell Self-Hosting im eigenen Hause, jedoch ist die Vorgangsweise bei einem gemieteten VPS gleich.

Das Script sollte wie folgt aussehen:

# Load in AFWALL with
# . /pathoscript/script
# the ". " is required
# Necessary at the beginning of each script!
IP6TABLES=/system/bin/ip6tables
IPTABLES=/system/bin/iptables

# Rules for KMJ
# https://github.com/ukanth/afwall/wiki/CustomScripts

# Deny IPv6 only connections  
# We do not have IPv6 here
$IP6TABLES -P INPUT DROP
$IP6TABLES -P FORWARD DROP
$IP6TABLES -P OUTPUT DROP

# Block all IPv6 in IPv4 communication (for native IPv6 connections only!)
# This must be done in our IPv4 tables!
$IPTABLES -A INPUT -p 41 -j DROP
$IPTABLES -A FORWARD -p 41 -j DROP

# Drop normal Multicast-addresses 
$IPTABLES -A INPUT -s 224.0.0.0/4 -j DROP
$IPTABLES -A INPUT -d 224.0.0.0/4 -j DROP
$IPTABLES -A INPUT -s 240.0.0.0/5 -j DROP
$IPTABLES -A INPUT -d 240.0.0.0/5 -j DROP
$IPTABLES -A INPUT -s 0.0.0.0/8 -j DROP
$IPTABLES -A INPUT -d 0.0.0.0/8 -j DROP
$IPTABLES -A INPUT -d 239.255.255.0/24 -j DROP
$IPTABLES -A INPUT -d 255.255.255.255 -j DROP

# TEIL5 DNS over Tor
# allow connections to p5400 then nat
# Force dns to use orbots port 5400 for rmnet[*] interface
$IPTABLES -A "afwall" -d 127.0.0.1 -p udp --dport 5400 -j ACCEPT
$IPTABLES -t nat -I OUTPUT -o rmnet+ -p tcp --dport 53 -j DNAT --to-destination 127.0.0.1:5400
$IPTABLES -t nat -I OUTPUT -o rmnet+ -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:5400
# END DNS over Tor

# EDIT HERE !!!!!!!!!!!!!!!!!!!!1
# Always allow connections to our own IP Blocks no matter the interface
$IPTABLES -A "afwall" --destination "IP1/Mask" -j RETURN
$IPTABLES -A "afwall" --destination "IP2/Mask" -j RETURN
$IPTABLES -A "afwall" --destination "IP3/Mask" -j RETURN

# if you are in need edit here too
# We add  our home nets if we are on wifi 
# we never connect to foreign wifi's
$IPTABLES -A "afwall-wifi" --destination "192.168.56.0/24" -j RETURN
# allow special external IPs if we are on via wifi/LAN
$IPTABLES -A "afwall-wifi" --destination "IPspecial" -j RETURN

Speichern Sie das Script als afwall.sh am Internen, oder SD Speicher und fügen Sie das Script in den Einstellungen -> Script so hinzu:

. /pfad/zumscript/afwall.sh

Wichtig, es muss mit einem . UND einem Leerzeichen beginnen, danach der Pfad und der Scriptname. “Apply rules” in der AFWALL+ dürfen keinen Fehler erzeugen und mit Rules anzeigen müssen die Regeln sichtbar sein. NUR DANN WEITERMACHEN!!

Nun kann die AFWALL+ fertig eingerichtet werden. Alle Apps, welche auf eigene Server und Dienste zugreifen, z.B. E-Mail, Riot Messenger, Mastodon Client, Owncloud, und vieles mehr benötigt keine Freischaltung des Datenverkehrs in der AFWALL+ Firewall, da der Zugriff zu den eigenen Servern, und wirklich nur zu diesen, im Script erlabut ist. Damit kann bei fehlerhafter App, bzw. einem Angriff die App keine Daten zu anderen senden. Weiters wird damit Tracking und vieles unschöne mehr, unterbunden.

Für mich ist es eine ziemlich perfekte Lösung, da die Privatsphäre nun extrem gut gesichert ist und alle Funktionen einwandfrei funktionieren.

In dieser Form ist Android/LineageOS auch für Firmen mit smarten Mitarbeitern verwendbar.

Paranoia

Wer jetzt glaubt, er hat nichts zu verbergen sollte sich, vor einer Aussage in diese Richtung, den folgenden Filme ansehen:

“Nothing to Hide (2017)”

available on one of these links:

auch in Deutsch verfügbar:

Nächste Schritte

Die Zukunft von mobilen Geräte bei professionellen Nutzern mit Bedarf an Privatsphäre wird sicher in Linux basierten Endgeräten liegen. Vermutlich wird es aber noch ein bis zwei Jahre dauern, bis diese als “Daily Driver” verwendbar sind. Mit der nun verfügbaren, sehr gut abgesicherten LineageOS Version ist bis dahin aber ein sehr sicherer Begleiter verfügbar.

Join my public room in the Matrix

If you like this blog entry feel free to join my public room by entering /join #kmj:matrix.ctseuro.com anywhere in the box to send a message!

Feedback via Matrix/Riot welcome!

NEUE VERSION DES ARTIKELS FINDET SICH HIER:

Deutsch: https://cpv.agency/kmjblog/2020/12/07/am-android-tablet-oder-smartphone-mit-lineageos-fuer-sicherheit-und-privatsphaere-sorgen/

English: https://cpv.agency/kmjblog/en/2020/12/07/am-android-tablet-oder-smartphone-mit-lineageos-fuer-sicherheit-und-privatsphaere-sorgen/

Debian Linux mit Firejail absichern!

Für Debian Linux gibt es hier im Blog bereits eine extrem interessanten Artikel zum Bau eines Debian basierten InHouse NAS mit verschlüsseltem Software-Raid (https://kmj.at/2018-06-14-inhouse-nas-mit-verschluesseltem-software-raid-teil-1). Teil 2 wird hier bald erscheinen.

Zusätzlich finden sich hier im Blog viele Artikel über den Einsatz von Linux und Open Source bei Unternehmen und Privatpersonen. Stöbern Sie einfach durch das https://kmj.at/inhaltsverzeichnis/ und lesen Sie weitere Artikel. Am besten starten Sie hier https://kmj.at/erfahrungsbericht-nach-vollst%C3%A4ndiger-umstellung-des-betriebes-auf-open-source-software/

Für spezielle Anwendungsfälle gibt es im https://digitalbooks24.com/ Buchshop verschiedene E-Books.

Sollte Ihnen das Blog gefallen, freue ich mich, wenn Sie für das EURAFRI Non-Profit Projekt eine kleine Spende erübrigen können. https://eurafri.com/contactanddonate/

Ein kritischer Punkt in der Absicherung von IT Systemen, insbesondere von Arbeitsplätzen auf denen Benutzer ohne IT Kenntnisse arbeiten, sind sogenannte Zero-Day Exploits (https://de.wikipedia.org/wiki/Exploit) und Software die offen, oder auch versteckt über Webseiten, E-Mail, Messenger und ähnliches an Benutzer übermittelt wird.

Es gibt einige wenige Exploits wo der Benutzer gar nichts machen muss und dieser Schadcode ausgeführt wird. In den meisten Fällen klickt aber der Benutzer in einer durch ein kommerzielles Betriebssystem sehr verbreiteten - Weiter, Weiter, Ja, Ja, OK - Mentalität auf Fragen und führt damit den Schadcode mit seinen Berechtigungen selbst aus. Dabei wurde niemand gehackt, sondern ein Benutzer hat einfach jegliche Sorgfaltspflicht ignoriert und das System und eventuell auch Daten am Server vorsätzlich vernichtet.

Die Aufgabe verantwortungsvolle Administratoren und Benutzer ist es nun die System bestmöglich gegen diese Benutzerfehler abzusichern, ohne die Möglichkeit zu arbeiten zu weit einzuschränken. Generell gilt aber, Sicherheit geht vor technisch unqualifizierten Aussagen und Wünschen der Anwender. Wir haben hier alle Arbeitsplätze auf Debian Linux umgestellt, aber Firejail sollte auch für jedes andere Linux gleich funktionieren.

Bei Debian is Firejail in den offiziellen Packages, d.h. ein

sudo apt-get install firejail

erledigt die Installation in kürzester Zeit.

Nun sollten wir alle Programme, welche Daten im Internet zeigen, bzw. austauschen so absichern, dass kein Zugriff auf interne Ordner und Dateien möglich ist. Nur ein minimaler Zugriff über Download Ordner solle gegeben sein. Zusätzlich sollen gewisse Bereiche nicht ausführbar markiert sein, damit das Programm in der Firejail Sandbox keinen Schaden anrichten kann.

Firejail hat eine riesige Liste an Standardprogrammen, für welche bereits sehr gute Profile mitgeliefert werden. Da es immer wieder lokale Abänderungen gibt, wurde folgende Art der Einrichtung gewählt:

# Einrichtung eines Firejail Config-Ordners im Home Verzeichnis
mkdir ~/.config/firejail/
cd ~/.config/firejail/
# Erstellen eines Benutzer Profiles, welche Standard Einstellungen beinhaltet
touch 0_KMJ_block.profile
# Als erstes geben wir Firefox in eine Firejail Sandbox
touch firefox.profile

Nun setzen wir im Benutzer spezifischen Konfigurationsdatei die gewünschten Einstellungen, die je nach Benutzer unterschiedlich sein können. Ich habe z.B. folgende Einstellungen gesetzt:

Dazu editieren wir: 0_KMJ_block.profile

blacklist /opt
blacklist ~/VirtualBox*
blacklist ~/OwnCloud*
blacklist ~/.Private
blacklist ~/Private
blacklist ~/.thunderbird
blacklist ~/Software
blacklist ~/.mozilla
blacklist ~/.ssh
blacklist ~/.putty
blacklist ~/.xca
blacklist ~/.vnc
blacklist ~/.remmina
blacklist ~/.thinclient*
blacklist ~/.android
blacklist ~/.joplin
blacklist ~/TEMP
blacklist ~/.scribus
blacklist ~/.FBReader

Diese Einstellungen sind aber abhängig von den Ordnern im Benutzer Home Verzeichnis.

Nun wollen wir den Firefox so einschränken, dass ein eventuell angerichteter Schaden möglichst gering ist. Dazu editieren wir: firefox.profile

## firefox Profile
## KMJ (https://kmj.at)
## 20200719
## Version 1.00

## you are able to test with:
## /usr/bin/firejail --profile=~/.config/firejail/firefox.profile  /bin/bash
## or start Firefox with (1 line!, Usinge Firefox ESR here)
## /usr/bin/firejail --profile=~/.config/firejail/firefox.profile  /usr/lib/firefox-esr/firefox-esr %u

###################################################################
## we include package firefox.profile and our standard config
## blacklist a additional folder too
###################################################################

include /etc/firejail/firefox.profile
include ~/.config/firejail/0_KMJ_block.profile
blacklist ~/Bilder*

Neue Konfigurationen sollten immer getestet werden. Dazu startet man firejail mit der bash:

/usr/bin/firejail --profile=~/.config/firejail/firefox.profile  /bin/bash
Reading profile /home/user/.config/firejail/firefox.profile
Reading profile /etc/firejail/firefox.profile
Reading profile /etc/firejail/whitelist-usr-share-common.inc
Reading profile /etc/firejail/firefox-common.profile
Reading profile /etc/firejail/disable-common.inc
Reading profile /etc/firejail/disable-devel.inc
Reading profile /etc/firejail/disable-exec.inc
Reading profile /etc/firejail/disable-interpreters.inc
Reading profile /etc/firejail/disable-programs.inc
Reading profile /etc/firejail/whitelist-common.inc
Reading profile /etc/firejail/whitelist-var-common.inc
Warning: networking feature is disabled in Firejail configuration file
Reading profile /home/user/.config/firejail/0_KMJ_block.profile
Parent pid 13973, child pid 13974
Warning: An abstract unix socket for session D-BUS might still be available. Use --net or remove unix from --protocol set.
Post-exec seccomp protector enabled
Seccomp list in: !chroot, check list: @default-keep, prelist: unknown,
Child process initialized in 116.44 ms
bash: /usr/share/bash-completion/bash_completion: Datei oder Verzeichnis nicht gefunden
$

Nun ist der Zugriff auf Dateien massiv eingeschränkt. Das Firefox Standard Profil lässt nur den Download Ordner im Home Verzeichnis zu und schützt damit andere Dateien vor einem Befall durch Ransom, Trojaner und Viren. Weiters darf in dieser Sandbox im Download kein Programm ausgeführt werden. Das erhöht den Schutz zusätzlich.

Wenn dementsprechend getestet, dann stellen Sie alle Starter in der Leiste, bzw. am Desktop auf:

/usr/bin/firejail --profile=~/.config/firejail/firefox.profile  /usr/lib/firefox-esr/firefox-esr %u

um. Theoretisch können Sie auch im /usr/local/bin eine Datei firefox-esr (755) mit diesem Inhalt anlegen.

Das funktioniert aber nur, wenn sichergestellt ist, dass /usr/local/bin vor /usr/bin im Path zieht:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Sicherer ist es die Starter zu ändern und zu wissen, wo Firefox in der Sandbox gestartet wird. Andernfalls kann bei Änderung des Path die Firejail Wirkung ohne Warnhinweis verloren gehen.

Nach dem Start von Firefox gehen Sie unter Datei->Öffnen und prüfen im Datei Browser noch einmal, dass alles gesperrt ist. Damit haben wir die Sicherheit beim Browsen im Internet dramatisch erhöht und insbesondere die Gefahr eine Ransom Verschlüsselung des Dateisystems ist nun extrem reduziert.

Nachdem das mit Firefox so gut funktioniert, stellen wir weitere Programme in eine Sandbox. Insbesondere bei der Verwendung von AppImages empfiehlt sich die Verwendung von Firejail.

Deltachat Appimage

Dazu laden wir das AppImage, hier das Deltachat AppImage in ein Verzeichnis im

# Download nach:
/opt/Firejail/deltachat/Software/DeltaChat.AppImage
chown ihrbenutzer:ihregruppe /opt/Firejail/deltachat/Software/DeltaChat.AppImage
chmod 750 /opt/Firejail/deltachat/Software/DeltaChat.AppImage

Danach erstellen wir das Profil:

Hilfe findet man hier:

https://man7.org/linux/man-pages/man5/firejail-profile.5.html

oder in der Shell mit dem

man firejail-profile

Kommando.

Erstellen der Datei: deltachat.profile

## Deltachat Profile
## KMJ (https://kmj.at)
## 20200719
## Version 1.00

## you are able to test with:
## /usr/bin/firejail --profile=~/.config/firejail/deltachat.profile  /bin/bash
## or start with (1Line!)
## /usr/bin/firejail --profile=~/.config/firejail/deltachat.profile  --appimage /opt/Firejail/deltachat/Software/DeltaChat.AppImage

###################################################################
## NOTES:
## you must d/l the appimage to /opt/Firejail/deltachat/Software
###################################################################

noblacklist ${HOME}/.config/DeltaChat
noblacklist ${HOME}/.cache

noblacklist /opt/Firejail/deltachat
blacklist   /opt

## Disable access
include /etc/firejail/disable-common.inc
include /etc/firejail/disable-programs.inc
include /etc/firejail/disable-passwdmgr.inc
include /etc/firejail/disable-devel.inc
include /etc/firejail/disable-exec.inc
include /etc/firejail/disable-interpreters.inc
include /etc/firejail/disable-programs.inc

## Security filters
caps.drop all
netfilter
nodvd
nonewprivs
noroot
protocol unix,inet,inet6
nogroups
shell none

## Filesystem
disable-mnt
private-cache
private-tmp
private-dev
private-etc resolv.conf

private-bin bash,sh,grep,tail,env,gpg,id,readlink,dirname,test,mkdir,ln,sed,cp,rm,getconf

private /opt/Firejail/deltachat

# Blacklist
blacklist /boot
blacklist /mnt
blacklist /media
blacklist /root
blacklist /srv


RIOT.im / Element.io / Matrix.org

Danach mit der bash wieder testen und dann den Starter von Deltachat ändern. Natürlich sollen auch Electrum, Linphone, Midori, Thunderbird, vlc und andere in eine Sandbox.

Da immer mehr Unternehmen und Benutzer auf Element/Riot umsteigen und proprietäre Datensammel-Messenger verbieten will ich hier aber noch zeigen, wie man den von Millionen benutzten, extrem beliebten, sicheren, kostenlosen, Open Source Messenger Riot.im (seit July 2020 jetzt Element.io) in eine Sandbox gibt.

Der Element Matrix Client installiert sich unter /opt/Element. Für unsere Profile benötigen wir noch:

mkdir -p /opt/Firejail/element/.cache
mkdir -p /opt/Firejail/element/.config
mkdir -p /opt/Firejail/element/.local
mkdir -p /opt/Firejail/element/Transfer

Wir reichten es so ein, dass der Messenger nur auf das Transfer Verzeichnis zugreifen darf. Bilder die hochgeladen werden müssen vorher dort hinein kopiert werden. Speichern geht nur in dieses Verzeichnis. Danach weg kopieren, wo auch immer der endgültige Speicherort ist.

HINWEIS: Sollte der Element Matrix Client bereit installiert sein, einfach stoppen und die Verzeichnisse ~/.config/Element* nach /opt/Firejail/element/.config verschieben.

Danach das element.profil anlegen:

## Element Profile
## KMJ (https://kmj.at)
## 20200719
## Version 1.00

## you are able to test with:
## /usr/bin/firejail --profile=~/.config/firejail/element.profile  /bin/bash
## or start with
## /usr/bin/firejail --profile=~/.config/firejail/element.profile  /opt/Element/element-desktop --profile=MultiProfileName
##  --profile=MultiProfileName is optional

###################################################################
## NOTES:
## home is /opt/Firejail/element
###################################################################

noblacklist ${HOME}/.cache/element
noblacklist ${HOME}/.config/element
noblacklist ${HOME}/.local/share/element

noblacklist /opt/Firejail/element
blacklist /opt/Firejail

## Disable access
include /etc/firejail/disable-common.inc
include /etc/firejail/disable-programs.inc
include /etc/firejail/disable-passwdmgr.inc
include /etc/firejail/disable-devel.inc
include /etc/firejail/disable-exec.inc
include /etc/firejail/disable-interpreters.inc
include /etc/firejail/disable-programs.inc

## Security filters
caps.drop all
netfilter
nodvd
nonewprivs
noroot
protocol unix,inet,inet6
nogroups
shell none

## Filesystem
disable-mnt
private-cache
#otherwise we have no icon in taskbar
#private-tmp
private-dev
private-etc resolv.conf,localtime

private-bin bash,sh,grep,tail,env,gpg,id,readlink,dirname,test,mkdir,ln,sed,cp,rm,getconf

private /opt/Firejail/element

# Blacklist
blacklist /boot
blacklist /mnt
blacklist /media
blacklist /root
blacklist /srv

Und auch hier wieder testen, testen, testen und danach erst den Starter ändern.

Dieser Beitrag zeigt, dass es mit sehr geringem Aufwand möglich ist die Sicherheit massiv zu erhöhen. Bei einem Rollout für verschieden Systeme und mehrere Benutzer bietet sich eine Verteilung über NFS oder SMB basierte Home-Verzeichnisse, bzw. eine Verteilung über Owncloud (https://kmj.at/professionelle-zusammenarbeit-einfachstes-handling-und-gesch%C3%BCtzter-austausch-von-dateien-mit-owncloud/) an.

Damit ist es Administratoren möglich die Verwaltung zentral durchzuführen und den Aufwand zu reduzieren.

Natürlich ist mehr Sicherheit im Vorfeld etwas mehr Aufwand und das Warum sollte auch den Benutzern in einer Schulung erklärt werden. Wenn Benutzer das “Warum” verstehen wird mit der sicheren Lösung gerne gearbeitet.

Und ein Befall mit Verschlüsselungs- / Crypto- / Ransom-Software erzeugt einen Aufwand der brutal höher ist.

Sind Sie sicher, dass Sie ein ausgelagertes Backup haben, mit welchen Sie vom Stand 0 Ihre IT wieder herstellen können?

Sie sehen, der geringe Aufwand für mehr Sicherheit steht in keiner Relation zu einem Befall.


Infos & Support

Riot.im Räume:

Ich habe in der Matrix (kostenlos, Open Source) einen Raum eingerichtet in dem ich mich mit Freunden und netten Menschen austausche. Freundliche Menschen mit netten Umgangsformen, deutsch oder englisch sprechend, sind dort gerne willkommen.

  • Public room KMJ & friends (EN/DE) in der Matrix: #kmj:matrix.ctseuro.com
  • Eintreten durch Eingabe von /join #kmj:matrix.ctseuro.com in Ihrem Element Matrix Client (Riot).

Element.io / Riot.IM Info

INFO Im July 2020 wurde Riot.im in Element https://element.io/ umbenannt. Es handelt sich um eine reine Namensänderung bei gleichbleibenden Funktionen des Matrix Clients.

Anleitung:

https://kmj.at/riot-im-messenger-kurzanleitung-fuer-benutze-updated/

Profi Support

  • Professionelle Hilfe bei Open-Source Lösungen bietet seit 1985 die CTS GMBH https://cts-solutions.at (professionelle IT Lösungen seit 1985!)

Riot.IM Messenger: Kurzanleitung für Benutzer mit Videos (Stand 07/2020)

UPDATE 2020-07-17

Der Riot Messenger wurde in Element umbenannt!

Zuerst ein Hinweis für englischsprechende Besucher:

English language documents:

I wrote an more detailed english version for my https://EURAFRI.com Business Networking Project! If you need more details than shown here please visit https://eurafri.com/info-whatsinside/ and choose the Riot area.

If you want to run your own free and Open Source Matrix/Synapse Server, which is the server side part of the Riot Messenger, find a 30-Minute ready-to-go tutorial here https://kmj.at/how-to-setup-your-matrix-synapse-messaging-homeserver-may-2019-english/ Create your own homeserver, connected to the Matrix!

Riot Messenger, die neue Art der Kommunikation!

  • Freie Open Source Anwendung
  • verfügbar für Windows, Linux, Mac, Android und IOS
  • Unterstützt End-to-End Verschlüsselung ohne Mitleser, auch bei Gruppenchat!
  • Chat, Voice und Video. Voice verschlüsselt, wenn der Raum verschlüsselt ist!
  • Der Referenz Client für den Matrix Server.
  • Jeder kann seinen eigenen Matrix Server betreiben oder sich auf einem öffentliche Server einen Account lösen.
  • Jeder Benutzer kann mit allen Benutzern, auch von anderen Servern, kommunizieren (Federation).

Auswahl eines öffentlichen Homeservers (Ihr Zuhause)

Außer dem matrix.org Server des Projektes können Sie jeden öffentlichen Server z.B. aus dieser Liste als Ihren Server wählen:

privacytools.io wird in dieser Anleitung referenziert, es ist aber egal für welchen Server Sie sich entscheiden.

Erfreuliche News

Es ist sehr erfreulich, dass immer mehr Menschen auf Ihre Privatsphäre und Daten achten. Langsam bildet sich auch bei breiteren Bevölkerungsschichten ein Bewusstsein für mehr Kontrolle über die eigenen Daten aus. Riot.im als Anwendung für den Benutzer in Verbindung mit dem Open Source Matrix Synapse Server (Matrix.org) ist mehr als ein Messenger, es ist ein Tool für dezentralisierte Zusammenarbeit, Internettelefonie, Videotelefonie und Messaging. Durch den dezentralen Aufbau wird nur eine minimale Menge an Metadaten erzeugt und bei aktivierter End-to-End Verschlüsselung ist Mitlesen auch am Server unmöglich. Da so viele Menschen in die Matrix wechseln und dieser Beitrag extrem oft abgerufen wird, erfolgte nun ein Update der Anleitung.

Dezentraler Aufbau heißt, dass alle Matrix Server, ähnlich wie bei E-Mail untereinander kommunizieren können. Der Benutzer verbindet sich zu seinem Homeserver und damit wird seine IP für Betreiber anderer Server, bzw. Kommunikationspartner, auch nicht sichtbar.

Anleitungen

Matrix Server (nur für alle, die selbst einen Server betreiben möchten)

Unter https://kmj.at/how-to-setup-your-matrix-synapse-messaging-homeserver-may-2019-english/ findet sich eine Anleitung zur Einrichtung eines eigenen Servers. Alle die einen eigenen Server für sich, Freunde oder die Firma an die Matrix anschließen wollen, finden sich hier alle Informationen für das sehr einfache Setup.

Riot.im (für alle Benutzer, Step-by-Step Anleitung)

Riot.im ist die App zum Einstieg in die Matrix für alle die einfach und sicher kommunizieren wollen!. Das wirklich genial daran ist, dass es die Riot App für IOS (Apple), Android, Windows, MAC und Linux gibt und man mit allen Geräten gleichzeitig online sein kann. Alle Geräte sind immer synchron und es ist egal, wo man gerade liest oder kommuniziert.

Diese Anleitung zeigt, wie man einen Account anlegt und den ersten Chat startet.

1) Registrierung des Accounts

Jeder Benutzer in der Matrix benötigt einen Account auf einem Homeserver. Ähnlich wie bei E-Mail haben die Adressen 2 Teile. Zum Beispiel ist meine Adresse:

  • @karl:matrix.ctseuro.com

Diese Adresse besteht auf dem @, welche die Adresse eröffnet. Danach folgt der Name des Benutzers am Homeserver, in meinem Fall karl. Die Trennung des Namens und der Servers erfolgt durch einen :. Danach folgt der Servername, auf dem der Benutzer einen Account hat, in meinem Fall am Server matrix.ctseuro.com.

Wir registrieren für diese Anleitung einen Account bei privacytools.io, welchen wir aus obiger Liste ausgewählt haben. Um den Account zu registrieren gehen wir auf:

klicken dort auf Konto erstellen und geben in der folgenden Maske

Benutzernamen und Passwort ein. Als Open Source Messenger sammelt Riot, anders als zentrale Datensilos keine Telefonnummern, oder E-Mail Adressen. Damit ist auch die Eingabe einer E-Mail Adresse nicht notwendig. Auf mobilen Endgeräten fragt Riot höflich um den Zugriff auf Kontakt, Mikorofon und Kamera. Den Zugriff auf die Kontakte sollte man generell ablehnen und Mikrofon und Kamera benötigt man nur, wenn man über Riot auch telefoniert, bzw. Videochats führt.

ACHTUNG Ohne E-Mail Adresse kann das Passwort natürlich auch nicht über diese zurückgesetzt werden. Ändern kann man es in den Einstellungen, aber wer sein Passwort vergisst hat den Account für immer verloren! Also Passwort gut merken. Es empfiehlt sich ein Passwort Safe ala Keepass.

Danach auf Registrieren klicken und die Frage nach der fehlenden E-Mail mit fortfahren beantworten.

Danach befinden wir uns bereits in der Webversion des Riot Messengers. Diese wollen wir aber, da wir überall mit End-to-End Verschlüsselung arbeiten wollen, nicht verwenden. Details dazu später. Über Einstellungen -> Abmelden melden wir uns ab. Abmelden ist extrem wichtig!

Beim Abmelden werden wir gefragt, ob wir die Schlüsselsicherung verwenden wollen. Dazu muss ich etwas ausholen, dieser Punkt ist aber sehr wichtig.

Ich versuche es nicht ganz so technisch, einfach verständlich zu erklären. Jedes Gerät eines Benutzers hat einen Schlüssel, zusätzlich haben Räume Schlüssel. Jeder Chat is ein Raum. D.h. 1:1 Chat ist ein Raum mit den beiden Benutzern, ein Gruppenchat ist ein Raum mit mehr als zwei Benutzern. Diese Schlüssel werden auf dem Endgerät gespeichert und wären einem anderen Gerät am selben Account nicht zugänglich. Zusätzlich löscht das Programm beim Abmelden aus Sicherheitsgründen alle Schlüssel. Um nun sicherzustellen, dass diese Schlüssel nicht verloren gehen – dann wären ältere Chats mangels fehlender Schlüssel nicht mehr lesbar – wurde die Möglichkeit eines Schlüsselbackups am Server eingerichtet.

Es ist ganz wichtig ein wirklich langes und sicheres Passwort zu verwenden und sich dieses und den Wiederherstellungsschlüssel sehr gut zu merken! (Keepass!) Es kann niemand helfen! Wer vergisst, hat verloren!

Ein Klick auf Beginne die Schlüsselsicherung zu nutzen bringt die Passwortabfrage. Hier wird das sichere Passwort eingegeben und auf Nächstes geklickt.

Nun ist es ganz wichtig den Wiederherstellungsschlüssel sicher zu verwahren!

Nicht fortfahren, bevor alles gut gesichert verwahrt ist! In die Zwischenablage kopieren und verwenden, bzw. herunterladen. Danach OK!

Und bei Erfolg noch einmal OK!

Nun, da die Schüssel gesichert sind, noch einmal Einstellungen und Abmelden, danach sollte die Abmeldung erfolgen.

2) Installation und Start der Riot APP

Der Riot Messenger ist für alle Betriebssysteme verfügbar und es können mehrere Geräte gleichzeitig verwendet werden. Z.B. am PC und am Handy, oder Tablet. Wir verwenden in dieser Anleitung die PC Version, jedoch funktionieren Android und IOS analog dazu.

Das Programm laden wir von https://riot.im und installieren es am System.

Danach den Riot Messenger starten und auf Anmelden klicken oder tippen.

Nun ist es notwendig den Homeserver umzustellen. Als Default ist matrix.org vorgegeben, d.h. wir klicken auf Ändern und geben den Homeserver: - https://chat.privacytools.io

und unsere zuvor registrierten Benutzerdaten ein.

Die vollständige Matrix Adresse ist @meinwunschname:privacytools.io

Der Server gibt einen Raum vor. Hier einfach auf den Raumnamen klicken, dann auf das Zahnrad und den Raum verlassen und die Einstellungsseite mit dem X schließen.

Die persönlichen Einstellungen finden sich beim eigenen Namen unter Einstellungen. Pro Raum gibt es das Zahnrad für die Raumeinstellungen. Es gibt sehr viele Möglichkeiten Benachrichtigungen und anderes Wichtiges einzustellen.

Hinweis: MeinRiot läuft aus verschiedenen selbst eingestellten Gründen in Englisch, aber natürlich spricht Riot per Default, auf einem deutschsprachigen System Deutsch.

3) Schlüsselsicherung verbinden

Nun ist es ganz wichtig die zuerst erstellte Schlüsselsicherung zu aktivieren. Auf Connect this device, bzw, Verdinden Schlüsselsicherung klicken.

Passwort eingeben

Und fertig. Mit X wegklicken.

chritt 2 und 3 müssen pro Gerät, für welches dieser Account verwendet wird, wiederholt werden.

4) Der erste Chat

Wir starten mit einem 1:1 Chat und schreiben mich an. Dazu klicken wir auf das + neben Personen und geben meine Adresse @karl:matrix.ctseuro.com ein.

Mit Chat beginnen leiten wir den Chat ein. Danach muss gewartet werden, ob die Einladung zum Chat von der anderen Seite akzeptiert wird.

Wenn der Eingeladene den Raum betritt wird eine Statusmeldung ausgegeben:

WICHTIG: Der Chat ist aktuell noch nicht verschlüsselt!

Über das Zahnrad in die Raumeinstellungen gehen, dort auf Sicherheit und Datenschutz und den Verschlüsselungsregler auf EIN stellen:

und OK, danach mit X wegklicken:

Das Einschalten der Verschlüsselung wird als Statusmeldung eingetragen.

Sicher einer der gewöhnungsbedürftigsten Punkte beim Umstieg ist die Verschlüsselung. Um es für Benutzer ohne Kenntnisse über Verschlüsselung und Kryptografie verständlich zu machen:

  • Nachdem die Verschlüsselung aktiviert wird, erscheinen bei anderen Benutzern orange Warndreiecke. Nun müssen die Schlüssel (einer oder mehrere pro Benutzer) verifiziert werden. Danach erscheint beim Schreiben ein grünes Schloss.
  • Bei Gruppenräumen kann es sinnvoller sein, die Warnmeldung mit „Trotzdem senden“ zu quittieren und nicht alle Benutzer des Raumes zu verifizieren.

Um die Geräte eines Benutzers zu verifizieren, klickt man auf den Benutzer und lässt sich die Geräteliste anzeigen. Mit Verifizieren kann man die Geräte verifizieren. Am besten mit Legacy Verifizierung verwenden (für veraltete Clients), das geht am schnellsten.

Dieser Vorgang muss für alle Geräte durchgeführt werden, andernfalls muss die Warnmeldung mit „Trotzdem senden“ quittiert werden, um Text zu senden.

HINWEIS

Bitte keine Suppportanfragen oder ähnliches an meine persönliche Adresse richten.

Es gibt einen öffentlichen Raum, den Sie über die Raumliste, oder durch Eingabe von

  • /join #kmj:matrix.ctseuro.com

betreten können. Hier helfe ich ab und zu mit Tipps aus.

Verschiedenes

Aufbau Mobile:

Musterbild zeigt die Android App, die Symbole sind aber auf allen Systemen gleich.

Im Hauptbereich sieht man:

  • Favoriten (über die Raumeinstellungen)
  • Personen (1:1 Kommunikation)
  • Räume (Gruppenkommunikation)
  • Niedrige Priorität (Nur Sortierung, sonst, keine Auswirkung)

In der Auswahlleiste unten:

  • Zurück zum Home Schirm
  • Favoriten anzeigen
  • Personen anzeigen
  • Räume anzeigen
  • Communities anzeigen

Communities:

Du kannst Communities (bestehen aus Personen und Räumen) erstellen, beitreten, oder eingeladen werden. Communities machen die Kommunikation, bzw. die Organisation von Projekten einfacher, da man in einer Ansicht alle Personen und Räume sieht. In der PC App und am Tablet werden die Communitysymbole für eine einfachere Navigation auch links angezeigt.

Räume:

Riot besteht aus Räumen, auch 1:1 Chats sind Räume, jedoch mit nur 2 Personen. Gruppenräume sind für mehrere Personen offen. Der Eröffner des Raumes ist Administrator und kann über das Zahnrad, bzw. über das Menü des Raum verwalten. Nur bei 1:1 Räumen sind beide Gesprächspartner Raumadministrator. Räume können manuell den Favoriten, bzw. der niedrigen Priorität zugeordnet werden. Damit bleibt die Übersicht gewahrt.

Räume haben vielfältige Einstellungsmöglichkeiten für Berechtigungen, Bild, Beschreibung und vieles mehr. Alle Einstellungen finden sich im Zahnrad, bzw. über die Raumeinstellungen. Die wichtigste Einstellung ist, egal ob 1:1 oder Gruppe, die Verschlüsselung zu aktivieren. Damit ist alles sicher End-to-End verschlüsselt.

Adressen in der Matrix:

Ähnlich wie bei E-Mails werden die Adressen in der Matrix aufgebaut und bestehen auch aus Benutzer und Domain. Eine persönliche Adresse sieht so aus:

  • @benutzername:server.com

Anders als bei E-Mails ist die erste Stelle speziell:

@ - steht für eine Person
# - steht für einen Gruppenraum
+ - steht für eine Community

Danach folgt der Benutzername und durch : getrennt der Server auf der der Benutzer registriert ist. Da sich aktuell sehr viele am öffentlichen Matrix Server registrieren sehen viele Adressen so aus:

@meinname:matrix.org

Wenn jemand auf einem anderen Server registriert ist, wie z.B. ich, dann sieht die Adresse z.B. so aus:

@karl:matrix.ctseuro.com

Mit dieser Adresse kann man einen 1:1 Chat mit dieser Person starten. Wenn Sie die Adresse eines Raumes kennen, können Sie durch Eingabe von:

- /join #kmj:matrix.ctseuro.com

einen Raum betreten.

Sprachnachrichten

Multi Account auf Android und LineageOS

  • Riot.IM für Account 1 installieren
  • miniVector (Riot Version ohne Telefonie) für Account 2 installieren

Security Hinweis

  • Riot Versionen der Version 1.5.4 sollten raschest upgedated werden

Cross Signing Update

Am Android Tablet oder Telefon mit LineageOS für Privatsphäre sorgen. (Teil 4)

Es wurde ein Teil 5, Upgrade auf LineageOS 17.1 hier https://kmj.at/android-lineageos-privacy-teil5/ veröffentlicht.

LineageOS, ein alternatives Android Betriebssystem für Tablet und Telefon!

LineageOS ist ein Betriebssystem für Smartphones und Tabletcomputer. Es ist eine Modifizierung des von Google entwickelten freien Betriebssystems Android und der Nachfolger des eingestellten Custom-ROMs CyanogenMod. LineageOS ist Freie Software und wird von einer Gemeinschaft Freiwilliger entwickelt, die das Betriebssystem gratis zum Herunterladen bereitstellen. Mehr Infos auf der Wikipedia Seite (https://de.wikipedia.org/wiki/LineageOS)

Vorraussetzung ist ein Geräte welches offiziell unterstützt wird (https://wiki.lineageos.org/devices/) oder ein Custom Rom, z.B. von https://forum.xda-developers.com/ existiert.

WICHTIG: Mit diesem Vorgang verlieren Sie Ihre Garantie, können Ihr Gerät zerstören und niemand wird Ihnen helfen. Ich beschreibe hier den Vorgang meiner Umstellung und ermutige Sie in keinem Fall den Vorgang an Ihrem Gerät durchzuführen. Wenn Sie es machen, dann sind Sie auf sich alleine gestellt und für den Fall dass Sie das Gerät zerstören sind einzig und alleine Sie selbst verantwortlich. Niemand und schon gar nicht ich, hafte für Dinge die Sie mit Ihrem Gerät tun!

Teil 4

Custom Script um Zugriff zu eigenen IP Adressen global zu erlauben und Rules um notwendigen Traffic zu anonymisieren

Basierend auf dem ersten Tests von LineageOS auf einem Samsung SM-T585 Tablet (https://kmj.at/2018-09-12-android-lineageos-samsung-sm-t585-privacy/), sowie dem Teil 2 der Serie (https://kmj.at/2018-10-01-android-lineageos-privacy-teil2/) wurden im Teil 3 die ersten Releasewechsel durchgeführt (https://kmj.at/android-lineageos-privacy-teil3/).

Zwischenzeitlich kann LIneageOS auch als virtuelle Maschine betrieben werden (https://kmj.at/betrieb-einer-virtuellen-maschine-vm-mit-lineageos-android-unter-proxmox/) Nun geht es darum, den kompletten Datenverkehr ins Internet und damit die Übertragungvon Daten zu Drittanbietern zu verhindern, sowie auch das “Calling Home” von Software (Apps) zu verhindern und trotzdem eine perfekte Funktion zu erhalten.

AFWall+ als Firewall schaltet bereits jetzt Apps zum Datenverkehr frei, oder sperrt diese, jedoch ist immer das Problem, dass wenn man eine App für den Datenverkehr freischaltet, dass diese sich ins gesamte Internet verbinden kann und nicht nur zu den eigenen Servern und Services.

Zusätzlich wollen wir den Systemdiensten den Zugriff zum Internet verbieten und jeglichen verbleibenden Datenverkehr über das Tor Netzwerk anonymisieren. Bezüglich Tor lassen Sie sich von Unwissenden keine Schauergeschichten erzählen. Tor ist ein Overlay Netzwerk, wie andere VPNs auch, kann aber die Anonymisierung viel besser. Tor rettet Journalisten und anderen Berufsgruppen in kritischen Bereichen die persönliche Freiheit und oft auch das Leben. Tor ist natürlich vollkommen legal und erlaubt. Reden Sie mit Profis und nicht mit Menschen die etwas erzählen, dass Sie von jemanden gehört haben, der etwas gehört hat.

Schritte:

  • Jeglichen ein- uns ausgehenden Traffic verbieten
  • Global allen Apps den Zugriff auf die eigenen Server und Services erlauben
  • Sonstigen Apps, welche unbedingt notwendig sind, den anonymisierten Zugriff ins Internet erlauben

Benötigt wird das Paket Orbot aus dem F-Droid Store. Aktivieren Sie keinen VPN Modus von Orbot. Der reine Dienst reicht, die Umleitung der Pakete über Tor wird durch AFWALL+ erreicht.

WICHTIG Bei Verbindungsproblemen beachten:

I have found an extremely simple solution to the problem of tor control not working with default settings of AFWall and Orbot. Maybe you could include this in your FAQs. Do the following, if your app cannot connect to the internet via tor, even though you checked the tor check box in AFWall (in addition to choosing at least one of the check boxes for Wifi, Mobile data, VPN...) :

- In Orbot tap the three dots in the top right corner.
- Select "Settings".
- Scroll down to section "Debug".
- Tap on "Tor TransProxy Port", remove "auto" and type "9040". Press "OK".
- Tap on "Tor DNS Port", remove "auto" and type "5400". Press "OK".
- Return to Orbot main screen, tap the three dots in the top right corner. Select "Exit".
- Start Orbot again and connect to tor. Now tor control in AFWall should work flawlessly.

Orbot sollte in den Einstellungen so aktiviert werden, dass beim Start von LineageOS Orbot automatisch startet.

AFWALL+ konfigurieren und Custom Script einrichten

Zuerst muss in den AFWALL Settings die getrennte Verwaltung von VPN und Tor aktiviert werden.

AFWALL+ Custom Script erstellen

Nun benötigen wir ein Script, welches die passenden Iptable Einträge zum Zugriff auf die eigenen Server beinhaltet. Ich bevorzuge generell Self-Hosting im eigenen Hause, jedoch ist die Vorgangsweise bei einem gemieteten VPS gleich.

Das Script sollte wie folgt aussehen:

# Load in AFWALL with
# . /pathoscript/script
# the ". " is required
# Necessary at the beginning of each script!
IP6TABLES=/system/bin/ip6tables
IPTABLES=/system/bin/iptables

# Rules for KMJ
# https://github.com/ukanth/afwall/wiki/CustomScripts

# Deny IPv6 only connections  
# We do not have IPv6 here
$IP6TABLES -P INPUT DROP
$IP6TABLES -P FORWARD DROP
$IP6TABLES -P OUTPUT DROP

# Block all IPv6 in IPv4 communication (for native IPv6 connections only!)
# This must be done in our IPv4 tables!
$IPTABLES -A INPUT -p 41 -j DROP
$IPTABLES -A FORWARD -p 41 -j DROP

# Drop normal Multicast-addresses 
$IPTABLES -A INPUT -s 224.0.0.0/4 -j DROP
$IPTABLES -A INPUT -d 224.0.0.0/4 -j DROP
$IPTABLES -A INPUT -s 240.0.0.0/5 -j DROP
$IPTABLES -A INPUT -d 240.0.0.0/5 -j DROP
$IPTABLES -A INPUT -s 0.0.0.0/8 -j DROP
$IPTABLES -A INPUT -d 0.0.0.0/8 -j DROP
$IPTABLES -A INPUT -d 239.255.255.0/24 -j DROP
$IPTABLES -A INPUT -d 255.255.255.255 -j DROP

# EDIT HERE !!!!!!!!!!!!!!!!!!!!1
# Always allow connections to our own IP Blocks no matter the interface
$IPTABLES -A "afwall" --destination "IP1/Mask" -j RETURN
$IPTABLES -A "afwall" --destination "IP2/Mask" -j RETURN
$IPTABLES -A "afwall" --destination "IP3/Mask" -j RETURN

# if you are in need edit here too
# We add  our home nets if we are on wifi 
# we never connect to foreign wifi's
$IPTABLES -A "afwall-wifi" --destination "192.168.56.0/24" -j RETURN
# allow special external IPs if we are on via wifi/LAN
$IPTABLES -A "afwall-wifi" --destination "IPspecial" -j RETURN

Speichern Sie das Script als afwall.sh am Internen, oder SD Speicher und fügen Sie das Script in den Einstellungen -> Script so hinzu:

. /pfad/zumscript/afwall.sh

Wichtig, es muss mit einem . und einem Leerzeichen beginnen, danach der Pfad und der Scriptname. “Apply rules” in der AFWALL+ dürfen keinen Fehler erzeugen und mit Rules anzeigen müssen die Regeln sichtbar sein. NUR DANN WEITERMACHEN!!

Nun kann die AFWALL+ fertig eingerichtet werden. Alle Apps, welche auf eigene Server und Dienste zugreifen, z.B. E-Mail, Riot Messenger, Mastodon Client, Owncloud, und vieles mehr benötigt keine Freischaltung des Datenverkehrs in der AFWALL+ Firewall, da der Zugriff zu den eigenen Servern, und wirklich nur zu diesen, im Script erlabut ist. Damit kann bei fehlerhafter App, bzw. einem Angriff die App keine Daten zu anderen senden. Weiters wird damit Tracking und vieles unschöne mehr, unterbunden.

Eine vollständige Konfiguration sieht so aus:

Die Einstellungen heißen im Detail,

  • Bei Kernel, Zeitserver, Medienspeicher, Updater und Android System wir der Internetzugriff über Tor umgeleitet und anonymisiert.
  • F-Droid und Aurora Store benötigen, da Tor support in der App, nur die Tor Erlaubnis
  • Die DuckDuckGo, Fennec und Firefox Browser kommen nur über Tor ins Internet
  • Das IBKR Programm darf ohne Anonymisierung ins Internet
  • Der Riot.im scheint hier auf, da auf diesem Gerät 3 Riot Accounts installiert sind und einer davon auf den Matrix.org Server zugreift. Diesetwegen scheinen 2 Riot nicht auf (Zugriff im Sript erlaubt) und der dritte Account wird durch Tor anonymisiert zu Matix.org geleitet
  • Jeglicher anderer Traffic ist ein- und ausgehend blockiert

Für mich ist es eine ziemlich perfekte Lösung, da die Privatsphäre nun extrem gut gesichert ist und alle Funktionen einwandfrei funktionieren.

In den nächsten Wochen wird nich versucht die Kernel und Android System Zugriffe komplett zu verhindern um jeglichen Datenverkehr mit Dritten ohne mein Wissen zu verbieten.

In dieser Form ist Android/LineageOS auch für Firmen mit smarten Mitarbeitern verwendbar.

Paranoia

Wer jetzt glaubt, er hat nichts zu verbergen sollte sich, vor einer Aussage in diese Richtung, den folgenden Filme ansehen:

“Nothing to Hide (2017)”

available on one of these links:

auch in Deutsch verfügbar:

Update 20200702 Greentooth

Um das Gerät weiter abzusichern sollte Bluetooth generell deaktiviert sein. Manuell wird das natürlich nie gemacht und deshalb empfehle ich die Installation von:

Deaktiviert automatisch mit einstellbarem Zeitraum, nach Disconnect der letzten Device, das Bluetooth Modul. Damit ist das Gerät nicht mehr über Bluetooth angreifbar.

Nächste Schritte

Die Zukunft von mobilen Geräte bei professionellen Nutzern mit Bedarf an Privatsphäre wird sicher in Linux basierten Endgeräten liegen. Librem5 und PinePhone arbeiten an Open Source Hardware und Software um dies zu ermöglichen.

Ein PinePhone ist bereits bestellt und Tests mit:

  • UBports (Ubuntu)
  • Mobian (Debian)

Linux basierten Versionen werden folgen. Vermutlich wird es aber noch ein bis zwei Jahre dauern, bis diese als “Daily Driver” verwendbar sind. Mit der nun verfügbaren, sehr gut abgesicherten LineageOS Version ist bis dahin aber ein sehr sicherer Begleiter verfügbar.

Join my public room in the Matrix

If you like this blog entry feel free to join my public room by entering /join #kmj:matrix.ctseuro.com anywhere in the box to send a message!

Feedback via Matrix/Riot welcome!

Betrieb einer virtuellen Maschine (VM) mit LineageOS (Android) unter Proxmox

LineageOS, ein alternatives Android Betriebssystem für Tablet und Telefon als VM betreiben!

Es gibt hier im Blog bereits 3 Teile ( https://kmj.at/android-lineageos-privacy-teil3/ ) die sich mit der Umstellung von Mobiltelefonen und Tablets auf LineageOS beschäftigen. Für verschiedene Anwendungsgebiete wurde nun nach einer Lösung gesucht, welche den Betrieb eines virtuelles Telefons ermöglicht, ohne ein physisches Telefon zu benötigen.

Die komplette Virtualisierung wurde bereits auf Proxmox unmgestellt, diese Anleitung funktioniert aber auch mit VMWare, VirtualBox und anderen Produkten zur Virtualisierung. Wir verwenden Proxmox da es den Open Source Gedanken voll weiter trägt.

Auf der Suche nach einer geeigneten Lösung wurde das Android-x86 Projekt gefunden ( https://www.android-x86.org/ ). Dieses bietet verschiedene Android und LineageOS Versionen zum Download an (Stand Mai 2020):

Die Entscheidung fiel auf die CM-x86-14.1-r4 Version, welche LineageOS 14.1 ist. Auch wenn Mobiltelefone und Tablets bereits auf 16.1 (Android 9, Pie) umgestellt wurden, ist die 14.1 (Android 7.1, Nougat) eine sehr stabile Version, mit welcher alle Einsatzgebiete abgedeckt wurden. Die Anleitung sollte aber für alle Versionen ident sein.

Das 64-Bit Iso mit dem Kernel 4.19 wurde herunter geladen:

  • 64-bit ISO with kernel 4.19:  cm-x86_64-14.1-r4-k419.iso

und danach als Boot ISO für die virtuelle Maschine verwendet und eine Installation vorgenommen.

Die virtuelle Maschine erhielt 2 Cores, 4GB RAM und 8 GB Harddisk.

Hinweis Das Tastaturlayout in der Konsole ist en-US und die Pfeiltasten wirken nicht. Es sollte zum weiterspringen die TAB Taste verwendet werden.

Hinweis Das Maus-Wheel funktioniert fast durchgehend für scrollen.

WICHTIG Bei der Installation, da Pfeiltasten nicht funktionieren, mit der I Taste auf Instalation springen!

Wie in den E-Books

beschrieben, betreibe ich ein abgeschirmtes virtuelles Tor Netzwerk. In diesem Fall sollte das virtuelle WLAN mit dem Privoxy dieses Netzwerkes eingerichtet werden. Damit ist es möglich, den kompletten Internet Zugriff der virtuellen Maschine, ohne jede Möglichkeit eines IP Leaks, über das Tor Netz einzurichten.

Das virtuelle WLAN ist im Normalfall auf DHCP eingestellt und funktioniert in einem Netz mit DHCP Server reibungslos.

Nach Abgeschlossener Installation erscheint das LineageOS Startbild in der Konsole:

Mit Start->Einstellungen erreicht man die Einstellungen für das virtuelle WLAN, welches eine Verbindung mit der zugewiesenen Netzwerkkarte der VM ist. Hier kann man IP Daten und den Proxy einstellen.

Danach ist die Basisinstallation abgeschlossen. Wenn die VM z.B. hinter einem zentralen Tor Router betrieben wird, sollte noch eine Prüfung der IP erfolgen.

Für die weiteren Schritte sollte di Installation von Apps aus unbekannten Quellen erlaubt werden.

Das wichtigste Paket ist nun der F-Droid Store um ohne Anmeldung bei Google die notwendige Software installieren zu können. Die Adresse ist https://f-droid.org

Danach über Start->Dateien in den Downloads Ordner wechseln und das Paket installieren. Dabei können 2-3 Fragen, ob man das wirklich will gestellt werden. Diese müssen mit Ja beantwortet werden.

Nach dem Start von F-Droid werden die Paketquellen aktualisiert und danach erscheint die Anzeige der verfügbaren Programme (Apps).

Hinweis Wenn man den Google Play Store nicht verwendet, sollte man Google Play Protect abschalten! Andernfalls kann es Installationsfehler geben.

WICHTIG Bei einer Installation die die Verwendung eines Proxies benötigt, wie z.B. die Tor Installation, bzw. gut abgesicherte Netzwerke, dann unter Optionen den Proxy eintragen. Durch “nach unten ziehen - Maus Linksklick halten und nach unten ziehen” Paketlisten noch einmal aktualisieren.

Danach erscheinen dann die verfügbaren Programme.

Rooten des Gerätes

Sollten Programme (Apps) root benötigen:

Kurzanleitung:

  • Start->Einstellungen->Über das Tablet klicken
  • Runterscrollen zur Build-Nummer
  • 7-Mal auf die Build Nummer klicken
  • Unten erscheint: “Sie haben die Entwickler Services aktiviert”
  • Nun über das Menü (drei Striche links) Entwickleroptionen aufmachen
  • Root Zugriff auf “Nur Apps” stellen

Firewall installieren

Natürlich wollen wir auf der Device auch die volle Sicherheit einer IpTables Firewall, welche ein- und ausgehenden Traffic blockt. AFWall+ ist die perfekte Firewall und da die Device bereits gerooted ist, können wir die Firewall auf dem F-Droid Store gleich installieren. Für Firewall Anfänger empfiehlt es sich die Dokumentation zu lesen.

Damit ist der erste Teil der Testreihe abgeschlossen und man hat die Basis für virtuelle Setups von Android Software, bei Bedarf durch Tor geschützt und natürlich ohne SIM Karte oder Account bei einem Anbieter.

Join my public room in the Matrix

If you like this blog entry feel free to join my public room by entering /join #kmj:matrix.ctseuro.com anywhere in the box to send a message! Feedback welcome!

OwnCloud Einführung: Professionelle Zusammenarbeit, einfachstes Handling und geschützter Austausch von Dateien mit OwnCloud

Einleitung

Wie schon im Beitrag hier (https://kmj.at/erfahrungsbericht-nach-vollst%C3%A4ndiger-umstellung-des-betriebes-auf-open-source-software/) beschrieben kam, da proprietäre Dokumente auf der CTS MailWall geblockt werden, zum Datenaustausch mit Partnern ein eigener OwnCloud (https://owncloud.org) Server, natürlich betrieben hier im Haus, hinzu. Damit können Dateien über eine DMZ sehr sicher mit Dritten ausgetauscht werden und man vermeidet durch falsch verstandenes Whitelisting von E-Mail Adressen, bzw. die Entsperrung von gefährlichen Attachments die eigene IT Infrastruktur zu gefährden. Zusätzlich entfällt die Unhöflichkeit von riesigen E-Mail Attachments, meist an viele Benutzer, welche massiv Speicherplatz auf den E-Mail Servern benötigen.

Ich will hier nicht auf oft falsche, bzw. falsch verstandene E-Mail Setups und Endbenutzereinstellungen eingehen, da es sich hier um einen Beitrag zur Einsteiger-Schulung von OwnCloud Benutzern handelt.

Voraussetzung

Ich gehe davon aus, dass Ihnen Ihr Systembetreuer die OwnCloud Software auf einem Ihrer Server bereits eingerichtet hat. Der Betrieb des Servers erfolgt auf Standard LAMP Systemen und kann für Private auf auf einem Raspberry installiert werden. Für Enterprise Setups empfiehlt sich ein LAMP Server mit 2-4 Cores, 4 GB RAM und Festplattenplatz nach Bedarf. Für Unternehmenskunden ist die CTS Solutions (https://cts-solutions.at) seit 1985 Partner von innovativen und smarten Unternehmen, welche auf intelligente und zukunftsweisende Lösungen setzen.

Der Start

Folgen Sie mit Ihrem Browser dem Link, welche Ihnen Ihr Administrator übermittelt hat und geben Sie Ihre Login Daten in die Anmelde Maske ein.

Der Link wird so ähnlich aussehen: https://cloud.meinedomain.tld

Danach befinden Sie sich in der Hauptanzeige der Owncloud Software.

Kurzübersicht

Links unten bei Einstellungen finden Sie die WebDAV Adresse für Ihren Zugang. Damit Können Sie auf Ihren Datenspeicher per WebDAV zugreifen und z.B. den KeePass Passwort Manager zwischen all Ihren Geräten synchronisieren. Semi-professionelle IT Benutzer werden viele sehr interessante Möglichkeiten finden, die mit WebDAV Zugriff den Arbeitsalltag erleichtern.

Joplin (https://joplinapp.org/) ist neben KeePass nur eine der Anwendungen, welche deren Benutzer nicht mehr missen möchten.

Die Anzeigen Favoriten, “Mit Dir geteilt”, “Von Dir geteilt”, “Geteilt über Link”, listen die aktuellen Dateien , welche in diese Kategorie fallen.

Mit dem + Button können Sie Dateien und Ordner anlegen, sowie Dateien hochladen.

OwnCloud unterstützt, wenn vom Administrator eingerichtet, auch einen Papierkorb. Den Link dazu finden Sie links unten unter “Gelöschte Objekte”.

Die Drei waagrecht angeordneten Punkte öffnen ein Untermenü in dem Details angezeigt werden können. Zusätzlich besteht die Möglichkeit Dateien und Ordner umzubenennen, herunter zu laden, oder zu löschen.

Teilen mit Benutzern

Das “Teilen” Symbol, bestehend aus einem Punkt links, verbunden mit zwei Punkten rechts, öffnet recht das Unterfenster zum Bearbeiten der Teilen-Freigaben.

Teilen von Dateien und Ordnern mit Benutzern und Gruppen funktioniert mit lokalen Benutzern auf Ihrer OwnCloud Installation ebenso, wie mit Benutzern anderer OwnCloud Intallationen (verwenden Sie benutzer@AndereDomain.tld, wie vom anderen Benutzer mitgeteilt.). Für lokale Benutzer tippen Sie einfach die ersten 2-4 Buchstaben und es erscheint eine Liste.

Mit dem Zahnrad neben dem Benutzernamen öffnet sich das Untermenü und Sie können ein Ablaufdatum für die Freigabe und die Berechtigungen für diesen Benutzer einstellen. Ich empfehle immer ein Ablaufdatum zu setzen, damit man keine Freigaben vergisst.

Danach erscheint bei Ihnen die Freigabe unter “Von Dir geteilt”:

Beim Benutzer mit dem Sie das geteilt haben, erscheint es unter “Mit Dir geteilt” und erlaubt dem Benutzer die von Ihnen erteilten Berechtigungen.

Optimaler Datenaustausch mit Dritten

Eine der am meisten gebrauchten Funktionen bei OwnCloud ist das Teilen über einen Link. Ich empfehle Ihnen dringend immer ein Passwort und ein Ablaufdatum zu setzen. So schützen Sie sich vor Fehlern anderer und auch vor vergessenen Freigaben. Diese Funktion ermöglicht Ihnen:

  • Teilen einer Datei, bzw. eines Ordners mit anderen durch versenden eines Links. Der Empfänger des Links kann die von Ihnen erlaubten Funktionen durchführen und benötigt nur einen Browser. So werden keine Anhänge in verschiedensten E-Mail Systemen geblockt und der Empfänger kann mit einem Klick auf den Link Dateien, oder ganze Ordner downloaden.

  • Einrichten einer Upload Möglichkeit für Dritte durch versenden eines Links. Der Empfänger kann, nur mit dem Browser, Dateien hochladen, bzw. die erlaubten Funktionen ausführen. Auch hier reicht eine kleine E-Mail und durch Klick auf den Link kann der Upload durchgeführt werden.

Zum Empfang von Dateien richten Sie am besten einen neuen Ordner ein, klicken auf das Teilen Symbol und richten einen File Drop mit Passwort und Ablaufdatum ein. Setzen Sie wirklich immer ein Passwort, welches Sie dem Empfänger am besten über einen zweiten Kommunikationskanal (z.B. SMS) übermitteln und begrenzen Sie die Lebensdauer des Links mit einem Ablaufdatum.

Sie finden die Möglichkeit unter Teilen->Öffentliche Links->Öffentlichen Link erstellen.

Danach erscheint die Freigabe unter “Geteilt über einen Link”.

Nun können Sie den Link an den Empfänger übermitteln. Dafür stehen neben der Anzeige “Öffentlicher Link” mehrere Funktionen zur Verfügung.

  • Der erste Button kopiert den Link in die Zwischenablage und kann damit mit STRG+V (Einfügen) überall eingefügt werden.

  • Das Zahnrad ermöglicht Ihnen die Einstellungen der Freigabe zu bearbeiten

  • Das Teilen Button ermöglicht das Versenden des Links über soziale Netzwerke, oder E-Mail

Zusammenfassung

Wie Sie bereits gesehen haben, ist mit OwnCloud auf einfachste Weise, ein wirklich einfacher und professioneller Austausch von Daten mit Dritten möglich. Durch die Berechtigungsmöglichkeiten gibt es eine Vielzahl von weiteren Anwendungsbereichen, aber diese werden Sie selbst erkunden und damit das Einsatzgebiet von OwnCloud in Ihrem Hause Schrittweise erweitern.

Durch die https Verschlüsselung des Web Servers werden die Daten auch verschlüsselt über das Internet übertragen.

Sollten Sie kein PGP oder S/Mime E-Mail Verschlüsselungssystem installiert haben, werden Ihre E-Mails, für viele mitlesbar und ohne End-to-End Verschlüsselung, übertragen und eine Übertragung über OwnCloud ist alleine schon deswegen dringend anzuraten.

Profi Tip 1

Owncloud ist auch als Desktop Client (Windows, Linux, Mac) und für mobile Endgeräte (Android, IOS) verfügbar. Die Client Software ist unter https://owncloud.org/download/ kostenlos verfügbar.

Mit der Client Software können Sie die Ordner, oder Dateien Ihres OwnCloud Zugangs mit dem lokalen Datenspeicher (Festplatte, SD Karte, etc.) synchronisieren und haben die Daten auch offline zur Verfügung.

Im Desktop Bereich können Sie neue Uploads von Dritten dadurch sofort am PC verfügbar machen, ohne über den Browser einsteigen zu müssen. Neue Uploads werden automatisch mit PC oder mobilem Gerät synchronisiert.

Dateien, welche Sie in die jeweiligen Ordner kopieren, werden automatisch mit Ihrer Owncloud und gegebenfalls auch mit Benutzern vollautomatisch geteilt, ohne das Sie über den Browser einsteigen. So können Sie die Zusammenarbeit mit anderen professionell automatisieren.

Aufgenommene Fotos können vollautomatisch in Ihre OwnCloud hochgeladen werden und ind auf allen Geräte sofort verfügbar.

Profi Tip 2

OwnCloud ist in der Lage eine sogenannte Server-zu-Server Federation zu aktivieren. Damit können Unternehmen verschiedene Bereiche (Accounts, oder auch nur Ordner, bzw. Dokumente) über Federation zu verbinden.

Zusätzlich können Benachrichtigungen per E-Mail eingestellt werden:

Hilfe in der Matrix

Wie Sie sehen, ist Owncloud ein wirklich einfach zu bedienendes Tool, welches Ihren Arbeitsablauf, bei Wahrung der Privatsphäre mit voller Kontrolle über Ihre Daten, dramatisch vereinfachen kann.

Wie immer steht mein öffentlicher Raum in der Matrix für alle Interessierten zur Verfügung. Dieser kann mit dem Riot Messenger mit

/join #kmj:matrix.ctseuro.com

betreten werden. Sollten Sie diesen sicheren, kostenlosen, auf Privatsphäre ausgerichteten Messenger noch nicht verwenden, finden Sie die Anleitung dazu hier:

https://kmj.at/riot-im-messenger-kurzanleitung-fuer-benutze-updated/

How to Setup your Matrix Synapse Messaging Homeserver (Apr 2020/English)


There is a new version of this document here:

https://kmj.at/how-to-setup-your-matrix-synapse-messaging-homeserver-mar-2021-english/


Feel free to link to this page if you like this blog post, but do not copy/paste the text somewhere else without asking. If you want to post the text in full or partial on your site or blog you must add in bold inside a h1 tag:

This is the server side part, find client intro here:

This is the server side part. If you need a tutorial for the client side using Riot messenger I wrote an very detailed english version for my https://EURAFRI.com Business Networking Project! If you need more details than shown here please visit https://eurafri.com/info-whatsinside/ and choose the Riot area. In German you can find infos here: https://kmj.at/riot-im-messenger-kurzanleitung-fuer-benutze-updated/

FreeBSD PostgresQL Update 2019-10-30:

Be careful with updating, see updating section below. FreeBSD pkg wants PostgreSQL 11.5 now for py36-psycopg2 and turnserver. You can end up with deinstalled PostgreSQL 9.5 Server and create a problem. Read section below carefully!

Security Fix 2020-04-03:

The Twisted fix was already mentioned in the 1.12.0 release note, but due to a sqlite module load error, even one does not use it, updates was delayed till 1.12.1 comes out. Please upgrade Twisted to >=20.3.0 while env is activated using:

pip install 'Twisted>=20.3.0'

Cross Signing Update 2020-05-06


Just to be clear

This is how I have done it. Whatever you do, you do it for yourself. I am in no way responsible for anything. Everything you do is on your own risk!

Public Matrix Room

There is a public room #kmj:matrix.ctseuro.com where I answer questions from time to time in English or German. Please join if you have questions.

A guide to setup a Matrix Synapse Homeserver

End-to-end encrypted messenger and collaboration server using Python 3.7. We will add Turnserver for voice based communicatioa, add a firewall and more. If we are done you run your own homeserver which is able to communicate with all other matrix servers on the Internet via federation. Prefered Client on Linux, Mac, Windows, Android and IOS is https://riot.im .

At the time of writing this age we use FreeBSD 12.1. Newer FreeBSD Versions are very similar to setup.

prepare everything

For bare bone setup write the ISO to some USB stick, for virtual setup using Proxmox or VMWare, place the ISO on your host and create a virtual machine booting with the ISO file.

The required resources are:

  • RAM 4-6 GB for up to 100 users
  • 2-3 Cores
  • 80GB Harddisk
  • network card
  • static IP address with DNS entry pointing to it

Assume we create the homeserver matrix.ourdomain.com on IP 1.2.3.4. Each Matrix Synapse server is called homeserver. We have pointed an DNS A record matrix.ourdomain.com to IP 1.2.3.4. Check with nslookup matrix.ourdomain.com, or ping matrix.ourdomain.com that the name resolves.

NOTE: you must change ourdomain.com to your domain name and 1.2.3.4 to your IP!

Setup FreeBSD

Boot the ISO file and do a minimum setup of FreeBSD as described on FreeBSD.org. Enable sshd to be able to login. This sets the hostname, creates your user account, formats the harddisk and creates the partitions. Do not install ports or other stuff, except sshd. Finally reboot and login with the user you created. Detailed FreeBSD setup instructions is out of the scope of this document.

Setup additional software

use su to become root and enter y if asked to fetch and install pkg system.

  • pkg install ca_root_nss gcc mc bash curl wget
  • pkg install libffi libxslt jpeg
  • pkg install py37-virtualenv
  • pkg install py37-psycopg2
  • pkg clean -a

Create Environment

  • mkdir -p /home/synapse/env
  • virtualenv-3.7 -p python3.7 /home/synapse/env

Always use sh for working with virtualenv.

sh
. /home/synapse/env/bin/activate
(env) #

The env # must be shown and do not forget to add the . at the beginning of the line. If it is not shown you have made some error! Go back and recheck if this happens!

Setup basic Synapse inside virtualenv

While still showing (env) # do:

- pip install --upgrade pip
- pip install --upgrade setuptools

This should show:

 . /home/synapse/env/bin/activate
(env) # pip install --upgrade pip
Requirement already up-to-date: pip in /usr/home/synapse/env/lib/python3.7/site-packages (19.1.1)
(env) # pip install --upgrade setuptools
Requirement already up-to-date: setuptools in /usr/home/synapse/env/lib/python3.7/site-packages (41.0.1)

If this is fine, continue with:

  • pip install matrix-synapse[all]

This will take some time, download different things and should finally end without error.

Setup PostgreSQL Database

changed from 9.5 to 11.5 on 20191030

  • leave virtualenv with typing: deactivate
  • you should only see # without env now
  • pkg install postgresql11-server
  • sysrc postgresql_enable=yes
  • service postgresql initdb
  • service postgresql start

now we have a running PostgreSQL database engine.

Setup the Firewall, DNS, NTP and Mail.

Before we continue we should setup our firewall to avoid attacks while runnign our setup.

Create /etc/rc.firewall.KMJ with the following content:

#!/bin/sh -
#
# Setup system for ipfw(4) firewall service.
#

# Suck in the configuration variables.
if [ -z "${source_rc_confs_defined}" ]; then
        if [ -r /etc/defaults/rc.conf ]; then
                . /etc/defaults/rc.conf
                source_rc_confs
        elif [ -r /etc/rc.conf ]; then
                . /etc/rc.conf
        fi
fi

############

setup_loopback() {
        ############
        # Only in rare cases do you want to change these rules
        #
        ${fwcmd} add 100 pass all from any to any via lo0
        ${fwcmd} add 200 deny all from any to 127.0.0.0/8
        ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any
        ${fwcmd} add 400 deny all from any to ::1
        ${fwcmd} add 500 deny all from ::1 to any
}

. /etc/rc.subr
. /etc/network.subr

############
# Set quiet mode if requested
#
case ${firewall_quiet} in
[Yy][Ee][Ss])
        fwcmd="/sbin/ipfw -q"
        ;;
*)
        fwcmd="/sbin/ipfw"
        ;;
esac

############
# Flush out the list before we begin.
#
${fwcmd} -f flush
setup_loopback

############
#
# We do not allow IPv6 Traffic
${fwcmd} add deny  ip6 from any to any

# Allow TCP through if setup succeeded
${fwcmd} add pass tcp from any to any established

# Allow IP fragments to pass through
${fwcmd} add pass all from any to any frag

# Allow setup of incoming connections
         
${fwcmd} add pass tcp from ${MGMTIP} to me 22 setup     # SSH

${fwcmd} add pass tcp from any to me 8448 setup         # MATRIX
${fwcmd} add pass tcp from any to me 3478 setup         # TURN
${fwcmd} add pass udp from any to me 3478 keep-state    # TURN
${fwcmd} add pass tcp from any to me 5349 setup         # TURN TLS
${fwcmd} add pass udp from any to me 5349 keep-state    # TURN TLS

${fwcmd} add pass tcp from any to me 80 setup           # letsencrypt only
${fwcmd} add pass tcp from any to me 443 setup          # https rev proxy fuer matrix

# Allow setup of outgoing TCP connections only
${fwcmd} add pass tcp from me to any setup

# Disallow setup of all other TCP connections
${fwcmd} add deny tcp from any to any setup

# Allow DNS queries out in the world
${fwcmd} add pass udp from me to any 53 keep-state

# Allow NTP queries out in the world
${fwcmd} add pass udp from me to any 123 keep-state

# Deny the Rest
${fwcmd} add deny all from any to any

Assuming you have an IPv4 connectivity only we block all IPv6 traffic. Furthermore it is not recommended to open SSH to the public. I assume you are a good administrator and restrict ssh access to the static IP of your notebook or desktop system. Otherwise you should setup OpenVPN to access your server. Do not use any as MGMTIP. If you open critial services to the public you will regret it later. They will brute force you and one day somebody will break into your system. Be smart and work like a professional!

Now add or change the settings in /etc/rc.conf. We already add settings we need later. You network configuration is not shown here and should not be touched. Do not change

  • hostname=
  • ifconfig_
  • defaultrouter=

parameters.

keymap="de.kbd" # do not change your keymap. we use german
clear_tmp_enable="YES"
syslogd_flags="-ss"
dumpdev="NO"

MGMTIP="5.6.8.9" # change to static IP of your notebook or desktop system
 
firewall_enable="YES"           # Set to YES to enable firewall functionality
firewall_script="/etc/rc.firewall.KMJ" # Which script to run to set up the firewall
firewall_type="KMJ"         # Firewall type (see /etc/rc.firewall)
firewall_quiet="NO"             # Set to YES to suppress rule display
firewall_logging="YES"          # Set to YES to enable events logging
firewall_logif="NO"             # Set to YES to create logging-pseudo interface

#######################
 
local_unbound_enable="YES"
sshd_enable="YES"
ntpd_enable="YES"

apache24_enable="YES"
postgresql_enable="YES"

synapse_enable="YES"
turnserver_enable="YES"

###############################

now change /etc/resolv.conf so it reads:

search ourdomain.com
nameserver 127.0.0.1
options edns0

The final setting requires that our server is able to send out e-mails.

  • cd /etc/mail
  • make
  • make install
  • edit /etc/mail/aliases and uncomment the root: entry.
  • change it to root: you@yourmaildomain.com
  • run newaliases

Using this settings we run a local cache DNS and resolve locally. Furthermore we run a time syncing via NTP daemon. To make sure everything is done OK, we should reboot now.

  • shutdown -r now

Check our Setup

  • login after reboot
  • do a ps -xaj and check that local-ubound, syslogd, ntpd and postgresql deamons are running
  • do a mail -s “test” root, enter some text+ and press CTRL+d to send. You should receive your root mail. Check /var/log/maillog if not,

Setup Turnserver

To handle voice calls behind NAT you should setup Turnserver as kind of proxy. Setup is pretty easy.

  • pkg install turnserver
  • create /usr/local/etc/turnserver.conf like below, but change your IP, domain and secret!

    realm=matrix.ourdomain.com
    listening-ip=1.2.3.4
    #lt-cred-mech
    use-auth-secret
    static-auth-secret=1cd6c96c1f8d4f1008042d76d646691e3b0512e830d7f486d6ad6b702bfc234e
    no-tcp-relay
    user-quota=12 # 4 streams per video call, so 12 streams = 3 simultaneous relayed calls per user.
    total-quota=1200
    
    cert=/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/cert.pem
    pkey=/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/privkey.pem

do not start turnserver now!

Setup Apache Reversed-Proxy and SSL Cert

We want Apache to handle the connections to https Port 443 from the clients. Federation is done via port 8448. So we need to setup an Apache Reversed-Proxy and get a free SSL Cert from Letsencrypt.

  • pkg install apache24 cronolog
  • we already added apache24_enable=“YES” to /etc/rc.conf earlier
  • save /usr/local/etc/apache24/httpd.conf and replace its content with
  • replace ourdomain.com with your domain

    ServerRoot "/usr/local"
    
    ServerSignature Off
    
    Listen 80
    
    LoadModule authn_file_module libexec/apache24/mod_authn_file.so
    LoadModule authn_core_module libexec/apache24/mod_authn_core.so
    LoadModule authz_host_module libexec/apache24/mod_authz_host.so
    LoadModule authz_groupfile_module libexec/apache24/mod_authz_groupfile.so
    LoadModule authz_user_module libexec/apache24/mod_authz_user.so
    LoadModule authz_core_module libexec/apache24/mod_authz_core.so
    LoadModule access_compat_module libexec/apache24/mod_access_compat.so
    LoadModule auth_basic_module libexec/apache24/mod_auth_basic.so
    LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
    LoadModule reqtimeout_module libexec/apache24/mod_reqtimeout.so
    LoadModule filter_module libexec/apache24/mod_filter.so
    LoadModule mime_module libexec/apache24/mod_mime.so
    LoadModule log_config_module libexec/apache24/mod_log_config.so
    LoadModule env_module libexec/apache24/mod_env.so
    LoadModule headers_module libexec/apache24/mod_headers.so
    LoadModule setenvif_module libexec/apache24/mod_setenvif.so
    LoadModule version_module libexec/apache24/mod_version.so
    LoadModule ssl_module libexec/apache24/mod_ssl.so
    LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
    LoadModule unixd_module libexec/apache24/mod_unixd.so
    LoadModule autoindex_module libexec/apache24/mod_autoindex.so
    <IfModule !mpm_prefork_module>
        #LoadModule cgid_module libexec/apache24/mod_cgid.so
    </IfModule>
    <IfModule mpm_prefork_module>
        #LoadModule cgi_module libexec/apache24/mod_cgi.so
    </IfModule>
    LoadModule dir_module libexec/apache24/mod_dir.so
    LoadModule userdir_module libexec/apache24/mod_userdir.so
    LoadModule alias_module libexec/apache24/mod_alias.so
    LoadModule rewrite_module libexec/apache24/mod_rewrite.so
    
    LoadModule proxy_module libexec/apache24/mod_proxy.so
    LoadModule proxy_connect_module libexec/apache24/mod_proxy_connect.so
    LoadModule proxy_http_module libexec/apache24/mod_proxy_http.so
    IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.conf
    <IfModule unixd_module>
    User www
    Group www
    </IfModule>
    
    ServerAdmin hostmaster@ourdomain.com
    ServerName matrix.ourdomain.com:80
    
    DirectoryIndex index.html
    
    <Directory />
    AllowOverride none
    Require all denied
    </Directory>
    
    DocumentRoot "/usr/local/www/apache24/data"
    <Directory "/usr/local/www/apache24/data">
    Options -Indexes +FollowSymLinks -ExecCGI -MultiViews
    AllowOverride None
    Require all granted
    </Directory>
    
    <Files ".ht*">
    Require all denied
    </Files>
    
    ErrorLog  "|/usr/local/sbin/cronolog /var/log/www/%Y/%m/%d/errors.log"
    LogLevel warn
    
    LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i port:%p\"" combined
    CustomLog "|/usr/local/sbin/cronolog /var/log/www/%Y/%m/%d/access.log" combined
    
    <IfModule mime_module>
    #
    TypesConfig etc/apache24/mime.types
    #AddType application/x-gzip .tgz
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    </IfModule>
    
    Include etc/apache24/extra/httpd-ssl.conf
    
    SSLRandomSeed startup builtin
    SSLRandomSeed connect builtin
    
    Include etc/apache24/Includes/*.conf

then save /usr/local/etc/apache24/extra/httpd-ssl.conf and replace it with the following content. Again replace IP and ourdomain.com with yours.

lISTEN 443

SSLCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA
SSLProxyCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA

SSLHonorCipherOrder on

SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3

SSLPassPhraseDialog  builtin

SSLSessionCache        "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout  300

<VirtualHost _default_:443>

ServerName matrix.ourdomain.com:443
ServerAdmin hostmaster@ourdomain.com

DocumentRoot "/usr/local/www/apache24/data-ssl"
SSLEngine on

SSLCertificateFile /usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/cert.pem
SSLCertificateKeyFile /usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/privkey.pem
SSLCertificateChainFile //usr/home/letsencrypt/cts/conf-ip1/certs/matrix.ourdomain.com/fullchain.pem

UserDir disabled
DirectoryIndex index.html index.htm


<Directory /usr/local/www/apache24/data-ssl>
    Options -Indexes -FollowSymLinks -ExecCGI -MultiViews
    AllowOverride None
    require all granted
</Directory>

################################################################################
# Matrix Synapse
################################################################################
# do NOT change 127.0.0.1 to your IP !!!!!!
ProxyPass /_matrix http://127.0.0.1:8008/_matrix
ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix

################################################################################

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i port:%p\"" combined
CustomLog "|/usr/local/sbin/cronolog /var/log/www/%Y/%m/%d/access.log" combined

</VirtualHost>

Now create the SSL directory:

  • mkdir /usr/local/www/apache24/data-ssl
  • touch /usr/local/www/apache24/data-ssl/index.html
  • echo “Server is offline” > /usr/local/www/apache24/data-ssl/index.html

NOTE

To be able to receive our cert from Letsenrypt, temporary change

  • Include etc/apache24/extra/httpd-ssl.conf

to

  • #Include etc/apache24/extra/httpd-ssl.conf

in httpd.conf. This must be changed back after we received the initial cert.

Now create the Letsencrypt stuff

  • mkdir -p /home/letsencrypt/cts
  • mkdir -p /usr/local/etc/matrix-synapse/certs
  • create /home/letsencrypt/cts/Run_Certs.sh with the following content

    #!/bin/sh
    
    cd /home/letsencrypt/cts
    chmod 750 dehydrated
    /home/letsencrypt/cts/dehydrated  -c  --config /home/letsencrypt/cts/conf-ip1/config.sh \
                                      --hook /home/letsencrypt/cts/conf-ip1/hook.sh
    
    /usr/sbin/service apache24 restart
    
    ########################################################################
    
    HOST=`hostname`
    echo "copy cert for synapse / matrix server on ${HOST}"
    
    /bin/cp -r /usr/home/letsencrypt/cts/conf-ip1/certs/${HOST} /usr/local/etc/matrix-synapse/certs
    /usr/sbin/chown -R root:nobody /usr/local/etc/matrix-synapse/certs
    /bin/chmod -R 755 /usr/local/etc/matrix-synapse/certs
    
    /usr/sbin/service synapse restart
    
    /bin/ps -xaj | /usr/bin/grep synapse
    ########################################################################
  • chown root:wheel /home/letsencrypt/cts/Run_Certs.sh

  • chmod 750 /home/letsencrypt/cts/Run_Certs.sh

  • create /home/letsencrypt/cts/dehydrated with the following commands:

  • cd /home/letsencrypt/cts/

  • wget https://github.com/lukas2511/dehydrated/raw/master/dehydrated

  • chown root:wheel /home/letsencrypt/cts/dehydrated

  • chmod 750 /home/letsencrypt/cts/dehydrated

We now need to create some additional stuff for our Letsencrypt script. Remember to change IP and ourdomain.com to yours!

  • mkdir -p /home/letsencrypt/cts/conf-ip1
  • mkdir -p /usr/home/letsencrypt/cts/www/wellknown/acme-challenge
  • touch /usr/home/letsencrypt/cts/www/wellknown/acme-challenge/index.html
  • ln -s /usr/home/letsencrypt/cts/www/wellknown /usr/local/www/apache24/data/.well-known
  • echo “matrix.ourdomain.com” > /home/letsencrypt/cts/conf-ip1/domains.txt

  • create /home/letsencrypt/cts/conf-ip1/config.sh with the following content:

    #!/usr/bin/env /usr/local/bin/bash
    # FreeBSD special:
    alias openssl='/usr/bin/openssl'
    # Path to license agreement (default: https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf)
    #LICENSE="https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf"
    # Which challenge should be used? Currently http-01 and dns-01 are supported
    CHALLENGETYPE="http-01"
    #WELLKNOWN="${BASEDIR}/.acme-challenges"
    WELLKNOWN="/home/letsencrypt/cts/www/wellknown/acme-challenge"
  • chown root:wheel /home/letsencrypt/cts/conf-ip1/config.sh

  • chmod 750 /home/letsencrypt/cts/conf-ip1/config.sh

  • create /home/letsencrypt/cts/conf-ip1/hook.sh with the following command:

    cd /home/letsencrypt/cts/conf-ip1/
    wget https://github.com/lukas2511/dehydrated/raw/master/docs/examples/hook.sh
  • chown root:wheel /home/letsencrypt/cts/conf-ip1/hook.sh

  • chmod 750 /home/letsencrypt/cts/conf-ip1/hook.sh

to receive our first cert we should start Apache and accept the terms in advance.

  • service apache24 start

  • cd /home/letsencrypt/cts

  • chmod 750 dehydrated

  • /home/letsencrypt/cts/dehydrated –register –accept-terms –config /home/letsencrypt/cts/conf-ip1/config.sh

  • ./Run_Certs.sh

if all goes well you should have placed your certs in

  • /home/letsencrypt/cts/conf-ip1/certs

and

  • /usr/local/etc/matrix-synapse/certs

Add the following to /etc/crontab:

#######################################################################
# Run letsencrypt renewals every thuesday @ 9:01
#######################################################################

5       9       *       *       2       root    /home/letsencrypt/cts/Run_Certs.sh

Now where we have the correct cert, change back

  • #Include etc/apache24/extra/httpd-ssl.conf

to

  • Include etc/apache24/extra/httpd-ssl.conf

in /usr/local/etc/apache24/httpd.conf and

  • service apache24 restart

Point your browser to https://matrix.ourdomain.com and check if you get a secure connection. Logs are in /var/log/www.

We have done most of our way. Lets finalize everything.

Finish PostgreSQL Setup

su to user postgres and create synape user and database.su - postgres

su - postgres
createdb postgres
createuser --pwprompt synapse_user
# check with
psql
\l
\du
\?
CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C'  template=template0  OWNER synapse_user;
\l
\q
exit

Finish Matrix Synapse setup

Add a synapse user, so we do not need to run the homeserver as root.

  • adduser synapse

    adduser synapse
    Username: synapse
    Full name: synapse
    Uid (Leave empty for default): 
    Login group [synapse]: 
    Login group is synapse. Invite synapse into other groups? []: 
    Login class [default]: 
    Shell (sh csh tcsh bash rbash nologin) [sh]: nologin
    Home directory [/home/synapse]: 
    Home directory permissions (Leave empty for default): 
    Use password-based authentication? [yes]: 
    Use an empty password? (yes/no) [no]: 
    Use a random password? (yes/no) [no]: yes
    Lock out the account after creation? [no]: 
    Username   : synapse
    Password   : <random>
    Full Name  : synapse
    Uid        : 1002
    Class      : 
    Groups     : synapse 
    Home       : /nonexistent
    Home Mode  : 
    Shell      : /usr/sbin/nologin
    Locked     : no
    OK? (yes/no): yes

Now lets create a base config for our homeserver. Again, do not forget to change ourdomain.com to yours!

- sh
- . /home/synapse/env/bin/activate
- cd /usr/local/etc/matrix-synapse
- python -m synapse.app.homeserver --server-name matrix.ourdomain.com --config-path homeserver.yaml --generate-config --report-stats=no

We need to load a template which is not in the standard setup:

  • mkdir -p /usr/local/etc/matrix-synapse/res/templates
  • cd /usr/local/etc/matrix-synapse/res/templates
  • wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/password_reset.html
  • wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/password_reset.txt
  • wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/registration.html
  • wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/registration.txt
  • wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/add_threepid.html
  • wget https://raw.githubusercontent.com/matrix-org/synapse/master/synapse/res/templates/add_threepid.txt

  • Replace the content of homeserver.yaml with:

    tls_certificate_path: "/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/cert.pem"
    tls_certificate_path: "/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/fullchain.pem"
    tls_private_key_path: "/usr/local/etc/matrix-synapse/certs/matrix.ourdomain.com/privkey.pem"
    
    # PEM dh parameters for ephemeral keys
    tls_dh_params_path: "/usr/local/etc/matrix-synapse/tls.dh"
    
    # Don't bind to the https port
    no_tls: False
    
    tls_fingerprints: []
    
    ## Server ##
    server_name: "matrix.ourdomain.com"
    pid_file: /var/run/matrix-synapse/homeserver.pid
    # We don't want the web client
    web_client: False
    
    public_baseurl: "https://matrix.ourdomain.com:8448/"
    
    soft_file_limit: 0
    
    listeners:
    -
    port: 8448
    
    bind_addresses:
      - '1.2.3.4'
    
    type: http
    
    tls: true
    x_forwarded: false
    
    resources:
      -
        names:
          - client     # The client-server APIs, both v1 and v2
    
        compress: true
    
      - names: [federation]  # Federation APIs
        compress: false
    
    - port: 8008
    tls: false
    bind_addresses: ['127.0.0.1']
    type: http
    
    x_forwarded: false
    
    resources:
      - names: [client]
        compress: true
      - names: [federation]
        compress: false
    
    # Database configuration
    database:
    name: "psycopg2"
    args:
    database: "synapse"
    user: "synapse_user"
    password: "yourpassword"
    cp_min: 5
    cp_max: 10
    
    event_cache_size: "10K"
    
    verbose: 0
    
    #log_file: "/var/log/matrix-synapse/homeserver.log"
    log_config: "/usr/local/etc/matrix-synapse/matrix.ourdomain.com.log.config"
    
    rc_messages_per_second: 0.2
    rc_message_burst_count: 10.0
    federation_rc_window_size: 1000
    federation_rc_sleep_limit: 10
    federation_rc_sleep_delay: 500
    federation_rc_reject_limit: 50
    federation_rc_concurrent: 3
    
    media_store_path: "/var/db/matrix-synapse/media_store"
    uploads_path: "/var/db/matrix-synapse/uploads"
    max_upload_size: "1M"
    max_image_pixels: "32M"
    dynamic_thumbnails: false
    
    # List of thumbnail to precalculate when an image is uploaded.
    thumbnail_sizes:
    - width: 32
    height: 32
    method: crop
    - width: 96
    height: 96
    method: crop
    - width: 320
    height: 240
    method: scale
    - width: 640
    height: 480
    method: scale
    - width: 800
    height: 600
    method: scale
    
    url_preview_enabled: False
    
    max_spider_size: "1M"
    recaptcha_public_key: "DISABLED"
    recaptcha_private_key: "DISABLED"
    enable_registration_captcha: False
    
    recaptcha_siteverify_api: "https://www.google.com/recaptcha/api/siteverify"
    
    ## Turn ##
    ## CHANGE AS USED above in turnserver.conf!!!!!!!!!
    
    # The public URIs of the TURN server to give to clients
    turn_uris: ["turn:matrix.ourdomain.com:3478?transport=udp", "turn:matrix.ourdomain.com:3478?transport=tcp"]
    turn_shared_secret: "1cd6c96c1f8d4f1008042d76d646691e3b0512e830d7f486d6ad6b702bfc234e"
    turn_user_lifetime: "1h"
    turn_allow_guests: False
    
    
    ## Registration ##
    enable_registration: False
    registration_shared_secret: "jkdshkdjshdfzv9d87v89df77v897df987v89df7v87df89vu89df7v89df7v7df897vsdfuvhfdjkhvdf89"
    bcrypt_rounds: 12
    allow_guest_access: False
    
    trusted_third_party_id_servers:
    - matrix.org
    - vector.im
    
    
    enable_metrics: False
    report_stats: False
    
    room_invite_state_types:
    - "m.room.join_rules"
    - "m.room.canonical_alias"
    - "m.room.avatar"
    - "m.room.name"
    
    
    app_service_config_files: []
    macaroon_secret_key: "hfdjkfhdjkshjbncnsuivhsdf8sduv8duv8dfuvufd8uv8fdu89"
    expire_access_token: False
    
    ## Signing Keys ##
    
    # Path to the signing key to sign messages with
    signing_key_path: "/usr/local/etc/matrix-synapse/matrix.ourdomain.com.signing.key"
    
    old_signing_keys: {}
    key_refresh_interval: "1d" # 1 Day.
    
    # The trusted servers to download signing keys from.
    perspectives:
    servers:
    "matrix.org":
      verify_keys:
        "ed25519:auto":
          key: "Noi6WqcDj0QmPxCNQqgezwTlBKrfqehY1u2FyWP9uYw"
    
    # Enable password for login.
    password_config:
    enabled: true
    # Uncomment and change to a secret random string for extra security.
    # DO NOT CHANGE THIS AFTER INITIAL SETUP!
    #pepper: ""
    
    email:
    enable_notifs: false
    smtp_host: "localhost"
    smtp_port: 25
    require_transport_security: False
    notif_from: "Ourdomain MATRIX <noreply@ourdomain.com>"
    app_name: Matrix
    template_dir:  /usr/local/etc/matrix-synapse/res/templates
    riot_base_url: "https://matrix.ourdomain.com/riot"
    
    
    #server_notices:
    #   system_mxid_localpart: serveralarm
    #   system_mxid_display_name: "Server Infos and Alerts"
    #   system_mxid_avatar_url: "https://matrix.ourdomain.com/_matrix/media/v1/thumbnail/matrix.ourdomain.com/fcpNAbnjbfjjHIegqEMoPFew"
    #   room_name: "Server Infos and Alerts"
  • mkdir -p /var/run/matrix-synapse

  • chown synapse /var/run/matrix-synapse

  • mkdir -p /var/log/matrix-synapse/

  • chown synapse /var/log/matrix-synapse/

  • change log file in matrix.ourdomain.com.log.config to filename: /var/log/matrix-synapse/homeserver.log

  • mkdir -p /var/db/matrix-synapse/media_store

  • mkdir -p /var/db/matrix-synapse/uploads

  • chown -R synapse:synapse /var/db/matrix-synapse

  • create tls.h file in /usr/local/etc/matrix-synapse

  • cd /usr/local/etc/matrix-synapse/

  • openssl dhparam -out tls.dh 2048

Finally we need a startup script for Matrix Synapse. Lets create /usr/local/etc/rc.d/synapse:

#!/bin/sh
#
# Created by: Karl M. Joch <k.joch@cts.at>
#

# PROVIDE: synapse
# REQUIRE: LOGIN postgresql
# KEYWORD: shutdown

# synapse_enable="YES"

. /etc/rc.subr

#----------------------
# we run in virtual env
#----------------------
VIRTUAL_ENV="/home/synapse/env"
export VIRTUAL_ENV
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
# to check run here: env

name=synapse

rcvar=synapse_enable
load_rc_config ${name}

: ${synapse_enable:=NO}
: ${synapse_user:=synapse}
: ${synapse_conf:=/usr/local/etc/matrix-synapse/homeserver.yaml}
: ${synapse_dbdir:=/var/db/matrix-synapse}
: ${synapse_logdir:=/var/log/matrix-synapse}
: ${synapse_pidfile:=/var/run/matrix-synapse/homeserver.pid}

pidfile="${synapse_pidfile}"
procname=/usr/home/synapse/env/bin/python3.7
command=/usr/home/synapse/env/bin/python3.7
command_args="-m synapse.app.homeserver --daemonize -c ${synapse_conf}"
start_precmd=start_precmd

start_precmd()
{
        if [ ! -d ${synapse_pidfile%/*} ] ; then
                install -d -o synapse -g wheel ${synapse_pidfile%/*};
        fi

        if [ ! -d ${synapse_dbdir} ] ; then
                install -d -o synapse -g wheel ${synapse_dbdir};
        fi

        if [ ! -d ${synapse_logdir} ] ; then
                install -d -o synapse -g wheel ${synapse_logdir};
        fi

        if $(grep -q CHANGEME ${synapse_conf}) ; then
                echo "Error: Default secret values in config."
                echo "Please replace the CHANGEME values in ${synapse_conf}"
                exit 1
        fi
}

run_rc_command "$1"
  • chown root:wheel /usr/local/etc/rc.d/synapse
  • chmod 750 /usr/local/etc/rc.d/synapse

Start Matrix Synapse the first time

  • service synapse start

will hopefully end in something like this:

2019-05-11 18:02:13,846 - synapse.server - 222 - INFO - None - Setting up.
2019-05-11 18:02:13,884 - synapse.storage.event_push_actions - 471 - INFO - None - Searching for stream ordering 1 month ago
2019-05-11 18:02:13,885 - synapse.storage.event_push_actions - 477 - INFO - None - Found stream ordering 1 month ago: it's 0
2019-05-11 18:02:13,885 - synapse.storage.event_push_actions - 479 - INFO - None - Searching for stream ordering 1 day ago
2019-05-11 18:02:13,885 - synapse.storage.event_push_actions - 485 - INFO - None - Found stream ordering
2019-05-11 18:02:13,887 - synapse.server - 226 - INFO - None - Finished setting up.

You can check the running synapse with ps -xaj and netstat -an should show you listeners on 8008 and 8448. If yes, you can open the first beer. Your log is in /var/log/matrix-synapse.

Adding the admin user

Again, change ourdomain.com to your domain!!!!!

  • sh
  • . /home/synapse/env/bin/activate
  • cd /usr/local/etc/matrix-synapse
  • register_new_matrix_user -c homeserver.yaml https://matrix.ourdomain.com:8448
  • make this user the admin for you!

  • reboot your server, to restart everything

  • shutdown -r now

  • download the https://riot.im messenger for your platform and login

  • test everything

if everything works as expected:

  • create all other users the same way, but without being admin!

UPDATING

Updating FreeBSD and Packages

  • freebsd-update fetch
  • freebsd-update install
  • pkg update
  • pkg upgrade

Updating Matrix Synapse

  • service synapse stop
  • sh
  • . /home/synapse/env/bin/activate
  • pip install -U matrix-synapse[all]
  • service synapse start
  • if massive update, simply reboot the server

Upgrade notes PostgreSQL 9.5 to 11.5

READ BELOW FOR POSTGRES UPDATE 9.5 to 11.5 if you are below 11.5!!

While upgrading Matrix/Synapse to 1.5.0 a problem with the pkg system occured. The depencies for py37-psycopg2 and turnserver changed to postgresql11-client-11.5 and it ended up with deinstalled postgresql95-server, which was not nice. Thanks to the Proxmox virtualization infrastructure I was able to move back to the snapshot before the update, skipped the pkg upgrade section and put the server online again. So far so good, but now there is need to upgrade to postgresql11-server-11.5 to be on track again.

As written in the documentation (https://www.postgresql.org/docs/11/upgrading.html): “The traditional method for moving data to a new major version is to dump and reload the database, though this can be slow. A faster method is pg_upgrade.” I already had the dump/restore idea because the FreeBSD 11.5 port also changes the location of the servers data.

The steps done to make it work (read 18.6.1 of PostgreSQL docu in advance):

  • deactivate some services on boot in /etc/rc.conf

    apache24_enable=“NO” synapse_enable=“NO” turnserver_enable=“NO”

  • full server shutdown and snapshot creation of Proxmox VM

  • as alternate if bare installed do a full server backup

  • now we need to create a full database dump of the 9.5 server

    su
    # create temp migration dir
    mkdir /var/pgupdate
    chmod 777 /var/pgupdate
    # change to user pgsql
    su - pgsql
    cd /var/pgupdate
    # backup config changes
    cp /usr/local/pgsql/data/pg_hba.conf .
    cp /usr/local/pgsql/data/postgresql.conf .
    # dump database
    pg_dumpall > database_dump_95.sql
    # be patient, depending on server this can take time 
    exit
    # we are root again
    service postgresql stop
    # rename old data dir
    mv /usr/local/pgsql/data /usr/local/pgsql/data-9.5
    # delete your postgresql packages / use pkg info first
    pkg delete postgresql95-client-9.5.19 postgresql95-server-9.5.19
    # this will delete "Installed packages to be REMOVED:"
    # postgresql95-client-9.5.19 postgresql95-server-9.5.19
    # py36-psycopg2-2.8.3 turnserver-4.5.1.1
    # which is ok for us. we reinstall last 2 later
    # install server 11 which includes install of client
    pkg install postgresql11-server
    # initialize the database, run
    /usr/local/etc/rc.d/postgresql initdb
    # check for changes in pg_hba.conf and postgresql.conf
    # best using 
    diff -u  /var/pgupdate/pg_hba.conf /var/db/postgres/data11/pg_hba.conf | more
    diff -u  /var/pgupdate/postgresql.conf /var/db/postgres/data11/postgresql.conf | more
    # reinstall py36-psycopg2 turnserver
    pkg install py36-psycopg2 turnserver
    # start the postgres server
    service postgresql start
    # if start runs well, reload the data
    su - postgres
    psql -d postgres -f /var/pgupdate/database_dump_95.sql
    # be patient again!
    # if all goes well exit to be root again
    exit
    # finally upgrade all packages and clean out stuff
    pkg update
    pkg upgrade
    pkg clean -a
    # delete old psql data dir and user if all is finished
    rm -r /usr/local/pgsql/data
    rmuser pgsql
    rm -r /var/pgupdate
  • reactivate some services on boot in /etc/rc.conf

    apache24_enable=“YES” synapse_enable=“YES” turnserver_enable=“YES”

    # as root start the services and check if all is fine
    service apache24 start
    service turnserver start
    service synapse start

have fun with Riot/Matrix/Synapse again.

NOTE Older versions used user pgsql for PostgreSQL, now user is named postgres and /var/db/postgres is owned in that way!

NOTE from Package The port is set up to use autovacuum for new databases, but you might also want to vacuum and perhaps backup your database regularly. There is a periodic script, /usr/local/etc/periodic/daily/502.pgsql, that you may find useful. You can use it to backup and perform vacuum on all databases nightly. Per default, it performs `vacuum analyze’. See the script for instructions. For autovacuum settings, please review ~pgsql/data/postgresql.conf.

Join my public room

If you like this blog entry feel free to join my public room by entering

/join #kmj:matrix.ctseuro.com

anywhere in the box to send a message! Feedback welcome!

Enterprise Support


There is a new version of this document here:

https://kmj.at/how-to-setup-your-matrix-synapse-messaging-homeserver-mar-2021-english/


EUROPE INFO: Free IT help for critical Infrastructure!

  • First date posted 2020-03-16
  • Last Update 2020-03-26

UPDATE 2020-03-24

Volunteers area and classified section for offer/search help opened

There was lot of changes on the:

https://helpeurope.net/how-to-join-us/

page today. Volunteers are able to list themselfs and the free for all classified section is open based on the rules on the above named page. Hopefully we get a interesting directory related to help for businesses and people.

We hope the project is moving forward fast! The time till a lot of countries will reach the highest peek of infections is near and we should be done till this situation comes up.

Thanks to all of you willing to help others,

2020-03-16

Even our website normally is in German, due to the content English is required here

This is a non-commercial project. Please share and boost the link wherever you fell it helps the project.

This is a short notice that there are ongoing efforts to build up a IT security and support team which is willing to help all operators of critical infrastructure for free.

Currently we try to get all of these experts together on decentralized, free, secure and Open Source Messenger Riot.

Experts please join us!

If you are system, software or security expert please join us too. We are 100% sure that all of these fast installed home office workplaces will destroy hundreds of servers and infrastructures and also some real attacks on infrastructure will happen. Furthermore all of these setup errors will come up now. We need you to build up a great team.

Infrastructure operators join us

If you operate critical infrastructure and run into problems feel free to join the Riot room too.

How to connect to us:

CTS founder Karl has already written tutorials for Riot

in German

on his personal site

in English

on the Website of his non-profit EURAFRI Project. Plese note here, that you need to create the account on matrix.org but all other infos are valid.

After you setup Riot you need to join the roon. You are able to join which entering

/join #helpeurope:matrix.ctseuro.com

in the box where you normally write your message. If you need help click the plus in the person section and start chat with:

@karl:matrix.ctseuro.com

We cannot afford to loose critical infrastructure

I know its pretty early and situation will become more bad in 2 or 3 weeks. Assume a 6-8 week duration based on the actual facts. But setting up things now gives us the chance to help after they lost most of their stuff because of infection or other problems.

If you are infrastructure operator you are free to already join to be connected if you need help.

We all want that there is no need for our offer, but one has to be prepared.

Let me take the opportunity to wish you and your families health, protection all the best for the upcoming hard weeks. A lot of you will be affected in business and maybe in private life, but there will be a strong coming back after Corona time is passed by. Help others if they are in problems to give them a chance to survive private and economic problems. Work together, communicate and spread the idea. Be sure, there is a time after it.

Even we are slowed down by the restrictions currently, we are full available via Riot and Briar Greetings and best wishes!

Karl

Notfalls-Kommunikationssystem ohne Servererfordernis mit Briar aufbauen (FOSS, P2P, WiFi, Bluetooth, TOR)

Was bisher geschah

Es gibt hier im Blog bereits ausführliche Anleitungen zur Einrichtung einer smarten, sicheren und dezentralisierten FOSS (Free Open Source Software) Kommunikationslösung für Unternehmen und Private Benutzer.

Ich habe, wie auch Millionen anderer smarter Internet Nutzer, Firmen und Regierungsbehörden, für mich und bei allen meinen Firmenbeteiligungen die komplette Kommunikation auf den Riot Messenger umgestellt:

https://kmj.at/riot-im-messenger-kurzanleitung-fuer-benutze-updated/

Natürlich betreiben wir eigene Homeserver (im Rahmen der Dezentralisierung wie ein eigener Mail Server) auf eigener Hardware und natürlich ist auch keine Installation in der Cloud (aka Server die einem nicht gehören und wo andere Zugriff haben). Sicherheit und Privatsphäre ist schon immer das höchste Gut in der IT gewesen.

Für private Benutzer empfiehlt sich die Verwendung von öffentlichen Servern, Firmen wird angeraten einen eigenen Homeserver zu betreiben. Die Anleitung mit der jeder Level 1 Administrator, ohne Hilfe von Level 2 oder 3 Support einen Server einrichten kann, findet sich hier:

https://kmj.at/how-to-setup-your-matrix-synapse-messaging-homeserver-may-2019-english/

Ein kurzer Blick auf die Anleitungen zeigt, dass ein Server Setup und die Anwendung von Riot wirklich sehr intuitiv und einfach ist.

Durch diese Umstellung der Kommunikation wurden unverschlüsselte E-Mails komplett in den Hintergrund gedrängt und die Text, Voice und Videokommunikation mit Riot ist bei Verwendung der End-to-End Verschlüsselung sicher und nicht mitlesbar. Durch die Dezentralisierung gibt es auch keinen zentralen Server einer Firma, der immer als Mitlese-Risikio anzusehen ist.

Kostenlos, mit Open Source Software sicher, performant und unabhängig kommunizieren schafft Unabhängigkeit von Datensammlern, ist eine Bereicherung des Alltages und spart viel Zeit im täglichen Umgang mit anderen. Riot’s Multi Device Fähigkeit und damit die gleichzeitige Verwendung auf einen oder mehreren PC, Smartphones und/oder Tablets machen das Arbeiten perfekt.

Serverlose P2P Kommunikation im Notfall (Backup Communication System)

Gerade die Problematik der Ausbreitung des Corona Virus hat gezeigt, dass es extrem notwendig ist die Kommunikation auf mehreren Ebenen abzusichern. Die Riot/Matrix Lösung funktioniert perfekt, solange die eigene Infrastruktur noch Strom und eine Internetverbindung hat.

Dies trifft natürlich im selben Ausmaß auch auf kommerzielle Data-Mining Programme der großen ““sozialen”” Netzwerke zu. Die Ausfallszenarien sind vielfältig, reichen von Stromausfall und/oder Verlust der Internetanbindung der Server bis hin zum Ausfall des DNS Systems, welches einen Zusammenbruch von Mail, Messaging und vielen anderen Services bewirken würde. Ohne jetzt technisch zu tief einzudringen muss klar sein, dass es sehr einfach ““finster”” werden kann und nichts mehr geht. Keine E-Mail, kein Riot, kein anderer Messenger, eventuell kein Telefon, einfach tot. Für normale Anwender ist die technische Infrastruktur in kurzer Zeit auch nicht umzubauen und damit im Notfall als verloren anzusehen.

Eigentlich wollte ich selbst ein ähnliches Emergency-Communication Projekt mit TSSOP starten um genau diese Lücke abzudecken. Doch dann fand ich BRIAR und auch wenn einige von mir gewünschte Funktionen, wie z.B. Multi Device und Multi OS, hier noch nicht verfügbar sind, wurde nun die Backup Kommunikation auf BRIAR aufgebaut.

BRIAR erfüllt alle Anforderungen an ein Notfallsystem:

  • Peer-to-Peer (P2P) heißt die Geräte kommunizieren direkt, ohne Notwendigkeit eines Servers
  • Lokale Kommunikation über Bluetooth und Wifi, ohne Internet, möglich
  • Internet basierte Kommunikation über das Tor Netzwerk, damit noch funktionell, wenn andere Systeme schon lange ausgefallen sind und gleichzeitig nicht überwachbar und vollständig anonymisiert.
  • auf Open Source aufgebaut
  • Verfügbar für Android und Custom ROMs, z.B. LineageOS. Deckt damit ca. 70-80% des mobilen Marktes ab.

Briar verwendet direkte, verschlüsselte Verbindungen um Benutzer zu verbinden und Überwachung und Zensur zu verhindern. Durch tausende Tor Nodes, welche unabhängig von DNS und ähnlichem sind, ist eine extrem lange Verfügbarkeit auch in Krisenzeiten gegeben.

Das Diagramm der möglichen Kommunikationswege

Jetzt einrichten

Das Projekt bietet mehrere Download Möglichkeiten, bevorzugt F-Droid, direkter APK Download, oder auch über den Play Store:

Programm (App) installieren, Benutzername und Passwort angeben (liegt nur auf dem Telefon) und dann Kontakte hinzufügen. Wenn über das Internet ein Kontakt hinzugefügt wird, tauschen Sie den angezeigten Link über einen sicheren Kanal (Riot, PGP E-Mail, etc.) aus.

Danach sind Messaging, private Gruppen, Blogs und Foren verwendbar. Ich empfehle mehrere Devices, z.B. Smartphone und Tablet anzulegen, diese in private Gruppen zu geben und beide Devices mit allen Kontakten zu verbinden. Kommunikation dann über private Gruppen, bzw. Blog oder Forum, je nachdem, wie die Nachrichten geteilt und verteilt werden sollen.

Für meine Kontakte steht die Adresse:

  • briar://abwjjktb7oiqxor3pxwmgeyybomzbjlqmgbtcyayoxlz4a4hw4rrs

zur Verbindung mit mir zur Verfügung.

Mit der Einrichtung des Backup Communication Systems erfolgt ein weiterer Schritt in eine Ausfallssichere Kommunikation, welche z.B. in Firmengebäuden mit WLAN auch bei vollständigem Ausfall der Internetanbindung noch funktioniert. Über Bluetooth sogar noch, wenn der WLAN Access Point ausgefallen ist.

Für jeden professionellen und smarten Benutzer ein Muss zur Absicherung der Kommunikation mit Familie, Kollegen und Geschäftspartnern.

Bevorzugte Kommunikation außerhalb von Krisenzeiten:

Riot Messenger: @karl:matrix.ctseuro.com

Update 2020-03-13 !

Die Briar Android App am Desktop betreiben.

Im wesentlichen stellt sich bei der Einrichtung eines Notfalls Kommunikationssystems noch die Frage, ob man auch direkt mit dem Desktop arbeiten kann. Da Briar eine Android App ist, deckt diese den Großteil der Smartphones gut ab, aber ich wollte unbedingt auch am Desktop (solange eine Internet Verbindung besteht) das System nutzen können.

Viele smarte Benutzer haben bereits Linux Desktops in Ihre Umgebung integriert, damit erspare ich mir die Beschreibung warum man Linux nutzen sollte und wie man es aufsetzt. Dazu gibt es genügend Literatur und die meisten Anwender haben bereits eine Linux Version laufen.

Ich selbst verwende auf allen Arbeitsplätzen und Notebooks Debian Sid (ja, ich weiß, Living on the Edge :-) ) und den XFCE Desktop. Anfänger und Unternehmensanwender sollten Debian 10 (Buster) verwenden.

Wenn das System läuft geht alles ganz einfach:

Hinweis Wenn, so wie hier auch alle DNS Zugriffe für Clients zu Drittanbieter verboten sind und nur der LAN DNS, am besten geschützt durch pi-hole, verwendet werden kann, dann muss folgendes umgestellt werden:

In Datei: /lib/systemd/system/anbox-container-manager.service folgendes: –container-network-dns-servers=DNS-IP anhängen

ExecStart=/usr/bin/anbox container-manager --daemon --privileged --data-path=/var/lib/anbox –container-network-dns-servers=DNS-IP

danach:

systemctl daemon-reload
systemctl stop anbox-container-manager
systemctl start anbox-container-manager
systemctl status anbox-container-manager

Nun kann man das Briar apk installieren:

cd ~/Downlaods
wget https://briarproject.org/apk/briar.apk
adb install briar.apk

Dann Starter erstellen, wobei sich die Muster und die Icons in:

  • ~/.local/share/applications/anbox

befinden. Andernfalls Briar mit

/usr/bin/anbox launch --action=android.intent.action.MAIN --package=org.briarproject.briar.android –component=org.briarproject.briar.android.splash.SplashScreenActivity

starten.


Briar is free software. You can redistribute it and modify it under the terms of the GNU General Public License. The mobile phone image is reproduced or modified from work created and shared by Vernon Chan and used according to terms described in the Creative Commons 2.0 Attribution License. The server icon was created by VisualPharm. The data sharing diagram was created by the Open Technology Fund’s Localization Lab.