我一直在努力使用 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。