2. 리눅스 Server 구축및실무운영 2.3. MAIL Server 리눅스운영체제에서사용할수있는많은서비스중에서대표적인서버스중에하나로메일서비스를꼽을수있다. 이장에서는리눅스에서가장대중적으로사용되어지는 Sendmail 과대규모메일발송에탁월한성능을가지고있는 Qmail 에대해그구축법과사용법에대해알아보도록하겠다. 구체적인구축에들어가기앞서먼저메일시스템의작동원리에대해이해를해야할것이다. 메일서버란인터넷에서 E-Mail을주고받는기능을수행하는서버를말하며, E-Mail은크게두종류의프로그램과프로토콜에의해전달된다. 여기서두종류의프로그램이란MUA(Mail User Agent) 와 MTA(Mail Transfer Agent) 를말한다. MUA로는사용자가직접메일을작성하거나보낼때사용하는넷스케이프메신저, MS Outlook 유도라등의프로그램이있고, MTA는실제로메일을전송해주는 Sendmail,Qmail등의프로그램이있다. 아래의그림과같이 Sendmail이설치된메일서버는 SMTP(Simple Mail Transfer Protocol) 프로토콜을사용하여메일을전송하고, 호스트로부터받은메일을클라이언트로전달할때는 POP3 또는 IMAP등의프로토콜을사용합니다. [ 메일작동구성도 - 그림 ] 예를들어 mail@clunix.org 이라는메일주소를가진사람이다른서버에계정을가진 webmaster@yahoo.co.kr이라는친구에게메일을보낸다고가정하면, 아래와같은과정을거쳐메일이전달되게될것이다. 1. mail@clunix.org 이라는사람이 Outlook 이나넷스케이프메신저와같은 MUA 프로그램에서보낸메일은먼저 SMTP 프로토콜을통해 arhfw.clunix.org 메일서버에전달됩니다. 1/43 페이지
2. arhfw.clunix.org에서대기하고있던 MTADaemon(Sendmail, qmail) 은메일을메일큐 Directory(/var/spool/mqueue) 에임시저장한후 SMTP 프로토콜을통해다시 yahoo.co.kr 메일서버로전송하고큐Directory에저장했던메일을삭제합니다. yahoo.co.kr에서는 sendmail Daemon이대기하고있다가 arhfw.clunix.org 메일서버가보내온메일의도착지가자신의것인지확인한후맞으면메일박스 (/var/mail Directory) 에 webmaster라는파일로저장합니다. 3. webmaster@yahoo.co.kr의사용자는마이크로소프트아웃룩이나유도라와같은 MUA를통해메일을확인하며, 이때에는 POP3나 IMAP등의프로토콜을통해메일이전송됩니다. 이와같은메일이전달되어지는과정중에어느하나라도문제가발생하면정상적인메일송수신이되지않을것이다. 관리자는이런메일작동의원리를알고있어야실제문제발생시막연히 " 메일이안된다 " 가아닌어느지점에문제로인해메일이안된다라는인식을할수있게된다. 2.3.1 Sendmail 로 Mail Server 구축하기 - Sendmail 설치및기본설정 Sendmail은메일서버로가장많이사용되고있는 MTA프로그램으로공식사이트는 http://www.sendmail.org입니다. 대부분의리눅스배포판에기본적으로설치가되어있으므로자신의시스템에맞는환경설정을한후사용하시면됩니다. 패키지는다음사이트에서다운받을수있다. Sendmail 공식미러사이트 - ftp://ftp.sendmail.org Sendmail 미러사이트 - http://www.sendmail.org/mirrors.html 국내미러사이트 : ftp://ftp.linux.co.kr/server/sendmail 여기서는 Redhat Linux 배포판에서기본제공해주는 RPM 패키지를이용하여구축하여보도록하겠다. [root@arhfw updates]# rpm -Uvh sendmail-8.12.8-9.90.i386.rpm [root@arhfw updates]# rpm -Uvh sendmail-cf-8.12.8-9.90.i386.rpm 2/43 페이지
[root@arhfw updates]# rpm -Uvh sendmail-doc-8.12.8-9.90.i386.rpm Sendmail을실행하기전에 /etc/services 파일을열고 smpt 프로토콜에주석처리가되어있는지확인한후 Sendmail 서버를실행합니다. [root@arhfw root]# cat /etc/services grep smtp ------------------------------------------------------------------------------- smtp 25/tcp mail smtp 25/udp mail smtps 465/tcp # SMTP over SSL (TLS) [root@arhfw root]# /etc/rc.d/init.d/sendmail restart -------------------------------------------------------------------------------- Shutting down sendmail: [ OK ] Shutting down sm-client: [ OK ] Starting sendmail: [ OK ] Starting sm-client: [ OK ] Sendmail 서버가정상적으로실행되었는지확인하기위해 telnet을사용해 25번포트 (smpt) 로접속해봅니다. 아래와같은메시지가출력되면 Sendmail이정상적으로실행된것입니다. [root@arhfw root]# telnet localhost 25 -------------------------------------------------------------------------------- Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 arhfw.clunix.org ESMTP Sendmail 8.12.8/8.12.8; Wed, 27 Apr 2005 13:47:18 +0900 만약레드헷버젼이 7.1 이상부터는 relay 보안기능이강화되어서초기셋팅상태에서는내부사용자끼리만메일을보내고받을수있다. 원격지에서는이서버를통해서메일을주고받을수가없다. 일단.. 새로 sendmail.cf 파일을만들어야한다. 이를확인하기위해서는 telnet 으로 25번포트에접근을해보면되는데이때는로컬시스템에서확인하는것이아니라원격호스트에서확인을해야한다. 로컬은기본설정 3/43 페이지
에서이미허가가되어져있으니위의테스트결과처럼정상적으로접속이되어질것이다. [root@arhdev root]# telnet arhfw.clunix.org 25 ------------------------------------------------------------------------------ Trying 192.168.133.254... telnet: connect to address 192.168.133.254: Connection refused 위와같이원격시스템에서는 arhfw 서버에접근을할수없기때문에메일을보낼수없다. 정상적인메일서비스를위해서는위부분의제한을제거해주어야한다. [root@arhfw root]# cd /etc/mail [root@arhfw mail]# vi sendmail.mc --------------------------------------------------------------------------------.. 아래부분을찾는다 DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA') 해당서버의외부통신 IP로메일을 Detect 할수있게아래와같은설정을추가한다. DAEMON_OPTIONS(`Port=smtp,Addr=192.168.133.254, Name=MTA').. -------------------------------------------------------------------------------- [root@arhfw mail]# m4 sendmail.mc > sendmail.cf m4 를이용하여 sendmail.mc 설정파일을토대로 sendmail.cf 파일을재생성하도록한다. [root@arhfw mail]# /etc/rc.d/init.d/sendmail restart 새로운설정을적용하기위해 sendmail 재시작한다. 이제다시외부호스트에서 25 번 port 테스트를해보도록하자. [root@arhdev root]# telnet arhfw.clunix.org 25 -------------------------------------------------------------------------------- Trying 192.168.133.254... 4/43 페이지
Connected to arhfw.clunix.org. Escape character is '^]'. 220 arhfw.clunix.org ESMTP Sendmail 8.12.8/8.12.8; Wed, 27 Apr 2005 14:01:57 +0900 위와같이정상적으로접속이되면일단메일을주고받을준비가되어진것이다. 이제구체적인메일설정을해보도록하자. - Sendmail.cf 설정 Sendmail에서가장중요하고도어려운부분이 sendmail.cf 파일의설정입니다. O Reilly사에서 Sendmail에대한전문서적이나올정도로방대하고다양한기능을가지고있으며사용법도매우다양합니다. Sendmail을사용하기위해기본적으로알아야할설정파일들에대해살펴보겠습니다. [root@arhdev root]# vi /etc/mail/sendmail.cf Sendmail의가장중요한설정파일로 /etc 또는 /etc/mail Directory에자동으로설치되어있습니다. 여기서는주요항목에대해서만설명하도록하겠습니다. Fw/etc/mail/local-host-names 메일을수신할호스트이름을명시한파일의위치를설정합니다. FR-o /etc/mail/relay-domains relay-domains파일에는 Relay를허용할호스트의이름을설정합니다. 주석으로처리하면모든 IP에대해서 Relay가허용되므로스팸메일과같은문제가발생할수도있으므로주의하시기바랍니다. DnMAILER-DAEMON Sendmail 서버가에러메시지를보내야할경우보낸사람의이름을결정합니다. 잘못된메일이되돌아온경우 FROM : Mail Delivery Subsystem <mailer-daemon> 과같은메시지를보신적이있을것입니다. Kaccess hash /etc/mail/access 5/43 페이지
Relay를허용하거나거부할특정 IP와도메인을설정하는파일입니다. relay-domains보다사용이편리하므로많이사용됩니다. O MaxMessageSize=2000000 메일의최대크기를결정합니다. 주석을제거하면설정한크기 (Byte단위) 보다큰메일은전송할수없게됩니다. 지금써준 2000000은 2메가로제한한메일용량입니다. O QueueDirectory=/var/spool/mqueue 큐 Directory를설정합니다. O Timeout.queuereturn=5d 메일을보내려는호스트에문제가생기면메일은큐 Directory에저장됩니다. Sendmail 서버는쌓인메일을상대방호스트에보내기위해주기적으로접속을시도하며, 일정한기간이지나면메일을다시발송한사람에게되돌려보냅니다. Sendmail이메일을보내려고시도하는기간을설정하는옵션으로 5d는 5일을의미합니다. O Timeout.queuewarn=4h 큐 Directory에쌓인메일이지정한시간안에전송되지못할경우메일을보낸사람에게경고메일을보냅니다. 기본값은 4h로 4시간안에전송되지못하면보낸사람에게경고의메일을보냅니다. Mlocal, P=/usr/bin/procmail, F=lsDFMAw5u:/ @qspfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, T=DNS/RFC822/X-Unix, A=procmail -Y -a $h -d $u 사용자계정에대문자가있는경우에도메일을받을수있도록설정하려면 Mlocal로시작하는부분을찾아 F= 부분에 'u' 를추가합니다. - access 설정 [root@arhfw mail]# vi access ------------------------------------------------------------------------------------- 6/43 페이지
localhost.localdomain RELAY localhost RELAY 127.0.0.1 RELAY 192.168.133. RELAY spam.com REJECT ------------------------------------------------------------------------------------ 스팸메일을방지하기위해 Relay를허용할호스트의 IP와도메인을설정하는매우중요한파일입니다위의 localhost 나 192.168.133.0/24 IP 대역에서 Relay를허용하나 spam.com 에서오는모든메일은 Relay를거부한다는뜻이다. 이와같이허용이나거부대역을지정후 access.db 파일을갱신시켜주면바로적용이된다. [root@arhfw mail]# makemap hash /etc/mail/access < /etc/mail/access - local-host-names 설정 [root@arhfw mail]# vi local-host-names ------------------------------------------------------------------------------------- clunix.org ------------------------------------------------------------------------------------- 메일을수신할호스트의이름을입력하는파일로, Sendmail 8.9.x 버전이하에서사용되었던 sendmail.cw 파일의명칭이 Sendmail 8.10.x 버전부터는 local-host-names로변경되었습니다. Sendmail 서버는이곳에적힌호스트의이름으로메일이들어오면더이상다른서버로메일을보내지않고자신의메일박스에저장합니다. 아래와같이메일서버의호스트이름을입력하거나여러개의가상호스트를사용한다면모두입력해야합니다. - aliases 설정 [root@arhfw mail]# vi /etc/aliases ------------------------------------------------------------------------------------- # Basic system aliases -- these MUST be present. mailer-daemon: postmaster postmaster: root 7/43 페이지
.. mailing: user1, user2, user3 mailing2: :include:/etc/mail/mailing_users ------------------------------------------------------------------------------------- 특정사용자에게온메일을다른사람에게보내주거나, 메일링리스트를작성해야하는경우에사용되는파일로보안에주의하여사용해야합니다. aliases 파일을열어보면시스템계정들이아래와같이 root로 alias되어있습니다. 또한특정사용자를다른사용자로 alias 시킬수도있습니다. 위와같이설정을하고설정을적용시켜주는 newaliases 명령을실행시키면된다. [root@arhfw mail]# newaliases /etc/aliases: 65 aliases, longest 32 bytes, 691 bytes total 위설정에서는 mailing@clunix.org 로메일을보내면 user1, user2, user3 계정에게메일이전송되게된다. mailing2@clunix.org 로메일을보내면 /etc/mail/mailing_users 파일에저장된계정리스트모두에게메일이전송되어진다. [root@arhfw mail]# cat mailing_users ------------------------------------------------------------------------------------- user1 user2 user3 - virtusertable 설정 [root@arhfw mail]# vi virtusertable ------------------------------------------------------------------------------------- webmaster@clunix.org alang webmaster@sysmng.com user1 webmaster@manpa.co.kr user2 ------------------------------------------------------------------------------------- 8/43 페이지
virtusertables 설정은동일시스템에여러개의도메인이메일서비스를받고있을경우 webmaster 나 admin 과같은도메인별로중복되어사용되어지는계정이있을경우가상계정으로만들어가상계정으로들어오는메일을실제시스템계정으로포워딩시켜주는설정이다. 위와같은형태로설정을하고난후 virtusertable.db 파일을생성해주어야한다. [root@arhfw mail]# makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable 그럼실제 webmaster@clunix.org 로메일을보내면 alang@clunix.org 로메일이전송되게된다. - sendmail monitoring 하기 [root@arhfw mail]# mailstats Statistics from Wed Jan 23 04:02:04 1980 M msgsfr bytes_from msgsto bytes_to msgsrej msgsdis Mailer 5 361145 14357435K 89312 3671483K 16983 0 esmtp 8 236772 11571389K 661786 20775066K 8687 0 local ============================================================= T 597917 25928824K 751098 24446549K 25670 0 - sendmail mail queue monitoring 하기 [root@ns /root]# mailq Mail Queue (5 requests) --Q-ID-- --Size-- -----Q-Time----- ------------Sender/Recipient------------ LAA21970 2375 Sat Jul 21 11:40 MAILER-DAEMON 8BITMIME (Deferred: Connection refused by web.kdlp.org.) <www@web.kdlp.org> QAA29807 11059 Fri Jul 20 16:58 MAILER-DAEMON 8BITMIME (Deferred: Connection refused by tmail.simmani.com.) <IDCGUYS_20010720164215677-@tmail.simmani.com KAA01947 7550 Fri Jul 20 10:29 MAILER-DAEMON 9/43 페이지
8BITMIME (Deferred: Connection refused by web.kdlp.org.) <www@web.kdlp.org> OAA05202 3153 Wed Jul 18 14:43 MAILER-DAEMON 8BITMIME (Deferred: Connection refused by web.kdlp.org.) <www@web.kdlp.org> PAA19364* (no control file) - sendmail 통해송수신메일용량제한하기 송신메일크기제한은 sendmail.cf 의 MaxMessageSize 를찾아서허용할크기의용량을정의하면된다. 용량단위는 Byte 이며 5MByte 크기의데이터를메일로송신하고싶을경우는 MaxMessageSize=5024000 라고설정하면된다. 수신메일크기제한은 Mlocal 설정부분을찾는다. Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/ @qspfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, T=DNS/RFC822/X-Unix, 이곳에서 M=5024000 와같은설정을추가해준다. Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/ @qspfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, M=5024000, T=DNS/RFC822/X-Unix, 그런후 sendmail 을재시작해주면바로적용된다. 2.3.2 Post Office Protocol(POP) 서버구축하기 - POP3 의작동원리 Post Office Protocol의약자인 POP은각 SMTP 로부터보내진메일이저장된메일서버의저장박스에있는메일데이터를 MUA에서수신하도록서비스를해주는프로그램이다. 여기에서는 UWIMAP 에서지원하는 POP3 구축과 Qpopper 로구축하는방법에대해알아 10/43 페이지
볼것이다. POP 방식은 IMAP의 POP3 나 Qpopper 의 POP3 중하나만을선정하여사용을해야할것이다. 두개를동시에쓰면 POP3 의 Service Port 인 110 번 Port 를두개의프로그램에서서로점유할려는충돌이발생할것이다. - IMAP/POP3 설치하기 Sendmail을통해메일을메일서버의메일박스에보관하는부분까지는위단계설정으로완료가되었다. 하지만메일서버의보관된메일을사용자 MUA를통해사용자 PC로가져오기위해서는 POP3 나 IMAP 같은프로그램이필요하게된다. 여기서는 IMAP 과 POP3 를설치하는방법에대해알아보도록하자. - IMAP 설치및설정하기 해당사이트에서 Imap source 를다운받는다. ftp://ftp.cac.washington.edu 적절한경로에 Source 를옮겨놓고압축을푼다. [root@arhfw apmj]# tar xzvf imap-2004.tar.z 압축이풀린 Imap Directory 를 /usr/local/imap Directory 로옮긴다. [root@arhfw apmj]# mv imap-2004 /usr/local/imap [root@arhfw apmj]# cd /usr/local/imap [root@arhfw imap]# make slx SSLTYPE=none 컴파일이완료되면생성된 imapd 와 ipop3d 실행파일을 /usr/sbin 으로옮겨놓는다. [root@arhfw imap]# cp imapd/imapd /usr/sbin [root@arhfw imap]# cp ipopd/ipop3d /usr/sbin imapd, ipop3d Daemon 을 xinetd Daemon 에서제어가능하도록설정한다. 11/43 페이지
[root@arhfw imap]# vi /etc/xinetd.d/imapd ------------------------------------------------------------------------------------- service imap { disable = no socket_type = stream wait = no user = root server = /usr/sbin/imapd log_on_success += DURATION USERID log_on_failure += USERID nice = -2 } -------------------------------------------------------------------------------------- [root@arhfw imap]# vi /etc/xinetd.d/ipop3d -------------------------------------------------------------------------------------- service pop3 { disable = no socket_type = stream wait = no user = root server = /usr/sbin/ipop3d log_on_success += USERID log_on_failure += USERID nice = -2 } -------------------------------------------------------------------------------------- imap 관련라이브러리와헤더파일을옮겨서다른프로그램에서 Imap 이호환되게처리한다 [root@arhfw imap]# cp c-client/c-client.a /usr/lib [root@arhfw imap]# cp c-client/mail.h /usr/local/include [root@arhfw imap]# cp c-client/rfc822.h /usr/local/include 12/43 페이지
[root@arhfw imap]# cp c-client/linkage.h /usr/local/include xinetd Daemon 을재시작한다. [root@arhfw imap]# /etc/rc.d/init.d/xinetd restart 정상적으로작동하는지확인한다. - IPOP3 확인하기 [root@arhfw xinetd.d]# telnet localhost 110 ------------------------------------------------------------------------------------- Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK POP3 localhost.localdomain 2004.87 server ready user <mail account> -> 메일계정을입력한다. +OK User name accepted, password please pass <passowrd> -> 패스워드를입력한다. +OK Mailbox open, 4 messages -> 메일이 4 통보관되어있다는의미 list -> 보관된메일리스트확인 +OK Mailbox scan listing follows 1 758 2 547 3 766 4 767. retr 1 -> 1 번메일확인 +OK 758 octets 13/43 페이지
Return-Path: <root@arhdev.clunix.org> Received: from arhdev.clunix.org (arhdev.clunix.org [192.168.133.9]) by arhfw.clunix.org (8.12.8/8.12.8) with ESMTP id j3r5j4pa006011 for <alang@clunix.org>; Wed, 27 Apr 2005 14:19:04 +0900 Received: from arhdev.clunix.org (localhost.localdomain [127.0.0.1]) by arhdev.clunix.org (8.12.8/8.12.8) with ESMTP id j3r5n5fg026088; Wed, 27 Apr 2005 14:23:05 +0900 Received: (from root@localhost) by arhdev.clunix.org (8.12.8/8.12.8/Submit) id j3r5n5yc026086; Wed, 27 Apr 2005 14:23:05 +0900 Date: Wed, 27 Apr 2005 14:23:05 +0900 From: root <root@arhdev.clunix.org> Message-Id: <200504270523.j3R5N5Yc026086@arhdev.clunix.org> To: alang@clunix.org Subject: test Cc:.@arhdev.clunix.org Status: O test ------------------------------------------------------------------------------------ - IMAP 확인하기 [root@arhfw xinetd.d]# telnet localhost 143 ------------------------------------------------------------------------------------ Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK [CAPABILITY IMAP4REV1 LITERAL+ SASL-IR LOGIN-REFERRALS AUTH=LOGIN] localhost.localdomain IMAP4rev1 2004.350 at Wed, 27 Apr 2005 17:12:25 +0900 (KST) 위와같이접속이완료되면정상적으로동작을하는것이다. 14/43 페이지
- QPOPPER 설치하기 Qpopper는 Qualcomm 사의 Eudora 부서에서개발하여무료로배포하고있으며 UNIX계열의 POP3 서버로가장흔히사용하는프로그램이다. 일반배포판에서기본지원하고있는 POP3 프로그램에비해대형서비스에안정스럽다고알려져있다. 설치에앞서먼저 ftp://ftp.eudora.com/eudora/servers/unix/popper/ 에서 qpopper 최신버전을다운받는다. [root@arhfw src]# tar xzvf qpopper4.0.7.tar.gz [root@arhfw src]# cd qpopper4.0.7 [root@arhfw qpopper4.0.7]#./configure \ --enable-specialauth \ --enable-servermode \ --enable-apop=/etc/pop.bin \ --with-popuid=bin configure 옵션에대해간단히설명하겠다. --enable-apop=path : APOP은 POP3의확장버전으로보안이강화된버전이다. 이전에 POP3 에서는사용자가암호를서버로보낼때비암호화방식으로전달을했는데 APOP 에서는이를암호화시켜준다. --with-popuid=user : 이옵션의위의 apop 와항상함께사용되어져야하는옵션으로실제 apop 기능을실행하는사용자의의미이다. --enable-servermode : 서버에부하가많이걸리는환경에서효율적으로 POP3 서비스를할수있게해주는기능이다. --enable-specialauth : POP 인증패스워드를 Shadow 패스워드로사용하기위한옵션이다. [root@arhfw qpopper4.0.7]# make 정상적으로컴파일이완료되면 popper 과 popauth 란두개의실행파일이생성이될을것이다. popper 은 POP3 서버 Daemon의실행파일이고 popauth 는 APOP 계정을관리하는프로그램이다. 이두개의실행파일을 /usr/bin 에옮기고아래와같이퍼미션을조정한다. 15/43 페이지
[root@arhfw qpopper4.0.7]# cd popper/ [root@arhfw popper]# cp popper /usr/bin [root@arhfw popper]# cp popauth /usr/bin [root@arhfw popper]# chmod 755 /usr/bin/popper [root@arhfw popper]# chmod 4755 /usr/bin/popauth [root@arhfw popper]# chown root. /usr/bin/popper [root@arhfw popper]# chown bin.root /usr/bin/popauth 만일 popper 의 man page 를사용할필요가있을경우는 man 관련페이지를기본 man page 경로에옮겨둔다. [root@arhfw qpopper4.0.7]# cd man [root@arhfw man]# chown root. * [root@arhfw man]# chmod 644 * [root@arhfw man]# cp *.8 /usr/man/man8/ - Qpopper 설정하기 Qpopper 은 xinetd Daemon에의해가동된다. 먼저 Qpopper 에대한 xinetd 설정을한다. ( 주의 : 위의 IMAP/POP3 서비스가 enable 되어있을경우충돌이나므로 IMAP/POP3 의 xinetd 설정의 disable 설정을 yes 로해두길바란다. ) [root@arhfw root]# vi /etc/xinetd.d/qpop3d -------------------------------------------------------------------------------- service pop3 { disable = no socket_type = stream wait = no user = root server = /usr/bin/popper log_on_success += USERID log_on_failure += USERID 16/43 페이지
nice = -2 } --------------------------------------------------------------------------------- xinetd Daemon을재시작한다. [root@arhfw root]# /etc/rc.d/init.d/xinetd restart Qpopper 실행이정상적으로동작하는지확인한다. [root@arhfw root]# telnet localhost 110 --------------------------------------------------------------------------------- Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Qpopper (version 4.0.7) at arhfw.clunix.org starting. 위와같이접속이되어지면정상적이동작이확인되는것이다. 2.3.3 Qmail 로 Mail Server 구축하기 큐메일은기존의 sendmail 을대체하는메일전송에이전트 ( MTA ) 로써보다안정하고빠른속도로많이알려져있다. 하지만어려운설치과정과많은설정파일때문에일부관리자들만이사용하고있다. 이런큐메일에몇가지프로그램을같이사용하여웹호스팅용메일서버패키지로사용하고자한다. 기존의 sendmail 에서할수없었던많은기능을발휘할수있을것이다. - 주요기능 * 무한정 (?) 도메인과 pop 메일아이디를발급할수있다. * 한개의시스템계정생성으로모든버츄얼도메인,pop 계정을만들수있다. ( 불필요한유저생성을막을수있다. - 보안적인측면에유리 ) * 각도메인마다메일계정, 메일링리스트의한계를설정할수있다. * 웹인터페이스로메일추가, 삭제, 메일링및각도메인에대한메일관리가가능하다. * 유저별 quota 설정이가능하다. * 각도메인관리자가자기도메인의메일계정추가삭제가가능하다. 17/43 페이지
* 가상메일없이도도메인마다똑같은사용자계정을만들수있다. 위의내용은웹호스팅용메일시스템으로아주유리한기능들이다. 이밖에다양한기능들이많이있다. - 필요한프로그램 qmail-1.03.tar.gz qmail-1.03.qmail_local.patch qmail-1.03.errno.patch qmail-0.0.0.0.patch sendmail-flagf.patch ucspi-tcp-0.88.tar.gz ucspi-tcp-0.88.errno.patch daemontools-0.76.tar.gz autorespond-2.0.2.tar.gz qmailadmin-1.2.1.tar.gz vpopmail-5.4.0.tar.gz ezmlm-0.53.tar.gz ezmlm-idx-0.40.tar.gz qmail, ucspi-tcp, daemontools : http://qmail.org vpopmail, qmailadmin, autoresponder : http://inter7.com ezmlm, ezmlm-idx : http://www.ezmlm.org - qmail 설치하기 qmail 컴파일설치 위프로그램들을모두 /usr/local/src/qmail Directory 및에옮겨두고 tar 를푼다. 그리고 qmail 이설치될 Directory를만든다. 그런뒤 qmail103.patch 파일을 qmail-1.03 Directory 안에둔다. [root@arhdev qmail]# tar xzvf qmail-1.03.tar.gz 18/43 페이지
[root@arhdev qmail]# cd qmail-1.03 [root@arhdev qmail-1.03]# patch -p1 <../qmail-1.03.errno.patch [root@arhdev qmail-1.03]# patch -p1 <../qmail-1.03.qmail_local.patch [root@arhdev qmail-1.03]# cp../sendmail-flagf.patch. [root@arhdev qmail-1.03]# patch -p0 < sendmail-flagf.patch [root@arhdev qmail-1.03]# mkdir /var/qmail INSTALL.ids 파일을편집한다.(qmail 에필요한계정과그룹들이다. 해당 OS에맞추어편집한다.) [root@arhdev qmail-1.03]# vi INSTALL.ids ----------------------------------------------------- groupadd nofiles useradd -g nofiles -d /var/qmail/alias alias useradd -g nofiles -d /var/qmail qmaild useradd -g nofiles -d /var/qmail qmaill useradd -g nofiles -d /var/qmail qmailp groupadd qmail useradd -g qmail -d /var/qmail qmailq useradd -g qmail -d /var/qmail qmailr useradd -g qmail -d /var/qmail qmails ----------------------------------------------------- INSTALL.ids 를실행하여 qmail 운영에필요한계정과그룹을생성한다. [root@arhdev qmail-1.03]# sh INSTALL.ids qmail 관련계정, 그룹이생성되었는지확인한다. [root@arhdev qmail-1.03]# cat /etc/passwd qmail 을컴파일한다. [root@arhdev qmail-1.03]# make 19/43 페이지
[root@arhdev qmail-1.03]# make setup check 참고로상황에따라아래와같은에러가나타날수있다. 그해결방법이다. 문제 1- qmail-1.03 make 시발생하는 make: *** [spawn.o] 오류 1 해결법 : vi qmail-1.03/conf-spawn -------------------------------------------------------- 1000 위의 1000 을 509 로변경 -------------------------------------------------------- 문제 2- /usr/include/openssl/kssl.h:157: parse error before '*' token /usr/include/openssl/kssl.h:159: parse error before "kssl_ctx_setkey" /usr/include/openssl/kssl.h:159: parse error before '*' token /usr/include/openssl/kssl.h:161: parse error before "context" /usr/include/openssl/kssl.h:162: parse error before "kssl_build_principal_2" /usr/include/openssl/kssl.h:162: parse error before "context" /usr/include/openssl/kssl.h:165: parse error before "kssl_validate_times" /usr/include/openssl/kssl.h:165: parse error before "atime" /usr/include/openssl/kssl.h:167: parse error before "kssl_check_authent" /usr/include/openssl/kssl.h:167: parse error before '*' token /usr/include/openssl/kssl.h:169: parse error before "enctype" In file included from tls.h:4, from qmail-remote.c:53: /usr/include/openssl/ssl.h:909: parse error before "KSSL_CTX" /usr/include/openssl/ssl.h:931: parse error before '}' token 20/43 페이지
qmail-remote.c: In function `quit': qmail-remote.c:263: dereferencing pointer to incomplete type qmail-remote.c: In function `main': qmail-remote.c:655: warning: return type of `main' is not `int' make: *** [qmail-remote.o] 오류 1 해결법 : -------------------------------------------------------------------------------- qmail-1.03/conf-cc 파일수정 cc -O2 -DTLS=20021228 -I/usr/local/ssl/include 행을 cc -O2 -DTLS=20021228 -I/usr/local/ssl/include -I/usr/kerberos/include 로.. ------------------------------------------------------------------------------- 기본 /var/qmail/control 및의설정파일의설정을위해다음을실행한다. [root@arhdev qmail-1.03]#./config 만일여기서정상적으로실행되지않으면직접적으로설정을실행하는방법을사용한다. ( 단 DNS 에문제가있을수도있다. ) [root@arhdev qmail-1.03]#./config-fast clunix.co.kr -> << Domain >> qmail 을위한몇가지부수적은프로그램을설치한다. - uscpi-tcp 설치하기 [root@arhdev qmail]# tar xzvf ucspi-tcp-0.88.tar.gz [root@arhdev qmail]# cd ucspi-tcp-0.88 21/43 페이지
[root@arhdev ucspi-tcp-0.88]# patch -p1 <../ucspi-tcp-0.88.errno.patch [root@arhdev ucspi-tcp-0.88]# make [root@arhdev ucspi-tcp-0.88]# make setup check - daemontools 설치하기 [root@arhdev qmail]# mkdir -p package [root@arhdev qmail]# chmod 1755 package [root@arhdev qmail]# cd package/ [root@arhdev package]# cp../daemontools-0.76.*. [root@arhdev package]# tar xzvf daemontools-0.76.tar.gz [root@arhdev package]# cd admin/daemontools-0.76/ [root@arhdev daemontools-0.76]# patch -p1 <../../daemontools-0.76.errno.patch [root@arhdev daemontools-0.76]# package/install - autorespond 설치하기 [root@arhdev daemontools-0.76]# cd../../.. [root@arhdev qmail]# tar xzvf autorespond-2.0.2.tar.gz [root@arhdev qmail]# cd autorespond-2.0.2 [root@arhdev autorespond-2.0.2]# make [root@arhdev autorespond-2.0.2]# cp autorespond /usr/local/bin 모두이상없이설치가되었다면다시 qmail 을위해파일을만든다. [root@arhdev qmail]# vi /var/qmail/rc ---------------------------------------------------------------- #!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start./maildir/ ---------------------------------------------------------------- 22/43 페이지
[root@arhdev qmail]# chmod a+x /var/qmail/rc 다음은큐메일 Daemon 을위한 Directory 와파일들을생성. 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 Q_UID=`id -u qmaild` Q_GID=`id -g qmaild` exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -vrhl 0 -x /etc/tcp.smtp.cdb \ -u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1 -------------------------------------------- /var/qmail/supervise/qmail-smtpd/log/run 의내용 ----------------------------------------------- #!/bin/sh exec /usr/local/bin/setuidgid qmaill \ /usr/local/bin/multilog t /var/log/qmail/smtpd 23/43 페이지
이렇게편집한파일들에실행권한을준다. 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 다음은 qmail-smtpd 를위한로그 Directory 만들기 mkdir -p /var/log/qmail/smtpd chown qmaill /var/log/qmail /var/log/qmail/smtpd 다음파일에는 qmail smtp Daemon이메일을중계할주소를적어주는것이다. 192.168.133.167 은당연히설치할서버의주소로바꿔야한다. 그외메일을중계해줄서버의주소가있다면같은형식으로추가한다. vi /etc/tcp.smtp ------------------------------------------ 127.0.0.1:allow,RELAYCLIENT="" 192.168.133.167:allow,RELAYCLIENT="" ------------------------------------------ 후에이파일에변경이있는경우다음의 qmail 부트스크립트를이용해다음과같이한다. /etc/rc.d/init.d/qmail cdb 혹은 tcprules 를이용한적용방법으로아래 command 를실행한다. tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp - Aliases 설정 24/43 페이지
만약주도메인의메일계정들도모두 vpopmail 로관리할것이아니라면 ( 필자는주도메인의메일계정들도모두 vpopmail로관리할것을권장한다.) 몇가지알리아스를설정해준다. 여기서 silver 는 root, postmaster 등으로오는메일을받을일반계정이다. cd ~alias echo clunix >.qmail-mailer-daemon echo clunix >.qmail-postmaster echo clunix >.qmail-root chmod 644.qmail-root.qmail-postmaster.qmail-mailer-daemon - qmail 부트파일 다음은 qmail Daemon 의부트스크립트이다. /etc/rc.d/init.d/qmail 로만들어준다. /etc/rc.d/init.d/qmail ----------------------------------------------------------------------------------- #!/bin/sh # For Red Hat chkconfig # chkconfig: - 80 30 # description: the qmail MTA PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin export PATH case "$1" in start) echo "Starting qmail" if [ -e /service/qmail-send ] ; then if svok /service/qmail-send ; then svc -u /service/qmail-send else echo qmail-send supervise not running fi 25/43 페이지
else ln -s /var/qmail/supervise/qmail-send /service/ fi if [ -e /service/qmail-smtpd ] ; then if svok /service/qmail-smtpd ; then svc -u /service/qmail-smtpd else echo qmail-smtpd supervise not running fi else ln -s /var/qmail/supervise/qmail-smtpd /service/ fi if [ -d /var/lock/subsys ]; then touch /var/lock/subsys/qmail fi ;; stop) echo "Stopping qmail..." echo " qmail-smtpd" svc -dx /service/qmail-smtpd /service/qmail-smtpd/log rm -f /service/qmail-smtpd echo " qmail-send" svc -dx /service/qmail-send /service/qmail-send/log rm -f /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 26/43 페이지
qmail-qstat ;; doqueue alrm flush) echo "Flushing timeout table and sending ALRM signal to qmail-send." /var/qmail/bin/qmail-tcpok 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 27/43 페이지
;; 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 -- schedules queued messages for immediate 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 -------------------------------------------------------------------------------------- 실행퍼미션을준다. chmod 755 /etc/rc.d/init.d/qmail 28/43 페이지
ntsysv 실행시키면 qmail 이라는새로운항목이보일것이다. 리부팅할때 qmail Daemon이실행되도록체크해준다. - vpopmail 설치 vpopmail 은가상도메인추가, 설정, pop 유저설정과 pop3 Daemon 등의기능을한다. 컴파일과설치 설치하기전에 vpopmail 이사용할유저와그룹을만든다. groupadd vchkpw useradd -g vchkpw vpopmail vpopmail 을설치하자. [root@arhdev alias]# cd /usr/local/src/qmail/ [root@arhdev qmail]# tar xzvf vpopmail-5.4.6.tar.gz [root@arhdev qmail]# cd vpopmail-5.4.6 MySQL 사용하지않을경우 설치시몇가지옵션이있는데자세한것은 vpopmail faq 를읽어보도록. 보통다음옵션만주고컴파일하면된다../configure --enable-default-domain=clunix.co.kr make make install-strip MySQL 을사용할경우 MySQL db를사용하려한다면, 컴파일하기전에먼저 vmysql.h 를열어서 sql 서버를억세스할수있는 user와암호등을설정해주어야한다. 29/43 페이지
테이블을생성 / 삭제할수있는사용자이여야하므로보통 root 나해당유저로설정해준다../configure --enable-default-domain=clunix.co.kr --enable-mysql=y \ --enable-sqlincdir=/usr/local/mysql/include/mysql \ --enable-sqllibdir=/usr/local/mysql/lib/mysql make make install-strip 이때 --enable-large-site=n y 옵션을사용할수도있는데이것은, 디폴트로 vpopmail 은모든도메인, 유저정보를한개의테이블에서관리한다. 만약각각의도메인에많은메일유저가있다면 y 로설정하면, vpopmail은도메인별로테이블을생성, 유저정보를관리한다. 참고 : vpopmail 5.4.x 이상버전은 --enable-default-domain 컴파일옵션이없어지고 ~vpopmail/etc/defaultdomain 파일을사용하도록되었다. 이파일에직접 default domain 이름을넣어주면된다. vpopmail 5.0 이상버전은 --enable-large-site 옵션이 --enable-many-domains 으로바뀌었다. 즉, 각도메인별로테이블을생성관리할것이라면 --enable-many-domains=n 옵션을사용한다. 만약 sql 헤더파일이나라이브러리를찾지못한다며컴파일에실패한다면, --enable-sqlincdir= sql 헤더파일경로. --enable-sqllibdir= sql 라이브러리경로등을./configure 할때추가해준다. 위의예에서 clunix.co.kr 는주서버의도메인이름이다. 이것을설정하면주서버의메일계정도모두가상도메인의메일계정과동일하게관리할수있다. ( 이렇게하는것을권장한다 ) 30/43 페이지
이문서의설정은아래와같이했다../configure --enable-roaming-users=y \ --enable-tcprules-prog=/usr/local/bin/tcprules \ --enable-relay-clear-minutes=15 \ --enable-auth-logging=y \ --enable-logging=e make make install-strip 설치가되었다면 ~vpopmail 안에는 bin doc domains etc include lib users 등의 Directory과필요한바이너리들이생겼을것이다. chmod 777 ~vpopmail/etc echo "127.0.0.1:allow,RELAYCLIENT=\"\"" > ~vpopmail/etc/tcp.smtp echo "192.168.133.167:allow,RELAYCLIENT=\"\"" >> ~vpopmail/etc/tcp.smtp 이제기본릴레이파일을만들었다면다음명령을한번실행해준다. ~vpopmail/bin/clearopensmtp 마지막으로 crontab을하나설정해야하는데, 이것은 cron에의해주기적으로실행되어릴레이가허용된 IP 주소중 pop 인증시간이한시간이상된것이있으면지워준다. vpopmail 컴파일시별다른옵션을주지않았다면기본적으로릴레이허용시간은한시간이며이것은 --enable-relay-clear-minutes= 옵션으로바꿔줄수있다. 31/43 페이지
# crontab -e 40 * * * * /home/vpopmail/bin/clearopensmtp qmail-smtpd 시동스크립트는 vpopmail이조절하는 cdb 파일을참고하도록, 다음과같이바꾼다. /var/qmail/supervise/qmail-smtpd/run 의내용 ------------------------------------------------------------------------ #!/bin/sh Q_UID=`id -u vpopmail` Q_GID=`id -g vpopmail` exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -vrhl 0 \ -x /home/vpopmail/etc/tcp.smtp.cdb \ -u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1 ------------------------------------------------------------------------ - pop3 Daemon 시동파일 vpopmail 의 pop3 시동파일을만들자. 적당한곳에 Directory 를만들고 run 파일을만든다. mkdir /var/qmail/supervise/vpop /var/qmail/supervise/vpop/run 파일의내용 ------------------------------------------------------------------------ #!/bin/sh VPOP_UID=`id -u vpopmail` VPOP_GID=`id -g vpopmail` exec /usr/local/bin/softlimit -m 2500000 \ tcpserver -vrhl 0 -u $VPOP_UID -g $VPOP_GID 0 110 \ /var/qmail/bin/qmail-popup arhdev.clunix.co.kr \ 32/43 페이지
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 ------------------------------------------------------------------------ chmod 755 /var/qmail/supervise/vpop/run ln -s /var/qmail/supervise/vpop /service 5 초이내로 daemontool 에의해 pop Daemon 이구동될것이다. 위와같이 pop3 Daemon을 daemontool/tcpserver로운영하거나다음과같이 inetd 또는 xinetd 모드로운영할수도있다. xinetd 모드로운영할때 /etc/xinetd.d/ 아래아래와같은파일을하나만들어둔다. vi /etc/xinetd.d/vpop3 ---------------------------------------------------------------------- service pop3 { disable = no socket_type = stream protocol = tcp wait = no user = root server = /var/qmail/bin/qmail-popup server_args = babo.org /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir log_type = FILE /var/log/xinetd.log log_on_success = HOST log_on_failure = HOST RECORD } ---------------------------------------------------------------------- 그런후 /etc/rc.d/init.d/xinetd restart /etc/rc.d/init.d/xinetd restart 33/43 페이지
- 도메인, 메일계정추가하기 ~vpopmail/bin Directory 안에가상도메인관리를위한바이너리들이있는데다음과같은기능을한다. 표 1. 각바이너리들의용도 vadddomain : 가상도메인을추가한다. postmaster 암호를물어보는데이것은다음에설치할 qmailadmin 웹인터페이스에서로그인할때물어볼암호이다. 형식은 [ vadddomain 도메인명 ] vdeldomain : 가상도메인과모든유저를삭제한다. vdeldomain 도메인명 vadduser : pop 메일유저계정을만든다. [ vadduser alang@clunix.co.kr ] vdeluser : pop 메일유저삭제. [ vdeluser alang@clunix.co.kr ] vpasswd : 메일유저의암호바꾸기 [ vpasswd alang@clunix.co.kr ] vsetuserquota : 각유저별로 quota 설정을할수있다. [ vsetuserquota alang@clunix.co.kr 51200 ] ( 단위는 byte 이다 ). vpopbull : 서버에설정되어있는모든유저들에게한번에메일을보낼때유용하게사용할수있다. 이제도메인을추가하자. 위에서주도메인도 vpopmail에서관리하기로했다면주도메인과메일계정들도추가해야한다. 34/43 페이지
만약주도메인이 clunix.co.kr 이고, 추가할가상도메인이 arhdev.org, arhdev.co.kr 라고한다면다음과같이한다 ( 추가하기전에가상도메인들의 DNS MX 레코드의 IP주소가주서버로되어있는지확인해보자 ). vadddomain clunix.co.kr vadddomain tru64unix.co.kr 재대로설정파일이변경이되었는지확인해보자. cat /var/qmail/control/locals ------------------------------------------------ localhost 주도메인도 vpopmail이관리하기로했다면 /var/qmail/control/locals 파일의내용은 localhost 만이있어야정상이다. 다른것이있으면지운다. cat /var/qmail/control/virtualdomains ----------------------------------------------- clunix.co.kr:clunix.co.kr tru64unix.co.kr:tru64unix.co.kr cat /var/qmail/users/assign ----------------------------------------------- +clunix.co.kr-:clunix.co.kr:515:510:/home/vpopmail/domains/clunix.co.kr:-:: +tru64unix.co.kr-:tru64unix.co.kr:515:510:~vpopmail/domains/tru64unix.co.kr:-:: - 메일계정생성 cd ~vpopmail/bin./vadduser clunix@clunix.co.kr - 기존 POP 사용자변환 cd ~vpopmail/bin 35/43 페이지
./vconvert -e -c 도메인명 - sendmail 에서 qmail 로의전환 모든설정이확실히되었다고생각이들면 sendmail 을죽이고 qmail 로전환한다. /etc/rc.d/init.d/sendmail stop : sendmail 죽인다. 이제기존의 sendmail 바이너리를 qmail 의것으로바꾼다. mv /usr/lib/sendmail /usr/lib/sendmail.old mv /usr/sbin/sendmail /usr/sbin/sendmail.old ln -s /var/qmail/bin/sendmail /usr/lib ln -s /var/qmail/bin/sendmail /usr/sbin - qmail 가동하기 ln -s /var/qmail/supervise/qmail-send /service/ ln -s /var/qmail/supervise/qmail-smtpd /service/ /etc/rc.d/init.d/qmail start : qmail 가동 이렇게 /service Directory에링크를한번걸어주면링크가존재하는한즉, 재부팅한다해도 daemontools에의해서자동으로서비스가시작된다. - Daemon Tool 로서버제어방법 daemontools은상당히편리한서비스관리도구로 tcpserver와함께 xinetd를완전히대체할수있다. // 종료방법 cd /service/qmail-send 36/43 페이지
rm -f /service/qmail-send svc -dx. log cd /service/qmail-smtpd rm -f /service/qmail-smtpd svc -dx. log cd /service/vpop rm -f /service/vpop svc -dx. // stat 보기 svstat /service/vpop/ // qmail 큐에있는메일을강제로배달하기 svc -a /service/qmail-send // 서버잠시중지시키기 svc -p /service/qmail-send svc -p /service/qmail-smtpd svc -p /service/vpop // 다시진행시키기 svc -c /service/qmail-send svc -c /service/qmail-smtpd svc -c /service/vpop 이로써 MS 의아웃룩이나 Netscape 의메일메신져에서메일을받아보실수가있다. 여기서주의할것. 37/43 페이지
주도메인이외의도메인 pop3 메일계정사용자들은메일클라이언트의유저이름을 my_id@babo2.com 과같이아이디 @ 도메인명으로모두써주어야 pop 로긴이가능하다. - qmailadmin 설치 qmailadmin 설치시에는 vpopmail 을 mysql 사용안함으로설치하세요. /usr/local/src/qmail 가서 tar xzvf ezmlm-0.53.tar.gz tar xzvf ezmlm-idx-0.42.tar.gz mv -f ezmlm-idx-0.42/* ezmlm-0.53/ cd ezmlm-0.53 patch < idx.patch make // make 중에 <<./makelang : 허가거부 >> 와같은에러가발생하면 // chmod +x makelang 으로 makelang 파일에실행권한을준다. make man make setup ezmlm 은 /usr/local/bin/ezmlm/ 에설치될것이다. - qmailadmin 설치 tar xvzf qmailadmin-1.21.tar.gz cd qmailadmin-1.21./configure 에몇가지옵션이있다. 서버의설정이디폴트와다른경우설정해주자. --enable-cgibindir : qmailadmin 이설치될 Directory이다. 웹서버가사용중인 cgi-bin Directory를적어준다. 디폴트는 /usr/local/apache/cgi-bin 이다. 38/43 페이지
--with-htmllibdir : qmailadmin 의 html 템플레이트파일 ( 당연히이파일들은후에입맛에맞게수정할수있다.) 들이저장될장소이다. 그냥디폴트로나두어도된다. (/usr/local/share/qmailadmin) --enable-cgipath : 사용중인웹서버의 cgi path가 /cgi-bin/ 이아닌경우설정해준다. 디폴트는 /cgi-bin/qmailadmin 이다. make make install-strip 설치가잘되었는지브라우저로접속해본다. http://localhost/cgi-bin/qmailadmin - qmailadmin 설치팁.. 만일특정멀티도메인으로 qmailamdin 을설치하고자할때의예제이다. 여기서전 vpopmail 계정에 qmailadmin 까지합쳐서관리하고자한다. 그리고 mail.domain.com 이란도메인으로접속하고자한다. 먼저소스를풀고.. 그소스 Directory로이동한다. 그런뒤... #./configure --enable-cgibindir=/usr/local/apache/cgi-bin \ --with-htmllibdir=/home/vpopmail/www \ --enable-htmldir=/home/vpopmail/www \ --enable-cgipath=/cgi-bin/qmailadmin \ # make # make install-strip 그런뒤 apache 의 httpd.conf 설정에서 ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" 39/43 페이지
설정의주석을제거하고난뒤 /usr/local/apache/cgi-bin/qmailadmin 파일생성을확인한다. 그런뒤웹페이지에서 http://mail.domain.com/cgi-bin/qmailadmin 로접속하자.. 무사히페이 > 지가뜨면성공 ~~ 이제원하는도메인과 postmaster의암호를넣으면로그인해서여러가지설정을편안하게할수있다. - qmail 운영, 관리하기 도메인추가후 qmail 과 vpopmail 이돌아가고있는상태에서 vadddomain 으로도메인을추가했다면 /etc/rc.d/init.d/qmail reload 또는 kill -HUP 시그날을 qmail-send 에게보내서 /var/qmail/user 설정파일을다시읽도록해야한다. - 알리아스와포워드계정 알리아스와포워드계정은거의비슷한기능을하는데다른점은알리아스는이서버에존재하는메일계정에다른이름을여러게설정하는것이고, 포워드계정은도착한메일을설정해놓은다른도메인의메일계정 ( 들 ) 로보내는것이다. 다음설정과정을보면이해가쉬울것이다. qmailadmin 에서는쉽게설정할수있겠고, 만약 qmailadmin 을설치하지않은경우다음과같이한다. # 알리아스 silver 라는팝메일계정이존재하고, webmaster 라는알리아스를만드는경우. 40/43 페이지
해당도메인 Directory(~vpopmail/domains/ 도메인 /) 에다음과같은내용의.qmail-webmaster 파일을만든다. /home/vpopmail/domains/ 도메인 /silver/maildir/ 이제 webmaster 로오는메일은 silver 가받을것이다. # 포워드 silver 로오는메일을 babo@kldp.org 라는다른도메인으로포워딩해줄때. 해당도메인 Directory(~vpopmail/domains/ 도메인 /) 에다음과같은내용의.qmail-alang 파일을만든다. &alang@kobis.net 이제이도메인의 alang 으로오는메일들은 alang@kobis.net 로보내질것이다. # 각도메인마다메일계정, 메일링리스트수한계정하기 이것은웹호스팅업체에서 qmailadmin 으로각유저들에게사용중인도메인의메일설정을직접하게해줄때매우유용하게쓰일수있을것이다. 각도메인마다메일, 메일링리스트의설정한계를줄수있는데, 이것은 ~vpopmail/domains/ 도메인 / 에.qmailadmin-limits 파일을만들어주면된다. 형식은다음과같다. maxpopaccounts maxaliases maxforwards maxmailinglists maxautoresponders X X X X X X 는해당도메인이사용할수있는최대한의수를넣어주면되겠다. 41/43 페이지
- bounce 되는메일에메세지넣기 해당도메인으로수신되는메세지가바운스되는경우가있는데보통, 팝유저의쿼타용량이한도를넘었거나, 유저가존재하지않을경우이다. 다음과같은파일을만들어각가상도메인의 Directory에넣어놓으면바운스되는메일들에포함되어되돌려지며당신은센스있는관리자가된다 :-).over-quota.msg 에는메일유저의쿼타용량이초과되었으므로메일수신을할수없다는메세지를..no-user.msg 에는우리도메인엔그런메일계정없지롱하는내용의메세지를넣어두면된다. 이파일들이없다면 vpopmail은바운스되는메일에뻣뻣한영문메세지만을포함시킨다. - ezmlm 으로대용량메일링보내기 메일링테스트를해보도록하자. 먼저 ~ezmlm/bin 로간다. 그런뒤메일링리스트의메일링대표아이디를생성한다../ezmlm-make [ 대표도메인Directory/ 대표아이디 ] [ 대표도메인Directory/.qmail-대표아이디 ] [ 대표아이디 domain] 예 ) $./ezmlm-make /home/vpopmail/domains/clunix.co.kr/mailling \ /home/vpopmail/domains/clunix.co.kr/.qmail-mailling mailling clunix.co.kr 그다음으로메일링리스트의리스트를작성한다. 42/43 페이지
$./ezmlm-sub /home/vpopmail/domains/clunix.co.kr/mailling alang@clunix.co.kr 위와같은식으로계속추가하면된다. 추가된리스트확인은 ezmlm-list 명령어로가능하다. $./ezmlm-list /home/vpopmail/domains/clunix.co.kr/mailling 자이제메일링을보내보도록하자. mail -v mailling@clunix.co.kr 메일링이재대로이루어졌는지확인하면된다. 주의 : 꼭 vpopmail 사용계정으로메일링리스트설정을해야합니다. root 로하였을경우메일링이발송안되는수도있습니다. 43/43 페이지