큐메일

OS/리눅스 & 유닉스 2014. 9. 18. 16:06


D. J. Bernstein 
Internet mail

qmail

이 페이지는 qmail의 저자인 D. J. Bernstein의 qmail 페이지를 번역한 것입니다.

FAQ (자주 질문되어 지는것들) - [번역됨]
qmail의 안전성 보장
대형 sendmail 사이트에서 qmail로의 이전 - [번역됨]
mini-qmail 설치하기 - [번역됨]
POP 토스터 만들기 - [번역됨]
qmail 구조도 - [번역됨]

누가 qmail을 이용하는가? - [번역됨]
최근의 버전에서 바뀐 것들
qmail의 미래 - [번역됨]

미리 컴파일된 바이너리 패키지에 대해
배포자를 위한 안내


qmail은 메일링 리스트에서 논의되고 있다. 새로운 버전 공지는 qmail 알림 메일링 리스트에서 받아볼수 있다.

현재 qmail의 마지막 버전은 qmail-1.03.tar.gz 이며 다음에서 받을 수 있다.

관련 패키지:

  • djbdns, qmail과 사용하기를 권장하는 DNS 소프트웨어;
  • ezmlm, 사용하기 쉽고, 빠른 메일링 리스트 관리 도구;
  • ucspi-tcp, SMTP 서버를 위한 매우 빠른 inetd의 대체 프로그램과 RBL-목록 사이트를 사용해 스팸 메일 거부에 이용할 수 있는 도구가 포함되어 있다;
  • serialmail, 시리얼 연결을 통해 메일을 전달하는 도구들 (AutoTURN을 지원함);
  • qmailanalog, qmail의 로그를 분석할 수 있는 로그 분석기;
  • dot-forward, qmail을 위한 .forward 지원;
  • fastforward, qmail을 위한 테이블 기반의 포워딩 도구, /etc/aliases 를 지원;
  • mess822, SMTP 클라이언트를 위해 메세지를 재작성 하거나 헤더 분석기등을 포함하는 도구;
  • patch majordomo 1.93 과 qmail이 작동하기 위한 패치
  • the checkpassword qmail-pop3d 를 위한 인증 프로그램.

qmail 관련 유틸리티, 패치, 상업 지원등 많은 정보를 www.qmail.org (한글)에서 찾을 수 있다.

Dave Sill의 The qmail handbook.

qmail이 무엇인가?

qmail은 안전하며 신뢰할 수 있고, 효율적인 메세지 전송 에이전트이다.

이것은 sendmail-binmail 시스템을 대체할 수 있다는 의미이다.

안전성: 보안이 목적이 될 수는 없지만 절대적으로 필요한 것이다. 메일 전송은 사용자에게는 매우 중요한것이며 전송되어야만 하며, 완벽하게 안전해야 한다. (이것이 qmail이 만들어진 동기로 정기적으로 알려지곤 하는 센드메일이나 다른 MTA의 보안 구멍때문에 지쳤기 때문이었다.)

신뢰성: 큐메일은 메세지를 절대 잃어버리는 일이 없다. 큐메일은 NFS 파일 시스템상에서도 안전한 Maildir 형태 메일함의 선구자이다. Maildir 형태는 큐메일에서 처음으로 사용하기 시작한 메일함 형식으로 배달이 이루어 지고 있는 동안에 시스템이 다운되더라도 파일 시스템에 문제가 생기지 않는 유일한 메일함이며, NFS 파일 시스템상에서 동시에 여러개의 메일이 배달되고 있는 동안에도 사용자가 메일을 읽을 수 있는 안전한 메일함이다.

효율성: 펜티엄시스템, BSD 운영체제하에서 qmail은 하루에 20만개의 로컬 메세지를 손쉽게 처리할 수 있다. --- 분리된 메세지를 주입하고 메일 박스로 배달하는 실제 테스트였다. 큐메일은 메세지를 센드메일보다 빠르게 처리하면서 안정성을 잃지 않는다. 특히 수 많은 메일을 동시에 배달해야 하는 메일링 리스트의 경우 가장 빠른 성능을 보인다. 예를 들어 1000개 이상의 각기 다른 호스트에 메일을 배달하는데 76초 밖에 걸리지 않았다.

간단함:

  1. 포워딩, 알리아싱, 메일링 리스트 메카니즘을 독립적으로 가지고 있는 다른 MTA들과는 다르게 큐메일은 한가지의 간단한 포워딩 메카니즘을 사용해 모든 기능을 구현하였다.
  2. 다른 MTA가 "빠르고 불안전한 -> 느린 큐" 방식의 배달 방식을 사용하는것 과는 달리 큐메일은 새로운 아이템을 즉시 큐에 넣으므로 큐메일은 "빠른 큐"라는 하나의 배달 방식만을 사용한다.

sendmail을 대체: qmail은 host, 유저 마스커레이딩과 완벽한 호스트 숨김, 가상 도메인, null 클라이언트, list-owner rewriting, 릴레이 조절, 더블 바운스 기록, RFC 822를 따르는 주소 목록, 호스트 간의 메일링 루프 (loop) 인식, 수신자 단위의 체크 포인팅, 다운된 호스트를 위한 보류기능, 스케쥴에 따른 메세지 재전송 기능등을 지원한다. 또한 qmail은 기존의 어플리케이션들과의 호환을 위해 sendmail 바이너리를 대체하는 wrapper를 가지고 있다.

왜 당신은 qmail하에서의 메일링 리스트를 좋아하게 될 것인가?

메일링 리스트의 관리는 qmail의 큰 장점중의 하나이다.

  • qmail은 각 사용자가 자신만의 메일링 리스트를 관리 할 수 있다. 배달 명령은 ~user/.qmail-whatever을 따르게 된다.
  • qmail에서는 메일링 리스트 소유자 설정을 매우 쉽게 할 수 있다. 만약 ~user/.qmail-whatever-owner를 만들어 주면 모든 바운스는 그에게 배달된다.
  • qmail에서는 어떠한 크기의 메일링 리스트에서도 완벽히 신뢰되는 바운스 처리가 가능한 VERP를 지원한다.
  • 속도--qmail은 sendmail 보다 상당히 빠르게 메일링 리스트를 처리한다. 예를 들면 qmail 메일링 리스트상에서 각각의 메세지를 단지 76초 동안에 서로 다른 1000개의 호스트에 배달한다.
  • qmail은 자동적으로 메일링 리스트의 루프(loop)를 막아준다.
  • qmail은 믿지 못 할 정도의 거대한 메일링 리스트를 지원한다.
  • qmail은 알리어싱과 포워딩을 간단하고 동일한 매커니즘으로 지원한다. 예를 들어 postmaster는 ~alias/.qmail-postmaster에 의해 제어된다. 이것은 알리아스에 대한 크로스-호스트 루프(cross-host loop) 또한 인식한다는 의미이다.
  • qmail은 메일링 리스트 관리기인 ezmlm을 지원한다. ezmlm은 바운스, 가입 요청, 아카이브등을 쉽고 자동적으로 처리한다.

효율성

qmail의 모듈러 (작은 여러개의 프로그램으로 이루어짐), 작은 디자인과 현명한 큐 관리는 qmail을 가장 빠른 MTA를 만들어 주었다. 다른 MTA들과의 다음 다섯가지 차이점으로 속도의 차이를 알 수 있다.

  • 스케쥴링: 8192개 메세지를 나의 집에 있는 컴퓨터에서 보내 보았다. 모든 메세지들은 단지 78초에 배달되었다. -- 이것은 하루에 9백만개의 편지를 전달할수 있다는것을 의미한다! 하루에 백십만개를 전송 할 수 있는 속도가 빠르다고 광고하는 Zmailer와 비교해보라. (Zmailer의 이 수치는 스팍스테이션 10/50MHz 에서 하루에 전송한 량이다. 나의 집의 컴퓨터는 16MB 100MHz 펜티엄에 BSD/OS에 qmail을 기본 설정으로 사용하였고, 로그는 accustamp를 통해 디스크에 일반적으로 저장되었다).
  • 로컬메일링 리스트: qmail은 메일함에 메세지를 전달할때, 물리적으로 메세지를 디스크에 쓴 후에 그것이 성공적으로 배달되었음을 알린다. -- 이 방식은 전원을 잃었다 하더라도 메일의 손실이 없다. 나는 1024개의 메세지를 내 컴퓨터의 동일한 디스크 상의 로컬 메일박스에 전송해 보았는데 모든 전송은 25.5 초에 끝났다. 이것은 하루에 3백 4십만통 이상의 전송을 수행 할 수 있는 속도이다! Zmailer은 스팍 스테이션에서 겨우 4십 8만통의 전송 속도를 보여 주었을 뿐이다.
  • 메일링 리스트와 원격 수신: qmail은 LSOFT의 LSMTP와 동일한 배달 전략을 사용한다. 즉, 매우 빠르게 외부로 메일을 전송한다. 여러분은 동시 SMTP 접속수를 선택할 수 있다. 물론 실행속도는 얼마나 수신자가 많은가에 따른다. qmail의 장점은 다른 패키지에 비하여 크기가 작다는 것이다. 예를 들어 16M 메모리를 가지는 리눅스 박스에서 스왑을 사용하지 않고도 60개의 동시 접속을 유지할 수 있다.
  • 로컬메세지 분리: LSOFT가 LSMTP에 대해 말해주지 않은것은 얼마나 많은 분리된 메세지를 하루에 처리할 수 있는가이다. 큐에 가득차면 지연 현상이 있지 않을까? 내 컴퓨터에서 qmail의 배달을 정지시켜놓고 5000개의 분리된 메세지를 하나의 수신자에게 보내 보았다. 모든 메세지는 23분에 동안 속도 저하없이 안전하게 큐 디스크에 저장되었다. 다시 qmail의 배달을 시작하자 12분만에 수신자의 메일함에 모든 메세지가 배달되었다. 이것은 하루에 20만통이상을 처리할 수 있는 속도이다.
  • 전반적인 성능: 실제적인 예로 레드헷 소프트웨어는 그들의 메일 허브인 펜티엄/48MB, sendmail 8.7 운영 환경에서 하루에 7만개의 메세지를 전송하였다. 후에 이것을 더 작은 시스템인 486/66MHz, 16MB, qmail로 바꾸었으며 잘 작동하고 있다.

특징

설정:

  • 여러분의 UNIX에 자동적으로 적응한다 -- 포팅이 불필요 하다.
  • AIX, BSD/OS, FreeBSD, HP/UX, Irix, Linux, OSF/1, SunOS, Solaris등을 포팅없이 지원한다.
  • 자동적인 호스트별 설정(config, config-fast)
  • 빠른 설치

보안:

  • 주소, 파일, 프로그램은 명확하게 구분되어 있다.
  • setuid code (qmail-queue)의 최소화
  • root code (qmail-start, qmail-lspawn)의 최소화
  • 다섯가지 방법의 확실한 분활 -- 보안의 계층화
  • 선택적인 로그 (단 방항의 해쉬, 모든 내용, 기타. (QUEUE_EXTRA)

메세지 구조(qmail-inject):

  • RFC 822, RFC 1123
  • 주소 그룹을 완벽하게 지원
  • RFC 822 형태로 자동 구식 주소 변환 지원
  • 이전 사용자들을 위한 sendmail wrapper 지원
  • 메모리에 의해서만 제한되는 헤더의 길이
  • 호스트 매스커레이딩 (control/defaulthost)
  • 사용자 매스커레이딩 ($MAILUSER, $MAILHOST)
  • Mail-Followup-To 헤더 자동 생성 ($QMAILMFTFILE)

SMTP 서비스 (qmail-smtpd):

  • RFC 821, RFC 1123, RFC 1651, RFC 1652, RFC 1854
  • 8-bit clean
  • 931/1413/ident/TAP callback (tcp-env)
  • 릴레이 제어 --- 인증되지 않은 외부 사용자의 릴레이 방지 (control/rcpthosts)
  • 릴레이와 알리아스간의 간섭 없음
  • 로컬 IP 주소 자동 인식
  • 버퍼별 타임아웃 지원
  • 홉 카운팅 (hop counting)
  • 병렬 처리 제한 (ucspi-tcp/tcpserver, available separately)
  • 알려진 스팸 서버로 부터의 연결 거부 (tcpserver)
  • 인증된 클라이언트를 위한 릴레이와 메세지 재작성
  • 선택적인 RBL/ORBS 사용 가능 (ucspi-tcp/rblsmtpd)

큐 관리(qmail-send):

  • 메세지를 즉시 큐에 추가
  • 병렬 처리 제어 (control/concurrencyremote, control/concurrencylocal)
  • 큐 디렉토리의 분리 -- 큐가 커질때의 속도 제하가 없음
  • 2차원의 재시도 스케줄 -- 오래된 메세지일 수도록 재시도를 자주 하지 않음
  • 독립적인 메세지 재시도 스케쥴
  • 자동적이고 안전한 큐잉(queueing) -- 만일 시스템이 비정상적이어도 메일을 잃지 않음
  • 자동 수신자별 체크 포인팅
  • 자동 큐 청소 (qmail-clean)
  • 큐 보기 (qmail-qread)
  • 자세한 전송 통계 (qmailanalog)

바운스 (qmail-send):

  • QSBMF 바운스 메세지 --- machine-readable 과 human-readable
  • HCMSSC 지원 --- RFC 1893 오류 코드에서 독립적임
  • 더블 바운스는 postmaster에게 보내짐

도메인별 라우팅(qmail-send):

  • 복수의 로컬 호스트 이름 지원 (control/locals)
  • 복수의 가상 도메인 지원 (control/virtualdomains)
  • 도메인 와일드 카드 지원 (control/virtualdomains)
  • 설정이 가능한 percent hack 지원 (control/percenthack)
  • UUCP hook

SMTP 전송 (qmail-remote):

  • RFC 821, RFC 974, RFC 1123
  • 8-bit clean
  • 다운된 호스트를 위한 배달 지연
  • 지능적인 라우팅 -- smarthost, localnet, mailertable (control/smtproutes)
  • 버퍼별 타임아웃
  • 수동 SMTP 큐 -- SLIP/PPP를 위해 완벽함 (serialmail)
  • AutoTURN 지원 (serialmail)

포워딩과 메일링 리스트 (qmail-local):

  • sendmail의 .forward 와 호환 (dot-forward)
  • hashed forwarding databases (fastforward)
  • sendmail의 /etc/aliases 와 호환 (fastforward/newaliases)
  • 주소의 와일드 카드 지원 (.qmail-default, .qmail-foo-default, 등.)
  • 소유자를 위한 메일링 리스트 --- 자동으로 바운스를 전환하고 휴가 메세지 전송
  • VERPs--- 메일링 리스트 바운스를 위한 자동적인 수신자 인식
  • Delivered-To---메일 루프 방지
  • 자동 가입 요청 관리 (ezmlm)

로컬 전송 (qmail-local):

  • 이용자가 제어하는 주소 계층
  • mbox 배달
  • 신뢰되는 NFS 배달 (maildir)
  • 이용자가 제어하는 전송 프로그램 : procmail 등 (qmail-command)
  • 선택적인 새 메일 알림 (qbiff)
  • 선택적인 NRUDT 지원 (qreceipt)
  • 선택적인 필터링 (condredirect, bouncesaying)

POP3 서비스 (qmail-popup, qmail-pop3d):

  • RFC 1939
  • UIDL 지원
  • TOP 지원
  • APOP 후크
  • 분리된 암호 인증 프로그램 (checkpassword)

참조 - http://qmail.kldp.net/phpbb/

       - http://qmail.kldp.net/qmail.html

: