Archiv für den Monat: Februar 2014

FreeBSD 9: Prosody 0.8.2 Upgrade auf 0.9.3

Das Warten hat ein Ende.

Die Portierung wurde auf 0.9.x angehoben.
-> luasec 0.5 – 07 Feb 2014
-> Remove dependency on luasocket – 07 Feb 2014
-> luasocket 3.0r1 (IPv4/IPv6) – 11 Feb 2014
-> prosody 0.9.3 – 11 Feb 2014

FreeBSD Beastie Jail: Prosody Upgrade

Punkt 1: Prosody 0.8.x entfernen

$
service prosody stop

pkg_delete prosody-0.8.2
pkg_delete lua51-luasocket-2.0.2_1
pkg_delete lua51-luasec-0.5
pkg_delete lua51-luafilesystem-1.5.0
pkg_delete lua51-luaexpat-1.2.0
pkg_delete lua-5.1.5_6
$

Punkt 2: OpenSSL 1.0.1x aus den Ports bauen

$
cd /usr/ports/security/openssl
make config-recursive
make test
make install
make clean

cp /usr/local/openssl/openssl.cnf.sample /usr/local/openssl/openssl.cnf

echo 'WITH_OPENSSL_PORT=YES' >> /etc/make.conf
echo 'OPTIONS_UNSET=X11' >> /etc/make.conf
$

Punkt 3: Prosody 0.9.x installieren

$
cd /usr/ports/net-im/prosody

make clean
make rmconfig

make config-recursive
make install clean
$

Hinweis: Registering depends: lua-5.1.5_6 openssl-1.0.1_9.

Punkt 4: Perfect Forward Secrecy mit Diffie-Hellman key exchange

$
/usr/local/bin/openssl dhparam -out /usr/local/etc/prosody/certs/dh-2048.pem 2048

chown prosody:prosody /usr/local/etc/prosody/certs/dh-2048.pem
chmod 640 /usr/local/etc/prosody/certs/dh-2048.pem
$

Punkt 5: (Jail IPv6) Address binding & Strong Ciphers

$
vi /usr/local/etc/prosody/prosody.cfg.lua
$
$
interfaces = { "127.0.1.1", "127.1.1.1", "2a01:xxx:yyyy::5269", "2a01:xxx:yyyy::5222" }
$

Abschnitt: VirtualHost

$
VirtualHost "jabber.domain.tld"
        enabled = true;
        ssl = {
               key = "/usr/local/etc/prosody/certs/jabber.domain.tld.key";
               certificate = "/usr/local/etc/prosody/certs/jabber.domain.tld.chain.crt";
-- --- --- PLITC --- --- --
options = { "no_sslv2", "no_sslv3", "no_ticket", "no_compression", "cipher_server_preference", "single_dh_use", "single_ecdh_use" };
dhparam = "/usr/local/etc/prosody/certs/dh-2048.pem";
ciphers = "HIGH+kEDH:HIGH+kEECDH:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES128-SHA256:!ECDHE-RSA-AES128-GCM-SHA256:!ECDHE-RSA-AES128-SHA256:!ECDHE-RSA-AES128-SHA:!AES128-GCM-SHA256:!AES128-SHA256:!CAMELLIA256-SHA:!AES256-SHA:!DHE-RSA-CAMELLIA128-SHA:!DHE-DSS-CAMELLIA128-SHA:!DHE-RSA-AES128-SHA:!DHE-DSS-AES128-SHA:HIGH:!CAMELLIA128-SHA:!AES128-SHA:!SRP:!3DES:!aNULL";
-- --- --- PLITC --- --- --
        }
$

OpenSSL Test

$
openssl s_client -connect jabber.server.tld:5222 -starttls xmpp | grep 'Cipher is'
$

That’s FreeBSD.

known issues:

27.02.2014
Jail: WITH_OPENSSL_PORT Probleme

Obwohl /etc/make.conf das OpenSSL aus den Ports definiert und die Luasec ebenfalls eine OpenSSL 1.0.1e/f Verlinkung benutzt -> steht einem TLS 1.1/1.2 nicht zur Verfügung!

siehe: luasec options.h

Lösungsansatz:

Zunächst wird die libssl.so verglichen

FreeBSD 9.2 (trotz WITH_OPENSSL_PORT=YES wird OpenSSL aus dem Base verwendet)

$
ldd /usr/local/lib/lua/5.1/ssl.so
   /usr/local/lib/lua/5.1/ssl.so:
   libssl.so.6 => /usr/lib/libssl.so.6 (0x80120e000)
   libcrypto.so.6 => /lib/libcrypto.so.6 (0x801464000)
   libc.so.7 => /lib/libc.so.7 (0x80081b000)
$

FreeBSD 10 (mit OpenSSL aus der Base)

$
ldd /usr/local/lib/lua/5.1/ssl.so
   /usr/local/lib/lua/5.1/ssl.so:
   libssl.so.7 => /usr/lib/libssl.so.7 (0x80160e000)
   libcrypto.so.7 => /lib/libcrypto.so.7 (0x801877000)
   libc.so.7 => /lib/libc.so.7 (0x80081d000)
$

Mit Hilfe von truss den Kompiliervorgang näher betrachten

$
cd /usr/ports/security/luasec
truss -f make 2> /tmp/prosody_luasec_error
cat /tmp/prosody_luasec_error | grep -i ssl
cat /tmp/prosody_luasec_error | grep -i port
$

ssl.so muss beim kompilieren mit /usr/local/lib verlinkt werden

$
ld -O -fPIC -shared -L/usr/local/lib/lua51 -L/var/ports/basejail/usr/ports/security/luasec/work/luasec-luasec-0.5/src/luasocket -o ssl.so x509.o  context.o  ssl.o -lssl -lcrypto -lluasocket
$

Lösung:

$
cd /usr/ports/security/luassec
make clean
make deinstall

make LDFLAGS="-O -fPIC -shared -L/usr/local/lib -L/usr/local/lib/lua51 -L/var/ports/basejail/usr/ports/security/luasec/work/luasec-luasec-0.5/src/luasocket"

make install clean
$

Fertig!

$
[root@jabber:security/luasec]# ldd /var/ports/basejail/usr/ports/security/luasec/work/luasec-luasec-0.5/src/ssl.so
/var/ports/basejail/usr/ports/security/luasec/work/luasec-luasec-0.5/src/ssl.so:
   libssl.so.8 => /usr/local/lib/libssl.so.8 (0x80120e000)
   libcrypto.so.8 => /usr/local/lib/libcrypto.so.8 (0x801475000)
   libthr.so.3 => /lib/libthr.so.3 (0x801858000)
   libc.so.7 => /lib/libc.so.7 (0x80081b000)
$

Danke an nulli fürs debuggen