· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Docbook Sgml/Life_With_Qmail-TRANS

큐메일과 삶

큐메일과 삶

Life with qmail (줄여서: lwq)

Mr . Dave Sill

윤주영

문서작성과 번역에서 잘못된 부분이 있으면 제게(윤주영) 이메일로 알려주시면 고치겠습니다.

큐메일 자체는 설치하기가 쉽지만, 큐메일을 처음 설치운영하려는 분들에게는 설치와 운영에서 좀 헷갈리는 부분이 있습니다. 그런 분들은 큐메일 프로그램에 포함되어 있는 설치문서와 FAQ를 참조해서 우선 큐메일만 설치 운영해 본 다음에 ucspi-tcp와 daemontools 등 큐메일을 운영하기 위한 추가프로그램을 같이 설치하는 과정을 설명한 본 문서를 참조하시어 다시 설치하면 좋습니다.

지금까지 MTA로 sendmail이 거의 독보적 위치를 차지하고 있고, 사실상의 표준입니다. 하지만, sendmail은 덩치가 매우 크고, 단일프로그램이며, 설치 및 설정이 어렵다는 단점이 있습니다. 큐메일은 모듈 방식으로 구성되어 있고, 설치와 설정이 쉬우며, 특히 보안에 많은 강점을 지니고 있습니다. 큐메일과 삶의 원제는 Life with qmail이며 본 문서는 이메일 MTA중 하나인 qmail을 설치하고 운영하는 방법을 설명합니다. 큐메일에는 여러 사람이 만든 모듈로 이루어져 있지만, 여기서는 꼭 필요한 프로그램들만 설명하므로 큐메일을 시작하는 분들께는 편하고 쉬운 안내가 될 것입니다. 원문은 여기 또는 요기를 참조하시면 됩니다.

고친 과정
고침 02000-3-20
최초번역
고침 12001-9-14
원문: 2001년 6월 13일자 ucspi-tcp의 버전업
고침 22001-12-25
원문: 2001년 9월 19일자 원저자의 저술 출판
고침 32002-1-19
원문: 2001년 12월 29일자 daemontools의 버전업

차례
1. 소개
1.1. 대상독자
1.2. 큐메일이란?
1.3. qmail의 장점?
1.3.1. 안전성
1.3.2. 성능
1.3.3. 신뢰성
1.3.4. 간편성
1.4. 경력
1.5. 특징
1.5.1. 설치
1.5.2. 안전
1.5.3. 메세지 구성
1.5.4. SMTP 서비스
1.5.5. 큐관리
1.5.6. 되돌리기 (Bounces)
1.5.7. 도메인으로 라우팅하기
1.5.8. SMTP 전달
1.5.9. 포워딩과 메일링리스트
1.5.10. 로컬전달
1.5.11. POP3 서비스
1.6. 관련 팩키지
1.7. 구성
1.8. 사용허가서
1.9. 여타 MTA와 비교
1.10. 문서
1.10.1. man page
1.10.2. Docs
1.10.3. FAQ
1.10.4.
1.10.4.1. The qmail Handbook
1.10.4.2. qmail
1.10.4.3. Running qmail
1.10.5. 메일링리스트 아카이브
1.10.6. 기타 웹사이트
1.11. 지원
1.11.1. 메일링리스트
1.11.1.1. 큐메일
1.11.1.2. qmailannounce
1.11.1.3. serialmail
1.11.1.4. ezmlm
1.11.2. 상담역
1.12. FAQTS 지식기지
2. 설치
2.1. 설치 논의
2.1.1. 바이너리 대 소스코드
2.1.2. Tarball과 운영체제별 패키지
2.2. 준비
2.3. 시스템 요구사항
2.4. 소스를 받으십시오.
2.5. 소스를 컴파일하세요.
2.5.1. 컴파일환경을 검증하세요.
2.5.2. 배포판을 풉니다.
2.5.3. 디렉토리를 만듭니다.
2.5.4. 사용자와 그룹을 만듭니다.
2.5.5. 컴파일을 하세요.
2.6. ucspi-tcp를 설치합니다.
2.7. daemontools를 설치합니다.
2.8. 큐메일을 가동합니다.
2.8.1. /var/qmail/rc
2.8.2. 시스템 기동 파일
2.8.2.1. qmailctl 스크립트
2.8.2.2. 감독 스크립트들
2.8.2.3. SMTP 접근 프로토콜
2.8.3. 기존에 설치된 MTA를 멈추고 무력하게 합니다.
2.8.4. 시스템앨리어스를 만듭니다.
2.8.5. 큐메일을 가동합니다.
2.9. 설치를 시험합니다.
3. 설정
3.1. 설정파일
3.2. 릴레이
3.2.1. 소개서
3.2.2. 릴레이 금지
3.2.3. 릴레이허용자를 고르기
3.3. 다중 호스트네임
3.4. 버츄얼도메인
3.5. 앨리어스
3.6. qmail-users
3.6.1. 단순배정
3.6.2. 와일드카드 배정
3.6.3. qmail-user 프로그램들
3.7. 스팸통제
4. 사용법
4.1. .qmail파일들
4.1.1. 프로그램전달
4.1.2. mbox 전달
4.1.3. maildir 전달
4.1.4. 포워드 전달
4.1.5. 연장주소
4.2. 메세지 보내기
4.2.1. SMTP
4.2.2. /var/qmail/bin/sendmail
4.2.3. qmail-inject
4.3. 환경변수
5. 고급토픽
5.1. procmail
5.2. POP 그리고 IMAP 서버
5.2.1. qmail-pop3d
5.2.1.1. qmail-pop3d의 구조
5.2.1.2. qmail-pop3d의 설치
5.2.2. qpopper
5.2.3. Solid
5.2.4. imap-maildir
5.2.5. Courier-IMAP
5.3. POP와 IMAP 클라이언트
5.3.1. fetchmail
5.3.2. getmail
5.4. 다중 RCPT 대 단일 RCPT 전달
5.5. VERP
5.6. 문제해결
5.6.1. 프로세스
5.6.2. 로그
5.6.2.1. splogger
5.6.2.2. multilog
5.6.2.3. 록메세지
5.7. 대형 서버
5.7.1. Scalable parallelism
5.8. Sendmail에서 큐메일로 옮기기
5.9. 메일링리스트매니저 (Mailing List Managers: MLM's)
5.10. ezmlm
5.11. 메이저도모
5.12. 패치
5.13. DNS
5.13.1. 패킷버퍼사이즈를 65536까지 밀어올리기
5.13.2. Christopher K. Davis의 패치
5.13.3. qmail-ldap
5.14. QMTP (Quick Mail Transfer Protocol)
A. 부록
A.1. 사례
A.2. 관련 패키지
A.2.1. dot-forward
A.2.2. fastforward
A.2.3. ucspi-tcp
A.2.4. daemontools
A.2.5. qmailanalog
A.2.6. rblsmtpd
A.2.7. serialmail
A.2.8. mess822
A.2.9. ezmlm
A.2.10. safecat
A.2.11. maildrop
A.3. 인터넷메일의 동작방법
A.3.1. 메세지가 A지점에서 B지점으로 가는 방법
A.3.2. 더많은정보
A.3.3. 인터넷 RFC들
A.4. 구조
A.4.1. 모듈시스템구조
A.4.2. 파일구조
A.4.3. 큐구조
A.4.4. 사진
A.5. 드문 (어쩌다 한번씩 묻는) 질문들
A.5.1. 큐메일은 지연메세지를 어느 정도 자주 보냅니까?
A.5.2. 저는 MX가 많은 대형사이트에 매일을 보내지 못하는데 왜그렇죠?
A.5.3. QUEUE_EXTRA?
A.6. 에러메세지
A.7. 의외의 실수
A.7.1. 큐메일은 수퍼유저에게 메일을 전달하지 않습니다.
A.7.2. 큐메일은 홈디렉토리가 없는 사용자에게 메일을 전달하지 않습니다.
A.7.3. 큐메일은 사용자이름에 대문자를 쓰는 사용자에게 메일을 전달하지 않습니다.
A.7.4. 큐메일은 홈디렉토리에 그룹이나 기타사용자에게 쓰기를 허락하는 사용자에게 메일을 전달하지 않습니다.
A.7.5. 큐메일은 확장주소의 점(.)을 콜론(:)으로 바꿉니다.
A.7.6. 큐메일은 확장주소의 대문자를 소문자로 바꿉니다.
A.7.7. 큐메일은 /etc/hosts를 사용하지 않습니다.
A.7.8. 큐메일은 SMTP활동을 록하지 않습니다.
A.7.9. 큐메일은 지연통지를 만들지 않습니다.
A.7.10. 큐메일은 /var/qmail/queue/lock/trigger가 틀린접근권한이거나 보통파일이면 늦어집니다.
A.7.11. DNS 또는 IDENT를 찾느라고 SMTP가 느려질 수도 있습니다.
A.8. lwq에 대한 FAQ
A.8.1. lwq의 버전
A.8.2. lwq의 소유자는?
A.8.3. lwq의 라이센스는?
A.8.4. lwq의 새판을 구할 수 있다는 것은 어떻게 통지받을 수 있습니까?
A.8.5. lwq공헌자와 팬은 어디서 이야기할 수 있습니까?
A.8.6. lwq는 다른 언어로 번역되었습니까?
A.8.7. lwq는 HTML이외에 포스트스크립트, PDF, 평범한글, 또는 다른형태로도 구할 수 있습니까?
A.8.8. lwq를 사용했더니, 시스템파괴, 하드디스크삭제, 백발을 했습니다.
A.8.9. lwq에 공헌하고 싶습니다.

1. 소개

1.1. 대상독자

「큐메일과 삶」 (Life with qmail, 이하 lwq라고 줄여서 부름)은 남는 PC에 Linux를 이제 막 설치한 일반 리눅스 초보자부터 경험이 많은 시스템 관리자 또는 메일 서버 관리자에 이르기까지 큐메일을 운영하고자 하는 모든 사람을 대상으로 쓰여졌습니다. 글을 보시면서 빠지거나 불분명한 점들은 lwq (at) sill.org로 알려주십시오.

큐메일에 대한 문서는 이미 많이 널려있습니다. 신참자들을 대상으로 하는 것들도 있고, 경험이 많은 독자를 대상으로 하는 것들도 있습니다. lwq는 독자가 최소한 다음의 기술을 갖추고 있다는 가정 하에, 이미 있는 문서들이 다루지 않은 중간 부분을 매우고, 합쳐서 하나의 문서로 만들고자 하는 목적으로 쓰여졌습니다.

  • 유닉스에서 파일과 디렉토리를 다룰 줄 알고 있음.

  • 웹브라우저나 FTP 클라이언트를 사용할 수 있음.

  • 지시사항을 따라서 할 수 있음.


1.2. 큐메일이란?

큐메일은 유닉스류 운영체제의 인터넷 Mail Transfer Agent (MTA)으로, 대부분의 UNIX류 운영체제가 제공하고 있는 Sendmail시스템을 대체하는 소프트웨어입니다. 큐메일은 Simple Mail Transfer Protocol (SMTP)을 이용해서 다른 시스템의 MTA와 메세지를 교환합니다.

-------------------------------------------------------------

유의점: 바른이름은 Qmail이 아니고 qmail입니다.

-------------------------------------------------------------


1.3. qmail의 장점?

당신의 운영체제에도 Sendmail같은 MTA가 있을 겁니다. 그런데, 지금 이문서를 읽고 있다면, 아마 더 MTA를 찾고 있는 것이겠죠? 큐메일이 다른 vendor가 제공하는 MTA보다 더 좋은 장점은 다음과 같습니다.


1.3.1. 안전성

높은 보안수준을 염두에 두고 설계되었습니다. Sendmail의 보안은 오랫동안 심각한 문제였습니다. Sendmail이 처음 만들어졌을때의 인터넷은 훨씬 더 친밀한 동네였습니다. 누구나 서로를 알았고, 때문에 보안을 고려하며 설계하거나 코딩할 필요가 없었습니다. 오늘날 인터넷은 네트워크 서버들에게 너무나도 적대적인 공간이 되어 버렸습니다. Sendmail을 만든 Eric Allman과 현재의 메인테이너인 Claus Assman도 Sendmail이 더 안전하도록 만들었지만, 진짜로 안전하게 만들려면 다시 설계하는 수 밖에 없었습니다.


1.3.2. 성능

메일보내기를 병행처리합니다. (20개가 default입니다.)


1.3.3. 신뢰성

한번 받은 메세지는 결코 놓치지 않습니다. 새 메일박스형태도 제공하는데, NFS에서 조차 locking하지 않고도 잘 작동합니다.


1.3.4. 간편성

다른 동급의 MTA보다 작습니다.

-------------------------------------------------------------

유의점: 큐메일의 공식홈페이지 에서 더 많은 장점을 읽을 수 있습니다.

-------------------------------------------------------------


1.4. 경력

큐메일은 지금 시카고의 일리노이드 대학에 수학교수로 있는 Dan Bernstein (DJB)께서 만드셨습니다 ( DJB 홈페이지 ). 번스타인박사께서는 암호분야에서의 업적과, 미국정부를 상대로 암호화소스코드공개에 대해 소송을 벌여 잘 알려져 있습니다. 소송에 대해서는 http://www.news.com/News/Item/0,4,36217,00.html?owv 를 참조하십시오.

큐메일의 최초 공개판은 1996년 1월 24일에 나온 0.70 베타판이고, 첫 감마판은 1996년 8월 1일의 0.90입니다.

일반판으로 처음 나온 1.0은 1997년 2월 20일에 공개되었습니다. 지금의 버전인 1.03은 1998년 6월 15일에 나왔습니다.

다음판은 2.0 평가판이 될 것으로 예상합니다. http://cr.yp.to/qmail/future.html에 2.0의 내용들이 있습니다.


1.5. 특징

http://cr.yp.to/qmail.html에 큐메일의 모든 특징이 나열되어 있습니다. 이번 단락은 이 페이지를 많이 참고했습니다.


1.5.1. 설치

  • 당신의 유닉스 기종에 자동적응하므로 이식(porting)할 필요가 없습니다.

  • 호스트별 자동설정

  • 빠르게 설치되므로 결정할 사항이 많지 않습니다.


1.5.2. 안전

  • 주소, 파일, 프로그램 등을 서로 깨끗하게 구별해 놓았습니다.

  • setuid 코드를 최소화했습니다.

  • 루트(root) 코드를 최소화했습니다.

  • Five-way trust partitioning--심도 있는 안전

  • one-way 메세지 단편들, 또는 메세지내용전체 등을 골라서 할 수 있습니다. (드문질문에 있는 QUEUE_EXTRA?를 보십시오.)


1.5.3. 메세지 구성

  • RFC 822과 RFC 1123을 따릅니다.

  • address group을 전부 지원합니다.

  • 구식 주소리스트를 RFC 822 형식으로 자동변환합니다.

  • 지금의 sendmail user agent와 호환하기 위해서 sendmail 명령을 지원합니다.

  • header줄 길이의 한계는 메모리가 허용하는 데까지입니다.

  • host masquerading (참조: defaulthost )

  • user masquerading (참조: MAILUSER, MAILHOST )

  • Mail-Followup-To를 자동생성합니다. (참조: QMAILMFTFILE )


1.5.4. SMTP 서비스

  • RFC 821, RFC 1123, RFC 1651, RFC 1652, RFC 1854 등의 준수

  • 8-bit도 장애무

  • RFC 931/1413/ident/TAP callbak등으로 스팸메일과 위조자 등의 추적 용이

  • relay 통제기능으로 외부의 권한이 없는 중계 저지

  • relay 통제와 alias간의 불간섭

  • local IP주소 자동인식

  • 버퍼별 timeout

  • hop counting

  • 병렬처리 한도 (ucspi-tcp를 이용)

  • (ucspi-tcp를 이용해서) 악용자들로부터의 접속거부

  • 권한인정된 client에 대한 중계와 메세지 재작성

  • (rblsmtpd를 통한) RBL/ORBS지원 선택


1.5.5. 큐관리

  • 큐에 더해진 메세지의 즉각처리

  • 병렬처리한계

  • 큐디렉토리의 분리로 큐가 비대해 졌을 때 속도저하를 방지

  • 2차방정식에 의한 재시도 스케쥴로 오래된 메세지일수록 드물게 시도 (큐메일은 지연메세지를 어느 정도 자주 보냅니까?를 보세요)

  • 메세지 재시도의 독립 스케쥴

  • 자동 안전 큐하기로 시스템이 무너져도 메일을 잃지 않음

  • 수신자별 자동 첵포인트하기

  • 자동 큐청소

  • 큐보기 (qmail-qread)

  • (qmailanalog를 이용한) 상세한 배달 통계


1.5.6. 되돌리기 (Bounces)

  • 기계와 사람이 읽을 수 있는 QSBMF 되돌림 메세지

  • 언어에 상관없는 RFC 1893 에러코드인 HCMSSC 지원

  • 이중 되돌림으로 postmaster에게도 보냄


1.5.7. 도메인으로 라우팅하기

  • 로컬호스트에 대해서는 여러 이름이 가능함 (참조: locals )

  • 여러 버추얼도메인 (참조: virtualdomains )

  • 도메인 와일드카드 (참조: virtualdomains )

  • 설정가능한 "percent hack" 지원 (참조: percenthack )

  • UUCP hook


1.5.8. SMTP 전달

  • RFC 821, RFC 974, RFC 1123을 따름

  • 8비트 처리

  • 다운된 호스트를 자동 backoff

  • smarthost, localnet, mailertable등의 인공지능 라우팅 (참조: smtproutes )

  • 버퍼별 타임아웃

  • SLIP/PPP에 알맞은 (serialmail을 통한) 수동적 SMTP 큐

  • (serialmail을 통한) autoTURN


1.5.9. 포워딩과 메일링리스트

  • sendmail의 .forward를 (dot-forward를 이용해서) 따름

  • (fastforward를 통한) hashed forwarding 데이터베이스

  • sendmail의 /etc/aliases를 (fastforward를 이용해서) 따름

  • 어드레스 와일드카드 (.qmail-default를 보세요.)

  • 바운스와 휴가메세지를 자동전환하는 메일링리스트소유자

  • 메일링리스트바운스를 위한 자동 수신자 인식인 VERP

  • Delivered-To의 룹을 자동차단을 호스트간에도 지원


1.5.10. 로컬전달

  • 어드레스계층을 사용자가 통제하므로 fred는 fred-anything mbox 전달을 통제함

  • 믿을수있는 NFS 전달 (maildir를 보세요.)

  • procmail 등 사용자가 통제하는 프로그램 전달 (qmail-command를 보세요)

  • 새메일통지 선택 (qbiff)

  • NRUDT 반송 증표의 선택 (qreceipt)

  • 조건 필터링 (condredirect와 bouncesaying)


1.5.11. POP3 서비스

  • RFC 1939를 따름

  • UIDL 지원

  • TOP 지원

  • APOP hook

  • (checkpassword를 이용해서) 패스워드검사의 모듈화


1.6. 관련 팩키지

큐메일은 한 개의 툴은 잘 정의된 단일 기능을 완수하며, 복잡한 기능은 여러 개의 단일 툴들이 파이프 라인으로 연결하여 만들어 진다는 전통적인 유닉스 철학을 따릅니다. 다른 방법에서는 복잡하고 복잡한 툴들을 만들어서 간단한 툴들의 많은 기능을 재구성합니다.

이것을 이해했다면, 큐메일이 자체로는 우리가 원하는 모든 기능을 할 수 없다는 것은 놀라운 일이 아닐 것입니다. 여기 큐메일에 붙어 동작하는 다음과 같은 인기있는 add-on들이 있습니다. 물론 큐메일에는 다른 표준 유닉스 유틸리티들도 붙여서 사용할 수 있습니다.

  • dot-forward: sendmail .forward 파일 호환 애드온

  • fastforward: sendmail alias 데이터베이스 호환 앳온

  • ucspi-tcp : inetd 대체

  • daemontools: 데몬과 그 로그를 관리하는 툴집합

  • qmailanalog: 큐메일 로그파일 분석툴집합

  • rblsmtpd : anti-spam 툴

  • serialmail : 저속넷웍상의 mailing을 위한 툴

  • mess822 : 인터넷 메일 메세지의 해석기 툴

  • ezmlm : 큐메일을 위한 메일링리스트 관리자


1.7. 구성

구조부록에 큐메일의 기능구조와 실제구조를 다루었습니다. 한마디로, 큐메일은 서로다른일을 하는 프로그램(모듈)들로 이어져 있습니다.


1.8. 사용허가서

큐메일의 저작권은 저자인 Dan Bernstein에 있고, 사용자권리진술로 배포하지 않습니다. http://cr.yp.to/softwarelaw.html에 보시면, 미국 저작권법에서 당신의 권리라고 저자가 생각하는것을 적어놓았습니다. http://cr.yp.to/qmail/dist.html 에서 그는 큐메일의 소스코드의 배포권리를 허가했습니다. 바이너리 배포는 그곳과 http://cr.yp.to/qmail/var-qmail.html.에 설명된대로 하면 용인됩니다.

쉽게 이야기해서 당신은 어떤 목적이든지 큐메일을 사용할 수 있고, 고치지 않은 큐메일 소스코드 배포판과 var-qmail 바이너리 배포판을 다시 배포할 수 있고, 큐메일에 대한 패치를 배포할 수 있습니다. 그러나, 수정된 큐메일 소스코드나 비 var-qmail바이너리 배포판은 배포할 수 없습니다.


1.9. 여타 MTA와 비교

이 주제로 책을 쓸 수도 있겠지만, 읽기엔 너무 지루할 것입니다. 가장 많이 쓰는 유닉스 MTA들 몇 개를 큐메일과 간단히 비교했습니다.

표 1. MTA들 비교

MTA 성숙 안전 특징 성능 Sendmail성 모듈화
qmail 중간 높음 높음 높음 add-on 되어있음
Sendmail 높음 낮음 높음 낮음 없음 안됨
Postfix 낮음 높음 중간 높음 맞음 되어있음
exim 중간 낮음 높음 중간 맞음 안됨

Sendmail성이란 해당 MTA가 여러면에서 Sendmail같아서, .forward 파일이나 /etc/aliases나 /var/spool/mail 등의 사용을 Sendmail에서 다른 MTA로 전환할 때 사용자들이 고려할 점이 없도록 하는 것입니다.

Cameron Laird가 http://starbase.neosoft.com/~claird/comp.mail.misc/MTA_comparison.html에 이것들과 다른 무료, 유료 MTA를 비교한 웹페지를 만들었습니다.


1.10. 문서

1.10.1. man page

큐메일배포판은 man page를 완비했습니다. 설치하면 /var/qmail/man에 놓입니다. MANPATH 환경변수에 그 디렉토리를 추가해야 할지도 모릅니다.

표 2. 큐메일 맨페이지

Shell Command
Bourne (/bin/sh) MANPATH=$MANPATH:/var/qmail/man; export MANPATH
bash, Korn export MANPATH=$MANPATH:/var/qmail/man
C Shell setenv MANPATH $MANPATH:/var/qmail/man

그러면, "man qmail항목"이라고 하면 해당 man page를 보여줍니다.

http://www.qmail.org/man/index.html에서 HTML형식으로 온라인상에서도 man page를 참고할 수 있습니다.

-------------------------------------------------------------

유의점: 큐메일의 man page에는 분명 정보가 담겨 있지만, 함축되고 딱딱한 형식으로 쓰여 있으므로 꼼꼼하게 읽으셔야 합니다. 한 부를 인쇄하여 쭉 읽고 무엇이 어디에 있는지 미리 파악해놓아야 편합니다. 여러 장이나 되지만 같은 내용은 거의 되풀이되지 않으므로, 어디에 무엇이 있는지 알지 못하면 원하는 것을 찾기 힘듭니다.

-------------------------------------------------------------


1.10.2. Docs

큐메일 배포판은 /var/qmail/doc에 다음 문서들을 설치하여 제공합니다.

  • FAQ : Frequently Asked Questions (답과 함께)

  • INSTALL*: 설치문서

  • PIC.* : 큐메일의 핵심기능방법을 설명. 더 이상의 설명은 구조부록의 사진항목을 보십시오.

  • 설치관련한 기타 다양한 문서

이 문서들을 아래 주소에서 온라인으로도 보실 수 있습니다.


1.10.3. FAQ

다음에 공식 FAQ가 두개 있습니다.

  • /var/qmail/doc/FAQ: 일반 텍스트판,

  • web FAQ

web FAQ가 더 충실합니다.


1.10.4. 책

1.10.4.1. The qmail Handbook

큐메일과삶의 저자인 Dave Sill이 Apress출판사에서 큐메일에 대한 책을 냈는데 2001년 10월 21일에 구입가능합니다. 이 qmail Handbook이란 책은 본 가이드에 있는 내용 모두를 다루고, 더 깊고 새로운 내용도 담고 있습니다.

더 알고 싶으시면 요기를 보시고, 미리주문하시려면 요기여기를 보십시오.


1.10.4.2. qmail

John Levine 께서 O'Reilly & Associates출판사에서 qmail이란 책을 쓰고 계시고 올해말쯤에 구입가능합니다. O'Reilly는 컴퓨터관련출판에서는 탁월한 명성을 갖고 있습니다.


1.10.4.3. Running qmail

Richard Blum께서 Running qmail을 쓰셨고, Sams출판사에서 출간되었습니다. 이 책은 큐메일메일링리스트에서 다양한 평가를 받았습니다.

더 알고 싶으시거나 주문하시려면 요기를 보십시오.


1.10.5. 메일링리스트 아카이브

Dan Bernstein이 유지하는 큐메일의 이메일 메일링리스트는 귀중한 정보소스입니다. 메일링리스트 메세지의 아카이브는 http://www.ornl.gov/its/archives/mailing-lists/qmail/에 보관됩니다.

그 아카이브에 대한 서치엔진은 http://www-archive.ornl.gov:8000/에 있습니다.

기타 web 아카이브는 다음에서 얻을 수 있습니다.

큐메일에 관한 대부분의 질문은 먼저 메일링리스트 아카이브를 뒤지면 답을 얻을 수 있습니다.


1.10.6. 기타 웹사이트


1.11. 지원

1.11.1. 메일링리스트

다음 메일링리스트는 cr.yp.to에 있습니다. 스패머가 이메일주소를 거두지 못하게 하려고 완전하고 유효한 주소와 "mailto" URL을 쓰지 않습니다.

메일링리스트는 ezmlm으로 관리하는데, 주소별로 각각의 기능을 담당합니다.

  • listname(at)list.cr.yp.to: 메세지송부주소로서 여기로 메세지를 보내시면 모든 가입자에게 보내집니다. 가입/가입해제 신청을 이리로 하면 안되는데, 그러면 가입(해제)가 되지도 않을 뿐만 아니라, 가입자들을 성가시게 하기 때문입니다.

  • listname-help(at)list.cr.yp.to: "help"주소입니다. 명령주소와 일반사용정보를 보내드립니다.

  • listname-subscribe(at)list.cr.yp.to: 빈 메세지를 이리로 보내면 가입됩니다.

  • listname-unsubscribe(at)list.cr.yp.to: 빈 메세지를 이리로 보내면 가입해제됩니다.

예로서 joe@example.com와 같이 가입(해제)주소를 적으시려면 다음과 같이 주소를 만들어 보냅니다.

listname-subscribe-joe=example.com@list.cr.yp.to


1.11.1.1. 큐메일

주요 큐메일 메일링리스트. serialmail을 빼고는 큐메일에 관련된 모든것에 관한 토론과 질문과 대답. 질문을 보내시기 전에 FAQ를 읽으시고, 메일링리스트아카이브를 뒤지시기 바랍니다. 질문을 하실때에는 다른 사람이 답해줄 수 있도록 다음과 같은 충분한 내역을 포함하시기 바랍니다.

  • 무엇을 하셨습니까? 설정을 어떻게 하셨습니까? 무엇이 중요한 지 모르시면 qmail-showctl명령의 결과물을 포함하십시오. 무슨 행동을 하셨습니까?

  • 무엇이 일어나길 바라셨습니까? 무슨 결과를 얻으려고 하셨습니까? 읽는 분이 추측해서 알아내리라고는 생각지 마십시오.

  • 무슨일이 일어났습니까? 실제 결과를 설명하십시오. 로그파일을 잘라서 포함하시고, 메세지사본을 헤더와 함께 포함하십시오.


1.11.1.2. qmailannounce

새로운 공지사항은 여기에 공표됩니다. 가입신청주소는 없고, 읽기전용입니다.


1.11.1.3. serialmail

serialmail 패케지관련 토론입니다.


1.11.1.4. ezmlm

ezmlm 메일링리스트 관리에 대한 토론입니다.


1.11.2. 상담역

http://www.qmail.org/top.html#paidsup를 보시면 상용 지원 제공자명단이 있습니다.


1.12. FAQTS 지식기지

큐메일관련 질의응답은 http://qmail.faqts.com에 있습니다. FAQ에서도 답해주지 않는 질문은 이 지식기지를 검색해보세요. "how to" 류 질문의 답을 찾는 데 특히 좋습니다.


2. 설치

큐메일의 설치를 설명합니다. 경험이 있는 시스템 어드민은 소스배포판에 있는 INSTALL의 지시사항을 따라서 큐메일을 설치할 수 있습니다. INSTALL에 쓰인 지시사항은 공식 설치지시사항입니다. 그것은 본문서인 lwq의 지시사항보다 복잡하고, 읽는 사람이 경험있는 시스템애드민과 메일애드민이라고 여깁니다. 또한 그것은 옛날 것이라 Bernstein이 현재 권장하는 방법들을 반영하지 않기도 합니다.

-------------------------------------------------------------

유의점: 다음의 지시사항을 읽으실때 하나도 빼지말고 읽어서 전체과정을 익히시기 바랍니다.

-------------------------------------------------------------


2.1. 설치 논의

2.1.1. 바이너리 대 소스코드

미리컴파일된 배포판관련 사용허가의 제약때문에, 큐메일은 보통 소스코드 배포판으로 설치합니다.

소스코드와 바이너리를 구분하기 어렵다면, 집으로 피자를 배달한다고 가정하십시오. 바이너리 버전 피자는 즉시 먹을 수 있게 배달됩니다. 소스코드피자는 밀가루, 효모, 치즈, 토핑, 그리고 요리방법 등을 포함한 장비일체로 배달됩니다. 소스코드설치는 일을 좀더 많이 해야 하지만, 지시사항을 철저하게 따르면, 그 결과는 같거나 더 좋습니다. 직접 만들어 먹는 피자는 더 신선하고, 좋아하는 토핑을 맞춰먹을 수 있으며, 자신이 만든 피자에 대해, 그것이 어떻게 만들어 졌는지에 대해 더 많이 알 수 있습니다.


2.1.2. Tarball과 운영체제별 패키지

소스코드설치를 자동으로 하는 방법을 제공하는 운영체제도 있습니다. 피자로 다시 비유하자면, 단추만 누르면 피자가 저절로 구워지도록 재료와 지시사항을 패키지하는 것입니다.

훌륭하지 않습니까?

실제로는 그렇게 좋지만은 않은 방법입니다. 패키지로 묶기가 매우 힘들고, 생각대로 움직이지 않을 수가 있습니다. 또한 그것도 소프트웨어이므로, 다른 소프트웨어와 마찬가지로 버그가 있을 수도 있습니다. 버그가 없더라도, 그 편리함은 그만한 대가를 치루게 됩니다. 스스로 만들어보는 피자의 이점인 자신의 기호에 맞춰서 토핑을 조정하고, 피자가 어떻게 만들어지고, 어떻게 작용하는지 등을 잃게 됩니다.

큐메일이 피자라면, 자동컴파일이 옳은 방법일 수도 있습니다. 그러나, 큐메일은 피자가 아니고, 매우 복잡한 시스템입니다. 큐메일을 잘 운영하려면 설치자와 관리자는 이 소프트웨어를 잘 이해해야 합니다. 자동설치 큐메일이 수동설치판보다 설치하기에 쉽습니다만, 수동설치판이 설정하고 문제점을 해결하는 데 쉽습니다. 시스템에 큐메일을 설치하는 것은 한번만 하는 작업이지만, 큐메일을 재설정하거나, 생각대로 되지 않는 이유를 파악해야 하는 경우는 여러 차례일 것입니다.

이런 이유로 저는 큐메일을 RedHat RPM이나 기타 자동설치번들이 아닌 소스크드 tarball로 설치하시를 권합니다.


2.2. 준비

큐메일을 시스템에 설치하기 전에, 특히 큐메일 설치가 처음이라면, 몇가지 고려할 사항이 있습니다.

  • 가능하면 큐메일을 연습시스템에 설치하십시오. 이래야 중요메일을 잃지 않고, 또는 사용자들에게 메일서비스를 단절하지 않고도 실수해볼 기회가 생깁니다.

  • 여분시스템이 없거나 시스템에 이미 sendmail, smail이나 기타 MTA 등을 운영하여 메일이 처리되고 있다고 해도, 기존서비스와 충돌하지 않으면서 큐메일의 대부분을 시험할 수 있습니다.

  • 다른 MTA를 큐메일로 대체할 때, 큐메일의 경험이 많더라도, 계획을 세워야 좋습니다.


2.3. 시스템 요구사항

큐메일은 대부분의 유닉스와 유닉스류 시스템에 설치되고 운영됩니다만 몇가지 요구사항이 있습니다.

  • 컴파일동안 컴파일하는 공간에 약 10메가 바이트의 여유공간. 컴파일후 옵젝트파일을 제거하면 4메가만 남습니다.

  • 컴파일러, 시스템헤더파일, 그리고 라이브러리 등을 포함하는 완전한 C 개발시스템. 컴파일지시사항은 필요한 부분이 있으면 알려줍니다.

  • 바이너리, 문서, 그리고 설정 등의 파일에 대해 2-3메가 바이트 공간.

  • 큐를 위한 충분한 디스크공간. 소규모 단일사용자 시스템은 2-3메가 바이트만 있으면 됩니다. 대용량 서버는 2-3 기가 바이트가 있어야 될지도 모릅니다.

  • 호환 운영 시스템. 대부분의 유닉스종은 됩니다. 소스트리의 README를 보면 호환판의 리스트가 있습니다.

  • DNS로의 접근을 강력히 권장합니다. 그렇지 않으면 큐메일은 smtproutes의 config 파일에 설정된 원격시스템으로만 보냅니다.

  • 적절한 넷웍 연결. 큐메일은 잘 연결된 시스템에 대해 설계되어서 28.8k 다이얼업에서 메일링리스트를 사용하고 싶지 않을지도 모릅니다. 큐메일을 연결이 나쁜 시스템에서 사용할 수 있도록 하려고 serialmail 패키지가 설계되었습니다. 더 많은 정보는 관련패키지 부록의 시리얼메일항목 을 보시면 됩니다.


2.4. 소스를 받으십시오.

오우케이, 이제 큐메일을 설치할 수 있도록 필요사항에 맞는 시스템을 준비하셨군요. 첫번째 단계는 큐메일과 다른 앳온의 소스코드를 다운로드하는 것입니다. 큐메일은 당연히 필요하고요, ucspi-tcp와 daemontools도 필요할 것입니다.

웹브라우저나 FTP 클라이언트를 이용해서 이 파일들을 가져오세요.

-------------------------------------------------------------

유의점: 위의 연결이 유효하지 않다면, 해당 패키지가 업데잇되었을 수도 있습니다. http://cr.yp.to/software.html에 가셔서 현재판을 받으세요. 업그레이드판은 다음의 설치설명과 틀릴 수도 있으니까, "Upgrading from previous versions..."의 release notes를 참조하세요.

-------------------------------------------------------------


2.5. 소스를 컴파일하세요.

2.5.1. 컴파일환경을 검증하세요.

첫번째 할일은 프로그램을 컴파일하기에 필요한 툴을 갖추었는 지 확인합니다. 이것은 사용하는 유닉스종류에 따릅니다. 말씀드릴 수 있는 가장 쉬운 방법은, 보장되지는 않지만, 해보는 겁니다.

-------------------------------------------------------------

유의점: 이것들중 하나라도 통과하면, 다음 항목으로 넘어가셔도 됩니다.

-------------------------------------------------------------

명령행프롬트에서, cc라 쓰고, 엔터를 누르세요: 

$ cc 
cc: No input files specified
$

답이 비슷하게 나오면, C 컴파일러가 경로에 있는 것입니다. 그렇지 않더라도, 설치되어 있지 않다는 것은 아닙니다. 설치되어 있을 지 모르지만, 경로에 포함되어 있지 않을 수도 있습니다. 물론, 설치되어 있지 않을 수도 있습니다. 이렇게 해보세요.

  • /usr/bin/cc

  • /usr/bin/gcc

  • /usr/local/bin/cc

  • /usr/local/bin/gcc

  • /usr/ccs/bin/cc

소용이 없으면, 플랫폼 특성에 맞는 방법으로 하셔야 합니다. 프롬프트에서 다음 중 하나를 하시는데, 사용중인 OS에 따르셔야 합니다.

  • Red Hat Linux: rpm -qa | grep gcc 또는 rpm -qa | grep egcs

  • FreeBSD: GCC가 디폴트로 포함됩니다.

이번 항목에서는 큐메일을 실제로 컴파일하는 단계를 거칩니다. 오려붙이기가 간편하지만, 그렇게 필요하지는 않습니다.


2.5.2. 배포판을 풉니다.

여기까지 오셨으면, 이미 C 컴파일러와 tarball을 준비하신 겁니다. 타볼을 작업하실 디렉토리로 복사하거나 옮기세요. qmail과 ucspi-tcp는 /usr/local/src가 좋고, daemontools는 /package로 하셔야 합니다.

아직 루트가 되지 않으셨으면, 이제 루트가 되셔야 합니다.

su
umask 022
mkdir -p /usr/local/src
mv qmail-1.03.tar.gz ucspi-tcp-0.88.tar.gz /uar/local/src
mkdir -p /package
chmod 1755 /package
mv daemontools-0.76.tar.gz /package

이제 패케지들을 풉니다.

cd /usr/local/src
gunzip qmail-1.03.tar.gz
tar xpf qmail-1.03.tar
gunzip ucspi-tcp-0.88.tar.gz
tar xpf ucspi-tcp-0.88.tar
rm *.tar	 # 여유공간이 없을 때 하는 선택사항
cd /package
gunzip daemontools-0.76.tar.gz
tar xpf daemontools-0.76.tar
rm *.tar         # 선택사항

/usr/local/src/qmail-1.03, /usr/local/src/ucspi-tcp-0.88, /package/admin/daemontools-0.76 등의 디렉토리가 생깁니다. qmail-1.03 디렉토리로 가시면 시작하겠습니다.

cd /usr/local/src/qmail-1.03


2.5.3. 디렉토리를 만듭니다.

필요한 섭디렉토리는 큐메일 설치 프로그램이 만들므로, 큐메일 홈디렉토리만 만들어 주면 됩니다.

mkdir /var/qmail

그러면 다음 항목으로 갑니다.

-------------------------------------------------------------

유의점: 큐메일파일들을 /var가 아닌 다른 곳에 놓고 싶으시면, /var/qmail디렉토리에 그곳을 가리키는 심볼릭 링크를 만드시면 됩니다. 예를 들면, 다음과 같이 하시면 됩니다.

mkdir /var/qmail
ln -s /usr/man /var/qmail/man
mkdir /etc/qmail
ln -s /etc/qmail /var/qmail/control
ln -s /usr/sbin /var/qmail/bin

-------------------------------------------------------------


2.5.4. 사용자와 그룹을 만듭니다.

필요한 사용자와 그룹을 만드는 가장 쉬운 방법은 작은 스크립트를 만들어서 하는 것입니다. 소스디렉토리에 INSTALL.ids 파일이 있습니다. 거기에는 여러 프랫폼에 해당하는 명령행이 있는데, 그 파일을 다른 이름으로 복사해서 편집하면 빠르고 쉽습니다.

cp INSTALL.ids IDS

좋아하시는 에디터로 필요한 행을 빼고 다 지웁니다. 예를 들면, 편집후에 FreeBSD에 대한 IDS는 다음과 같습니다.

pw groupadd nofiles
pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
pw groupadd qmail
pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent
pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent
pw useradd qmails -g qmail -d /var/qmail -s /nonexistent

실행하려면, chmod를 써서 실행파일로 만드시거나 sh로 실행하십시오.

첫번째 방법:

chmod 700 IDS
./IDS

두번째 방법:

/bin/sh IDS

스크립트의 실행이 완료되어 사용자와 그룹이 생기면 다음항목으로 갑니다.

그러나, INSTALL.ids에 해당 시스템이 없으면 어쩝니까? 수동으로 그것들을 만들어야 합니다. 좋아하는 에디터를 사용해서 /etc/group을 편집하세요. 다음 두 줄을 그 파일끝에 첨가하십시오.

qmail:*:2107:
nofiles:*:2108:

-------------------------------------------------------------

유의점: 2107과 2108이 사용중인 것이 아님을 확인하셔야 합니다. 사용중이라면, 다른 비사용번호를 써야 합니다.

-------------------------------------------------------------

다음으로는, vipw를 이용해서 다음 줄들을 그 파일의 끝에 붙이십시오. (대부분의 시스템에 vipw가 있지만, 없으면 에디터로 /etc/passwd를 편집합니다.)

alias:*:7790:2108::/var/qmail/alias:/bin/true
qmaild:*:7791:2108::/var/qmail:/bin/true
qmaill:*:7792:2108::/var/qmail:/bin/true
qmailp:*:7793:2108::/var/qmail:/bin/true
qmailq:*:7794:2107::/var/qmail:/bin/true
qmailr:*:7795:2107::/var/qmail:/bin/true
qmails:*:7796:2107::/var/qmail:/bin/true

-------------------------------------------------------------

유의점: 7790-7796이 사용중이지 않는다는 것과 2107과 2108이 위에서 만든 그룹아이디와 것을 확인하십시오. 그렇지 않다면, 비사용번호를 적으세요.

-------------------------------------------------------------

이런 것들을 해당파일의 끝에만 첨가해야 하는 것은 아니지만, 그래야 설명하기가 제일 쉽습니다.

다음 항목으로 가실 준비가 되셨군요.


2.5.5. 컴파일을 하세요.

이제 큐메일을 컴파일을 시작하셔도 됩니다.

컴파일환경을 검증한다항목에서, C 컴파일러를 지정하셨습니다. 그것이 cc가 아니거나 디렉토리가 PATH환경변수에 있지 않으면 conf-cc와 conf-ld를 편집하십시오. 컴파일러가 gcc이고, PATH에 있다고 하면, conf-cc와 conf-ld를 가볍게 편집하고, cc를 gcc로 바꾸십시오.

그렇게 하셨으면 명령행 프롬트에 다음과 같이 하세요.

make setup check

컴파일이 끝나면, 설치후설정을 하셔야 합니다. 이 일을 쉽게 해주는 스크립트가 두어개 있습니다.

DNS가 제대로 설정되었다면, 다음 스크립트를 실행하기만 하면 됩니다.

./config

어떤 이유로 config가 DNS에서 hostname을 찾지 못하면, config-fast script를 실행하셔야 합니다.

./config-fast 호스트네임.완전.경로

예를 들면, 도메인이 example.com이고, 당신컴퓨터의 호스트네임이 dolphin이라면, config-fast를 다음과 같이 실행합니다.

./config-fast dolphin.example.com

-------------------------------------------------------------

역자주: 공인아이피주소가 있는 분들은 위의 config만으로 되겠지만, 전화선을 이용한 다이얼업사용자나 요즘 활발한 케이블모뎀이나 ADSL모뎀 등을 이용하여 유동아이피를 이용하시는 분들은 config-fast를 이용하시면 됩니다. 우선 config-fast localhost.localdomain 으로 설치하신 다음에 나중에 설명하는 /var/qmail/control에 있는 locals, me, rcpthost, virtualdomains 등에 원하시는 적절한 도메인네임을 적으면 유동아이피사용자가 동적디엔에스를 이용해서 외부에 연결되는 이메일서버를 만들 수 있습니다.

-------------------------------------------------------------

큐메일이 시스템에 설치되어서 가동될 준비가 되었습니다! 다음항목은 큐메일을 가동하고 시험하는 단계를 안내합니다.


2.6. ucspi-tcp를 설치합니다.

먼저번에 qmail, ucspi-tcp, daemontools 타볼을 풀었습니다. 예제에서 그것들을 /usr/local/src/qmail에 풀었습니다. 자 ucpsi-tcp디렉토리로 옮깁시다.

cd /usr/local/src/qmail/ucspi-tcp-0.88

'컴파일을 하세요'항목에서, conf-cc와 conf-ld를 고치셨으면, 이 디렉토리에서도 똑같이 해줍니다.

그런뒤에 다음과 같이 하십시오.

make
make setup check
이것뿐입니다. ucspi-tcp가 설치되었습니다.


2.7. daemontools를 설치합니다.

daemontools 컴파일디렉토리로 이통합니다.

cd /usr/local/src/qmail/daemontools-0.76

또 한번, conf-cc와 conf-ld를 qmail과 ucspi-tcp 컴파일시 고쳤으면, 이 디렉토리에서도 똑같이 합니다.

그리고 다음과 같이 합니다.

package/install

(/etc/inittab이 없는) BSD시스템들에서는 여기서 리붓을 해서 주서비스통제데몬인 svscan을 시동해야 합니다.

"ps -ef | grep svscan" 또는 "ps waux |grep svscan" 을 하셔서 svscan이 작동하는 지 살펴보세요.


2.8. 큐메일을 가동합니다.

2.8.1. /var/qmail/rc

/var/qmail/boot디렉토리에는 여러가지 설정에 대한 본보기 큐메일 붓 스크립트가 있습니다. /var/spool/mail 대신 $HOME/Mailbox, procmail 또는 dot-forward를 이용하기, 그리고 이것들의 다양한 결합. 한번 부담없이 검토해보시기 바랍니다. 우리는 설치를 위해서 다음을 이용하겠습니다.:

#!/bin/sh

# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"

에디터로 위의 내용을 /var/qmail/rc로 만드시고, 다음과 같이 명령합니다.

chmod 755 /var/qmail/rc
mkdir /var/log/qmail

이쯤에서, .qmail파일이 전달하지 못하는 메세지들에 대한 기본전달모드를 결정해야 합니다. 다음의 테이블에 몇가지 공통선택이 간략히 예시되어 있습니다.

표 3. 공통선택사항

Mailbox format Name Location defaultdelivery Comments
mbox Mailbox $HOME ./Mailbox 가장많이쓰이고, 대부분의 MUA가 지원함
maildir Maildir $HOME ./Maildir/ 신뢰도가 높지만, 지원하는 MUA가 적음
mbox username /var/spool/mail See INSTALL.vsm 전통유닉스메일복스

정보를 더 원하시면 INSTALL.mbox, INSTALL.maildir, INSTALL.vsm 등을 보십시오.

기본 메일복스 형태를 고르시려면, 위의 테이블의 defaultdelivery 값을 /var/qmail/control/defaultdelivery에 적어넣으십시오.

예) 표준 큐메일 Mailbox 전달을 선택하시려면 다음과 같이 합니다.

echo ./Mailbox >/var/qmail/control/defaultdelivery

-------------------------------------------------------------

유의점: defaultdelivery는 표준 큐메일 통제 파일이 아닙니다. 위의 /var/qmail/rc파일의 특징입니다.

-------------------------------------------------------------

-------------------------------------------------------------

역자주: 위에서 표준 큐메일 Mailbox라 함은, 큐메일배포판에 있는 설정파일에는 Mailbox가 기본사항으로 되있기 때문입니다. maildir를 사용하시려면 다음과 같이 하십시오.

echo ./Maildir/ >/var/qmail/control/defaultdelivery

그리고 사용자마다, 또는 시스템애드민이 대신, 다음과 같이해서 사용자홈디렉토리에 Maildir를 만듭니다.

/var/qmail/bin/maildirmake $HOME/Maildir
echo ./Maildir/ > ~/.qmail

큐메일 설치가 다 끝나고, 시스템이 맘에 들면, 다음과 같이 해서 사용자를 새로 등록할 때마다 자동으로 그 사용자 홈에 Maildir가 만들어지게 합니다.

/var/qmail/bin/maildirmake /etc/skel/Maildir
echo ./Maildir/ > /etc/skel/.qmail

-------------------------------------------------------------


2.8.2. 시스템 기동 파일

2.8.2.1. qmailctl 스크립트

-------------------------------------------------------------

역자주: 설치과정이 좀 헛갈릴까봐 또는 복잡해보이는 분들을 위해서 설명하겠습니다. 지금까지 해서 큐메일 기본설치는 다 되었습니다. 이제부터는 큐메일을 기동, 유지, 운영하는 설정을 하는데, 그 중심파일이 바로다음의 qmailctl 파일입니다. qmailctl에서 다루는 tcpserver, svc, tcprules 등의 명령어 사용법을 눈여겨 보시면 도움이 많이 되겠습니다.

-------------------------------------------------------------

/var/qmail/rc 스크립트를 수동으로 실행하셔야 하면, 큐메일은 부분가동합니다. 그러나, 우리는 큐메일이 시스템이 부팅할때마다 자동으로 가동하기를 원하고, 시스템이 정지할 때는 깨끗하게 꺼지기를 원합니다.

이것은 startup/shutdown스크립트를 다음과 같이 작성하면 됩니다.

#!/bin/sh
# For Red Hat chkconfig
# chkconfig: - 30 80
# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH


QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`

case "$1" in
start)
echo "Starting qmail"
if svok /service/qmail-send ; then
svc -u /service/qmail-send
else
echo qmail-send service not running
fi
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd
else
echo qmail-smtpd service not running
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo "	qmail-smtpd"
svc -d /service/qmail-smtpd
echo "	qmail-send"
svc -d /service/qmail-send
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Sending ALRM signal to qmail-send."
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
echo "Reloaded /etc/tcp.smtp."
;;
help)
cat << HELP
stop -- stops mail service (smtp connections refused, nothing goes out)
start -- starts mail service (smtp connection accepted, mail can go out)
pause -- temporarily stops mail service (connections accepted, nothing leaves)
cont -- continues paused mail service
stat -- displays status of mail service
cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
flush -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
exit 1
;;
esac

exit 0

이 스크립트는 http://www.lifewithqmail.org/qmailctl-script-dt70에서도 구할 수 있습니다.

에디터로 스크립트를 만들거나 웹브라우저로 다운로드 (권장사항)해서 시스템의 init.d 디렉토리에 설치하는 과정을 설명하겠습니다.

우선, 다음같이 해서 /var/qmail/bin/qmailctl 로 만듭니다.

에디터를 이용해서 직접 스크립트를 만들 때:

 
 vi /var/qmail/bin/qmailctl 
다운로드받아서 옮길 때:
 
 cp ~/qmailctl-script-dt70 /var/qmail/bin/qmailctl 

다음으론, 시스템의 init.d디렉토리에 설치하시는데, 다음과 같은 장소가 됩니다.

  • /etc/init.d

  • /sbin/init.d

  • /etc/rc.d/init.d

해당 rc 디렉토리가 /etc/init.d라고 하면 다음과 같이 합니다.

ln -s /var/qmail/bin/qmailctl /etc/init.d/qmail

모든 시스템이 다음을 행하여 qmailctl 스크립트를 실행가능하게 하고, path에 연결합니다.

chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin

다음에는 스크립트를 몇개의 rc디렉토리에 링크시키셔야 합니다. 이 데렉토리들은 rcN.d같이 되어있는데, N은 적용 runlevel입니다. 기동디렉토리 구조가 복잡해서 본 문서에는 다루지 않습니다. 그러니 간단한 지시사항이 맘에 차지 않으시면 시스템문서를 참조하십시오. rc 디렉토리는 다음중 하나일 겁니다.

  • /etc

  • /sbin

  • /etc/rc.d

링크를 만드시는데, 다음과 같이 하십시오. RCDIR를 시스템의 rc 디렉토리의 장소로 바꾸십시오.

ln -s ../init.d/qmail RCDIR/rc0.d/K30qmail
ln -s ../init.d/qmail RCDIR/rc1.d/K30qmail
ln -s ../init.d/qmail RCDIR/rc2.d/S80qmail
ln -s ../init.d/qmail RCDIR/rc4.d/S80qmail
ln -s ../init.d/qmail RCDIR/rc5.d/S80qmail
ln -s ../init.d/qmail RCDIR/rc6.d/K80qmail

-------------------------------------------------------------

역자주: 데비안사용자들은 위와 같이 일일히 링크를 직접 만들 지 않고, 다음의 명령으로 한번에 할 수 있습니다.

update-rc.d qmail defaults
그리고, 데비안사용자들중에서 exim을 사용하시는 분이 계신다면, 다음과 같이 exim의 링크를 없애고, exim도 지웁니다.
update-rc.d -f exim remove
rm /etc/init.d/exim
이것으로 exim과는 이별입니다.

-------------------------------------------------------------

-------------------------------------------------------------

유의점: 전단계의 숫자는 매우 시스템에 의존합니다. 그렇지만 다소 유연합니다. Sendmail이 현재 설치되어 있으면, "find RCDIR -name "*sendmail" -print" 명령을 실행하면 시스템에 적용할 수 있는 숫자를 알려줍니다.

-------------------------------------------------------------

-------------------------------------------------------------

역자주: 원문의 qmailctl 설치순서가 좀 헛갈려서 제가 조정하였습니다. 원문대조후 또는 설치후에 다른 의견이 있으시면 알려주십시오.

-------------------------------------------------------------


2.8.2.2. 감독 스크립트들

이제 큐메일서비스를 위해 감독디렉토리를 만드십시오.

mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
chmod +t /var/qmail/supervise/qmail-send
chmod +t /var/qmail/supervise/qmail-smtpd

/var/qmail/supervise/qmail-send/run파일을 만드십시오.

#!/bin/sh
exec /var/qmail/rc

/var/qmail/supervise/qmail-send/log/run파일을 만드십시오.

#!/bin/sh
 exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail

/var/qmail/supervise/qmail-smtpd/run파일을 만드십시오.

#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -l 0 -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
   -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

-------------------------------------------------------------

유의점: concurrencyincoming은 표준큐메일통제파일이 아니고, 위의 스크립트의 특징입니다.

-------------------------------------------------------------

-------------------------------------------------------------

유의점: Solaris에서는 id 프로그램이 이 스크립트하고 다르므로, /usr/xpg4/bin/id 만 써서 다음과 같이 적어 넣습니다.

QMAILDUID=`/usr/xpg4/bin/id -u qmaild`
NOFILESGID=`/usr/xpg4/bin/id -g qmaild` 

-------------------------------------------------------------

-------------------------------------------------------------

유의점: softlimit 명령에서 정한 메모리한계는 운영체제와 하드웨어 플랫폼에 따라서 더 높여야만 할 수도 있습니다. 25번 포트에 접근하지 못하거나, 원격시스템으로부터 이메일을 못받으면 3000000 이나 4000000 으로 높여 보세요.

-------------------------------------------------------------

concurrencyincoming 파일을 다음과 같이 만듭니다.

echo 20 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming

/var/qmail/supervise/qmail-smtpd/log/run파일을 만드십시오.

#!/bin/sh
 exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd

run파일들에 실행가능을 부여합니다.

chmod 755 /var/qmail/supervise/qmail-send/run	   
chmod 755 /var/qmail/supervise/qmail-send/log/run 
chmod 755 /var/qmail/supervise/qmail-smtpd/run    
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

그런 다음에, 로그디렉토리를 만듭니다.

mkdir -p /var/log/qmail/smtpd					 
chown qmaill /var/log/qmail /var/log/qmail/smtpd

끝으로, 감독디렉토리들을 /service로 연결합니다.

ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service

-------------------------------------------------------------

유의점: 이렇게 연결들을 하고 나면 큐메일시스템이 자동실행됩니다. 아직 가동하고 싶지 않으면, 다음과 같이 하세요.

qmailctl stop

-------------------------------------------------------------


2.8.2.3. SMTP 접근 프로토콜

로컬호스트가 SMTP를 통해서 메일을 삽입 (inject)하도록 합니다.

echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp	
qmailctl cdb


2.8.3. 기존에 설치된 MTA를 멈추고 무력하게 합니다.

큐메일과 현존하는 MTA, 대개 Sendmail, 두개를 사용할 수도 있지만, 그렇게 하지 않을 것을 강력히 권고합니다. 그리고, 솔직히 말해서, 이 글을 읽고 계신다면, 그게 무엇을 뜻하는 지 모르실 겁니다. :-)

현존 MTA가 Sendmail이라면, init.d 스크립트를 stop인수를 주어 실행하여 멈출 수 있습니다. 예) 다음 중 하나가 유효할 겁니다.

/etc/init.d/sendmail stop	   
/sbin/init.d/sendmail stop    
/etc/rc.d/init.d/sendmail stop

init.d/sendmail 스크립트를 찾을 수 없다면, "ps -ef|grep sendmail" 또는 "ps waux|grep sendmail"을 사용해서 sendmail의 PID를 알아낸 뒤에, 다음과 같이 해서 멈춥니다.

kill PID-of-sendmail

MTA가 Sendmail이 아니면, 해당문서에서 바른 멈춤 절차를 참고하십시오.

-------------------------------------------------------------

역자주: 데비안사용자, 그중에서도 exim을 사용하신다면, /etc/inetd.conf에서 exim을 찾아서 그 줄의 맨앞에 #표시를 하여 주석처리하고, /etc/init.d/의 exim을 없애야 합니다.

-------------------------------------------------------------

시스템에서 기존의 MTA를 완전히 제거하는 것도 고려해볼 만합니다. 적어도 init.d 스크립트를 무력하게 하면 시스템이 재부팅할 때 다시는 가동하지 않습니다.

레드햇리눅스에서는 다음과 같이 해서 Sendmail을 제거합니다.

rpm -e --nodeps sendmail

끝으로, 기존의 /usr/lib/sendmail을 큐메일판으로 바꿉니다.

mv /usr/lib/sendmail /usr/lib/sendmail.old                # 에러를 무시하세요
mv /usr/sbin/sendmail /usr/sbin/sendmail.old             # 에러를 무시하세요
chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old     # 에러를 무시하세요
ln -s /var/qmail/bin/sendmail /usr/lib 
ln -s /var/qmail/bin/sendmail /usr/sbin 

-------------------------------------------------------------

유의점: 기존하는 sendmail이 있던 없던 sendmail 연결을 만들어야 합니다. 많은 응용프로그램들이 sendmail을 이용해서 이메일을 보내려고 하기 때문입니다.

-------------------------------------------------------------

끝단계는 시스템앨리어스를 두어개 만드는 것입니다.


2.8.4. 시스템앨리어스를 만듭니다.

모든 큐메일설치에서는 시스템앨리어스를 세개 만들어야 합니다.

표 4. 앨리어스들

앨리어스 목적
postmaster RFC2821 요구사항이며, 메일애드민 (당신)을 가리킵니다.
mailer-daemon 바운스메일에 대한 사실상의 표준수취인
root 특권계정에서 온 메일을 시스템애드민에게 보낸다.

이 앨리어스들을 만들려면, 그것들 하나하나가 어디에 놓여져야 하는 지 (로컬사용자, 또는 원격주소) 결정하고, .qmail파일을 만들어서 갖다놓으면 됩니다. 예를 들어, 로컬사용자 dave는 시스템과 메일의 애드민이라고 하면 다음과 같이 합니다.

echo dave > /var/qmail/alias/.qmail-root 
echo dave > /var/qmail/alias/.qmail-postmaster 
ln -s /var/qmail/alias/.qmail-postmaster
/var/qmail/alias/.qmail-mailer-daemon 
chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster

INSTALL.alias에서 더 자세하게 보세요.


2.8.5. 큐메일을 가동합니다.

/service에 링크들을 만든 다음에 큐메일의 가동을 중지시켰다면, 지금 다시 가동시켜야 합니다.

qmailctl start


2.9. 설치를 시험합니다.

큐메일이 지금쯤 운행하고 있을겁니다. TEST.deliver, TEST.receive에 있는 지시사항을 따르면 제대로 작동하고 있는 지 검사할 수 있습니다. 이들 지시사항을 이용하면, 로그는 splogger가 아닌 multilog가 만든다는 것을 알아두십시오.

-------------------------------------------------------------

역자주: 처음 설치해보는 분들을 위해 daemontools의 동작방법을 간단히 설명드려서 큐메일의 운용상황을 파악하는데 도움이 되도록 하겠습니다.

daemontools가 동작하는 흐름을 한줄로 적으면 다음과 같습니다. /etc/inittab -> /command/svscanboot -> svscan -> supervise -> /service

daemontools를 설치하면, /etc/inittab에 /command/svscanboot를 적어 넣습니다. svscanboot 스크립트를 보면 svscan을 부르게 되어 있고, 이는 supervise를 불러서 /service 디렉토리에 작용하게 합니다. supervise는 /service내의 모든 디렉토리와 각 디렉토리 안의 log 디렉토리에 있는 run 파일을 실행합니다. 그리고 실행하는 디렉토리마다 supervise를 만들어서 여러 데이터를 적어놓고 svstat이 이용하도록 합니다.

-------------------------------------------------------------


3. 설정

권장 소스타볼 방법이나, 자동컴파일 패케지로부터 큐메일을 설치하셨습니다. 이번 항목에는 메일애드민이나 시스템애드민이 자기가 원하는 대로 큐메일을 운영하기 위해 큐메일을 설정하는 데 필요한 정보가 있습니다.


3.1. 설정파일

모든 큐메일 시스템설정파일은 ~alias에 있는 .qmail파일을 빼고는 모두 /var/qmail/control에 놓여져 있습니다. qmail-control 맨페지에는 다음과 같은 테이블이 있습니다.

표 5. 설정파일

Control Default Used by Purpose
badmailfrom none qmail-smtpd blacklisted From addresses
bouncefrom MAILER-DAEMON qmail-send username of bounce sender
bouncehost me qmail-send hostname of bounce sender
concurrencylocal 10 qmail-send max simultaneous local deliveries
concurrencyremote 20 qmail-send max simultaneous remote deliveries
defaultdomain me qmail-inject default domain name
defaulthost me qmail-inject default host name
databytes 0 qmail-smtpd max number of bytes in message (0 = no limit
doublebouncehost me qmail-send host name of double bounce sender
doublebounceto postmaster qmail-send user to receive double bounces
envnoathost me qmail-send default domain for addresses without "@"
helohost me qmail-remote host name used in SMTP HELO command
idhost me qmail-inject host name for Message-ID's
localiphost me qmail-smtpd name substituted for local IP address
locals me qmail-send domains that we deliver locally
me FQDN of system various default for many control files
morercpthosts none qmail-smtpd secondary rcpthosts database
percenthack none qmail-send domains that can use "%"-style relaying
plusdomain me qmail-inject domain substituted for trailing "+"
qmqpservers none qmail-qmqpc IP addresses of QMQP servers
queuelifetime 604800 qmail-send seconds a message can remain in queue
rcpthosts none qmail-smtpd domains that we accept mail for
smtpgreeting me qmail-smtpd SMTP greeting message
smtproutes none qmail-remote artificial SMTP routes
timeoutconnect 60 qmail-remote how long, in seconds, to wait for SMTP connection
timeoutremote 1200 qmail-remote how long, in seconds, to wait for remote server
timeoutsmtpd 1200 qmail-smtpd how long, in seconds, to wait for SMTP client
virtualdomains none qmail-send virtual domains and users

특정 컨트롤 파일에 대해 정보를 더 원하시면, "Used by"밑에 열거된 모듈에 해당하는 맨페지를 참조하십시오.


3.2. 릴레이

3.2.1. 소개서

릴레이는 무엇일까요? MTA가 SMTP를 통해서 메세지를 받아들이지만, 로컬주소로 오거나 또는 로컬송신자가 보내는 것이 아닐때를 말합니다.

스팸이전시대에는 MTA가 공개릴레이로 설정되는 것이 보통이었습니다. 송신자/수신자가 누구든 지 메일을 수용하는 무차별서버였습니다.

요즘의 MTA는 대개 릴레이를 금지하거나, 일정한 믿을만한 사용자나 시스템에게만 릴레이를 허용하고 있습니다.

Chris Johnson께서 큐메일사용자들을 위해 관련사항에 대한 매우 좋은 문서를 작성하셨으니까 꼭 보십시요.


3.2.2. 릴레이 금지

공식 큐메일설치지시사항을 따르면 릴레이는 기본이 안되게 되어있습니다. locals와 virtualdomains에 있는 도메인 네임들에 있는 완전 도메인네임들을 /var/qmail/control/rcpthosts파일에 적기 때문입니다. rcpthosts통제파일이름은 SMTP RCPT (수신자) 명령어에서 유래합니다. SMTP 세션에서 RCPT는 메세지수신인의 주소를 밝히는 데 씁니다. 그래서 rcpthosts에는 RCPT 주소에 나타나는 유효한 호스트네임을 열거합니다.


3.2.3. 릴레이허용자를 고르기

대부분의 단일사용자와 소규모 서버는 릴레이를 완전히 금지할 수 있지만, 분산된 사용자 공동체를 지원하려면 그 사용자에게만은 릴레이용으로 서버를 이용하게 할 수 있는 방법이 필요합니다. 이것은 tcpserver로 RELAYCLIENT환경변수를 정해서 qmail-smtpd에게 rcpthosts 파일을 무시하도록 하면 됩니다.

본문서의 설치지시사항을 따르면, 선택릴레이를 기본방침으로 하겠습니다. 클라이언트에게 릴레이접근권한을 주려면 /etc/tcp.smtp에 다음을 첨가하십시오.

 IP address of client:allow,RELAYCLIENT=""

그리고나서 SMTP 접근권한 데이터베이스를 재컴파일하십시오.

qmailctl cdb

또는 

tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp	
chmod 644 /etc/tcp.smtp*

공식설치지시사항을 따랐다면, Chris Johnson이 큐메일이 특정호스트에게만 릴레이를 허용하도록 설정하는 방법을 적으셨으니 http://www.palomine.net/qmail/selectiverelay.html를 참고하도록 하십시오.


3.3. 다중 호스트네임

한 호스트의 이름이 둘 이상이면, 예를 들어서 user@host1.example을 user@example.com이나 user@mail.example.com 등으로 적을 수 있다면, 큐메일에 이런 내용을 알려서 어떤 주소를 내부로 전달할 지, 원격시스템에서 어떤 메세지를 받을 지 등을 알게 합니다.

그렇게 하려면, 통제파일 두 개에 모든 이름을 첨가하기만 하면 됩니다.

  • rcpthosts: qmail-smtpd에게 이들 호스트로 주소를 가진 메일을 받아들이게 합니다.

  • locals: qmail-send에게 이들 호스트의 주소는 내부로 전달되게 합니다.


3.4. 버츄얼도메인

버츄얼도메인은 전항목에서 말씀드린 다중호스트네임과 비슷합니다만, 중요한 차이점이 몇 개 있습니다. 첫째로, example.net에 virtual.example.com이라는 버츄얼도메인이 있다면, joe@example.net에게 보낸 메세지는 joe@virturl.example.com으로 보낸 메제지와 같은 메일복스에서 끝나지 않아야 합니다. 버추얼도메인에 대한 이름영역(namespace)은 다릅니다.

큐메일에서 버츄얼도메인은 virtualdomains파일에 설정되는데, 다음형식으로 하나 또는 그 이상을 적습니다.

user@domain:prepend 

-------------------------------------------------------------

역자주: 여기서 prepend는 virtual domain으로 오는 이메일을 관리하는 로컬머신의 사용자 아이디를 말합니다.

-------------------------------------------------------------

큐메일은 user@domain을 prepend-user@domain으로 바꾸고, domain이 로컬인 것처럼 그 결과를 취급합니다. user@부분은 선택입니다. 생략하면, @domain의 주소 모두에 해당합니다.

위의 example씨나리오를 다시 보면, example.net의 메일애드민이 john이라는 사용자의 관리하에 virtual.example.com이라는 버츄얼도메인을 만들기 위해서는 virtualdomains에 다음과 같이 써넣어야 합니다.

virtual.example.com:john

joe@virtual.example.com로 들어오는 메세지는 john-joe@virtual.example.com으로 써지고, 내부에서 전달됩니다. john이 어떻게 버츄얼도메인을 관리하는 지 .qmail항목주소연장 부항목을 보시기 바랍니다.

-------------------------------------------------------------

역자주: .qmail파일을 만들어보겠습니다.

# /var/qmail/bin/maildirmake /home/john/JOEMAILDIR 
# echo "/home/john/JOEMAILDIR/" > /home/john/.qmail-joe

-------------------------------------------------------------

다중호스트네임과 같이 모든 버츄얼도메인은 rcpthosts에 리스트되어서 qmail-smtpd가 그 주소로 된 메세지들을 받아들이게 합니다. 그렇지만, 다중호스트네임과 틀린점은 버츄얼도메인을 locals에 첨가해서는 안됩니다

-------------------------------------------------------------

역자주: 버츄얼도메인을 virtualdomains에 넣어야만 joe@virtual.example.com이라는 주소에서 joe만을 쓸 수 있습니다. 만약, locals에 버츄얼도메인을 넣으면, 그 주소는 john-joe@virtual.example.com 처럼 john-joe라는 주소를 써야만 이메일주소로 유효하게됩니다.

-------------------------------------------------------------

-------------------------------------------------------------

유의점: DNS의 MX기록은 버츄얼도메인으로 가는 메세지를 적절한 메일서버로 돌리도록 설치되어야 합니다. 이것은 네임서버애드민이 할일이고, 본 가이드의 범위를 벗어납니다.

-------------------------------------------------------------

-------------------------------------------------------------

역자주: 고정연결모뎀(케블모뎀, ADSL, 또는 일반 모뎀 등)으로 인터넷에 연결하고, dynamic dns 서비스를 이용하여, 유동아이피이지만 공인도메인에 연결하여 사용하는 경우, 서버의 호스트네임을 공인도메인네임으로 정하면 이메일이 서버로 직접들어옵니다. 호스트네임과 도메인네임이 다르면 다중호스트네임이나 버츄얼도메인의 설명대로 하면 됩니다. 케블모뎀이나 ADSL모뎀을 이용하시는 분들이 요즘 많습니다. 이 방법대로 하면 외부 이메일서버에 의존하지 않아도 되고, 또한 자신이 남에게 이메일계정을 만들어주거나 메일링리스트를 운영할 수도 있습니다.

-------------------------------------------------------------


3.5. 앨리어스

큐메일에서 로컬전달기술이 표준앨리어스기술로 자연히 발전했습니다. qmail-local은 localpart@host을 주소로 하는 메세지를 localpart라는 이름의 로컬사용자에게 전달하려고 합니다. 맞는 사용자가 없으면 메세지는 전체 큐메일시스템에서 /var/qmail/alias가 홈디렉토리이고 사이비사용자인 앨리어스 사용자에게 전달됩니다.

예를 들어 메세지를 tom에게 회송하는 info@example.com 앨리어스를 만들고자 한다고 합시다. example.com에서 룻사용자로서 다음과 같이 합니다.

 echo tom > /var/qmail/alias/.qmail-info

.qmail항목주소연장부항목에서 앨리어스를 지정하는 .qmail파일을 어떻게 만들고, 전달되는 메세지로 무엇을 해야 하는 지 설명합니다.

큐메일에서 앨리어스가 실행되는 방식때문에 앨리어스가 정당한 사용자 전달을 무시할 수는 없다는 것을 유의하십시오. 예) rachel이 정상 사용자라면 ~alias/.qmail-rachel 은 안됩니다.

fastforward패케지는 Sendmail의 앨리어스 데이터베이스와 호환하는, 단일파일에 다수앨리어스를 적는 대체가능 앨리어스기술을 제공합니다.

다음의 qmail-users항목에서 앨리어스를 실행할 수 있는 다른 기술을 설명합니다.


3.6. qmail-users

qmail-users는 사용자에게 주소를 배정하는(나눠주는, 부여하는) 시스템입니다. 설정파일들이 /var/qmail/users/에 놓입니다. assign은 곧 할당테이블입니다. 단순배정과 wildcard 방법 등 두 종류의 할당이 있습니다.

-------------------------------------------------------------

유의점: 한 줄에 하나씩 적고, 마지막줄에는 마침표를 한개만 적습니다. 이 파일을 수동으로 만드시면 마침표줄을 잊지 마십시오.

-------------------------------------------------------------


3.6.1. 단순배정

단순배정은 다음과 같습니다.

 =address:user:uid:gid:directory:dash:extension:

address로 받은 메세지는 지정 uid와 gid를 지니고 user사용자로 작동하는데, directory/.qmaildashextension파일에 메세지를 어떻게 전달해야 하는 지를 규정한다는 뜻입니다.


3.6.2. 와일드카드 배정

와일드카드 배정은 다음과 같습니다.

 +prefix:user:uid:gid:directory:dash:prepend:

prefix형식의 주소로 수신된 메세지는 지정 Uid와 gid를 지니고 user사용자로 작동하는데, directory/.qmaildashprepend파일에 메세지를 어떻게 전달해야 하는 지를 규정한다는 뜻입니다.


3.6.3. qmail-user 프로그램들

qmail-user에는 도우미 프로그램이 두 개 있는데, qmail-newu와 qmail-pw2u입니다.

qmail-newu는 assign파일을 처리해서 /var/qmail/users에 cdb라는 contstant 데이터베이스(CDB)파일을 만듦니다. CDB는 바이너리 형식이라서 배정이 수천개라도 qmail-lspawn이 매우 빨리 접근합니다.

qmail-pw2u는 시스템사용자데이터베이스인 /etc/passwd를 assign에 적합한 배정으로 변환합니다. qmail-pw2u는 변환규칙을 고치는데 파일 몇개를 사용합니다.

  • include: 포함할 사용자

  • exclude: 제외할 사용자

  • mailnames: 사용자에 대한 대체 mailnames

  • subusers: 사용자가 처리하는 가외주소로서 .qmail확장은 선택사항입니다.

  • append: 여러가지 할당

-------------------------------------------------------------

유의점: qmail-pw2u를 사용하면, 사용자를 추가, 삭제하거나 UID나 GID를 바꿀 때마다 qmail-pw2u와 qmail-newu를 재가동하셔야 합니다. 보통 다음과 같이 합니다.

 qmail-pw2u < /etc/passwd > /var/qmail/users/assign
 qmail-newu

-------------------------------------------------------------


3.7. 스팸통제

Chris Hardie께서 훌륭한 큐메일반스팸HOWTO을 쓰셨습니다.


4. 사용법

이 항목에서는 보통사용자가 큐메일을 사용하는 법을 다룹니다. 큐메일시스템에서 메일을 읽거나 보낸다면, 어떻게 큐메일을 이용하는 지를 여기서 알게 됩니다.


4.1. .qmail파일들

사용자메일의 전달은 대개 하나 이상의 (dot kyoo mail 로 발음하는) .qmail파일들이 통제하는데, 이것들은 사용자 홈디렉토리에 .qmail로 시작하는 이름으로 되어있습니다. dot-qmail맨페지에 .qmail파일 사용법을 설명해 놓았습니다.

.qmail파일에는 전달지시사항이 한 줄에 하나씩 들어있습니다. 줄의 처음문자는 전달방법을 결정합니다.

표 6. 전달지시사항

문자 전달형태
# 없음 (코멘트) 무시
| 프로그램 셸이 실행할 명령어
/ 또는 . mbox (마지막글자가 /이 아니면) mbox 경로 (/나 .를 포함)
/ 또는 . maildir (마지막 글자가 /이면) maildir 경로 (/나 .를 포함)
& 포워드 메세지를 포워드할 주소
글자 또는 숫자 포워드 메세지를 포워드할 주소 (첫글자를 포함)

4.1.1. 프로그램전달

프로그램전달지시를 만나면 큐메일은 셸(/bin/sh)을 가동해서 명령을 실행하는데, 들어오는 메세지를 복사해서 명령에 표준입력으로 넣습니다. qmail-command맨페지에 이 절차를 자세히 설명해 놓았습니다.

프로그램전달은 매우 강력하고 매우 넓은 기능을 구현할 수 있는데, 메세지필터링, 메세지에 자동으로 답하기, procmail 과 같은 제3자 전달자를 통해 전달하는 것등입니다.

예)

|preline /usr/ucb/vacation djb

이렇게 하면 큐메일은 preline을 가동해서 /usr/ucb/vacation과 djb를 인수로 주고, 메세지복사본을 표준입력으로 제공합니다.


4.1.2. mbox 전달

Mbox는 표준유닉스메일복스형태를 큐메일식으로 부르는 말로서 여러메세지를 단일파일에 저장하고, 메세지에는 "From "줄이 머리에 있습니다. 이 줄은 헤더필드같이 보이지만 아닙니다. 이것은 다만 전달자가 첨가해서 이메일클라이언트에게 해당메세지가 시작하는 곳을 알게할 뿐입니다.

예:

./Mailbox

이렇게 하면 "From "줄을 앞에 붙여서 $HOME/Mailbox에 추가합니다. 단일 메세지를 보유한 간단한 mbox메일복스는 다음과 같습니다.

From user1@example.net Thu May 13 18:34:50 1999 
Received: (qmail 1287205 invoked from network); 13 May 1999 18:34:49 -0000  
From: user1@example.net
To: user2@example.com
Subject: hey

What's up?

첫줄은 큐메일이 전달하면서 첨가한 것입니다.


4.1.3. maildir 전달

"Maildir"는 Dan Bernstein이 mbox형태의 결점을 알리려고 만든 메일복스형태로서, maildir메일복스는 디렉토리로서 여기에는 섭디렉토리가 세개 있는데, new, cur, tmp 등입니다. maildir메일복스에 있는 각 메세지는 상태에 따라 부디렉토리중 하나에 별개파일로 되어있는데, new는 읽지 않은 메세지가, cur는 읽은 메세지가, tmp는 전달중인 메세지가 들어 있습니다. maildir맨페지에 maildir형식에 대해 자세히 설명하였습니다.

maildir의 이점중 하나는 다른 전달자가 동시에 업데이트하는 것을 막기위해 하는 록킹을 사용하지 않아도 확실합니다. 이것은 maildir메일복스는 NFS를 마운트한 파일시스템에서 안전하게 사용할 수 있다는 것을 뜻합니다.

예:

./Maildir/

이것은 메세지를 maildir형태의 메일복스인 $HOME/Maildir에 저장합니다.

-------------------------------------------------------------

유의점: qmial-local은 maildir메일복스로 메일을 전달하지만 메일복스를 만들지는 못합니다. maildir메일복스는 큐메일과 같이 제공하는 maildirmake프로그램으로 만듭니다.

 
maildirmake ~/Maildir
maildirmake는 maildir의 소유자가 실행해야지 룻이 하지 않습니다. useradd 또는 adduser 명령이 "skeleton"디렉토리를 지원한다면 (대개 /etc/skel), 거기에 maildir를 만들면 새 사용자들에게 자동으로 만들어집니다.

-------------------------------------------------------------


4.1.4. 포워드 전달

포워드전달은 명시주소로 메세지를 다시보냅니다. .qmail파일에 명시한 주소는 완전자격이어야 하며, 커멘트필드와 여백이 없어야 합니다.

다음은 틀렸습니다.

&<user@example.com>			  
& user@example.com 			
&Joe User <user@example.com>   

다음과 같이 해야합니다.

& user@example.com 	 
user@example.com		
&user							

처음 두개는 user@example.com이 메세지사본을 받도록 하고, 남은 한개는 로컬유저인 user에게 사본을 보냅니다.


4.1.5. 연장주소

큐메일에서는 사용자통제 연장주소를 지원합니다. 기본주소인 username@hostname.domain외에 사용자는 username-extension@hostname.domain으로 메일을 받을 수 있습니다. 우리는 지금 로컬시스템에서 일어나는 행동을 고려하고 있으므로, 앞으로 이번 항목에서는 "@hostname.domain"부분은 적지 않겠습니다.

username-extension에 대한 전달지시사항은 ~username/.qmail-extension에 있습니다.

예를 들면, dave-lwq@sparge.example.com은 sparge호스트에 있는 ~dave/.qmail-lwq가 통제합니다.

연장은 복수필드로 될 수 있습니다. 예를 들면 dave-list-qmail인데, ~dave/.qmail-list-qmail이 통제합니다. 이번 예에서 dave-list-qmail은 큐메일 메일링리스트에 가입했고, ~dave/.qmail-list-qmail은 리스트메세지를 별도의 메일복스에 파일보관하도록 지시합니다.

. qmail파일들은 -default를 와일드카드로 씁니다. 그래서 dave-list-qmail은 ~/.qmail-list-default로도 처리할 수 있습니다. 이렇게 하면 모든 dave-list-whatever주소들을 다루는데 있어서 .qmail파일은 하나만 있어도 족합니다. 그러나 dave-list는 ~dave/.qmail-list-default가 통제하지 못하는데, list다음에 "-"이 없기 때문임을 유의하십시오.

큐메일은 찾는 것중에서 제일 가까운 것을 씁니다. 예를 들어서, dave-list-qmail의 주소로 메세지가 왔다면, 다음과 같이 찾은 것중에서 첫번째것을 씁니다.

  • .qmail-list-qmail

  • .qmail-list-default

  • .qmail-default

일치하는 .qmail파일이 없으면 전달은 실패하고 메세지는 보낸이에게 되돌려집니다.


4.2. 메세지 보내기

메일사용자는 메세지를 보내는 데 있어서 MTA를 보통 직접 사용하지 않습니다. 대체로 Mail User Agent (MUA)인 pine이나 mutt 등을 써서 메세지를 작성하고 보내는데, MUA는 MTA를 호출해서 메세지를 전달합니다. MTA로 메세지를 건네주는 처리과정을 injection이라고 합니다.

대부분의 MTA로 메세지를 inject하는 방법에는 두 가지가 있습니다. Simple Mail Transfer Protocol (SMTP)과 이 목적으로 MTA가 제공하는 프로그램을 이용하는 것입니다.


4.2.1. SMTP

MUA는 로컬호스트나 지정한 메일서버에 있는 표준 SMTP포트인 25번 포트로 TCP 연결을 엽니다. 그 다음, MUA와 MTA는 다음과 같이 끝나는 대화중 하나를 합니다.

  • the message being transfered to the MTA, 또는

  • a error status being returned to the MUA

SMTP에는 인증장치가 없으므로 메세지를 보내는데 유저네임이나 패스워드가 필요없습니다. 그렇지만 많은 MTA는 로컬사용자가 보내거나 받는 것같지 않은 메세지를 거절합니다. 제대로된 메세지가 reject되면 릴레이제한이 그 원인일 경우가 제일 많습니다. 릴레이설정에 대한 정보는 릴레이항목을 보십시오.


4.2.2. /var/qmail/bin/sendmail

오랜 세월동안 Sendmail이 유닉스 MTA였습니다. 어느 곳에나 그것이 있었기에 많은 프로그래머들은 의례 그것이 MTA라고 여겼습니다. 그 결과, Sendmail의 로컬 인젝션 장치가 로컬메일인젝션에 대한 표준 Application Programmer's Interface (API)가 되었습니다. 큐메일과 기타 비Sendmail MTA는 sendmail프로그램을 공급해서 로컬인젝션에 대해서 진짜 Sendmail의 sendmail가 똑깥이 작동하도록 합니다.

큐메일의 sendmail은 보통 /var/qmail/bin/sendmail에 있는데, 대개 큐메일시스템에서 Sendmail의 sendmail을 대체합니다. 흔히 sendmail프로그램은 다음에 있습니다.

  • /usr/lib/sendmail

  • /usr/sbin/sendmail

큐메일시스템에서 "ls -l path-to-sendmail"하면 sendmail이 /var/qmail/bin/sendmail로 심볼릭링크되어있슴을 보여줍니다.

$ ls -l /usr/lib/sendmail
lrwxrwxrwx   1 root	 root			29 Feb 19 11:04 /usr/lib/sendmail \ 
 -> /var/qmail/bin/sendmail

큐메일과 같이 제공되는 sendmail 맨페지가 이 프로그램을 어떻게 사용하는 지 설명합니다.


4.2.3. qmail-inject

sendmail API외에 큐메일에는 qmail-inject라는 자체 인젝션프로그램이 있습니다. 사실 sendmail은 qmail-inject의 wrapper입니다.

API이지만 sendmail은 매우 널리 쓰이므로 더 나은 듯합니다. qmail-inject가 제공하는 큐메일 API는 큐메일을 설치한 시스템에서만 작동하지만, sendmail 인터페스는 거의 어디에나 있습니다.

예를 들면, joe@example.com에게 빈 메세지를 보내려면 다음과 같이 합니다.

echo To: joe@example.com | /var/qmail/bin/qmail-inject


4.3. 환경변수

큐메일프로그램이 환경변수를 정하거나 사용하기도 합니다. 다음의 테이블에 변수를 열거하고 사용법을 적었습니다.

표 7. 환경변수

변수명 해당 맨페지 설정 사용목적
DATABYTES qmail-smtpd used Overrides control/databytes Portion of address maching
DEFAULT qmail-command set "-default" in a .qmail file name
DTLINE qmail-command set Delivered-To header field
EXT qmail-command set The address extension
EXT2 qmail-command set Portion of EXT following first dash
EXT3 qmail-command set Portion of EXT following second dash
EXT4 qmail-command set Portion of EXT following third dash
HOME qmail-command set The user's home directory
HOST qmail-command set The domain part of the recipient address
HOST2 qmail-command set Portion of HOST preceding last dot
HOST3 qmail-command set Portion of HOST preceding second-to-last dot
HOST4 qmail-command set Portion of HOST preceding third-to-last dot
LOCAL qmail-command set The local part of the recipient address
LOGNAME qmail-inject used User name in From header field (4)
MAILHOST qmail-inject used Host name in From header field (2)
MAILNAME qmail-inject used Personal name in From header field (2)
MAILUSER qmail-inject used User name in From header field (2)
NAME qmail-inject used Personal name in From header field (3)
NEWSENDER qmail-command set Forwarding sender address (see "man dot-qmail")
QMAILDEFAULTDOMAIN qmail-inject used Overrides control/defaultdomain
QMAILDEFAULTHOST qmail-inject used Overrides control/defaulthost
QMAILHOST qmail-inject used Host name in From header field (1)
QMAILIDHOST qmail-inject used Overrides control/idhost
QMAILINJECT qmail-inject used Specify various options (see next table)
QMAILMFTFILE qmail-inject used File containing list of mailing list addresses for Mail-Followup-To generation
QMAILNAME qmail-inject used Personal name in From header field (1)
QMAILPLUSDOMAIN qmail-inject used Overrides control/plusdomain
QMAILSHOST qmail-inject used Host name in envelope sender address
QMAILSUSER qmail-inject used User name in envelope sender address
QMAILUSER qmail-inject used User name in From header field (1)
RECIPIENT qmail-command set Envelope recipient address
RELAYCLIENT qmail-smtpd used Ignore control/rcpthosts and append value torecipient address
RPLINE qmail-command set Return-Path header field
SENDER qmail-command set Envelope sender address
UFLINE qmail-command set UUCP-style "From" line
USER qmail-command set The current user
USER qmail-inject used User name in From header field (3)

표 8. QMAILINJECT Flags

Letter Purpose
c Use address-comment style for the From field
s Do not look at any incoming Return-Path field
f Delete any incoming From field
i Delete any incoming Message-ID field
r Use a per-recipient VERP
m Use a per-message VERP

5. 고급토픽

5.1. procmail

procmail은 많이 쓰는 Message Delivery Agent (MDA)입니다. MDA는 특정 사용자나 메일복스에 대한 메세지를 MTA로부터 받아서 사용자의 요구대로 전달합니다. procmail은 다양한 헤더필드내용이나 메세지본문에 따라서 메세지를 필터하는테 쓰이기도 합니다. 예를 들면, 특정인이 보낸 메세지를 그 사람의 메일복스에만 전달하도록 할 수 있습니다.

procmail을 큐메일과 함께 운영하는 방법이 두 가지 있습니다. 첫째는, procmail은 보통 /var/spool/mail에 있는 mbox메일복스로 전달하도록 컴파일됩니다. procmail을 다시 컴파일해서 $HOME를 기본으로 하도록 하거나, 사용자들에게 알려서 procmail이 mobx를 기본위치로 하지 않도록 합니다. $HOME전달에 대해 패치하지 않으면, 임시파일에 대해서 procmail은 여전히 /var/spool/mail을 씁니다.

문제가 하나 더 있는데, qmail-command와 procmail에는 어떤 엑싯코드가 무엇을 말하는 지에 대한 공통이해가 없습니다. procmail은 표준 유닉스 엑싯코드를 쓰는데, 0은 성공, 그외는 실패이며, 실패의 원인은 /usr/include/sys/errno.h에 정의되어 있습니다. qmail-command에서는 0이외의 일정한 숫자로 영구에러를 일러주고, 그 이외는 임시로 간주합니다. qmail-command에 대한 엑싯코드를 해석하기 위해서 소규모의 셸스크립트 wrapper를 만들 수도 있습니다. 이런 wrapper는 큐메일메일링리스트에 부처졌고, 다음주소의 문서보관에서 얻을 수 있습니다. http://www.ornl.gov/its/archives/mailing-lists/qmail/1998/04/msg00487.html

또한 procmail은 maildir형식의 메일복스로 직접 전달하지 않습니다. procmail에서 maildir로 직접전달하는 패치를 얻을 수 있습니다. (http://www.qmail.org/top.html#maildir를 보십시오.) 다른 방법에는 특정 maildir로 향하는 표준입력으로 메세지를 작성하는 프로그램인 safecat입니다. 사용자는 safe가 메세지를 파일처리하도록 procmail 비법 (전달지시사항)을 적을 수 있습니다. procmail을 아예 쓰지 말고 maildrop을 사용할 수도 있습니다.

끝으로 procmail은 메세지를 받을 때 mbox형식으로 인식합니다. 대개 큐메일프로그램의 전달에는 진짜 메일메세지만 포함하지 "From "줄이 없습니다. preline명령어를 써서 procmail이 인식하는 메세지형식으로 만들 수 있습니다.

예를 들면, dave사용자가 procmail로 메일을 처리하고 싶다고 합시다. 시스애드민이 procmail을 기본으로 $HOME로 전달하도록 컴파일했고, /usr/local/bin/qmail-procmail이라는 엑싯코드 wrapper를 제공한다고 할 때, .qmail파일은 다음과 같습니다.

|/usr/local/bin/qmail-procmail dave


5.2. POP 그리고 IMAP 서버

큐메일은 POP서버와 qmail-pop3d를 포함하지만, 큐메일설치과정으로 설정하거나 설치하지는 않습니다. 다른 POP나 IMAP 등의 서버를 얻을 수 있으면 그것들을 사용해도 되지만, 대부분이 Sendmail용으로 만들어졌으므로 큐메일과 함께 쓰려면 손을 봐야 합니다.


5.2.1. qmail-pop3d

qmail-pop3d는 큐메일이 포함하는 POP서버입니다. 매우 좋은 POP서버로서 여러 큐메일사이트가 사용합니다. 모듈기능이고, 대체인증모듈을 통해 복합인증구성을 지원합니다.

-------------------------------------------------------------

유의점: qmail-pop3d는 maildir형태의 메일복스만 지원하므로, 로컬 사용자들이 POP서버에 로긴해서 MUA를 운영한다면 모두들 maildir를 지원해야 합니다. 사용자들이 POP를 통해서 메일을 읽는다면 서버의 메일복스형태는 문제가 되지 않습니다.

-------------------------------------------------------------


5.2.1.1. qmail-pop3d의 구조

다음의 세모듈로 구성합니다.

  • qmail-popup : 사용자명과 암호를 받습니다.

  • checkpassword : 사용자명과 암호를 인증합니다.

  • qmail-pop3d : POP데몬입니다.

의례 qmail-popup은 POP3포트인 110번 포트를 듣는 inetd나 tcpserver로 움직입니다. 연결을 하면 사용자명과 암호를 대라고 합니다. 그리고서는 checkpassword를 불러서 사용자명과 암호를 검증하고 맞으면 qmail-pop3d를 부릅니다.


5.2.1.2. qmail-pop3d의 설치

  1. 큐메일을 완전히 설치하고 시험하십시오. 모든 사용자가 POP가능한 메일복스를 갖게하려면 defaultdelivery를 ./Maildir/로 설정하세요. 설치항목에 있는 qmail스크립트로 설치하셨다면, control/defaultdelivery에서 설정할 수 있습니다. 그렇지 않다면, qmail-start명령행에서 /var/qmail/rc일 것입니다.

  2. http://www.qmail.org/top.html#checkpassword에서 checkpassword 프로그램을 받으십시오. 이러저러하게 꾸민 것이 필요없으면 http://cr.yp.to/checkpwd.html에 있는 표준 checkpassword가 좋습니다.

  3. 지시사항을 따라서 checkpassword를 컴파일하고 설치하십시오. /bin/checkpassword로 설치하셔야 합니다.

  4. /var/qmail/supervise/qmail-pop3d/run 스크립트를 다음의 내용으로 만드세요.

    #!/bin/sh
    exec /usr/local/bin/softlimit -m 2000000 \
    	 /usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \
    	 FQDN /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1
    여기에서 FQDN은 지금 설치하는 POP서버의 완전도메인네임(Fully Qualified Domain Name)입니다. (예: pop.example.net)

  5. /var/qmail/supervise/qmail-pop3d/log/run 스크립트를 다음의 내용으로 만듭니다.

    #!/bin/sh
    exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
    	 /var/log/qmail/pop3d

  6. 로그디렉토리를 만들고, run스크립트에 실행권한을 설정하고, 그에 대한 서비스를 /service로 링크합니다.

    chmod +t /var/qmail/supervise/qmail-pop3d
    mkdir /var/log/qmail/pop3d
    chown qmaill /var/log/qmail/pop3d
    chmod 755 /var/qmail/supervise/qmail-pop3d/run
    chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
    ln -s /var/qmail/supervise/qmail-pop3d /service

  7. qmailctl의 "start" 항에 다음의 내용을 더합니다.

    if svok /service/qmail-pop3d ; then
       svc -u /service/qmail-pop3d
    else
       echo qmail-pop3d service not running
    fi

  8. qmailctl의 "stop"항에 다음의 내용을 더합니다.

    echo "  qmail-pop3d"
    svc -d /service/qmail-pop3d		   

  9. qmailctl의 "stat"항에 다음의 내용을 더합니다.

    svstat /service/qmail-pop3d
    svstat /service/qmail-pop3d/log

  10. qmailctl의 "pause"항에 다음의 내용을 더합니다.

    echo "Pausing qmail-pop3d"
    svc -p /service/qmail-pop3d

  11. qmailctl의 "cont"항에 다음의 내용을 더합니다.

    echo "Continuing qmail-pop3d"
    svc -c /service/qmail-pop3d

  12. qmailctl의 "restart"항에 다음의 내용을 더합니다.

    echo "* Restarting qmail-pop3d."
    svc -t /service/qmail-pop3d


5.2.2. qpopper

mbox형 메일복스와 동작하는 POP데몬이 필요하면 Qualcomm의 qpopper을 쓰십시오. Vince Vielhaber는 http://www.qmail.org/qpopper2.53.patch.tar.gz에 사용자홈디렉토리의 메일복스와 동작하는 패치를 갖고 있습니다. qpopper는 http://www.eudora.com/freeware/qpop.html에서 구할 수 있습니다.


5.2.3. Solid

Solid POP3 서버는 maildir와 mbox 메일복스를 지원합니다.


5.2.4. imap-maildir

David R. Harris께서 Washington대학의 IMAP서버에 대한 maildir지원을 추가하는 패치를 정리했으며 설치과정을 문서화했습니다. http://www.davideous.com/imap-maildir/를 보십시오.


5.2.5. Courier-IMAP

Sam Varshavchik께서 maildir만 지원하는 Courierimap서버를 쓰셨습니다.


5.3. POP와 IMAP 클라이언트

5.3.1. fetchmail

POP나 IMAP 등의 서버에서 메일을 꺼내서 로컬에 재삽입하는 프로그램입니다. 큐메일에서 메일을 꺼내는 데 문제가 없지만, 큐메일클라이언트에서 잘 동작하게 하는 두세가지 기술이 있습니다.

큐메일시스템상의 사용자를 위한 .fetchmailrc샘플은 다음과 같습니다.

poll mail.example.net proto pop3 nodns 			
  user dsill with password flubgart is dave here 
  fetchall forcecr to * here					  

이렇게 하면 fetchmail은 mail.example.net을 POP3를 통해서 접속하고, dsill 사용자, flubgart암호로 로긴해서, 메세지를 모두 꺼낸다음에 dave@localhost로 전달합니다. forcecr은 각줄에 carriage return을 붙여서 로컬시스템에 메세지를 SMTP를 통해서 삽입하는데, 큐메일에 필요합니다.


5.3.2. getmail

getmail은 POP서버에서 메일을 꺼내서 maildir메일복스로 전달하는 프로그램입니다. 파이썬스크립트이기 때문에 이 프로그램을 사용하려면 파이썬을 먼저 설치해야 합니다.

Charles Cazabon께서 만드셨고, 웹페지를 운영하고 있습니다.


5.4. 다중 RCPT 대 단일 RCPT 전달

예를 들어서, 당신이 MTA이고, 한 사용자가 hostx.example.com의 세사람에게 메세지를 보낸다고 합시다. 이것을 하는데 몇가지 방법이 있습니다.

  • hostx에 SMTP접속을 열고, 첫번째 사용자에게 메세지사본을 보내고, 두번째 사용자에게 사본을 보내고, 세번째 사용자에게 사본을 보낸 다음에 접속을 닫습니다.

  • 프로세스를 세개 시작해서 매 프로세스가 hostx에 SMTP접속을 열고 한 사용자에게 메세지사본을 보낸 다음에 접속을 닫습니다.

  • hostx에 SMTP접속을 열고 세사용자 모두의 주소를 단 메세지사본 한개를 보낸 다음에 접속을 닫습니다.

첫번째 방법은 세번째 방법보다 분명히 뒤집니다. 메세지가 작더라도 최소한 그만큼 시간이 걸립니다. 그리고 메세지가 크다면 더 오래 걸리고, 게다가 넷웍대역을 쓸것입니다.

허니, 그것은 빼겠습니다.

두번째와 세번째 방법은 좀더 재미있습니다.

세번째 방법은 hostx에 접속을 단 한번 열고서 메세지 사본을 단 하나만 보냅니다. 넷웍대역을 효율사용하는 데 도움이 됩니다.

두번째 방법은 여러번 접속해서 메세지사본을 여러개 보냅니다. 넷웍대역을 "낭비"하지만 SMTP프로토콜의 성질때문에 세번째 방법보다 왕복지연이 더 적고, 더 빠릅니다. 게다가 세번째 방법보다 더 간단하므로 MTA를 더 수월하게 작성할 수 있습니다. 그리고 끝으로, 각 수신인이 그만의 메세지사본을 받으므로 MTA가 VERP를 구현할 수 있습니다. (다음항목을 보십시오.)

큐메일은 언제나 두번째 방법 (단일 RCPT)을 사용합니다. 세번째방법 (복수 RCPT)를 구현하는 패치는 없습니다. 그것은 많은 작업을 하여야 합니다.

복수 RCPT 전달보다 늦을수 있는 경우가 연구해 보면 있겠지만, 간단함과 VERP의 이점이 더 큽니다.

단일 RCPT 전달이 복수 RCPT 전달보다 넷웍대역을 더많이 사용하지만, 그 차이는 종종 과장되었습니다. 메세지 대부분은 기껏해야 두세 수신인에게 보내지는데다가 그들은 보통 서로 다른 호스트에 있기때문에, 복수 RCPT전달은 얻는게 아무것도 없습니다. 복수 RCPT전달이 유효할 수 있는 메일링리스트서버에서조차 이익가능성은 적은데, SMTP는 대부분의 연결에 걸쳐서 넷웍대역의 조금만 쓰고, HTTP가 엄청나게 많이 쓰기 때문입니다.

예를 들어, 상향연결의 10퍼센트가 SMTP 대역으로 가고, 그중 25퍼센트를 복수 RCPT를 사용해서 줄여 봐야 SMTP 대역은 7.5%로 될 뿐입니다.


5.5. VERP

메세지를 전달할 수 없으면, MTA는 Envelope Return Path (ERP)로 바운스메세지를 돌려보내야 한다고 결정합니다. 바운스 메세지에는 수신인주소, 메세지부전달사유, 그리고 문제가 임시인지 오래갈 지 등을 포함해야 합니다. 그렇지만 많은 MTA가 제대로 하지 않습니다. 그것들은 바운스를 From 헤더필드에 있는 주소로 보내기도 하지만, 수신인을 파악하지 못하기조차 합니다.

대부분의 사용자대사용자메세지에서 이런 문제들은 그렇게 나쁘지 않습니다. 대개는 바운스시각과 그 내용에 기초해서 사태를 이해할 수 있습니다. 메일링리스트에서는 잘못된 바운스문제가 더 심각합니다. 가입자들은 새주소로 메일을 옮기고 포워딩합니다. 새주소에 전달문제가 생기기 시작했는데, 바운스메세지에는 오직 새주소만 포함되어 있다면 어느 가입자의 메일이 바운스되는 지 알 수 없습니다.

Dan Bernstein은 VERP (Variable Envelope Return Path)라 불리는 굉장한 것을 제안했습니다. VERP를 사용하면, 각 가입자는 고유리턴경로를 갖습니다. 이렇게 해야 바운스 처리기가 문제가입자를 식별하도록 할 수 있습니다.

예를 들어서, 대개의 비 VERP 메일링리스트에는 리턴주소가 listname-owner@domain의 형식으로 됩니다. VERP 메일링리스트에서는 리턴주소가 listname-owner-subscriber=sdomain@ldomain으로 되는데, 가입자주소 subscriber@sdomein이 "소유자"와 "@"사이에 묻혀있습니다. (가입자주소의 "@"는 "="로 대체됩니다.)

ezmlm리스트매니저는 바운스를 자동으로 처리하기 위해서 VERP를 씁니다. 가입자에게 빠뜨린 메세지리스트의 임시전달문제를 알려줘서 보관문서에서 꺼낼 수 있게 합니다.

Russell Nelson이 큐메일에서의 메이저도모를 위한 바운스메니저를 썼지만, 더이상 유지하지 않습니다. http://www.qmail.org/bounceman-0.4.shar에서 구할 수 있습니다.


5.6. 문제해결

5.6.1. 프로세스

제대로 작동하고 완전하면서도 최소한인 큐메일설치는 다음 네개의 프로세스를 갖습니다.

  • qmail-sned : qmails사용자로서 운행

  • qmail-clean : qmailq사용자로서 운행

  • qmail-rspawn: qmailr사용자로서 운행

  • qmail-lspawn: root사용자로서 운행

사용중인 유닉스기종에 따라서 다음명령중 하나로 이 과정들을, 어쩌면 몇개 더, 나열할 수 있습니다.

ps -ef | grep qmail	
ps waux | grep qmail	

예를 들면 다음과 같습니다.

[dave@sparge dave]$ ps waux|grep qmail 
dave	   2222  0.0  0.8	836   348  p4 S    10:25   0:00 grep qmail 
qmaild 	351  0.0  1.0	840   400  ?  S N  12:43   0:00 /usr/local/bin/tcpserver -v -x / 
qmaild    2220  0.0  1.0	844   420  ?  S N  10:25   0:00 /usr/local/bin/tcpserver -v -x / 
qmaill 	365  0.0  0.8	748   344  ?  S N  12:43   0:00 splogger qmail 
qmailq 	368  0.0  0.7	736   292  ?  S N  12:43   0:00 qmail-clean 
qmailr 	367  0.0  0.6	732   272  ?  S N  12:43   0:00 qmail-rspawn 
qmails 	350  0.0  0.8	776   336  ?  S N  12:43   0:00 qmail-send 
root		340  0.0  0.6	724   252  ?  S N  12:43   0:00 /usr/local/sbin/supervise /var/s 
root		341  0.0  0.6	724   252  ?  S N  12:43   0:00 /usr/local/sbin/supervise /var/s 
root		366  0.0  0.7	736   276  ?  S N  12:43   0:00 qmail-lspawn ./Mailbox 
[dave@sparge dave]$ 

위의 예에서와 같이 supervise하에서 qmail이나 qmail-smtpd를 실행하면 그 과정들도 볼 수 있습니다. tcpserver하에서 qmail-smtpd를 실행하면, 부모 tcpserver와 각 활성 입력 SMTP 접속에 대한 추가 tcpserver 과정도 볼 수 있습니다.

로깅을 처리하기 위해 splogger (또는 multilog 또는 cyclog)을 사용하면, qmaill사용자로서 운행하는 splogger (또는 multilog 또는 cyclog)프로세스를 갖습니다.

게다가 큐메일이 로컬이나 원격 메세지전달로 바쁘면 관계되는 로컬수만큼의 qmail-local과정과 관계되는 원격수만큼의 qmail-remote과정을 볼 수 있습니다.


5.6.2. 로그

5.6.2.1. splogger

splogger는 메세지에 시간찍기하기 위해서 syslog의 로깅시스템을 사용해서 syslog 데몬으로 보냅니다. syslog은 /etc/syslog.conf에서 설정합니다. syslog로 보내는 메세지에는 장치와 우선순위가 담겨 있습니다. /etc/syslog.conf의 기재사항은 장치와 우선순위에 따라서 필터해서 메세지를 원하는 로그파일, 원격로그호스트, 또는 콘솔에 보냅니다. splogger는 기본으로 메일장치에 로그하므로, syslog.conf파일에서 "mail"을 grep하면 큐메일의 로그메세지처리를 볼 수 있습니다.

대개 다음장소에 위치합니다.

  • /var/log/syslog

  • /var/adm/SYSLOG

  • /var/log/maillog

대개의 syslog 로그기재사항은 다음과 같습니다.

 
Jun  3 11:35:23 sparge qmail: 928424123.963558 delivery 153: success: did_1+0+0/	
"Jun 3 11:35:23" is the syslog timestamp.											
"sparge" is the name of the system that sent the message.							
"qmail:" is the tag splogger places on all qmail log entries.						
"928424123.963558" is an optional TAI timestamp (see next section).				
"delivery 153: success: did_1+0+0/" is the log message itself. 					


5.6.2.2. multilog

daemontools 패케지의 일부인 multilog는 특정한 디렉토리의 일련의 파일에 메세지를 로그합니다.

로그디렉토리는 multilog명령행에 명시하므로 큐메일기동스크립트를 살펴보시면 찾을 수 있습니다.

로그디렉토리내의 파일수와 각파일의 최대크기는 multilog 옵션으로 정합니다. 로그파일명은 파일을 시작한 시간의 TAI (Temps Atomique International) 시간찍기입니다. daemontools의 tai64nlocal명령은 TAI 시간찍기를 사람이 읽을 수 있는 로컬 시간찍기로 변환합니다.

보통의 multilog 록기재사항은 다음과 같습니다.

@4000000038c3eeb104a6ecf4 delivery 153: success: did_1+0+0/
"@4000000038c3eeb104a6ecf4"은 선택사항입니다만, 권장됩니다. TAI 시간찍기인 "delivery 153: success: did_1+0+0/"이 메세지입니다.


5.6.2.3. 록메세지

로컬시스템에서 원격시스템으로 보내는 메세지에 대한 록의 예는 다음과 같습니다.

1 @4000000038c3eeb027f41c7c new msg 93869
2 @4000000038c3eeb027f6b0a4 info msg 93869: bytes 2343 from <dave@sill.org> qp 18695 uid 49491
3 @4000000038c3eeb02877ee94 starting delivery 2392: msg 93869 to remote lwq@w3.to
4 @4000000038c3eeb0287b55ac status: local 0/10 remote 1/20
5 @4000000038c3eeb104a13804 delivery 2392: success: 209.85.127.177_accepted_message.
	/Remote_host_said:_250_CAA01516_Message_accepted_for_delivery/
6 @4000000038c3eeb104a4492c status: local 0/10 remote 0/20
7 @4000000038c3eeb104a6ecf4 end msg 93869

제1번줄은 큐메일이 새메제지를 받았음을 나타내고, 큐아이디는 93869입니다. 큐아이디는 메세지를 담는 큐파일인 /var/qmail/queue/mess/NN/파일의 아이노드번호입니다. 큐아이디는 메세지가 큐에 있는 동안은 고유합니다.

제2번줄은 메세지가 dave@sill.org에서 왔고 189바잇이라고 알려줍니다.

제3번줄은 qmail-remote가 메세지를 lwq@w3.to로 전달하려고 기동한다고 알려주며, 아이디 2392를 전달에 부여합니다.

제4번줄은 로컬전달은 0개, 리못전달은 1개가 계류중이라고 알려줍니다.

제5번줄은 2392번 전달이 성공으로 끝났고, 원격서버의 반응을 되돌리는데, 때때로 원격메일애드민이 전달을 추적하는데 유용한 정보를 포함합니다. 이번경우에서 "CAA01516"은 원격시스템의 전달아이딥니다.

제6번줄은 로컬전달 0개, 원격전달 0개가 계류중이라고, 즉 전달을 끝마쳤다고, 알려줍니다.

제7번줄은 메세지를 완전히 전달하고 큐에서 지웠다고 알려줍니다. 여기에서 큐아이디인 93869은 다른 전달에 또 사용할 수 있습니다.


5.7. 대형 서버

qmail-ldap도 보십시오.


5.7.1. Scalable parallelism

사용자디렉토리를 저장하려면 빠른 NFS넷웍파일서버를 사용하십시오. 파일서버상의 maildir메일복스에 전달하는 동등선호 SMTP서버를 여러 대 설치하십시오.


5.8. Sendmail에서 큐메일로 옮기기

Dan Berstein의 Sendmail -> qmail페지를 http://cr.yp.to/qmail/sendmail.html에서 보시기 바랍니다.


5.9. 메일링리스트매니저 (Mailing List Managers: MLM's)

메일링리스트소유자가 메일링리스트를 운영하는 것을 돕는 시스템입니다. 하는 일은 두 가지입니다. 가입자들의 리스트를 관리하고, 가입자들에게 메세지를 재송부합니다.

유닉스메일링리스트매니저 대부분이 (또는 전부가) 큐메일과 작동하게 할 수 있습니다.


5.10. ezmlm

큐메일의 저자인 Dan Bernstein께서 작성하셨습니다. 큐메일과 사용하도록 썼으며, 큐메일의 몇몇 특징에 의존합니다. 가장 두드러진 점은 바운스메세지를 안정하게 처리하도록 VERP를 사용합니다. MLM중에서 ezmlm이 다소 독특한 점은 명령어가 MLM의 중심주소로 보내지지 않고, 리스트의 이름에 덧붙여집니다. 예) "foo@list.example.net"에 가입하려면 "foo-subscribe@list.example.net"으로 메세지를 보냅니다.

더 알고 싶으시면 비공식웹사이트이면서, 유용성이 크고 아주 훌륭한 앳온인 ezmlm-idx의 공식홈페이지인 http://www.ezmlm.org를 보십시오.


5.11. 메이저도모

가장 많이 보급된 유닉스 MLM입니다. 두세가지만 고치면 큐메일과 멋지게 작용합니다. Russ Allbery께서 큐메일/메이저도모에 관한 FAQ를 쓰셨는데, http://www.eyrie.org/~eagle/faqs/mjqmail.html에서 구할 수 있습니다.


5.12. 패치

큐메일에 대한 여러 소스코드패치를 구할 수 있습니다. 패치를 설치하려면, 다운로드하고, 큐메일소스트리로 가서 패치명령을 씁니다.

cd /usr/local/src/qmail/qmail-1.03 	
patch -p0 < /tmp/patchfile 			 

큐메일을 멈춰야 하는데, qmail-send를 끝내거나, 설치항목에 있는 큐메일스크립트를 설치하셨다면 다음과 같이 합니다.

qmailctl stop
그리고나서 다시 컴파일하고 바이너리를 설치합니다.
make setup check
그다음에 다시 큐메일을 기동합니다.
qmailctl start
끝으로, 큐메일, 특히 패치한 부분,을 시험하십시오.


5.13. DNS

예로부터 DNS응답은 512바잇으로 제한되었습니다. 몇몇 대형사이트들이 더 긴MX응답을 되돌리기 시작했습니다. 큐메일과 기타 많은 프로그램들은 매우 큰결과를 되돌리는 Domain Name Server (DNS)질의에는 문제가 있습니다. 큐메일에서는 이것을 해결하는데 두가지 방법이 있습니다.


5.13.1. 패킷버퍼사이즈를 65536까지 밀어올리기

최근의 BIND resolver 라입러리와 동작합니다. 응답의 절단빗이 셋되어 돌아오면 라입러리코드내에서 TCP질의를 자동으로 합니다. 가장 간단한 해결이지만, 해당시스템의 페이징처리방법에 따라서 메모리낭비가 가장 클 수 있습니다. dns.c의 PACKETSZ를 65536으로 바꾸고 큐메일을 다시 컴파일하면 됩니다.


5.13.2. Christopher K. Davis의 패치

아무리 오래된 리졸버라입러리에도 동작하는 Chuck Foster의 패치를 개조한 것입니다.5 "버퍼에 놓이는 바잇수"라입러리벅을 피하려고 가드(guard)바잇을 사용합니다. 필요한 크기로 하기보다는 (원래패치와 같이 응답이 기본 512바잇인 PACKETSZ보다 커야지만 재할당하지만) 65536으로 단 한번만 재할당하므로 Chuck의 패치보다 메모리효율에서는 떨어집니다. 재할당후에, TCP질의를, 리졸버라입러리가 하게하지 않고, (큐메일과 네임서버가 같은 기계 또는 로컬넷웍에 있으면 큰걱정이 아니지만, 그것들간 여분의 왕복을 피하면서) 강제로 합니다.


5.13.3. qmail-ldap

Andre Oppermann 등의 이 패치는 Lightweight Directory Access Protocol (LDAP)지원을 큐메일에 구현합니다. LDAP는 넷웍전화책과 같습니다. qmail-ldap를 사용하면 POP서버를 수천명의 사용자에게 편의를 제공할 수 있습니다. http://www.nrg4u.com/를 보십시오.


5.14. QMTP (Quick Mail Transfer Protocol)

Dan Bernstein께서 설계하신 SMTP대체프로토콜입니다. 해당 프로토콜은 http://cr.yp.to/proto/qmtp.txt에 정의되어 있습니다. SMTP와 유사하지만, 더 간단하고, 더 빠르고, SMTP와는 호환되지 않습니다. 큐메일은 qmail-qmtp라는 QMTP서버를 포함하는데, qmail-smtp와 매우 흡사하게 동작합니다. 대개 209포트를 이용합니다.

큐메일은 QMTP클라이언트를 포함하지 않지만, serialmail패케지는 그것을 포함합니다. maildirqmtp는 maildir메일복스에 있는 메세지를 QMTP를 통해서 지정한 QMTP서버로 전달합니다.

SMTP에 대한 drop-in 대체품이 아니며, 아직까지는 인터넷상에서 많이 퍼지지 않았습니다.

Russ Nelson씨의 qmail-remote에 대한 패치가 있는데 QMTP를 지원합니다. /service에 압축을 풀고 QMTP 서비스를 지원하는 타볼도 있습니다.


A. 부록

A.1. 사례

먼저 이런 강력하고 멋들어진 시스템을 설계하고 쓴 Dan Bernstein에게 감사를 표시합니다. 3년간의 사용후에도 큐메일은 저를 감동하게 합니다.

큐메일메일링리스트의 회원들께도 감사하고자 합니다. Russell Nelson씨는 가장 큰 도움과 인내와 지식과 재미를 공헌한 분들 중 하나로 특별히 언급할 만 합니다. 큐메일공동체에 대한 그의 공헌은 오직 DJB에게만 뒤질뿐입니다.

본문서에 검토와 기여를 하신 모든 분들께도 사례를 드립니다.

  • Vince Vielhaber

  • Chris Green

  • Christopher K. Davis

  • Scott Schwartz

  • Fred Lindberg

  • Russell P. Sutherland

  • Alex Miller

  • Tim Hunter

  • Frank D. Cringle

  • Mahlon Smith

  • Rogerio Brito

  • Tony Hansmann

  • Matthias Andree

  • Tillman Hodgson

  • Stefan Witzel

  • 여기 열거하기 힘든 여러 분들 ...

Henning Brauer씨께 특별히 감사드리는데, lifewithqmail.org 도메인을 주셨고, 또 호스팅까지 해주십니다.

'큐메일과 삶'은 Simple Document Format (SDF)로 썼는데, 매우 신선한 Perl에 기초한 마컵언어로서 HTML, 평범한 문서, 포스트스크립트, POD, 기타 형식문서 등을 만들어 냅니다. 그것으로 일이 많이 쉬었습니다. 더알고 싶으시면 http://www.mincom.com/mtr/sdf/를 보십시오.


A.2. 관련 패키지

A.2.1. dot-forward

Sendmail은 dot forward라고 발음하는 .forward파일을 사용해서 사용자가 수신메세지의 전달을 통제하도록 합니다. 큐메일도 유사한 장치를 쓰는데, .qmail파일입니다. dot-forward패키지는 큐메일이 .forward파일을 사용할 수 있게 합니다. .forward파일을 사용하는 Sendmail이나 여타 MTA를 운영하는 시스템은 기존의 .forward파일을 .qmail에 상응하는것으로 변환하지 않기 위해서, 또는 단순히 큐메일로의 이행을 사용자들에게 덜 눈에 띄게 하기 위해서 dot-forward의 사용을 고려해야 할 지도 모릅니다.

작은 패케지이므로 설치하고 설정하는 데 쉽습니다. 해당 소스는 ftp://cr.yp.to/software/dot-forward-0.71.tar.gz에서 구할 수 있습니다.

Dan Bernstein이 썼고, 그는 관련홈페이지를 http://cr.yp.to/dot-forward.html에 관리합니다.


A.2.2. fastforward

또다른 Sendmail호환 앳온입니다. Sendmail은 중앙앨리어스데이터베이스를 대개 /etc/aliases라는 단일파일에 보관합니다. 큐메일은 /var/qmail/alias에 있는 일련의 dot-qmail파일들을 사용하는데, 한 파일에 한 앨리어스입니다. 큐메일로 옮기시는데 변환하고 싶지 않은 Sendmail형식의 앨리어스파일이 있으시면, fastforward가 큐메일에게 앨리어스파일을 있는 그대로 쓸 수 있게 해줍니다.

해당 소스는 ftp://cr.yp.to/software/fastforward-0.51.tar.gz에서 구할 수 있습니다.

Dan Bernstein이 썼고, 그는 http://cr.yp.to/fastforward.html에 웹페지를 관리합니다.


A.2.3. ucspi-tcp

큐메일의 SMTP서버는 스탠드얼론데몬으로 작동하지 않습니다. 도우미프로그램인 inetd, xinetd, 또는 tcpserver 등이 데몬으로 작동합니다. SMTP포트인 25포트로 접속을 받으면 qmail-smtpd 사본을 실행합니다.

inetd는 표준넷웍서버인 "수퍼서버"입니다. /etc/inetd를 설정해서 qmail-smtpd를 작동할 수 있습니다만, ucspi-tcp패케지의 일부인 tcpserver가 권장툴입니다. ucspi-tcp는 UNIX Client-Server Program Interface for TCP의 두문자이고, ooks-pie tee see pee로 발음합니다.

tcpserver를 선호하는 이유는 다음과 같습니다.

  • 서비스로의 동시접속수를 제한할 수 있습니다. inetd는 접속률제한장치를 쓰므로 너무바쁜 서비스를 잠시 무력하게 할 수 있습니다.

  • 특정 호스트에게 접근거부하도록 하거나, "로컬"호스트를 인식하고 신호를 부여해서 qmail-smtpd가 다르게 취급하도록 설정할 수 있습니다.

  • 큐메일의 저자가 지원하는 유일한 서버입니다.

해당 소스는 ftp://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz에서 구하실 수 있습니다.

Gerrit Pape씨께서 맨페지식으로 문서를 제공합니다.

Dan Bernstein이 썼고, http://cr.yp.to/ucspi-tcp.html에 웹페지를 운영합니다.


A.2.4. daemontools

서비스를 통제하고 감시하는 유틸리티군을 담고 있습니다. 필수사항은 아닙니다만, 특히 바쁜시스템에게는 강력히 권장합니다. 포함하는 유틸리티들은 다음과 같습니다.

  • supervise: 서비스를 감시하고, 끝나면 다시 시작합니다.

  • svc: supervise와 통신해서 서비스를 멈추고, 쉬고, 다시시작하게 합니다.

  • multilog: 서비스에 대한 로그를 유지하고, 설정한 크기이하로 유지할 수 있게 자동으로 교대시킵니다.

  • accustamp: 로그기재사항을 정확하게 시간찍기합니다.

  • setuidgid: 일반사용자의 UID와 GID로 수퍼유저의 프로그램을 돌립니다.

해당소스는 http://cr.yp.to/daemontools/daemontools-0.70.tar.gz에서 구하실수 있습니다.

Gerrit Pape씨께서 ucspi-tcpdaemontools 에 대한 맨페지식으로 문서를 제공합니다.

Dan Bernstein이 썼고, http://cr.yp.to/daemontools.html에 웹페지를 운영합니다.


A.2.5. qmailanalog

큐메일의 로그파일을 처리하고 해당 시스템이 얼마나 그리고 어떤 일을 하고 있는 지 알리는 일련의 보고서를 만듭니다. 얼마나 많은 메세지를 주고 받았는 지, 얼마나 큰 지, 얼마나 빨리 처리되는 지 등에 대한 통계가 필요하면, qmailanalog가 바로 그것입니다.

보너스로 matchup프로그램은 큐메일의 매 전달당 복수로그행을 하나로 만드는데, 이미 익숙한 Sendmail로그와 다르지 않습니다.

해당소스는 http://cr.yp.to/software/qmailanalog-0.70.tar.gz.에서 구하실 수 있습니다.

Dan Bernstein이 썼고, http://cr.yp.to/qmailanalog.html에 웹페지를 운영합니다.

-------------------------------------------------------------

유의점: qmailanalog는 accustamp가 사용하는 초가 나누어지는 매우 긴 입력 시간찍기에 의존합니다. TAI64N형식의 multilog이 만드는 로그와 같이 쓰려면 구형식으로 변환해야 합니다. http://www.qmail.org/tai64nfrac에서 그런 프로그램을 구할 수 있습니다.

-------------------------------------------------------------


A.2.6. rblsmtpd

스팸당해보지 않으셨다면 운이 좋았다고 생각하십시오. 이메일사용자들 대부분이 스팸이라고 알려진 원치않는 두툼한 이메일 (Unsolicited Bulk E-mail: UBE)에 익숙합니다. 그것들 대부분 섹스사이트, 행운의 편지, 기타 신용사기 등에 대한 광고입니다. 1988년 정도 전까지의 예전에는 인터넷상의 MTA들 대부분은 개방중계, 즉 송신자도 수신자도 모두 로컬이 아니라도 누구든지 보내고 누구든지 받는 메일을 받아들였습니다. 스패머는 스팸을 전달하기 위해서 어느것이든 찾기만 하면 개방중계를 이용합니다. 그렇게 되면 행적을 덮어버리고, 반발을 "정직한" 중계사이트로 돌리게 되며, 그들은 CPU시간과 넷웍대역을 많이 아끼게 됩니다.

요즘 이런 개방중계는 심한 불량으로 인식되고, 몇몇 반스팸자경단그룹은 개방중계와 기타 저속한 스팸출처를 확인하는 장치를 만들어서 그들로부터 SMTP접속승락을 피할 수 있습니다. Realtime Blackhole List (RBL), Open Relay Behavior-modification System (ORBS), Dial-up User List (DUL) 등이 그것입니다.

rblsmtpd는 RBL SMTP 데몬입니다. tcpserver와 qmail-smtpd의 사이에 있으면서 이 리스트상에서 확인된 시스템으로부터의 접속을 거부합니다.

tcpserver에서 rblsmtpd를 운영하려면 다음과 같이 하세요.

#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -H -l 0 -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
	 -u $QMAILDUID -g $NOFILESGID 0 smtp /var/qmail/bin/rblsmtpd\
	 -r blackholes.mail-abuse.org /var/qmail/bin/qmail-smtpd 2>&1

rblsmtpd는 전에는 별개프로그램이었지만, 지금은 ucspi-tcp에 같이 제공됩니다.

Dan Bernstein이 썼고, http://cr.yp.to/ucspi-tcp/rblsmtpd.html에 웹페지를 유지합니다.


A.2.7. serialmail

큐메일은 전시간, 고속접속의 시스템을 위해 설계되었습니다. serialmail은 큐메일을 간헐적이고 저속도 접속에 더 잘 맞게 하는 툴군입니다. 그런 시스템상의 serialmail로 큐메일은 모든 원격메일을 단일 maildir로 전달하도록 설정됩니다. serialmail의 maildir2smtp명령은 접속이 되었을 때 ISP의 메일허브로 maildir를 올리는 데 사용됩니다. ISP가 QMTP (고급주제의 QMTP 를 보십시오.)를 지원하면, maildirqmtp도 쓸 수 있습니다.

serialmail은 접속의 ISP측에서 AutoTURN을 구현하는데 사용될 수 있는데, 클라이언트가 하는 SMTP접속은 서버가 접속을 클라이언트로 돌려서 서버에 큐된 메세지를 클라이언트로 보내도록 합니다. 이것은 ETRN SMTP기능과 유사합니다.

해당소스는 http://cr.yp.to/software/serialmail-0.75.tar.gz에서 구하실 수 있습니다.

Dan Bernstein이 썼고, http://cr.yp.to/serialmail.html에 웹페지를 유지합니다.


A.2.8. mess822

RFC 822를 따르는 메세지를 해석하는 응용제품군과 라입러리입니다. 응용제품은 다음과 같습니다.

  • ofmipd: 클라이언트로부터 메세지를 받아서 From필드를 데이터베이스에 기초해서 재작성하는 데몬

  • new-inject: 사용자통제하에 호스트네임을 재작성하는 것을 지원하는 qmail-inject대제품

  • iftocc: 메세지가 특정주소로 보내졌는 지를 검사하는 .qmail 유틸리티

  • 822header, 822field, 822date, 822received: 메세지에서 정보를 추출

  • 822print: 메세지를 예쁘게 프린트

해당 소스는 http://cr.yp.to/software/mess822-0.58.tar.gz에서 구하실 수 있습니다.

Dan Bernstein이 썼으며 http://cr.yp.to/mess822.html에 웹페지를 유지합니다.


A.2.9. ezmlm

성능이 우수하고 사용하기 쉬운 큐메일용 메일링리스트매니저입니다. LISTSERV나 Majordomo에 익숙하시다면 메일링리스트매니저가 무엇을 하는 지 아실겁니다. 큐메일에서의 메일링리스트에 대해 더 알고 싶으시면 고급주제메일링리스트매니저항목을 보십시오.

해당소스는 http://cr.yp.to/software/ezmlm-0.53.tar.gz에서 구하실 수 있습니다.

Dan Bernstein이 썼고, http://cr.yp.to/ezmlm.html에 관련웹페지가 있습니다.

Fred Lindberg씨와 Fred B. Ringel씨께서 ezmlm-idx라는 ezmlm의 확장패키지를 만드셨는데, 기능이 많으니까 한번 써보세요.


A.2.10. safecat

파일을 maildir메일복스에 확실히 씁니다. 특별히 procmail 방법으로 메세지를 보관하는 데 유용합니다. 예를 들면, 다음방법은 메세지를 모두 Maildir에 보관합니다.

:0w							 
|safecat Maildir/tmp Maildir/new

Len Budney가 썼고, http://www.pobox.com/~lbudney/linux/software/safecat.html에 웹페지를 운영하고 있습니다.


A.2.11. maildrop

procmail과 유사한 메일필터입니다. (패치를 하지않은) procmail이 갖지 않은 특징 하나는 maildir메일복스를 지원한다는 것입니다.

Sam Varshavchik이 썼고, http://www.flounder.net/~mrsam/maildrop에 웹페지를 운영합니다.


A.3. 인터넷메일의 동작방법

A.3.1. 메세지가 A지점에서 B지점으로 가는 방법

한호스트의 사용자가 다른 호스트의 사용자에게 메세지를 보내면, 무대뒤에서는 알아차리지 못하는 많은 일이 일어난다.

예를 들어 alice@alpha.example.com의 Alice가 bob@beta.examle.com의 Bob에게 메세지를 보낸다고 합시다. 다음과 같은 일이 벌어집니다.

Alice는 mutt이나 pine 등 자기의 Mail User Agent (MUA)로 메세지를 작성합니다. To 필드에 수신인, Subject필드에 메세지의 제목을, 그리고 메세지본문을 적습니다. 다음과 같을 겁니다.

To: bob@beta	 
Subject: lunch  

How about pizza?

  1. 메세지가 맘에 들면 MUA에게 보내도록 합니다.

  2. 여기서, MUA는 Date나 Message-Id 등과 같은 추가헤더필드를 덧붙이고, (예를들어서 bob@beta를 "Bob <bob@beta.example.com>"로 바꿔서) Alice가 넣은 값들을 고칩니다. 다음으로, MUA는 메일시스템에 메세지를 삽입합니다. 여기에는 두가지 방법이 있습니다. 메세지를 삽입하기 위해 메일시스템에서 제공하는 프로그램을 실행하거나, 로컬시스템 또는 원격메일서버상의 Simple Mail Transfer Protocol (SMTP)포트에 접속을 엽니다. 본 예제에서, 우리는 MUA가 로컬삽입프로그램을 사용해서 메세지를 MTA로 보낸다고 하겠습니다. 삽입과정의 자세한 내용은 MTA마다 다르지만, 유닉스시스템에서는 sendmail방식이 사실표준입니다. 이방식으로 MUA는 헤더와 본문을 공백줄로 분리해서 파일에 넣고, sendmail프로그램으로 그 파일을 보냅니다.

  3. 메세지가 구문이 올바르고 sendmail이 제대로 호출되어서 삽입을 성공했으면, 그 메세지는 이제 MTA의 책임입니다. 세부사항은 MTA마다 크게 다르지만, 대개 alpha의 MTA는 헤더를 검토해서 메세지를 어디로 보낼지 결정해서, beta에 SMTP접속을 열고, beta시스템의 MTA로 메세지를 전송합니다. SMTP대화에서 메세지는 두 부분으로 나눠서 보내지게 되는데, 그 하나는 봉투로서 수신인 주소 (bob@beta.example.com)와 회신주소 (alice@alpha.example.com)를 명시하고, 다른 하나는 메세지 그 자체로서 헤더와 본문을 이룹니다.

  4. beta 시스템에 bob이라는 사용자가 없어서 beta MTA가 메세지를 거부하면, alpha MTA는 회신주소인 alice@alpha로 바운스메세지를 보내서 문제를 알립니다.

  5. beta MTA가 메세지를 수용하면, 수신인 주소를 보고서 그것이 로컬이나 원격시스템에 있는지 결정합니다. 본 예제에서는 로컬이므로 MTA는 메세지를 직접 전달하거나, /bin/mail이나 procmail 등과 같은 Mail Delivery Agent (MDA)에게 건내줍니다.

  6. Bob이 메일쿼타를 초과했기 때문에 전달이 안되면, beta MTA는 봉투의 회신주소인 alice@alpha로 바운스메세지를 보냅니다.

  7. 전달이 잘되었으면, Bob의 MUA가 그 메세지를 읽어서 보여줄 때까지 그의 메일복스에 대기합니다.


A.3.2. 더많은정보

인터넷메일이 어떻게 작동하는 지에 대한 정보는 다음중 하나이상을 보십시오.


A.3.3. 인터넷 RFC들

인터넷의 Requests for Comment (RFC's)는 인터넷의 공식문서입니다. 이것들 대부분은 비평단계를 훨씬 넘어서 TCP, FTP, Telnet 등의 인터넷프로토콜과 여러 다양한 메일표준과 프로토콜을 정의합니다.

메일관련 RFC들의 전체리스트를 Internet Mail Consortium 에서 얻을 수 있습니다.


A.4. 구조

A.4.1. 모듈시스템구조

인터넷 MTA는 다양한 일을 합니다. Sendmail과 smail 등의 초기 디자인은 단일구성체입니다. 다른 말로, 하나의 커다란 복합으로서 '모자를 바꿔쓰는' 식인데, SMTP서버가 되려고 한 모자를 쓰고, SMTP클라이언트가 되려고 다른 모자를 쓰고, 또 메세지를 로컬로 삽입하려고 다른 모자를 쓰고, 큐를 관리하려고 다른 모자를 씁니다.

큐메일은 모듈방식입니다. 위의 각 기능들을 별개의 프로그램으로 수행합니다. 따라서, 프로그램들은 훨씬 더작고, 더간단하며, 기능이나 보안의 벅이 더 적습니다. 보안을 더 강화하기 위해서, 큐메일모듈은 상이한 특권으로 운행하고, 서로 "기대"하지 않기 때문에, 다른 모듈이 늘 하던대로 하리라고 추정하지 않습니다. < /para>

핵심모듈들입니다.

표 A-1. 핵심모듈

모듈 기능
qmail-smtpd SMTP를 통한 메세지의 수용과 거절
qmail-inject 메세지의 로컬삽입
qmail-rspawn/qmail-remote 원격전달처리
qmail-lspawn/qmail-local 로컬전달처리
qmail-send 큐처리
qmail-clean 큐청소

모듈방식에는 단점도 있습니다. 단일구성체의 MTA와 달리, 모듈간 상호작용은 잘정의되어있어서 모듈은 최소한의 필요정보만 서로 교환합니다. 이는 대개 '좋은일'이지만, 때로는 일을 하기가 어렵게 합니다. 예를 들면, sendmail의 "-v"플랙은 디버깅목적으로 Sendmail이 동작궤적을 표준출력으로 내보냅니다. 한 sendmail바이너리가 삽입, 큐, 앨이어스처리, .forward파일처리, SMTP를 통한 원격송부 등을 다하기때문에, 메세지를 전달할때까지의 전체전달을 쉽게 추적할 수 있습니다. 큐메일에 동등한 능력은 없고, 모듈에서 모듈로 "디벅"플랙을 건네주는 것을 구현하려면 엄청나게 코드를 고쳐야 하고, 더 복잡해집니다.


A.4.2. 파일구조

/var/qmail이 큐메일파일구조의 근본입니다. 큐메일을 컴파일할때 바꿀 수는 있지만, 다른 애드민이 무엇인가를 어디에서 찾아야 할 지 알게 그대로 두어야 좋습니다. 큐메일트리의 일부 또는 전부를 다른곳에 꼭 놓고 싶으면, 심볼릭링크를 이용하는 것이 낳습니다. 자세한 내용은 설치항목의 디렉토리만들기항목을 보시기 바랍니다.

톱레벨 섭디렉토리입니다.

표 A-2. 섭디렉토리

디렉토리 내용
alias 시스템전반의 앨리어스에 대한 .qmail 파일
bin 프로그램바이너리와 스크립트
boot 기동스크립트
control 설정파일
doc 문서 (맨페지 제외)
man 맨페지
queue 보내기전메세지의 큐
users 큐메일사용자 데이터베이스 파일

A.4.3. 큐구조

컴파일디렉토리의 INTERNALS파일에 큐의 자세한 내용을 더 잘 설명해놓았습니다. 다음은 큐구조의 좀더 넓은 개요입니다.

표 A-3. 큐구조

섭디렉토리 내용
bounce 영구전달에러
info* 송신자주소를 봉투하기
intd qmail-queue의 봉투진행
local* 로컬봉투수신자주소
lock lock파일
mess* 메세지파일
pid qmail-queue가 i-node번호를 얻기 위해 사용
remote* 원격봉투송신자주소
todo 완전봉투

-------------------------------------------------------------

유의점: 디렉토리에 "*"표시가 있으면 (conf-split-1)까지 "0", "1", ..., 등으로 된 분할섭디렉토리를 갖고 있는데, conf-split은 컴파일디렉토리의 conf-split파일에 포함된 컴파일시설정입니다. 기본은 23입니다. 이렇게 디렉토리를 쪼개는 것은 매우 바쁜서버에서 단일디렉토리의 파일수를 줄이기 위해서입니다.

-------------------------------------------------------------

아이노드번호에 따라서 섭디렉토리하의 파일들을 이름짓습니다. 이것이 뜻하는 바는, 표준 유닉스 유틸리티인 mv, dump/restore, tar 등을 써서 수동으로 그것들을 움직이지 못합니다. 큐파일을 정확하게 이름바꾸는 사용자공헌 유틸리티가 http://www.qmail.org에 두어개 있습니다.

-------------------------------------------------------------

유의점: 큐메일이 가동중에는 큐메일파일을 수정하지 않아야 좋습니다. 큐를 수정하려면, 먼저 큐메일을 멈추고, 큐를 조심하여 다루고, 다시 큐메일을 가동하십시오.

-------------------------------------------------------------


A.4.4. 사진

/var/qmail/doc에 PIC로 이름을 시작하는 파일들이 죽 있습니다. 이들은 큐메일이 감당하는 다양한 상태의 문장"사진"입니다. 다양한 모듈을 통한 통제흐름을 보여주며, 복잡한 설정을 만들고 디버깅하는 데 큰 도움이 됩니다.

표 A-4. 사진들

파일이름 개요
PIC.local2alias 로컬앨리어스에 전달한 로컬삽입메세지
PIC.local2ext 확장주소로 전달한 로컬삽입메세지
PIC.local2local 로컬사용자에게 전달한 로컬삽입메세지
PIC.local2rem 원격주소로 전달한 로컬삽입메세지
PIC.local2virt 로컬버추얼도메인상의 주소로 전달한 로컬삽입메세지
PIC.nullclient 널클라이언트에 삽입한 메세지
PIC.relaybad 로컬호스트를 중계로 사용하는 시도의 실패
PIC.relaygood 로컬호스트를 중계로 사용하는 시도의 성공
PIC.rem2local SMTP를 통해 받은 로컬사용자에로의 메세지

이 파일들은 http://www.qmail.org/man/index.html에서 온라인으로 구할 수 있습니다.

큐메일의 진짜사진을 원하신다면, Andre Opperman의 "대형큐메일사진"을 http://www.nrg4u.com/에서 보십시오.


A.5. 드문 (어쩌다 한번씩 묻는) 질문들

이것들은 자주 묻지는 않지만 중요하고 대답하기도 쉽지 않은 질문들입니다.


A.5.1. 큐메일은 지연메세지를 어느 정도 자주 보냅니까?

메세지마다 재시도시간표가 있습니다. 메세지가 전달불능으로 오래 있을수록, 큐메일은 그것을 덜 자주 보내려고 합니다. 재시도시간표는 설정할 수 없습니다. 다음 테이블은 원격수신자에게 가는 전달불능인 메세지가 바운스될때까지의 재시도시간표를 보여줍니다. 로컬메세지는 비슷하지만, 더 잦은 시간표를 사용합니다.

표 A-5. 전달시도시간표

전달시도날-시:분:초
1 S00-00:00:00
24000-00:06:40
316000-00:26:40
436000-01:00:00
564000-01:46:40
6100000-02:46:40
7144000-04:00:00
8196000-05:26:40
9256000-07:06:40
10324000-09:00:00
11400000-11:06:40
12484000-13:26:40
13576000-16:00:00
14676000-18:46:40
15784000-21:46:40
16900001-01:00:00
171024001-04:26:40
181156001-08:06:40
191296001-12:00:00
201444001-16:06:40
211600001-20:26:40
221764002-01:00:00
231936002-05:46:40
242116002-10:46:40
252304002-16:00:00
262500002-21:26:40
272704003-03:06:40
282916003-09:00:00
293136003-15:06:40
303364003-21:26:40
313600004-04:00:00
323844004-10:46:40
334096004-17:46:40
344356005-01:00:00
354624005-08:26:40
364900005-16:06:40
375184006-00:00:00
385476006-08:06:40
395776006-16:26:40
406084007-01:00:00

A.5.2. 저는 MX가 많은 대형사이트에 매일을 보내지 못하는데 왜그렇죠?

다음의 메세지를 받는다면,

deferral: CNAME_lookup_failed_temporarily._(#4.4.3)/

문제는 큐메일이 대형네임서버질의응답을 처리하지 못해서입니다. 패치를 설치해서 고칩니다. 고급주제에서 패치를 보시기 바랍니다.

어떤사람은 이런시스템에 닿는데 문제가 없는데 왜그러냐고 질문할 수도 있습니다. 원래, 타이밍과 로컬네임서버에 한 질의순서에 의거하여, "aol.com"에 대한 '아무런' 질의에 대한 응답크기가 UDP패킷한계인 512바잇보다 클 수도 있고, 그렇지 않을 수도 있습니다.

A와 MX레코드가 시간초과하면 "그럴수도" 있지만, NS레코드는 그렇지 않습니다. .COM서버는 2틀의 수명시한 (TTL)을 설정해놓지만, AOL은 레코드에 1시간의 수명시한을 설정해놓으므로, 덜바쁜 네임서버에서 이러한 일이 종종 일어납니다. 더바쁜 네임서버는 특정시간에 그 레코드들은 캐쉬에 갖고 있기 때문에 패치하지 않은 큐메일이 CNAME을 점검하려는 시도를 무색하게 합니다.

더좋은 시험은 nosuchuser@large-mx.ckdhr.com으로 메일을 보내는 겁니다. 그 서버가 당신의 큐를 청소하고, ckdhr.com에서 바운스하는 것으로 끝나면, 당신의 MTA는 512바잇을 넘기는 MX 리스트를 갖는 호스트로 메일을 보낼 수 있습니다. (단일 수명시한이며 512바잇을 넘기는 단일 RRset을 사용해서, 이문제를 다른 질의의 타이밍과 순서에 의지하지 않고 볼 수 있습니다.)


A.5.3. QUEUE_EXTRA?

컴파일시설변수로서 매전달에 추가하는 추가수신인을 적습니다. 본래 로깅하려고 사용합니다. 예를 들면, FAQ에는 QUEUE_EXTRA를 써서 드나는 메세지를 전부 보관하는 방법을 설명합니다.

QUEUE_EXTRA를 사용하려면, extra.h를 편집해서 "T수신인\0"형식으로 수신인을 추가하고, QUEUE_EXTRALEN에 QUEUE_EXTRA의 길이를 적습니다. ("\0"은 한 문자로 계산됩니다.) 예를 들면 다음과 같습니다.

#define QUEUE_EXTRA "Tlog\0"  
#define QUEUE_EXTRALEN 5	   

큐메일이 운행중이면 중지시킵니다. 설치항목의 큐메일스크립트를 설치하셨으면, 다음과 같이 하십시오.

qmailctl stop

큐메일스크립트가 없으시면, 기동/중지 스크립트를 사용하시든지, TERM신호를 qmail-send에 보내십시오.

그다음에 다음과 같이 해서 큐메일을 재컴파일하십시오.

make setup check

원하시는 대로 ~alias/.qmail-log을 채우십시오. 예를 들어, Message-ID를 록하려면 다음과 같이 합니다.

| awk '/^$/ { exit } /^[mM][eE][sS][sS][aA][gG][eE]-/ { print }'

끝으로, 큐메일을 재가동합니다.


A.6. 에러메세지

큐메일에러메세지와 그 의밉니다. 괄호안의 에러코드에 관한 설명은 RFC 1893을 보십시오. 이 부록은 완전하지 않습니다.

qmail-local

  • "Unable to fork: reason. (#4.3.0)"

  • "Unable to read message: reason. (#4.3.0)"

  • "Unable to open filename: reason. (#4.3.0)"

  • "Temporary error on maildir delivery. (#4.3.0)"

  • "Unable to open filename: reason. (#4.2.1)"

  • "Unable to write filename: reason. (#4.3.0)"

  • "Unable to run /bin/sh: reason. (#4.3.0)"

  • "Unable to stat home directory: reason. (#4.3.0)"

  • "Unable to switch to directory: reason. (#4.3.0)"

qmail-smtpd

  • "555 syntax error (#5.5.4)"

qmail.c

  • "Zqq write error or disk full (#4.3.0)"

  • "Zqq read error (#4.3.0)"

spawn.c

  • "Internal error: delnum negative. (#4.3.5)"

  • "Internal error: delnum too big. (#4.3.5)"

  • "Internal error: delnum in use. (#4.3.5)"

  • "Internal error: messid has nonnumerics. (#5.3.5)"

  • "Internal error: messid too long. (#5.3.5)"

  • "Internal error: messid too short. (#5.3.5)"


A.7. 의외의 실수

큐메일신참자는 다음과 같은 문제들을 자주 만납니다.


A.7.1. 큐메일은 수퍼유저에게 메일을 전달하지 않습니다.

qmail-local이 특권사용자로서 명령을 실행하는 가능성을 막기위해서, 큐메일은 UID가 0인 모든 사용자를 무시합니다. 이것은 qmail-getpw 맨페지에 설명되어 있습니다.

그렇다고 큐메일이 root@example.com에 전달하지 않는다는 것은 아니고, 다만 전달은 비특권사용자에 의해 처리되어야 한다는 것입니다. 으례, ~/alias/.qmail-root을 채워서 root에 대한 앨리어스를 만듦니다.


A.7.2. 큐메일은 홈디렉토리가 없는 사용자에게 메일을 전달하지 않습니다.

또하나의 보안특징이고, 좋은 습관입니다. qmail-getpw맨페지에 설명되어 있습니다.


A.7.3. 큐메일은 사용자이름에 대문자를 쓰는 사용자에게 메일을 전달하지 않습니다.

큐메일은 주소에서 "@"의 왼쪽에 있는 모든 것인 "로컬부분"을 소문자로 변환합니다. 맨페지에는 설명되어 있지 않지만, 코드는 그렇게 합니다. 대문자를 갖는 사용자를 무시한다는 사실은 qmail-getpw맨페지에 기록되어 있습니다.


A.7.4. 큐메일은 홈디렉토리에 그룹이나 기타사용자에게 쓰기를 허락하는 사용자에게 메일을 전달하지 않습니다.

또하나의 보안특징입니다. qmail-local맨페지에 설명되어 있습니다. 컴파일시 conf-patrn 컴파일 컨피그파일을 통해서 재지정할 수 있습니다.


A.7.5. 큐메일은 확장주소의 점(.)을 콜론(:)으로 바꿉니다.

또하나의 보안특징입니다. 확장주소가 파일트리를 ".."로 백업하는것을 막는 것이 목적입니다. 콜론으로 바꾸기 때문에, 큐메일은 사용자의 .qmail파일 모두가 홈디렉토리에 있게 합니다. qmail-local맨페지에 기록했습니다.


A.7.6. 큐메일은 확장주소의 대문자를 소문자로 바꿉니다.

큐메일은 주소의 로컬부분을 모두 소문자로 만든다는 또하나의 사실입니다. qmail-local맨페지에 설명했습니다.


A.7.7. 큐메일은 /etc/hosts를 사용하지 않습니다.

큐메일은 호스트네임이 있는 IP주소를 결정하기 위해서 /etc/hosts를 사용하지 않습니다. control파일에 있는 이름을 사용하면, 큐메일은 네임서버에 접근할 수 있어야 합니다.

그래도 네임서버에 접근할 수 없는 시스템에서도 큐메일을 운영할 수 있습니다. control파일에 있는 호스트는 IP주소로 적을 수도 있는데, 대괄호 ([])로 둘러싸야 합니다. 예를 들면 다음과 같습니다.

[10.1.2.219]
사실, 대괄호가 언제나 필요하지는 않지만, 사용해야 좋은 방법입니다.


A.7.8. 큐메일은 SMTP활동을 록하지 않습니다.

여러 이유로 해서, 큐메일은 SMTP접속, 거절, 무효명령, 또는 유효명령 등을 록하지 않습니다. tcpserver로 접속을 록할 수 있고, recordio로 SMTP대화 전부를 록할 수 있습니다. recordio는 ucspi-tcp패케지의 일부입니다. 절차는 http://cr.yp.to/qmail/faq/servers.html#recordio의 FAQ에 설명되어 있습니다.


A.7.9. 큐메일은 지연통지를 만들지 않습니다.

Sendmail은 수시간내에, 통상 4시간내에, 메세지를 전달할 수 없으면, 작성자에게 지연통지를 보냅니다. 이 통지는 바운스메세지같아 보입니다만, 아직 전달이 영구실패했다는 것을 가리키지는 않습니다.

큐메일은 이런 경고를 보내지 않습니다. 전달불능메세지는 큐에서 큐수명시간을 다 보낸다음에야만 작성자에게 돌려집니다.


A.7.10. 큐메일은 /var/qmail/queue/lock/trigger가 틀린접근권한이거나 보통파일이면 늦어집니다.

qmail-queue와 qmail-send는 /var/qmail/queue/lock/trigger라는 네임파잎은 통해서 의사소통합니다. 이 파잎이 엉망이 되면, qmail-send는 반시간정도 새메세지를 통보하지 않습니다.

올바르게 설치되었다는 것을 확신하는 가장 좋은 방법은 소스디렉토리에서 "make check"을 실행하는 것입니다. 그것이 가능하지 않다면, 다음과 같은 지 확인하십시오.

# ls -l /var/qmail/queue/lock/trigger 
prw--w--w-   1 qmails	 qmail			 0 Jul	5 21:25 /var/qmail/queue/lock/trigger

줄의 앞에 (네임파잎을 알리는) "p", 모드 (특히 전체쓰기허가), 소유자와 그룹 등에 각별히 유의해 보시기 바랍니다.


A.7.11. DNS 또는 IDENT를 찾느라고 SMTP가 느려질 수도 있습니다.

qmail-smtpd가 접속반응이 늦으면, DNS 역참조나 IDENT참조가 문제입니다. tcpserver로 qmail-smtpd를 기동한다면, "-h", "-p", "-r" 등의 옵션을 지우고, "-H", "-P", "-R", "-l 0" (ell zero) 등의 옵션을 붙이십시오.


A.8. lwq에 대한 FAQ

-------------------------------------------------------------

역자주: http://www.faqts.com/knowledge-base/index.phtml/fid/139/lang/en 에서 질의응답을 참고하실 수 있습니다. (05 Apr 2000)

-------------------------------------------------------------


A.8.1. lwq의 버전

LWQ version 2001-09-19.


A.8.2. lwq의 소유자는?

lwq는 Copyright 1999-2001 David E. Sill입니다.


A.8.3. lwq의 라이센스는?

lwq는 OpenContent License version 1.0에 포함됩니다. 완전한 라이센스에 대해서는 http://www.opencontent.org/opl.shtml를 보십시오. 본래, 수정판을 재배포한다면 그판도 OpenContent License에 포함된다는 조건하에 lwq를 복사, 재배포, 수정할 수 있습니다.


A.8.5. lwq공헌자와 팬은 어디서 이야기할 수 있습니까?

lwq-subscribe@sws1.ctd.ornl.gov에 메세지를 보내서 lwq 메일링리스트에 가입하십시오.


A.8.6. lwq는 다른 언어로 번역되었습니까?

lwq를 번역하는데 관심있으시면, 제게 알려주셔서 노력의 중복을 막고, 조화할 수 있게 해주십시오. 또한 제가 SDF소스문서를 번역하시는 분께 드려서, 번역이 SDF로도 될 수 있게 할 수 있습니다. (이것이 왜 중요한 지 다음질문을 보시기 바랍니다.)

또한, lwq를 번역하시는 분들은 lwq메일링리스트에 가입하셔서 (전의 질문을 보십시오.) 번역에 관한 논점을 토론하고 공지사항을 만들 수 있도록 하시길 권장합니다.


A.8.8. lwq를 사용했더니, 시스템파괴, 하드디스크삭제, 백발을 했습니다.

죄송합니다. 정말이지 미안합니다. 그렇지만 lwq는 어떤 보증도 없습니다. 위에서 말씀드린 OpenContent License를 보시기 바랍니다. 저는 이것을 쓴다고 해서 어떤 보상을 받지 않았고, 다만 큐메일공동체에 무언가 유익한 것을 공헌하고 싶었을 뿐입니다.

사실, 이것은 FAQ가 아닙니다. 진짜로는, 이것이 NAQ (Never Asked Question)이길 바랍니다.


A.8.9. lwq에 공헌하고 싶습니다.

제가 lwq에 넣고 싶을 만큼 좋은 지, 그리고 다른 사람이 이미 그것을 하고 있지 않은 지 등을 lwq@sill.org로 정정, 권고, 불만 등을 보내주십시오.

항목을 더 나누거나, 부록을 새로 더하고자 하는 등, 더 크게 도우시겠다면, 좋습니다. 다만, 먼저 저하고 검토해 주시기 바랍니다.

돈을 내신다면 언제든지 좋습니다. :-) 저에에 연락하셔서 준비하시던지 PayPal 지불수단을 이용하시기 바랍니다. PayPal로 하시면 paypal@dave.sill.org 이 주소로 이머니를 쏩니다. 금액은 $0.01정도로 서로 부담이 없는 금액이면 됩니다. 신용카드도 쓸 수 있어요. 요기를 눌러서 사인해주시면 제가 보너스를 받을 수도 있어요.

돈안내고 lwq를 돕는 다른 방법은 요기에서 쇼핑하면 됩니다.

[하나 받으십시오!]




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-03-05 00:27:05
Processing time 0.0162 sec