CentOS 8 - Roundcube 메일 보안 인증서 적용하기 (Postfix, Dovecot)

    CentOS 8 - Applying Roundcube Mail Security Certificate (Postfix, Dovecot)

    무료 SSL 보안인증서 발급받기 : https://foxydog.tistory.com/39

    Roundcube Apache SSL 적용 : https://foxydog.tistory.com/40

    ※ 해당 포스팅에서는 이미 사용하고 있는 메일서버에서 인증서만 적용하는 부분으로 중간 과정이 생략되어있으므로 메일 서버 구축 과정부터 순차적으로 보는 것을 권고합니다.

     

    이제 받은 인증서를 가지고 Roundcube 메일서버 SSL 보안 인증서를 적용해보도록 하겠습니다.

    Roundcube 메일서버는 Apache로 구성되어 있으므로 httpd.conf 설정을 수정을 하면 되며 SMTP를 통해 메일을 주고받을 경우와 POP/IMAP 클라이언트 이용 시에도 SSL로 인증하기 위한 Postfix, Dovecot 설정도 같이 알아보도록 하겠습니다. ※ 인증서는 [SSL For Free]에서 발급받은 무료 인증서로 실전 테스트합니다.


    ■ Roundcube 웹메일만 SSL/TLS설정 사용하기

    ※ Postfix Postfix Configuration Parameters (공식 사이트 옵션 설명 참고) :

    http://www.postfix.org/postconf.5.html

     

    STEP01 → Postfix (master.cf)설정 수정 (스크린샷 참고)

    [root@localhost ~]# vim /etc/postfix/master.cf

     

    ※ 아래 (#) 주석 해제

    smtps     inet  n       -       n       -       -       smtpd

     -o syslog_name=postfix/smtps

     -o smtpd_sasl_auth_enable=yes

     -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

     -o milter_macro_daemon_name=ORIGINATING

     

    STEP02 → Postfix (main.cf) 설정 수정 (스크린샷 참고)

    [root@localhost ~]# vim /etc/postfix/main.cf

     

    ※ 아래 (#) 주석 해제 또는 추가 SSL/TLS 관련 설정

    smtpd_use_tls = yes  [SSL/TLS 사용]

    #smtpd_tls_auth_only = yes  [선택사항 강제로 보안 SSL/TLS 사용할 경우에만 적용 권고]

    smtpd_tls_cert_file = /etc/ssl/mail.foxydog.co.kr/certificate.crt  [인증서(CRT) 경로]

    smtpd_tls_key_file = /etc/ssl/mail.foxydog.co.kr/private.key  [인증서(KEY) 경로]

    smtpd_tls_CAfile = /etc/ssl/mail.foxydog.co.kr/ca_bundle.crt  [인증서(CA) 번들 경로]

    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

    smtpd_tls_security_level = may  [클라이언트 선택적 SSL/TLS 적용]
    smtp_tls_security_level = may  [클라이언트 선택적 SSL/TLS 적용]

    ※ tls_cert(key/CA) 발급받은 인증서를 적용하지 않고 메일을 발송하면 다음과 같은 에러가 발생할 수 있음

    SSL_accept error from localhost[::1]: 0

    warning: TLS library problem: 29515:error:14094418

    SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca:s3_pkt.c:1493:SSL alert number 48:

     

    STEP03 → Roundcube config 파일 수정 (스크린샷 참고)

    [root@localhost ~]# vim /var/www/html/roundcube/config/config.inc.php

     

    ※ 아래의 3개만 보안 포트 및 URL로 설정

    $config['defautl_port'] = 993;

    $config['smtp_server'] = 'tls://localhost';

    $config['smtp_port'] = 465;

    $config['smtp_conn_options'] = array(
       'ssl' => array(
       'verify_peer' => false,
       'verify_peer_name' => false,
      ),
    );

    ※ 참조 사이트 : https://wiki.archlinux.org/index.php/Roundcube

    ※ Roundcube Config 옵션 중 [smtp_conn_options]으로 SSL/TLS 수동 설정으로 추가해야 하며 저의 경우는 웹메일에서 발송 시도를 하면 Postfix SMTP(S)로 전달되면서 처리하기 때문에 [fales]만 넣었습니다. Postfix Config 설정에 이미 인증서 옵션을 적용했기 때문에 이중으로 세팅할 필요 없습니다. 필자도 번역본은 의미 전달이 애매하여 직접 테스트를 해보았습니다. 저 옵션을 주지 않을 경우 SSL/TLS 인증 에러가 발생하기 때문에 필수로 넣어야 하는 옵션은 맞는 것으로 판단됩니다.

     

    ※ Roundcube Config 설정에 직접 SSL/TLS 세팅할 경우에 자체 (CA) 서명 인증서를 이용할 경우는 [true] 옵션을, 만약 config 발급받은 (CA) 인증서 처리를 하려면 [fales] 설정 후 [cafile / ssl_cert / ssl_key] 인증서 경로를 잡아줘야 합니다.

     

    STEP04 → Postfix 서비스 재시작

    [root@localhost ~]# systemctl restart postfix

     

    STEP05 → Roundcube SSL/TLS 웹메일 수발신 테스트

    ※ 메일 로그에서 확인(필요한 정보만 표시)

    [root@localhost ~]# tail -f /var/log/maillog

     

    postfix/smtps/smtpd[2964]: connect from localhost[::1]  ◁ SMTPS 시작

    postfix/smtps/smtpd[2964]: client=localhost[::1], sasl_method=LOGIN, sasl_username=foxydog@foxydog.co.kr

    mail postfix/cleanup[2968]: message-id=<@foxydog.co.kr>

    mail postfix/qmgr[2935]: F3DE61049355: from=<foxydog@foxydog.co.kr>, size=756, nrcpt=1 (queue active)

    mail postfix/smtps/smtpd[2964]: disconnect from localhost[::1]  ◀ SMTPS 통신 끝

    mail postfix/smtp[2969]: to=<ID@naver.com>, relay=mx2.naver.com[IP]:25 delay=0.8, delays=0.09/0.06/0.14/0.52, dsn=2.0.0, status=sent (250 2.0.0 OK nsmtp)

     

     

    ■ POP/IMAP 클라이언트 SSL/TLS설정 사용하기

     

    STEP01 → Postfix (master.cf) 설정 수정 (스크린샷 참고)

    [root@localhost ~]# vim /etc/postfix/master.cf

     

    ※ 아래 (#) 주석 해제

    smtps     inet  n       -       n       -       -       smtpd

     -o syslog_name=postfix/smtps

     -o smtpd_tls_wrappermode=yes  [이 옵션만 추가]

     -o smtpd_sasl_auth_enable=yes

     -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

     -o milter_macro_daemon_name=ORIGINATING

     

     ※ smtpd_tls_wrappermode 이 옵션이 Roundcube와 Postfix 정책과는 SSL/TLS 처리하는 게 다르다 보니 이것을 사용할 경우 내부(localhost) 465 포트 통신이 안되기 때문에 Roundcube config 설정을 해도 처리를 하지 못합니다. 그래서 웹의 경우는 인증서를 적용하더라도 SSL/TLS를 포기해야 하는 상황이 발생합니다. 전체 구글을 찾아보았지만 자료가 부족하기도 하고 옵션도 많기 때문에 가능한 방법을 찾게 되면 추가 업로드하도록 하겠습니다. 일단 웹메일과 POP/IMAP 클라이언트를 같이 사용하기 위해 다음과 같이 진행

     

    STEP02 → Roundcube config 파일 수정

    [root@localhost ~]# vim /var/www/html/roundcube/config/config.inc.php

     

    $config['smtp_port'] = 587;  [submission 포트로 변경]

     

    ※ 최근에는 SMTP 기본 25 포트를 인터넷 공급자(ISP) 단에서 보안에 취약하다고 특히 해외에서는 차단하는 경우가 많아졌습니다. 클라이언트를 이용할 경우 대체 포트 587(submission) 사용하는 게 좋습니다.

     

    STEP03 → Dovecot (dovecot.conf) 파일 수정

    [root@localhost ~]# vim /etc/dovecot/dovecot.conf

     

    protocols = imap pop3 lmtp

    ※ 예전 버전에서는 프로토콜에 (imaps, pop3s) 추가로 넣었지만 최신 버전에서는 안 넣어도 기본으로 작동합니다,

    만약 넣을 경우 제거하라고 메시지가 발생합니다.

    'imaps' protocol is no longer necessary, remove it

    'pop3s' protocol is no longer necessary, remove it

     

    STEP04 → Dovecot (10-auth.conf) 파일 수정

    [root@localhost ~]# vim /etc/dovecot/conf.d/10-auth.conf

     

    disable_plaintext_auth = no

    ※ [선택사항] 강제로 보안 SSL/TLS 적용하실 경우는 YES, 클라이언트 POP/IMAP 세팅 시 무조건 보안 포트 995/993로 해야 연결이 가능합니다. 혼합으로 사용할 경우는 NO 세팅

     

    STEP05 → Dovecot (10-master.conf) 파일 수정

    [root@localhost ~]# vim /etc/dovecot/conf.d/10-master.conf

     

    ※ IMAPS (#) 주석 제거하여 SSL 활성화

    service imap-login {
      inet_listener imap {
        port = 143
      }
      inet_listener imaps {
        port = 993
        ssl = yes
      }

    }

     

    ※ POP3S (#) 주석 제거하여 SSL 활성화

    service pop3-login {
      inet_listener pop3 {
        port = 110
      }
      inet_listener pop3s {
        port = 995
        ssl = yes
      }
    }

     

    STEP06 → Dovecot (10-ssl.conf)

    [root@localhost ~]# vim /etc/dovecot/conf.d/10-ssl.conf

     

    ※ SSL YES 활성화 및 인증서 경로 설정

    ssl = yes

    ssl_cert = </etc/ssl/mail.foxydog.co.kr/certificate.crt

    ssl_key = </etc/ssl/mail.foxydog.co.kr/private.key

    ssl_ca = </etc/ssl/mail.foxydog.co.kr/ca_bundle.crt

     

    STEP07 → Dovecot 서비스 재시작

    [root@localhost ~]# systemctl restart dovecot

     

    STEP08 → 방화벽 허용

    ※ 저의 경우는 IPtables 이용

    [root@localhost ~]# vim /etc/sysconfig/iptables

    ## MAIL ACCEPT ##
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT  [smtp]
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT  [submission]
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT  [smtps]
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT  [pop3]
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT  [imap]
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT  [imaps]
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT  [pop3s]

     

    [root@localhost ~]# systemctl restart iptables

     

     

    STEP09 → 외부 클라이언트를 이용해 보안 SSL POP3S(995)/IMAPS(993)연결 확인

    마이크로소프트 아웃룩 프로그램 이용

     

    □ POP3S(995) 세팅 인증 확인

    ※ 서버 로그인 기록

    [root@localhost ]# tail -f /var/log/dovecot.log

    Nov 06 11:17:23 pop3-login: Info: Login: user=<foxydog@foxydog.foxydog.co.kr>

    method=PLAIN, rip=접속 PC IP, lip=서버 IP, mpid=8345, TLS, session=<>

     

    □ IMAPS(993) 세팅 인증 확인

    ※ 서버 로그인 기록

    [root@localhost ]# tail -f /var/log/dovecot.log

    Nov 06 11:31:33 imap-login: Info: Login: user=<foxydog@foxydog.co.kr>

    method=PLAIN, rip=접속 PC IP, lip=서버 IP, mpid=8345, TLS, session=<>

     

     

    마치며

    최종 테스트 시 클라이언트에서 POP(S)/IMAP(S) 보안 SSL 적용이 제대로 인증이 성공하는 것을 확인하였습니다. 아 물론

    외부 수발신도 잘 됩니다. 제가 아직 자료 부족으로 웹메일과 같이 사용할 경우 Roundcube Postfix  특정 옵션 때문에 SMTPS를 같이 사용하지 못하는 부분이 조금 아쉽습니다. 추후 시간 나는 대로 다른 오픈소스 메일도 동일하게 발생하는지 찾아보도록 하겠습니다.

    Designed by JB FACTORY