Qmail 을 이용한 virtual mail system (아랑)

Muchunalang’s Single-UID based POP3 box HOWTO

이 글은 시스템 계정을 사용하지 않고, 다수의 pop3 계정 사용자를 다루기 위하여

어떻게 qmail을 설정하는지 설명한다.

여기서 다루어 질 파일들:

      control/rcpthosts

      control/virtualdomains

      users/assign

      users/poppasswd (checkpassword 에서 사용하는 특정 패스워드 파일 )

먼저 앞서 소개된 qmail 셋팅법 (시스템용)을 참조하여 qmail 시스템을 만든다.

기본 설정이 완료 되면 몇가지 수정해야 할 부분이 있다.

먼저..checkpasswd 를 가상메일셋팅용으로 바꾸어야 한다.

ftp://ftp.zzang911.net/pub/linux/server/mailserver/qmail/checklocalpwd-1.0.tar.gz

에서 다운 받는다.

특정 디렉토리에서 압축을 풀고 make 하여 생성되는 바이너리 파일을 /bin 에 복사

한다. 그런뒤 /etc/inetd.conf 에서 pop3 부분을 아래 부분처럼 수정한다.

pop-3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup  \\

host-domain /bin/checklocalpwd /var/qmail/bin/qmail-pop3d Maildir

그런뒤 inetd 를 재시작..

이제 예문을 통해 설명해 보겠다.

alang at zzang911.net

메일을 가상 메일로 설정해 보겠당..

1. 먼저 /var/qmail/control/rcpthosts 에 zzang911.net를 추가 한다.

[root@zzang911 qmail]# echo zzang911.net >> /var/qmail/control/rcpthosts

2. /var/qmail/control/virtualdomains 파일에 사용할 가상 도메인을 다음 형식으로

   추가한다.

[root@zzang911 qmail]# vi /var/qmail/control/virtualdomains

———————————————————————

zzang911.net:zzang911-net

3. /var/qmail/users/assign 에 메일 아이디를 다음 형식으로 추가 한다.

[root@zzang911 qmail]# vi /var/qmail/users/assign

———————————————————-

=zzang911-net-alang:popmail:534:534:/home/popmail/zzang911-net/alang:::

.

위의 형식이 의미하는 바를 차례로 설명하겠다.

zzang911-net-alang : alang at

zzang911.net 를 뜻한다.

popmail : 가상 메일 계정으로 접근할때 사용되는 단하나의 실제 시스템 계정이다.

534:534  : popmail 의 uid 와 gid 이다.

/home/popmail/zzang911-net/alang : .qmail 이 위치할 장소다. .qmail 은 메일의 저장

장소와 방식을 나타내는 파일로 ./Maildir/ 방식을 주로 한다. 자세한 내용은 아래 qmail

설치편을 참고 하길 바란다.

여기서 주의해야 할점은 assign 파일의 마지막은 . 으로 끝이 나야 한다.

assign 파일을 수정한 뒤에는 항상 /var/qmail/bin/qmail-newu 를 실행해 줌으로 해서

cdb db파일을 갱신하게 된다.

이런식으로 설정을 마쳤으면 여기 설정에 맞추어서 메일이 저장될 디렉토리를 만들어준다.

# mkdir /home/popmail/zzang911-net

# mkdir /home/popmail/zzang911-net/alang

# /var/qmail/bin/maildirmake /home/popmail/zzang911-net/alang/Maildir/

# echo ./Maildir/ > /home/popmail/zzang911-net/alang/.qmail

이것들이 무엇을 하는것인지는 아래 설치편에 자세히 나와 있음.

4. /var/qmail/users/poppasswd 파일을 다음 형식으로 설정하라.

[root@zzang911 qmail]# vi /var/qmail/users/poppasswd

————————————————————–

alang:Jq6RNhk40gnPs:popmail:/home/popmail/zzang911-net/alang

위 형식은 다음과 같다.

메일아이디:encry패스워드:시스템아이디:.qmail 위치

poppasswd 파일을 설정하였다면 반드시 /etc 디렉토리 안에 복사를 하든 링크를 하여../etc

안에도 존재하게 해 주어야 한다.

이와 같이 /etc/passwd 파일 말고 별도의 가상메일을 위한 poppasswd 파일을 만들었다면..

이파일을 참조하여 인증을 하는 프로그램이 있어야 겠다…이것이 위의 checklocalpwd 당.

위에 재대로 설치가 되었다면…통과..

메일아이디용 패스워드를 만드는 프로그램도 필요하겠다..

[root@zzang911 qmail]# vi /var/qmail/bin/mkpasswd.pl

————————————————————-

#!/usr/bin/perl

# Small perl program to assist is encrypting passwords

# Paul Gregg <pgregg at

tibus.net>, March 1999.

if (@ARGV) {

  $pw1 = shift; $seed = shift;

} else {

  system(“stty -echo”);

  print “Ente  print “\\nAgain: “; $pw2 = <STDIN>;

  system(“stty echo”);

  if ($pw1 ne $pw2) { print “Sorry, passwords don’t match.\\n”; exit; }

  print “\\nSeed: “; $seed = substr(<STDIN>,0,2);

}

chomp($seed); chomp($pw1);

if (length($seed) eq 0) {

  srand(time());

  $a = int(rand(25) + 0.5) + (int(rand(1) + 0.5) * 32) + 65;

  $b = int(rand(25) + 0.5) + (int(rand(1) + 0.5) * 32) + 65;

  $seed = sprintf (“%c%c”, $a, $b);

}

printf(“%s\\n”, crypt($pw1, $seed));

————————————————————-

와 같이 만들고 퍼미션을 755 정도 주면…OK.

여기서 변환된 패스워드를 위의 poppasswd 의 패스워드 부분에 넣어 준다.

(무지 번거로운 작업이지만 아래 부분의 스크립트를 사용하면..이런 노가다를

줄일수 있다.)

자…이제 qmail 을 재가동하고…테스트 메일을 보내 보자.

# mail -v alang at

zzang911.net

Subject: test

test

.

Cc: .

메일이 재대로 도착했는지 확인을 해 보자.

# telnet 0 110

Trying 0.0.0.0…

Connected to 0 (0.0.0.0).

r a Password: “; $pw1 = <STDIN>;

Escape character is ‘^]’.

+OK <5856.977835866@211.201.133.135>

user alang

+OK

pass XXXXXX

+OK

list

+OK

.

이와 같이 나온다면 무사히 설정이 완료 된것이다.

자 이제 가상메일생성 스크립트를 소개하겠다..아래 스크립트를 이용하면..

위의 복잡한 설정 과정을 한번에 끝낼수 있다. 하지만…어떻게 아이디가

추가되는지 확실히 이해가 되었을 경우에만 사용하시길…뒷일 책임 못짐.

[root@zzang911 qmail]# vi /var/qmail/bin/pop3useradd

——————————————————————-

#!/bin/sh

# Written by Myoungjin Choi

# No Warrenty! 잘 생각해보고 쓰세요.

if [ $# -ne 3 ]; then

echo “Usage: $0 virtualdomain pop3userid passwd”

exit 127

fi

if [ -d $2 ]; then

echo “해당 디렉토리가 이미 존재합니다”

exit

fi

mkdir /home/popmail/$1

mkdir /home/popmail/$1/$2

echo “./Maildir/” > /home/popmail/$1/$2/.qmail

/var/qmail/bin/maildirmake /home/popmail/$1/$2/Maildir/

chmod 700 /home/popmail/$1/$2 -R

chmod 600 /home/popmail/$1/$2/.qmail

chown popmail.popmail /home/popmail/$1 -R

chown popmail.popmail /home/popmail/$1/$2 -R

passwd=`/var/qmail/bin/mkpasswd.pl $3`

echo $2:$passwd:popmail:/home/popmail/$1/$2 >> /var/qmail/users/poppasswd

printf “,s/^\\\\\\.//\\nwq\\n” | ed /var/qmail/users/assign 2> /dev/null

printf “d\\nwq\\n” | ed /var/qmail/users/assign 2> /dev/null

echo =$1-$2:popmail:534:534:/home/popmail/$1/$2::: >> /var/qmail/users/assign

echo “.” >> /var/qmail/users/assign

/var/qmail/bin/qmail-newu

——————————————————————-

위 스크립트는 가상메일이 /home/popmail 을 기준으로 저장된다는 전제조건을 달고

있다..그냥 사용할려면…위의 설정방법과 완전히 똑같이 설정이 되어있어야 한다.

자신의 환경에 맞추어 수정하시길 바란다.

스크립트를 사용하여 muchun at

zzang911.net 메일을 추가 할땐 다음과 같이 하면 된다.

[root@zzang911 bin]#./pop3useradd zzang911-net muchun XXXXX

이로써…가상 메일 계정 셋팅을  실질적인 예를 통해 알아 보았다. 자세한 내용은

아래 문서를 참고 바랍니다.

http://linux.zzang911.net/books/qmail/single-uid-base-pop3-qmail-howto.html

single-uid-base-pop3-qmail-howto문서

ttp://linux.zzang911.net/books/qmail/qmail-virtual.html

qmail-virtual-howto 문서

이것으로 일일이 시스템 계정을 추가하지 않고도 메일계정만 도메인 별로 많이 만들수

있습니다.

유용하겠죠…*^^*

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.