Archiv

Archiv für die Kategorie ‘Debian’

Debian 10 – PHP / Matomo GeoIP2 Installation

24. März 2020 Keine Kommentare

The old GeoIP legacy release (aka. GeoIPCity.dat) has been deprecated and doesn’t receive updates for quit some time. It will get removed from Matomo with the next major release.
If you would like to have accurate location detection in Matomo / Piwik the new GeoIP2 module should be used.

Since Debian Buster doesn’t ship it with it’s php packages, there are some manual steps needed to achieve that.

First of all install the needed library, build-tools and the php-dev package:

apt-get install libmaxminddb-dev php-dev git build-essential

Next step is to clone the MaxMind-DB-Reader-php repository in order to compile the PHP module.

cd /usr/local/src
git clone https://github.com/maxmind/MaxMind-DB-Reader-php
cd MaxMind-DB-Reader-php/ext
phpize
./configure
make && make install

After that the new PHP module needs to be enabled and Apache or PHP (when using FPM) restarted:

echo "extension=maxminddb.so" > /etc/php/7.3/mods-available/maxminddb.ini
phpenmod maxminddb

# The folder /usr/share/GeoIP needs to be added
# to the PHP open_basedir setting in your php.ini

apache2ctl graceful
service php7.3-fpm restart

Now the database GeoIP2-City.mmdb needs to be installed locally. Since the free version is updated once a month, this is done via a download cronjob.
The database is provided by DB-IP (thanks). Check their website for usage conditions.

apt-get install python3-requests

mkdir -p /usr/share/GeoIP

cat >> /usr/local/sbin/geoip2_update.py << EOF
#!/usr/bin/env python3
import requests
import datetime
import gzip
import sys

db = '/usr/share/GeoIP/GeoIP2-City.mmdb'
url = 'https://download.db-ip.com/free/'
now = datetime.datetime.now()
date = now.strftime('%Y-%m')

r = requests.get(url + 'dbip-city-lite-{}.mmdb.gz'.format(date))
if r.status_code == requests.codes.ok:
  with open(db, 'wb') as f:
    f.write(gzip.decompress(r.content))
  sys.exit(0)
else:
  print('GeoIP2 download failed: ' + str(r.status_code))
  sys.exit(1)
EOF

chmod 700 /usr/local/sbin/geoip2_update.py

cat >> /etc/cron.d/geoip2-update << EOF
MAILTO=root
0 7 28 * *     root  /usr/local/sbin/geoip2_update.py
EOF

Now the GeoIP2 database gets updated once a month automatically and the script should be executed once to get the current version right now and to test the setup as well.

/usr/local/sbin/geoip2_update.py

In order to use GeoIP2 in Matomo two settings need to be done. First of all a database Symlink needs to be created in order to use the GeoIP2 database in Matomo.

# adjust path to your matomo misc folder
ln -s /usr/share/GeoIP/GeoIP2-City.mmdb /var/www/matomo/misc/

After that the Plugin GeoIp2 needs to be activated. It’s a core package and should be already listed on the Matomo Plugins page in the Admin UI.

Now it should be possible to activate the new module under Geolocation. If your location is listed on the right side, enable the GeoIP2 box and click Save.

That’s it. The results are much more accurate and quicker.

If you don’t use Matomo a PHP GeoIP2 testscript could be used instead.

<?php

use MaxMind\Db\Reader;
$reader = new Reader('/usr/share/GeoIP/GeoIP2-City.mmdb');
$record = $reader->get($_SERVER['REMOTE_ADDR']);

print($record['continent']['names']['en'] . "\n");
print($record['country']['names']['en'] . "\n");
print($record['subdivisions'][0]['names']['en'] . "\n");
print($record['city']['names']['en'] . "\n");

?>

Your continent, country, subdivision and city should be listed after executing the script via the webserver.

Autostart (Init-Script) für Teamspeak3

16. Mai 2019 Keine Kommentare

Um Teamspeak3 automatisch zu starten benötigt man ein Init-Script oder ein Systemd Unit file.

Da Teamspeak3 über das mitgelieferte Init-Script immer im Kontext des Users gestartet wird der das Script aufruft, ist es nicht geeignet um direkt beim booten ausgeführt zu werden, da der User in diesem Fall root ist.

Unter Debian/Ubuntu kann die Lösung so aussehen.

/etc/init.d/teamspeak3

#!/bin/bash

### BEGIN INIT INFO
# Provides:             teamspeak3
# Default-Start:        2 3 4 5
# Default-Stop:         1
# Required-Start:       $remote_fs
# Required-Stop:        $remote_fs
# Short-Description:    Teamspeak3
### END INIT INFO

DAEMON="ts3server"
USER="tss"
DAEMON_PATH="/home/tss/teamspeak3-server_linux-amd64"
PIDFILE="/run/ts3server.pid"
NICE="-10"
OPTIONS="query_ip=127.0.0.1 query_ssh_ip=127.0.0.1 filetransfer_ip=127.0.0.1 createinifile=1"

. /lib/lsb/init-functions

start() {
  log_begin_msg "Starting Teamspeak server:" "ts3server"
  if start-stop-daemon -S -o -m -q -b -N $NICE -d $DAEMON_PATH -p $PIDFILE -x $DAEMON -u $USER -c $USER -- $OPTIONS; then
    log_end_msg 0
  else
    log_end_msg 1
    exit 1
  fi
}

stop() {
  log_begin_msg "Stopping Teamspeak server:" "ts3server"
  if start-stop-daemon -K --remove-pidfile -o -q -d $DAEMON_PATH -p $PIDFILE -x $DAEMON -u $USER; then
    log_end_msg 0
  else
    log_end_msg 1
    exit 1
  fi
}

case "$1" in
  start)
      start
    ;;
  stop)
      stop
    ;;
  restart|force-reload|reload)
      stop
      start
    ;;
  *)
      echo "Usage: /etc/init.d/teamspeak3 {start|stop|restart}" >&2
      exit 1
    ;;
esac

exit 0

Nun noch die Variablen anpassen und den Autostart aktivieren

update-rc.d teamspeak3 defaults 20
KategorienDebian, Dies & Das, Ubuntu

Apache SSL Einstellungen für SSLLabs A-Rating

12. Mai 2019 Keine Kommentare

Mithilfe des SSLLabs Servertests ist es möglich den eigenen Webserver hinsichtlich TLS Einstellungen stetig zu überprüfen.

Debian 9 wird aktuell mit Apache 2.4.25 ausgeliefert, der leider noch keinen Support für das neuste (und sicherste) TLS 1.3 mitbringt.
Debian 10 wird mit Apache 2.4.38 / OpenSSL 1.1.1 bestückt und unterstützt somit TLS 1.3.
Dennoch ist es möglich auch mit TLS 1.2 ein A-Rating zu erhalten, indem man lediglich die besten Ciphers anbietet und alle anderen TLS Versionen deaktiviert.

Folgende Settings in der Datei /etc/apache2/mods-enabled/ssl.conf ermöglichen dies:

SSLHonorCipherOrder On
SSLCipherSuite TLSv1.3:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384
SSLCompression off
SSLProtocol +all -SSLv3 -TLSv1 -TLSv1.1

Diese Einstellungen gewährleisten auch dass TLS 1.3 sofort unterstützt wird, sobald der Server dieses Protokoll kennt. Alle weiteren Einstellungen können auf dem Standardwert belassen werden.

Achtung: Durch den Wegfall von TLSv1 und TLSv1.1 werden sehr alte OS/Browser Kombinationen nicht mehr unterstützt. Ein Beispiel hierfür wäre IE 8 auf Windows XP. Wer diese Clients weiterhin unterstützen möchte, findet auf Applied Crypto Hardening ein passendes Konfigurationsbeispiel.

Aktuelle Clientsysteme verwenden die beiden bis dato als sicher geltenden Ciphers ECDHE-RSA-AES256-GCM-SHA384 und ECDHE-RSA-AES128-GCM-SHA256, während auch älteren Clients der Verbindungsaufbau über ECDHE-RSA-AES256-SHA384 (CBC) ermöglicht wird.

Diese CBC Cipher gilt zwar als problematisch, wird aber nur von alten Clients verwendet und beherrscht dennoch Forward Secrecy. Im SMTP Bereich spielt diese Cipher ebenfalls noch eine bedeutende Rolle und ist z.B. seitens Outlook.com die Standard-Cipher für ausgehende E-Mails.

Wenn man keine älteren Client Systeme untersützen muss, dann empfiehlt es sich diese Cipher nicht zu verwenden:

SSLCipherSuite TLSv1.3:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256
KategorienApache - PHP, Debian