안전한 IMAP 이메일 서버를 설정하는 가장 간단한 방법은 무엇입니까? [닫은]


17

이메일 제공 업체 인 Google을 제거하고 전용 서버에 완전한 이메일 솔루션을 설정하고 싶습니다. 문제 : 설정이 가능한 한 간단하기를 원하므로 문제가있는 경우 모든 것을 다시 설정하는 것이 고통스럽지 않습니다.

전제 조건

  • 머신에 하나의 사용자 계정 만 있습니다.
    • (이름 diti; 기본 이메일 kra@diti.me; 다른 별칭은 리디렉션되지만 이메일 클라이언트는 다른 별칭을 관리하고 이에 따라 반응 할 수 있음)
  • 바람직하게는 MySQL을 사용하지 않습니다.
    • (데이터 백업 및 복원과 단순성을 위해 기능적인 전자 메일 서버를 받기 전에 MySQL을 설치 및 보안하지 않으면 더 좋습니다)
  • 외부에서 전자 메일에 액세스 할 수 있습니다 (IMAP 및 SMTP).
  • IMAP 및 SMTP 인증을위한 SSL / TLS 암호화 ( CAcert 인증서를 사용 하고 있습니까?)

단순성, IMAP / SMTP 액세스 및 보안 인증은 누구나 Google을 떠나고 싶어하는 모든 사람들이 원하는 "기본"기능이라고 생각합니다. 내가 실수하고 더 간단한 솔루션 (예 : 모든 것이 포함 된 자체 클라우드와 같은 솔루션)이 있다면 기뻐할 것입니다.

Postfix와 Dovecot의 조합이 갈 길이라고 생각합니다. 그건 그렇고, 데비안을 실행 중입니다.

내가 지금까지 찾은 정보

  • 프랑스어 문서 에서 설명 매우 긴 완벽한 보안 전자 메일 솔루션을 설정하는 방법에 대해 자세히 설명합니다. 유지 관리가 어렵고 백업 및 복구가 더 어렵습니다. 또한 DNS 캐시가 필요합니까?
  • 젠투 위키 ( Complete_Virtual_Mail_Server/SSL_Certificates페이지)는 CAcert 인증서 사용에 대해 언급하고 있지만 명확하지 않으며 (모든 SubjectAltName하위 도메인이 필요한가요?) Postfix를 사용하지 않습니다 (Curier 가 더 어렵다는 것을 읽었습니다).
  • 자체 호스팅에 대한 다양한 자습서, 모두 다르고 자신이 수행하는 작업 및 이유를 거의 설명하지 않습니다 (원격 액세스가 가능한 자체 호스팅 전자 메일은 설정하기가 복잡해 보이는 이유가 무엇입니까? "무슨"에 대한 설명없이 명령 목록을 제공하는 이유는 무엇입니까?) .

나는 옳은 일을했고 너무 어리석지 않기를 바랍니다.


1
이 질문을 어떻게 해석하고 다시 열 수 있을지 아십니까?
Diti

답변:


19
  • 아니요, 서버에서 DNS 캐시를 설정할 필요는 없습니다. 서버 근처에있는 캐싱 DNS 확인자를 사용해야하지만 대부분의 호스팅 회사는 이미 전체 데이터 센터에 대해 자체 확인자를 실행하고 기본적으로 사용하도록 서버를 구성합니다.

  • 기본적으로 Postfix와 Dovecot는 모두 로컬 계정을 사용합니다. 라는 Linux 계정이있는 경우 ditiDovecot에 로그인하여 Dovecot에 대한 SMTP 로그인의 유효성검사 하도록 Postfix를 설정할 수 있습니다 .

  • 같은 계정에 모든 메일 이동하기에 좋은 경우 (에서와 같이, 당신은 일반 별칭을 설정할 수 있습니다 /etc/aliases메일을 리디렉션) kra@또는 postmaster@받는 diti계정.

  • 모든 subjectAltName은 필요하지 않습니다. 당신이 필요로하는 유일한 것은 당신이 실제로 사용할 도메인 이름 , 예를 들어 mail.diti.me또는 glaux.diti.me입니다. 도메인 자체를 포함해야하는지 잘 모르겠습니다 (예 :) diti.me.


다음은 도메인에이 서버를 가리 키도록 구성된 MX 레코드가 이미 있다고 가정합니다. 나는 몇 달 후에 "지옥이 무엇인지"궁금해하기 때문에 일반적으로 구성을 합리적으로 명확하게 유지하려고 노력한다.

1. 먼저 postfixdovecot-imapd패키지를 설치하십시오 . Postfix 구성에 대한 프롬프트가 표시되면 "인터넷 사이트"옵션을 선택하고 diti.me메일 이름으로 입력하십시오 . 이 시점에서 이미로 메일을주고받을 수 있으며 diti@diti.meIMAP에 연결할 수도 있습니다.

그러나 아직 SSL을 가지고 있지 않거나 외부에서 SMTP를 통해 메일을 보내거나 메일을 저장할 수있는 곳이 없습니다 (기본값은의 mbox 파일입니다 /var/mail.이 파일 은 신뢰할 수없고 특히 IMAP에서 성능이 저하됩니다).

2. SSL 인증서가 이미 있으면에 넣고 /etc/ssl/private/diti.me.pem개인 키를에 넣으십시오 /etc/ssl/private/diti.me.key. 정확한 위치는 실제로 중요하지 않지만 /etc/ssl/private데비안이 보관하는 곳입니다.

ssl-certPostfix와 Dovecot가 파일에 액세스 할 수 있도록 두 파일이 모두 그룹에서 소유하고 읽을 수 있는지 확인하십시오 . 또한을 사용하여 두 데몬 계정을 해당 그룹에 추가하십시오 gpasswd -a.

3. 데비안의 자동 생성 Postfix main.cf도 약간 혼란 스러우므로 정리 된 최소 버전 만 게시하겠습니다.

# 서버 정보
mydomain = diti.me
myorigin = $ mydomain
  # 다양한 다른 매개 변수가이 두 변수를 기본값으로 사용합니다.

# SMTP 서비스
smtpd_tls_security_level = 5 월
smtpd_tls_cert_file = /etc/ssl/private/diti.me-mail.pem
smtpd_tls_key_file = /etc/ssl/private/diti.me-mail.key
  # 이렇게하면 들어오는 모든 SMTP 연결에서 STARTTLS를 사용할 수 있습니다.
  #`postfix`는`ssl-cert` 그룹에 추가해야합니다.
  #은 / etc / ssl / private의 파일에 액세스합니다.

# 정책
mynetworks = [:: 1] / 128, 127.0.0.0/8, [::ffff:127.0.0.0]/104
  # "신뢰할 수있는"것으로 간주되어 사용할 수있는 IP 주소가 나열됩니다.
  #이 서버는 외부 (즉, 다른 도메인)에게 메일을 보냅니다. 으로
  # 기본적으로 "localhost"만 허용됩니다. 다른 사람 만 메일
  $ mydestination의 도메인 # 개가 허용됩니다.
mydestination = $ mydomain, localhost
  # IP 주소에서 메일을받을 도메인 목록. 
# 배달
alias_maps = 해시 : / etc / aliases
  # 시스템 전체 별명을 유지합니다. 명시 적으로 설정하는 것이 좋습니다.
  # 기본값은 때때로 의미가없는 NIS를 포함합니다.
recipient_delimiter = +
  # 첫 번째 '+'에서 주소의 로컬 부분을 분할하도록 postfix에 지시합니다.
  # 소위 "플러스 주소": diti + foo @로 보낸 메일이 배달됩니다
  # diti @ 사서함에.

Dovecot의 경우 데비안은 기본 예제 구성 만 사용하며 각 옵션을 설명하면 충분합니다.

구성을 변경할 때마다 postfix reload및 / 또는를 사용 하여 데몬을 다시로드하십시오 doveadm reload.

4. 기본적으로 Postfix /var/mail/$USERmbox 형식으로 메일을 전달 합니다. mbox 형식은 간단합니다 (텍스트 편집기로 쉽게 볼 수 있음). 메시지를 읽거나 "읽음"또는 "읽지 않음"으로 표시하십시오.

Maildir을 사용하도록 두 데몬을 변경하십시오. (다른 형식도 있지만 MTA, MDA 또는 IMAP 서버 또는 기타 모든 것에 고유 한 경향이 있습니다. Maildir이 널리 지원됩니다.)

에서 /etc/postfix/main.cf의 "배달"섹션에 다음을 추가합니다 :

home_mailbox = 메일 /

다음에서 동일한 경로를 사용하도록 Dovecot을 구성하십시오 /etc/dovecot/conf.d/10-mail.conf.

mail_location = maildir : ~ / Mail

5. 어느 시점에서 Dovecot에게 SSL도 사용하도록 지시해야합니다. 관련 설정은에 /etc/dovecot/conf.d/10-ssl.conf있습니다. 사실, Dovecot과의 데비안 패키지는 이미 있지만 대부분 쓸모가 자체 서명 인증서, SSL을 사용합니다. 자신의 인증서를 사용하도록 구성하십시오.

SSL = 예

ssl_cert = </etc/ssl/private/diti.me-mail.pem
ssl_key = </etc/ssl/private/diti.me-mail.key

6. 이제 메일을 외부로 보내고받을 수 있습니다. 구성 후위 당신이 보낼 수 있도록에 그것은 여전히 필요의 에서 SMTP를 통해 메일 클라이언트와 연결하여 외부.

먼저 Dofix를 사용하여 로그인을 확인하도록 Postfix에 지시하십시오. 다음 지시 사항은 대부분 Dovecot의 위키 에서 발췌 한 것 입니다 .

Dovecot /etc/dovecot/conf.d/10-master.conf은 Postfix가 액세스 할 수있는 소켓에서 청취해야합니다. 기본 구성에는 이미 주석 처리 된 예가 있습니다.

서비스 인증 {
    ...
    unix_listener / var / spool / postfix / private / auth {
        모드 = 0660
        사용자 = 접미사
        그룹 = 접미사
    }
    ...
}

그리고 Postfix는 /etc/postfix/main.cf다시 사용해야 합니다.

# 인증
smtpd_sasl_type = 비둘기장
smtpd_sasl_path = 개인 / 인증
  # 다른 가능한 유형은 "cyrus"입니다. Cyrus SASL 'saslauthd'
  # 데몬. SASL 서버로 잘 작동하므로 Dovecot을 선택했습니다.
  # 두 데몬의 인증을 처리하는 것이 더 간단합니다.

7. 위의 내용은 smtpd_sasl_auth_enable어디에도 설정되지 않았습니다 . 현재 규칙은 SMTP 인증을 전체적으로 활성화 하지 않고 tcp / 25를 "서버 간"SMTP 포트로 유지하는 것입니다. 한편, 사용자의 새 메시지는 "메일 전송"포트 인 tcp / 587의 SMTP를 통해 인증이 필요합니다. 일부 ISP는 스팸으로 인해 tcp / 25를 차단하기도하지만, tcp / 587은 일반적으로 보안 수준이 높기 때문에 열린 상태로 유지하십시오.

/etc/postfix/master.cfSASL 인증을 사용하여에서 "제출"포트를 활성화하십시오 . 기본값 master.cf에는 이미 주석 처리가 필요한 필요한 행이 있지만 일부 는 여전히 생략해야합니다.

제출 inet n----smtpd
  -o syslog_name = 접미사 / 제출
  -o smtpd_tls_security_level = encrypt
    # "제출"포트는 선택 사항이 아닌 TLS가 필요합니다.
  -o smtpd_sasl_auth_enable = yes
    # ... 사용자가 로그인 할 수 있도록합니다.
# -o smtpd_reject_unlisted_recipient = 아니오
# -o smtpd_client_restrictions = $ mua_client_restrictions
# -o smtpd_helo_restrictions = $ mua_helo_restrictions
# -o smtpd_sender_restrictions = $ mua_sender_restrictions
    #이 네 가지 옵션은 주석 처리되어있을 수 있습니다. 활성화 된 경우
    # 'main.cf'에서 사용자 정의 제한 규칙을 설정해야하지만
    # 기본 설정은 괜찮습니다.
  -o smtpd_recipient_restrictions = permit_sasl_authenticated, 거부
    # 기본 recipient_restrictions는 IP 주소를 확인하고
    # $ mydestination. "제출"포트의 경우 모든 것을 길게 허용
    # 사용자는 로그인했지만 익명 메일은 모두 거부합니다.
  -o milter_macro_daemon_name = ORIGINATING
    # 나중에 DKIM 프록시 등을 설정하기로 결정하면
    # 사용자가 제출 한 메일과 수신 된 메일을 구별합니다.
    # 기본 구성의 일부이므로 여기에도 포함됩니다.

이전 스타일의 "암시 적 SSL"포트 (tcp / 465)가 필요한 메일 클라이언트가있는 경우 smtps줄의 주석 처리를 제거 할 수 있습니다. 필요한 master.cf경우 submission포트 설정과 비슷한 설정을 유지하십시오 .

8. 마지막으로을 편집하여 계정의 별칭을 설정하십시오 /etc/aliases. postmaster별명은 기본적으로 필요합니다; 메일 서버에 문제가있는 경우 연락 담당자입니다. 포인팅 root및 기타 유사한 별칭도 좋습니다.

기본 형식은 aliases (5)로 문서화됩니다.

postmaster: root
admin:      root
root:       diti
kra:        diti

사용 postalias또는 newaliases해시 데이터베이스를 업데이트하려면 /etc/aliases.db이 파일을 편집 할 때마다.

이제 ditiPostfix와 Dovecot에 관한 한 하나의 계정 이 있지만 보낸 메일 kra@...도 전달됩니다. 일부 메일 클라이언트 (예 : Thunderbird)는 단일 메일 서버에 대해 여러 "ID"또는 "개인"을 지원하므로 다른 "보낸 사람 :"주소 중에서 선택할 수 있습니다.

그게 다야. 나중에 procmail, 가상 도메인, SPF 및 / 또는 DKIM에 대한 지침과 함께 반환 될 수 있습니다.


1
이다 중대한 ! 전자 메일 자체 호스팅에 대한 가장 간단한 자습서입니다. 나를 가장 놀라게 한 부분은 포인트 1에서 실제로 서버와의 전자 메일을주고받을 수 있다는 것을 알았습니다. 어쨌든, 나는 당신의 메시지를 편집하여 요점을 명확히 할 것입니다! 그러나 외부에서 전자 메일을 설정할 수는 없습니다 (Thunderbird를 의미 함). 내가 사용하고 mail.diti.me내 도메인이 이미 MX 레코드를 가지고, (= 내 서버의 IP 주소) IMAP 및 SMTP 모두를. 서버 설정 중에 잘못된 일이 있었습니까? 아니면 Thunderbird 문제가 있습니까?
Diti

@Diti : 모든 관련 포트 (tcp / 25 제외)가 서버에서 방화벽 처럼 보입니다 .
user1686 2016 년

결과물은 무엇입니까 ps auxw | grep "dovecot"? 나는 친구의 복잡한 설정 중 하나와 비교했는데, 그는 가지고 dovecot-auth있고 imap-login가지고 있지 않습니다. 포트가 실제로 열려있을 수 있습니까 (방화벽을 사용하여 자신을 기억하지는 못하지만) 외부에서 해당 포트를 수신하도록 데몬을 설정하지 않았습니까? openssl s_client -connect mail.diti.me:993서버에서 실행 하면 작동하지만 "Dovecot ready"라고 표시되지만 외부에서는 아무것도 없습니다. 방화벽을 설치하고 해당 포트를 명시 적으로 허용해야합니까?
Diti

@Diti는 : - V2에있을거야 당신이 다른 프로세스를 볼 수 있도록 Dovecot과의 아키텍처는, V1 및 V2 사이에 상당히 변화 dovecot, dovecot/anvil, dovecot/log, 등이있다. 또한 일부 프로세스는 누군가 연결하거나 인증 세부 정보를 확인할 때만 시작됩니다.
user1686 2016 년

1
@Diti : 아니요, 두 데몬은 기본적으로 모든 인터페이스와 모든 주소를 수신합니다. 그러나 연결이 거부 되지는 않습니다. 오히려 서버는 모든 연결 시도를 자동으로 삭제합니다 (연결된 nmap 스캔 참조). 이는 어딘가에 방화벽의 징후입니다. iptables -n -v -L패킷을 삭제하는 규칙이 있는지 확인하기 위해 사용 하십시오.
user1686 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.