2012-09-15

Mail]qmail 설치하기(qmail+mysql+vpopmail+qmailscanner)


qmail 서버를 mysql 과 vpopmail, 바이러스 검출과 필터링을 위한 qmail-scanner와 함께 설치하는 방법입니다.

설치하기 전에 :

큐메일 서버는 모듈별로 이루어져 있습니다. 또한 각각의 모듈별로 많은 패치기 존재합니다.
따라서 정확한 동작을 위해서는 이 패치또한 정확하게 이루어져야 합니다. 
만약 설치하고 나서 정상적으로 동작하지 않는다면 패치가 정확한지, 환경설정이 정확한지를 다시 한번 확인해 봐야 합니다. 
또한 큐메일 서버를 설치하기 전에 먼저 dns 설정을 해야 함을 잊어서는 안됩니다.
설치 도중에 큐메일  서버의 컴파일 전에 컴파일 환경을 잡아주는 과정이 있는데, dns 설정이 올바르지 않다면 에러를 유발하게 됩니다. 
따라서 먼저 dns 설정을 해 주어야 하며 역도메인 까지 설정을 해 주어야 문제없이 설치를 할 수 있습니다. 
지금부터 설치는 dns 설정이 되어 있다는 것을 가정합니다.

목표 :

1. 사용자 계정을 mysql 을 이용함으로써 추가나 삭제를 할수 있다.
2. vpopmail 을 설치함으로써 가상 도메인에 대한 관리를 손쉽게 할수 있다.
3. qmail-scanner 을 설치함으로써 바이러스에 대한 필터링을 한다.

필요한 파일 :

qmail-1.03.tar.gz
ucspi-tcp-0.84.tar
daemontools-0.76.tar
qmail-scanner-0.96.tgz
maildrop-1.3.4.tar.gz        // 이것도 qmail-scanner 을 설치하기 위해 필요합니다.
autorespond-1.0.0.tar.gz
qmailadmin-0.42.tar.gz        // 이것을 사용하기 위해서는 vpopmail 사용시 mysql 을 사용안함으로
하셔야 합니다.
mysql-3.22.32.tar.gz
rblssmtp.tar.gz                // ucspi-tcp 가 버젼이 0.86 이상이면 필요없습니다.
vpopmail-4.9.10.tar
Time-HiRes-01.02.tar        // qmail-scanner 을 설치할때 필요합니다. 필요에 따라 unzip 이 필요하기도 합니다. 이는 바이러스 필터시 압축파일의 경우 압축을 풀어야 하기 때문입니다.

패치
qmail-1_03-mysql-0_6_6.patch     -> 사용자 여부를 시스템 계정이 아닌 mysql 에서 하기 위한 패치.
qmail-103.patch     -> oversize dns 을 위한 패치
checkpassword-0.81--mysql-0.6.6.patch     -> pop3 사용시 사용자에 대한 패스워드 확인을  mysql 에서 하기 위한 패치. vpopmail 을 설치한다면 필요없습니다.
qmailqueue-patch            -> qmail-scanner 를 위한 queue 패치입니다.
qmail-smtp-auth.tar.gz     -> 이것은 smtp 사용시 팝계정을 가진 사용자에 한해 smtp 를 사용하게 하자는 패치입니다.
좋더군요.
relaymailfrom.patch     -> 옵션으로 보내는 사람의 메일 주소로 smtp 릴레이를 막자는 패치입니다.

패치가 많다고 해서 한번에 다 적용하려고 하지 말고. 하나씩 설치할때마다 필요한 패치를 그때 그때 적용하고 qmail 을 재 빌드하고 컴파일 하면 됩니다.

    qmail 을 패치하고 나서
        소스에서
            make
            make install-strip

설치 :

설치 디렉토리는 기본적으로 /usr/local 이며 모든 파일은  /pds 에 있다고 가정하였습니다. 그리고 /usr/local 도 편의를 위해 /local 로 심볼릭 링크를 만들어 두었습니다. 따라서 /local 은  /usr/local 을 의미합니다.

저는 먼저 dns 설정을 다음과 같이 설정하였습니다.  본 메일 서버의 이름을 mail.com 이라고 하였고 나중을 위해 두개의 도메인을 더 추가하였습니다. 어자피 내부를 위한 것이니 아무 이름이나 상관은 없습니다.

mail.com    mail1.com    mail2.com

/etc/named.conf

    options {  
            directory "/var/named";
    };

    zone "." IN {
            type hint;
            file "named.ca";
    };

    zone "localhost" IN {
            type master;
            file "localhost.zone";
            allow-update { none; };
    };

    zone "mail.com" IN {
            type master;
            file "mail.com.zone";
            allow-update { none; };
    };

    zone "mail1.com" IN {
            type master;
            file "mail1.com.zone";
            allow-update { none; };
    };

    zone "mail2.com" IN {
            type master;
            file "mail2.com.zone";
            allow-update { none; };
    };

    zone "0.0.127.in-addr.arpa" IN {
            type master;
            file "named.local";
            allow-update { none; };
    };

    zone "1.168.192.in-addr.arpa" IN {
            type master;
            file "1.168.192.reverse";
            allow-update { none; };
    };

zone 파일 설정 : /var/named

    ** mail.com.zone **

@                       IN SOA          mail.com.    root.mail.com. (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum

                        IN NS           mail.com.
                        IN MX 10        @

                        IN        A       192.168.1.55
www                 IN       A       192.168.1.55
ftp                     IN       A       192.168.1.55



    ** 1.168.192.reverse **

@       IN      SOA     mail.com. master.mail.com.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum

55             IN      PTR     mail.com.

대충 이정도만 설정을 했습니다... 뭐 틀린점이 있다면.. 알아서.. 수정하세요... ^^
나머지 mail1.com.zone 과 mail2.com.zone 도 설정을 해 줘야 겠지요..
핑 테스트 결과... 정상적으로 반응하는거 확인했습니다.

1. mysql  설치.

        # tar  xvzf mysql-3.22.32.tar.gz
        # cd mysql-3.22.32
        # ./configure --prefix=/usr/local/mysql                // 기본적인 mysql 환경 설정입니다.
        # make
        # make install
        # cd /usr/local/mysql/bin
        # ./mysql_install_db
        # ./safe_mysqld &

    : mysql 은 이정도면 간단하게 설치가 됩니다. 그러나 qmail 과 함께 사용하기 위해서는 몇가지 추가해야 할게 있습니다.
    몇개의 심볼링 링크를 생성해야 합니다. 이 링크를 생성안하면 qmail 컴파일시 에러가 납니다.

        # mkdir /usr/local/include
          # ln -s /usr/local/mysql/include/mysql /usr/local/include/mysql
          # ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
          # mkdir /usr/local/lib
          # ln -s /usr/local/mysql/lib/mysql /usr/local/lib/mysql
          # ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql

    mysql 구동은 다음과 같이 할수 있습니다.

           # vi  /etc/rc.d/rc.local
                if [ -f /usr/local/mysql/bin/safe_mysqld ];
                then
                    /usr/local/mysql/bin/safe_mysqld &
                fi
  
자 이제 mysql 에 대한 설정은 끝났고.. 이제 큐메일에 대한 설치에 들어갑니다. 패치 잘 보세요..

2. qmail 설치

        # tar xvzf qmail-1.03.tar.gz
        # cd qmail-1.03
        # cp /pds/qmail-103.patch /local/qmail-1.03
        # patch -p1 < qmail-103.patch                // over size DNS 패치입니다.
            patching file dns.c      
        # patch -p1 < qmail-1_03-mysql-0_6_6.patch        // mysql 에서 큐메일 인증을 위한 패치입니다.
            patching file Makefile
            patching file README.mysql.en
            patching file TARGETS
            patching file auto_du.sh
            patching file conf-du
            patching file mysql.c
            patching file qmail-getpw.c
            patching file qmail-local.c
            patching file qmail-lspawn.c
            patching file qmail-popup.c

        자 이제부터 본격적으로 큐메일 서버 설치에 들어갑니다.

        # mkdir /var/qmail      
      
        큐메일에 필요한 사용자와 그룹을 등록합니다. 기본적으로 INSTALL.ids 를 열어보시면 운영체제에 따라 설정이 되어 있는데 해당 OS 에 따라 나머지는 지워주시면 됩니다.
            예 ) 리눅스의 경우
                        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          

        # sh INSTALL.ids
        # make
        # make setup check
     
    만약 make 하는 도중에 에러가 발생한다면 mysql 과 관련하여 symbolic 링크를 잘 걸어줬는지 확인해 보세요.
        자 이제 빌드와 컴파일 하는 과정이 끝났습니다. 이제는 설정에 들어갈 차례입니다.
  
        # ./config
            Your hostname is mail.com.
            Your host's fully qualified name in DNS is mail.com.
            Putting mail.com into control/me...
            Putting mail.com into control/defaultdomain...
            Putting mail.com into control/plusdomain...

            Checking local IP addresses:
            127.0.0.1: Adding localhost to control/locals...
            192.168.1.55: Adding mail.com to control/locals...

            If there are any other domain names that point to you,
            you will have to add them to /var/qmail/control/locals.
            You don't have to worry about aliases, i.e., domains with CNAME records.
           
            Copying /var/qmail/control/locals to /var/qmail/control/rcpthosts...
            Now qmail will refuse to accept SMTP messages except to those hosts.
            Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

    이렇게 나와야 합니다. 이렇게 나오지 않는다면 DNS 설정에 문제가 있는 것입니다. ( 대부분의 경우
역 도메인을 설정 안했을때 발생하더군요. ) 다시한번 확인해 보시고 DNS 에 아무 이상이 없다면.. 다음과
같은 방법을 사용해도 됩니다.

                # ./config-fast mail.com(자신의 도메인명)

        자 이제 큐메일이 작동하는데 필요한 프로그램을 설치하는 과정입니다. 잘 보세요..
    설치할 프로그램은 ucspi-tcp-0.84.tar.gz,  daemontools-0.70-man.tar.gz, rblsmtpd-0.70.tar.gz 입니다. 이중에서 autorepond-1.0.0.tar.gz 는 직접 컴파일 해야 합니다.
    uscpi-tcp 는 0.86 이상부터는 rblsmtpd 를 포함하고 있으므로 rblsmtpd 를 설치 안하셔야 합니다.
  
        ucspi-tcp-0.84 를 설치합니다.

        # tar xvzf ucspi-tcp-0.84.tar.gz
        # cd ucspi-tcp-0.84
        # make
        # make setup check

        daemontools-0.76 를 설치합니다. 권장 설치 방법이 좀 다르더군요.. 그래서 그대로 설치를 했습니다.    좀 복잡하지요.. ^^
        이전 버젼은 다른거와 비슷한 방법으로 설치를 했는데.. 이번은 좀 틀리더군요..

        # mkdir -p /package
        # chmod 1755 /package
        # cd /package
        # gunzip daemontools-0.76.tar
        # tar -xpf daemontools-0.76.tar
        # rm daemontools-0.76.tar
        # cd admin/daemontools-0.76
        # package/install

        rblsmtpd-0.70 을 설치합니다. ucspi-tcp 를  0.86 이상의 버젼으로 설치했다면 설치할 필요가 없습니다.

        # tar xvzf rblsmtpd-0.70.tar.gz
        # cd rblsmtpd-0.70
        # make
        # make setup check

          
    자 이제 큐메일과 관련하여 필요한 프로그램을 모두 설치했습니다. 자 이제부터 가장 중요한 설정 파일 편집에 들어갑니다.
  
        # vi /var/qmail/rc
        ----------------------------------------------------------------
         #!/bin/sh

        # Using splogger to send the log through syslog.
        # Using procmail to deliver messages to /var/spool/mail/$USER by default.

        exec env - PATH="/var/qmail/bin:$PATH"
        qmail-start '|preline procmail ./Maildir/' splogger qmail
        ----------------------------------------------------------------
      
        # chmod a+x /var/qmail/rc

        다음은 큐메일 데몬을 위한 디렉토리와 파일들을 생성합니다.

        # 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

        # vi /var/qmail/supervise/qmail-send/run
        ------------------------------------------
        #!/bin/sh
        exec /var/qmail/rc
      
        # vi /var/qmail/supervise/qmail-send/log/run
        ----------------------------------------------
        #!/bin/sh
        exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
  
        # vi /var/qmail/supervise/qmail-smtpd/run
        -------------------------------------------
        #!/bin/sh
        ALIAS_UID=`id -u alias`
        ALIAS_GID=`id -g alias`
        exec /usr/local/bin/softlimit -m 2000000
        /usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb
        -u $ALIAS_UID -g $ALIAS_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1
  
        # vi /var/qmail/supervise/qmail-smtpd/log/run
        -----------------------------------------------
        #!/bin/sh
        exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t  /var/log/qmail/smtpd

        이렇게 편집한 파일들에 실행 권한을 줍니다.

        # 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

        릴레이를 허용케하는 주소를 가지는 파일을 만듭니다.  

        # vi /etc/tcp.smtp
        ---------------------------------------------------------
        127.0.0.1:allow,RELAYCLIENT=""
        192.168.1.:allow,RELAYCLIENT=""

        cf) 위 파일의 내용을 잠시 살펴보면 로컬에서 보내는 메일에 대해서는 항상 릴레이를 허용합니다. 
        그리고 192.168.1. 에서 보내는 메일에 대해서도 항상 릴레이를 허용하지만 그밖의 smtp
        접속에 대해서는 모두 거부합니다. 즉 자신과 로컬 네트웍에서만 릴레이를 허용하는 것입니다.
        만약 모든 주소에 대해 릴레이를 허용하고 싶으면
        :allow
        라고 적어줍니다.
       그러면 기본적으로 모든 접속에 대해 릴레이를 허용하며 rcphosts 파일에
       도메인이 적혀 있다면 적혀 있는 도메인에 대해서만 릴레이를 허용합니다.


      이것은 작성된 것에 대해 새로운 내용으로 갱신하게 합니다. 먼저 qmail 부트 스크립트를
      /etc/rc.d/init.d 에 qmail 이라고 생성합니다.

        # /etc/rc.d/init.d/qmail cdb

      마지막으로 Alias 를 설치합니다. 이는 webmaster 앞으로 메일을 오게 하는 것입니다.
      webmaster 는 실 계정입니다.

       # cd ~alias
       # echo webmaster > .qmail-mailer-daemon
       # echo webmaster > .qmail-postmaster
       # echo webmaster > .qmail-root

      다 끝났습니다. 이제 qmail 데몬을 위한 부트 스크립트를 만드는 일입니다.


        # vi /etc/rc.d/init.d/qmail
        ------------------------------------------------------------------------
        #!/bin/sh
        # Comments to support chkconfig on RedHat Linux
        # chkconfig: 2345 80 80
        # description: sendmail을 대체하는 빠르며, 안정적이고, 유연한 MTA
      
        # Source function library.
        . /etc/rc.d/init.d/functions
      
        # Source networking configuration.
        . /etc/sysconfig/network
      
        # Check that networking is up.
        [ ${NETWORKING} = "no" ] && exit 0
      
        PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
        export PATH
      
        case "$1" in
          start)
            echo -n "Starting qmail: svscan"
            cd /var/qmail/supervise
            env - PATH="$PATH" svscan &
            echo $! > /var/run/svscan.pid
            echo "."
            ;;
      
          stop)
            echo -n "Stopping qmail: svscan"
            kill `cat /var/run/svscan.pid`
            echo -n " qmail"
            svc -dx /var/qmail/supervise/*
            echo -n " logging"
            svc -dx /var/qmail/supervise/*/log
            echo "."
            ;;
          stat)
            cd /var/qmail/supervise
            svstat * */log
            ;;
          doqueue|alrm)
            echo "Sending ALRM signal to qmail-send."
            svc -a /var/qmail/supervise/qmail-send
            ;;
          queue)
            qmail-qstat
            qmail-qread
            ;;
          reload|hup)
            echo "Sending HUP signal to qmail-send."
            svc -h /var/qmail/supervise/qmail-send
            ;;
          pause)
            echo "Pausing qmail-send"
            svc -p /var/qmail/supervise/qmail-send
            echo "Pausing qmail-smtpd"
            svc -p /var/qmail/supervise/qmail-smtpd
            ;;
          cont)
            echo "Continuing qmail-send"
            svc -c /var/qmail/supervise/qmail-send
            echo "Continuing qmail-smtpd"
            svc -c /var/qmail/supervise/qmail-smtpd
            ;;
        restart)
            echo "Restarting qmail:"
            echo "* Stopping qmail-smtpd."
            svc -d /var/qmail/supervise/qmail-smtpd
            echo "* Sending qmail-send SIGTERM and restarting."
            svc -t /var/qmail/supervise/qmail-send
            echo "* Restarting qmail-smtpd."
            svc -u /var/qmail/supervise/qmail-smtpd
            ;;
          cdb)
            tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
            chmod 644 /etc/tcp.smtp*
            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
            hup -- same as reload
        HELP
           ;;
          *)
            echo "Usage: $0   {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help}"
            exit 1
            ;;
        esac
      
        exit 0

   이것으로 모든 qmail에 대한 설정이 끝이 났습니다.

이제 재 부팅을 해 봅니다.
재부팅후에 다음과 같은 프로세스가 있는지 확인해 보시기 바랍니다.

        # ps -aux
        USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
        root           456  0.0  0.1  1316  380 ?        S    14:25   0:00 svscan
        root           457  0.0  0.1  1272  336 ?        S    14:25   0:00 supervise qmail-send
        root           458  0.0  0.1  1272  336 ?        S    14:25   0:00 supervise log
        root           459  0.0  0.1  1272  336 ?        S    14:25   0:00 supervise qmail-smtpd
        root           460  0.0  0.1  1272  336 ?        S    14:25   0:00 supervise log
        qmails       461  0.0  0.1  1332  412 ?        S    14:25   0:00 qmail-send
        qmaill        462  0.0  0.1  1288  332 ?        S    14:25   0:00 /usr/local/bin/multilog t /var/log/qmail
        alias          463  0.0  0.1  1300  356 ?        S    14:25   0:00 /usr/local/bin/tcpserver -v -p -x/etc/tcp.
        qmaill        465  0.0  0.1  1288  336 ?        S    14:25   0:00 /usr/local/bin/multilog t /var/log/qmail/s
        qmaill        471  0.0  0.1  1296  464 ?        S    14:25   0:00 splogger qmail
        root           472  0.0  0.1  1288  352 ?        S    14:25   0:00 qmail-lspawn |preline procmail ./Maildir/
        qmailr        473  0.0  0.1  1284  348 ?        S    14:25   0:00 qmail-rspawn
        qmailq       474  0.0  0.1  1280  368 ?        S    14:25   0:00 qmail-clean

물론 PID 값은 시스템 마다 틀릴수 있습니다. 그러나 다음 13 개의 프로세스는 반드시 보여야 합니다.

또한 /var/log/maillog 에 다음과 같은 줄이 있는지 확인해 봅니다.

        Sep 19 14:25:04 mail qmail: 1000923904.747047 status: local 0/10 remote 0/20

자 이제 모든 설정을 마무리 했습니다.
vpopmail 를 설치하지 않으려면 몇가지 더 설정을 해야 합니다. vpopmail 을 설치한다면 다음 과정은
넘어가셔도 됩니다.

이는 alias 를 설치하는 것과 각 사용자의 홈디렉토리에 메일을 받을 Maildir 을 설치하는 것입니다.

이는 다음과 같은 방법으로 할수 있습니다.

alias 설치하기 - 관리자 계정으로 오는 메일을 일반계정으로 포워딩 하기 위한 것입니다.

        # cd ~alias
        # echo 계정 > .qmail-mailer-daemon
        # echo 계정 > .qmail-root
        # echo 계정 > .qmail-postmaster
  
계정은 실 계정이어야 합니다.

각 사용자의 홈 디렉토리에 Maildir 을 설치합니다.
    /etc/skell 에 설정하면 사용자가 추가될때마다 자동으로 Maildir 이 생기게 할수 있습니다.

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

자 이제 다 되었습니다.
만약 pop3 를 사용하고자 한다면 checkpasswd 를 설치하여야 합니다.
checkpasswd 를 설치하는 방법은 다음과 같습니다. 역시 vpopmail 을 설치하려 한다면 건너뛰어도
됩니다.

    cf ) checkpassswd 설치

        # tar xvzf checkpassword-0.81.tar.gz
        # cd checkpassword-0.81
        # make
        # make setup check

이 제 checkpasswd 를 설치하였으니 pop3를 사용할수 있습니다. 여기서 발생할수 있는 또하나의 문제는
사용자 계정을 mysql 에 생성할 때입니다.
        checkpasswd 의 역활은 사용자에 대한 패스워드를 추출하는 것인데 mysql 을 사용한다면 mysql
에서 사용자의 계정을 찾고 그 계정의 패스워드를 추출해야 하므로 추가적인 checkpasswd 에 대한 패치가
필요합니다.
    그 패치가 checkpassword-0.81-mysql-0.6.6.patch 입니다.
    패치 방법은 다음과 같습니다.

        # tar xvzf checkpassword-0.81.tar.gz
        # cd checkpassword-0.81
        # patch -p1 < checkpassword-0.81-mysql-0.6.6.patch
            patching file Makefile
            patching file README.mysql.en
            patching file auto_home.c
            patching file auto_qmail.c
            patching file auto_qmail.h
            patching file checkpassword.c
            patching file env.h
            patching file envread.c
            patching file mysql.c
            patching file str_diffn.c
        # make
        # make setup check
  
다 정상적으로 동작하는걸 확인 할려면 pop3 를 사용해 봐야 합니다.
여기서 선택할수 있는 것이 두가지가 있습니다.
    먼저 inet 을 사용한 pop3 의 사용이며 또 하나는 tcpserver 를 사용한 pop3 의 사용입니다.
복잡하지요. 물론 tcpserver 를 사용한 pop3을 권장합니다.

    # xinet 사용시 - RedHat 7.0
        service pop3
        {
            socket_type     = stream
            protocol        = tcp
            wait            = no
            user            = root
            server          = /var/qmail/bin/qmail-popup
            server_args     = DOMAIN.COM /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir
            log_type        = FILE /var/log/xinetd.log
            log_on_success  = HOST
            log_on_failure  = HOST RECORD
        }
    을 /etc/xinet.d 에 만드시면 됩니다.

    # tcpserver 사용시
        # vi /etc/rc.d/rc.local
        /usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup 도메인 /bin/checkpassword
/var/qmail/bin/qmail-pop3d Maildir &

    자 이제 됐습니다.

    시스템을 다시 리부팅 시켜.. 정상적으로 인증이 되는지 확인해 보시기 바랍니다.

    # ps -aux 에
    root       479  0.0  0.1  1300  348 ?        S    15:06   0:00 /usr/local/bin/tcpserver 0 110
/var/qmail/
    가 있어야 합니다.

    자 계정을 설정하고 메일을 보내고 받아 봅시다. 잘  됩니까 ? 속도가 좀 느린거 같다구요. 이전에
qmail 패치할때 mysql 를 연관해서 패치해서 그렇습니다. mysql 을 사용하지 않고 패치하지 않았다면
속도는 빠릅니다.


아직 갈길 많이 남아 있습니다. vpopmail 을 설치하기 전에 smtp에 인증 기능을 추가하는
qmail-smtp-auth 를 설치해 볼려고 합니다.

3. qmail-smtp-auth 설치
  
    먼저 간단히 설명을 드리면 사용자가 smtp 를 사용할때 인증을 필요로 합니다. 이 인증은 pop
사용자의 인증을 사용합니다. 즉 pop 사용자에 한해 smtp 서버를 이용하자는 말입니다.
    따라서 비밀번호가 필요로 하며 이 필요한 비밀번호는 checkpasswd 가 수행하게 됩니다.

    아울룩 익스프레스에서는 계정을 설정시 서버탭에서 보내는 메일 서버를 체크하고 설정을 눌러 받는
사람과 동일한 설정 사용에 체크해야 합니다.

    파일을 받아 압축을 풉니다. 압축을 풀면 나오는 파일을 모두 qmail source 디렉토리로 복사합니다.
  
        # tar xvzf qmail-smtpd-auth-0.30.tar.gz
        # cd qmail-smtpd-auth-0.30
        # cp * /usr/local/qmail-1.03
        # cd  /usr/local/qmail-1.03
        # patch -p1 < auth.patch    // 만약 패치중에 경로를 찾는 프롬프트가 나오면 qmail 소스
디 렉토리를 지정해 주면 됩니다.
        # make
             ./compile qmail-smtpd.c
            qmail-smtpd.c: In function `main':
            qmail-smtpd.c:646: warning: return type of `main' is not `int'
            ./compile base64.c
            ./load qmail-smtpd rcpthosts.o commands.o timeoutread.o
            timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o
            received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a
            datetime.a getln.a open.a sig.a case.a env.a stralloc.a
            alloc.a substdio.a error.a str.a fs.a auto_qmail.o base64.o  `cat
            socket.lib`
                            // make setup check 하기 전에 먼저 qmail 을 중지합니다.
        # make setup check
            nroff -man qmail-smtpd.8 > qmail-smtpd.0
            ./install
            ./instcheck
                            // 이렇게 패치와 설치 모든게 끝났습니다.

        cf) /etc/tcp.smtp 설정에서 192.168.1.:allow,RELAYCLIENT="' 가 지정되어 있으면
로컬네트웍에서의 모든 메일은 qmail-smtp-auth 를 거치지 않고 바로 발송이 됩니다. 따라서 위의 것을
지워 버려야 합니다.
    지우고 나서는

        # /etc/rc.d/init/d/qmail cdb
            Reloaded /etc/tcp.smtp.
    로 tcp.smtp 를 변경된 사항으로 재 구성하는 것을 잊지 마세요.

그리고 /var/qmail/supervise/qmail-smtpd/run 에 다음을 추가합니다.
  
        #!/bin/sh
        ALIAS_UID=`id -u alias`
        ALIAS_GID=`id -g alias`
        exec /usr/local/bin/softlimit -m 2000000
        /usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb
        -u $ALIAS_UID -g $ALIAS_GID 0 25 /var/qmail/bin/qmail-smtpd /bin/checkpassword /bin/true
2>&1

    자 이제 qmail 을 재 시작하고 결과를 확인하시면 됩니다.
    외부 메일 계정으로 메일이 발송이 됩니까 ? 잘 되는지 테스트를 위해 아울룩 익스프레스의
서버탭에서 보내는 메일 서버의 체크한 것을 제거해 봅시다.

        받는 사람 중 한 사람이 서버에서 거부되었으므로 메시지를 보낼 수 없습니다. 거부된 전자 메일
주소는
         'test@netsgo.com'입니다. 제목 'fffffffffffffffffdddddddd', 계정: '192.168.1.55', 서버:
'192.168.1.55',
        프로토콜: SMTP, 서버 응답: '553 sorry, that domain isn't in my list of allowed rcpthosts
(#5.7.1)',
        포트: 25, 보안(SSL): 아니오, 서버 오류: 553, 오류 번호: 0x800CCC79

     이런식으로 에러메세지가 나오면 정상입니다. 체크한다면 물론 정상적으로 메일이 발송이 되겠지요.
     전 메일이 발송이 되는 군요..ㅋㅋㅋㅋ 전 성공했습니다.
    로컬 도메인으로는 체크여부와 관계없이 메일이 발송됩니다.


4. Vpopmail 설치

    Vpopmail 은 도메인 관리와 설정 pop 유저 관리. pop 관리등을 수행합니다. 우리는 이를 위해 사용자
추가와 도메인에 대한 모든 것을 mysql 로 관리할 것이므로 먼저 다음과 같은 설정을 해 주어야 합니다.
    주의 ) qmailadmin 은 설치할려면 mysql 을 같이 설치하면 안됩니다.

        # vi /var/qmail/control/sqlserver
            mysql_use yes
            server localhost
            login qmail
            password qmail
            db qmail
            table users
            check_host no
  
        mysql 에 사용 권한을 부여합시다. 권한 부여하는 것은 다 아시죠. 모르시는 분은 해당 문서를
참조하세요.

        전 다름과 같이 만들었습니다.

        # ./mysql -uroot
            Welcome to the MySQL monitor.  Commands end with ; or g.
            Your MySQL conection id is 1 to server version: 3.22.32

            Type 'help' for help.
            mysql> use mysql
            Reading table information for completion of table and column names
            You can turn off this feature to get a quicker startup with -A

            Database changed

            mysql> insert into user values
('localhost','qmail',password('qmail'),'n','n','n','n','n','n','n','n','n','n','n','n','n','n');
            Query OK, 1 row affected (0.00 sec)

            mysql> insert into db values
('localhost','qmail','qmail','y','y','y','y','y','y','y','y','y','y');
            Query OK, 1 row affected (0.00 sec)

            mysql> create database qmail;
            Query OK, 1 row affected (0.00 sec)

            mysql> flush privileges;
            Query OK, 0 rows affected (0.00 sec)

            이제 mysql 도 준비가 되었으니 본격적으로 Vpopmail 설치에 들어갑니다.

    vpopmail 이 사용할 유저와 그룹을 만듭니다.
  
        # groupadd vchkpw
        # useradd -g vchkpw vpopmail

        vpopmail 에서 mysql 을 건들기 위해서는 vmysql.h 를 수정해 주어야 합니다.

        # tar xvzf vpopmail-4.9.10.tar.gz
        # cd vpopmail-4.9.10
        # vi vmysql.h
            --- 중략 ---
              /* Edit to match your set up */
        #define MYSQL_SERVER        "localhost"
        #define MYSQL_USER          "qmail"
        #define MYSQL_PASSWD        "qmail"
        /* End of setup section*/

        /* defaults - no need to change */
        #define MYSQL_DEFAULT_TABLE "vpopmail"
        #define MYSQL_DATABASE "qmail"
        #define MYSQL_DOT_CHAR '_'
        #define MYSQL_LARGE_USERS_TABLE "users"
            --- 중략 ---

    자 이제 환경 설정을 합니다.

        # ./configure --enable-default-domain=mail.com --enable-mysql=y

        cf) 옵션에 대한 설명을 조금 하자면 첫번째 옵션은 기본 도메인을 설정해 주는 것입니다.
vpopmail 의 경우 가상 도메인 계정은 pop3 에 로긴시 아이디@도메인명으로 사용자 아이디를 넣게 되어
있습니다. 그러나 기본으로 지정된 도메인에 대해서는 아이디만 넣으면 됩니다. 두번째 옵션은 mysql 을
사용하겠는가에 대한 옵션 설정입니다.
        환경 설정에 있어서 다른 사용할수 있는 옵션이 몇개 있습니다. 이중 sql 에 관련된 옵션을
소개하자면 다음과 같습니다. qmailadmin 을 사용하고자 한다면 mysql 을 사용안함으로 설정하셔야
합니다.
      
        --enable-large-site=y

    이 옵션은 하나의 도메인에 하나의 테이블을 만든다는 옵션입니다.
    이는 mysql 의 속도와 최적화에 관련이 있는 옵션입니다. 따라서 많은 도메인이 있고 적은 수의
유저가 있다면 n 로 설정하는 것이 좋습니다. 그러나 적은 도메인이 있고 많은 수의 유저가 있다면 y 로
설정하는 것이 좋습니다.
     많은 도메인에 적은 유저가 있다면 사용시마다 테이블을 열고 닫기 때문에 속도에 있어서 시스템에
부하를 줍니다. 하지만 적은 수의 도메인에 많은 유저가 있다면 하나의 테이블에서 모두 관리하므로
테이블을 열고 닫는데 큰 영향을 미치지 않습니다.  
      
    정상적으로 환경 설정이 끝나게 되면 다음과 같은 마지막 줄이 있습니다.

                    Current settings
            ---------------------------------------
            vpopmail directory = /home/vpopmail
                           uid = 509
                           gid = 509
                    roaming users = OFF
                    user quota = OFF
                    tcpserver file = /etc/tcp.smtp
                    open_smtp file = /home/vpopmail/etc/open-smtp
                    auth module = mysql
                    table optimization = many domains (--enable-large-site=n default)
                    auth logging = OFF
                    pop syslog = show only failure attempts
                    default domain = mail.com

    자 이제 빌드하고 컴파일을 하면 됩니다.

        # make
        # make install-strip

    모든 것이 끝나고 ~vpopmail 에는 여러 디렉토리와 필요한 바이너리가 생성이 됩니다.

    이제 vpop 를 위한 pop3 데몬 시동 파일을 만들 차례입니다. 이는 이전의 것과 좀 다릅니다. vpopmail
을 사용안할때 하고는 좀 다르니 기존의 것을 지우고 다시 추가합니다.

    /etc/rc.d/rc.local 에 다음과 같이 추가합니다.

        #vi /etc/rc.d/rc.local

               --- 중 략 ---
            #!/bin/sh
            env - PATH="/var/qmail/bin:/usr/local/bin"
            tcpserver -u $VPOPMAIL -g $VPOPMAIL 0 pop-3 /var/qmail/bin/qmail-popup mail.com
            /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
  
        $VPOPMAIL 에서 앞의 것은 계정 번호. 뒤는 그룹 번호입니다.

   자 이제 시스템을 리붓을 해보고 다음으로 넘어갑니다.

   지금부터 테스트를 합니다. 이 테스트를 무사히 마쳐야 합니다.

        # cd ~vpopmail
        # cd bin

   에 보면 많은 바이너리가 있습니다. 이중 몇가지를 살펴보면..

        vadddomain 도메인명

            ex) # ./vadddomain mail.com
                  # ./vadddomain mail1.com
                  # ./vadddomain mail2.com

   이런식으로 가상 도메인을 추가하면 됩니다. 물론 실제 도메인도 추가해야 합니다.

    만약 다음과 같은 에러가 발생할수 있습니다.

            # ./vadddomain: error while loading shared libraries: libmysqlclient.so.6: cannot open
shared object file: No such file or directory

    이럴경우 다음과 같이 심볼릭 링크를 만들어 주면 됩니다.

      # ln -s /usr/lib/mysql/libmysqlclient.so.6.0 /usr/lib/libmysqlclient.so.6
  
    도메인을 입력하면 패스워드를 입력하라고 나오는데. 이 패스워드는 postmaster 의 패스워드입니다.
패스워드를 함께 지정할려면 도메인 옆에 패스워드를 같이 넣어서 한번에 추가할수도 잇습니다.

        vadduser id@도메인명

            ex) # ./vadduser master@mail.com
                  # ./vadduser master@mail1.com
                  # ./vadduser master@mail2.com

   도메인만 다르다면 같은 이름의 vpopmail 유저를 가질수 있습니다. 물론 패스워드도 같이 물어보는데..
이도 메일 주소 옆에 패스워드를 함께 명기함으로써 한번에 추가 할수도 있습니다.
  
    정확한 사용법은 다음과 같습니다.

    /var/qmail/control/locals 에 있는 도메인에 대하여 이메일의 주소는 사용자이름@도메인주소 이며
팝 인증에 필요한 사용자 이름은 아이디뿐 입니다.

     관리자 프로그램은 vadduser, vdeluser, vpasswd 입니다.

        vadduser  사용자이름   패스워드(옵션) -a(apop은 옵션)
        vdeluser   사용자이름
        vpasswd  사용자이름  패스워드(옵션) -a(apop은 옵션)

    /etc/qmail/control/virtualdomains 속의 가상 도메인에 대하여 주소의 형식은
사용자이름@가상도메인 이며 팝 인증시 사용자 이름은 사용자이름%가상도메인  또는
사용자이름@가상도메인이며  이는 이메일 클라이언트에 따라 다릅니다.

          관리자 프로그램으로는 vadddomain, vdeldomain, vpasswd 입니다.

         vadddomain 가상도메인_이름   패스워드(옵션) -a(apop은 옵션)
         vdeldomain  가상도메인
         vadduser     사용자이름@가상도메인   패스워드(옵션) -a(옵션)
         vdeluser      사용자이름@가상도메인   패스워드(옵션) -a(옵션)
         vpasswd     사용자이름@도메인이름   패스워드(옵션)

    이중 vadddomain 은 도메인을 추가하기 위한 명령으로써 이 명령은 다음과 같은 파일을 업데이트
합니다.
  
        관리 프로그램 : vadddomain 가상도메인 패스워드(옵션)

            updates /var/qmail/control/rcpthosts
            updates /var/qmail/control/virtualdomains
            updates /var/qmail/users/assign
            updates /var/qmail/users/cdb
            runs /var/qmail/bin/qmail-newu

      새로운 도메인을 받아들이기 위해서는 qmail-send 에게 HUP 신호를 보내야 합니다. 이는 다음과
같은 방법으로 행해질수 있습니다.
      
            # svc -h /service/qmail

     
   이제 마지막으로 확인을 해 보겠습니다.
      
        # vi /var/qmail/control/locals
            localhost
      
   만 있어야 합니다. 다른 것이 있으면 안됩니다.

        # vi /var/qmail/control/rcpthosts
            localhost
            mail1.com
            mail2.com
            mail.com

   추가한 도메인이 다 들어가 있는지 확인합니다.

        # vi /var/qmail/control/virtualdomains
            mail1.com:mail1.com
            mail2.com:mail2.com
            mail.com:mail.com

   virtualdomains 도 이와 같이 되어 있는지 확인합니다.

        # vi /var/qmail/users/assign
            +mail1.com-:mail1.com:509:504:/home/vpopmail/domains/mail1.com:-::
            +mail2.com-:mail2.com:509:504:/home/vpopmail/domains/mail2.com:-::
            +mail.com-:mail.com:509:504:/home/vpopmail/domains/mail.com:-::

   이제 모든것이 마무리 되었습니다. 아울룩 익스프레스를 사용하여 메일을 보내보시고 잘 받는지 확인만
하시면 됩니다.

4. qmail-scanner 설치
  
        드디어 마지막 까지 왔습니다. 이것만 설치하면 끝이 납니다. 자 그러면 설치해 볼까요..
  
    qmail-scanner 은 바이러스 스캐너입니다. 만약 바이러스가 검출되거나 혹은 첨부파일이 특정한
확장자를 갖는 파일이면 이를 배달하지 않습니다. 그리고 송신인에게 경고 메일을 보내게 됩니다.

        qmail-scanner 을 설치하기 전에 qmail-queue 를  먼저 패치하기로 하지요.
        qmail 소스 디렉토리에 가서 다음을 실행합니다.

            # patch -p0 < qmailqueue.patch
                    // 그러면 정상적으로 패치가 됩니다. 만약 경로를 묻는 프롬프트가 나오면 경로를
입력해 주시면 됩니다.

       그런다음 다시 qmail 을 빌도하고 컴파일 합시다. 전에 큐메일을 중지시키세요.
          
            # make
            # make setup check

    이것으로 큐메일의 재 인스톨은 됐습니다.

    이번에는 필요한 파일들을 인스톨할 차례입니다.
    먼저 maildrop 를 설치합니다.

        # tar xvzf mailmaildrop-1.3.4.tar.gz
        # cd maildrop-1.3.4
        # ./configure
        # make
        # make install-strip
        # make install-man

    이것으로 amildrop 은 설치를 마쳤습니다.

    이번은 Time:: HiRes 라는 펄 모듈입니다.
        자동 설치하는 방법도 있지만 해당 사이트에 접속이 잘 안되므로 수동으로 설치하면 됩니다.
      
        # tar xvzf Time-HiRes-01.20.tar.gz
        # cd Time-HiRes-01.20
        # perl Makefile.PL
        # make
        # make test
        # make install

       펄 모듈들은 이런식으로 설치를 합니다.  관련 프로그램은 모두 설치했습니다.
    이제 본격적으로 qmail-scanner 를 설치하겠습니다.

        # tar xvzf qmail-scanner-1.00.tar.gz
        # cd qmail-scanner-1.00
        # ./configure --install

    이제 모든 설치가 마무리 되었습니다.
  
    smtp 에서 메일을 걸러낼수 있게 설정을 조금 변경해 주면 됩니다.
      
        # vi /var/qmail/supervise/qmail-smtpd/run
            #!/bin/sh         
            QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"
            export QMAILQUEUE

            ALIAS_UID=`id -u alias`
            ALIAS_GID=`id -g alias`
            exec /usr/local/bin/softlimit -m 6000000
            /usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb
            -u $ALIAS_UID -g $ALIAS_GID 0 25 /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw
/bi
            n/true 2>&1
          
    이제 필터를 추가해 보고 테스트 해보면 됩니다.

    필터는 다음 위치에 있습니다.
        # vi /var/spool/qmailscan/quarantine-attachments.txt
            --  중략 --
            EICAR.COM               69      EICAR Test Virus
            Happy99.exe             10000   Happy99 Trojan
            zipped_files.exe        120495  W32/ExploreZip.worm.pak virus
            ILOVEYOU                Virus-Subject:  Love Letter Virus/Trojan
  
    각각의 항목은 탭으로 구분됩니다. 중요합니다 탭으로 구분됩니다.
      
        잠시 간단히 설명해 보자면 다음과 같습니다.
              형식 : 3개의 항목으로 되어 있습니다.

                     filename<TAB>size (in bytes)<TAB>Description of virus/whatever
                        파일이름        크기(bytes)                설명
        또는
                     string<TAB>Header<TAB>Description of virus/whatever
                        문자열        메일헤더        설명


        단점으로는
                1) 새로운 메일은 바로바로 체크를 못한다는 점이며 추가를 따로 해 주어야 합니다.
                2) 혼자 작동하는 바이러스는 체크하는데 반해 매크로 바이러스는 확인할수 없습니다.
                3) 와일드 카드를 사용할수 있습니다. 와일드 카드는 첨부파일을 확인하여 확장자에 따라
메일을 거부하는데 사용될수 있습니다. 그럴 경우 사이즈는 무시됩니다.
                    예)     .exe
               4) SMTP 가 허용하는 사이즈를 넘는 파일은 금지합니다. 최대 크기를 설정할수 있습니다.
               5) 헤더에 맞추어서 허용여부를 결정할수 있습니다. 이것은 스팸이나 다른 알지 못하는
주소로부터 오는 것을 막을수있습니다.
                    제목 : Subject, 송신인 : From, 등입니다. 이 문자열은 반드시 Virus- 로
시작되어야 하며 :이 나와야 합니다.

        자 이제 모든 것이 설치되었으므로 테스트를 해 보면 됩니다.

        정의 파일을 추가한 다음에는 반드시 다음 명령으로 적용시켜 주어야 합니다

댓글 없음:

댓글 쓰기