CentOS环境下OTRS与远程MySQL通过stunnel加密连接配置求助
我来帮你一步步排查这个加密连接的问题——首先得明确整个流程的逻辑:我们要让OTRS连接本地的Stunnel监听端口,Stunnel把流量加密后发给MySQL服务器上的Stunnel服务端,后者解密后转发到本地的MySQL 3306端口。这样绕一下,就能弥补OTRS不支持MySQL加密连接的短板了。
下面从安装、配置、验证到排错,给你逐个环节拆解:
一、先搞定两边的Stunnel基础安装
不管是OTRS服务器(10.0.0.4)还是MySQL服务器(10.0.0.3),先确保Stunnel已经装上:
yum install stunnel -y
装完先别急着启动,先把配置弄对。
二、MySQL服务器(10.0.0.3)的Stunnel服务端配置
编辑/etc/stunnel/stunnel.conf,添加这段配置:
[mysql-ssl] accept = 10.0.0.3:3308 # 监听MySQL服务器的3308端口,想更安全的话可以直接写10.0.0.4:3308,只允许OTRS服务器访问 connect = 127.0.0.1:3306 # 把加密流量解密后转发到本地MySQL的默认端口 cert = /etc/stunnel/stunnel.pem # 加密用的证书,得自己生成 client = no # 明确这是服务端角色
生成自签名证书(内部用足够了)
在MySQL服务器上执行这条命令生成证书,按提示填信息就行,不用太严格:
openssl req -new -x509 -days 3650 -nodes -out /etc/stunnel/stunnel.pem -keyout /etc/stunnel/stunnel.pem
调整MySQL用户权限
因为Stunnel转发后,MySQL收到的连接是来自本地127.0.0.1,所以你的OTRS数据库用户得允许从127.0.0.1访问(之前如果是允许10.0.0.4的话要改):
GRANT ALL PRIVILEGES ON otrs_db.* TO 'otrs_user'@'127.0.0.1' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES;
另外建议把MySQL的bind-address改成127.0.0.1(在my.cnf或my.cnf.d/mysql-server.cnf里),这样MySQL只监听本地,更安全。
启动并启用Stunnel服务
systemctl start stunnel systemctl enable stunnel
用这条命令确认端口在监听:
netstat -tulnp | grep stunnel
应该能看到10.0.0.3:3308的监听记录。
三、OTRS服务器(10.0.0.4)的Stunnel客户端配置
编辑/etc/stunnel/stunnel.conf,添加客户端配置:
[mysql-ssl-client] accept = 127.0.0.1:3307 # 监听本地3307端口,OTRS就连接这个端口 connect = 10.0.0.3:3308 # 把本地流量加密后转发到MySQL服务器的Stunnel端口 client = yes # 明确这是客户端角色 CAfile = /etc/stunnel/stunnel.pem # 这里要把MySQL服务器上的证书复制过来
复制证书到OTRS服务器
用scp把MySQL服务器的证书传过来:
scp root@10.0.0.3:/etc/stunnel/stunnel.pem /etc/stunnel/
然后给证书设置正确的权限,避免Stunnel报错:
chmod 600 /etc/stunnel/stunnel.pem chown stunnel:stunnel /etc/stunnel/stunnel.pem
启动OTRS服务器的Stunnel
systemctl start stunnel systemctl enable stunnel
同样检查端口监听:
netstat -tulnp | grep stunnel
应该看到127.0.0.1:3307的记录。
四、修改OTRS的数据库连接配置
找到OTRS的核心配置文件/opt/otrs/Kernel/Config.pm,修改数据库连接部分:
$Self->{DatabaseHost} = '127.0.0.1'; $Self->{DatabasePort} = '3307'; # 改成Stunnel监听的本地3307端口 $Self->{DatabaseUser} = 'otrs_user'; $Self->{DatabasePw} = '你的数据库密码'; $Self->{Database} = 'otrs_db';
保存后重启OTRS服务:
systemctl restart otrs
五、排错指南(针对你之前配置失败的情况)
如果还是不行,按下面的步骤挨个排查:
- 检查端口连通性:在OTRS服务器上测试能不能连到MySQL的3308端口:
telnet 10.0.0.3 3308
如果不通,检查MySQL服务器的防火墙是否开放3308:
firewall-cmd --add-port=3308/tcp --permanent firewall-cmd --reload
- 看Stunnel日志找错误:日志一般在
/var/log/stunnel/stunnel.log或者/var/log/messages里,常见问题比如证书路径错了、端口被占用、权限不够。比如日志里出现Permission denied,就去检查证书的权限是否正确。 - 测试本地连接:在OTRS服务器上用mysql客户端直接连本地3307:
mysql -h 127.0.0.1 -P 3307 -u otrs_user -p
如果能连上,说明Stunnel没问题,问题出在OTRS的配置上;如果连不上,回到Stunnel的配置和日志排查。
4. 检查MySQL日志:看MySQL的错误日志(/var/log/mariadb/mariadb.log或/var/log/mysql/error.log),有没有连接被拒绝的信息,确认用户权限是否正确。
六、额外安全优化建议
- 限制Stunnel服务端只监听OTRS的IP:把
accept = 10.0.0.3:3308改成accept = 10.0.0.4:3308,这样只有OTRS服务器能连。 - 关闭MySQL的外部3306端口:在MySQL服务器的防火墙上禁用3306,只开放3308给OTRS,进一步降低风险。
- 定期更新证书:避免证书过期导致连接失败。
内容的提问来源于stack exchange,提问作者cyzczy

