Haproxy 不会对 smtp 进行负载平衡

Haproxy 不会对 smtp 进行负载平衡

我一直在努力使用 Haproxy 来配置 smtp 负载平衡。无论我做什么,服务器都会以黑屏响应,并且无法尝试 smtp 命令进行测试。日志中没有任何内容,当我从 Ubuntu 服务器本身进行测试时,我可以使用 telnet 访问后端服务器并成功获取提示并使用 smtp 命令进行测试。

另外,如果我使用应该通过 smtp 发送的应用程序,我将不会得到任何响应并且会超时。

另一个后端服务器运行正常,我的 Outlook 客户端正在运行,并且 Exchange Web 服务、ecp、owa、自动发现等也正常运行。

Ubuntu 版本 22.04 HAproxy 2.7

这是我的配置:

global
log /dev/log local0
log /dev/log local1 notice

chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon

# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private

#ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:

ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

tune.ssl.default-dh-param 2048

defaults
log global
mode http
option httplog
option dontlognull

timeout connect 10s
timeout client 10s
timeout server 10s

errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
no option http-use-htx

listen stats
stats enable
bind :1936 ssl crt /etc/ssl/certs/exchlb.pem
mode http
stats uri /haproxy?stats
stats refresh 5s
stats admin if TRUE

frontend fe_mail
bind :80
http-response set-header X-Frame-Options SAMEORIGIN
http-response set-header X-Content-Type-Options nosniff
http-response set-header Strict-Transport-Security max-age=63072000
mode http
maxconn 10000
redirect scheme https code 301 if !{ ssl_fc } # redirect 80 -> 443 (for owa)
bind *:443 ssl crt /etc/ssl/certs/email.pem alpn h2,http/1.1 ssl-min-ver TLSv1.2
acl xmail hdr(host) -i mail.domain.com autodiscover.domain.com smtp.domain.com
acl default_for_mail url_beg /
use_backend ex_default if xmail default_for_mail

frontend fe_smtp
mode tcp
option tcplog
bind :25 
log global
default_backend ex_smtp

backend ex_default
mode http
option httpchk GET /mapi/healthcheck.htm
option log-health-checks
http-check expect status 200
balance roundrobin
server srv1 srv1.domain.com:443 check ssl verify none
server srv2 srv2.domain.com:443 check ssl verify none

backend ex_smtp
mode tcp
balance leastconn
log global
server srv1 srv1.domain.com:25 check send-proxy
server srv2 srv2.domain.com:25 check send-proxy

答案1

这里发生了两件事。第一件是客户端和负载均衡器之间的防火墙。正确的 FW-config 负责处理连接重置。

HAproxy 发送其正确 IP 而不是客户端 IP 的另一个问题是。发生这种情况是因为 Exchange 不支持 HAproxy 2.7.1 命令 send-proxy。

实际上,您无法使用 HAproxy 将客户端 IP 发送到 Exchange。

相关内容