Archiv der Kategorie: Linux

Alles rund um die Pinguine – auf dem Desktop und dem Server

XMPP continued

Der XMPP Server unter Prosody läuft einfach. Etwas hakelig erwies sich die Konfiguration der Chaträume, die meinem Eindruck nach auch von den Fähigkeiten der mit dem Server verbundenen Clients abhängig ist: deren Zusammenspiel mit Prosody erzeugt einige Inkonsistenzen. Bei den folgenden Einstellungen für Prosody

# /etc/prosody/prosody.cfg.lua
Component "blabla.domain.tld" "muc"
         restrict_room_creation = "local"
         max_history_messages = 20

erlaubte es mir Conversations nicht, einen Chatraum einzurichten. Leider klappt das auch nicht mit

restrict_room_creation = true

das ja eigentlich das Recht zur Raumerstellung auf die Admins beschränken sollte. Das funktionierte bei meinen Versuchen ein einziges mal – danach dann nicht mehr. Warum, war den Logs für mich nicht zu entnehmen. Da stand

Out of connection options, can't connect to blabla
Sending error replies for 2 queued stanzas because of failed outgoing connection to blabla

(blabla steht hier für den gewählten Raumnamen) aber ich googlete mich in die Ecke ohne schlau zu werden. Ich stellte deswegen auf

restrict_room_creation = false

um und überwache zur Sicherheit das Verzeichnis mit den Raumdefinitionen, auf dass ich mitbekomme, was mein Server so alles hostet. Diese liegen hier:

/var/lib/prosody/blabla%2edomain%2etld/config/

Eine weitere Hürde auf dem Weg zu eigenen MUCs war, dass mein Zertifikat für den Server nur auf domain.tld und www.domain.tld läuft. Der Standard für MUCs scheint aber conference.domain.tld zu sein. Ich hätte mir demnach ein extra Zertifikat besorgen oder richtig Geld in die Hand nehmen müssen, was mir schlicht zu blöd war. Startssl muss reichen. Also sind die Chaträume nun eben unter www zu finden. Für die eigenen Bedürfnisse geht das.

Überhaupt: Die Clients.

Meine Erfahrungen beschränken sich auf xabber, tigase, yaxim und conversations. Von diesen beherrscht nur conversations in Zusammenspiel mit Prosody den (fast) reibungslosen Versand von Dateien und Bildern, den Austausch von OTR-verschlüsselten Nachrichten sowie nun auch die Einrichtung und Verwaltung (privat / öffentlich, Einladungen verschicken und annehmen) von Räumen.

Screenshot_2015-06-04-09-11-42

Beim Versand von Bildern und Dateien mit Conversations / Prosody muss man allerdings darauf achten, dass die Beteiligten gegenseitig ihren Online-Status sehen dürfen und auch beide online sind (grüner send / camera button) – sonst fällt der Prozess kommentarlos auf die Nase.

Eine Option zur Zwischenspeicherung von Dateien und Bildern auf dem Server habe ich in Prosody nicht gefunden und dafür scheint es auch kein Modul zu geben. Das Modul mod_storage_internal kann nur mit Text umgehen und auch mod_offline behandelt lediglich Text. Ich muss mir mal mod_storage_sql ansehen. Evtl geht ja da was (auch wenn die Beschreibung der DB-Felder für mich nicht so aussieht).

Dazu kommt: Verschickt man über Conversations dickere Dateien (getestet habe ich mit bis zu 16MB), dann fällt auch dies gelegentlich auf die Nase, obwohl sich die Beteiligten gegenseitig sehen. Hier scheint das Zusammenspiel zwischen Conversations und Cyanogenmod (Energieeinstellungen) eine Fehlerquelle zu sein: schaltet sich der Bildschirm ab, dann bricht häufig auch die Dateiübertragung zusammen.

Insgesamt betrachtet: Die grundlegenden Dinge funktionieren nun – bei vielen Details ist noch Luft nach oben.

De B ian

Was ich auch an einem Debian 7 mit Apache 2.2 zu drehen versuche, mehr als ein B hole ich bei SSLLabs nicht raus. Apache 2.2 kennt

SSLOpenSSLConfCmd

nicht und damit scheint man am Ende.

Wer einen moderneren Apachen fährt, dem sollte ein

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder  on
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

zumindest nicht nur meiner Denke nach weiterhelfen.

Unter Ubuntu 14.04 mit Apache 2.4 reicht auch das

SSLHonorCipherOrder on
SSLProtocol All -SSLv3
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

meinen Versuchen nach für ein A Rating, sofern die Schlüssel lang genug sind.

Es ist ein Gewürge …

XMPP

Ich habe meine Metadaten gerne unter Kontrolle und mir deswegen einen XMPP Server unter Prosody gegönnt. Hier einige Notizen rund um die Installation.

Basis

Prosody Paketquellen einbinden um von der trägen Paketverwaltung in den Ubuntu Repos unabhängig zu werden:

echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list

Den Key der Paketquelle holen und in APT werfen:

wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
sudo apt-get update

Prosody installieren:

apt-get install prosody

Einstellungen für den Benutzer prosody in /etc/passwd kontrollieren, der nur /bin/false als Shell erhalten darf:

prosody:x:113:121:Prosody XMPP Server,,,:/var/lib/prosody:/bin/false

Prosody Konfiguration anpassen – unter Lua ist ein doppeltes Minus ein Kommentarzeichen:

vi /etc/prosody/prosody.cfg.lua

Die Konfigurationsdatei ist gut strukturiert und weitgehend selbsterklärend, so dass beim Lesen kaum Fragen offen bleiben. Im Zweifel alle Restfragen über die sauber strukturierte Dokumentation bei https://prosody.im klären.

In der Konfiguration

  1. den Admin für den XMPP Server festlegen
  2. die Sektion Module durchsehen und z.B. version sowie uptime deaktivieren, damit wir nach Außen hin nicht gleich alle Angriffspunkte verraten.

Ebenfalls kontrollieren, ob Registrierungen über Clients abgelehnt werden. Das scheint nötig zu sein, damit man nicht mit Konten zugespamt wird:

allow_registration = false;

Wir wollen die Verbindung zwischen Client und Server Zwangsverschlüsseln:

c2s_require_encryption = true

Das geht im Prinzip auch für s2s (Server to Server) Verbindungen. Hier liegt auch der Grund, warum wir dringend OTR Verschlüsselung haben wollen, wenn wir nicht auf der eigenen Domain chatten.

Die Passwörter der Benutzer verschlüsselt speichern, auch wenn die Nebenwirkung ist, dass manche Clients länger brauchen, um sich anzumelden:

authentication = "internal_hashed"

SSL Key einbinden. Hierbei für Zwischenzertifikate ein PEM basteln wie für Dovecot und Freunde ebenfalls üblich.

ssl = {
        key = "/etc/prosody/certs/domain.key";
        certificate = "/etc/prosody/certs/domain.pem";
}

Siehe zu intermediären Zertifikaten auch: https://prosody.im/doc/certificates?s[]=pem#certificate_chains

Unser Zertifikatsspeicher für Prosody verwendet schlicht Symlinks, um sich die Arbeit einfacher zu machen, wenn Zertifikate erneuert werden:

ls -la /etc/prosody/certs/
# Zeigt dann:
domain.key -> /etc/path/to/certs/ssl/domain.tld/domain.key
domain.pem -> /etc/path/to/certs/ssl/mailserver/domain.pem

Die Hosts einrichten:

VirtualHost "xmppserver.tld"

-- enabled = false -- Remove this line to enable this host
ssl = {
              key = "/etc/prosody/certs/domain.key";
              certificate = "/etc/prosody/certs/domain.pem";
      }

Prosody neu starten:

sudo service prosody restart

Nach Fehlern suchen:

tail -f /var/log/prosody/prosody.err

Einen Fehler finden und wohl erst einmal schlicht hinnehmen:

The version of LuaExpat on your system does not support stanza size limits, which may leave servers on untrusted networks (e.g. the internet) vulnerable to denial-of-service attacks. You should upgrade to LuaExpat 1.3.0 or higher as soon as possible. See http://prosody.im/doc/depends#luaexpat for more information.

Siehe hierzu auch https://prosody.im/doc/depends#luaexpat und den Hinweis, dass man in diesem Fall auf compression verzichten sollte (das ist der Default).

Die Benutzer anlegen – den oben eingetragenen Admin hierbei nicht vergessen:

prosodyctl adduser admin@xmppserver.tld

Jetzt mit den ersten Clients eine Verbindung aufbauen und den Verbindungen zusehen, wie sie reinkommen:

tail -f /var/log/prosody/prosody.log

Einen Blick in den Benutzerkontenbereich werfen:

ls -la /var/lib/prosody/xmppserver.tld/accounts

Dort nachsehen, ob die *.dat Dateien auch wirklich nur verschlüsselte Passwörter enthalten.

Am Ende den gesamten Server auf den Prüfstand stellen: https://xmpp.net/

Sicherheit

Siehe zum folgenden Abschnitt: https://code.google.com/p/prosody-modules/wiki/mod_log_auth und auch https://jabber.lqdn.fr/securing-our-jabber-server-with-fail2ban-securisation-du-serveur-jabber-avec-fail2ban/

Im Modules Verzeichnis von Prosody ein weiteres Modul hinterlegen:

# /usr/lib/prosody/modules
wget http://prosody-modules.googlecode.com/hg/mod_log_auth/mod_log_auth.lua

Das Modul umbenennen, damit es läuft:

mv mod_log_auth.lua mod_auth_log.lua

Das Modul in der Konfiguration einschalten

# /etc/prosody/prosody.cfg.lua
"auth_log" -- Anbindung fuer fail2ban http://prosody-modules.googlecode.com/hg/mod_log_auth/mod_log_auth.lua

Prosody neu starten und kontrollieren, ob nun die Connects mitgeschrieben werden:

tail -f /var/log/syslog
tail -f /var/log/prosody/prosody.log

Einen Filter für fail2ban anlegen:

vi /etc/fail2ban/filter.d/prosody-auth.conf

Inhalt:

# Fail2Ban configuration file for prosody authentication
[Definition]
failregex = Failed authentication attempt \(not-authorized\) from IP: <HOST>
ignoreregex =

In der jail.local hinterlegen:

# XMPP
[prosody-auth]
enabled  = true
port     = 5223
filter   = prosody-auth
logpath  = /var/log/prosody/*.log
maxretry = 10

Die Dienste neu starten:

sudo service prosody restart
sudo service fail2ban restart

In Check_MK die Service discovery für den XMPP-Server-Host neu anschubsen, damit man auch dort sieht, was passiert.

Die nächsten Schritte: Für meine Schule muss das auch noch eingerichtet werden – dann allerdings mit LDAPs Anbindung, damit es jeder gleich nutzen kann und die Benutzerverwaltung einfacher wird.

Tunnelbau

Die OMD steht in der Schule hinter der Dom0, die für diesen Rechner gleichzeitig das Gateway ins Netz ist:

cat /proc/sys/net/ipv4/conf/eth0/forwarding 
cat /proc/sys/net/ipv4/conf/eth0/forwarding

Die Ausgabe muss jeweils 1 lauten.

Zwei iptables Regeln sorgen dafür, dass die Ports und der Traffic zur OMD durchgereicht werden:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 9393 -j DNAT --to-destination 192.168.0.2:443
iptables -A FORWARD -p tcp -d 192.168.0.2 --dport 9393 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Ein Aufruf von https://domnullundgateway.tld:9393/checkmk/ sorgt so dafür, dass Anfragen an die OMD, die intern unter https://192.168.0.2 zu erreichen ist, weiter geleitet werden.

Damit man diese Regeln nicht immer wieder neu setzen muss, stehen sie in /etc/network/interfaces am Ende der Konfiguration der Netzwerkkarte eth0 jeweils nach einem up.

Arch Dovevot Postfix

Auf allen meinen Laptops schleppe ich eine Kopie des lokalen Mailservers meiner Workstation mit mir herum – inzwischen eine Mail-Sammlung die rund 7 Jahre zurück reicht und mehrere GB umfasst. Hier einige Notizen zur Installation von Dovecot und Postfix unter Arch für die ausschließlich lokale Nutzung. Sicherheit ist nur dadurch gegeben, dass dieser Mailserver von Außen nicht zu erreichen ist – auch weil noch eine Firewall die Zugriffe blockiert.

Die aktiven Zeilen in der /etc/postfix/main.cf

compatibility_level = 2
queue_directory = /var/spool/postfix
command_directory = /usr/bin
daemon_directory = /usr/lib/postfix/bin
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = localhost.localdomain
mydomain = localdomain
myorigin = $mydomain
inet_interfaces = localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
mynetworks_style = host
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP $mail_name
debug_peer_level = 2
debugger_command =
	 PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
	 ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/bin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
inet_protocols = ipv4
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Die aktiven Zeilen in der /etc/dovecot/dovecot.conf

ssl = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:~/Maildir
mail_privileged_group = mail
auth default {
      mechanisms = plain login
      passdb pam {
      }
      userdb passwd {
      }
      socket listen {
        client {
          # Assuming the default Postfix $queue_directory setting
          path = /var/spool/postfix/private/auth
          mode = 0660
          # Assuming the default Postfix user and group
          user = postfix
          group = postfix
        }
        # deliver and some other programs need also auth-master:
        #master {
        #  path = /var/run/dovecot/auth-master
        #  mode = 0600
        #}
      }
    }
protocol imap {
  mail_plugins = $mail_plugins autocreate
}

Damit die Anmeldung als lokaler Benutzer funktioniert, noch die /etc/pam.d/dovecot:

auth     required     pam_unix.so nullok
account  required     pam_unix.so

Man könnte nun die Dienste jeweils aktivieren

systemctl enable dovecot.service
systemctl enable postfix.service

und somit permanent auf den lokalen Mailserver zugreifen – muss man aber nicht. Da diese Konfiguration bei mir auf einem MSI Wind U 100 läuft, spare ich mir die Ressourcen lieber und starte den Mailserver per Bash-Script, wenn ich auf mein lokales Mail-Archiv wirklich zugreifen muss. So lange man den Server localhost.localdomain im Thunderbird nicht anklickt, funktioniert dieser ja auch so für alle anderen IMAP Konten – und wenn man aus Versehen doch klickt, dieser aber nicht gestartet wurde, dann motzt Thunderbird halt, dass der Server nicht zu erreichen sei.

Firefox 37 und Thunderbird 31.6.0 zicken wegen OCSP Fehlern

Heute Morgen waren einige meiner Seiten nicht mehr mit Firefox über HTTPS zu erreichen und auch Thunderbird meinte, dass er das Zertifikat nicht schlucken wolle – allerdings drückte er sich anders aus: Der Mailserver unterstütze die gewählte Authentifizierungsmethode nicht.

Als ich auf dem Mailserver direkt nachsah, meldete Dovecot beim Verbindungsaufbau mit Thunderbird:

dovecot: imap-login: Disconnected (no auth attempts in 2 secs): user=<>, rip=123.123.123.123, lip=12.12.12.12, TLS: SSL_read() failed: error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate: SSL alert number 42, session=<TNfVw/XCDwBP+hWC>

In beiden Fällen handelte es sich um Zertifikate von StartSSL die von den Vorgängerversionen von Thunderbird und Firefox noch klaglos geschluckt wurden. Die Zertifikate sind gültig und andere Browser (Chrome, Rekonq) wie auch andere MUAs (KMail) haben das Problem auch nicht bzw. provozieren beim Dovecot keine derartigen Fehlermeldungen.

Für’s Erste habe ich nun in beiden Mozilla-Programmen die Überprüfung der Zertifikate über OCSP abgeschaltet, bis ich mehr über diesen Fehler herausgefunden habe … oder bis Mozillaprodukte die Zertifikate wieder fressen.

In Thunderbird geht das unter /Bearbeiten /Einstellungen /Erweitert /Zertifikate /Validierung und in Firefox findet man diese Funktion unter /Bearbeiten /Einstellungen /Erweitert /Zertifikate. In beiden Fällen jeweils den Haken bei der OCSP-Option rausnehmen. Schön ist das nicht.

Redmine

Der Projektmanager und Bugtracker Redmine hatte es Daniel und mir angetan. Also kam dieser auf einen unserer Ubuntu 14.04 Server.

apt-get install redmine redmine-sqlite libapache2-mod-passenger

Dann die Konfigurationsdateien anpassen:

# /etc/apache2/mods-available/passenger.conf
PassengerDefaultUser www-data

und

# /etc/apache2/sites-available/default-ssl.conf
<Directory /var/www/pfad/zu/redmine>
    RailsBaseURI /redmine
    PassengerResolveSymlinksInDocumentRoot on
</Directory>

Wichtig ist hier, dass der Eintrag für den DocumentRoot des bearbeiteten VirtualHost nicht ganz woanders hinzeigt, sonst fliegt PassengerResolveSymlinksInDocumentRoot auf die Nase (weitere Infos hier). Also im zugehörigen VirtualHost Eintrag prüfen, ob er stimmt:

DocumentRoot /var/www/pfad/zu

Redmine versymlinken:

ln -s /usr/share/redmine/public /var/www/pfad/zu/redmine

Die Konfigurationsdatei für Redmine an Ort und Stelle kopieren:

cp /usr/share/redmine/config/configuration.yml.example /etc/redmine/default/configuration.yml

Dort Sendmail für den Default Mode freischalten (funktioniert selbstverständlich auch mit Postfix):

# default configuration options for all environments
default:
  email_delivery:
    delivery_method: :sendmail

Bei Bedarf ebenda den Pfad für die Attachments überarbeiten. Der Default Pfad ist

/var/lib/redmine/default/files

wo dann Unterordner nach Datum des Uploads angelegt werden. Wer das anders haben will kann sich z.B. unter /var/www/pfad/zu/redmin_files anlegen, dem Apachen daran alle Rechte geben und den veränderten Pfad dann in configuration.yml eintragen:

# attachments_storage_path: /var/www/pfad/zu/redmine_files
  attachments_storage_path:

Das Apache Modul aktivieren und die Konfiguration neu laden:

sudo a2enmod passenger
sudo service apache2 restart

Leider enden hier viele Installationsanleitungen. Ich musste wie folgt weiter bauen:

Zuerst schien es mir so, als ob Ruby ohne bundler und sqlite3 Fähigkeiten nichts mit Redmine anzufangen wusste. Ich sah beim Aufruf nur eine leere Seite. Das hier half weiter:

gem install bundler sqlite3

Jetzt bekam ich wenigstens eine Fehlermeldung über eine fehlende und nicht beschreibbare Gemfile.lock Datei zu sehen. Ein

touch /usr/share/redmine/Gemfile.lock
chown www-data.www-data /usr/share/redmine/Gemfile.lock
service apache2 restart

setze die Datei an die gewünschte Stelle und machte Redmine läuffähig. Mit admin admin kann man sich anmelden und aus Redmine heraus die restliche Konfiguration anpassen.

Was dann noch fehlt war die Anbindung über LDAPs an den hausinternen Server. Redmine bringt ein LDAP Modul schon mit, also muss man nur die richtigen Einträge für einen LD-Server herausfinden. Geklappt hat es hiermit:

Name: Anbindung_LD-Server
Host: ip.adresse.des.servers
Port: 636 
BaseDN: dc=schule,dc=ort,dc=schule-bw,dc=de

On the fly Benutzererstellung: True

Login = uid
Firstname = givenName
Lastname = sn
Email = mailPrimaryAddress

Geholfen haben mir bei der Arbeit die folgenden Anleitungen: [1] [2] [3]

3ware opcode=0x85

Schweißperlen können einem RAID Statusmeldungen schon mal schnell auf die Stirn treiben. Fragt man den Status eines 3ware RAIDs so ab, dann sieht alles gut aus:

$ /usr/sbin/tw_cli /c0 show all

Fragt man genauer nach mit

$ /usr/sbin/tw_cli /c0 show diag

dann bekommt man Dinge zu sehen, die erst einmal erschrecken lassen. Ich fand heute unter anderem Folgendes:

Error, Unit 0: Invalid command opcode
(EC:0x101, SK=0x05, ASC=0x20, ASCQ=0x00, SEV=01, Type=0x70)
opcode=0x85

Thomas Krenn listet den Fehler nicht auf seiner sonst sehr guten Übersichtsseite zu 3ware Meldungen. Man kommt aber schon dort auf die Idee, dass es sich um ein Kommunikationsproblem handeln könnte, weil der Controller SMART Werte nicht von der Platte, sondern vom Array holen will. Das ist nicht ganz zutreffend.

Sucht man weiter, findet man noch diese Quelle bei Launchpad und das hier im IPFire Forum. Am Ende scheint es darauf hinaus zu laufen, dass SMART versucht von den Platten Temperaturwerte zu erhalten, damit aber nicht durchkommt. Man darf den Fehler wohl tatsächlich ignorieren.

Anders sieht es hiermit aus:

BBU comm error 0x241 while writing packet : I2C transaction aborted

Hierzu klärt der folgende Beitrag bei Serverfault auf, dass 3ware in den default Einstellungen den Schreibcache der Platten im RAID ausschaltet. Das erklärt für mich auch gleich, warum unser RAID so schnarch langsam ist – aber ich trau mich an

$ tw_cli /c1/u0 set cache=on

etc. ohne ein aktuelles Backup und Ferien im Hintergrund, um Katastrophen reparieren zu können, schlicht nicht ran. Eine BBU würde unabhängig von den Geschwindigkeitsproblemen für uns wirklich Sinn machen.

LD-Server und HTTPS

Webseiten und Dienste auf einem LD-Server laufen intern in LXC Containern oder auf einem Apache, sind jedoch nach Außen über Pound angebunden – und da ist die mitgelieferte Version ein Stück Softwaregeschichte. „Aktuell“ auf LD-Servern ist Version 2.5-1, der in der Default-Konfiguration eine ganze Reihe von Sicherheitsproblemen mit sich bringt. Nicht umsonst erhält man bei SSLLabs für eine nicht-angepasste LD-Server-Installation ein schlichtes F-Rating.

Man muss sich selbst helfen. Support oder Hilfe über die Foren darf man bei einem „Hauptsacheestutsystem“ nicht erwarten.

Mit dem folgenden Eintrag in die /etc/pound/pound.cfg stellt man sich zumindest bezogen auf das SSLLabs-Rating schon einmal viel besser auf und erhält ein C.

# Listen HTTPS
Ciphers "ALL:!ADH:!EXPORT56:RC4+RSA:HIGH:MEDIUM:!LOW:!SSLv2:+EXP:!eNUL:!EXP-DES-CBC-SHA:!EXP-RC2-CBC-MD5:!EXP-RC4-MD5:!EXP-DES-CBC-SHA:!EXP-RC2-CBC-MD5:!EXP"

Der Weisheit letzter Schluss ist das nicht: Die Konfiguration wird nach Systemupdates immer mal wieder überschrieben, so dass man hier gelegentlich vorbei schauen sollte. Außerdem hinterlässt auch die Zeile oben noch das eine oder andere Leck.

Aber es ist besser als vorher.

PS: Ein aktuelles Ubuntu Trusty hätte einen Pound 2.6-3 an Bord. Siehe http://packages.ubuntu.com/trusty/pound Der 2.5-1er Pound auf dem LD-Server scheint aus Oneiric zu stammen. Das war im Jahr 2011.

Wiedergänger

Direkt nach dem Umstieg von Ubuntu 12.04 auf 14.04 wollte sich die Horde-Installation meiner Schule nicht auf den neuesten Stand bringen lassen. Das übliche und sonst erfolgreiche

pear upgrade -a -B -c horde

brachte Fehlermeldungen nach dem folgenden Schema

downloading Horde_ActiveSync-2.25.0.tgz ...
Starting to download Horde_ActiveSync-2.25.0.tgz (345,324 bytes)
......................................................................done: 345,324 bytes
could not extract the package.xml file from "/build/buildd/php5-5.5.9+dfsg/pear-build-download/Horde_ActiveSync-2.25.0.tgz"
Download of "horde/horde_activesync" succeeded, but it is not a valid package archive
Error: cannot download "horde/Horde_ActiveSync"
downloading Horde_Compress-2.1.0.tgz ...
Starting to download Horde_Compress-2.1.0.tgz (2,187,446 bytes)
...done: 2,187,446 bytes
could not extract the package.xml file from "/build/buildd/php5-5.5.9+dfsg/pear-build-download/Horde_Compress-2.1.0.tgz"
Download of "horde/horde_compress" succeeded, but it is not a valid package archive
Error: cannot download "horde/Horde_Compress"
Download failed
upgrade failed

Damals half mir der folgende Bugreport bei launchpad weiter, der mich im Beitrag #9 auf die richtige Spur brachte. Der Fehler sitzt in der Datei

/usr/share/php/Archive/Tar.php

Hier muss gzopen durch gzopen64 ersetzt werden und gztell durch gztell64 und gzseek durch gzseek64.

Irgendwann im Laufe der letzten Woche muss ein Update gekommen sein, das die Tar.php ersetzte. Aktuell befinden sich die zu ändernden Zeilen samt angepasstem Inhalt in der Tar.php hier:

679:  if ($this->_compress_type == 'gz' && function_exists('gzopen64'))
680:  $this->_file = @gzopen64($this->_tarname, "wb9");
734:  if ($this->_compress_type == 'gz' && function_exists('gzopen64'))
735:  $this->_file = @gzopen64($v_filename, "rb");
759:  $this->_file = @gzopen64($this->_tarname, "r+b");
1782: $v_temp_tar = @gzopen64($this->_tarname.".tmp", "rb");
889:  @gzseek64($this->_file, gztell64($this->_file)+($p_len*512));

Dann läuft das Upgrade von Horde brav durch:

downloading Horde_ActiveSync-2.25.0.tgz ...
Starting to download Horde_ActiveSync-2.25.0.tgz (345,324 bytes)
......................................................................done: 345,324 bytes
downloading Horde_Compress-2.1.0.tgz ...
Starting to download Horde_Compress-2.1.0.tgz (2,187,446 bytes)
...done: 2,187,446 bytes
upgrade ok: channel://pear.horde.org/Horde_Compress-2.1.0
upgrade ok: channel://pear.horde.org/Horde_ActiveSync-2.25.0

Bis zum nächsten Mal.