HAProxy๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Zimbra Open-Source Edition์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

๋Œ€๊ทœ๋ชจ Zimbra OSE ์ธํ”„๋ผ ๊ตฌ์ถ•์˜ ์ฃผ์š” ์ž‘์—… ์ค‘ ํ•˜๋‚˜๋Š” ์ ์ ˆํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค์˜ ๋‚ด๊ฒฐํ•จ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ ์™ธ์—๋„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์—†์ด๋Š” ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋™์ผํ•œ ์„œ๋น„์Šค ์‘๋‹ต์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„ ๊ฐ„์— ์š”์ฒญ์„ ์žฌ๋ถ„๋ฐฐํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ํ•˜๋“œ์›จ์–ด ์†”๋ฃจ์…˜์ธ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ์ค‘์—๋Š” ๋‹จ์ˆœํžˆ ๋‹ค์Œ ์š”์ฒญ์„ ๋ชฉ๋ก์˜ ๋‹ค์Œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” RoundRobin๊ณผ ๊ฐ™์€ ๋‹ค์†Œ ์›์‹œ์ ์ธ ๊ฒƒ์ด ์žˆ๊ณ  HAProxy์™€ ๊ฐ™์€ ๋” ์ง„๋ณด๋œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์ค‘์š”ํ•œ ์ด์ . HAProxy ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์™€ Zimbra OSE๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

HAProxy๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Zimbra Open-Source Edition์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

๋”ฐ๋ผ์„œ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ Zimbra ํ”„๋ก์‹œ 1000๊ฐœ, LDAP ๋ฐ LDAP ๋ณต์ œ ์„œ๋ฒ„ 192.168.0.57๊ฐœ, ๊ฐ๊ฐ 192.168.0.58๊ฐœ์˜ ์‚ฌ์„œํ•จ์ด ์žˆ๋Š” 192.168.0.77๊ฐœ์˜ ๋ฉ”์ผ ์ €์žฅ์†Œ ๋ฐ 192.168.0.78๊ฐœ์˜ MTA๊ฐ€ ์žˆ๋Š” Zimbra OSE ์ธํ”„๋ผ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๊ท ํ˜•์„ ๋งž์ถฐ์•ผ ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ์œ ํ˜•์˜ ํŠธ๋ž˜ํ”ฝ, ์ฆ‰ ์›น ํด๋ผ์ด์–ธํŠธ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์œ„ํ•œ HTTP์™€ ์ด๋ฉ”์ผ ์ „์†ก์„ ์œ„ํ•œ POP ๋ฐ SMTP๊ฐ€ ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ HTTP ํŠธ๋ž˜ํ”ฝ์€ IP ์ฃผ์†Œ๊ฐ€ XNUMX ๋ฐ XNUMX์ธ Zimbra ํ”„๋ก์‹œ ์„œ๋ฒ„๋กœ ์ด๋™ํ•˜๊ณ  SMTP ํŠธ๋ž˜ํ”ฝ์€ IP ์ฃผ์†Œ๊ฐ€ XNUMX ๋ฐ XNUMX์ธ MTA ์„œ๋ฒ„๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์„œ๋ฒ„ ๊ฐ„์— ์š”์ฒญ์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜๊ธฐ ์œ„ํ•ด Ubuntu 18.04๋ฅผ ์‹คํ–‰ํ•˜๋Š” Zimbra ์ธํ”„๋ผ์˜ ์ž…๋ ฅ ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” HAProxy ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์šด์˜ ์ฒด์ œ์— haproxy ์„ค์น˜๋Š” ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. sudo apt-get ์„ค์น˜ haproxy. ๊ทธ ํ›„ ํŒŒ์ผ์—์„œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. /etc/default/ํ•˜ํ”„๋ก์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ณ€๊ฒฝ ํ™œ์„ฑํ™”๋จ=0 ์— ํ™œ์„ฑํ™”๋จ=1. ์ด์ œ haproxy๊ฐ€ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค. ์„œ๋น„์Šค haproxy. ์ด ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ ๋ช…๋ น ์ถœ๋ ฅ์—์„œ โ€‹โ€‹์ง€์›Œ์ง‘๋‹ˆ๋‹ค.

HAProxy์˜ ์ฃผ์š” ๋‹จ์  ์ค‘ ํ•˜๋‚˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ์˜ IP ์ฃผ์†Œ๋ฅผ ์ „์†กํ•˜์ง€ ์•Š๊ณ  ์ž์ฒด IP ์ฃผ์†Œ๋กœ ๋Œ€์ฒดํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ณต๊ฒฉ์ž๊ฐ€ ๋ณด๋‚ธ ํŽธ์ง€๋ฅผ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด IP ์ฃผ์†Œ๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํŒŒ์ผ์„ ํŽธ์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. /opt/zimbra/common/conf/master.cf.in Postfix ์„œ๋ฒ„์—์„œ ๋‹ค์Œ ํ–‰์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

26      inet  n       -       n       -       1       postscreen
        -o postscreen_upstream_proxy_protocol=haproxy
 
466    inet  n       -       n       -       -       smtpd
%%uncomment SERVICE:opendkim%%  -o content_filter=scan:[%%zimbraLocalBindAddress%%]:10030
        -o smtpd_tls_wrappermode=yes
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_client_restrictions=
        -o smtpd_data_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_recipient_restrictions=
        -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
        -o syslog_name=postfix/smtps
        -o milter_macro_daemon_name=ORIGINATING
        -o smtpd_upstream_proxy_protocol=haproxy
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_filter=[%%zimbraLocalBindAddress%%]:10027
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_options=speed_adjust
 
588 inet n      -       n       -       -       smtpd
%%uncomment SERVICE:opendkim%%  -o content_filter=scan:[%%zimbraLocalBindAddress%%]:10030
        -o smtpd_etrn_restrictions=reject
        -o smtpd_sasl_auth_enable=%%zimbraMtaSaslAuthEnable%%
        -o smtpd_tls_security_level=%%zimbraMtaTlsSecurityLevel%%
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject
        -o smtpd_data_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_recipient_restrictions=
        -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
        -o syslog_name=postfix/submission
        -o milter_macro_daemon_name=ORIGINATING
        -o smtpd_upstream_proxy_protocol=haproxy
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_filter=[%%zimbraLocalBindAddress%%]:10027
%%uncomment LOCAL:postjournal_enabled%% -o smtpd_proxy_options=speed_adjust

์ด๋กœ ์ธํ•ด HAProxy์—์„œ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ์ˆ˜์‹ ํ•  ํฌํŠธ 26, 466 ๋ฐ 588์„ ์—ด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ์ €์žฅํ•œ ํ›„ zmmtactl restart ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์„œ๋ฒ„์—์„œ Postfix๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ HAProxy ๊ตฌ์„ฑ์„ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋จผ์ € ์„ค์ • ํŒŒ์ผ์˜ ๋ฐฑ์—… ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์—์„œ ์†Œ์Šค ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค. /etc/haproxy/haproxy.cfg ํ•„์š”ํ•œ ์„ค์ •์„ ์ ์ฐจ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค. ์ฒซ ๋ฒˆ์งธ ๋ธ”๋ก์€ ๋กœ๊ทธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํ—ˆ์šฉ๋˜๋Š” ์ตœ๋Œ€ ๋™์‹œ ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ , ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์†ํ•  ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„๊ณผ ๊ทธ๋ฃน์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

global
    user daemon
    group daemon
    daemon
    log 127.0.0.1 daemon
    maxconn 5000
    chroot /var/lib/haproxy

๋™์‹œ ์ ‘์†์ž 5000๋ช…์ด๋ผ๋Š” ์ˆ˜์น˜๊ฐ€ ๋‚˜์˜จ ๋ฐ๋Š” ์ด์œ ๊ฐ€ ์žˆ๋‹ค. ์šฐ๋ฆฌ ์ธํ”„๋ผ์—๋Š” 4000๊ฐœ์˜ ์‚ฌ์„œํ•จ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ์‚ฌ์„œํ•จ์ด ๋™์‹œ์— ์ž‘์—… ๋ฉ”์ผ๋กœ ์ด๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚  ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์•ฝ๊ฐ„์˜ ์—ฌ๋ฐฑ์„ ๋‚จ๊ฒจ ๋‘˜ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

defaults
        timeout client 1m
        log global
        mode tcp
        timeout server 1m
        timeout connect 5s

์ด ๋ธ”๋ก์€ ์—ฐ๊ฒฐ์ด ๋งŒ๋ฃŒ๋  ๋•Œ ์—ฐ๊ฒฐ์„ ๋‹ซ๊ธฐ ์œ„ํ•œ ์ตœ๋Œ€ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์„ค์ •ํ•˜๊ณ  HAProxy ์ž‘๋™ ๋ชจ๋“œ๋„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” TCP ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‚ด์šฉ์„ ๋ถ„์„ํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ TCP ํŒจํ‚ท์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ๋‹ค์–‘ํ•œ ํฌํŠธ์˜ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด SMTP ์—ฐ๊ฒฐ ๋ฐ ๋ฉ”์ผ ์ „์†ก์— ํฌํŠธ 25๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ธํ”„๋ผ์— ์žˆ๋Š” MTA๋กœ ์—ฐ๊ฒฐ์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด ํฌํŠธ 80์— ์žˆ๋Š” ๊ฒฝ์šฐ Zimbra ํ”„๋ก์‹œ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” http ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

ํฌํŠธ 25์— ๋Œ€ํ•œ ๊ทœ์น™:

frontend smtp-25
bind *:27
default_backend backend-smtp-25
 
backend backend-smtp-25
server mta1 192.168.0.77:26 send-proxy
server mta2 192.168.0.78:26 send-proxy

ํฌํŠธ 465์— ๋Œ€ํ•œ ๊ทœ์น™:

frontend smtp-465
bind *:467
default_backend backend-smtp-465

backend backend-smtp-465
server mta1 192.168.0.77:466 send-proxy
server mta2 192.168.0.78:466 send-proxy

ํฌํŠธ 587์— ๋Œ€ํ•œ ๊ทœ์น™:

frontend smtp-587
bind *:589
default_backend backend-smtp-587
 
backend backend-smtp-587
server mail1 192.168.0.77:588 send-proxy
server mail2 192.168.0.78:588 send-proxy

ํฌํŠธ 80์— ๋Œ€ํ•œ ๊ทœ์น™:

frontend http-80
bind    *:80
default_backend http-80
 
backend http-80
mode tcp
server zproxy1 192.168.0.57:80 check
server zproxy2 192.168.0.58:80 check

ํฌํŠธ 443์— ๋Œ€ํ•œ ๊ทœ์น™:

frontend https
bind  *:443
default_backend https-443
 
backend https-443
mode tcp
server zproxy1 192.168.0.57:80 check
server zproxy2 192.168.0.58:80 check

TCP ํŒจํ‚ท์„ MTA๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ทœ์น™์—์„œ ํ•ด๋‹น ์ฃผ์†Œ ์˜†์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Œ์„ ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ์†ก์‹  ํ”„๋ก์‹œ. ์ด์ „์— ๋ณ€๊ฒฝํ•œ Postfix ์„ค์ •์— ๋”ฐ๋ผ ๋ฐœ์‹ ์ž์˜ ์›๋ž˜ IP ์ฃผ์†Œ๋„ TCP ํŒจํ‚ท๊ณผ ํ•จ๊ป˜ ์ „์†ก๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ HAProxy์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค haproxy ์žฌ์‹œ์ž‘ ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

Zextras Suite์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์งˆ๋ฌธ์€ Zextras Ekaterina Triandafilidi ๋Œ€ํ‘œ์—๊ฒŒ ์ด๋ฉ”์ผ๋กœ ๋ฌธ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. [์ด๋ฉ”์ผ ๋ณดํ˜ธ]

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€