Zimbra OSE ๋กœ๊ทธ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•

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

Zimbra OSE ๋กœ๊ทธ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•
Zimbra OSE๋Š” ๋ชจ๋“  ๋กœ์ปฌ ๋กœ๊ทธ๋ฅผ /opt/zimbra/log ํด๋”์— ์ €์žฅํ•˜๋ฉฐ, ๋กœ๊ทธ๋Š” /var/log/zimbra.log ํŒŒ์ผ์—์„œ๋„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ Mailbox.log์ž…๋‹ˆ๋‹ค. ๋ฉ”์ผ ์„œ๋ฒ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ด๋ฉ”์ผ ์ „์†ก, ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ์ดํ„ฐ, ๋กœ๊ทธ์ธ ์‹œ๋„ ์‹คํŒจ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. Mailbox.log์˜ ํ•ญ๋ชฉ์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์‹œ๊ฐ„, ์ด๋ฒคํŠธ ์ˆ˜์ค€, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์Šค๋ ˆ๋“œ ๋ฒˆํ˜ธ, ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋ฐ IP ์ฃผ์†Œ, ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ํ…์ŠคํŠธ ์„ค๋ช…์ด ํฌํ•จ๋œ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. .

Zimbra OSE ๋กœ๊ทธ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋กœ๊ทธ ์ˆ˜์ค€์€ ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ์„œ๋ฒ„ ์šด์˜์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ ์ •๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ INFO, WARN, ERROR ๋ฐ FATAL์˜ 4๊ฐ€์ง€ ์ด๋ฒคํŠธ ์ˆ˜์ค€์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ฌ๊ฐ๋„๊ฐ€ ๋†’์•„์ง€๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋ชจ๋“  ์ˆ˜์ค€์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • INFO - ์ด ์ˆ˜์ค€์˜ ์ด๋ฒคํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Zimbra OSE์˜ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ˆ˜์ค€์˜ ๋ฉ”์‹œ์ง€์—๋Š” ์‚ฌ์„œํ•จ ๋งŒ๋“ค๊ธฐ ๋˜๋Š” ์‚ญ์ œ ๋“ฑ์— ๋Œ€ํ•œ ๋ณด๊ณ ์„œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ๊ณ  - ์ด ์ˆ˜์ค€์˜ ์ด๋ฒคํŠธ๋Š” ์ž ์žฌ์ ์œผ๋กœ ์œ„ํ—˜ํ•œ ์ƒํ™ฉ์— ๋Œ€ํ•ด ์•Œ๋ ค์ฃผ์ง€๋งŒ ์„œ๋ฒ„ ์ž‘๋™์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด WARN ์ˆ˜์ค€์€ ์‹คํŒจํ•œ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์‹œ๋„์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ERROR - ๋กœ๊ทธ์˜ ์ด ์ด๋ฒคํŠธ ์ˆ˜์ค€์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋กœ์ปฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ์•Œ๋ฆฌ๊ณ  ์„œ๋ฒ„ ์ž‘๋™์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ˆ˜์ค€์€ ๊ฐœ๋ณ„ ์‚ฌ์šฉ์ž์˜ ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ๊ฐ€ ์†์ƒ๋œ ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • FATAL - ์ด ์ˆ˜์ค€์€ ์„œ๋ฒ„๊ฐ€ ๊ณ„์†ํ•ด์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด FATAL ์ˆ˜์ค€์€ DBMS์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฉ”์ผ ์„œ๋ฒ„ ๋กœ๊ทธ ํŒŒ์ผ์€ ๋งค์ผ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์˜ ์ตœ์‹  ๋ฒ„์ „์€ ํ•ญ์ƒ Mailbox.log๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๋ฉฐ, ํŠน์ • ๋‚ ์งœ์˜ ๋กœ๊ทธ๋Š” ์ด๋ฆ„์— ๋‚ ์งœ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ์•„์นด์ด๋ธŒ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด mailbox.log.2020-09-29.tar.gz์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ™œ๋™ ๋กœ๊ทธ๋ฅผ ๋ฐฑ์—…ํ•˜๊ณ  ๋กœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด /opt/zimbra/log/ ํด๋”์—๋Š” ๋‹ค๋ฅธ ๋กœ๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํŠน์ • Zimbra OSE ์š”์†Œ์™€ ๊ด€๋ จ๋œ ํ•ญ๋ชฉ๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด audit.log์—๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ์— ๋Œ€ํ•œ ๊ธฐ๋ก๋งŒ ํฌํ•จ๋˜๊ณ  clamd.log์—๋Š” ๋ฐ”์ด๋Ÿฌ์Šค ๋ฐฑ์‹  ์ž‘์—…์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Zimbra OSE ์„œ๋ฒ„๋ฅผ ์นจ์ž…์ž๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ํ›Œ๋ฅญํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Fail2Ban์„ ์ด์šฉํ•œ ์„œ๋ฒ„ ๋ณดํ˜ธ, ์ด๋Š” audit.log๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด cron ์ž‘์—…์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ์Šต๊ด€์ž…๋‹ˆ๋‹ค. grep -ir "์ž˜๋ชป๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ" /opt/zimbra/log/audit.log์ผ์ผ ๋กœ๊ทธ์ธ ์‹คํŒจ ์ •๋ณด๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”.

Zimbra OSE ๋กœ๊ทธ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•
audit.log๊ฐ€ ๋‘ ๋ฒˆ ์ž˜๋ชป ์ž…๋ ฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์„ฑ๊ณต์ ์ธ ๋กœ๊ทธ์ธ ์‹œ๋„๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

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

Zimbra OSE ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์˜ค๋ฅ˜๋„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•ธ๋“ค๋Ÿฌ ์˜ˆ์™ธ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ํ•ธ๋“ค๋Ÿฌ ์˜ˆ์™ธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ•ธ๋“ค๋Ÿฌ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์˜ค๋ฅ˜์—๋Š” ์˜ˆ์™ธ์˜ ์›์ธ์„ ์„ค๋ช…ํ•˜๋Š” ์Šคํƒ ์ถ”์ ์ด ๋™๋ฐ˜๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฉ”์ผ ๋ฐฐ๋‹ฌ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ LmtpServer ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰์„ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ, POP ๋˜๋Š” IMAP ํ”„๋กœํ† ์ฝœ๊ณผ ๊ด€๋ จ๋œ ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด ImapServer ๋ฐ Pop3Server ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

Zimbra OSE ๋กœ๊ทธ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•
Mailbox.log ๋กœ๊ทธ์—์„œ ๊ณ„์ • ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•œ ๊ธฐ๋ก์„ ๋ณ„๋„์˜ ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜๋Š” ์˜ˆ

๋‹ค์ค‘ ์„œ๋ฒ„ ์ธํ”„๋ผ์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฒƒ์ด ํ›จ์”ฌ ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ๋กœ๊ทธ๋Š” ๋กœ์ปฌ์—์„œ ์ˆ˜์ง‘๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ค‘ ์„œ๋ฒ„ ์ธํ”„๋ผ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋ถˆํŽธํ•˜๋ฏ€๋กœ ๋กœ๊ทธ ์ˆ˜์ง‘์„ ์ค‘์•™ ์ง‘์ค‘ํ™”ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๋„๋ก ํ˜ธ์ŠคํŠธ๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ธํ”„๋ผ์— ์ „์šฉ ํ˜ธ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ํŠน๋ณ„ํ•œ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฉ”์ผ ์„œ๋ฒ„๋Š” ๋กœ๊ทธ ์ˆ˜์ง‘์„ ์œ„ํ•œ ๋…ธ๋“œ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ด๋Š” Mailstore01 ๋…ธ๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ด ์„œ๋ฒ„์—์„œ๋Š” ์•„๋ž˜ ๋ช…๋ น์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo su โ€“ zimbra 
zmcontrol stop
exit
sudo /opt/zimbra/libexec/zmfixperms -e -v

/etc/sysconfig/rsyslog ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ณ  SYSLOGD_OPTIONS=โ€-r -c 2โ€ณ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

/etc/rsyslog.conf๋ฅผ ํŽธ์ง‘ํ•˜๊ณ  ๋‹ค์Œ ์ค„์˜ ์ฃผ์„ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
$ModLoad imudp
$UDPServerRun 514

๋‹ค์Œ ๋ช…๋ น์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

sudo /etc/init.d/rsyslog stop
sudo /etc/init.d/rsyslog start
sudo su โ€“ zimbra
zmcontrol start
exit
sudo /opt/zimbra/libexec/zmloggerinit
sudo /opt/zimbra/bin/zmsshkeygen
sudo /opt/zimbra/bin/zmupdateauthkeys

zmprov gacf | ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. grep zimbraLogHostname. ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ํ˜ธ์ŠคํŠธ์˜ ์ด๋ฆ„์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด zmprov mcf zimbraLogHostname mailstore01.company.ru ๋ช…๋ น์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“  ์ธํ”„๋ผ ์„œ๋ฒ„(LDAP, MTA ๋ฐ ๊ธฐํƒ€ ๋ฉ”์ผ ์ €์žฅ์†Œ)์—์„œ zmprov gacf |grep zimbraLogHostname ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๋กœ๊ทธ๊ฐ€ ์ „์†ก๋˜๋Š” ํ˜ธ์ŠคํŠธ์˜ ์ด๋ฆ„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด zmprov mcf zimbraLogHostname mailstore01.company.ru ๋ช…๋ น์„ ์ž…๋ ฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ฐ ์„œ๋ฒ„์— ๋‹ค์Œ ๋ช…๋ น์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo su - zimbra
/opt/zimbra/bin/zmsshkeygen
/opt/zimbra/bin/zmupdateauthkeys
exit
sudo /opt/zimbra/libexec/zmsyslogsetup
sudo service rsyslog restart
sudo su - zimbra
zmcontrol restart

๊ทธ ํ›„, ๋ชจ๋“  ๋กœ๊ทธ๋Š” ๊ท€ํ•˜๊ฐ€ ์ง€์ •ํ•œ ์„œ๋ฒ„์— ๊ธฐ๋ก๋˜์–ด ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Zimbra OSE ๊ด€๋ฆฌ์ž ์ฝ˜์†”์˜ ์„œ๋ฒ„ ์ƒํƒœ ์ •๋ณด ํ™”๋ฉด์—๋Š” mailstore01 ์„œ๋ฒ„์— ๋Œ€ํ•ด์„œ๋งŒ ์‹คํ–‰ ์ค‘์ธ Logger ์„œ๋น„์Šค๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Zimbra OSE ๋กœ๊ทธ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ด€๋ฆฌ์ž์˜ ๋˜ ๋‹ค๋ฅธ ๊ณจ์น˜ ์•„ํ”ˆ ๋ฌธ์ œ๋Š” ํŠน์ • ์ด๋ฉ”์ผ์„ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Zimbra OSE์˜ ์ด๋ฉ”์ผ์€ ์ˆ˜๋ฝ ๋˜๋Š” ์ „์†ก๋˜๊ธฐ ์ „์— ๋ฐ”์ด๋Ÿฌ์Šค ๋ฐฑ์‹ , ์ŠคํŒธ ๋ฐฉ์ง€ ๋“ฑ์„ ํ†ตํ•œ ๊ฒ€์‚ฌ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด๋ฒคํŠธ๋ฅผ ๋™์‹œ์— ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ์ž ์ž…์žฅ์—์„œ๋Š” ์ด๋ฉ”์ผ์ด ๋„์ฐฉํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ๋‹จ๊ณ„์—์„œ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด ์ƒ๋‹นํžˆ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ถ„์‹ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ •๋ณด ๋ณด์•ˆ ์ „๋ฌธ๊ฐ€ Viktor Dukhovny๊ฐ€ ๊ฐœ๋ฐœํ•˜๊ณ  Postfix ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๋Š” ํŠน์ˆ˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ํŠน์ • ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์—ฐ๊ฒฐํ•˜๋ฏ€๋กœ ์‹๋ณ„์ž๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŠน์ • ๋ฌธ์ž ์ „์†ก๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๋น ๋ฅด๊ฒŒ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ž‘์—…์€ 8.7๋ถ€ํ„ฐ Zimbra OSE์˜ ๋ชจ๋“  ๋ฒ„์ „์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์Šคํฌ๋ฆฝํŠธ์˜ ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

#! /usr/bin/perl

use strict;
use warnings;

# Postfix delivery agents
my @agents = qw(discard error lmtp local pipe smtp virtual);

my $instre = qr{(?x)
	A			# Absolute line start
	(?:S+ s+){3} 		# Timestamp, adjust for other time formats
	S+ s+ 		# Hostname
	(postfix(?:-[^/s]+)?)	# Capture instance name stopping before first '/'
	(?:/S+)*		# Optional non-captured '/'-delimited qualifiers
	/			# Final '/' before the daemon program name
	};

my $cmdpidre = qr{(?x)
	G			# Continue from previous match
	(S+)[(d+)]:s+	# command[pid]:
};

my %smtpd;
my %smtp;
my %transaction;
my $i = 0;
my %seqno;

my %isagent = map { ($_, 1) } @agents;

while (<>) {
	next unless m{$instre}ogc; my $inst = $1;
	next unless m{$cmdpidre}ogc; my $command = $1; my $pid = $2;

	if ($command eq "smtpd") {
		if (m{Gconnect from }gc) {
			# Start new log
			$smtpd{$pid}->{"log"} = $_; next;
		}

		$smtpd{$pid}->{"log"} .= $_;

		if (m{G(w+): client=}gc) {
			# Fresh transaction 
			my $qid = "$inst/$1";
			$smtpd{$pid}->{"qid"} = $qid;
			$transaction{$qid} = $smtpd{$pid}->{"log"};
			$seqno{$qid} = ++$i;
			next;
		}

		my $qid = $smtpd{$pid}->{"qid"};
		$transaction{$qid} .= $_
			if (defined($qid) && exists $transaction{$qid});
		delete $smtpd{$pid} if (m{Gdisconnect from}gc);
		next;
	}

	if ($command eq "pickup") {
		if (m{G(w+): uid=}gc) {
			my $qid = "$inst/$1";
			$transaction{$qid} = $_;
			$seqno{$qid} = ++$i;
		}
		next;
	}

	# bounce(8) logs transaction start after cleanup(8) already logged
	# the message-id, so the cleanup log entry may be first
	#
	if ($command eq "cleanup") {
		next unless (m{G(w+): }gc);
		my $qid = "$inst/$1";
		$transaction{$qid} .= $_;
		$seqno{$qid} = ++$i if (! exists $seqno{$qid});
		next;
	}

	if ($command eq "qmgr") {
		next unless (m{G(w+): }gc);
		my $qid = "$inst/$1";
		if (defined($transaction{$qid})) {
			$transaction{$qid} .= $_;
			if (m{Gremoved$}gc) {
				print delete $transaction{$qid}, "n";
			}
		}
		next;
	}

	# Save pre-delivery messages for smtp(8) and lmtp(8)
	#
	if ($command eq "smtp" || $command eq "lmtp") {
		$smtp{$pid} .= $_;

		if (m{G(w+): to=}gc) {
			my $qid = "$inst/$1";
			if (defined($transaction{$qid})) {
				$transaction{$qid} .= $smtp{$pid};
			}
			delete $smtp{$pid};
		}
		next;
	}

	if ($command eq "bounce") {
		if (m{G(w+): .*? notification: (w+)$}gc) {
			my $qid = "$inst/$1";
			my $newid = "$inst/$2";
			if (defined($transaction{$qid})) {
				$transaction{$qid} .= $_;
			}
			$transaction{$newid} =
				$_ . $transaction{$newid};
			$seqno{$newid} = ++$i if (! exists $seqno{$newid});
		}
		next;
	}

	if ($isagent{$command}) {
		if (m{G(w+): to=}gc) {
			my $qid = "$inst/$1";
			if (defined($transaction{$qid})) {
				$transaction{$qid} .= $_;
			}
		}
		next;
	}
}

# Dump logs of incomplete transactions.
foreach my $qid (sort {$seqno{$a} <=> $seqno{$b}} keys %transaction) {
    print $transaction{$qid}, "n";
}

์Šคํฌ๋ฆฝํŠธ๋Š” Perl๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์ด๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํŒŒ์ผ์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. collate.pl, ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“  ๋‹ค์Œ ๋กœ๊ทธ ํŒŒ์ผ์„ ์ง€์ •ํ•˜๊ณ  pgrep์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐพ๊ณ  ์žˆ๋Š” ๋ฌธ์ž์˜ ์‹๋ณ„ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๋Š” ํŒŒ์ผ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. collate.pl /var/log/zimbra.log | pgrep '[์ด๋ฉ”์ผ ๋ณดํ˜ธ]>'. ๊ฒฐ๊ณผ๋Š” ์„œ๋ฒ„์—์„œ์˜ ๋ฌธ์ž ์ด๋™์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ํ–‰์˜ ์ˆœ์ฐจ์  ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค.

# collate.pl /var/log/zimbra.log | pgrep '<[email protected]>'
Oct 13 10:17:00 mail postfix/pickup[4089]: 4FF14284F45: uid=1034 from=********
Oct 13 10:17:00 mail postfix/cleanup[26776]: 4FF14284F45: message-id=*******
Oct 13 10:17:00 mail postfix/qmgr[9946]: 4FF14284F45: from=********, size=1387, nrcpt=1 (queue active)
Oct 13 10:17:00 mail postfix/smtp[7516]: Anonymous TLS connection established to mail.*******[168.*.*.4]:25: TLSv1 with cipher ADH-AES256-SHA (256/256 bits)
Oct 13 10:17:00 mail postfix/smtp[7516]: 4FF14284F45: to=*********, relay=mail.*******[168.*.*.4]:25, delay=0.25, delays=0.02/0.02/0.16/0.06, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 878833424CF)
Oct 13 10:17:00 mail postfix/qmgr[9946]: 4FF14284F45: removed
Oct 13 10:17:07 mail postfix/smtpd[21777]: connect from zimbra.******[168.*.*.4]
Oct 13 10:17:07 mail postfix/smtpd[21777]: Anonymous TLS connection established from zimbra.******[168.*.*.4]: TLSv1 with cipher ADH-AES256-SHA (256/256 bits)
Oct 13 10:17:08 mail postfix/smtpd[21777]: 0CB69282F4E: client=zimbra.******[168.*.*.4]
Oct 13 10:17:08 mail postfix/cleanup[26776]: 0CB69282F4E: message-id=zimbra.******
Oct 13 10:17:08 mail postfix/qmgr[9946]: 0CB69282F4E: from=zimbra.******, size=3606, nrcpt=1 (queue active)
Oct 13 10:17:08 mail postfix/virtual[5291]: 0CB69282F4E: to=zimbra.******, orig_to=zimbra.******, relay=virtual, delay=0.03, delays=0.02/0/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Oct 13 10:17:08 mail postfix/qmgr[9946]: 0CB69282F4E: removed

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

์ถœ์ฒ˜ : habr.com