최근에 LDAP 디렉터리에 새 사용자 계정을 추가했습니다. 그러나 어떻게든 Postfix는 이메일을 보낼 때 사용자를 찾는 것을 거부합니다.
계정 로그인은 어디에서나 작동합니다. 우리의 메일 서버는 자체 LDAP를 갖춘 전용 서버이지만 이는 기본 LDAP의 미러일 뿐입니다. LDAP 오류처럼 보이지 않습니다. 이메일 디렉터리가 생성되고 항목이 LDAP 디렉터리에 올바르게 나타납니다. 그러나 로그인할 때 사용자는 "선택한 사서함 없음" 메시지만 받게 됩니다(Webmailer는 SOGo입니다). 하지만 그것만으로는 충분하지 않습니다. SOGo에서든 다른 클라이언트에서든 해당 사용자에게 이메일을 보내려고 하면 작동하지 않습니다.
로그에 따르면
Apr 30 12:03:14 mail postfix/smtpd[1355]: NOQUEUE: reject: RCPT from localhost[127.0.0.1]: 550 5.1.1 <[email protected](opens in new tab)>: Recipient address rejected: User unknown in local recipient table; from=<[email protected](opens in new tab)> to=<[email protected](opens in new tab)> proto=ESMTP helo=<localhost>
main.cfg 접미사에 "local_recipient_maps=" 행을 추가하여 로컬 수신자 테이블을 비활성화하면 오류가 다음과 같이 변경됩니다.
Mai 02 12:59:04 mail postfix/local[8909]: 1EA11100379: to=<[email protected](opens in new tab)>, relay=local, delay=0.22, delays=0.13/0.01/0/0.08, dsn=5.1.1, status=bounced (unknown user: "user")
이 문제에 대한 해결책이 생각나지 않습니다. 여기에서 잘못된 구성으로 인해 이 주제에 대한 유일한 토론을 찾을 수 있습니다. 그러나 요점은 오랫동안 구성이 변경되지 않았다는 것입니다. 변경되는 유일한 사항은 업데이트된 패키지를 받는 것입니다. 내가 아는 한, 이 새로운 사용자는 현재 문제가 있는 유일한 사용자입니다.
설정 정보:
SOGo 4, postfix 3.4, slapd 2.4.47, dovecot 2.3.4.1 및 pigeonhole 0.5.4의 nightly 버전을 실행하는 Debian 10.4.
접미사 구성:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = /usr/share/doc/postfix
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/mail.domain.de.cert.pem
smtpd_tls_key_file=/etc/ssl/private/mail.domain.de.private.pem
smtp_tls_CAfile = /etc/ssl/certs/CA.crt
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_exclude_ciphers = aNull, MD5
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
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_dh1024_param_file = /etc/ssl/private/dhparams.pem
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = mail.domain.de
alias_maps = hash:/etc/aliases
virtual_alias_maps = mysql:/etc/postfix/mysql-forwards.cf
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = domain.de, mail.domain.de
relayhost = smarthost.maindomain.de
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
message_size_limit = 67108864
mailbox_command = /usr/lib/dovecot/deliver -d $USER
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html
# Mailman config
relay_domains = lists.domain.de
transport_maps = hash:/etc/postfix/transport
mailman_destination_recipient_limit = 1
relay_recipient_maps = hash:/var/lib/mailman/data/virtual-mailman
# disable VRFY and EXPN command as per ITC recommendation
disable_vrfy_command = yes
# Older configurations combine relay control and spam control. To
# use this with Postfix ≥ 2.10 specify "smtpd_relay_restrictions=".
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks
smtpd_relay_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
# Configuration for rspamd
smtpd_milters=inet:localhost:11332
non_smtpd_milters = inet:localhost:11332
milter_protocol = 6
milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}
milter_default_action = accept
추신: postfix 구성이 이상해 보인다면 메일 서버가 인터넷에 직접 연결되어 있지 않은 것입니다. 우리는 조직의 네트워크를 통해 조직의 중앙 서버로부터 이메일을 받습니다.
답변1
좋아, 이제 (매우 이상한) 오류를 발견했습니다. 사용자 인증은 LDAP를 통해 pam으로 수행됩니다. 어떤 이유로 nslcd는 로컬 LDAP에서 최신 사용자 가져오기를 거부합니다. LDAP를 직접 검색하면 id username
"사용자를 찾을 수 없음"만 반환하는 최신 사용자를 제외하고 예상되는 모든 항목이 표시됩니다. 구성을 몇 번 확인하고 이를 데스크톱 Linux 시스템의 구성과 비교했습니다. 유일한 차이점은 데스크톱 컴퓨터가 Debian 10 stable 대신 Debian 11 beta를 실행하고 있으며 기본 LDAP를 사용한다는 것입니다.
메일 서버의 nslcd를 기본 LDAP로 설정한 다음 다시 로컬 LDAP 디렉터리로 설정하여 오류를 수정했습니다. 이제는 이를 사용해도 새로운 사용자를 찾고 id username
그들에게 이메일을 보내는 데 문제가 없습니다. 매우 이상한 버그이지만 결국에는 쉽게 고칠 수 있습니다.