OS/Linux

sendmail, dovecot 트러블슈팅

엔지니어1 2024. 4. 18. 15:52

에러 코드는 /var/log/maillog에서 출력되는 메세지입니다.

 

1.

Apr 18 15:31:03 hostname sm-mta[70305]: NOQUEUE: connect from [clientip]
Apr 18 15:31:04 hostname sm-mta[70305]: 43I6V30N070305: [clientip] did not issue MAIL/EXPN/VRFY/ETRN during connection to MSP-v4

=> dovecot에서 587포트(startTLS)설정을 하였지만, sendmail에 ssl인증서를 명시하지 않았을 때

 

해결법

vi /etc/mail/sendmail.mc

# ubuntu만 테스트를 진행하였습니다.
# ssl인증서 추가 (letsencrypt기준입니다.)
dnl define(`confCACERT_PATH', `/etc/letsencrypt/live/[domain]')dnl
dnl define(`confCACERT', `/etc/letsencrypt/live/[domain]/fullchain.pem')dnl
dnl define(`confSERVER_CERT', `/etc/letsencrypt/live/[domain]/fullchain.pem')dnl
dnl define(`confSERVER_KEY', `/etc/letsencrypt/live/[domain]/privkey.pem')dnl

 

 

2.  openssl s_client -connect [domain.com]:587 -starttls smtp 테스트에서 auth login이 안될 때

587포트로 startTLS로 mail계정에 로그인할 때 접속이 안되는 에러입니다.

read R BLOCK
helo [domain.com]
250 domain.com Hello [serverip], pleased to meet you
auth login
504 5.3.3 AUTH mechanism login not available

 

이런 경우는

# ubuntu
define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl

# centos
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl 
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

를 추가하여 똑같이 m4로 conf생성후 재시작합니다.

 

성공시

read R BLOCK
helo [domain.com]
250 domain.com Hello [serverip], pleased to meet you
auth login
# base64로 암호회됨
334 VXNlcm5hbWU6 # id를 입력합니다
qwesad  # 계정 id를 base64로 암호화해서 넣습니다.
334 UGFzc3dvcmQ6 # 비밀번호를 입력합니다
asdsad # 마찬가지로 passwd를 암호화해서 입력합니다.
235 2.0.0 OK Authenticated

 

 

3. 계정이 맞는데 auth login이 안될때, testsaslauthd -r [domain.com] -u [user] -p [passwd]에 connect() : No such file or directory가 출력될 때

가장먼저 saslauthd가 설치되어있는지 확인합니다.

설치가 되어있고 정상작동하는데도 안되면

vi /etc/default/saslauthd

# 제일 아랫줄에 추가
START=yes

# 재시작
systemctl restart saslauthd

 

4. sendmail에서 smtp 소켓을 이미 사용중이라 할때

Apr 18 11:41:58 hostname sm-mta[47027]: daemon MSP-v4: problem creating SMTP socket
Apr 18 11:42:03 hostname sm-mta[47027]: NOQUEUE: SYSERR(root): opendaemonsocket: daemon MSP-v4: cannot bind: Address already in use

ubuntu의 dovecot의 기본설정은 모든 conf를 실행시킵니다.

설치시 dovecot-submissiond을 같이 하셨다면

vi /etc/dovecot/dovecot.conf

# !include_try /usr/share/dovecot/protocols.d/*.protocol # 주석처리
!include_try /usr/share/dovecot/protocols.d/imapd.protocol
!include_try /usr/share/dovecot/protocols.d/pop3d.protocol
# ... 기타 필요한 데몬 기입

 

으로 같은 포트를 사용하는 submission을 없애고 sendmail에 포트를 다시 매칭시켜줍니다.

 

5. sendmail "My unqualified host name (foo.bar) unknown; sleeping for retry"

vi /etc/hosts

# 127.0.0.1의 alias를 한줄로 적으면 됩니다.
127.0.0.1     localhost localhost.localdomain foo.bar

 

6. imap 연결 중 디렉터리 퍼미션 오류

Apr 18 10:17:26 hostname dovecot: imap(user)<37056><DT/xu1QWlq5zRFfI>: Error: mkdir(/home/user/mail/.imap) failed: Permission denied (euid=1001(user) egid=1001(user) missing +w perm: /home/user/mail, we're not in group 0(root), dir owned by 0:0 mode=0775)

해결법

먼저 /home/user 디렉터리가 있는지 확인합니다.

useradd 명령어 실행 시 그룹을 mail로 지정해주고, 홈디렉터리도 만들어주면 됩니다.

centos의 계정생성 스크립트는 아래에 있고

2024.04.16 - [OS/Linux] - sendmail로 메일 수신하기

 

sendmail로 메일 수신하기

sendmail을 사용하여 메일을 송신할 때 임의의 주소를 적어 보내도 보내지지만 수신을 할 때에는 mail 계정이 있어야 합니다. 그리고 dns의 mx레코드를 사용하여 도메인을 사용하여 메일수신을 하도

engineer1.tistory.com

 

ubuntu의 계정생성은 adduser [user] --ingroup mail로 홈디렉터리를 생성과 group을 mail로 지정해줍니다.

 

 

이상입니다.