Complete Virtual Mail Server/Courier-IMAP to Database/ko

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Complete Virtual Mail Server/Courier-IMAP to Database and the translation is 100% complete.

Other languages:
English • ‎русский • ‎한국어

도입부

Courier-IMAP은 IMAP 서비스와 POP3 서비스 제공에 활용합니다. POP3는 이제 더 이상 사용하지 않아, 대부분 IMAP에 관심있습니다. IMAP에 여러가지 장점이 있기 때문에 납득할만합니다.

POP3와 IMAP의 주된 차이점이라면 IMAP은 POP3와 마찬가지로 서버에 메시지를 유지하지만, POP3에서는 서버에서 메시지를 날립니다. 다양한 클라이언트를 사용하기 위해 서버에 메시지를 남겨두면, 다른 곳에서 동일한 메일함을 다룰 수 있습니다. 가장 기본적인 예로, 동일한 메일함을 동사에 접근하는 웹메일과 데스크톱 클라이언트를 들 수 있습니다. 또한 일반적으로 웹메일 클라이언트는 IMAP을 강력하게 선호합니다. 물론 여기에 들어가는 비용은 근본적으로 디스크 용량과 메일 서버의 처리 성능에 들어갑니다. 오늘날에는 디스크 공간 처리 비용이 싸졌기에 32Gb 가량의 전자메일 저장 공간으로 메일을 저장하기에 더 거의 비용을 들이지 않아도 될 상당한 공간입니다. 그리고 처리 성능이 문제라면 서버 측 기반 검색 기능을 꺼서 머신의 부하를 줄일 수 있습니다.

이 장에서는 IMAP에 주로 중점을 두지만 완전 무결함을 위해 POP3 내용도 넣었습니다. 선택이 불분명할 경우 두 프로토콜에 대한 일부 연구(조사)가 필요할 수도 있습니다.

Courier-IMAP 설치

net-mail/courier-imap에는 검토해볼 USE 플래그가 별로 없습니다. net-libs/courier-authlib는 사용자 인증 방식을 처리하는 역할을 수행하는 중요한 의존 요소이기 때문에 마찬가지로 USE 플래그를 검토합니다.

USE flags for net-libs/courier-authlib Courier authentication library

berkdb Add support for sys-libs/db (Berkeley DB for MySQL)
crypt Add support for encryption -- using mcrypt or gpg where applicable
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
gdbm Add support for sys-libs/gdbm (GNU database libraries)
ldap Add LDAP support (Lightweight Directory Access Protocol)
libressl Use dev-libs/libressl instead of dev-libs/openssl when applicable (see also the ssl useflag)
mysql Add mySQL Database support
pam Add support for PAM (Pluggable Authentication Modules)DANGEROUS to arbitrarily flip
postgres Add support for the postgresql database
sqlite Add support for sqliteembedded sql database
static-libs Build static versions of dynamic libraries as well

원하는 데이터베이스 백엔드만 선택하십시오.

경고
-vpopmail USE 플래그를 설정하고 시스템에 vpopmail을 설치하지 않았을 경우에만 libauth*sql.so를 빌드합니다. vpopmail과 ibauth*sql.so를 함께 사용하지 마십시오.
참고
IDLE (예: 'push') 기능을 동작하게 하려면 fam USE 플래그가 필요합니다.

적당한 USE 플래그를 설정하고 나면 courier-imap을 courier-authlib에 이머징하여 끌어와야합니다:

root #emerge --ask net-mail/courier-imap

courier-authlib 설정

Postgres

Courier-authlib을 루트 권한으로 실행하여 기본적인 소켓 접근 권한을 가져옵니다.

참고
값을 바꾸어야 하는 필드만 여기에 나타냈습니다. 설명을 달아둔 옵션은 두가지입니다. 앞서 언급한 PGSQL_HOST 은, 유닉스 소켓을 사용합니다. 지금 언급할 PGSQL_QUOTA_FIELD은, 나중 단계에서 제한 용량으로 활성화합니다. The PGSQL-UID_FIELD, PGSQL-GID_FIELD, PGSQL_HOME_FIELD (뒤에 슬래시 넣을 것!) 는 따옴표에 넣어 정적 값으로 넣습니다. 따라서 정적 값을 활용하며 데이터베이스의 값을 활용하지 않습니다.
파일 /etc/courier/authlib/authpgsqlrc데이터베이스 접근 권한 얻기
##NAME: LOCATION:0
# PGSQL_HOST		pgsql.example.com
PGSQL_PORT		5432
PGSQL_USERNAME		postfix
PGSQL_PASSWORD		$password
 
##NAME: PGSQL_DATABASE:0
PGSQL_DATABASE		postfix
 
##NAME: PGSQL_USER_TABLE:0
PGSQL_USER_TABLE	mailbox
 
##NAME: PGSQL_CRYPT_PWFIELD:0
PGSQL_CRYPT_PWFIELD	password
 
##NAME: PGSQL_UID_FIELD:0
PGSQL_UID_FIELD		'5000'
 
##NAME: PGSQL_GID_FIELD:0
PGSQL_GID_FIELD		'5000'
 
##NAME: PGSQL_LOGIN_FIELD:0
PGSQL_LOGIN_FIELD	local_part
 
##NAME: PGSQL_HOME_FIELD:0
PGSQL_HOME_FIELD	'/var/vmail/'
 
##NAME: PGSQL_NAME_FIELD:0
PGSQL_NAME_FIELD	name
 
##NAME: PGSQL_MAILDIR_FIELD:0
PGSQL_MAILDIR_FIELD	maildir
 
##NAME: PGSQL_QUOTA_FIELD:0
# PGSQL_QUOTA_FIELD	quota
 
##NAME: PGSQL_WHERE_CLAUSE:0
# Deal only with active mail accounts.
PGSQL_WHERE_CLAUSE      active='1'

username 형식 대신 user@domain.com 형식으로 로그인한다면 PGSQL_LOGIN_FIELD 값은 local_part에서 username으로 바꿔야합니다.

고급 인증 SQL 문법을 활용한다면 PGSQL_SELECT_CLAUSE를 사용할 수 있습니다. courier-authlib에서는 SELECT 구문에 대해 앞서 설정한 매개 변수를 무시하지만 암호를 바꿀 때 계정 갯수를 셀 경우 활용하므로 암호를 바꿀 때는 username 필드를 여전히 사용합니다. 사용자 이름에 대한 인증 절차가 끝나면 사용자 이름이 유일해야 함을 기억합니다.

파일 /etc/courier/authlib/authpgsqlrc데이터베이스 개별 접근 권한 가져오기
PGSQL_SELECT_CLAUSE	SELECT local_part, password, , '5000', '5000',	\
			'/var/vmail/', maildir, quota, name, 		 	\
			FROM mailbox WHERE local_part='$(local_part)'	 	\
			AND active='1'

MySQL

다음 courier-imap과 postfix의 메일 데이터베이스를 쓸 수 있게 인증 기능을 다시 설정하십시오. 다음 예제에서 $password 값을 mailsql MySQL 사용자의 암호로 바꾸십시오.

파일 /etc/courier/authlib/authmysqlrc인증 설정
MYSQL_SERVER            localhost
MYSQL_USERNAME       mailsql
MYSQL_PASSWORD      $password
MYSQL_DATABASE          mailsql
MYSQL_USER_TABLE        users
## (Make sure the following line is commented out since we're storing plaintext.)
#MYSQL_CRYPT_PWFIELD    crypt
MYSQL_CLEAR_PWFIELD     clear
MYSQL_UID_FIELD         uid
MYSQL_GID_FIELD         gid
MYSQL_LOGIN_FIELD       email
MYSQL_HOME_FIELD        homedir
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir

필요한 서비스를 다시 불러오십시오:

root #rc-service courier-authlib restart
root #rc-service saslauthd restart

authdaemon 설정

Authdaemon은 실제로 인증 절차를 진행합니다. 여기서 authdaemon은 올바른 데이터베이스 백엔드를 활용하도록 설정했습니다. 포티지에서는 실제로 authmodulelist 변수 속성을 설정합니다. 설정 파일에서 이 부분을 확인하십시오. 또한 여기서 디버깅을 활성화하면 나중에 잠재적 문제를 해결할 때 도움을 줍니다.

PostgreSQL

파일 /etc/courier/authlib/authdaemonrc인증 모듈 검증
##NAME: authmodulelist:2
authmodulelist="authpgsql "
 
##NAME: DEBUG_LOGIN:0
DEBUG_LOGIN=1
참고
다른 인증 모듈 사용도 결정했다며 마찬가지로, 여기 결과에 나타나야합니다.

MySQL

파일 /etc/courier/authlib/authdaemonrc인증 모듈 검증
##NAME: authmodulelist:2
authmodulelist="authmysql authpam"
 
##NAME: DEBUG_LOGIN:0
DEBUG_LOGIN=1

접근 권한

파일에 민감한 암호 정보가 있기 때문에 접근 권한을 제대로 설정해야합니다.

root #chmod 660 /etc/courier/authlib/auth*rc
root #chown mail:mail /etc/courier/authlib/auth*rc

courier-authlib 시험

courier-authlib에는 간단한 시험 유틸리티가 있습니다. 유틸리티에서는 올바른 사용자 이름을 매개 변수 값으로 넣어야합니다. 자세한 내용을 확인할 경우 authtest 설명서 페이지 확인을 망설이지 마십시오. 내용은 별로 없지만 핵심적입니다.

authlib 데몬 시작 기본 과정 테스트를 진행하려면:

root #/etc/init.d/courier-authlib start

testuser로 authtest를 실행하십시오:

root #authtest testuser
Authentication succeeded.
 
     Authenticated: testuser  (uid 5000, gid 5000)
    Home Directory: /var/vmail
           Maildir: example.com/testuser/
             Quota: (none)
Encrypted Password: $1$16117118$ajxN3QRilmP5zLVHjTkE31
Cleartext Password: (none)
           Options: (none)

POP3/IMAP 설정

POP3

POP3가 동작하려면 설정 몇 가지를 진행해야 합니다. 그러나 POP3를 사용하거나 활성화하지 않으려면 이 부분을 건너뛰어도 되며 이 설정을 NO로 두어도 됩니다. IMAP 방식으로는 서버에서 메시지를 서버에 남겼지만 POP3 사용자는 모든 메시지를 삭제할 수 있어, 해당 사용자의 메일 클라이언트 설정이 잘못되면 이런 방식으로 해당 사용자의 메일함을 날려버릴 수 있습니다.

파일 /etc/courier-imap/pop3dpop3 활성화
##NAME: POP3DSTART:0
POP3DSTART=YES

IMAP

IMAP에 활성화할 수 있는 몇가지 기능을 넣었습니다.

  • 서버에서 메시지를 검색할 수 있게 하는 SORT.
  • 연결할 때 처럼 'push' 할 수 있게 하는 IDLE.
파일 /etc/courier-imap/imapdimapd 및 일부 옵션 활성화
##NAME: IMAP_CAPABILITY:1
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE"
 
##NAME: IMAP_CHECK_ALL_FOLDERS:0
IMAP_CHECK_ALL_FOLDERS=1
 
##NAME: IMAP_ENHANCEDIDLE:0
IMAP_ENHANCEDIDLE=1
 
##NAME: IMAP_EMPTYTRASH:0
IMAP_EMPTYTRASH=Trash:40,Junk:7
 
##NAME: IMAPDSTART:0
IMAPDSTART=YES
 
##NAME: MAILDIRPATH:0
MAILDIR=.maildir
MAILDIRPATH=.maildir
참고
MAILDIRPATH 섹션에는 일부 중복 내용이 있으니, 제대로 설정하고 정리했는지 확인하십시오.

일부 클라이언트에서는 2048 비트 길이의 최소값을 지닌 DH 매개 변수가 필요합니다(>=dev-libs/nss-3.19.1 활용). 다음 명령으로 만드십시오:

root #DH_BITS=2048 mkdhparams

다음 Courier에서 이 파일을 사용하는지 확인하십시오:

파일 /etc/courier-imap/imapd-sslCourier가 dhparams.pem을 사용하는지 확인
TLS_DHPARAMS=/usr/share/dhparams.pem

IMAP/POP3 시험

POP3

Courier-pop3d를 시작해야합니다:

root #/etc/init.d/courier-pop3d start

시작하고 나면, 초기 문제를 찾을 때 텔넷을 활용할 수 있습니다. 텔넷에 로그인 했을 때 동작한다면, 메일 클라이언트를 사용할 수 있습니다:

user $telnet foo.example.com 110
+OK Hello there.
user testuser
+OK Password required
Pass secret
+OK logged in
참고
처음으로 원본 텍스트로 암호를 사용합니다. 이전에는$1$16117118$ajxN3QRilmP5zLVHjTkE31 였습니다.
경고
maildirmake 도구로의 사용자의 메일 디렉터리 준비를 기억하십시오.

시험 동작이 정상이라면 courier-pop3d를 기본 런레벨에 추가하십시오:

root #rc-update add courier-pop3d default

IMAP

Courier-imapd를 시작해야합니다:

root #/etc/init.d/courier-imapd start

시작하고 나면, 초기 문제를 찾을 때 텔넷을 활용할 수 있습니다. 텔넷에 로그인 했을 때 동작한다면, 메일 클라이언트를 사용할 수 있습니다:

user $telnet foo.example.com 143
Trying 127.0.0.1...
Connected to foo.example.com.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2008 Double Precision, Inc.  See COPYING for distribution information.
1 LOGIN testuser secret 
1 OK LOGIN Ok.
1 LOGOUT
* BYE Courier-IMAP server shutting down
1 OK LOGOUT completed
Connection closed by foreign host.

시험 동작이 정상이라면 courier-imap을 기본 런레벨에 추가하십시오:

root #rc-update add courier-imapd default

마무리

이 단계 동작이 정상이라면 디버깅 옵션을 끄십시오.

파일 /etc/courier/authlib/authdaemonrc디버깅 옵션 끄기
##NAME: DEBUG_LOGIN:0
DEBUG_LOGIN=0