Điểm:2

Different postfix logfile format when logging to separate file (maillog_file)

lá cờ gh

In order to separate the mail logs from the general system logs, I added this line to /etc/postfix/main.cf

maillog_file = /var/log/postfix.log

As expected, a file /var/log/postfix.log is created, and there are no more postfix entries in the var/log/syslog. Unfortunately, it seems that this will also change the contents of the log entries. This is what I get in the postfix.log (changed my original domain name against example.com here)

May 23 17:33:15 example postfix/qmgr[662299]: E7DB742646: from=<[email protected]>, size=549252, nrcpt=1 (queue active)
May 23 17:33:15 example postfix/qmgr[662299]: D7DA646E85: removed

When changing it back (and I changed back and forth several times to be sure), and after sending the same email again, I get this in syslog.

May 23 17:33:52 example2020 postfix/smtp[664151]: DE7EA4265D: to=<[email protected]>, relay=mail.example.com[11.111.11.111]:25, delay=1.7, delays=0.07/0.02/0.11/1.5, dsn=2.0.0,     status=sent (250 2.0.0 Ok: queued as 1BC7874B3A)
May 23 17:33:52 example2020 postfix/qmgr[664141]: DE7EA4265D: removed

Obviously, there are a lot of differences. First, a different server name is given after the date (example is set in /etc/mailname, example2020 is specified in /etc/hostname). Second, only the postfix/qmgr entries are logged, but not the postfix/smtp that contain additional information. The same is true for the var/log/mail.log that does not receive these entries any more.

So, here are two question...

(1) Why does postfix (mail_version = 3.4.13) log different information (no more postfix/smtp) as soon as I specify a maillog_file?

(2) Any ideas how to tell postfix that I want my postfix/smtp information back?

Postfix Configuration

$ postconf -n

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
bounce_queue_lifetime = 24h
compatibility_level = 2
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0
maillog_file = /var/log/postfix.log   # This is the trouble maker
maximal_queue_lifetime = 36h
message_size_limit = 67108864
milter_default_action = accept
milter_protocol = 6
mydestination = example2020   # Host name replaced by "example"
myhostname = example.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
non_smtpd_milters = inet:localhost:8892
readme_directory = no
recipient_delimiter = +
relayhost =
sender_canonical_maps = hash:/etc/postfix/senders
smtp_bind_address = 11.111.11.111
smtp_bind_address6 = 2a02:xxxx:0:xxxx::xx
smtp_destination_concurrency_limit = 3
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_cert_file = /var/www/ssl/example.cert
smtp_tls_key_file = /var/www/ssl/example.key
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_milters = inet:localhost:8892  # This one is for OpenDKIM
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_tls_cert_file = /var/www/ssl/example.cert
smtpd_tls_exclude_ciphers = ECDHE-RSA-RC4-SHA
smtpd_tls_key_file = /var/www/ssl/example.key
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_exclude_ciphers = ECDHE-RSA-RC4-SHA
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
tls_high_cipherlist = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
tls_ssl_options = NO_COMPRESSION
virtual_alias_maps = hash:/etc/postfix/virtual


$ postconf -M

smtp       inet  n       -       y       -       -       smtpd
pickup     unix  n       -       y       60      1       pickup
cleanup    unix  n       -       y       -       0       cleanup
qmgr       unix  n       -       n       300     1       qmgr
tlsmgr     unix  -       -       y       1000?   1       tlsmgr
rewrite    unix  -       -       y       -       -       trivial-rewrite
bounce     unix  -       -       y       -       0       bounce
defer      unix  -       -       y       -       0       bounce
trace      unix  -       -       y       -       0       bounce
verify     unix  -       -       y       -       1       verify
flush      unix  n       -       y       1000?   0       flush
proxymap   unix  -       -       n       -       -       proxymap
proxywrite unix  -       -       n       -       1       proxymap
smtp       unix  -       -       y       -       -       smtp
relay      unix  -       -       y       -       -       smtp -o syslog_name=postfix/$service_name
showq      unix  n       -       y       -       -       showq
error      unix  -       -       y       -       -       error
retry      unix  -       -       y       -       -       error
discard    unix  -       -       y       -       -       discard
local      unix  -       n       n       -       -       local
virtual    unix  -       n       n       -       -       virtual
lmtp       unix  -       -       y       -       -       lmtp
anvil      unix  -       -       y       -       1       anvil
scache     unix  -       -       y       -       1       scache
postlog    unix-dgram n  -       n       -       1       postlogd
maildrop   unix  -       n       n       -       -       pipe flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
uucp       unix  -       n       n       -       -       pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail     unix  -       n       n       -       -       pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp      unix  -       n       n       -       -       pipe flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n       n       -       2       pipe flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman    unix  -       n       n       -       -       pipe flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
anx avatar
lá cờ fr
anx
Tôi *rất* khuyên bạn nên để định dạng ghi nhật ký và các quyết định cho daemon ghi nhật ký hệ thống của bạn (rsyslog, systemd-journal, ..) và định cấu hình các chỉnh sửa ở đó hoặc trong các công cụ phân tích cú pháp tệp của chúng. Tôi *nghi ngờ* vấn đề của bạn là do xung đột ghi đè khiến đích nhật ký thay thế của bạn không hiệu quả, vì vậy vui lòng [chia sẻ](https://serverfault.com/posts/1101621/edit) cấu hình của bạn dưới dạng [được đề xuất trong thẻ](https:/ /serverfault.com/questions/tagged/postfix).
lá cờ gh
Cảm ơn gợi ý về đề xuất thẻ! Tôi đã thêm cấu hình ở trên. Liên quan đến khuyến nghị để lại việc ghi nhật ký cho daemon ... Tôi sẽ, nếu không có lý do thông thường nào yêu cầu tôi lưu trữ nhật ký thư (bao gồm địa chỉ email, tức là dữ liệu cá nhân) riêng biệt với nhật ký hệ thống chung.
anx avatar
lá cờ fr
anx
Bạn đã khởi động lại hoàn toàn postfix chưa? Do quá trình ghi nhật ký được định cấu hình thông qua ENV được truyền xuống, nên việc tải lại một phần có thể tạo ra giao diện của hậu tố bằng cách sử dụng cài đặt mới, nhưng chỉ vì *một số* dịch vụ bắt đầu ghi nhật ký ở đó.
lá cờ gh
Khởi động lại là một ý tưởng hay, nhưng tôi không nghĩ rằng nó gây ra sự cố: Máy chủ đã thực hiện khởi động lại hoàn toàn trước khi tôi quan sát thấy các mục nhật ký "bị thiếu" cho postfix/smtp. Sau khi nhận xét tùy chọn `maillog_file` và thực hiện `systemctl restart postfix`, các mục postfix/smtp mới đã được ghi vào `syslog` cho các thư mới. Và không có gì khác được viết sau khi kích hoạt lại tùy chọn cộng với `systemctl restart postfix`.
Điểm:1
lá cờ in

Để tách nhật ký thư khỏi nhật ký hệ thống chung, tôi đã thêm dòng này vào /etc/postfix/main.cf

Đây không phải là cách tốt nhất, như @anx đã nhận xét, thực sự khuyên bạn nên để lại định dạng ghi nhật ký và quyết định cho trình nền ghi nhật ký hệ thống của mình.

Cho bạn thông tin rsylogd đã thu thập các bản ghi postfix từ /var/spool/postfix/dev/log tập tin ổ cắm (xem bên trong /etc/rsyslog.d/postfix.conf) và đây vẫn là cách sạch nhất.

Có một cái nhìn của bạn /etc/rsyslog.conf và phải có một dòng giống như thế này:

*.*;mail,auth,authpriv.none -/var/log/syslog

để nói rsyslogd không viết các mục nhật ký liên quan đến thư bên trong /var/log/syslog, thay đổi nó thành (lưu ý .không ai):

*.*;mail.none,auth,authpriv.none -/var/log/syslog

Đã có một dòng bảo nó ghi tất cả những thứ liên quan đến thư vào /var/log/mail.log (thay đổi nó thành bất kỳ tệp nào nếu bạn muốn) ở phía dưới để bạn không cần chỉnh sửa tệp cấu hình postfix của mình:

thư.* -/var/log/mail.log

Để trả lời câu hỏi của bạn:

(1) Tại sao postfix (mail_version = 3.4.13) ghi các thông tin khác nhau (không còn postfix/smtp) ngay sau khi tôi chỉ định một maillog_file?

master.cf của bạn cho chúng tôi biết bạn đang sử dụng postfix trong chế độ chroot. Nhưng của bạn qmgr daemon không được chroot nên về cơ bản nó có thể ghi vào bất kỳ tệp nhật ký nào không giống như của bạn smtp yêu tinh.

(2) Bạn có ý tưởng nào về cách thông báo cho postfix rằng tôi muốn lấy lại thông tin postfix/smtp của mình không?

Thông tin của bạn không bị mất nhưng nhiều trình nền của bạn không thể phá vỡ chroot nên chúng không thể ghi trực tiếp vào /var/log/postfix.log như bạn dự định. Một tùy chọn sẽ hủy chroot chúng bằng cách chuyển đổi chroot cột để N trong master.cf của bạn nhưng một lần nữa, không có người lành mạnh nào khuyến nghị điều đó.

KẾT LUẬN: Tùy chọn tốt nhất và an toàn nhất của bạn là điều chỉnh rsylogd cấu hình như mô tả trước đó.

anx avatar
lá cờ fr
anx
Điều này giải thích cách thực hiện với rsyslog, nhưng tôi không nghĩ điều này giải thích tại sao cách tiếp cận ban đầu không hiệu quả. Kiểm tra dòng `postlog unix-dgram` trong `master.cf`, dòng này có vẻ chính xác và sẽ chuyển tiếp ghi nhật ký cho các dịch vụ được chroot.
anx avatar
lá cờ fr
anx
Postfix `3.4.13` giống như phiên bản mà ai đó sử dụng Debian(-derivative) sẽ sử dụng (ai đó trực tiếp theo dõi 3.4.x ổn định ngược dòng sẽ sử dụng `3.4.24` vào lúc này), vì vậy trong khi nhật ký có thể được chuyển đến `rsyslogd` , sẽ vẫn tồn tại kho lưu trữ nhật ký liên tục bổ sung thông qua `systemd-journald`.
lá cờ gh
Câu trả lời rất công phu, cảm ơn bạn! Đối với những người đang tìm kiếm câu trả lời tương tự, tôi muốn quảng cáo rằng dòng tương ứng có thể được tìm thấy trong `/etc/rsyslog.d/50-default.conf` và có thể không có `mail` rõ ràng, nhưng thêm `mail .none` trong dòng có `-/var/log/syslog` hoạt động chính xác như được chỉ định trong câu trả lời.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.