现在最新的stunnel是v5.36,而很多平台都还是stunnel4
下载stunnel-5.36.tar.gz,解压。
wget https://www.stunnel.org/downloads/stunnel-5.36.tar.gz
tar -zxvf stunnel-5.36.tar.gz
用./configure --help查看编译配置选项。
cd stunnel-5.36
./configure --help
配置选项中--with-threads可以配置成ucontext、pthread或者fork,默认是pthread。如果是pthread模式,创建一个线程处理每个连接;如果是fork模式,创建一个进程处理每个连接。用ps aux | grep stunnel查看,如果很多个stunnel进程,则是fork模式;如果只有一个stunnel进程,那就是ucontext或者pthread模式。ucontext实现了用户空间一个进程中上下文切换,用这种机制可以实现协程(Coroutine),从资源利用上来说ucontext比pthread和fork更好一点。fork方式稳定性和安全性应该最好,一是代码最简单,二是进程独立空间。pthread是默认配置,稳定性也有保障。
用configure生成Makefile,下面配置选项含义:禁用ipv6,禁用fips,禁用TCP Wrappers,每个网络连接创建一个线程处理。选项根据自己需要增删。
备注:TCP Wrappers作用是用/etc/hosts.allow 和 /etc/hosts.deny进行IP地址过滤,属于安全增强。
./configure --disable-ipv6 --disable-fips --disable-libwrap --with-threads=pthread
生成Makefile之后,make进行编译。
make
make编译完成编译好的stunnel位于src/stunnel,根据发行版本配置启动。我偷懒,直接覆盖了原来安装的/usr/bin/stunnel4命令,其他的脚本还用stunnel4的,目前没有发现问题。
sudo service stunnel4 stop
sudo cp /usr/bin/stunnel4 /usr/bin/stunnel4.backup
sudo cp src/stunnel /usr/bin/stunnel4
sudo service stunnel4 start

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。