SKS – Synchronizing Key Server für OpenPGP

Written by — Maximilian Thoma 2007/12/11 18:21

SKS (engl. Synchronizing Key Server) ist ein „neuer“ OpenPGP Keyserver, entwickelt und gewartet von Yaron Minsky. → http://www.nongnu.org/sks/

Im Gegensatz zum traditionellen PKS-System, bei dem die Synchronisation zwischen den Keyservern im Netzwerk durch E-Mails erfolgt, verwendet SKS einen ausgeklügelten Abgleichalgorithmus, um Unterschiede zwischen den Keyserver-Datenbanken zu finden und auszugleichen.

Das Howto ist für Debian Etch geschrieben sollte aber auf andere Distris portierbar sein.

Anforderungen

Installation

Beginnen wir mit der Installation.

Debianpakete installieren

Folgende Pakete werden benötigt:

make, ocaml, ocaml-core, libdb4.2-dev, bzip2

Diese einfach mit

apt-get install make ocaml ocaml-core libdb4.2-dev bzip2

installieren.

SKS Paket herunterladen und entpacken

Als erstes laden wir das SKS Paket runter und enpacken es in /usr/src.

cd /usr/src
wget http://download.savannah.gnu.org/releases/sks/sks-1.0.10.tgz
tar xvfz sks-1.0.10.tgz
rm sks-1.0.10.tgz

Ein ls auf /usr/src/sks-1.0.10 sollte ungefähr folgendes ergeben:

ls -la /usr/src/sks-1.0.10
insgesamt 1604
drwxr-xr-x 3 root root   4096 2007-12-11 18:18 .
drwxr-xr-x 3 root root   4096 2007-12-11 18:18 ..
-rw-r--r-- 1  500  500   2248 2004-04-25 03:06 add_mail.ml
-rw-r--r-- 1  500  500   3775 2004-10-02 13:27 armor.ml
drwxr-xr-x 2 root root   4096 2007-12-11 18:18 bdb
-rw-r--r-- 1  500  500   4370 2004-10-04 04:00 bdbwrap.ml
-rw-r--r-- 1  500  500   8546 2004-10-12 03:41 bitstring.ml
-rw-r--r-- 1  500  500    673 2004-04-25 03:06 BUGS
-rw-r--r-- 1  500  500   7429 2004-10-04 04:51 bugscript.ml
-rw-r--r-- 1  500  500   3488 2005-01-19 16:02 build.ml
-rw-r--r-- 1  500  500   3728 2004-10-04 04:51 catchup.ml
-rw-r--r-- 1  500  500   1210 2004-04-25 03:06 CHANGELOG
-rw-r--r-- 1  500  500  12070 2004-04-25 03:06 channel.ml
-rw-r--r-- 1  500  500   4647 2004-04-25 03:06 channel.mli
-rw-r--r-- 1  500  500  10947 2005-01-19 16:02 clean_keydb.ml
-rw-r--r-- 1  500  500   6320 2004-10-04 03:58 client.ml
-rw-r--r-- 1  500  500   3749 2004-04-25 03:06 cMarshal.ml
-rw-r--r-- 1  500  500   6700 2004-11-26 21:08 common.ml
-rw-r--r-- 1  500  500  15228 2004-04-25 03:06 COPYING
-rw-r--r-- 1  500  500   1747 2004-04-25 03:06 crc.c
-rw-r--r-- 1  500  500  99359 2004-04-25 03:06 cryptokit-1.0.tar.gz
-rw-r--r-- 1  500  500   7719 2004-10-04 04:52 dbMessages.ml
-rw-r--r-- 1  500  500   1614 2004-04-25 03:06 dbscript.ml
-rw-r--r-- 1  500  500  21794 2005-08-20 18:36 dbserver.ml
-rw-r--r-- 1  500  500   2068 2004-04-25 03:06 dbtest.ml
-rw-r--r-- 1  500  500   6484 2004-06-05 05:10 decode.ml
-rw-r--r-- 1  500  500  13096 2005-01-18 00:46 .depend
-rw-r--r-- 1  500  500   3528 2004-04-25 03:06 ehandlers.ml
-rw-r--r-- 1  500  500   7418 2004-10-04 04:48 eventloop.ml
-rw-r--r-- 1  500  500   5585 2005-01-19 16:02 fastbuild.ml
-rw-r--r-- 1  500  500    206 2005-08-21 23:33 FILES
-rw-r--r-- 1  500  500   5554 2004-04-25 03:06 fingerprint.ml
-rw-r--r-- 1  500  500   4746 2004-09-30 04:17 fixkey.ml
-rw-r--r-- 1  500  500    108 2004-04-25 03:06 foo.ml
-rw-r--r-- 1  500  500   3226 2004-04-25 03:06 fqueue.ml
-rw-r--r-- 1  500  500   3986 2005-01-19 16:02 getfileopts.ml
-rw-r--r-- 1  500  500   4032 2004-04-25 03:06 heap.ml
-rw-r--r-- 1  500  500   1156 2004-04-25 03:06 heap.mli
-rw-r--r-- 1  500  500   2758 2004-10-03 14:51 htmlTemplates.ml
-rw-r--r-- 1  500  500   2759 2005-01-19 16:02 incdump.ml
-rw-r--r-- 1  500  500  19343 2004-10-04 04:48 index.ml
-rw-r--r-- 1  500  500  40979 2005-01-18 14:25 keydb.ml
-rw-r--r-- 1  500  500   2516 2004-12-13 17:56 keyHash.ml
-rw-r--r-- 1  500  500   8137 2004-04-25 03:06 keyMerge.ml
-rw-r--r-- 1  500  500   4176 2004-04-25 03:06 key.ml
-rw-r--r-- 1  500  500   9324 2004-04-25 03:06 linearAlg.ml
-rw-r--r-- 1  500  500   1985 2004-04-25 03:06 logdump.ml
-rw-r--r-- 1  500  500   3543 2005-01-19 16:02 mailsync.ml
-rw-r--r-- 1  500  500  11590 2005-08-14 03:33 Makefile
-rw-r--r-- 1  500  500    172 2004-04-29 03:49 Makefile.local.unused
-rw-r--r-- 1  500  500   3426 2004-04-25 03:06 mArray.ml
-rw-r--r-- 1  500  500   1477 2004-04-25 03:06 mArray.mli
-rw-r--r-- 1  500  500   6290 2005-01-19 16:02 membership.ml
-rw-r--r-- 1  500  500   3978 2005-01-19 16:02 merge_keyfiles.ml
-rw-r--r-- 1  500  500   2217 2004-04-25 03:06 meteredChannel.ml
-rw-r--r-- 1  500  500   8794 2004-04-25 03:06 mList.ml
-rw-r--r-- 1  500  500   2547 2004-04-25 03:06 mList.mli
-rw-r--r-- 1  500  500   4367 2004-10-19 04:44 mRindex.ml
-rw-r--r-- 1  500  500   1653 2004-04-25 03:06 msgContainer.ml
-rw-r--r-- 1  500  500   1712 2004-04-25 03:06 mTimer.ml
-rw-r--r-- 1  500  500   1048 2004-04-25 03:06 mTimer.mli
-rw-r--r-- 1  500  500   3252 2004-04-25 03:06 nbMsgContainer.ml
-rw-r--r-- 1  500  500   4383 2004-04-25 03:06 number2.ml
-rw-r--r-- 1  500  500   4150 2004-04-25 03:06 number.ml
-rw-rw-r-- 1  500  500 667602 2005-01-18 00:42 numerix-0.19c.tar.gz
-rw-r--r-- 1  500  500  10414 2004-04-25 03:06 packet.ml
-rw-r--r-- 1  500  500   9108 2005-08-13 22:31 parsePGP.ml
-rw-r--r-- 1  500  500   3122 2005-04-26 05:32 pbuild.ml
-rw-r--r-- 1  500  500   4027 2004-04-25 03:06 pdiskTest.ml
-rw-r--r-- 1  500  500   5435 2004-04-25 03:06 pMap.ml
-rw-r--r-- 1  500  500   4657 2004-04-25 03:06 pMap.mli
-rw-r--r-- 1  500  500   9047 2004-04-25 03:06 poly.ml
-rw-r--r-- 1  500  500   5766 2004-04-25 03:06 prefix_test.ml
-rw-r--r-- 1  500  500  30889 2004-10-04 04:46 prefixTree.ml
-rw-r--r-- 1  500  500   3311 2004-04-25 03:06 prime.ml
-rw-r--r-- 1  500  500  10274 2004-04-25 03:06 pSet.ml
-rw-r--r-- 1  500  500   5701 2004-04-25 03:06 pSet.mli
-rw-r--r-- 1  500  500   2017 2005-08-20 18:42 pstyle.ml
-rw-r--r-- 1  500  500   4377 2004-10-04 04:45 ptest.ml
-rw-r--r-- 1  500  500   2842 2004-10-04 04:28 ptree_consistency_test.ml
-rw-r--r-- 1  500  500   5231 2005-01-18 00:42 pTreeDB.ml
-rw-r--r-- 1  500  500   1668 2004-04-25 03:06 ptree_db_test.ml
-rw-r--r-- 1  500  500   2575 2004-04-25 03:06 ptree_replay.ml
-rw-r--r-- 1  500  500    967 2004-04-25 03:06 ptscript.ml
-rw-r--r-- 1  500  500   2177 2004-04-25 03:06 query.ml
-rw-r--r-- 1  500  500   7115 2004-04-25 03:06 README
-rw-r--r-- 1  500  500   1272 2004-04-25 03:06 recode.ml
-rw-r--r-- 1  500  500   3323 2005-08-10 03:51 reconComm.ml
-rw-r--r-- 1  500  500   6012 2004-10-04 04:00 reconCS.ml
-rw-r--r-- 1  500  500   7412 2004-10-04 04:28 reconMessages.ml
-rw-r--r-- 1  500  500    951 2004-04-25 03:06 reconPTreeDb.ml
-rw-r--r-- 1  500  500  11211 2005-01-19 16:02 reconserver.ml
-rw-r--r-- 1  500  500   3423 2004-10-04 04:29 recoverList.ml
-rw-r--r-- 1  500  500   3081 2004-04-25 03:06 recvmail.ml
-rw-r--r-- 1  500  500   2983 2005-08-14 00:37 request.ml
-rw-r--r-- 1  500  500   5382 2005-01-18 00:42 rMisc.ml
-rw-r--r-- 1  500  500  14548 2004-04-25 03:06 script.ml
-rw-r--r-- 1  500  500   3331 2004-04-25 03:06 sendmail.ml
-rw-r--r-- 1  500  500   5298 2004-10-04 03:58 server.ml
-rw-r--r-- 1  500  500  12607 2005-01-19 16:02 settings.ml
-rwxr-xr-x 1  500  500    524 2004-04-25 03:06 sks_build.sh
-rw-r--r-- 1  500  500   1941 2004-04-25 03:06 sks_do.ml
-rw-r--r-- 1  500  500   3267 2005-01-19 16:02 sksdump.ml
-rw-r--r-- 1  500  500   5054 2004-12-13 18:03 sks.ml
-rw-r--r-- 1  500  500   2982 2005-08-15 02:36 spider.ml
-rw-r--r-- 1  500  500   1334 2004-04-25 03:06 sStream.ml
-rw-r--r-- 1  500  500   6534 2004-04-29 04:11 stats.ml
-rw-r--r-- 1  500  500   2986 2005-01-19 16:02 tester.ml
-rw-r--r-- 1  500  500   5190 2004-04-25 03:06 TODO
-rw-r--r-- 1  500  500    988 2004-04-25 03:06 tz.c
-rw-r--r-- 1  500  500   3894 2005-01-19 16:02 update_subkeys.ml
-rw-r--r-- 1  500  500   9453 2005-08-14 00:32 utils.ml
-rw-r--r-- 1  500  500      7 2005-08-14 01:38 VERSION
-rw-r--r-- 1  500  500   9849 2004-10-19 04:47 wserver.ml
-rw-r--r-- 1  500  500   4896 2004-04-25 03:06 zZp2.ml
-rw-r--r-- 1  500  500   5291 2005-01-18 00:42 zZp.ml

Konfigurationsdateien anpassen

1. Makefile.local.unused nach Makefile.local kopieren und anpassen

cd /usr/src/sks-1.0.10
cp Makefile.local.unused Makefile.local
vi Makefile.local

Geändert werden muss die ldb Version von 4.1 auf 4.2 und BDBLIB von /usr/lib auf /usr.

Datei sieht dann wie folgt aus:

BDBLIB=-L/usr
BDBINCLUDE=-I/usr/include
PREFIX=/usr/local
LIBDB=-ldb-4.2
MANDIR=/usr/share/man
export BDBLIB
export BDBINCLUDE
export PREFIX
export LIBDB
export MANDIR

2. Makefile anpassen

Nach folgender Zeile suchen:

COMMONCAMLFLAGS=$(CAMLINCLUDE) $(OCAMLLIB) -ccopt -Lbdb -dtypes

und ersetzen durch

COMMONCAMLFLAGS=$(CAMLINCLUDE) $(OCAMLLIB) -ccopt -Lbdb -dtypes -pthread

Kompilieren / Installieren

1. Depts bauen

Dauert nur wenige Sekunden.

make dep

2. Alles kompilieren

make all

3. Installieren

Leider fehlen bei SKS die Manuals. Bei der Installationsroutine will er diese aber kopieren nach /usr/share/man/man8 um diesen Fehler zu umgehen einfach:

touch sks.8.gz

in /usr/src/sks-1.0.10 ausführen. Dann klappt`s.

Wenn alles ohne Fehler durchgelaufen ist dann mit:

make install

installieren.

Verzeichnisse/Dateien anlegen / Konfigurationsdateien anlegen

1. Verzeichnisse/Dateien

mkdir /var/sks
mkdir /var/sks/web
mkdir /var/sks/dump
touch /var/sks/sksconf
touch /var/sks/membership
touch /var/sks/mailsync

2. Konfigurationsdateien anpassen

vi /var/sks/sksconf

Hostname anpassen z.B. keys.example.org

Inhalt der Datei sksconf:

# sksconf sample for keyserver.foo.bar
# ------------------------------------
# Set the logfile to $basedir/log[.db|.recon]
logfile: log

# debuglevel 4 is default (max. debuglevel is 10)
debuglevel: 4

# set from adress for mailsync
from_addr: pgp-public-keys@keys.example.org

# set the hostname of your server
hostname: keys.example.org

# EOF

Die membership Datei enthält die Server mit den man eine Peerbeziehung (gossip peer) unterhält. Wer mit keys.thoma.cc eine Peerbeziehung eingehen will soll mir bitte eine Mail schicken an info@thoma.cc.

Beispiel:

# Format
# server port
keys.thoma.cc 11370

SKS Server aufsetzen

SKS ist jetzt soweit installiert, jetzt können wir beginnen die Datenbank anzulegen und den Server betriebsfertig zu machen.

Datenbank aufbauen

Als erstes holen wir uns den Keydump von einem Server. Hier z.B. der Keydump von ftp.pramberger.at.

cd /var/sks/dump
wget -r -l 1 ftp://ftp.pramberger.at/services/keyserver/keydump/
mv ftp.pramberger.at/services/keyserver/keydump/* .
rm -rf ftp.pramberger.at/
bzip2 *.bz2

Es ist wichtig das die Dateien im Dumpverzeichnis nach dem entpacken die Endung .pgp haben damit sie in die Datenbank importiert werden.

cd /var/sks
sks_build.sh

Die Datenbank wird jetzt generiert. Das kann mehrere Stunden dauern ! Benötigt ca. 190 MB RAM!!!

Hinweis

Das Verzeichnis dump und Inhalt nicht löschen falls Datenbank nochmal erzeugt werden muss!

Wenn das Script fertig ist sind folgende neue Verzeichnisse angelegt worden PTree und KDB. In diesen Verzeichnissen befindet sich jetzt die Datenbank für SKS.

Peers hinzufügen

Die Peers befinden sich (wie oben schon erwähnt) in der Datei membership.

Wenn mit jemanden eine Partnerschaft vereinbart ist dann diesen wie folgt hinzufügen.

Beispiel:

keys.thoma.cc 11370

Mailsync einrichten

In dieser Datei werden die „Outgoing“ PKS Peers angegeben. PKS syncronisiert sich über E-Mails.

Beispiel:

mail@example.org
abc@example.com

Für keys.thoma.cc ist pgp-public-keys@keys.thoma.cc die PKS Peer Adresse.

PKS verlangt eine Mailsyncadresse. Mailsync wird dazu verwendet andere PKS Server die kein gossip unterstützen aktuell zu halten. Diese Server werden quasi durch E-Mails syncronisiert. Da ich momentan keine Aktualisierungen an andere PKS Server sende aber SKS eine verlangt, habe ich eine „Blackhole“ Adresse angegeben. Diese Mails verschwinden im Nirvana. (devnull@thoma.cc) Wie Sie das auch Einrichten können finden Sie in den Postfix Howtos unter Spamtrap/Blackhole Adresse einrichten.

Webseite einrichten

Um später Keys per Webinterface suchen und hochzuladen muss man im Verzeichnis web eine index.html anlegen. → http://keys.thoma.cc:11371

Eine Beispieldatei können Sie hier herunterladen.

Direktdownload

Installation

cd /var/sks/web
wget http://www.thoma.cc/_media/howtos/security/sks_keyserver/sks_index.tgz?id=howtos%3Asecurity%3Asks_keyserver&cache=cache
tar xvfz sks_index.tgz

User / Gruppe anlegen für SKS

Da SKS später nicht unter root-Rechten laufen soll legen wir einen User und eine Gruppe an.

groupadd sks
useradd -d /var/sks -g sks -s /bin/false sks

Postfix einrichten für SKS

Falls mailsync verwendet wird und Incoming PKS verwenden will muss man mit Procmail das ganze an sks_add_mail übergeben.

Falls Procmail noch nicht installiert sein sollte man dies nachholen mit:

apt-get install procmail

Für die Incoming PKS requests verwende ich als Beispiel die Adresse pgp-public-keys@keys.example.org.

Änderungen an /etc/aliases

Um die Mails mit Procmail bearbeiten zu können müssen wir diese erstmal zum User sks „weiterleiten“.

Fügen Sie in die aliases folgendes hinzu

pgp-public-keys: sks

und machen Sie anschließend ein

postalias /etc/aliases

um die postalias Datenbank zu aktualisieren.

main.cf

Öffnen Sie die Datei /etc/postfix/main.cf und fügen Sie unsere Beispieldomain keys.example.org zu mydestination hinzu.

mydestination = localhost.example.org, localhost, server.example.org, keys.example.org

Fügen Sie folgenden Parameter in einer neuen Zeile hinzu: (falls dieser noch nicht existiert)

mailbox_command = procmail -a "$EXTENSION"

Speichern Sie die Datei und führen Sie einen

postfix reload

aus.

.procmailrc

Damit Procmail weiss was er mit einer Mail machen soll wenn eine kommt muss man im Homeverzeichnis des Users eine .procmailrc anlegen.

Die Datei hat folgenden Inhalt

  PATH=/usr/local/bin

        :0
        * ^Subject: incremental
        | sks_add_mail /var/sks

und übergibt die Mail an sks_add_mail.

/etc/init.d/sks anlegen und zu den defaults hinzufügen

SKS liefert leider kein init.d-script mit, deshalb habe ich selber eines geschrieben.

sks_init.tgz
sks_init.zip

Falls Username, Gruppe, Installationspfad oder Arbeitsverzeichnis abgeändert wurde muss dies in der sks init Datei angepasst werden.

Speichern Sie die Datei unter /etc/init.d/sks

Inhalt

#! /bin/sh
#
# init.d script for sks
# written by Maximilian Thoma (c) 2007 - http://www.thoma.cc
#

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DAEMON=/usr/local/bin/sks
NAME=sksdb
NAME2=sksrecon
DESC=sksdb
DESC2=sksrecon

PIDDIR="/var/sks"
INSTDIR="/var/sks"

RUNUSER=sks
RUNGROUP=sks

test -f ${DAEMON} || exit 0

set -e

START="--start --quiet --background --make-pidfile --chuid ${RUNUSER}:${RUNGROUP} \
--pidfile ${PIDDIR}/${NAME}.pid --startas ${DAEMON}" 
STOP="--stop --quiet --pidfile ${PIDDIR}/${NAME}.pid"
START2="--start --quiet --background --make-pidfile --chuid ${RUNUSER}:${RUNGROUP} \
--pidfile ${PIDDIR}/${NAME2}.pid --startas ${DAEMON}"
STOP2="--stop --quiet --pidfile ${PIDDIR}/${NAME2}.pid"

PARAMS="db -basedir ${INSTDIR}"
PARAMS2="recon -basedir ${INSTDIR}"

cleanup() {
        [ -d /var/sks ] &&
          find /var/sks -maxdepth 1 -name 'db_com_sock' -type f \
                -exec rm -rf "{}" \; >/dev/null 2>&1 || true
        [ -d /var/sks ] &&
          find /var/sks -maxdepth 1 -name 'recon_com_sock' -type f \
                -exec rm -rf "{}" \; >/dev/null 2>&1 || true
        :
}

case "$1" in
  start)
        echo -n "Starting $DESC: "
        if start-stop-daemon ${START} -- ${PARAMS} >/dev/null ; then
                echo "sks db."
        else
                if start-stop-daemon --test ${START} >/dev/null 2>&1; then
                        echo "(failed)."
                        exit 1
                else
                        echo "(already running)."
                        exit 0
                fi
        fi

        echo -n "Starting $DESC2: "
        if start-stop-daemon ${START2} -- ${PARAMS2} & >/dev/null ; then
                echo "sks recon."
        else
                if start-stop-daemon --test ${START2} & >/dev/null 2>&1; then
                        echo "(failed)."
                        exit 1
                else
                        echo "(already running)."
                        exit 0
                fi
        fi

        ;;
  stop)
        echo -n "Stopping $DESC: "
        if start-stop-daemon ${STOP} --retry 10 >/dev/null ; then
                cleanup
                echo "sks db."
        else
                if start-stop-daemon --test ${START} >/dev/null 2>&1; then
                        echo "(not running)."
                        exit 0
                else
                        echo "(failed)."
                        exit 1
                fi
        fi

        echo -n "Stopping $DESC2: "
        if start-stop-daemon ${STOP2} --retry 10 >/dev/null ; then
                cleanup
                echo "sks recon."
        else
                if start-stop-daemon --test ${START2} >/dev/null 2>&1; then
                        echo "(not running)."
                        exit 0
                else
                        echo "(failed)."
                        exit 1
                fi
        fi
        ;;

  restart|force-reload)
        $0 stop
        exec $0 start
        ;;
  *)
        N=/etc/init.d/sks
        echo "Usage: $N {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

Setzen Sie folgende Dateiberechtigungen

chmod 755 /etc/init.d/sks

und jetzt noch zu den defaults hinzufügen

update-rc.d sks defaults

damit SKS bei Systemstart startet.

SKS starten

Führen Sie

/etc/init.d/sks start

aus um SKS zu starten.

Zur Kontrolle führen wir

ps aux | grep sks

aus.

Wenn alles geklappt hat sollte es ungefähr so aussehen:

relaym:/etc/init.d# ps aux | grep sks
sks      18803  0.0  1.3  31692  3352 ?        Ss   16:40   0:00 /usr/local/bin/sks db -basedir /var/sks
sks      18805  0.0  1.8  14208  4652 ?        Ss   16:40   0:00 /usr/local/bin/sks recon -basedir /var/sks
root     18813  0.0  0.2   2872   748 pts/1    R+   17:05   0:00 grep sks
relaym:/etc/init.d#

Ports checken:

Führen Sie ein

netstat -tulpen | grep sks

aus.

Das Ergebnis sollte folgendermaßen aussehen:

relaym:/var/sks# netstat -tulpen | grep sks
tcp        0      0 0.0.0.0:11370           0.0.0.0:*               LISTEN     107        57645      18805/sks
tcp        0      0 0.0.0.0:11371           0.0.0.0:*               LISTEN     107        57632      18803/sks
relaym:/var/sks#

Fertig!

Ihr Keyserver sollte jetzt unter dem Defaultport 11371 eine Webseite anzeigen. Rufen Sie hierzu http://keys.example.org:11371 im Browser auf. Sie können hier versuchen ob Sie einen PGP Schlüssel in Ihrer Datenbank finden können. z.B. 0xB4F04E79 oder pgpCA@ct.heise.de als Suchstring eingeben.

Viel Spaß mit SKS ;-)

Capisuite – Voicemail und Fax

Anforderungen

  • Installierte ISDN Karte mit CAPI Treibern (→ AVM Fritzcard PCI unter Debian Etch)
  • Mailserver (Postfix, Sendmail, Exim, Qmail, etc.)

Installation

apt-get install capisuite

User/Gruppen anlegen

Für Voicemail und Fax werden eigene User/Gruppen pro Voicemail/Fax benötigt.

# groupadd vm_test
# useradd -g vm_test -r vm_test

Einrichten des Anrufbeantworters (Voicemail)

# nano /etc/capisuite/answering_machine.conf

Am Ende der Datei kann man seine eigenen Voicemails anlegen. Hier ein Beispiel:

[vm_test]
voice_numbers="55512345"
voice_action="MailAndSave"
record_length="60"
voice_delay="20"
voice_email="mail@example.org"
pin="12345"

In den eckigen Klammen steht der Username den wir vorhin angelegt haben.

Folgende Optionen sind jetzt eingestellt für diese Voicemail:

  • voice_numbers – Die MSN auf der die Voicemail lauschen soll
  • voice_action – Die Aktion die Ausgeführt werden soll wenn eine Aufzeichnung stattgefunden hat.
  • record_length – Aufzeichnungsdauer
  • voice_delay – Verzögerung bis die Voicemail den Anruf entgegen nimmt.
  • voice_email – An diese Adresse wird die Voiceaufzeichnung geschickt.
  • pin – Dies ist die Fernabfragepin

Test Voicemail

Daemon neustarten

/etc/init.d/capisuite restart

Log beobachten und anrufen

Wed Dec  5 10:44:03 2007 Connection 0x8181648: Connection object created for incoming call PLCI 101 from 08955512345 to 55512345 CIP 0x10
Wed Dec  5 10:44:04 2007 Connection 0x8181648: call from 08955512345 to 55512345 for vm_test connecting with voice
Wed Dec  5 10:44:24 2007 Connection 0x8181648: accepting with service 0
Wed Dec  5 10:44:38 2007 Connection 0x8181648: disconnect initiated
Wed Dec  5 10:44:38 2007 Connection 0x8181648: connection lost with cause 0x3490,0x3301
Wed Dec  5 10:44:38 2007 Connection 0x8181648: Connection object deleted

E-Mail kontrollieren

Nachsehen ob eine Mail angekommen ist, ansonsten Mailserverlog überprüfen.

Einrichten Faxempfang

# nano /etc/capisuite/fax.conf

Am Ende der Datei kann man seine eigenen Faxe anlegen. Hier ein Beispiel:

[vm_test]
fax_numbers="55512346"
fax_stationID="+49 89 5551236"
fax_headline="Mein FAX"
fax_email="mail@example.com"
fax_action="MailAndSave"

In den eckigen Klammen steht der Username den wir vorhin angelegt haben.

Folgende Optionen sind jetzt eingestellt für diese Voicemail:

  • fax_numbers – Die MSN auf der die Faxgerät lauschen soll
  • fax_action – Die Aktion die Ausgeführt werden soll wenn eine Aufzeichnung stattgefunden hat.
  • fax_stationID – Stationskennung
  • fax_headline – Fax Name
  • fax_email – An diese Adresse wird die Faxaufzeichnung geschickt.

Test Fax

Daemon neustarten

/etc/init.d/capisuite restart

Log beobachten und Testfax senden

Wed Dec  5 10:57:14 2007 Connection 0x8181648: Connection object created for incoming call PLCI 101 from 08955512346 to 55512346 CIP 0x4
Wed Dec  5 10:57:14 2007 Connection 0x8181648: call from 08955512346 to 55512346 for vm_test connecting with fax
Wed Dec  5 10:57:14 2007 Connection 0x8181648: accepting with service 1
Wed Dec  5 10:57:37 2007 Connection 0x8181648: disconnect initiated
Wed Dec  5 10:57:37 2007 Connection 0x8181648: connection lost with cause 0x3400,0x0
Wed Dec  5 10:57:38 2007 Connection 0x8181648: Connection object deleted

E-Mail kontrollieren

Nachsehen ob eine Mail angekommen ist, ansonsten Mailserverlog überprüfen.

Fertig

Viel Spaß mit dem neuen System.

Service Online Status

Mit diesem DokuWiki Plugin können Sie den Status von Diensten TCP/UDP anzeigen als Bild mit/ohne Text und als Textversion.

Bekannte Probleme

Nicht alle UDP Services werden korrekt angezeigt. Dies hängt mit dem UDP Protokoll zusammen, da UDP ein verbindungsloses Protokoll ist im gegensatz zu TCP. Bei UDP wird in der Regel keine Verbindung aufgebaut bevor nicht Daten gesendet oder empfangen werden müsssen. Bei DNS (udp/53) funktioniert die Statusanzeige. Andere UDP Services habe ich noch nicht getestet.

Download

Quelltext


 */

// must be run within Dokuwiki
if(!defined('DOKU_INC')) die();
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'syntax.php');

/**
 * All DokuWiki plugins to extend the parser/rendering mechanism
 * need to inherit from this class
 */
class syntax_plugin_sos extends DokuWiki_Syntax_Plugin {

    function getInfo(){
      return array(
        'author' => 'Maximilian Thoma',
        'email'  => 'info@thoma.cc',
        'date'   => '2007-12-18',
        'name'   => 'Service Online Status',
        'desc'   => 'Service Online Status Plugin, -TCP fully supported, UDP experimental- usage: {{sos>protocol:ip_addr:port:img(y/n)|Description}}',
        'url'    => 'http://www.thoma.cc',
      );
    }

    function getType()  { return 'substition'; }
    //function getPType() { return 'block'; }
    function getSort()  { return 309; }

    function connectTo($mode)
    {
      $this->Lexer->addSpecialPattern('\{\{sos>.+?\}\}', $mode, 'plugin_sos');
    }

    function handle($match, $state, $pos, &$handler){
    $data = substr($match, 6, -2);
		$pos = strpos($data, '|');
		if ($pos === FALSE)
		{
			$description = '';
			$target = $data;
		}
		else
		{
			$description = substr($data, $pos + 1);
			$target = substr($data, 0, $pos);
		}
        return array(target => $target, description => $description);
	}

	function render($mode, &$renderer, $data) {
        if($mode == 'xhtml'){
            $renderer->doc .= $this->_sos($data);
            return true;
        }
        return false;
    }

    function _sos($data){
  	global $ID;

	// Explode Data protocol:ip_addr:port:img(y/n)
	$data_tmp=explode(":",$data[target]);
	$protocol=$data_tmp[0];
	$ip_addr=$data_tmp[1];
	$port=$data_tmp[2];
	$img=$data_tmp[3];
	$description=$data[description];

	// TCP or UDP
	$status = @fsockopen("$protocol://$ip_addr", $port, $errno, $errstr, 5);
 	if (!$status) {
	// Offline TCP
	if($img=="y"){
		// Mit Bild
		$src = DOKU_URL.'lib/plugins/sos/images/off.png';
		$buffer.="
\"($protocol\\$port)$description
"; } else { // Ohne Bild if($description==""){ $buffer.="
$protocol\\$port $ip_addr not reachable.
"; } else { $buffer.="
$description not reachable.
"; } } @fclose($status); } else { // Online oder UDP if($protocol=="tcp"){ if($img=="y"){ // Mit Bild $src = DOKU_URL.'lib/plugins/sos/images/on.png'; $buffer.="
\"($protocol\\$port)$description
"; } else { // Ohne Bild if($description==""){ $buffer.="
$protocol\\$port $ip_addr is reachable.
"; } else { $buffer.="
$description is reachable.
"; } } @fclose($status); } // oder UDP if($protocol=="udp"){ fwrite($status, "\n"); if(fread($status, 26)==""){ // Offline if($img=="y"){ // Mit Bild $src = DOKU_URL.'lib/plugins/sos/images/off.png'; $buffer.="
\"($protocol\\$port)$description
"; } else { // Ohne Bild if($description==""){ $buffer.="
$protocol\\$port $ip_addr not reachable.
"; } else { $buffer.="
$description not reachable.
"; } } } else { //Online if($img=="y"){ // Mit Bild $src = DOKU_URL.'lib/plugins/sos/images/on.png'; $buffer.="
\"($protocol\\$port)$description
"; } else { // Ohne Bild if($description==""){ $buffer.="
$protocol\\$port $ip_addr is reachable.
"; } else { $buffer.="
$description is reachable.
"; } } } fclose($status); } } return $buffer; } } ?>

Installation

Variante 1: Pluginmanager

Die URL vom Download in den Pluginmanager reinkopieren und Installieren anklicken.

Variante 2: Manuell

Den Inhalt des .tgz in lib/plugins kopieren.

Einbinden in die Webseite

Syntax

{{sos>protocol:ip_addr_oder_fqdn:port:img(y/n)|description}}

Empfehlenswert ist das Abschalten des Caches. Am Anfang der Webseite folgendes einfügen.

~~NOCACHE~~

Demo / Beispiele

Als Test verwende ich die IP-Adresse (FQDN) dieser Homepage und die Serviceports tcp/80 (vorhanden), tcp/801 (nicht vorhanden) und udp/53 (vorhanden), udp/3232 (nicht vorhanden).

Nur Bild

{{sos>tcp:www.thoma.cc:80:y}}
{{sos>tcp:www.thoma.cc:801:y}}
{{sos>udp:www.thoma.cc:53:y}}
{{sos>udp:www.thoma.cc:3232:y}}

ergibt: y ( B, 0 downloads) y ( B, 0 downloads) y ( B, 0 downloads) y ( B, 0 downloads)

Bild mit Beschreibung

{{sos>tcp:www.thoma.cc:80:y| www @ www.thoma.cc}}
{{sos>tcp:www.thoma.cc:801:y| xyz @ www.thoma.cc}}
{{sos>udp:www.thoma.cc:53:y| dns @ www.thoma.cc}}
{{sos>udp:www.thoma.cc:3232:y| zxy @ www.thoma.cc}}

ergibt: www @ www.thoma.cc ( B, 0 downloads) xyz @ www.thoma.cc ( B, 0 downloads) dns @ www.thoma.cc ( B, 0 downloads) zxy @ www.thoma.cc ( B, 0 downloads)

Nur Text

{{sos>tcp:www.thoma.cc:80:n}}
{{sos>tcp:www.thoma.cc:801:n}}
{{sos>udp:www.thoma.cc:53:n}}
{{sos>udp:www.thoma.cc:3232:n}}

ergibt: n ( B, 0 downloads) n ( B, 0 downloads) n ( B, 0 downloads) n ( B, 0 downloads)

Text mit Beschreibung

{{sos>tcp:www.thoma.cc:80:n| www @ www.thoma.cc}}
{{sos>tcp:www.thoma.cc:801:n| xyz @ www.thoma.cc}}
{{sos>udp:www.thoma.cc:53:n| dns @ www.thoma.cc}}
{{sos>udp:www.thoma.cc:3232:n| zxy @ www.thoma.cc}}

ergibt: www @ www.thoma.cc ( B, 0 downloads) xyz @ www.thoma.cc ( B, 0 downloads) dns @ www.thoma.cc ( B, 0 downloads) zxy @ www.thoma.cc ( B, 0 downloads)

Ping Tool Plugin

Mit diesem Tool können Sie per Webschnittstelle ping ausführen.

Anforderungen

Ping Tool benötigt PEAR.

  • Folgende PEAR Pakete müssen installiert sein
    • Net_Ping 1.45 oder neuer

Download

Folgende Versionen sind verfügbar:

Installation

Variante 1: Pluginmanager

Die URL vom Download in den Pluginmanager reinkopieren und Installieren anklicken.

Variante 2: Manuell

Den Inhalt des .tgz in lib/plugins kopieren.

Einbinden in die Webseite

An der gewünschten Stelle folgendes einfügen:

~~ping~~

Empfehlenswert ist das Abschalten des Caches. Am Anfang der Webseite folgendes einfügen.

~~NOCACHE~~

Traceroute Query Tool Plugin

Mit diesem Tool können Sie per Webschnittstelle traceroute ausführen.

Anforderungen

Traceroute Query Tool benötigt PEAR.

  • Folgende PEAR Pakete müssen installiert sein
    • Net_Traceroute 0.21.1 oder neuer

Download

Folgende Versionen sind verfügbar:

Installation

Variante 1: Pluginmanager

Die URL vom Download in den Pluginmanager reinkopieren und Installieren anklicken.

Variante 2: Manuell

Den Inhalt des .tgz in lib/plugins kopieren.

Einbinden in die Webseite

An der gewünschten Stelle folgendes einfügen:

~~trace~~

Empfehlenswert ist das Abschalten des Caches. Am Anfang der Webseite folgendes einfügen.

~~NOCACHE~~

Whois Query Tool Plugin

Whois Abfragen für Dokuwiki.

Download

Downloads

Installation

Variante 1: Pluginmanager

Die URL vom Download in den Pluginmanager reinkopieren und Installieren anklicken.

Variante 2: Manuell

Den Inhalt des .tgz in lib/plugins kopieren.

Einbinden in die Webseite

An der gewünschten Stelle folgendes einfügen:

~~whois~~

Empfehlenswert ist das Abschalten des Caches. Am Anfang der Webseite folgendes einfügen.

~~NOCACHE~~

Heise RSS Feed Plugin

Aktuelle Heise News für Dokuwiki.

Hinweis von der Heise Webseite

Wir gestatten anderen Websites (widerruflich) die kostenfreie Übernahme unserer News-Headlines mit aktiven Links auf unsere News-Artikel. Diese dürfen jedoch nicht in Frames dargestellt werden, sondern müssen ein neues Browser-Fenster öffnen. Sie können bei der Übernahme der Überschriften auf folgende Dateien zurückgreifen.

Download

Installation

Variante 1: Pluginmanager

Die URL vom Download in den Pluginmanager reinkopieren und Installieren anklicken.

Variante 2: Manuell

Den Inhalt des .tgz in lib/plugins kopieren.

Einbinden in die Webseite

An der gewünschten Stelle folgendes einfügen:

~~heise~~

Empfehlenswert ist das Abschalten des Caches. Am Anfang der Webseite folgendes einfügen.

~~NOCACHE~~

Anzahl der News einstellen

In der Datei lib/plugins/heise/syntax.php folgenden Parameter ändern:

// Wieviel News soll er anzeigen
$show_news = 20;