๋ฐ์ํ๋ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ๋ ๊ฒ์ ๊ธฐ์ ์์คํ ์ ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ ์ค ํ๋์ ๋๋ค. ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ก์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ์ ๋ณด ์์คํ ์ ์ด์์ ๊ฐ์ฌํ๊ณ , ์ ๋ณด ๋ณด์ ์ฌ๊ณ ๋ฅผ ์กฐ์ฌํ ์๋ ์์ต๋๋ค. Zimbra OSE๋ ๋ํ ์์ ์ ๋ํ ์์ธํ ๋ก๊ทธ๋ฅผ ์ ์งํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์๋ฒ ์ฑ๋ฅ๋ถํฐ ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ก์์ ๊น์ง ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ Zimbra OSE์์ ์์ฑ๋ ๋ก๊ทธ๋ฅผ ์ฝ๋ ๊ฒ์ ๋ค์ ๊ฐ๋จํ ์์ ์ด ์๋๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ๊ตฌ์ฒด์ ์ธ ์๋ฅผ ์ฌ์ฉํ์ฌ Zimbra OSE ๋ก๊ทธ๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ๊ณผ ์ด๋ฅผ ์ค์ ์ง์คํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
Zimbra OSE๋ ๋ชจ๋ ๋ก์ปฌ ๋ก๊ทธ๋ฅผ /opt/zimbra/log ํด๋์ ์ ์ฅํ๋ฉฐ, ๋ก๊ทธ๋ /var/log/zimbra.log ํ์ผ์์๋ ์ฐพ์ ์ ์์ต๋๋ค. ์ด ์ค ๊ฐ์ฅ ์ค์ํ ๊ฒ์ Mailbox.log์
๋๋ค. ๋ฉ์ผ ์๋ฒ์์ ๋ฐ์ํ๋ ๋ชจ๋ ์์
์ ๊ธฐ๋กํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ด๋ฉ์ผ ์ ์ก, ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ์ดํฐ, ๋ก๊ทธ์ธ ์๋ ์คํจ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค. Mailbox.log์ ํญ๋ชฉ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์๊ฐ, ์ด๋ฒคํธ ์์ค, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์ค๋ ๋ ๋ฒํธ, ์ฌ์ฉ์ ์ด๋ฆ ๋ฐ IP ์ฃผ์, ์ด๋ฒคํธ์ ๋ํ ํ
์คํธ ์ค๋ช
์ด ํฌํจ๋ ํ
์คํธ ๋ฌธ์์ด์
๋๋ค. .
๋ก๊ทธ ์์ค์ ํด๋น ์ด๋ฒคํธ๊ฐ ์๋ฒ ์ด์์ ๋ฏธ์น๋ ์ํฅ ์ ๋๋ฅผ ๋ํ๋ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก 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 ์๋ฒ๋ฅผ ์นจ์
์๋ก๋ถํฐ ๋ณดํธํ๋ ํ๋ฅญํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
audit.log๊ฐ ๋ ๋ฒ ์๋ชป ์
๋ ฅ๋ ๋น๋ฐ๋ฒํธ์ ์ฑ๊ณต์ ์ธ ๋ก๊ทธ์ธ ์๋๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ์์
๋๋ค.
Zimbra OSE์ ๋ก๊ทธ๋ ๋ค์ํ ์ฌ๊ฐํ ์ค๋ฅ์ ์์ธ์ ์๋ณํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ ์ ์์ต๋๋ค. ์ฌ๊ฐํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ์๊ฐ ๊ด๋ฆฌ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ก๊ทธ๋ฅผ ์ฝ์ ์๊ฐ์ด ์์ต๋๋ค. ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์๋ฒ๋ฅผ ๋ณต์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋์ค์ ์๋ฒ๊ฐ ๋ฐฑ์ ๋์ด ๋ง์ ์์ ๋ก๊ทธ๊ฐ ์์ฑ๋๋ฉด ๋์ฉ๋ ํ์ผ์์ ํ์ํ ํญ๋ชฉ์ ์ฐพ๊ธฐ๊ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ค๋ฅ ๊ธฐ๋ก์ ๋น ๋ฅด๊ฒ ์ฐพ์ผ๋ ค๋ฉด ์๋ฒ๊ฐ ๋ค์ ์์๋ ์๊ฐ์ ์๊ณ ์ด ์๊ฐ๋ถํฐ์ ๋ก๊ทธ ํญ๋ชฉ์ ์ฐพ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ์ด์ ํญ๋ชฉ์ ๋ฐ์ํ ์ค๋ฅ์ ๋ํ ๊ธฐ๋ก์ ๋๋ค. ํค์๋ FATAL์ ๊ฒ์ํ์ฌ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ฐพ์ ์๋ ์์ต๋๋ค.
Zimbra OSE ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ํ์ง ์์ ์ค๋ฅ๋ ์๋ณํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํธ๋ค๋ฌ ์์ธ๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ํธ๋ค๋ฌ ์์ธ๋ฅผ ๊ฒ์ํ๋ฉด ๋ฉ๋๋ค. ํธ๋ค๋ฌ์ ์ํด ์์ฑ๋ ์ค๋ฅ์๋ ์์ธ์ ์์ธ์ ์ค๋ช ํ๋ ์คํ ์ถ์ ์ด ๋๋ฐ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ฉ์ผ ๋ฐฐ๋ฌ์ ์ค๋ฅ๊ฐ ์๋ ๊ฒฝ์ฐ LmtpServer ํค์๋๋ก ๊ฒ์์ ์์ํด์ผ ํ๋ฉฐ, POP ๋๋ IMAP ํ๋กํ ์ฝ๊ณผ ๊ด๋ จ๋ ์ค๋ฅ๋ฅผ ๊ฒ์ํ๋ ค๋ฉด ImapServer ๋ฐ Pop3Server ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ก๊ทธ๋ ์ ๋ณด ๋ณด์ ์ฌ๊ณ ๋ฅผ ์กฐ์ฌํ ๋๋ ๋์์ด ๋ ์ ์์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ์๋ฅผ ์ดํด ๋ณด๊ฒ ์ต๋๋ค. 20์ 20์ผ, ์ง์ ์ค ํ ๋ช ์ด ๊ณ ๊ฐ์๊ฒ ๋ฐ์ด๋ฌ์ค์ ๊ฐ์ผ๋ ํธ์ง๋ฅผ ๋ณด๋์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ํด๋ผ์ด์ธํธ ์ปดํจํฐ์ ๋ฐ์ดํฐ๊ฐ ์ํธํ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ง์์ ์๋ฌด๊ฒ๋ ๋ณด๋ด์ง ์์๋ค๊ณ ๋งน์ธํฉ๋๋ค. ์ฌ๊ฑด ์กฐ์ฌ์ ์ผํ์ผ๋ก ๊ธฐ์ ๋ณด์ ์๋น์ค๋ ์์คํ ๊ด๋ฆฌ์์๊ฒ ์กฐ์ฌ ์ค์ธ ์ฌ์ฉ์์ ๊ด๋ จ๋ XNUMX์ XNUMX์ผ์ ๋ฉ์ผ ์๋ฒ ๋ก๊ทธ๋ฅผ ์์ฒญํฉ๋๋ค. ํ์์คํฌํ ๋๋ถ์ ์์คํ ๊ด๋ฆฌ์๋ ํ์ํ ๋ก๊ทธ ํ์ผ์ ์ฐพ๊ณ ํ์ํ ์ ๋ณด๋ฅผ ์ถ์ถํ์ฌ ๋ณด์ ์ ๋ฌธ๊ฐ์๊ฒ ์ ์กํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ทธ๋ค์ ๊ทธ๊ฒ์ ์ดํด๋ณด๊ณ ์ด ํธ์ง๊ฐ ์ ์ก๋ IP ์ฃผ์๊ฐ ์ฌ์ฉ์ ์ปดํจํฐ์ IP ์ฃผ์์ ์ผ์นํ๋ค๋ ๊ฒ์ ์์๋ ๋๋ค. CCTV ์์์ ๋ณด๋ฉด ํด๋น ์ง์์ด ํธ์ง๋ฅผ ๋ณด๋์ ๋น์ ์ง์ฅ์ ์์๋ ๊ฒ์ผ๋ก ํ์ธ๋๋ค. ์ด ๋ฐ์ดํฐ๋ ๊ทธ๋ฅผ ์ ๋ณด๋ณด์ ๊ท์ ์๋ฐ ํ์๋ก ๊ธฐ์ํ๊ณ ํด๊ณ ํ๊ธฐ์ ์ถฉ๋ถํ๋ค.
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์ ์ด๋ฉ์ผ์ ์๋ฝ ๋๋ ์ ์ก๋๊ธฐ ์ ์ ๋ฐ์ด๋ฌ์ค ๋ฐฑ์ , ์คํธ ๋ฐฉ์ง ๋ฑ์ ํตํ ๊ฒ์ฌ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ด๋ฒคํธ๋ฅผ ๋์์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ๊ด๋ฆฌ์ ์ ์ฅ์์๋ ์ด๋ฉ์ผ์ด ๋์ฐฉํ์ง ์์ผ๋ฉด ์ด๋ค ๋จ๊ณ์์ ์ถ์ ํ๋ ๊ฒ์ด ์๋นํ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ถ์ค๋์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ ๋ณด ๋ณด์ ์ ๋ฌธ๊ฐ 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