리눅스/CentOS7

CentOS7 - 큐메일(Qmail) 서버 구축하기 (5/10)

일편나루 2019. 5. 29. 18:42
반응형

목차 (INDEX)

     

    개요

    이번에는 무료로 사용할 수 있는 MTA인 Qmail을 사용하여 메일서버를 구축해 보겠습니다.
    Qmail은 1998년 6월에 현재의 1.03 버전이 출시되었는데, 그때부터 푹 빠져버린 멋진 MTA죠;
    당시 시큐리티 홀이 엄청나게 많았던 Sendmail과는 달리, 고속이면서 매우 심플하고 견고한 구조를 지향하면서 개발되었습니다.
    시큐리티 홀을 발견하면 500달러의 상금을 주겠다고 해서 화제가 되기도 했었습니다.
    vpopmail과 연동하면 1개의 서버(1개의 IP)에서 여러 개의 도메인 관리가 웹으로 가능합니다.
    dnscache + ezmlm 과 연동하면 엄청난 속도로 대량의 메일을 발송할 수 있고, 역시 웹에서 관리하기 편합니다.
    Courier-Authlib + Courier-IMAP을 붙이면 POP3 SSL / IMAP SSL 구현이 가능하며, ucspi-tcp에 ssl패치를 적용하여 SMTP SSL 구현 역시 가능합니다 (글쓴이의 환경은 smtps / imaps 적용 중)
    이처럼 다양한 패키지와 연동함으로써 자신의 용도에 맞게 메일서버를 구축해서 운용할 수 있습니다.

    목표

    이미 구축해서 사용 중인 Qmail + VPopmail + qmailadmin + Courier-Authlib + Courier-IMAP (IMAP SSL, SMPT SSL 적용) 구성을 기록해 둡니다.
    다음 목표는 Courier-Authlib + Courier-IMAP 구성을 Dovecot으로 전환(검토)이 될 듯합니다.

    구축 환경 요약

    • 가상 도메인 관리가 가능하므로 하나의 MTA로 여러 개의 도메인을 관리 가능
    • self-signed X.509 key를 생성하여 IMAP over SSL과 SMTP over SSL을 구현
    • dnscache를 적용 (메일 발송의 고속화) ← 대량의 메일링 리스트 발송 시 효과적
    • Mailing List기능 적용 (ezmlm)
    • 웹 관리 인터페이스 적용 (qmailadmin, vqadmin)
    •  daemontools를 이용하여 qmail관련 모든 프로세스와 디렉터리를 실시간 자동 감시 & 자동 리로드 실행 (supervise, svscan, multilog)

     

    구축 완료 후의 프로세스 실행 내역

    Qmail이 시작되고 나면 아래와 같은 메시지가 syslog에 나타나야 합니다 (default)

    qmail: status: local 0/10 remote 0/20

    ps 명령으로 qmail daemon을 찾아봅니다 ( ps -fg |grep qmail )

    최소 4개의 데몬이 실행중이어야 하며 모두 idle상태이어야 합니다.
    qmail-send, running as qmails / qmail-lspawn, running as root / qmail-rspawn, running as qmailr /
    qmail-clean, running as qmailq

    구축이 완료된 후, 아래와 같은 프로세스가 실행되는 환경이 될 것입니다. (svscan.service)

    [root@centos7 ~]# systemctl status svscan.service
    
    ● svscan.service - Daemontools svscan
       Loaded: loaded (/usr/lib/systemd/system/svscan.service; enabled; vendor preset: disabled)
       Active: active (running) since Sat 2019-05-25 01:43:11 JST; 9h ago
     Main PID: 4606 (svscanboot)
       CGroup: /system.slice/svscan.service
               ├─ 2431 tcpserver-ssl -v -s -x /home/vpopmail/etc/tcp.smtp.cdb -n /var/qmail/control/clientcert.pem -R -H -l0 -u 1009 -g 1004 0 smtps q...
               ├─ 3863 tcpserver-ssl -v -s -x /home/vpopmail/etc/tcp.smtp.cdb -n /var/qmail/control/clientcert.pem -R -H -l0 -u 1009 -g 1004 0 smtps q...
               ├─ 4606 /bin/sh /command/svscanboot
               ├─ 4667 svscan /service
               ├─ 4668 readproctitle service errors: ....................................................................................................
               ├─ 4673 supervise qmail
               ├─ 4674 supervise log
               ├─ 4675 supervise smtpd
               ├─ 4676 supervise log
               ├─ 4677 supervise smtps
               ├─ 4678 supervise log
               ├─ 4679 supervise dnscache
               ├─ 4680 supervise log
               ├─ 4681 tcpserver -vHRl0 -x /home/vpopmail/etc/tcp.smtp.cdb -u 1009 -g 1004 0 smtp qmail-smtpd example.com /home/vpopmail/bin/vchkpw ...
               ├─ 4682 multilog t s1000000 n20 /var/log/qmail/smtps
               ├─ 4683 qmail-send
               ├─ 4684 tcpserver-ssl -v -s -x /home/vpopmail/etc/tcp.smtp.cdb -n /var/qmail/control/clientcert.pem -R -H -l0 -u 1009 -g 1004 0 smtps q...
               ├─ 4686 /usr/local/bin/dnscache
               ├─ 4687 multilog t s1000000 n20 /var/log/qmail
               ├─ 4691 multilog t s1000000 n20 * +* stats * * * ./dnsstatus +* ./main
               ├─ 4695 qmail-lspawn ./Maildir/
               ├─ 4696 qmail-rspawn
               ├─ 4697 qmail-clean
               ├─ 4703 multilog t s1000000 n20 /var/log/qmail/smtpd
               ├─28755 tcpserver-ssl -v -s -x /home/vpopmail/etc/tcp.smtp.cdb -n /var/qmail/control/clientcert.pem -R -H -l0 -u 1009 -g 1004 0 smtps q...
               └─32161 tcpserver-ssl -v -s -x /home/vpopmail/etc/tcp.smtp.cdb -n /var/qmail/control/clientcert.pem -R -H -l0 -u 1009 -g 1004 0 smtps q...
    

    환경 정보

    CentOS Linux release 7.6.1810 (Core)

    Apache/2.4.39 (Unix)
    OpenSSL 1.1.1b 26 Feb 2019
    nghttp nghttp2/1.38.0
    mysql Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL) << vpopmail, ezmlm 연동

    메일서버 : mail.naruhodo.cf / 123.123.123.10 / CentOS7
    Client : 10.1.1.30 / MacBook
    Source Directory : /usr/local/src    <<   이곳에서 필요한 소스를 보관하고 컴파일합니다. (처음이라면 생성해줍니다.)

    사전 준비 / 고려사항

    ■ 유효한 도메인이 최소 1개 필요합니다

       - naruhodo.cf를 다시 이용합니다
       - 아직 도메인을 취득하지 않았다면 CentOS7 - 무료도메인 취득/설정하기 (freenom) (3/10) 글을 참고하세요

    ■ SELinux는 비활성화해 둡니다.

       - CentOS7 - OS설치하기 (1/10) 글의 SELinux무효화 부분을 참고하세요.

    ■ 메일 서버용 공인 IP를 확인합니다.

    # 유동IP환경에서 1개의 공인IP를 받아서 사용하는 환경의 예입니다.
    [root@centos7 ~]# ip r
    default dev ppp0 scope link
    default via 11.0.0.254 dev p1p1 proto dhcp metric 100
    10.1.0.0/16 dev p1p1 proto kernel scope link src 10.1.1.30 metric 100
    123.123.123.1 dev ppp0 proto kernel scope link src 123.123.123.10     #   << 퍼블릭 고정 IP
    203.123.123.180 via 10.1.0.254 dev p1p1 src 10.1.1.30
    

    ■ Name Server에서 메일서버(mail.naruhodo.cf)의 MX 레코드를 포함한 적절한 설정이 완료되어 있어야 합니다.
    ■ DNS Resolver 설정이 올바르게 설정되어 있는지 확인합니다. (표시되는 네임서버의 주소는 환경에 따라 다릅니다)

    [root@centos7 ~]# cat /etc/resolv.conf
    nameserver 8.8.8.8

    ■ nslookup / dig 등의 명령으로 외부 도메인을 쿼리 하는데 문제가 없어야 합니다.

    [root@centos7 ~]# nslookup google.com
    Server:        127.0.0.1
    Address:    127.0.0.1#53
    
    Non-authoritative answer:
    Name:    google.com
    Address: 172.217.26.46
    
    [root@centos7 ~]#

    ■ 간단한 설정으로 Qmail의 Sendmail Wrapper를 MUA가 이용할 수 있습니다
    ■ Anti-virus, Anti-spam 등의 컴포넌트를 연동하지는 않습니다.
    ■ 유저의 메일이 보관되는 곳이 /home 아래입니다. 실제 메일서버로 사용할 예정이라면 /home파티션의 용량을 충분히 확보한 후 진행하는 것이 좋습니다.

    ※ 각각의 패키지는 설정 파일을 수정하거나 컴파일하면서 진행되므로 컴파일 경험과 디버깅 경험이 있으면 도움이 될 겁니다.

     

    Qmail Components

    아래의 컴포넌트를 설치할 예정입니다.

    설치할 Component 설명
    qmail-1.03 높은 보안성과 신뢰성, 그리고 효과적이고 간단한 MTA
    ucspi-tcp-0.88 INETD데몬을 대체하는 빠른 성능의 SMTP서버.
    tcpserver, tcprules, rblsmtpd, tcpclient등이 포함됨
    daemontools-0.76 UNIX서비스를 관리하기 위한 툴 모음
     (supervise, multilog, svc, svstat, svscan 등)
    autorespond-2.0.5
    Autoresponder (자동응답 기능)
    vpopmail-5.4.33 가상도메인 및 가상유저관리, APOP인증과 POP Before SMTP대응
    대규모서비스를 전개하는 경우, 가상유저를 SQL데이터베이스에 저장할 수 있음
    qmailadmin-1.2.16    
    qmailadmin-help-1.0.8
    가상도메인을 위한 Web-based관리자 인터페이스
    vqadmin-2.3.7  Web based control panel
    djbdns-1.05 DNS Cache  DNS Server
    ezmlm-0.53
    ezmlm-idx-5.1.2
    사용하기 쉽고, 빠른 스피드의 Mailing List Manager
    courier-imap-4.1.1 POP/IMAP서버, 경량이며 LDAP대응도 가능하므로 다수의 유저를 취급하는 경우에 적합
    courier-authlib-0.58
    Courier authentication library

     

    SMTP SSL과 IMAP SSL 적용하기

    Qmail + Vpopmail + Courier-IMAP / Courier-Authlib 구성하기

    ❶ 준비

    MTA로 Qmail을 사용할 것이므로 Postfix를 제거해 줍니다.

    yum list installed |grep postfix
    # 설치되어 있다면 제거합니다
    yum -y remove postfix
    userdel postfix

    ❷ Qmail 사용자 및 그룹 생성

    /usr/local/src/qmail-1.03/INSTALL.ids을 참고해서 큐메일 사용자와 그룹을 생성해 줍니다.

    mkdir /var/qmail
    groupadd nofiles
    useradd -g nofiles -d /var/qmail/alias -s /sbin/nologin -M alias
    useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild
    useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill
    useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp
    groupadd qmail
    useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq
    useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr
    useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails

    ❸ Qmail설치

    cd /usr/local/src
    wget http://cr.yp.to/software/qmail-1.03.tar.gz
    wget http://tomclegg.ca/qmail/qmail-smtpd-auth-0.31.tar.gz
    wget http://qmail.jms1.net/patches/qmail-date-localtime.patch
    wget http://qmail.org/qmail-smtpd-relay-reject
    wget http://www.ckdhr.com/ckd/qmail-103.patch
    tar zxvf qmail-1.03.tar.gz
    tar zxvf qmail-smtpd-auth-0.31.tar.gz
    cd qmail-1.03
    mv ../qmail-date-localtime.patch ./
    mv ../qmail-smtpd-relay-reject ./
    mv ../qmail-smtpd-auth-0.31/*.* ./
    mv ../qmail-103.patch ./
    patch < qmail-date-localtime.patch
    patch < qmail-smtpd-relay-reject
    patch < auth.patch
    patch < qmail-103.patch
    
    vi error.h
    extern int errno;
    ↓
    #include<errno.h>           #    <<   redhat계열에서 편집 필요
    
    vi conf-spawn
    125                         #  <<   125 - 255이하로 변경한다 (성능튜닝)
    
    vi tls.c
    char *strerror(int);        #  <<     12 line : const char *strerror(int); 을 왼쪽과 같이 변경한다.
    
    make
    make setup check
    
    ./config-fast mail.naruhodo.cf        #   << 각자의 메일서버의 FQDN

    config-fast를 실행하면 아래와 같은 동작을 자동으로 처리해 줍니다.
    만약, 제대로 동작하지 않는다면 서버의 DNS 설정(MX 레코드)에 문제가 있을 수 있습니다.
    echo mail.naruhodo.cf > /var/qmail/control/me
    echo mail.naruhodo.cf > /var/qmail/control/defaultdomain
    echo mail.naruhodo.cf > /var/qmail/control/plusdomain
    echo mail.naruhodo.cf > /var/qmail/control/locals
    echo mail.naruhodo.cf > /var/qmail/control/rcpthosts

    [root@centos7 qmail-1.03]# ./config-fast mail.naruhodo.cf
    Your fully qualified host name is mail.naruhodo.cf.
    Putting mail.naruhodo.cf into control/me...
    Putting naruhodo.cf into control/defaultdomain...
    Putting co.jp into control/plusdomain...
    Putting mail.naruhodo.cf into control/locals...
    Putting mail.naruhodo.cf into control/rcpthosts...
    Now qmail will refuse to accept SMTP messages except to mail.naruhodo.cf.
    Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

    다운로드한 파일을 제거합니다

    cd /usr/local/src
    rm -f /usr/local/src/qmail-1.03.tar.gz
    rm -f /usr/local/src/qmail-smtpd-auth-0.31.tar.gz
    rm -fr /usr/local/src/qmail-smtpd-auth-0.31

    Qmail recommended patches : http://qmail.org/top.html#patches

    Qmail 기본 설정

    echo 'MANPATH /var/qmail/man' >> /etc/man.config
    echo ‘20971520’ > /var/qmail/control/databytes     #  <<  수신메일사이즈의 상한을 지정 (20MB)
    touch /var/qmail/control/doublebounceto       #   <<   존재하지 않는 메일을 파기

    Alias를 설정

    관리자 계정이 admin@naruhodo.cf 인 경우

    echo admin@naruhodo.cf > /var/qmail/alias/.qmail-mailer-daemon
    echo admin@naruhodo.cf > /var/qmail/alias/.qmail-postmaster
    echo admin@naruhodo.cf > /var/qmail/alias/.qmail-root
    chmod 644 /var/qmail/alias/.qmail*

    ❹ ucspi-tcp (tcp server) 설치

    d /usr/local/src
    wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
    
    # smtp-ssl 대응
    wget http://www.nrg4u.com/qmail/ucspi-tcp-ssl-20050405.patch.gz
    
    tar zxvf ucspi-tcp-0.88.tar.gz
    cd ucspi-tcp-0.88
    
    zcat ../ucspi-tcp-ssl-20050405.patch.gz | patch      #   <<   error.h 패치를 포함
    
    make
    make setup check
    
    cp /usr/local/src/ucspi-tcp-0.88/tcpserver /usr/local/bin/tcpserver-ssl

    ❺ daemontools 설치

    daemontools 홈: http://cr.yp.to/daemontools.html
    daemontools는 유닉스 서비스를 관리하기 위한 툴 모음입니다. (서비스의 기동, 종료, 상태감시, 로그 취득 등)

    • supervise : 서비스를 감시합니다. 서비스를 시작하고, 죽으면 서비스를 재시작시킵니다.
    • multilog : 하나 이상의 로그에 오류 메시지를 저장합니다.
    • svscan : 서비스군을 시작하고 모니터링합니다.
    • svc : supervise에 의한 감시되는 서비스들을 관리합니다.
    • svstat: supervise에 의해 감시되는 서비스들의 상태를 출력합니다

    ※ 용어 정의 :
    유닉스 서비스 (또는 서비스) : daemontools설치 시 자동 생성되는 /service디렉터리 아래에 등록된 dnscache, qmail, smtpd, smtps입니다.

    # 아직은 /service디렉토리가 없음 (서비스 등록한 후의 리스트입니다.)
    [root@centos7 service]# ll /service/
    total 0
    lrwxrwxrwx 1 root root 20 Dec 20  2016 dnscache -> /var/djbdns/dnscache
    lrwxrwxrwx 1 root root 24 Dec 19  2016 qmail -> /var/qmail/service/qmail
    lrwxrwxrwx 1 root root 24 Dec 19  2016 smtpd -> /var/qmail/service/smtpd
    lrwxrwxrwx 1 root root 24 Dec 19  2016 smtps -> /var/qmail/service/smtps
    [root@centos7 service]#

    daemontools-0.76을 설치합니다.

    cd /usr/local/src
    wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
    
    mkdir -p /package
    chmod 1755 /package/
    cd /package/
    cp /usr/local/src/daemontools-0.76.* ./
    tar -xzf daemontools-0.76.tar.gz
    
    cd admin
    cd daemontools-0.76/
    patch -p1 < /package/daemontools-0.76.errno.patch
     ./package/install
    #   <<   이 시점에서 /command, /service 디렉토리가 생성됩니다.
    

    daemontools까지 설치했으니 이제 sendmail wrapper를 설정합니다.

    Qmail의 Sendmail Wrapper설정

    MUA(Mail User Agent)가 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을 daemontools의 서비스로 등록하기

    qmail, qmail-smtp, qmail-smtps 등록 흐름:

    1. Qmail홈 디렉터리(/var/qmail) 아래에 service디렉터리를 추가한 후 그 아래에 필요한 서비스를 추가합니다.
    2. 추가한 서비스는 소프트 링크를 걸어서 daemontools의 서비스로 등록하는 형태로 진행됩니다.

    Qmail 홈 디렉터리(/var/qmail) 아래에 service디렉터리를 추가

    mkdir /var/qmail/service

    그 아래에 필요한 서비스를 추가 : qmail

    mkdir /var/qmail/service/qmail
    mkdir /var/qmail/service/qmail/log
    chmod +t /var/qmail/service/qmail
    
    vi /var/qmail/service/qmail/run
    #!/bin/sh
    exec env - PATH="/var/qmail/bin:$PATH" \
    qmail-start ./Maildir/
    
    chmod a+x /var/qmail/service/qmail/run
    
    vi /var/qmail/service/qmail/log/run
    #!/bin/sh
    
    exec env - PATH="/var/qmail/bin:$PATH" \
    setuidgid qmaill multilog t s1000000 n20 /var/log/qmail
    
    mkdir /var/log/qmail
    chown qmaill:nofiles /var/log/qmail
    chmod 777 /var/log/qmail

    추가한 서비스는 소프트 링크를 걸어서 daemontools의 서비스로 등록합니다.

    ln -s /var/qmail/service/qmail /service/qmail

    이번에는 smtpd를 동일한 순서로 설정해 줍니다.

    mkdir /var/qmail/service/smtpd
    mkdir /var/qmail/service/smtpd/log
    chmod +t /var/qmail/service/smtpd
    
    vi /var/qmail/service/smtpd/run
    #!/bin/sh
    
    exec env - PATH="/var/qmail/bin:$PATH" \
    tcpserver -vHRl0 -x /home/vpopmail/etc/tcp.smtp.cdb \
    -u `id -u vpopmail` -g `id -g vpopmail` 0 smtp \
    qmail-smtpd naruhodo.cf /home/vpopmail/bin/vchkpw /bin/true 2>&1
    
    vi /var/qmail/service/smtpd/log/run
    #!/bin/sh
    
    exec env - PATH="/var/qmail/bin:$PATH" \
    setuidgid qmails multilog t s1000000 n20 /var/log/qmail/smtpd
    
    chmod +x /var/qmail/service/smtpd/run
    chmod +x /var/qmail/service/smtpd/log/run
    
    mkdir /var/log/qmail/smtpd
    chown qmails:nofiles /var/log/qmail/smtpd
    chmod 777 /var/log/qmail/smtpd
    
    ln -s /var/qmail/service/smtpd /service/smtpd

    smtps를 daemontools에 등록하기 전에, SMTP over SSL을 적용할 예정이므로 X.509 키를 생성해 줍니다.

    CN(Common Name )은 이 글 맨 아랫부분의 IMAP over SSL설정(mail.naruhodo.cf)과 겹치지 않도록 smtp.naruhodo.cf로 설정합니다.

    # 유효기간을 10년(선택) (-days 3650), 저장위치를 /var/qmail/control/servercert.pem 로 지정
    [root@centos7 ~]# openssl req -newkey rsa:2048 -x509 -nodes -days 3650 -out /var/qmail/control/servercert.pem -keyout /var/qmail/control/servercert.pem
    
    # 자신에게 맞는 정보를 기입해줍니다. 
    Country Name (2 letter code) [XX]:JP
    State or Province Name (full name) []:TOKYO
    Locality Name (eg, city) [Default City]:Shinagawa
    Organization Name (eg, company) [Default Company Ltd]:NARUHODO
    Organizational Unit Name (eg, section) []:
    Common Name (eg, your name or your server's hostname) []:smtp.naruhodo.cf
    Email Address []:admin@naruhodo.cf
    
    [root@centos7 ~]#
    
    chmod 640 /var/qmail/control/servercert.pem
    
    # 소유권한을 vpopmail로 설정해야 메일클라이언트에서 smtp.naruhodo.cf 인증서를 갱신해서 설치 가능함
    chown vpopmail.vchkpw /var/qmail/control/servercert.pem
    
    ln -s /var/qmail/control/servercert.pem /var/qmail/control/clientcert.pem
    
    openssl ciphers > /var/qmail/control/tlsclientciphers
    openssl ciphers > /var/qmail/control/tlsserverciphers
    

    확인해 봅니다.

    openssl s_client -connect smtp.naruhodo.cf:465           #    <<    자신의 PC에서 접속
    openssl x509 -text -noout -in /var/qmail/control/servercert.pem 

    이제 smtp-auth용 키도 생성했으니, smtps를 daemontools의 서비스로 등록해 봅니다.

    mkdir /var/qmail/service/smtps
    mkdir /var/qmail/service/smtps/log
    chmod +t /var/qmail/service/smtps
    
    vi /var/qmail/service/smtps/run
    #!/bin/sh
    
    exec env - PATH="/var/qmail/bin:$PATH" \
    tcpserver-ssl -v -s -x /home/vpopmail/etc/tcp.smtp.cdb \
    -n /var/qmail/control/clientcert.pem \
    -R -H -l0 -u `id -u vpopmail` -g `id -g vpopmail` 0 smtps \
    qmail-smtpd naruhodo.cf /home/vpopmail/bin/vchkpw /bin/true 2>&1
    
    vi /var/qmail/service/smtps/log/run
    #!/bin/sh
    
    exec env - PATH="/var/qmail/bin:$PATH" \
    setuidgid qmails multilog t s1000000 n20 /var/log/qmail/smtps
    
    chmod +x /var/qmail/service/smtps/run
    chmod +x /var/qmail/service/smtps/log/run
    
    mkdir /var/log/qmail/smtps
    chown qmails:nofiles /var/log/qmail/smtps
    chmod 777 /var/log/qmail/smtps
    
    ln -s /var/qmail/service/smtps /service/smtps

    Qmail 세부 설정

    # 성능 튜닝 :  어디까지나 참고치이며 각자 모니터링하면서 적절한 값을 찾아야 합니다.
    echo 86400 > /var/qmail/control/queuelifetime
    echo 200 > /var/qmail/control/concurrencylocal
    echo 500 > /var/qmail/control/concurrencyremote
    echo 30 > /var/qmail/control/timeoutconnect
    
    # 큐메일에서 허용할 도메인을 지정합니다.
    vi /var/qmail/control/rcpthosts
    mail.naruhodo.cf
    example1.com
    example2.com
    
    # SMTP route 설정하여 불법으로 relay되는 것을 방지합니다.
    vi /var/qmail/control/smtproutes
    # domain.com:mail-server.com
    mail.naruhodo.cf:localhost
    example1.com:[123.123.123.10]
    example2.com:[123.123.123.10]
    
    # 만약 example3.com을 다른 메일서버(124.124.124.10)로 릴레이하고자 한다면 아래와 같이 기입
    # domain.com:some-other-mail-server.com
    # example3.com:[124.124.124.10]          # << 이렇게
    

    ※ 사용 가능한 Qmail의 제어 파일(Control File)
    각 제어 파일은 필요할 때 각각 생성하고 설정하고자 하는 값을 입력해 두면 됩니다.

    Control File Default 사용되는 프로세스 용도
    badmailfrom N/A qmail-smtpd from 어드레스의 블랙리스트
    bouncefrom MAILER-DAEMON qmail-send bounce sender의 유저명
    bouncehost me 와 동일 qmail-send bounce sender의 호스트명
    concurrencylocal 10 qmail-send local에 동시배달 가능한 수
    concurrencyremote 20 qmail-send 동시배달가능한 remote수
    defultdomain me 와 동일 qmail-inject default domain 명
    defaulthost me 와 동일 qmail-inject default host 명
    databytes 0 qmail-smtpd 메시지의 최대 바이스수 (0 = 무제한)
    doublebouncehost me 와 동일 qmail-send 이중바운스의 호스트명
    doublebounceto postmaster qmail-send 이중바운스를 수령할 유저
    envnoathost me 와 동일 qmail-send @ 마크가 없는 주소일 경우 디폴트도메인명
    helohost me 와 동일 qmail-remote SMTP HELO로 사용할 호스트명
    idhost me 와 동일 qmail-inject Message-ID에 부여할 호스트명
    localiphost me 와 동일 qmail-smtpd 로컬 IP 주소로 변환되는 호스트명
    locals me 와 동일 qmail-send local 도메인명
    me 시스템의 FQDN 다수 많은 제어파일에의 디폴트 도메인의 정식명
    morercpthosts N/A qmail-smtpd 두번째 rcpthosts database
    percenthack N/A qmail-send %스타일의 relay가능한 도메인
    plusdomain me 와 동일 qmail-inject + 로 대신 사용되는 도메인명
    qmqpservers N/A qmail-qmqpc QMQP서버의 IP주소
    queuelifetime 604800 qmail-send 메시지가 큐에 보관되는 시간(초)
    rcpthosts N/A qmail-smtpd 메일 수신을 허가하는 도메인명
    smtpgreeting me 와 동일 qmail-smtpd SMTP의 인사 메시지 
    smtproutes N/A qmail-remote SMTP의 전송처, 큐메일에 도착한 메일을 지정한 곳으로 전송가능해짐
    timeoutconnect 60 qmail-remote SMTP의 접속을 기다리는 시간(초)
    timeoutremote 1200 qmail-remote 리모트서버를 기다리는 시간(초)
    timeoutsmtpd 1200 qmail-smtpd SMTP클라이언트를 기다리는 시간(초)
    virtualdomains N/A qmail-send 가상도메인과 유저명

    주의
    Qmail 처리 순서 : locals  ⇒  virturaldomains 
    따라서, locals에 기재된 도메인은 virtualdomains에 기재해서는 안된다.

    TIP
    만약 자신의 qmail smtp 서버가 느리다고 생각된다면 다음과 같이 할 수 있다.
    기본적으로 tcpserver는 사용되는 모든 ip 주소의 DNS와 ident를 체크하게 되어있다.(그래서 느려진다)
    tcpserver -H -R를 사용하면 체크하지 않게 되므로 속도 향상을 볼 수 있다.

    ❻ Vpopmail 설치

    ※ vpopmail을 재설치할 경우, qmailadmin도 재설치해야 합니다.

    groupadd vchkpw
    useradd -g vchkpw -s /sbin/nologin -M vpopmail
    
    mkdir /home/vpopmail
    chown vpopmail:vchkpw /home/vpopmail
    
    mkdir /home/vpopmail/etc
    chown vpopmail:vchkpw /home/vpopmail/etc
    
    cd /usr/local/src
    wget https://sourceforge.net/projects/vpopmail/files/vpopmail-stable/5.4.33/vpopmail-5.4.33.tar.gz
    tar xvzf vpopmail-5.4.33.tar.gz
    cd vpopmail-5.4.33
    
    # SMTP-AUTH에서  cram-md5지원을 위한 패치
    # http://www.marronkun.net/linux/mail/qmail_000032.html
    
    vi vchkpw.c
    
    # 747 line 변경
    hmac_md5( (unsigned char *) challenge, strlen(challenge), (unsigned char *) password, strlen(password), digest);
    ↓
    hmac_md5( (unsigned char *) response, strlen(response), (unsigned char *) password, strlen(password), digest);
    
    # 760 line 변경
    return(strcmp(digascii,response));
    ↓
    return(strcmp(digascii,challenge));
    

    Vpopmail의 컴파일 방법은 DB 사용 여부에 따라서 옵션이 약간 달라집니다.
    둘 중에 하나를 선택하세요.
    MySQL옵션을 선택할 경우, 당연하지만 이미 MySQL이 설치되어 있어야 합니다.

    # ——————————Not Use MySQL-----------------------------------
    cd /usr/local/src//vpopmail-5.4.33
    ./configure \
    --enable-roaming-users=y \
    --enable-tcprules-prog=/usr/local/bin/tcprules \
    --enable-qmail-ext=n \
    --enable-relay-clear-minutes=15 \
    --enable-ip-alias-domains=y \
    --disable-rebuild-tcpserver-file \
    --disable-clear-passwd \
    --enable-logging=y
    
    
    # ——————————Use MySQL-----------------------------------
    
    cd /usr/local/src//vpopmail-5.4.33
    ./configure \
    --enable-roaming-users=y \
    --enable-tcprules-prog=/usr/local/bin/tcprules \
    --enable-relay-clear-minutes=15 \
    --enable-ip-alias-domains=y \
    --enable-auth-module=mysql \
    --enable-many-domains=n \
    --enable-qmail-ext=n \       # Enable qmail email address extension support
    --disable-clear-passwd \
    --enable-sql-logging=y \
    --enable-valias=y \
    --enable-libdir=/usr/lib64/mysql \
    --enable-logging=y
    

    나중에 Mailing List도 설정할 예정이므로, MySQL과 연동하여 Vpopmail을 설치하겠습니다.

    make
    make install-strip

    MySQL설치는 다른 글에서 다루도록 하겠습니다.
    vpopmail 5.4.33 설치가 완료되면 아래와 같이 현재 설정 내역이 표시됩니다 (환경에 따라 내용은 다를 수 있습니다.)

             vpopmail 5.4.33
                Current settings
    ---------------------------------------
    
    vpopmail directory = /home/vpopmail
     domains directory = /home/vpopmail/domains
                   uid = 1012
                   gid = 1007
         roaming users = ON  --enable-roaming-users
        tcpserver file = /home/vpopmail/etc/tcp.smtp
        open_smtp file = /home/vpopmail/etc/open-smtp
    rebuild tcpserver file = ON  --enable-rebuild-tcpserver-file (default)
     password learning = OFF --disable-learn-passwords (default)
         md5 passwords = ON  --enable-md5-passwords (default)
          file locking = ON  --enable-file-locking (default)
    vdelivermail fsync = OFF --disable-file-sync (default)
         make seekable = ON  --enable-make-seekable (default)
          clear passwd = OFF --disable-clear-passwd
     user dir hashing  = ON  --enable-users-big-dir (default)
    address extensions = OFF --disable-qmail-ext (default)
              ip alias = ON  --enable-ip-alias-domains
       onchange script = OFF --disable-onchange-script (default)
         domain quotas = OFF --disable-domainquotas (default)
           auth module = mysql --enable-auth-module=mysql
     mysql replication = OFF --disable-mysql-replication (default)
           sql logging = ON  --enable-sql-logging
          mysql limits = OFF --disable-mysql-limits (default)
      SQL valias table = ON  --enable-valias
              auth inc = -I/usr/include/mysql
              auth lib = -Xlinker -R -Xlinker /usr/lib/mysql -L/usr/lib/mysql  -lmysqlclient -lz -lm
      system passwords = OFF --disable-passwd (default)
            pop syslog = show successful and failed login attempts --enable-logging=y
          auth logging = ON  --enable-auth-logging (default)
    one domain per SQL table     = --disable-many-domains
          spamassassin = OFF --disable-spamassassin (default)
              maildrop = OFF --disable-maildrop (default)

    mail.naruhodo.cf 를 기본 도메인으로 설정하고 추가 설정을 해보도록 하겠습니다.

    echo "mail.naruhodo.cf" > /home/vpopmail/etc/defaultdomain

    Vpopmail - MySQL연동 설정

    ① Vpopmail을 위한 DB를 생성합니다.

    mysql -uroot -p
    
    CREATE DATABASE vpopmail;
    CREATE USER vpopadmin@localhost IDENTIFIED BY ‘vpopadmin-passwd';
    GRANT ALL ON vpopmail.* TO vpopadmin@localhost;
    
    \q

    ② Vpopmail의 MySQL설정 파일을 다음과 같이 편집합니다

    vi /home/vpopmail/etc/vpopmail.mysql
    
    # host|port|user|password|database     #  << 여기를 참고 하여
    localhost|0|vpopadmin|vpopadmin-passwd|vpopmail   #   << 좀전에 MySQL에서 생성한 DB와 계정정보를 입력
    
    chown vpopmail.vchkpw ~vpopmail/etc/vpopmail.mysql
    chmod 640 ~vpopmail/etc/vpopmail.mysql

    ③ tcpserver의 rule을 컴파일합니다.
    tcpserver는 선택적으로 TCP 연결이 허용 가능한지 여부를 결정하는 규칙(Rule)을 따르는데 이 규칙 파일(tcp.smtp.cdb)을 아래와 같이 작성합니다

    vi /home/vpopmail/etc/tcp.smtp
    
    127.:allow,RELAYCLIENT=""        #    << 로컬 네트워크만으로도 동작에는 문제없음
    123.123.123.:allow,RELAYCLIENT=""       #    <<   자신의 실제 네트워크 대역을 지정
    
    # tcp.smtp.cdb 파일을 생성합니다.
     tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp

    Vpopmail - 가상 도메인/유저 생성

    이제 admin@naruhodo.cf 라는 메일 계정을 사용할 수 있도록 설정해보겠습니다.
    ① naruhodo.cf 도메인과 admin유저를 생성합니다.
    참고로, qmailadmin을 설치하면 도메인 생성 이외의 작업을 웹에서 할 수 있습니다. (조금 뒤에 설치 예정)

    /home/vpopmail/bin/vadddomain naruhodo.cf
    /home/vpopmail/bin/vadduser admin@naruhodo.cf

    ② 생성한 가상 도메인 naruhodo.cf의 기본 설정 변경
    vi /home/vpopmail/domains/naruhodo.cf/.qmail-default

    | /home/vpopmail/bin/vdelivermail '' bounce-no-mailbox
    ↓
    | /home/vpopmail/bin/vdelivermail '' delete       #  << 바운스메일 삭제로 수정
    

    ③ 새로 생성되는 유저에게 적용되는 기본 QUATA설정 (선택) : 모든 도메인에 global 적용됩니다.
    vi /home/vpopmail/etc/vlimits.default

    # default quota for newly created users (in bytes)
    # example shows a user with a 10MB quota and a limit of 1000 messages
    #default_quota          10485760       #    << 맨 앞의 코멘트제거 (필요시)
    #default_maxmsgcount    1000         #    << 맨 앞의 코멘트제거 (필요시)
    

    ④ alilas추가 : mailer-daemon, postmaster, root 등의 유저의 alias를 좀 전에 생성한 admin 계정으로 설정합니다.
    (qmailadmin에서도 설정 가능)

    [root@centos7 ~]# /home/vpopmail/bin/valias -i admin mailer-daemon@naruhodo.cf.com
    [root@centos7 ~]# /home/vpopmail/bin/valias -i admin postmaster@naruhodo.cf.com
    [root@centos7 ~]# /home/vpopmail/bin/valias -i admin root@naruhodo.cf.com
    반응형

     

    아직 갈 길이 더 남았으니 잠시 여기까지의 설치내역을 정리하고 가겠습니다.

     

    처음에 MTA인 큐메일(ucspi-tcp, daemontools포함)을 설치했는데, 멀티도메인을 지원하기 위해서 Vpopmail도 설치했습니다.
    이제 큐메일은 ucspi-tcp 즉 tcpserver를 시켜서 SMTP/25번 포트를 상시 리슨 하면서 들어오는 메일 발송 요청에 대해서 자신이 가지고 있는 규칙 파일(tcp.smtp.cdb)의 내용을 바탕으로 허락/거부 판정을 24x7 쉬지 않고 수행토록 할 겁니다.( = 데몬을 시작시켜서..)
    vpopmail로 생성되는 도메인과 유저들을 저장하기 위해서 MySQL설정도 했고, admin@naruhodo.cf라는 naruhodo.cf도메인의 유저를 생성시킴으로써 이제 메일서버는 naudhodo.cf의 메일서버 역할을 하기 시작했습니다.
    만약 admin@abc.com라는 유저를 추가 생성한다면 메일서버는 abc.com의 메일서버 역할도 동시에 하게 되는 거죠
    결국, 메일의 송수신이라는 측면에서 보면, 지금까지는 메일 송신을 위한 SMTP 관련 구성을 했던 것이고,
    이제부터 메일 수신 = 메일 보관을 위한 IMAP4 구성을 해나가면서 마지막에는 SSL 인증서를 직접 작성해서 적용함으로써 SMTP SSL과 IMAP SSL까지 구현하도록 하겠습니다.

     

    break time
    break time

     

    ❼ Qmailadmin 설치

    Vpopmail의 웹 인터페이스인 qmailadmin을 설치해보겠습니다.
    설치 전에 httpd 데몬이 실행되고 있어야 합니다. 글쓴이의 경우 http/2 가 적용된 Apache/2.4.39 버전이 실행 중입니다.

    [root@centos7 ~]# /usr/local/apache2/bin/httpd -v
    Server version: Apache/2.4.39 (Unix)
    Server built:   May 26 2019 16:03:35
    
    [root@centos7 ~]# systemctl status httpd2
    ● httpd2.service - The Apache HTTP/2 Server
       Loaded: loaded (/etc/systemd/system/httpd2.service; enabled; vendor preset: disabled)
       Active: active (running) since Sun 2019-05-26 23:38:45 JST; 1 day 21h ago
         Docs: man:httpd(8)
               man:apachectl(8)
      Process: 8682 ExecStop=/usr/local/apache2/bin/apachectl stop (code=exited, status=0/SUCCESS)
      Process: 26787 ExecReload=/usr/local/apache2/bin/apachectl graceful (code=exited, status=0/SUCCESS)
      Process: 8691 ExecStart=/usr/local/apache2/bin/apachectl start (code=exited, status=0/SUCCESS)
     Main PID: 8699 (httpd)
       CGroup: /system.slice/httpd2.service
               ├─ 8699 /usr/local/apache2/bin/httpd -k start
               ├─26801 /usr/local/apache2/bin/httpd -k start
               ├─26802 /usr/local/apache2/bin/httpd -k start
               ├─26803 /usr/local/apache2/bin/httpd -k start
               ├─26804 /usr/local/apache2/bin/httpd -k start
               └─27067 /usr/local/apache2/bin/httpd -k start
    
    May 26 23:38:45 centos7 systemd[1]: Starting The Apache HTTP/2 Server...
    

    ① qmailadmin-1.2.16 버전을 컴파일합니다.

    TIP
    만일 자신의 웹서버가 apache 2.4.39 이상의 버전이고 qmailadmin이 브라우저에서 제대로 동작하지 않는다면
    --enable-cgid를 추가해서 컴파일해보세요
    이때, 웹서버는 cgid_module이 설치되어있고 httpd.conf 주설 정 파일에서 활성화되어 있어야 합니다.
    like) LoadModule cgid_module modules/mod_cgid.so

    cd /usr/local/src
    wget https://sourceforge.net/projects/qmailadmin/files/latest/download/qmailadmin-1.2.16.tar.gz
    tar xzvf qmailadmin-1.2.16.tar.gz
    cd qmailadmin-1.2.16
    ./configure --enable-domain-autofill --enable-help
    
    # apache2 라면
    ./configure
    --enable-htmldir=/usr/local/apache2/htdocs
    --enable-cgibindir=/usr/local/apache2/cgi-bin
    --enable-domain-autofill
    --enable-help
    
    make
    make install-strip

    ② qmailadmin-help-1.0.8을 설치합니다 (선택)

    cd /usr/local/src
    wget https://sourceforge.net/projects/qmailadmin/files/qmailadmin-help/1.0.8/qmailadmin-help-1.0.8.tar.gz
    tar xzvf qmailadmin-help-1.0.8.tar.gz
    cd qmailadmin-help-1.0.8
    mkdir /var/www/html/images/qmailadmin/help
    cp -rp * /var/www/html/images/qmailadmin/help
    
    # apache2 라면
    mkdir /usr/local/apache2/htdocs/images/qmailadmin/help
    cp -rp * /usr/local/apache2/htdocs/images/qmailadmin/help
    

    ③ 브라우저로 접속해서 확인해 봅니다.

    http://localhost/cgi-bin/qmailadmin
    http://localhost/images/qmailadmin/help
    
    

    문제가 없다면 다음과 같은 로그인 창이 표시됩니다.
    Postmaster로만 접속이 가능하므로 미리 패스워드를 생성한 후에 접속합니다.

    # postmaster 생성
    /home/vpopmail/bin/vadduser postmaster@naruhodo.cf
    
    # 유저 패스워드 변경
    /home/vpopmail/bin/vchangepw

    qmailadmin login window
    qmailadmin login window

     

    ❽ Courier-Authlib / Courier-IMAP 설치

    각각의 역할을 보면, Courier-imap은 메일을 보관하기 위한 프로토콜(imapd, imapd-ssl, pop3d, pop3d-ssl )을 관리하고, courier-authlib이 Courier-imap에서 설정한 프로토콜(e.g. imapd)을 바탕으로 해당 포트를 리슨 하면서 클라이언트로부터의 연결 요청에 대한 인증을 담당하게 됩니다.

    제약조건 :
    courier-authlib-0.58과 courier-imap-4.1.1.tar.bz2 으로 한정해서 구성함 (타 버전은 에러 발생)
    imap/imap-ssl 등을 사용할 경우, daemontools의 서비스에 등록되어있는 pop3관련 링크가 있다면 제거해 준 다음, courier-imap과 courier-authlib 서비스를 기동시 켜야 합니다.

    Courier사용자 생성

    groupadd courier
    useradd -g courier -s /sbin/nologin -M courier

    컴파일에 필요한 툴을 설치합니다

    yum -y install libtool-ltdl-devel
    yum -y install gdbm-devel
    yum -y install pam-devel
    yum -y install openssl-devel
    yum -y install mysql-devel
    yum -y install zlib-devel 
    yum -y install libtool 
    yum -y install openldap-devel 
    yum -y install gcc-c++ 
    yum -y install expect 
    yum -y install postgresql-devel

    Courier-Authlib-0.58 설치

    cd /usr/local/src
    wget http://shupp.org/software/courier-authlib-0.58.tar.bz2
    bunzip2 courier-authlib-0.58.tar.bz2
    tar xf courier-authlib-0.58.tar
    chown -R root.root courier-authlib-0.58
    cd courier-authlib-0.58
    
    ./configure \
      --prefix=/usr/local/courier-authlib \
      --without-authpam \
      --without-authldap \
      --without-authpwd \
      --without-authpgsql \
      --without-authmysql \
      --without-authshadow \
      --without-authuserdb \
      --without-authcustom \
      --without-authcram \
      --without-authpipe \
      --without-authdaemon \
      --with-authvchkpw \
      --with-redhat \
      --with-ssl  
    
    #--------------------------#
    # 만일 아래와 같은 에러가 난다면 
    ERROR conftest2.out:  not found
    ./configure: line 25703: .: conftest2.out: file not found
    
    # courierauthconfig을 제거해 줍니다.
    rm -f /usr/local/bin/courierauthconfig
    #--------------------------#
    
    make
    make install
    make install-configure

    ① authdaemonrc 파일의 설정을 수정 (또는 확인)
    vi /usr/local/courier-authlib/etc/authlib/authdaemonrc

    # --with-authvchkpw로 컴파일할 경우, 이미 반영됨
    authmodulelist="authpam"
    ↓
    authmodulelist="authvchkpw" 
    
    authmodulelistorig="authpam"
    ↓
    authmodulelistorig="authvchkpw"

    ② Courier-Authlib을 systemd에 등록
    courier-authlib의 서비스 파일을 작성합니다.
    vi /usr/lib/systemd/system/courier-authlib.service

    [Unit]
    Description=Courier Authentication Library
    
    [Service]
    Type=forking
    RemainAfterExit=true
    ExecStart=/usr/local/share/courier-authlib.sysvinit start
    ExecStop=/usr/local/share/courier-authlib.sysvinit stop
    
    [Install]
    WantedBy=multi-user.target

    ③ courier-authlib 서비스를 시작하고 부팅 시 자동으로 시작되도록 설정합니다.

    cp /usr/local/src/courier-authlib-0.58/courier-authlib.sysvinit /usr/local/share/
    chmod 700 /usr/local/share/courier-authlib.sysvinit
    
    systemctl start courier-authlib
    systemctl enable courier-authlib

    ④ .bash_profile에 courier-authlib 경로를 추가해 줍니다

    [root@centos7 ~]# cd
    [root@centos7 ~]# cat .bash_profile 
    # .bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
    . ~/.bashrc
    fi
    
    # User specific environment and startup programs
    
    PATH=$PATH:$HOME/bin:/usr/local/courier-authlib/bin
    
    export PATH
    [root@centos7 ~]# 
    [root@centos7 ~]# source .bash_profile 

    ⑤ courier-authlib 상태를 확인해 봅니다

    [root@centos7 ~]# systemctl status courier-authlib.service 
    ● courier-authlib.service - Courier Authentication Library
       Loaded: loaded (/usr/lib/systemd/system/courier-authlib.service; enabled; vendor preset: disabled)
       Active: active (running) since Sun 2019-05-26 23:22:34 JST; 2 days ago
      Process: 4632 ExecStart=/usr/local/share/courier-authlib.sysvinit start (code=exited, status=0/SUCCESS)
     Main PID: 4637 (courierlogger)
       CGroup: /system.slice/courier-authlib.service
               ├─4637 /usr/local/courier-authlib/sbin/courierlogger -pid=/usr/local/courier-authlib/var/spool/authdaemon/pid -start /usr/local/courier-authlib/libex...
               ├─4638 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
               ├─4722 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
               ├─4723 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
               ├─4724 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
               ├─4725 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
               └─4726 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond
    
    May 26 23:22:33 centos7 systemd[1]: Starting Courier Authentication Library...
    May 26 23:22:34 centos7 authdaemond[4637]: modules="authvchkpw", daemons=5
    May 26 23:22:34 centos7 courier-authlib.sysvinit[4632]: Starting Courier authentication services: authdaemond
    May 26 23:22:34 centos7 authdaemond[4637]: Installing libauthvchkpw
    May 26 23:22:34 centos7 systemd[1]: Started Courier Authentication Library.
    May 26 23:22:34 centos7 authdaemond[4637]: Installation complete: authvchkpw
    

    Courier-imap-4.1.1 설치

    cd /usr/local/src
    wget http://shupp.org/software/courier-imap-4.1.1.tar.bz2
    tar -jxvf courier-imap-4.1.1.tar.bz2 
    cd courier-imap-4.1.1
    
    export CFLAGS="-DHAVE_OPEN_SMTP_RELAY -DHAVE_VLOGAUTH" 
    export CPPFLAGS=-I/usr/local/courier-authlib/include 
    export COURIERAUTHCONFIG=/usr/local/courier-authlib/bin/courierauthconfig 
    export LIBS="-L/usr/lib64/mysql -lmysqlclient -lz" 
    
    /******************** IMAP before SMTP/SMTPs ********************/
    ./configure \
    --prefix=/usr/local/courier-imap \
    --enable-workarounds-for-imap-client-bugs \
    --enable-unicodes=iso-2022-jp,iso-8859-1,utf-8 \
    --disable-root-check \
    --without-authdeamon \
    --without-authmysql \
    --without-authldap \
    --without-authpgsql \
    --with-authvchkpw \
    --with-vpopmail=yes \
    --with-cram=yes \
    --with-redhat \
    --with-ssl
    /*****************************************************************/
    
    --with-mysql=yes    # vpopmail과 연동되면 mysql은 불필요
    
    
    make
    make install
    make install-configure
    

    ① courier-imap 설정
    설치가 완료되면 /usr/local/courier-imap/etc 아래로 imapd, imapd-ssl, pop3d, pop3d-ssl 등의 설정 파일이 생성됩니다.
    사용할 서비스의 파일을 열어서 IMAPDSTART=YES 로 변경합니다.
    (imapd을 기동 한다면 나머지(imapd-ssl, pop3d, pop3d-ssl)는 IMAPDSTART=NO로 설정)
    e.g.) imapd를 기동 할 경우
    vi /usr/local/courier-imap/etc/imapd

    MAXDAEMONS=40
    MAXPERIP=40
    IMAP_EMPTYTRASH=Trash:7,Sent:30
    IMAPDSTART=YES

    ② courier-imap을 systemd에 등록
    courier-imap의 서비스 파일을 작성합니다.
    vi /usr/lib/systemd/system/courier-imap.service

    [Unit]
    Description=Courier-IMAP service
    Wants=network-online.target
    Wants=courier-authlib.service
    After=network-online.target
    After=courier-authlib.service
    
    [Install]
    WantedBy=mail-transfer-agent.target
    WantedBy=multi-user.target
    
    [Service]
    Type=forking
    RemainAfterExit=true
    ExecStart=/usr/local/share/courier-imap.sysvinit start
    ExecStop=/usr/local/share/courier-imap.sysvinit stop
    

    ③ courier-imap 서비스를 시작하고 부팅 시 자동으로 시작되도록 설정합니다.

    cp /usr/local/src/courier-imap-4.1.1/courier-imap.sysvinit /usr/local/share
    chmod 700 /usr/local/share/courier-imap.sysvinit
    
    systemctl start courier-imap
    systemctl enable courier-imap

    ④ courier-imap 상태를 확인합니다

    [root@centos7 ~]# systemctl status courier-imap
    ● courier-imap.service - Courier-IMAP service
       Loaded: loaded (/usr/lib/systemd/system/courier-imap.service; enabled; vendor preset: disabled)
       Active: active (running) since Sun 2019-05-26 23:22:41 JST; 2 days ago
      Process: 5330 ExecStart=/usr/local/share/courier-imap.sysvinit start (code=exited, status=0/SUCCESS)
     Main PID: 5375 (courierlogger)
       CGroup: /system.slice/courier-imap.service
               ├─ 5375 /usr/local/courier-authlib/sbin/courierlogger -pid=/var/run/imapd-ssl.pid -start -name=imapd-ssl /usr/local/courier-imap/libexec/couriertcpd ...
               ├─ 5383 /usr/local/courier-imap/libexec/couriertcpd -address=0 -maxprocs=40 -maxperip=40 -nodnslookup -noidentlookup 993 /usr/local/courier-imap/bin/...
               ├─21621 /usr/local/courier-imap/bin/couriertls -server -tcpd /usr/local/courier-imap/sbin/imaplogin /usr/local/courier-imap/bin/imapd Maildir
               ├─21623 /usr/local/courier-imap/bin/imapd Maildir
               ├─21627 /usr/local/courier-imap/bin/couriertls -server -tcpd /usr/local/courier-imap/sbin/imaplogin /usr/local/courier-imap/bin/imapd Maildir
               ├─21628 /usr/local/courier-imap/bin/imapd Maildir
               ├─22405 /usr/local/courier-imap/bin/couriertls -server -tcpd /usr/local/courier-imap/sbin/imaplogin /usr/local/courier-imap/bin/imapd Maildir
               └─22406 /usr/local/courier-imap/bin/imapd Maildir
    ...
    [root@centos7 ~]# 
    

    IMAP over SSL를 위한 self-signed X.509 key를 생성

    ① 생성할 인증키 정보를 편집합니다.
    해당 키는 메일 클라이언트가 서버에 접속을 시도할 때 사용됩니다.
    vi /usr/lcoal/courier-imap/etc/imapd.cnf

    RANDFILE = /usr/local/courier-imap/share/imapd.rand
    
    [ req ]
    default_bits = 2048
    encrypt_key = yes
    distinguished_name = req_dn
    x509_extensions = cert_type
    prompt = no
    
    # req_dn을 자신에게 맞도록 수정합니다
    [ req_dn ]
    C=JP
    ST=TK
    L=TOKYO
    O=naruhodo.cf
    OU=naruhodo-SSLkey
    CN=mail.naruhodo.cf          #   <<  FQDN
    emailAddress=admin@naruhodo.cf
    
    [ cert_type ]
    nsCertType = server

    ② 자체 서명된 X.509 키를 생성합니다.
    courier-imap을 설치하면 자동으로 함께 설치되는 X.509 키 생성 스크립트를 편집합니다.
    vi /usr/local/courier-imap/share/mkimapdcert

    # 맨 아래쪽에서
    # -days 365 → 3650             <<  유효기간을 1년 → 10년으로 변경 (선택)
    # gendh → dhparam     <<   openssl 0.9.4. / 0.9.5 버전이후 dh, gendh → dhparam으로 통합됨

    ③ 이제 스크립트를 실행하여 X.509 키를 생성합니다.
    imapd.cnf에서 입력했던 내용과 생성 스크립트에서 변경한 유효기간이 반영되어 생성되는 것을 볼 수 있습니다.
    새롭게 생성된 키는 /usr/local/courier-imap/share/imapd.pem 에서 확인 가능합니다.

    [root@centos7 etc]# /usr/local/courier-imap/share/mkimapdcert
    Generating a 2048 bit RSA private key
    ..............+++
    .............+++
    writing new private key to '/usr/local/courier-imap/share/imapd.pem'
    -----
    1024 semi-random bytes loaded
    Generating DH parameters, 512 bit long safe prime, generator 2
    This is going to take a long time
    .........++*++*++*++*++*++*
    subject= /C=JP/ST=TK/L=TOKYO/O=naruhodo.cf/OU=naruhodo-imapd-SSLkey/CN=mail.naruhodo.cf/emailAddress=admin@naruhodo.cf      # << 여기
    notBefore=May 24 16:23:46 2019 GMT
    notAfter=May 21 16:23:46 2029 GMT         #  << 유효기간 2029년 5월21일
    ...

    생성된 imapd.pem의 내용을 확인하려면

    openssl x509 -text -noout -in /usr/local/courier-imap/share/imapd.pem

    이제 인증키도 생성했으니 imap-ssl를 사용하도록 설정하겠습니다.

    IMAP over SSL로 기동 하기

    # imapd를 START시키지않고, imapd-ssl을 START시키겠다
    vi /usr/local/courier-imap/etc/imapd
    IMAPDSTART=YES —> NO로 변경
    
    vi /usr/local/courier-imap/etc/imapd-ssl
    IMAPDSSLSTART=NO —> YES로 변경

    ① courier-imap 서비스 재시작해 줍니다

    systemctl restart courier-imap

    ② 993 Port 리슨 체크

    프로세스 확인보다는 리스닝 포트를 확인하는 게 동작 여부를 확인하기에 직관적입니다.
    couriertcpd라는 데몬이 993/tcp 포트를 리슨 하고 있을 겁니다.

    [root@centos7 etc]# netstat -anp|grep 993
    tcp6       0      0 :::993                  :::*                    LISTEN      16631/couriertcpd   
    

    ③ 방화벽(firewall) 설정

    # 이미 등록된 서비스가 있는지 찾아봅니다.( imap imaps 가 있을 겁니다)
    firewall-cmd --get-services | grep imap 
    
    # imaps만 포트 오픈합니다.
    firewall-cmd --add-service=imaps --zone=public --permanent 
    # (필요시) pop3 관련 정책이 있다면 아래와 같이 제거해줍니다.
    firewall-cmd --remove-service=pop3 --zone=public --permanent  
    
    firewall-cmd --reload
    firewall-cmd --list-all

    참고로 글쓴이의 환경에서 firewall-cmd --list-all 명령을 실행해보면 아래와 같은 서비스만 오픈되어 있습니다.
    samba http dns smtp smtps ssh https imaps

     

    여기까지 IMAP over SSL 적용이 완료되었네요. 여기까지 읽고 설정하느라 고생 많으셨습니다^^;

    Qmailadmin으로 웹 인터페이스에서 보다 쉽고 편리하게 메일을 설정할 수 있고, IMAP over SSL과 SMTP over SSL을 적용하여 보다 시큐어 한 환경에서 메일의 송수신이 가능해졌습니다.

    처음 이 글을 시작할 때 Vqadmin과 dnscache 도 다뤄보려고 했었는데, Vqadmin을 사용해본 경우 Qmailadmin에서는 지원하지 않는 가상 도메인 생성 기능을 사용하는 것 외에는 그다지 메리트가 없는 듯하여(어디까지나 사견) skip 하고, 메일 전송속도에 매우 매우 영향을 미치는 dnscache를 다뤄보겠습니다.

    dnscache 큐메일의 저자가 만든 패키지이죠. 그래서 호환/동작하는데 전혀 문제가 없습니다.
    그리고 여기까지 작업을 따라 하셨다면 dnscache설정은 훨씬 수월하게 할 수 있을 거라 생각합니다.

     

    dnscache 설치

    djbdns는 qmail의 저자인 D. J. Bernstein이 만든 DNS 서버입니다.
    djbdns는 Cache서버, 콘텐츠 서버로 분리되어 있는데, 여기서는 dnscache를 설치할 것입니다.

    • dnscache (DNS Cache 서버)
    • tinydns (DNS 콘텐츠 서버)

    ❶ 준비

    djbdns를 설치하기 위해서는 daemontools-0.70 이상 버전과 ucspi-tcp가 설치되어 있어야 합니다.

    ❷ djbdns-1.05 설치

    cd /usr/local/src
    wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
    tar xvfz djbdns-1.05.tar.gz
    cd djbdns-1.05
    
    echo gcc -O2 -include /usr/include/errno.h > conf-cc
    patch -p1 < ../djbdns-1.05.errno.patch 
    
    make
    make setup check
    

    ❸ dnscache 설정

    유저를 생성

    groupadd -g 530 djbdns
    useradd -u 530 -g djbdns -d /var/djbdns -s /sbin/nologin dnslog
    useradd -u 531 -g djbdns -d /var/djbdns/dnscache -s /sbin/nologin dnscache

    설치 시 자동 생성된 디렉터리를 지우고 다시 생성

    rm -rf /var/djbdns
    mkdir /var/djbdns

    설정 파일 작성

    dnscache-conf 명령으로 설정 파일을 작성합니다.
    서식 : dnscache-conf dnscache동작 유저 dnscache로그 유저 dnscache디렉터리 허가할 IP주소

    # 127.0.0.1 즉 자기자신만 cache서버를 이용할 수 있도록 설정합니다.
    /usr/local/bin/dnscache-conf dnscache dnslog /var/djbdns/dnscache 127.0.0.1

    실행하면, /var/djbdns/dnscache아래에 env, log, root 등의 디렉터리가 자동 생성됩니다.

    ❹ 외부 DNS Cache 사용 설정

    dns resolver설정(resolv.conf)에서 nameserver는 자기 자신(127.0.0.1)으로만 설정할 텐데, 자신의 Cache에 없는 요청일 경우 자기 자신(127.0.0.1)이 쿼리 할 서버(Root네임서버)를 설정한다고 보면 됩니다.

    ■ 먼저, Root네임서버 목록(IP주소)을 가져올 스크립트를 확인합니다. 없으면 작성합니다.
    vi /var/djbdns/dnscache/root/rootnamesrv.get

    #!/bin/sh
    wget ftp://ftp.internic.net/domain/named.cache > /dev/null 2>&1
    awk '$1 ~ /.ROOT-SERVERS.NET/ {print $4}' named.cache > /var/djbdns/dnscache/root/servers/@
    
    sleep 1
    rm -f /var/djbdns/dnscache/root/named.cache

    ■ rootnamesrv.get 파일에 실행 권한을 부여한 후 cron에 등록시킵니다
    매월 15일 0시 0분에 INTERNIC으로부터 named.cache파일을 다운로드한 후 필요한 IP 정보만을
    추출하여 해당 파일을 업데이트합니다.

    # 실행권한부여
    chmod a+x /var/djbdns/dnschache/root/rootnamesrv.get
    
    [root@centos7 root]# ./rootnamesrv.get      #  << 실행에 문제없는지 확인 !!
    
    # cron에 등록
    crontab -e
    0 0 15 * * /var/djbdns/dnscache/root/rootnamesrv.get &

    ■ 질의에 응답할 네트워크 설정
    자기 자신(127.0.0.1)만 추가해 줍니다.

    touch /var/dnscache/root/ip/127.0.0.1

    ■ FORWARDONLY 설정

    echo 1 > /service/dnscache/env/FORWARDONLY
    /usr/local/bin/svc -t /service/dnscache/

    rootnamesrv.get을 실행시키면, 루트 서버들의 IP가 "/service/dnscache/root/servers/@“의 아래에 생성됩니다.
    이제부터 dnscache는 resolve 요청이 있을 때 답을 자신이 가지고 있지 않을 때는 여기(@)에 기재된 외부 DNS 서버에 쿼리하고 그 결과를 캐시, 응답하게 됩니다.

    ❺ daemontools에 등록

    /var/djbdns/dnscache/run 작성(확인)

    #!/bin/sh
    exec 2>&1
    exec <seed
    exec envdir ./env sh -c '
      exec envuidgid dnscache softlimit -o250 -d "$DATALIMIT" /usr/local/bin/dnscache
    '

    /var/djbdns/dnscache/log/run 작성(확인)

    #!/bin/sh
    exec setuidgid dnslog multilog t s1000000 n20 –'*' +'* stats * * *' ./dnsstatus +'*' ./main
    
    # 작성후 권한변경
    chown dnslog:djbdns /var/djbdns/dnscache/log

    daemontools에 등록합니다.

    ln -s /var/djbdns/dnscache /service

    기동시 킨 후 확인합니다.

    [root@centos7 dnscache]# /usr/local/bin/svstat /service/dnscache
    /service/dnscache: up (pid 12254) 57266 seconds
    

    dnscache를 이용하기 위해서 DNS resolver설정을 변경합니다.

    [root@centos7 root]# cat /etc/resolv.conf 
    nameserver 127.0.0.1          #  << 추가
    

    확인 차원에서 dnscache를 재시작합니다.

    /usr/local/bin/svc -t /service/dnscache

    기본적인 설정은 이게 다 입니다.

    ❻ dnscache 모니터링 & 튜닝

    이제 약간의 튜닝 포인트를 찾아보겠습니다. 먼저 잘 동작하고 있는지 살펴봅니다.

    dnscache 로그 확인

    # 창을 두개 띄워둡니다. 
    # 창1, 실행시켜 둡니다.
    tail –f /var/djbdns/dnscache/log/main/current | tai64nlocal          #  << cached 로 시작하는 라인을 볼수있음
    
    # 창2
    # nslookup시 dnscache가 어떻게 동작하는지 창1에서 확인
    [naru@centos7 ~]$ nslookup google.co.jp
    Server:        127.0.0.1              #   << dnscache 가 응답
    Address:    127.0.0.1#53
    
    Non-authoritative answer:
    Name:    google.co.jp
    Address: 172.217.25.227        #   << 결과
    
    [naru@centos7 ~]$ 
    

    dnscache Cache 용량 산정하기

    dnscache는 기본적으로 1MB의 메모리를 자신의 Cache로 사용합니다.

    dnscache는 Cache 이외에 약간의 메모리가 더 필요하기 문에 DATALIMITCACHESIZE보다 크아 주는 것이 좋습니다.

    적당한 Cache크기를 할당하기 위해서는 logfile의 내용 중 stats 라인을 모니터링해야 하는데 아래와 같이 multilog의 옵션을 이용하여 별도의 파일로 생성하도록 할 수 있습니다.

     

    만약 위의 "❺ daemontools에 등록" 항목을 진행했다면 바로 stats를 포함한 로그 확인 단계로 넘어가세요.

    설정을 변경하기 전에 /var/djbdns/dnscache/log 디렉터리의 권한이 dnslog인지 확인합니다.

    chown dnslog:djbdns /var/djbdns/dnscache/log

    vi /var/djbdns/dnscache/log/run

    #!/bin/sh
    exec setuidgid dnslog multilog t s1000000 n20 –'*' +'* stats * * *' ./dnsstatus +'*' ./main
    

    dnscache 재기동

    /usr/local/bin/svc -t /service/dnscache
    
    # dnscache 재기동후 자동으로 아래와 같이 디렉토리와 파일이 생성됨
    /var/djbdns/dnscache/log/dnsstatus/current

    stats 로그를 확인

    cat /var/djbdns/dnscache/log/dnsstatus/current | tai64nlocal |grep stats
    

     

    이제 예제를 통해서 필요한 Cache용량을 계산합니다.

    오래전에 작성해두었던 내용을 복붙 합니다.

     

    #--------------------------------------#

    # Cache용량 산정 방법
    로그 파일 내의 stats행의 상태를 확인, Cache 사용 상황을 조사하여 그 값으로부터 적절한 Cache 용량을 산출한다.
    우선 로그 파일로부터, 약 24시간 간격의 stats행을 아래와 같은 요령으로 찾아낸다.

    [root@centos7 main]# cat /var/dnscache/log/main/current | tai64nlocal | grep stats
    2006-11-08 11:30:01.435814500 stats 37 3126 1 0
    ...
    2006-11-09 11:30:01.423782500 stats 30 19470 1 0

    stats 행에 나타나고 있는 4개의 숫자 가운데, 2번째의 숫자가 Cache 이동량(cache motion)이다
    dnscache 기동시부터 현재까지 Cache에 쓴 데이터의 총 바이트수를 나타내고 있다.

    24시간 간격을 둔 값의 차분이, 그 사이의 Cache 사용량이 된다
    상기의 예에서는 19470 - 3126 = 16344바이트

    산정 방법 1)
    DNS 정보의 TTL값은 대체로 3~7일이므로, 3일 분의 Cache 사용량 정도의 Cache 용량을 확보해 두는 것을 전제로 한다.
    상기의 예에서는 약 17k * 3 = 50k바이트
    Cache 용량은 /service/dnscache/env/CACHESIZE에서 설정 가능하므로, 필요에 따라서 조정한다.
    (아래의 "100MB Cache로 변경하려면"을 참고)


    산정 방법 2)
    또는 현재의 Cache용량을 1일 Cache 이동량으로 나눈 값을 통해서 Cache 순환 시간을 확인한다.
    상기의 예에서는 16344 / 19470 = 0.839445...이며 아래의 수치를 기준으로 보면

    0.01 : Cache순환 시간(Cache Cycle Time) - 15분
    0.1 : Cache순환 시간(Cache Cycle Time) - 2시간
    1 : Cache순환 시간(Cache Cycle Time) – 1일
    10 : Cache순환 시간(Cache Cycle Time) - 1주일 이상

    0.839445... = 약 1 이므로 Cache순환 시간은 약 1일이다

    1일분으로 Cache용량을 설정할 것인지는 각자의 몫이다.

     

    산정방법 3)
    Cache이동량(cache motion)을 쿼리 카운트(query count)로 나눈다. 

    상기의 예에서는 30 / 19470 = 0.00154이다.

    쿼리 카운트(query count)는 stats행의 첫 번째 숫자이다.

     

    Cache가 매우 크다면 결과값의 비율은 가능한 한 최소한의 작은 값이 될 것이고 Cache가 너무 작다면 결과값의 비율은 매우 높을 것이다.

     

    이렇게 3가지 방법으로 dnscache의 Cache용량을 산정해 보았는데, 이렇게 자세하게 다룰 만큼 dnscache의 성능은 놀라울 정도로 좋다.

    #--------------------------------------#

     

    100MB Cache로 변경하려면 :

    echo 10000000 > /service/dnscache/env/CACHESIZE
    echo 104857600 > /service/dnscache/env/DATALIMIT
    
    /usr/local/bin/svc -t /service/dnscache

    Qmail Tuning

    기본적으로 /var/qmail/bin/qmail-showctl 명령을 실행하여 필요한 항목을 수정합니다.

    ■ 큐를 빨리 비우고 싶다면

    # queuelifetime: (Default.) Message lifetime in the queue is 604800 seconds.
    echo '86400' > queuelifetime

    ■ Concurrencylocal & concurrencyremote

    ※ concurrencylocal: (Default.) Local concurrency is 10.
    ※ concurrencyremote: (Default.) Remote concurrency is 20.
    echo 200 > concurrencylocal
    echo 800 > concurrencyremote

    ■ timeoutconnect

    ※ timeoutconnect: (Default.) SMTP client connection timeout is 60 seconds.
    echo '30' > timeoutconnect

    ■ daemontools 에 등록된 서비스 종료

    # daemontools 서비스를 시작하려면 다시 링크를 걸어준다
    cd /service/qmail 
    rm -f /service/qmail 
    svc -dx . log
    
    cd /service/qmail-smtps
    rm -f /service/qmail-smtps 
    svc -dx . log
    
    cd /service/imaps
    rm -f /service/imaps 
    svc -dx .
    

    ■ stat 보기

    svstat /service/imaps

    ■ qmail 큐에 있는 메일을 강제로 배달하기

    svc -a /service/qmail

    ■ 서버 잠시 중지시키기 (pause)

    svc -p /service/qmail 
    svc -p /service/qmail-smtps 
    svc -p /service/imaps

    ■ 다시 진행시키기(continue)

    svc -c /service/qmail 
    svc -c /service/qmail-smtps 
    svc -c /service/imaps

    ※ svc의 옵션 : -u (up), -d (down), -o (once), -p (pause), -c (continue), -h (hangup),-k (kill)

    ■ Qmail Delivery Test

    ① Local-local test
    empty message를 전송

    echo to: naru | /var/qmail/bin/qmail-inject

    ② Local-error test
    존재하지 않는 로컬 주소로 메시지를 전송
    You will now have a bounce message in your mailbox.

    echo to: nonexistent | /var/qmail/bin/qmail-inject

    ③ Local-remote test
    외부에 존재하는 계정으로 메일을 발송

    echo to: your-id@gmail.com | /var/qmail/bin/qmail-inject

    ④ Local-postmaster test
    대소문자 구분 없이 postmaster에게 메일 발송 가능

    echo to: POSTmaster | /var/qmail/bin/qmail-inject

    ⑤ Local-postmaster test
    대소문자 구분 없이 postmaster에게 메일 발송 가능

    /var/qmail/bin/qmail-inject -f nonexistent To: unknownuser
    Subject: testing
    
    This is a test. This is only a test. 
    
    Ctrl+d

    ■ SMTP server test

    [root@centos7 ~]# telnet 127.0.0.1 25
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    220 naruhodo.cf ESMTP
    helo dude
    250 naruhodo.cf
    mail naru@naruhodo.cf
    250 ok
    rcpt naru@naruhodo.cf
    250 ok
    data
    354 go ahead
    subject: testing
    this is a test...
    .
    250 ok 1559104724 qp 19451
    quit
    221naruhodo.cf
    Connection closed by foreign host.
    [root@centos7 ~]# 

    ■ Qmail Queue관리

    Q상태 보기

    /var/qmail/bin/qmail-qstat
    
    messages in queue: 0
    messages in queue but not yet preprocessed: 0

    Q의 내용을 강제로 내보내기

    svc -a /service/qmail-send

    or

    /etc/init.d/qmail doqueue

    qmHandle로 관리하기

    cd /usr/local/src
    wget https://osdn.net/projects/sfnet_qmhandle/downloads/qmhandle-1.3/qmhandle-1.3.2/qmhandle-1.3.2.tar.gz
    cd qmhandle-1.3.2
    cp ./qmHandle /var/qmail/bin/

    qmHandle 옵션들
    주로 qmHandle -l 로 큐를 확인한 후 qmhandle -a 모두 내보내기를 한다거나..

    Available parameters are:
      -a     : try to send all queued messages now (qmail must be running)
      -l     : list message queues
      -L     : list local message queue
      -R     : list remote message queue
      -s     : show some statistics
      -mN    : display message number N
      -dN    : delete message number N
      -fsender : delete message from sender
      -f're'   : delete message from senders matching regular expression re
      -Stext : delete all messages that have/contain text as Subject
      -h're'   : delete all messages with headers matching regular expression re (case insensitive)
      -b're'   : delete all messages with body matching regular expression re (case insensitive)
      -H're'   : delete all messages with headers matching regular expression re (case sensitive)
      -B're'   : delete all messages with body matching regular expression re (case sensitive)
      -t're'   : flag messages with recipients in regular expression 're' for earlier retry (note: this lengthens the time message can stay in queue)
      -D     : delete all messages in the queue (local & remote)
      -V     : print program version
    
    Additional (optional) parameters are:
      -c     : display colored output
      -N     : list message numbers only
               (to be used either with -l, -L or -R)

     

     

    일본어 버전 (6편)

    https://www.jacepark.com/building-mail-servers-with-qmail-over-ssl-in-centos-7-basics 

     

    Qmail over SSLでメール通信を暗号化する〜第 1 篇:基本情報〜|CentOS 7

     

    www.jacepark.com

    https://www.jacepark.com/building-mail-servers-with-qmail-over-ssl-in-centos-7-qmail-ucspi-tcp-daemontools

     

    Qmail over SSLでメール通信を暗号化する〜第 2 篇:基本パッケージ設置〜|CentOS 7

     

    www.jacepark.com

    https://www.jacepark.com/building-mail-servers-with-qmail-over-ssl-in-centos-7-vpopmail-qmailadmin/

     

    Qmail over SSL でメール通信を暗号化する〜第 3 篇:Vpopmail QmailAdmin 設置〜|CentOS 7

     

    www.jacepark.com

    https://www.jacepark.com/building-mail-servers-with-qmail-over-ssl-in-centos-7-courier-imap/

     

    Qmail over SSL でメール通信を暗号化する〜第 4 篇:Courier-imap 設置〜|CentOS 7

     

    www.jacepark.com

    https://www.jacepark.com/building-mail-servers-with-qmail-over-ssl-in-centos-7-dnscache-ezmlm/

     

    Qmail over SSL でメール通信を暗号化する〜第 5 篇:dnscache ezmlm 設置〜|CentOS 7

     

    www.jacepark.com

    https://www.jacepark.com/building-mail-servers-with-qmail-over-ssl-in-centos-7-operation/

     

    Qmail over SSL でメール通信を暗号化する〜第 6 篇:詳細設定・運用〜|CentOS 7

     

    www.jacepark.com

     

    반응형