stunnel
Quasi-Alternative zu OpenVPN für einfache Punkt-zu-Punkt-Verbindungen. Eignet sich auch hervorragend, alte SSL-Kamellen, die z.B. anfällig gegen POODLE & Co. sind, und bei denen sich SSLv2 und SSLv3 nicht abschalten lässt, hinter einem stunnel zu verstecken.
Stunnel wird benötigt auf
Server-Seite
Client-Seite
Teile von stunnel sind 15+ Jahre alt.
Installation:
yum -y install stunnel
Systemd:
[Unit]
Description=TLS tunnel for network daemons
After=syslog.target network.target
[Service]
ExecStart=/usr/bin/stunnel
Type=forking
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Server-Zertifikat:
Ein einfaches CA-Zertifikat ohne Key Usages genügt (es braucht also kein Server-Zertifikat; server.pem ist ein reines CA-Cert). Das CA-Zertifikat muss aber die gesamte Chain beinhalten (in XCA: Export der stunnel CA als „PEM chain“).
Empfohlen: drei Jahre Gültigkeit.
Nach Erstellung/Installation der Zertifikate und Erstellung der Konfiguration müssen die DH-Parameter an das Server-Zertifikat angehängt
werden, sonst erhält man im Log den Fehler Could not load DH parameters from /etc/stunnel/server.pem
:
openssl dhparam 2048 >> /etc/stunnel/server.pem
stunnel-Server
Verzeichnis-Struktur:
/etc/stunnel
├── approved
│ ├── 35f791ce.0 -> client.pem
│ └── client.pem
├── README
├── revoked
│ ├── abc472ff.r0 -> client.pem
│ └── client.pem
├── server.key
├── server.pem
└── stunnel.conf
mkdir -p /etc/stunnel/{revoked,approved}
client = no
cert = /etc/stunnel/server.pem
key = /etc/stunnel/server.key
pid = /run/stunnel.pid
CApath = /etc/stunnel/approved
CRLpath = /etc/stunnel/revoked
verify = 4
; Allow only TLS, thus avoiding SSL
sslVersion = TLSv1
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
debug = 7
output = /var/log/stunnel.log
[beats]
accept = 12345
connect = 5044
chmod 0400 /etc/stunnel/server.key /etc/stunnel/server.pem
systemctl enable --now stunnel
Die Client-Zertifikate, denen man vertraut, werden in einem Verzeichnis gehasht abgelegt:
cd /etc/stunnel/approved
HASHVALUE=$(openssl x509 -noout -hash -in trustedcert.pem)
ln -s trustedcert.pem $HASHVALUE.0
Revozierte Zertifikate müssen dagegen $HASHVALUE.r0
heissen und mit obiger Konfiguration in /etc/stunnel/revoked
abgelegt werden:
cd /etc/stunnel/revoked
HASHVALUE=$(openssl x509 -noout -hash -in revokedcert.pem)
ln -s revokedcert.pem $HASHVALUE.r0
Restart des stunnel-Servers nach Änderungen der Zertfikate nötig.
Für Debug-Zwecke - Debug = 4
: nur Fehler protokollieren, Debug = 7
: Log aufdrehen. Anschliessend:
systemctl stop stunnel
stunnel kill $(pidof stunnel)
Log-File findet sich in /var/log/stunnel.log
.
Hinweise:
Mit der „chroot“-Option und User/Group „nobody“ funktioniert das chrooten unter systemd nicht (chroot: Permission denied).
Entweder man verwendet
CAfile
und hängt alle getrusteten Client-Zertifikate an das Zertifikat an, oder man verwendet wie obenCApath
. Wird beides angegeben, wird stunnel immer imCAfile
nach Zertifikaten suchen.Die Option „verify“ ist seit Version 5 deprecated.
stunnel-Client
client = yes
cert = /etc/stunnel/client.pem
key = /etc/stunnel/client.key
CAfile = /etc/stunnel/ca.pem
verify = 3
fips = no
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
debug = 7
output = /var/log/stunnel.log
[beats]
accept = 5044
connect = server:12345
chmod 0400 /etc/stunnel/client.key /etc/stunnel/client.pem
stunnel
Built on 2024-11-18