큐메일과 삶Life with qmail (줄여서: lwq)Mr . Dave Sill윤주영문서작성과 번역에서 잘못된 부분이 있으면 제게(윤주영) 이메일로 알려주시면 고치겠습니다. 큐메일 자체는 설치하기가 쉽지만, 큐메일을 처음 설치운영하려는 분들에게는 설치와 운영에서 좀 헷갈리는 부분이 있습니다. 그런 분들은 큐메일 프로그램에 포함되어 있는 설치문서와 FAQ를 참조해서 우선 큐메일만 설치 운영해 본 다음에 ucspi-tcp와 daemontools 등 큐메일을 운영하기 위한 추가프로그램을 같이 설치하는 과정을 설명한 본 문서를 참조하시어 다시 설치하면 좋습니다. 지금까지 MTA로 sendmail이 거의 독보적 위치를 차지하고 있고, 사실상의 표준입니다. 하지만, sendmail은 덩치가 매우 크고, 단일프로그램이며, 설치 및 설정이 어렵다는 단점이 있습니다. 큐메일은 모듈 방식으로 구성되어 있고, 설치와 설정이 쉬우며, 특히 보안에 많은 강점을 지니고 있습니다. 큐메일과 삶의 원제는 Life with qmail이며 본 문서는 이메일 MTA중 하나인 qmail을 설치하고 운영하는 방법을 설명합니다. 큐메일에는 여러 사람이 만든 모듈로 이루어져 있지만, 여기서는 꼭 필요한 프로그램들만 설명하므로 큐메일을 시작하는 분들께는 편하고 쉬운 안내가 될 것입니다. 원문은 여기 또는 요기를 참조하시면 됩니다.
1. 소개1.1. 대상독자「큐메일과 삶」 (Life with qmail, 이하 lwq라고 줄여서 부름)은 남는 PC에 Linux를 이제 막 설치한 일반 리눅스 초보자부터 경험이 많은 시스템 관리자 또는 메일 서버 관리자에 이르기까지 큐메일을 운영하고자 하는 모든 사람을 대상으로 쓰여졌습니다. 글을 보시면서 빠지거나 불분명한 점들은 lwq (at) sill.org로 알려주십시오. 큐메일에 대한 문서는 이미 많이 널려있습니다. 신참자들을 대상으로 하는 것들도 있고, 경험이 많은 독자를 대상으로 하는 것들도 있습니다. lwq는 독자가 최소한 다음의 기술을 갖추고 있다는 가정 하에, 이미 있는 문서들이 다루지 않은 중간 부분을 매우고, 합쳐서 하나의 문서로 만들고자 하는 목적으로 쓰여졌습니다.
1.2. 큐메일이란?큐메일은 유닉스류 운영체제의 인터넷 Mail Transfer Agent (MTA)으로, 대부분의 UNIX류 운영체제가 제공하고 있는 Sendmail시스템을 대체하는 소프트웨어입니다. 큐메일은 Simple Mail Transfer Protocol (SMTP)을 이용해서 다른 시스템의 MTA와 메세지를 교환합니다.
1.3. qmail의 장점?당신의 운영체제에도 Sendmail같은 MTA가 있을 겁니다. 그런데, 지금 이문서를 읽고 있다면, 아마 더 MTA를 찾고 있는 것이겠죠? 큐메일이 다른 vendor가 제공하는 MTA보다 더 좋은 장점은 다음과 같습니다. 1.3.1. 안전성높은 보안수준을 염두에 두고 설계되었습니다. Sendmail의 보안은 오랫동안 심각한 문제였습니다. Sendmail이 처음 만들어졌을때의 인터넷은 훨씬 더 친밀한 동네였습니다. 누구나 서로를 알았고, 때문에 보안을 고려하며 설계하거나 코딩할 필요가 없었습니다. 오늘날 인터넷은 네트워크 서버들에게 너무나도 적대적인 공간이 되어 버렸습니다. Sendmail을 만든 Eric Allman과 현재의 메인테이너인 Claus Assman도 Sendmail이 더 안전하도록 만들었지만, 진짜로 안전하게 만들려면 다시 설계하는 수 밖에 없었습니다. 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.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.6. 관련 팩키지큐메일은 한 개의 툴은 잘 정의된 단일 기능을 완수하며, 복잡한 기능은 여러 개의 단일 툴들이 파이프 라인으로 연결하여 만들어 진다는 전통적인 유닉스 철학을 따릅니다. 다른 방법에서는 복잡하고 복잡한 툴들을 만들어서 간단한 툴들의 많은 기능을 재구성합니다. 이것을 이해했다면, 큐메일이 자체로는 우리가 원하는 모든 기능을 할 수 없다는 것은 놀라운 일이 아닐 것입니다. 여기 큐메일에 붙어 동작하는 다음과 같은 인기있는 add-on들이 있습니다. 물론 큐메일에는 다른 표준 유닉스 유틸리티들도 붙여서 사용할 수 있습니다.
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들 비교
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. 큐메일 맨페이지
그러면, "man qmail항목"이라고 하면 해당 man page를 보여줍니다. http://www.qmail.org/man/index.html에서 HTML형식으로 온라인상에서도 man page를 참고할 수 있습니다.
1.10.2. Docs큐메일 배포판은 /var/qmail/doc에 다음 문서들을 설치하여 제공합니다.
이 문서들을 아래 주소에서 온라인으로도 보실 수 있습니다. 1.10.4. 책1.10.4.1. The qmail Handbook큐메일과삶의 저자인 Dave Sill이 Apress출판사에서 큐메일에 대한 책을 냈는데 2001년 10월 21일에 구입가능합니다. 이 qmail Handbook이란 책은 본 가이드에 있는 내용 모두를 다루고, 더 깊고 새로운 내용도 담고 있습니다. 1.10.4.2. qmailJohn Levine 께서 O'Reilly & Associates출판사에서 qmail이란 책을 쓰고 계시고 올해말쯤에 구입가능합니다. O'Reilly는 컴퓨터관련출판에서는 탁월한 명성을 갖고 있습니다. 1.10.4.3. Running qmailRichard 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으로 관리하는데, 주소별로 각각의 기능을 담당합니다.
예로서 joe@example.com와 같이 가입(해제)주소를 적으시려면 다음과 같이 주소를 만들어 보냅니다.
1.11.1.1. 큐메일주요 큐메일 메일링리스트. serialmail을 빼고는 큐메일에 관련된 모든것에 관한 토론과 질문과 대답. 질문을 보내시기 전에 FAQ를 읽으시고, 메일링리스트아카이브를 뒤지시기 바랍니다. 질문을 하실때에는 다른 사람이 답해줄 수 있도록 다음과 같은 충분한 내역을 포함하시기 바랍니다.
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. 준비큐메일을 시스템에 설치하기 전에, 특히 큐메일 설치가 처음이라면, 몇가지 고려할 사항이 있습니다.
2.3. 시스템 요구사항큐메일은 대부분의 유닉스와 유닉스류 시스템에 설치되고 운영됩니다만 몇가지 요구사항이 있습니다.
2.4. 소스를 받으십시오.오우케이, 이제 큐메일을 설치할 수 있도록 필요사항에 맞는 시스템을 준비하셨군요. 첫번째 단계는 큐메일과 다른 앳온의 소스코드를 다운로드하는 것입니다. 큐메일은 당연히 필요하고요, ucspi-tcp와 daemontools도 필요할 것입니다.
웹브라우저나 FTP 클라이언트를 이용해서 이 파일들을 가져오세요.
2.5. 소스를 컴파일하세요.2.5.1. 컴파일환경을 검증하세요.첫번째 할일은 프로그램을 컴파일하기에 필요한 툴을 갖추었는 지 확인합니다. 이것은 사용하는 유닉스종류에 따릅니다. 말씀드릴 수 있는 가장 쉬운 방법은, 보장되지는 않지만, 해보는 겁니다.
답이 비슷하게 나오면, C 컴파일러가 경로에 있는 것입니다. 그렇지 않더라도, 설치되어 있지 않다는 것은 아닙니다. 설치되어 있을 지 모르지만, 경로에 포함되어 있지 않을 수도 있습니다. 물론, 설치되어 있지 않을 수도 있습니다. 이렇게 해보세요.
소용이 없으면, 플랫폼 특성에 맞는 방법으로 하셔야 합니다. 프롬프트에서 다음 중 하나를 하시는데, 사용중인 OS에 따르셔야 합니다.
이번 항목에서는 큐메일을 실제로 컴파일하는 단계를 거칩니다. 오려붙이기가 간편하지만, 그렇게 필요하지는 않습니다. 2.5.2. 배포판을 풉니다.여기까지 오셨으면, 이미 C 컴파일러와 tarball을 준비하신 겁니다. 타볼을 작업하실 디렉토리로 복사하거나 옮기세요. qmail과 ucspi-tcp는 /usr/local/src가 좋고, daemontools는 /package로 하셔야 합니다. 아직 루트가 되지 않으셨으면, 이제 루트가 되셔야 합니다.
이제 패케지들을 풉니다.
/usr/local/src/qmail-1.03, /usr/local/src/ucspi-tcp-0.88, /package/admin/daemontools-0.76 등의 디렉토리가 생깁니다. qmail-1.03 디렉토리로 가시면 시작하겠습니다.
2.5.3. 디렉토리를 만듭니다.필요한 섭디렉토리는 큐메일 설치 프로그램이 만들므로, 큐메일 홈디렉토리만 만들어 주면 됩니다.
그러면 다음 항목으로 갑니다.
2.5.4. 사용자와 그룹을 만듭니다.필요한 사용자와 그룹을 만드는 가장 쉬운 방법은 작은 스크립트를 만들어서 하는 것입니다. 소스디렉토리에 INSTALL.ids 파일이 있습니다. 거기에는 여러 프랫폼에 해당하는 명령행이 있는데, 그 파일을 다른 이름으로 복사해서 편집하면 빠르고 쉽습니다.
좋아하시는 에디터로 필요한 행을 빼고 다 지웁니다. 예를 들면, 편집후에 FreeBSD에 대한 IDS는 다음과 같습니다.
실행하려면, chmod를 써서 실행파일로 만드시거나 sh로 실행하십시오. 첫번째 방법:
두번째 방법:
스크립트의 실행이 완료되어 사용자와 그룹이 생기면 다음항목으로 갑니다. 그러나, INSTALL.ids에 해당 시스템이 없으면 어쩝니까? 수동으로 그것들을 만들어야 합니다. 좋아하는 에디터를 사용해서 /etc/group을 편집하세요. 다음 두 줄을 그 파일끝에 첨가하십시오.
다음으로는, vipw를 이용해서 다음 줄들을 그 파일의 끝에 붙이십시오. (대부분의 시스템에 vipw가 있지만, 없으면 에디터로 /etc/passwd를 편집합니다.)
이런 것들을 해당파일의 끝에만 첨가해야 하는 것은 아니지만, 그래야 설명하기가 제일 쉽습니다. 다음 항목으로 가실 준비가 되셨군요. 2.5.5. 컴파일을 하세요.이제 큐메일을 컴파일을 시작하셔도 됩니다. 컴파일환경을 검증한다항목에서, C 컴파일러를 지정하셨습니다. 그것이 cc가 아니거나 디렉토리가 PATH환경변수에 있지 않으면 conf-cc와 conf-ld를 편집하십시오. 컴파일러가 gcc이고, PATH에 있다고 하면, conf-cc와 conf-ld를 가볍게 편집하고, cc를 gcc로 바꾸십시오. 그렇게 하셨으면 명령행 프롬트에 다음과 같이 하세요.
컴파일이 끝나면, 설치후설정을 하셔야 합니다. 이 일을 쉽게 해주는 스크립트가 두어개 있습니다. DNS가 제대로 설정되었다면, 다음 스크립트를 실행하기만 하면 됩니다.
어떤 이유로 config가 DNS에서 hostname을 찾지 못하면, config-fast script를 실행하셔야 합니다.
예를 들면, 도메인이 example.com이고, 당신컴퓨터의 호스트네임이 dolphin이라면, config-fast를 다음과 같이 실행합니다.
큐메일이 시스템에 설치되어서 가동될 준비가 되었습니다! 다음항목은 큐메일을 가동하고 시험하는 단계를 안내합니다. 2.6. ucspi-tcp를 설치합니다.먼저번에 qmail, ucspi-tcp, daemontools 타볼을 풀었습니다. 예제에서 그것들을 /usr/local/src/qmail에 풀었습니다. 자 ucpsi-tcp디렉토리로 옮깁시다.
'컴파일을 하세요'항목에서, conf-cc와 conf-ld를 고치셨으면, 이 디렉토리에서도 똑같이 해줍니다. 그런뒤에 다음과 같이 하십시오.
2.7. daemontools를 설치합니다.daemontools 컴파일디렉토리로 이통합니다.
또 한번, conf-cc와 conf-ld를 qmail과 ucspi-tcp 컴파일시 고쳤으면, 이 디렉토리에서도 똑같이 합니다. 그리고 다음과 같이 합니다.
(/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를 이용하기, 그리고 이것들의 다양한 결합. 한번 부담없이 검토해보시기 바랍니다. 우리는 설치를 위해서 다음을 이용하겠습니다.:
에디터로 위의 내용을 /var/qmail/rc로 만드시고, 다음과 같이 명령합니다.
이쯤에서, .qmail파일이 전달하지 못하는 메세지들에 대한 기본전달모드를 결정해야 합니다. 다음의 테이블에 몇가지 공통선택이 간략히 예시되어 있습니다. 표 3. 공통선택사항
정보를 더 원하시면 INSTALL.mbox, INSTALL.maildir, INSTALL.vsm 등을 보십시오. 기본 메일복스 형태를 고르시려면, 위의 테이블의 defaultdelivery 값을 /var/qmail/control/defaultdelivery에 적어넣으십시오. 예) 표준 큐메일 Mailbox 전달을 선택하시려면 다음과 같이 합니다.
2.8.2. 시스템 기동 파일2.8.2.1. qmailctl 스크립트
/var/qmail/rc 스크립트를 수동으로 실행하셔야 하면, 큐메일은 부분가동합니다. 그러나, 우리는 큐메일이 시스템이 부팅할때마다 자동으로 가동하기를 원하고, 시스템이 정지할 때는 깨끗하게 꺼지기를 원합니다. 이것은 startup/shutdown스크립트를 다음과 같이 작성하면 됩니다.
이 스크립트는 http://www.lifewithqmail.org/qmailctl-script-dt70에서도 구할 수 있습니다. 에디터로 스크립트를 만들거나 웹브라우저로 다운로드 (권장사항)해서 시스템의 init.d 디렉토리에 설치하는 과정을 설명하겠습니다. 우선, 다음같이 해서 /var/qmail/bin/qmailctl 로 만듭니다. 에디터를 이용해서 직접 스크립트를 만들 때:
다음으론, 시스템의 init.d디렉토리에 설치하시는데, 다음과 같은 장소가 됩니다.
해당 rc 디렉토리가 /etc/init.d라고 하면 다음과 같이 합니다.
모든 시스템이 다음을 행하여 qmailctl 스크립트를 실행가능하게 하고, path에 연결합니다.
다음에는 스크립트를 몇개의 rc디렉토리에 링크시키셔야 합니다. 이 데렉토리들은 rcN.d같이 되어있는데, N은 적용 runlevel입니다. 기동디렉토리 구조가 복잡해서 본 문서에는 다루지 않습니다. 그러니 간단한 지시사항이 맘에 차지 않으시면 시스템문서를 참조하십시오. rc 디렉토리는 다음중 하나일 겁니다.
링크를 만드시는데, 다음과 같이 하십시오. RCDIR를 시스템의 rc 디렉토리의 장소로 바꾸십시오.
2.8.2.2. 감독 스크립트들이제 큐메일서비스를 위해 감독디렉토리를 만드십시오.
/var/qmail/supervise/qmail-send/run파일을 만드십시오.
/var/qmail/supervise/qmail-send/log/run파일을 만드십시오.
/var/qmail/supervise/qmail-smtpd/run파일을 만드십시오.
concurrencyincoming 파일을 다음과 같이 만듭니다.
/var/qmail/supervise/qmail-smtpd/log/run파일을 만드십시오.
run파일들에 실행가능을 부여합니다.
그런 다음에, 로그디렉토리를 만듭니다.
끝으로, 감독디렉토리들을 /service로 연결합니다.
2.8.2.3. SMTP 접근 프로토콜로컬호스트가 SMTP를 통해서 메일을 삽입 (inject)하도록 합니다.
2.8.3. 기존에 설치된 MTA를 멈추고 무력하게 합니다.큐메일과 현존하는 MTA, 대개 Sendmail, 두개를 사용할 수도 있지만, 그렇게 하지 않을 것을 강력히 권고합니다. 그리고, 솔직히 말해서, 이 글을 읽고 계신다면, 그게 무엇을 뜻하는 지 모르실 겁니다. :-) 현존 MTA가 Sendmail이라면, init.d 스크립트를 stop인수를 주어 실행하여 멈출 수 있습니다. 예) 다음 중 하나가 유효할 겁니다.
init.d/sendmail 스크립트를 찾을 수 없다면, "ps -ef|grep sendmail" 또는 "ps waux|grep sendmail"을 사용해서 sendmail의 PID를 알아낸 뒤에, 다음과 같이 해서 멈춥니다.
MTA가 Sendmail이 아니면, 해당문서에서 바른 멈춤 절차를 참고하십시오.
시스템에서 기존의 MTA를 완전히 제거하는 것도 고려해볼 만합니다. 적어도 init.d 스크립트를 무력하게 하면 시스템이 재부팅할 때 다시는 가동하지 않습니다. 레드햇리눅스에서는 다음과 같이 해서 Sendmail을 제거합니다.
끝으로, 기존의 /usr/lib/sendmail을 큐메일판으로 바꿉니다.
끝단계는 시스템앨리어스를 두어개 만드는 것입니다. 2.8.4. 시스템앨리어스를 만듭니다.모든 큐메일설치에서는 시스템앨리어스를 세개 만들어야 합니다. 표 4. 앨리어스들
이 앨리어스들을 만들려면, 그것들 하나하나가 어디에 놓여져야 하는 지 (로컬사용자, 또는 원격주소) 결정하고, .qmail파일을 만들어서 갖다놓으면 됩니다. 예를 들어, 로컬사용자 dave는 시스템과 메일의 애드민이라고 하면 다음과 같이 합니다.
INSTALL.alias에서 더 자세하게 보세요. 2.9. 설치를 시험합니다.큐메일이 지금쯤 운행하고 있을겁니다. TEST.deliver, TEST.receive에 있는 지시사항을 따르면 제대로 작동하고 있는 지 검사할 수 있습니다. 이들 지시사항을 이용하면, 로그는 splogger가 아닌 multilog가 만든다는 것을 알아두십시오.
3. 설정권장 소스타볼 방법이나, 자동컴파일 패케지로부터 큐메일을 설치하셨습니다. 이번 항목에는 메일애드민이나 시스템애드민이 자기가 원하는 대로 큐메일을 운영하기 위해 큐메일을 설정하는 데 필요한 정보가 있습니다. 3.1. 설정파일모든 큐메일 시스템설정파일은 ~alias에 있는 .qmail파일을 빼고는 모두 /var/qmail/control에 놓여져 있습니다. qmail-control 맨페지에는 다음과 같은 테이블이 있습니다. 표 5. 설정파일 특정 컨트롤 파일에 대해 정보를 더 원하시면, "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에 다음을 첨가하십시오.
그리고나서 SMTP 접근권한 데이터베이스를 재컴파일하십시오.
공식설치지시사항을 따랐다면, Chris Johnson이 큐메일이 특정호스트에게만 릴레이를 허용하도록 설정하는 방법을 적으셨으니 http://www.palomine.net/qmail/selectiverelay.html를 참고하도록 하십시오. 3.3. 다중 호스트네임한 호스트의 이름이 둘 이상이면, 예를 들어서 user@host1.example을 user@example.com이나 user@mail.example.com 등으로 적을 수 있다면, 큐메일에 이런 내용을 알려서 어떤 주소를 내부로 전달할 지, 원격시스템에서 어떤 메세지를 받을 지 등을 알게 합니다. 그렇게 하려면, 통제파일 두 개에 모든 이름을 첨가하기만 하면 됩니다.
3.4. 버츄얼도메인버츄얼도메인은 전항목에서 말씀드린 다중호스트네임과 비슷합니다만, 중요한 차이점이 몇 개 있습니다. 첫째로, example.net에 virtual.example.com이라는 버츄얼도메인이 있다면, joe@example.net에게 보낸 메세지는 joe@virturl.example.com으로 보낸 메제지와 같은 메일복스에서 끝나지 않아야 합니다. 버추얼도메인에 대한 이름영역(namespace)은 다릅니다. 큐메일에서 버츄얼도메인은 virtualdomains파일에 설정되는데, 다음형식으로 하나 또는 그 이상을 적습니다.
큐메일은 user@domain을 prepend-user@domain으로 바꾸고, domain이 로컬인 것처럼 그 결과를 취급합니다. user@부분은 선택입니다. 생략하면, @domain의 주소 모두에 해당합니다. 위의 example씨나리오를 다시 보면, example.net의 메일애드민이 john이라는 사용자의 관리하에 virtual.example.com이라는 버츄얼도메인을 만들기 위해서는 virtualdomains에 다음과 같이 써넣어야 합니다.
joe@virtual.example.com로 들어오는 메세지는 john-joe@virtual.example.com으로 써지고, 내부에서 전달됩니다. john이 어떻게 버츄얼도메인을 관리하는 지 .qmail항목의 주소연장 부항목을 보시기 바랍니다.
다중호스트네임과 같이 모든 버츄얼도메인은 rcpthosts에 리스트되어서 qmail-smtpd가 그 주소로 된 메세지들을 받아들이게 합니다. 그렇지만, 다중호스트네임과 틀린점은 버츄얼도메인을 locals에 첨가해서는 안됩니다
3.5. 앨리어스큐메일에서 로컬전달기술이 표준앨리어스기술로 자연히 발전했습니다. qmail-local은 localpart@host을 주소로 하는 메세지를 localpart라는 이름의 로컬사용자에게 전달하려고 합니다. 맞는 사용자가 없으면 메세지는 전체 큐메일시스템에서 /var/qmail/alias가 홈디렉토리이고 사이비사용자인 앨리어스 사용자에게 전달됩니다. 예를 들어 메세지를 tom에게 회송하는 info@example.com 앨리어스를 만들고자 한다고 합시다. example.com에서 룻사용자로서 다음과 같이 합니다.
.qmail항목과 주소연장부항목에서 앨리어스를 지정하는 .qmail파일을 어떻게 만들고, 전달되는 메세지로 무엇을 해야 하는 지 설명합니다. 큐메일에서 앨리어스가 실행되는 방식때문에 앨리어스가 정당한 사용자 전달을 무시할 수는 없다는 것을 유의하십시오. 예) rachel이 정상 사용자라면 ~alias/.qmail-rachel 은 안됩니다. fastforward패케지는 Sendmail의 앨리어스 데이터베이스와 호환하는, 단일파일에 다수앨리어스를 적는 대체가능 앨리어스기술을 제공합니다. 다음의 qmail-users항목에서 앨리어스를 실행할 수 있는 다른 기술을 설명합니다. 3.6. qmail-usersqmail-users는 사용자에게 주소를 배정하는(나눠주는, 부여하는) 시스템입니다. 설정파일들이 /var/qmail/users/에 놓입니다. assign은 곧 할당테이블입니다. 단순배정과 wildcard 방법 등 두 종류의 할당이 있습니다.
3.6.1. 단순배정단순배정은 다음과 같습니다.
address로 받은 메세지는 지정 uid와 gid를 지니고 user사용자로 작동하는데, directory/.qmaildashextension파일에 메세지를 어떻게 전달해야 하는 지를 규정한다는 뜻입니다. 3.6.2. 와일드카드 배정와일드카드 배정은 다음과 같습니다.
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는 변환규칙을 고치는데 파일 몇개를 사용합니다.
4. 사용법이 항목에서는 보통사용자가 큐메일을 사용하는 법을 다룹니다. 큐메일시스템에서 메일을 읽거나 보낸다면, 어떻게 큐메일을 이용하는 지를 여기서 알게 됩니다. 4.1. .qmail파일들사용자메일의 전달은 대개 하나 이상의 (dot kyoo mail 로 발음하는) .qmail파일들이 통제하는데, 이것들은 사용자 홈디렉토리에 .qmail로 시작하는 이름으로 되어있습니다. dot-qmail맨페지에 .qmail파일 사용법을 설명해 놓았습니다. .qmail파일에는 전달지시사항이 한 줄에 하나씩 들어있습니다. 줄의 처음문자는 전달방법을 결정합니다. 표 6. 전달지시사항
4.1.1. 프로그램전달프로그램전달지시를 만나면 큐메일은 셸(/bin/sh)을 가동해서 명령을 실행하는데, 들어오는 메세지를 복사해서 명령에 표준입력으로 넣습니다. qmail-command맨페지에 이 절차를 자세히 설명해 놓았습니다. 프로그램전달은 매우 강력하고 매우 넓은 기능을 구현할 수 있는데, 메세지필터링, 메세지에 자동으로 답하기, procmail 과 같은 제3자 전달자를 통해 전달하는 것등입니다. 예)
이렇게 하면 큐메일은 preline을 가동해서 /usr/ucb/vacation과 djb를 인수로 주고, 메세지복사본을 표준입력으로 제공합니다. 4.1.2. mbox 전달Mbox는 표준유닉스메일복스형태를 큐메일식으로 부르는 말로서 여러메세지를 단일파일에 저장하고, 메세지에는 "From "줄이 머리에 있습니다. 이 줄은 헤더필드같이 보이지만 아닙니다. 이것은 다만 전달자가 첨가해서 이메일클라이언트에게 해당메세지가 시작하는 곳을 알게할 뿐입니다. 예:
이렇게 하면 "From "줄을 앞에 붙여서 $HOME/Mailbox에 추가합니다. 단일 메세지를 보유한 간단한 mbox메일복스는 다음과 같습니다.
첫줄은 큐메일이 전달하면서 첨가한 것입니다. 4.1.3. maildir 전달"Maildir"는 Dan Bernstein이 mbox형태의 결점을 알리려고 만든 메일복스형태로서, maildir메일복스는 디렉토리로서 여기에는 섭디렉토리가 세개 있는데, new, cur, tmp 등입니다. maildir메일복스에 있는 각 메세지는 상태에 따라 부디렉토리중 하나에 별개파일로 되어있는데, new는 읽지 않은 메세지가, cur는 읽은 메세지가, tmp는 전달중인 메세지가 들어 있습니다. maildir맨페지에 maildir형식에 대해 자세히 설명하였습니다. maildir의 이점중 하나는 다른 전달자가 동시에 업데이트하는 것을 막기위해 하는 록킹을 사용하지 않아도 확실합니다. 이것은 maildir메일복스는 NFS를 마운트한 파일시스템에서 안전하게 사용할 수 있다는 것을 뜻합니다. 예:
이것은 메세지를 maildir형태의 메일복스인 $HOME/Maildir에 저장합니다.
4.1.4. 포워드 전달포워드전달은 명시주소로 메세지를 다시보냅니다. .qmail파일에 명시한 주소는 완전자격이어야 하며, 커멘트필드와 여백이 없어야 합니다. 다음은 틀렸습니다.
다음과 같이 해야합니다.
처음 두개는 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파일이 없으면 전달은 실패하고 메세지는 보낸이에게 되돌려집니다. 4.2. 메세지 보내기메일사용자는 메세지를 보내는 데 있어서 MTA를 보통 직접 사용하지 않습니다. 대체로 Mail User Agent (MUA)인 pine이나 mutt 등을 써서 메세지를 작성하고 보내는데, MUA는 MTA를 호출해서 메세지를 전달합니다. MTA로 메세지를 건네주는 처리과정을 injection이라고 합니다. 대부분의 MTA로 메세지를 inject하는 방법에는 두 가지가 있습니다. Simple Mail Transfer Protocol (SMTP)과 이 목적으로 MTA가 제공하는 프로그램을 이용하는 것입니다. 4.2.1. SMTPMUA는 로컬호스트나 지정한 메일서버에 있는 표준 SMTP포트인 25번 포트로 TCP 연결을 엽니다. 그 다음, MUA와 MTA는 다음과 같이 끝나는 대화중 하나를 합니다.
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프로그램은 다음에 있습니다.
큐메일시스템에서 "ls -l path-to-sendmail"하면 sendmail이 /var/qmail/bin/sendmail로 심볼릭링크되어있슴을 보여줍니다.
큐메일과 같이 제공되는 sendmail 맨페지가 이 프로그램을 어떻게 사용하는 지 설명합니다. 4.2.3. qmail-injectsendmail API외에 큐메일에는 qmail-inject라는 자체 인젝션프로그램이 있습니다. 사실 sendmail은 qmail-inject의 wrapper입니다. API이지만 sendmail은 매우 널리 쓰이므로 더 나은 듯합니다. qmail-inject가 제공하는 큐메일 API는 큐메일을 설치한 시스템에서만 작동하지만, sendmail 인터페스는 거의 어디에나 있습니다. 예를 들면, joe@example.com에게 빈 메세지를 보내려면 다음과 같이 합니다.
4.3. 환경변수큐메일프로그램이 환경변수를 정하거나 사용하기도 합니다. 다음의 테이블에 변수를 열거하고 사용법을 적었습니다. 표 7. 환경변수 5. 고급토픽5.1. procmailprocmail은 많이 쓰는 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파일은 다음과 같습니다.
5.2. POP 그리고 IMAP 서버큐메일은 POP서버와 qmail-pop3d를 포함하지만, 큐메일설치과정으로 설정하거나 설치하지는 않습니다. 다른 POP나 IMAP 등의 서버를 얻을 수 있으면 그것들을 사용해도 되지만, 대부분이 Sendmail용으로 만들어졌으므로 큐메일과 함께 쓰려면 손을 봐야 합니다. 5.2.1. qmail-pop3dqmail-pop3d는 큐메일이 포함하는 POP서버입니다. 매우 좋은 POP서버로서 여러 큐메일사이트가 사용합니다. 모듈기능이고, 대체인증모듈을 통해 복합인증구성을 지원합니다.
5.2.1.1. qmail-pop3d의 구조다음의 세모듈로 구성합니다.
의례 qmail-popup은 POP3포트인 110번 포트를 듣는 inetd나 tcpserver로 움직입니다. 연결을 하면 사용자명과 암호를 대라고 합니다. 그리고서는 checkpassword를 불러서 사용자명과 암호를 검증하고 맞으면 qmail-pop3d를 부릅니다. 5.2.1.2. qmail-pop3d의 설치
5.2.2. qpoppermbox형 메일복스와 동작하는 POP데몬이 필요하면 Qualcomm의 qpopper을 쓰십시오. Vince Vielhaber는 http://www.qmail.org/qpopper2.53.patch.tar.gz에 사용자홈디렉토리의 메일복스와 동작하는 패치를 갖고 있습니다. qpopper는 http://www.eudora.com/freeware/qpop.html에서 구할 수 있습니다. 5.2.4. imap-maildirDavid R. Harris께서 Washington대학의 IMAP서버에 대한 maildir지원을 추가하는 패치를 정리했으며 설치과정을 문서화했습니다. http://www.davideous.com/imap-maildir/를 보십시오. 5.3. POP와 IMAP 클라이언트5.3.1. fetchmailPOP나 IMAP 등의 서버에서 메일을 꺼내서 로컬에 재삽입하는 프로그램입니다. 큐메일에서 메일을 꺼내는 데 문제가 없지만, 큐메일클라이언트에서 잘 동작하게 하는 두세가지 기술이 있습니다. 큐메일시스템상의 사용자를 위한 .fetchmailrc샘플은 다음과 같습니다.
이렇게 하면 fetchmail은 mail.example.net을 POP3를 통해서 접속하고, dsill 사용자, flubgart암호로 로긴해서, 메세지를 모두 꺼낸다음에 dave@localhost로 전달합니다. forcecr은 각줄에 carriage return을 붙여서 로컬시스템에 메세지를 SMTP를 통해서 삽입하는데, 큐메일에 필요합니다. 5.3.2. getmailgetmail은 POP서버에서 메일을 꺼내서 maildir메일복스로 전달하는 프로그램입니다. 파이썬스크립트이기 때문에 이 프로그램을 사용하려면 파이썬을 먼저 설치해야 합니다. Charles Cazabon께서 만드셨고, 웹페지를 운영하고 있습니다. 5.4. 다중 RCPT 대 단일 RCPT 전달예를 들어서, 당신이 MTA이고, 한 사용자가 hostx.example.com의 세사람에게 메세지를 보낸다고 합시다. 이것을 하는데 몇가지 방법이 있습니다.
첫번째 방법은 세번째 방법보다 분명히 뒤집니다. 메세지가 작더라도 최소한 그만큼 시간이 걸립니다. 그리고 메세지가 크다면 더 오래 걸리고, 게다가 넷웍대역을 쓸것입니다. 허니, 그것은 빼겠습니다. 두번째와 세번째 방법은 좀더 재미있습니다. 세번째 방법은 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. 프로세스제대로 작동하고 완전하면서도 최소한인 큐메일설치는 다음 네개의 프로세스를 갖습니다.
사용중인 유닉스기종에 따라서 다음명령중 하나로 이 과정들을, 어쩌면 몇개 더, 나열할 수 있습니다.
예를 들면 다음과 같습니다.
위의 예에서와 같이 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. sploggersplogger는 메세지에 시간찍기하기 위해서 syslog의 로깅시스템을 사용해서 syslog 데몬으로 보냅니다. syslog은 /etc/syslog.conf에서 설정합니다. syslog로 보내는 메세지에는 장치와 우선순위가 담겨 있습니다. /etc/syslog.conf의 기재사항은 장치와 우선순위에 따라서 필터해서 메세지를 원하는 로그파일, 원격로그호스트, 또는 콘솔에 보냅니다. splogger는 기본으로 메일장치에 로그하므로, syslog.conf파일에서 "mail"을 grep하면 큐메일의 로그메세지처리를 볼 수 있습니다. 대개 다음장소에 위치합니다.
대개의 syslog 로그기재사항은 다음과 같습니다.
5.6.2.2. multilogdaemontools 패케지의 일부인 multilog는 특정한 디렉토리의 일련의 파일에 메세지를 로그합니다. 로그디렉토리는 multilog명령행에 명시하므로 큐메일기동스크립트를 살펴보시면 찾을 수 있습니다. 로그디렉토리내의 파일수와 각파일의 최대크기는 multilog 옵션으로 정합니다. 로그파일명은 파일을 시작한 시간의 TAI (Temps Atomique International) 시간찍기입니다. daemontools의 tai64nlocal명령은 TAI 시간찍기를 사람이 읽을 수 있는 로컬 시간찍기로 변환합니다. 보통의 multilog 록기재사항은 다음과 같습니다.
5.6.2.3. 록메세지로컬시스템에서 원격시스템으로 보내는 메세지에 대한 록의 예는 다음과 같습니다.
제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. 패치큐메일에 대한 여러 소스코드패치를 구할 수 있습니다. 패치를 설치하려면, 다운로드하고, 큐메일소스트리로 가서 패치명령을 씁니다.
큐메일을 멈춰야 하는데, qmail-send를 끝내거나, 설치항목에 있는 큐메일스크립트를 설치하셨다면 다음과 같이 합니다.
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-ldapAndre 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에게만 뒤질뿐입니다. 본문서에 검토와 기여를 하신 모든 분들께도 사례를 드립니다.
Henning Brauer씨께 특별히 감사드리는데, lifewithqmail.org 도메인을 주셨고, 또 호스팅까지 해주십니다. '큐메일과 삶'은 Simple Document Format (SDF)로 썼는데, 매우 신선한 Perl에 기초한 마컵언어로서 HTML, 평범한 문서, 포스트스크립트, POD, 기타 형식문서 등을 만들어 냅니다. 그것으로 일이 많이 쉬었습니다. 더알고 싶으시면 http://www.mincom.com/mtr/sdf/를 보십시오. A.2. 관련 패키지A.2.1. dot-forwardSendmail은 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를 선호하는 이유는 다음과 같습니다.
해당 소스는 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서비스를 통제하고 감시하는 유틸리티군을 담고 있습니다. 필수사항은 아닙니다만, 특히 바쁜시스템에게는 강력히 권장합니다. 포함하는 유틸리티들은 다음과 같습니다.
해당소스는 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에 웹페지를 운영합니다.
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를 운영하려면 다음과 같이 하세요.
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. mess822RFC 822를 따르는 메세지를 해석하는 응용제품군과 라입러리입니다. 응용제품은 다음과 같습니다.
해당 소스는 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에 보관합니다.
Len Budney가 썼고, http://www.pobox.com/~lbudney/linux/software/safecat.html에 웹페지를 운영하고 있습니다. A.2.11. maildropprocmail과 유사한 메일필터입니다. (패치를 하지않은) 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필드에 메세지의 제목을, 그리고 메세지본문을 적습니다. 다음과 같을 겁니다.
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. 핵심모듈
모듈방식에는 단점도 있습니다. 단일구성체의 MTA와 달리, 모듈간 상호작용은 잘정의되어있어서 모듈은 최소한의 필요정보만 서로 교환합니다. 이는 대개 '좋은일'이지만, 때로는 일을 하기가 어렵게 합니다. 예를 들면, sendmail의 "-v"플랙은 디버깅목적으로 Sendmail이 동작궤적을 표준출력으로 내보냅니다. 한 sendmail바이너리가 삽입, 큐, 앨이어스처리, .forward파일처리, SMTP를 통한 원격송부 등을 다하기때문에, 메세지를 전달할때까지의 전체전달을 쉽게 추적할 수 있습니다. 큐메일에 동등한 능력은 없고, 모듈에서 모듈로 "디벅"플랙을 건네주는 것을 구현하려면 엄청나게 코드를 고쳐야 하고, 더 복잡해집니다. A.4.2. 파일구조/var/qmail이 큐메일파일구조의 근본입니다. 큐메일을 컴파일할때 바꿀 수는 있지만, 다른 애드민이 무엇인가를 어디에서 찾아야 할 지 알게 그대로 두어야 좋습니다. 큐메일트리의 일부 또는 전부를 다른곳에 꼭 놓고 싶으면, 심볼릭링크를 이용하는 것이 낳습니다. 자세한 내용은 설치항목의 디렉토리만들기항목을 보시기 바랍니다. 톱레벨 섭디렉토리입니다. A.4.3. 큐구조컴파일디렉토리의 INTERNALS파일에 큐의 자세한 내용을 더 잘 설명해놓았습니다. 다음은 큐구조의 좀더 넓은 개요입니다. 표 A-3. 큐구조
아이노드번호에 따라서 섭디렉토리하의 파일들을 이름짓습니다. 이것이 뜻하는 바는, 표준 유닉스 유틸리티인 mv, dump/restore, tar 등을 써서 수동으로 그것들을 움직이지 못합니다. 큐파일을 정확하게 이름바꾸는 사용자공헌 유틸리티가 http://www.qmail.org에 두어개 있습니다.
A.4.4. 사진/var/qmail/doc에 PIC로 이름을 시작하는 파일들이 죽 있습니다. 이들은 큐메일이 감당하는 다양한 상태의 문장"사진"입니다. 다양한 모듈을 통한 통제흐름을 보여주며, 복잡한 설정을 만들고 디버깅하는 데 큰 도움이 됩니다. 표 A-4. 사진들
이 파일들은 http://www.qmail.org/man/index.html에서 온라인으로 구할 수 있습니다. 큐메일의 진짜사진을 원하신다면, Andre Opperman의 "대형큐메일사진"을 http://www.nrg4u.com/에서 보십시오. A.5. 드문 (어쩌다 한번씩 묻는) 질문들이것들은 자주 묻지는 않지만 중요하고 대답하기도 쉽지 않은 질문들입니다. A.5.1. 큐메일은 지연메세지를 어느 정도 자주 보냅니까?메세지마다 재시도시간표가 있습니다. 메세지가 전달불능으로 오래 있을수록, 큐메일은 그것을 덜 자주 보내려고 합니다. 재시도시간표는 설정할 수 없습니다. 다음 테이블은 원격수신자에게 가는 전달불능인 메세지가 바운스될때까지의 재시도시간표를 보여줍니다. 로컬메세지는 비슷하지만, 더 잦은 시간표를 사용합니다. 표 A-5. 전달시도시간표
A.5.2. 저는 MX가 많은 대형사이트에 매일을 보내지 못하는데 왜그렇죠?다음의 메세지를 받는다면,
문제는 큐메일이 대형네임서버질의응답을 처리하지 못해서입니다. 패치를 설치해서 고칩니다. 고급주제에서 패치를 보시기 바랍니다. 어떤사람은 이런시스템에 닿는데 문제가 없는데 왜그러냐고 질문할 수도 있습니다. 원래, 타이밍과 로컬네임서버에 한 질의순서에 의거하여, "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"은 한 문자로 계산됩니다.) 예를 들면 다음과 같습니다.
큐메일이 운행중이면 중지시킵니다. 설치항목의 큐메일스크립트를 설치하셨으면, 다음과 같이 하십시오.
큐메일스크립트가 없으시면, 기동/중지 스크립트를 사용하시든지, TERM신호를 qmail-send에 보내십시오. 그다음에 다음과 같이 해서 큐메일을 재컴파일하십시오.
원하시는 대로 ~alias/.qmail-log을 채우십시오. 예를 들어, Message-ID를 록하려면 다음과 같이 합니다.
끝으로, 큐메일을 재가동합니다. A.6. 에러메세지큐메일에러메세지와 그 의밉니다. 괄호안의 에러코드에 관한 설명은 RFC 1893을 보십시오. 이 부록은 완전하지 않습니다. qmail-local
qmail-smtpd
qmail.c
spawn.c
A.7. 의외의 실수큐메일신참자는 다음과 같은 문제들을 자주 만납니다. A.7.1. 큐메일은 수퍼유저에게 메일을 전달하지 않습니다.qmail-local이 특권사용자로서 명령을 실행하는 가능성을 막기위해서, 큐메일은 UID가 0인 모든 사용자를 무시합니다. 이것은 qmail-getpw 맨페지에 설명되어 있습니다. 그렇다고 큐메일이 root@example.com에 전달하지 않는다는 것은 아니고, 다만 전달은 비특권사용자에 의해 처리되어야 한다는 것입니다. 으례, ~/alias/.qmail-root을 채워서 root에 대한 앨리어스를 만듦니다. A.7.3. 큐메일은 사용자이름에 대문자를 쓰는 사용자에게 메일을 전달하지 않습니다.큐메일은 주소에서 "@"의 왼쪽에 있는 모든 것인 "로컬부분"을 소문자로 변환합니다. 맨페지에는 설명되어 있지 않지만, 코드는 그렇게 합니다. 대문자를 갖는 사용자를 무시한다는 사실은 qmail-getpw맨페지에 기록되어 있습니다. A.7.4. 큐메일은 홈디렉토리에 그룹이나 기타사용자에게 쓰기를 허락하는 사용자에게 메일을 전달하지 않습니다.또하나의 보안특징입니다. qmail-local맨페지에 설명되어 있습니다. 컴파일시 conf-patrn 컴파일 컨피그파일을 통해서 재지정할 수 있습니다. A.7.5. 큐메일은 확장주소의 점(.)을 콜론(:)으로 바꿉니다.또하나의 보안특징입니다. 확장주소가 파일트리를 ".."로 백업하는것을 막는 것이 목적입니다. 콜론으로 바꾸기 때문에, 큐메일은 사용자의 .qmail파일 모두가 홈디렉토리에 있게 합니다. qmail-local맨페지에 기록했습니다. A.7.7. 큐메일은 /etc/hosts를 사용하지 않습니다.큐메일은 호스트네임이 있는 IP주소를 결정하기 위해서 /etc/hosts를 사용하지 않습니다. control파일에 있는 이름을 사용하면, 큐메일은 네임서버에 접근할 수 있어야 합니다. 그래도 네임서버에 접근할 수 없는 시스템에서도 큐메일을 운영할 수 있습니다. control파일에 있는 호스트는 IP주소로 적을 수도 있는데, 대괄호 ([])로 둘러싸야 합니다. 예를 들면 다음과 같습니다.
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"을 실행하는 것입니다. 그것이 가능하지 않다면, 다음과 같은 지 확인하십시오.
줄의 앞에 (네임파잎을 알리는) "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
A.8.3. lwq의 라이센스는?lwq는 OpenContent License version 1.0에 포함됩니다. 완전한 라이센스에 대해서는 http://www.opencontent.org/opl.shtml를 보십시오. 본래, 수정판을 재배포한다면 그판도 OpenContent License에 포함된다는 조건하에 lwq를 복사, 재배포, 수정할 수 있습니다. A.8.4. lwq의 새판을 구할 수 있다는 것은 어떻게 통지받을 수 있습니까?lwq-announce-subscribe@sws1.ctd.ornl.gov에 메세지를 보내서 lwq-announce메일링리스트에 가입하십시오. A.8.6. lwq는 다른 언어로 번역되었습니까?lwq를 번역하는데 관심있으시면, 제게 알려주셔서 노력의 중복을 막고, 조화할 수 있게 해주십시오. 또한 제가 SDF소스문서를 번역하시는 분께 드려서, 번역이 SDF로도 될 수 있게 할 수 있습니다. (이것이 왜 중요한 지 다음질문을 보시기 바랍니다.) 또한, lwq를 번역하시는 분들은 lwq메일링리스트에 가입하셔서 (전의 질문을 보십시오.) 번역에 관한 논점을 토론하고 공지사항을 만들 수 있도록 하시길 권장합니다. A.8.7. lwq는 HTML이외에 포스트스크립트, PDF, 평범한글, 또는 다른형태로도 구할 수 있습니까?그렇습니다. 다른 형태는 http://www.lifewithqmail.org/에서 찾을 수 있습니다. 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를 돕는 다른 방법은 요기에서 쇼핑하면 됩니다. [하나 받으십시오!] |
It's later than you think. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||











