You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS环境下OTRS与远程MySQL通过stunnel加密连接配置求助

解决OTRS通过Stunnel加密连接远程MySQL的完整思路

我来帮你一步步排查这个加密连接的问题——首先得明确整个流程的逻辑:我们要让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

五、排错指南(针对你之前配置失败的情况)

如果还是不行,按下面的步骤挨个排查:

  1. 检查端口连通性:在OTRS服务器上测试能不能连到MySQL的3308端口:
telnet 10.0.0.3 3308

如果不通,检查MySQL服务器的防火墙是否开放3308:

firewall-cmd --add-port=3308/tcp --permanent
firewall-cmd --reload
  1. 看Stunnel日志找错误:日志一般在/var/log/stunnel/stunnel.log或者/var/log/messages里,常见问题比如证书路径错了、端口被占用、权限不够。比如日志里出现Permission denied,就去检查证书的权限是否正确。
  2. 测试本地连接:在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:37:55