我正在尝试构建一个负载平衡的SMTP集群。邮件服务器已经存在并运行Exim 4。最初,我考虑使用Nginx进行负载平衡,但是在测试系统上,所有邮件服务器都认为入站连接来自负载均衡器IP,而不是实际的远程发件人IP,在广泛搜索之后,似乎没有任何解决办法。因为这样可以有效地将邮件集群变成一个开放的中继,这显然是不可能的,这很遗憾,因为Nginx在其他方面工作得很好。
因此,我希望使用HAProxy代替,因为我从进一步谷歌收集到,它有能力通过连接与他们的原始源IP完好无损,这样系统中继-允许列表和ACL将正确运作。
但是,按照几个在线示例设置了HAProxy,我要么得到"SMTP同步错误“(以及一个500系列的错误,这样邮件就会反弹),然后连接立即被删除,或者仅仅是没有SMTP消息的连接下降。
下面是正在使用的haproxy.conf:
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user nobody
group nobody
daemon
stats socket /var/lib/haproxy/stats
defaults
log global
option redispatch
retries 3
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout check 10s
maxconn 3000
listen smtp
bind 0.0.0.0:25
mode tcp
no option http-server-close
balance roundrobin
# option smtpchk HELO smtp-in.example.com
server smtp01 10.0.0.141:25 send-proxy check
server smtp02 10.0.0.143:25 send-proxy check
尽管存在send命令,我了解它是如何告诉how通过源IP的,Exim日志如下所示:
016-12-26 07:06:48 SMTP协议同步错误(输入未等待问候):从H=10.0.0.150 input=拒绝连接“PROXY TCP4 10.0.0.150 10.0.0.143 25\r\nHELO in.example.comr\n”
在这种情况下,.150是负载均衡器,.143是Exim服务器。
问题:
在这种情况下,当前的生产系统运行LVS,但是这依赖于负载均衡器和共享相同IP地址的所有邮件服务器上的回送接口。新的负载均衡器将是OpenSUSE 42.2,而且如果检测到网络上已经在使用的IP,则似乎有助于将其从自身中移除以避免冲突。所以LVS在新的建筑里了。
我正在考虑的问题的其他解决方案包括:完全分离入站和出站SMTP通信量(目前它都通过相同的负载均衡器运行),在负载均衡器IP地址上安装一个简单的中继(qmail ),配置为只允许标准中继实践中认可的范围,以及使用MX记录上的简单DNS循环将入站SMTP直接发送到邮件服务器。但是一个负载平衡的解决方案会更优雅。
发布于 2018-10-24 20:53:52
因此,我使用了自定义tcp检查。
backend smtp-back
mode tcp
no option http-server-close
balance roundrobin
tcp-check expect string 220
tcp-check send HELO\ test\r\n
tcp-check expect string 250
tcp-check send QUIT\r\n
tcp-check expect string 221
server mail01 mail01:25 check inter 60s rise 3 fall 3 backup
server mail02 mail02:25 check inter 60s rise 3 fall 3 backup
https://serverfault.com/questions/822705
复制相似问题