Postfix : SASL 인증을 위해 간단한 파일을 사용하는 방법은 무엇입니까?


8

내 응용 프로그램에서 전자 메일을 보내려면 데비안 VPS에서 Postfix를 실행하고 싶습니다. 다른 VPS에서 실행되는 응용 프로그램은 SMTP를 통해 Postfix에 연결됩니다. Postfix는 수신 이메일을 처리 할 필요가 없습니다. 발신 메시지를 보내는 것입니다.

오픈 릴레이가되지 않도록하려면 SASL 인증을 사용해야합니다. 그러나 SASL 인증을 위해 Dovecot 또는 MySQL을 실행하고 싶지 않습니다.

간단한 파일 (사용자 이름 및 비밀번호 포함)을 사용하여 SASL 인증을 설정하려면 어떻게해야합니까?

나는 이미 비슷한 질문을 발견 했다 . 그러나 주어진 곳에 만족스러운 답변이 없습니다.


방화벽을 사용하여 다른 VPS의 IP 주소 만 연결하십시오. 또한 방화벽이 실패하더라도 main.cf에서 mynetworks 변수를 설정하여 postfix가이를 인식하도록 할 수 있습니다. SASL을 정말로 원한다면 postfix와 함께 제공되는 SASL_README를 읽고 / etc / sasldb를 "데이터베이스"로 사용하도록 SASL을 설정하십시오. 상자 밖으로 작동해야합니다. saslpasswd는 파일을 추가 / 제거 / 변경합니다.
AndreasM

답변:


15

Postfix는 현재 두 가지 SASL 인증 방법 만 지원합니다. 그중 하나는 당신이 원하지 않는 Dovecot입니다. 다른 하나는 사이러스 (Cyrus)로 Postfix를 다시 쓰지 않고 얻을 수있는만큼 원하는 것에 가깝습니다. 별도의 인증 데몬 ( saslauthd)을 실행해야 하지만 인증 파일을 쉽게 편집하고 업데이트 할 수 있습니다.

Cyrus SASL 사용에 대한 기본 사항 은 postfix documentation site 에서 찾을 수 있지만 여기에 간단한 설명이 있습니다. 제발 아무것도의 어떤 방법으로 혼동하는 경우 링크 봐!

플러그인으로 Cyrus SASL을 설치하여 시작하십시오 sasldb. (이를 수행하는 방법은 독자를위한 연습으로 남아 있습니다. 아마도 여러분의 유닉스 브랜드가 사용하고있는 패키지 시스템에 패키지가있을 것입니다.) Postfix와 SASL 간의 통신은 유닉스 도메인 소켓을 통해 이루어 지므로, SASL 그룹에 접미사를 추가하고 해당 그룹에 디렉토리에 대한 읽기 및 실행 권한이 있는지 확인하십시오 /var/run/saslauthd.

SASL 구성

/etc/sasl2/smtpd.conf를 편집하여 sasldb를 사용하도록 SASL을 구성하십시오.

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM

sasldb 플러그인은 sasl이 사용자 이름 및 비밀번호에 Berkeley DB 파일을 사용함을 의미합니다. 다음 명령으로 사용자를 추가하십시오 saslpasswd2.

$ saslpasswd2 -c -u example.com username
Password:
Again (for verification):

사용자 이름과 함께 도메인을 지정하면 사용자는 인증시 "username"이 아닌 "username@example.com"을 사용해야합니다.

를 실행하여 입력 한 사용자를 확인할 수 있습니다 sasldblistusers2.

saslauthd를 시작하고 다음을 수행하여 인증이 작동하는지 확인하십시오.

testsaslauthd -u username@example.com -p password

접미사 구성

이 작업이 완료되면 Postfix에 SASL을 사용하도록 알리고 /rus/postfix/main.cf를 편집하여 Cyrus에게 인증 중임을 SMTP에 알리십시오.

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

그런 다음 접미사를 다시로드하면 설정해야합니다.


광범위한 답변에 감사드립니다! 나는 모든 단계를 밟았으며 모든 것이 잘 작동하는 것 같습니다. sasldblistusers2내가 추가 한 사용자 목록을 올바르게 출력합니다. 그러나을 수행 할 testsaslauthd때이 결과가 나타납니다 0: NO "authentication failed". 내가 어떻게 고칠 수 있는지 아십니까? 이것은 나의 것입니다 /var/log/auth.log:saslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
Jonathan Jonathan

이는 saslauthd가 sasldb 대신 PAM을 사용하려고 함을 의미합니다. 명령 행을 시작하는 데 사용 된 것은 무엇입니까?
Jenny D

나는 testaslauthd (원래 답변에 설명 된대로)를 사용하고 추가하려고 시도 -s smtpd했습니다. 내가 설정 한 경우 MECHANISMS="sasldb"/etc/default/saslauthd다시 시작 saslauthd, 나는 testsaslauthd에서 같은 결과를 얻을. 인증 로그에 다른 메시지가 표시됩니다.saslauthd[3706]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=sasldb] [reason=Unknown]
Jonathan

2
흠, 사용자 이름과 도메인 부분을 별도로 지정하면 testsaslauthd가 작동 testsaslauthd -u username -r example.com -p XXX합니다 0: OK "Success.". 이제 Postfix가이 문제를 해결할 수 있는지 확인할 것입니다.
Jonathan

사용 -s smtpd하면 sasldb 대신 PAM을 사용하게되므로 그렇게하지 마십시오.
Jenny D

1

오픈 릴레이가되지 않도록하려면 SASL 인증을 사용해야합니다.

SASL은이를 방지하는 수많은 방법 중 하나 일뿐입니다. 다른 VPS에서 사용하는 IP를 허용 목록에 추가하거나 TLS 클라이언트 인증서를 요구하는 것도 가장 안전한 방법이라고 할 수 있습니다.

postfix 시스템에 서명 CA를 설정하고 이메일을 제출하려는 VPS 당 하나의 인증서에 서명하면됩니다.
그런 다음 제출 된 모든 메일에 대해 완전한 클라이언트 인증서 확인이 필요합니다. 다른 제출 방법을 비활성화하십시오.

postfix는 SASL을 직접 지원하지 않기 때문에 요청하는 것은 불가능합니다.


1

몇 가지를 명확히하면

sasldb에서 계정 만들기 :

% saslpasswd2 -c -u fqdn username

인증 테스트 :

% testsaslauthd -u username -p password

(참고 : 사용자 이름 뒤에는 fqdn 이 없습니다 )

루트 계정을 만드는 것도 추가하고 싶습니다

% saslpasswd2 -c -u example.com root

인증 할 수 없습니다.

% testsaslauthd -u root -p some_password
0: NO "authentication failed"

그러나 이것은 버그가 아닙니다. 안전 기능 일뿐입니다.


0

수신 메일을 처리 할 필요가 없으면 인증을 방해하지 않아도됩니다. 방화벽으로 들어오는 트래픽을 차단하거나 로컬 호스트로만 제한하십시오.

 inet_interfaces = 127.0.0.1

더 이상 공개 릴레이 문제가 없으며 postfix를 통해 메일을 보내야하는 응용 프로그램의 복잡성을 피합니다.


답변 해주셔서 감사합니다. 응용 프로그램이 다른 VPS에서 실행 중이므로 Postfix는 localhost 이외의 다른 호스트로부터 전자 메일을받습니다.
Jonathan

예상되는 연결의 IP를 정의하고 postfix 구성 또는 방화벽 구성으로 나열 할 수 있습니까? 예를 들어 이들은 모두 하나의 넷 블록 또는 쉽게 나열 할 수있는 충분히 작은 IP 또는 블록 집합에있을 수 있습니다. 또는 가상 호스트간에 개인 네트워크를 사용하는 것을 볼 수 있습니다.
mc0e
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.