Check_MK: Problem mit Apache HTTP Proxy – SELinux blockt Reverse Proxy Verbindung zur Check_MK Instanz

Habe gerade auf ein frisch installiertes CentOS 7.4 Check_MK 1.4.0p19 installiert. Nach dem Start einer OMD Instanz kommt nur die Fehlermeldung:

OMD: Site Not Started

You need to start this site in order to access the web interface.

Im Apache Log ist folgendes zu sehen:

[Mon Dec 04 08:50:48.097245 2017] [proxy_http:error] [pid 20887] [client x.x.x.x:31372] AH01114: HTTP: failed to make connection to backend: 127.0.0.1, referer: http://server.example.net/extern/
[Mon Dec 04 08:50:56.943253 2017] [proxy:error] [pid 20883] (13)Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:5000 (127.0.0.1) failed
[Mon Dec 04 08:50:56.943276 2017] [proxy:error] [pid 20883] AH00959: ap_proxy_connect_backend disabling worker for (127.0.0.1) for 0s
[Mon Dec 04 08:50:56.943280 2017] [proxy_http:error] [pid 20883] [client x.x.x.x:31408] AH01114: HTTP: failed to make connection to backend: 127.0.0.1

netstat – tulpen zeigt aber das das Backend läuft:

# netstat -tulpen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    
...
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN      997        71127      21004/httpd         
...

Ein Blick in das Audit Log verrät das SELinux zuschägt:

#tail -f /var/log/audit/audit.log
...
type=AVC msg=audit(1512377448.096:3647): avc:  denied  { name_connect } for  pid=20887 comm="httpd" dest=5000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:commplex_main_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1512377448.096:3647): arch=c000003e syscall=42 success=no exit=-13 a0=a a1=559b02b25650 a2=10 a3=7fffb621631c items=0 ppid=20882 pid=20887 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1512377508.204:3689): avc:  denied  { name_connect } for  pid=21020 comm="httpd" dest=5000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:commplex_main_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1512377508.204:3689): arch=c000003e syscall=42 success=no exit=-13 a0=a a1=559b02b25650 a2=10 a3=7fffb621633c items=0 ppid=20882 pid=21020 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
...

Das Problem kann temporär zum testen wie folgt gelöst werden:

/usr/sbin/setsebool httpd_can_network_connect 1

um die Änderung permanent zu übernehmen:

/usr/sbin/setsebool -P httpd_can_network_connect 1

 

SSH über Proxy mit sconnect

SSH über Proxy mit sconnect. Mit diesem kleinen Tool schafft man es mit Linux über einen Socks oder HTTP-Proxy eine SSH Verbindung aufzubauen. Für alle Linux Distributionen

Auf der Shell als Root:

$ gcc -o sconnect connect.c
  $ cp sconnect /usr/local/bin
  $ nano ~/.ssh/config

und die folgenden Zeilen eintragen:

 # Für welche Hosts das ProxyCommand gilt:
  Host *
  # Verwendung mit Socks Proxy
  ProxyCommand /usr/local/bin/sconnect -4 -S your-socks-server:1080 %h %p

  # Verwendung mit HTTP Proxy
  ProxyCommand connect /usr/local/bin/sconnect -4 -H proxy.local.net:8080 %h %p

Das connect.c Script

Rootserver Firewall mit iptables

Einfache Firewall für Rootserver mit iptables Für alle Linux Destributionen

#!/bin/sh -e

#ROOTSERVER IP
ROOTSERVER="10.23.45.10"

#Chains flushen und Chains löschen
 iptables -F
 iptables -X
 
 # Erstmal alles in die Tonne
 iptables -P INPUT DROP
 iptables -P OUTPUT DROP
 iptables -P FORWARD DROP
 
 # Drop to Log
 iptables -N block_in
 iptables -A block_in -j LOG --log-prefix "FW DROP IN: " --log-level info
 iptables -A block_in -j DROP
 iptables -N block_out
 iptables -A block_out -j LOG --log-prefix "FW DROP OUT: " --log-level info
 iptables -A block_out -j DROP
 
 # Incoming Traffic (normal)
 iptables -N allow_in
 # Outgoing Traffic (normal)
 iptables -N allow_out
 
 # Incoming Traffic (special)
 iptables -N special_in
 # Outgoing Traffic (special)
 iptables -N special_out
 
 # Loopback
 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT
 
 # DHCP Client weil Rootie IP von DHCP bekommt
 iptables -A INPUT -i eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
 iptables -A OUTPUT -o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
 
 #################################################################
 ### Incoming Traffic
 #################################################################
 #ICMP Allow
 iptables -A allow_in -d $ROOTSERVER -p icmp --icmp-type echo-request -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p icmp --icmp-type echo-reply -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p icmp --icmp-type destination-unreachable -j ACCEPT
 
 #Apache / Pound(SSL)
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 80 -j ACCEPT
 #SSL
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 443 -j ACCEPT
 
 #Exim SMTP (SSL) / Courier POP3/IMAP (SSL)
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 25 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 110 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 143 -j ACCEPT
 # SSL
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 993 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --dport 995 -j ACCEPT
 
 #PowerDNS
 iptables -A allow_in -d $ROOTSERVER -p udp --dport 53 -j ACCEPT
 
 
 #Serververkehr der reingeht
 iptables -A allow_in -d $ROOTSERVER -p udp --sport 53 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --sport 25 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --sport 80 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --sport 443 -j ACCEPT
 iptables -A allow_in -d $ROOTSERVER -p tcp --sport 22 -j ACCEPT
 
 
 #################################################################
 #################################################################
 
 
 #################################################################
### Outgoing Traffic
#################################################################
 
 # ICMP Allow
 iptables -A allow_out -s $ROOTSERVER -p icmp --icmp-type echo-reply -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p icmp --icmp-type echo-request -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p icmp --icmp-type destination-unreachable -j ACCEPT
 
 
 # Apache / Pound
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 80 -j ACCEPT
 # SSL (nicht sicher)
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 443 -j ACCEPT
 
 #Exim SMTP (SSL) / Courier POP3/IMAP (SSL)
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 25 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 110 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 143 -j ACCEPT
 #SSL
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 993 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --sport 995 -j ACCEPT
 
 #PowerDNS
 iptables -A allow_out -s $ROOTSERVER -p udp --sport 53 -j ACCEPT
 
 
 #Serververkehr der rausgeht
 iptables -A allow_out -s $ROOTSERVER -p udp --dport 53 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --dport 25 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --dport 80 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --dport 443 -j ACCEPT
 iptables -A allow_out -s $ROOTSERVER -p tcp --dport 22 -j ACCEPT
  #################################################################

#################################################################
### Rules
#################################################################
 ## Incoming Traffic
 iptables -A INPUT -j allow_in
 iptables -A INPUT -j special_in
 iptables -A INPUT -j block_in
 
 ## Outgoing Traffic
 iptables -A OUTPUT -j allow_out
 iptables -A OUTPUT -j special_out
 iptables -A OUTPUT -j block_out


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 ;-)