Special:Communication & Concept/FreeBSD 12.X jail 에 Postfix, dovecot 메일 서버 설치 후 ThunderBird 나 windows 10 메일 클라이언트로 메일 받는 방법

Jump to: navigation, search
#204 [ Ssam ] hit: 94(#a1ffa1)

들어가기

  1. 컴퓨터에서 다른 컴퓨터로 전자메일을 전달하는 메일 전송 에이전트 (Mail Transfer Agent, MTA), sendmail, qmail, Postfix 가 여기에 속한다.
  2. 받은 전자메일을 사용자의 편지함으로 전달하는 일을 하는 메일 배달 에이전트 (Mail Delivery Agent, MDA), Dovecot, procmail 가 여기에 속한다.
  3. Dovecot은 보안을 우선 염두에 두고 쓰여진 Mail Delivery Agent 입니다. mbox 와 Maildir 같은 주요 메일박스 형식을 지원.
  4. 사용자가 실제로 전자메일을 작성하고 읽는데 사용하는 메일 사용자 에이전트 (Mail User Agent, MUA), mutt, Outlook Express, Thunder Bird 이메일 클라이언트 프로그램.
  5. Postfix 설정 부분은 Postfix 웹사이트 documentation 부분을 참고.
  6. dovecot 설정 부분은 dovecot 웹사이트 documentation 부분을 참고.


공유기 또는 방화벽에서 포트 포워딩 설정

  • 메일 설정 포트 smtp: 25 열어 놓는다.(테스트 후 막는다)
  • 메일 설정 포트 smtps: 465 열어 놓는다.
  • 메일 설정 포트 pop3: 110 닫아 놓는다.
  • 메일 설정 포트 pop3s: 995 열어 놓는다.
  • 메일 설정 포트 submission: 587(pop3대체 포트) 열어 놓는다.
  • 메일 설정 포트 imap4: 143 닫아 놓는다.
  • 메일 설정 포트 imap4s: 993 열어 놓는다.


jail 콘솔 접속

  • 특별히 명시하지 않는 한 모든 작업은 jail 콘솔에서 한다.
  • Full jail 을 사용 할 것이다.
  • 메일서버를 설치하기 위한 jail 의 호스트 이름은 mail 이다.
# jexec mail tcsh
메세지 출력
root@mail:/ #


로컬 네임 설정

  • 로컬 호스트네임 확인
# hostname -f
  • 에디터 vi /etc/rc.conf 파일을 열어서 확인.
hostname="mail.zbm.kr"
  • 에디터 vi /etc/hosts 파일을 열어서 수정.
::1                     mail.zbm.kr mail localhost localhost.zbm.kr
127.0.0.1               mail.zbm.kr mail localhost localhost.zbm.kr
0:0:0:0:0:ffff:a00:3    mail.zbm.kr mail
10.0.0.3                mail.zbm.kr mail


FreeBSD 포트 컬렉션 설치와 업데이트

  • 위에서 실행하지 않았다면 실행
# portsnap fetch
# portsnap extract
# portsnap fetch update
  • 두 번째 부터 실행시 portsnap update 업데이트.
# portsnap fetch update
  • FreeBSD 패키지 업데이트와 업그레이드
# pkg update
# pkg upgrade


프리비에스디(FreeBSD 12.x) 한글 설정

  • 새로만든 jail에도 한글 설정.
  • 미디어위키에 봇을 돌려 특정부분를 한글로 치환해야되는 경우가 있어서 설정 함.
  • 두 개 파일 /etc/login.conf/etc/profile 설정하면 된다. (시스템 전체 설정.)
  • 에디터 vi /etc/login.conf 파일을 열어 추가 (84라인 쯤에, 러시아어가 설정되어있는 것을 아래와 같이 변경)
korean|Korean Users Accounts:\
    :charset=UTF-8:\
    :lang=ko_KR.UTF-8:\
    :tc=default:
  • 에디터 vi /etc/profile 파일을 열어 추가 ( 20라인 쯤에)
LANG=ko_KR.UTF-8; export LANG
MM_CHARSET=UTF-8; export MM_CHARSET
  • 파일 /etc/login.conf 재작성 후 디비 업데이트 명령 실행.
# cap_mkdb /etc/login.conf


  • 로케일 확인
# locale
메세지 출력
LANG=ko_KR.UTF-8
LC_CTYPE="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_ALL=


사용자 디렉토리 만들고 퍼미션 조정

  • jail 에서는 호스트 서버에 등록된 사용자는 추가 가능, 계정에 필요한 사용자 모두를 추가 해 주어야 된다.
# adduser
  1. 메세지 출력에 대하여
  2. Username은 사용자 계정을 적어다 준다, Full name은 그냥 넘겨도 됨.
  3. Login group is due. Invite due into other groups? [], 물음에 일반 사용자면 엔터, 관리자면 wheel그룹에 가입.
메세지 출력 예 입니다.
 Username: lure
 Full name: 
 Uid (Leave empty for default): 
 Login group [lure]: 
 Login group is lure. Invite lure into other groups? []: wheel
 Login class [default]: 
 Shell (sh csh tcsh nologin) [sh]: 
 Home directory [/home/lure]: 
 Home directory permissions (Leave empty for default): 
 Use password-based authentication? [yes]: 
 Use an empty password? (yes/no) [no]: 
 Use a random password? (yes/no) [no]: 
 Enter password: 
 Enter password again: 
 Lock out the account after creation? [no]: 
 Username   : lure
 Password   : *****
 Full Name  : 
 Uid        : 1002
 Class      : 
 Groups     : lure wheel
 Home       : /home/lure
 Home Mode  : 
 Shell      : /bin/sh
 Locked     : no
 OK? (yes/no): yes
 adduser: INFO: Successfully added (lure) to the user database.
 Add another user? (yes/no): no
 Goodbye!
  • 참고로 사용자 삭제 명령은
# rmuser


sasl 인증 설치

# pkg install cyrus-sasl cyrus-sasl-saslauthd
메세지
The following 2 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
	cyrus-sasl: 2.1.27
	cyrus-sasl-saslauthd: 2.1.27_1

Number of packages to be installed: 2
The process will require 8 MiB more space.
996 KiB to be downloaded.

Proceed with this action? [y/N]: y
[.........]
Message from cyrus-sasl-2.1.27:
You can use sasldb2 for authentication, to add users use:
	saslpasswd2 -c username
If you want to enable SMTP AUTH with the system Sendmail, read
Sendmail.README

NOTE: This port has been compiled with a default pwcheck_method of
      auxprop.  If you want to authenticate your user by /etc/passwd,
      PAM or LDAP, install ports/security/cyrus-sasl2-saslauthd and
      set sasl_pwcheck_method to saslauthd after installing the
      Cyrus-IMAPd 2.X port.  You should also check the
      /usr/local/lib/sasl2/*.conf files for the correct
      pwcheck_method.
      If you want to use GSSAPI mechanism, install
      ports/security/cyrus-sasl2-gssapi.
      If you want to use SRP mechanism, install
      ports/security/cyrus-sasl2-srp.
      If you want to use LDAP auxprop plugin, install
      ports/security/cyrus-sasl2-ldapdb.
Message from cyrus-sasl-saslauthd-2.1.27_1:

****************************************************************************

To run saslauthd from startup, add saslauthd_enable="YES" in your
/etc/rc.conf.

****************************************************************************


postfix 설치

  • 옵션을 추가해야 되므로 ports Install 로 설치를 한다.
  • 옵션에서 sasl, TLS, 선택 후 OK
# cd /usr/ports/mail/postfix && make install clean
메세지
[......]
Would you like to activate Postfix in /usr/local/etc/mail/mailer.conf [n]? y
Activate Postfix in /usr/local/etc/mail/mailer.conf
To use postfix instead of sendmail:
  - clear sendmail queue and stop the sendmail daemons

Run the following commands to enable postfix during startup:
  - sysrc postfix_enable="YES"
  - sysrc sendmail_enable="NONE"

If postfix is *not* already activated in /usr/local/etc/mail/mailer.conf
  - mv /usr/local/etc/mail/mailer.conf /usr/local/etc/mail/mailer.conf.old
  - install -m 0644 /usr/local/share/postfix/mailer.conf.postfix /usr/local/etc/mail/mailer.conf

Disable sendmail(8) specific tasks,
add the following lines to /etc/periodic.conf(.local):
  daily_clean_hoststat_enable="NO"
  daily_status_mail_rejects_enable="NO"
  daily_status_include_submit_mailq="NO"
  daily_submit_queuerun="NO"

If you are using SASL, you need to make sure that postfix has access to read
the sasldb file.  This is accomplished by adding postfix to group mail and
making the /usr/local/etc/sasldb* file(s) readable by group mail (this should
be the default for new installs).

If you are upgrading from prior postfix version, please see the README
files for recommended changes to your configuration and additional
http://www.postfix.org/COMPATIBILITY_README.html

===> SECURITY REPORT: 
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/lib/postfix/libpostfix-util.so

      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/postfix

      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.

      For more information, and contact details about the security
      status of this software, see the following webpage: 
http://www.postfix.org/


dovecot 설치

# cd /usr/ports/mail/dovecot && make install clean
또는
  • 특별한 옵션이 없으므로 pkg를 사용 한다.
# pkg install dovecot
메세지 출력
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	dovecot: 2.3.7.2_1

Number of packages to be installed: 1

The process will require 21 MiB more space.
4 MiB to be downloaded.

Proceed with this action? [y/N]: y
[.........]
 You must create the configuration files yourself. Copy them over
 to /usr/local/etc/dovecot and edit them as desired:

 	cp -R /usr/local/etc/dovecot/example-config/* \
 		/usr/local/etc/dovecot

 The default configuration includes IMAP and POP3 services, will
 authenticate users agains the system's passwd file, and will use
 the default /var/mail/$USER mbox files.

 Next, enable dovecot in /etc/rc.conf:

 	dovecot_enable="YES"
---------------------------------------------------------------------
 To avoid a risk of mailbox corruption, do not set the
 security.bsd.see_other_uids or .see_other_gids sysctls to 0
 if Dovecot is storing mail for multiple concurrent users (PR 218392).
---------------------------------------------------------------------
 If you want to be able to search within attachments using the
 decode2text plugin, you'll need to install textproc/catdoc, and
 one of graphics/xpdf or graphics/poppler-utils.
---------------------------------------------------------------------

 There are some potentially breaking changes in Dovecot 2.3. If you
 are upgrading from Dovecot 2.2:
 
   * Read https://wiki2.dovecot.org/Upgrading/2.3
   * Merge the configuration file changes from
     /usr/local/etc/dovecot/examples-config/

---------------------------------------------------------------------

===> SECURITY REPORT: 
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/lib/dovecot/libdovecot.so.0.0.0
/usr/local/lib/dovecot/libdovecot.a(net.o)

      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/dovecot

      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.

      For more information, and contact details about the security
      status of this software, see the following webpage: 
http://www.dovecot.org/


procmail 설치

# pkg install procmail
메세지 출력
[.....]
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	procmail: 3.22_10

Number of packages to be installed: 1

139 KiB to be downloaded.

Proceed with this action? [y/N]: y


SPF(Sender Policy Framework) 설치

  • SPF(Sender Policy Framework)는 위변조된 전자 메일을 감지하여 거부할 수 있다.
# pkg install py37-postfix-policyd-spf-python
메세지 출력
[...........]
The following 4 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	py37-postfix-policyd-spf-python: 2.0.2
	py37-pyspf: 2.0.12_5
	py37-authres: 1.1.1
	py37-py3dns: 3.2.0

Number of packages to be installed: 4

142 KiB to be downloaded.

Proceed with this action? [y/N]: y
 [........]
Message from py37-postfix-policyd-spf-python-2.0.2:

#
# To configure Postfix
#

This package must be integrated with Postfix to be effective:

 1. Add to your postfix master.cf:

        policyd-spf  unix  -       n       n       -       0       spawn
            user=nobody argv=/usr/local/bin/policyd-spf

 2. Configure the Postfix policy service in your main.cf so that the
    "smtpd_recipient_restrictions" includes a call to the policyd-spf policy
    filter.  If you already have a "smtpd_recipient_restrictions" line, you can
    add the "check_policy_service" command anywhere *after* the line which
    reads "reject_unauth_destination" (otherwise you're system can become an
    open relay).

        smtpd_recipient_restrictions =
            ...
            reject_unauth_destination
            check_policy_service unix:private/policyd-spf
            ...

        policyd-spf_time_limit = 3600

  3. Please consult the postfix documentation for more information on these and
     other settings you may wish to have in the "smtpd_recipient_restrictions"
     configuration.

  4. Reload postfix.


sendmail 정지

  • 에디터 vi /etc/rc.conf 파일에 등록 한다.
saslauthd_enable="YES"
saslauthd_flags="-a sasldb"
postfix_enable="YES"
dovecot_enable="YES"

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

postfix 설정

  • 에디터 vi /usr/local/etc/postfix/main.cf 파일을 열어 수정
  • TLS configuration 에 반복되는 부분까지 순서 잘 맟춰 입력해야 적용 된다. (보안: 표준 암호화(TLS) 자세히 알아보기)
  • TLS configuration은 postfix.org 참고


myhostname = mail.zbm.kr
mydomain = zbm.kr
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP 
464라인 쯤에 추가
mailbox_command = /usr/local/bin/procmail
파일 끝에 추가
# Cyrus-SASL configuration
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
 
# TLS configuration
smtp_tls_CAfile = /usr/local/etc/letsencrypt/live/zbm.kr/chain.pem
smtpd_tls_session_cache_database = btree:/usr/local/etc/postfix/smtpd_scache
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_CAfile = /usr/local/etc/letsencrypt/live/zbm.kr/chain.pem
smtpd_tls_cert_file = /usr/local/etc/letsencrypt/live/zbm.kr/cert.pem
smtpd_tls_key_file = /usr/local/etc/letsencrypt/live/zbm.kr/privkey.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:/usr/local/etc/postfix/smtpd_scache
tls_random_source = dev:/dev/urandom
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1

#smtpd_tls_dh1024_param_file = /etc/ssl/certs/dhparam_4096.pem
smtpd_tls_mandatory_protocols = TLSv1.2, !TLSv1, !TLSv1.1, !SSLv3, !SSLv2
smtpd_tls_protocols = TLSv1.2, !TLSv1.1, !TLSv1, !SSLv3, !SSLv2
smtpd_tls_mandatory_ciphers = high
smtpd_tls_exclude_ciphers = EXP, MEDIUM, LOW, DES, 3DES
tls_high_cipherlist = kEECDH:+kEECDH+SHA:kEDH:+kEDH+SHA:+kEDH+CAMELLIA:kECDH:+kECDH+SHA:kRSA:+kRSA+SHA:+kRSA+CAMELLIA:!aNULL:!eNULL:!SSLv2:!RC4:!MD5:!DES:!EXP:!SEED:!IDEA:!3DES


  • 에디터 vi /usr/local/etc/postfix/master.cf 파일을 열어 편집.
smtp      inet  n       -       n       -       -       smtpd
[......]
submission inet n       -       n       -       -       smtpd
[......]
 -o smtpd_sasl_auth_enable=yes
[......]
 -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
 -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       n       -       -       smtpd
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
[.......]

sasl 설정

  • 에디터 vi /usr/local/lib/sasl2/Sendmail.conf 파일을 열어 수정. (기본 인증, auxprop)
pwcheck_method: auxprop


dovecot 설정

  • 설치 후 dovecot.conf의 예는 다음, /usr/local/etc/dovecot/example-config/ 에 있으므로 내용을 통째로 /usr/local/etc/dovecot/ 아래에 복사
# cp -R /usr/local/etc/dovecot/example-config/* /usr/local/etc/dovecot
  • dovecot.conf 파일 권한 설정
# chmod 640 /usr/local/etc/dovecot/dovecot.conf

dovecot.conf 편집

  • 에디터 vi /usr/local/etc/dovecot/dovecot.conf 파일을 열어 설정.
  • 참고로 imaps pop3s 설정시 제거 하라고 에러 출력 되므로 아래와 같이 수정 한다.
  • 소켓 에러시 listen = *, :: -----> listen = * 로 수정 한다.
protocols = imap pop3
listen = * 
!include conf.d/*.conf
!include_try local.conf


  • 에디터 vi /usr/local/etc/dovecot/conf.d/10-ssl.conf 파일을 열어 설정
  1. dovecot.org 참조
  2. ssl = yes 및 disable_plaintext_auth = yes 인 경우 SSL/TLS가 클라이언트에 제공되지만 클라이언트가 이를 사용할 필요는 없다.
  3. 보안 수준에 따라 인증은 완전히 안전하거나 공격을 받을 수있는 방법이 있을 수 있다.
  4. ssl = requireddisable_plaintext_auth = yes : 비 일반 텍스트 인증 메커니즘을 사용하더라도 SSL/TLS는 항상 필요로 한다.(좀더 안전한 방법)
  5. SSL/TLS를 사용하기 전에 인증을 시도하면 인증이 실패한다.
ssl = required
ssl_cert = </usr/local/etc/letsencrypt/live/zbm.kr/cert.pem
ssl_key = </usr/local/etc/letsencrypt/live/zbm.kr/privkey.pem
ssl_ca = </usr/local/etc/letsencrypt/live/zbm.kr/chain.pem 
ssl_verify_client_cert = yes
#ssl_dh = </etc/ssl/certs/dhparam_4096.pem 
ssl_min_protocol = TLSv1.2
# SSL ciphers to use, the default is: 
ssl_cipher_list = ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH
ssl_prefer_server_ciphers = yes


  • 에디터 vi /usr/local/etc/dovecot/conf.d/10-master.conf 파일을 열어 Postfix smtp-auth부분 설정.
[.........]
service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 993
    ssl = yes
   }
}
 
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
 inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

[.........]

 # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
     mode = 0666
     user = postfix
     group = postfix
  }
}

[.....]


  • 에디터 vi /usr/local/etc/dovecot/conf.d/10-auth.conf 파일을 열어 수정.
  1. disable_plaintext_auth = no, 클라이언트측에서 일반 텍스트 인증을 사용하여 로그인 할 수 있다.
  2. disable_plaintext_auth = yes, 클라이언트측에서 일반텍스트 인증을 사용 할 수 없다. (조금 더 안전한 방법)
  3. SSL을 사용하여 인증 하므로 아래와 같이 설정 한다.
disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-system.conf.ext 


  • 에디터 vi /usr/local/etc/dovecot/conf.d/10-mail.conf 파일을 열어 수정.
mail_location = maildir:~/Maildir


SPF(Sender Policy Framework) 설정

  • 에디터 vi /usr/local/etc/postfix/master.cf 파일을 열어 편집 한다.
68라인 쯤에 추가
policyd-spf  unix  -       n       n       -       0       spawn
  user=nobody argv=/usr/local/bin/policyd-spf
  • 에디터 vi /usr/local/etc/postfix/main.cf 파일을 열어 편집 한다.
696 라인 쯤에 추가 (파일 내용 끝 부분에 추가)
## SPF configuration
policyd-spf_time_limit = 3600
smtpd_recipient_restrictions =
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_unverified_recipient,
   reject_unauth_destination,
   check_policy_service unix:private/policyd-spf
SPF 설정시 687 라인에 주석 처리 해야 됨(주석 처리 안 하면 경고 에러를 냄, Cyrus-SASL configuration 에 넣은 줄)
# smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination


  • policyd-spf.conf.sample로 policyd-spf.conf 환경 설정 파일을 만든다.
# cp -f /usr/local/etc/postfix-policyd-spf-python/policyd-spf.conf.sample /usr/local/etc/postfix-policyd-spf-python/policyd-spf.conf


  • 에디터 vi /usr/local/etc/postfix-policyd-spf-python/policyd-spf.conf 파일을 열어 수정 한다.
## For a fully commented sample config file see policyd-spf.conf.commented

debugLevel = 1
defaultSeedOnly = 1

HELO_reject = SPF_Not_Pass
Mail_From_reject = Fail

PermError_reject = False
TempError_Defer = False

skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0/104,::1/128


  • SPF 레코드 전송 설정
DNS 서버를 직접 사용 한다면 다음과 같이 spf1 프로토콜의 TXT 레코드를 영역 파일에 설정.
 위치는 /usr/local/etc/namedb/master/zbm.kr.zone
"v=spf1 +mx +ip4:사용자아이피 ~all"


DNS 서버를 외부에서 사용한다면 도메인에 TXT 레코드 추가 해 주시면 됩니다.(DDNS 사용하는 곳)
zbm.kr     IN  TXT "v=spf1 +mx +a:zbm.kr -all"


  • all : -, ~, ? 옵션이 있다.
  • ~all 은 spf 에 없는 IP라도 정상 메일 수 있다는 의미, 지정한 IP 에서 만 메일을 보내는 것이 확실하다면 -all 을 사용 해 주면 된다.
  • 스팸으로 분류 안 된다^^


  • 화이트 도메인 확인 방법
$ nslookup
> set type=txt
> zbm.kr

Server:		127.0.0.53
Address:	        127.0.0.53#53

Non-authoritative answer:
zbm.kr	 text = "v=spf1 +mx +ip4:xxxx.xxx.xxxxx.xxxx ~all"
  • v=spf1 +mx +ip4:xxxx.xxxx.xxxxx.xxxxx ~all 이러한 값이 나타나지 않으면 등록이 안 된 것.


사용자 Maildir 만들기

# mkdir -p /home/ssam/Maildir/{cur,new,tmp}
# chmod -R 700 /home/ssam/Maildir
# chown -R ssam:ssam /home/ssam/Maildir
  • 향후 사용자 생성에 대한 기본 값을 생성
# mkdir -p /usr/share/skel/Maildir/{cur,new,tmp}
# chmod -R 700 /usr/share/skel/Maildir/

procmail 설정


SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
#LOGFILE=$MAILDIR/procmail.log

#remove sexy
:0
* ^Subject: .*sexy.*
/dev/null



[......]
  • 참고, 사용 )는 이렇게 되어 있다.


# To send all mail with a subject of "Spam" to /dev/null: 
# "스팸" 이라는 제목의 모든 메일을 /dev/null 로 보내려면 다음과 같이하십시오.
:0
^Subject:.*Spam
/dev/null


# To forward all mail from <user@example.com> to an external address of <goodmail@example2.com>:
# <user@example.com>의 모든 메일을 <goodmail@example2.com>의 외부 주소로 전달하려면 다음을 수행하십시오.
:0
* ^From.*user@example.com
! goodmail@example2.com


 [.....]


메일 계정

# saslpasswd2 -c -u zbm.kr ssam
메세지
Password:
Again (for verification):
  • 메일 계정 입력 확인
# sasldblistusers2
메세지 출력
ssam@zbm.kr: userPassword


root의 메일을 전달하는 주소를 설정.

  • 이 부분은 일, 주, 월 단위로 서버 관련 정보(설치된 패키지 보안정보, 서버 디스크상태, ...)를 메일로 받게 된다.(매일 보다보면 퀴찬아 질 수도 있습니다, 다시 주석 처리하면 되여..)
  • 에디터 vi /etc/aliases 파일을 열어 20라인쯤에 수정 한다.
# root: me@my.domain 이렇게 되어 있는 것을 아래와 같이 수정, root 앞에 공백이 없어야 에러 없음. 
이렇게 수정 한다.
root: ssam@zbm.kr
아래 명령어로 설정을 반영한다.
# postalias /etc/aliases


  • 참고로 매일 서버 상태 보고서를 받게 된다.(매일, 주간, 월간 단위로)
예) 보안 패치 전 이메일 받은 것.
[.......]
Checking for packages with security vulnerabilities:
보안 취약점이있는 패키지 확인 :

Fetching vuln.xml.bz2: .......... done
libxslt-1.1.32_1 is vulnerable:
libxslt -- security framework bypass
WWW: https://vuxml.FreeBSD.org/freebsd/93167bef-9752-11e9-b61c-b885849ded8e.html

1 problem(s) in 1 installed package(s) found.
1 개의 설치된 패키지에서 1 개의 문제점이 발견되었습니다.
[.........]
예) 보안 패치 후 이메일 받은 것.
[.........]
Checking for packages with security vulnerabilities:
Fetching vuln.xml.bz2: .......... done
0 problem(s) in 0 installed package(s) found.
메일로 전달된 넷트워크 상태 보기, 이렇게 되어 있다.
Network interface status:
Name    Mtu Network       Address              Ipkts Ierrs Idrop    Opkts Oerrs  Coll  Drop
vmx0e  1500 <Link#1>      00:0c:XXX         15559885     0     0  9710918     0     0     0 
lo0   16384 <Link#2>      lo0                  18074     0     0    18074     0     0     0 
lo1   16384 <Link#3>      lo1                   2194     0     0     2194     0     0     0 
lo1       - 10.0.0.3/32   mail                133370     -     -     1037     -     -     - 
pflog 33160 <Link#4>      pflog0                   0     0     0        0     0     0     0 
  1. Name: 이더넷 인터페이스, vmx0e, 루프백주소: lo0, lo1, pflog 방화벽 로그.
  2. Mtu: 이 인터페이스의 최대 전송 단위.
  3. Network: 이 인터페이스가 연결된 네트워크.
  4. Address: 이 인터페이스가 연결된 아이피주소.
  5. Ipkts: 시스템을 부팅한 이후에 이 인터페이스에서 수신한 인풋 패킷의 수.
  6. Ierrs: 시스템을 부팅한 이후에 이 인터페이스에서 발생한 인풋 오류의 수.(0 이면 좋은 거죠^^)
  7. [.....]
  8. Coll: 시스템을 부팅한 이후에 이 인터페이스에서 감지된 충돌 횟수.
  9. 에러없고, 충돌 없고, ... 상태 괜찬...
이 외에도 Disk status, 용량,... 기타 등등을 받게 된다.


설치 한 것 재시작

  • 포트가 확실하게 열려 있어야 잘 된다.
  • php 에서 ~ imap 서버가 설치되어 있어야 된다.
  • 잘 안되면 재부팅 해야 될 수도 있다.
  • saslauthd 재시작
# service saslauthd restart
# service postfix restart
# service dovecot restart


메일 보내기 테스트

  • 메일 보내기 smtp 테스트, 포탈에 가입된 메일 주소, ID@gmail.com, ID@yahoo.com, 기타로 메일 보내기, 스팸으로 분류하지 않는 한 정상 분류 됨.
# echo "메일 내용 입니다." | mail -s "메일 제목 입니다" ID@gmail.com


기타

  • 메일 로그 보기
# tail -f /var/log/maillog


현재의 열린 포트 확인

# sockstat -l | grep tcp4
  • Postfix, Dovecot 함께 설정한 프로토콜.
995번 포트: Post Office Protocol 3 over TLS / SSL (POP3S)
993번 포트: Internet Message Access Protocol over TLS / SSL (IMAPS)
25 번 포트: Simple Mail Transfer Protocol (SMTP)
587번 포트: e-mail message submission [23] (SMTP)
465번 포트: Simple Mail Transfer Protocol over TLS / SSL (SMTPS)
기본 SMTP는 25번 포트를 사용하여 메일을 주고 받는데 간혹 차단된 경우, 587번 포트를 사용, SSL은 465번 포트를 사용한다.


터미널에서 메일 테스트

# telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to mail.zbm.kr.
Escape character is '^]'.
220 mail.zbm.kr ESMTP Postfix
ehlo localhost  <---- type this command
250-mail.zbm.kr
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN <--- check!!
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
quit
221 2.0.0 Bye
Connection closed by foreign host.
  • 이 테스트가 성공되면 잘 구성된 것 임.
# openssl s_client -connect mail.zbm.kr:995

[.........]
read R BLOCK
+OK Dovecot ready.
user 사용자         <----- 사용자 입력
+OK
pass ******         <----- 사용자 암호 입력
+OK Logged in.
quit                <----- 입력
+OK Logging out.
closed


# openssl s_client -servername mail.zbm.kr -connect mail.zbm.kr:pop3s
 
[......]
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = zbm.kr
verify return:1
[........]
read R BLOCK
+OK Dovecot ready.


메일 클라이언트 설정

Mozilla Thunderbird 에서 설정
  • 송신 서버(pop3): exm.kr, 포트번호: 995, 인증 ssl: SSL/TLS, 평문 패스워드(암호화 통신)으로 설정 한다.
또는
  1. 송신 서버(imap4): exm.kr, 포트번호: 993, 인증 ssl: SSL/TLS, 평문 패스워드(암호화 통신)으로 설정 한다.
  2. 발신 서버(smtp): exm.kr, 포트번호: 465, 인증 ssl: SSL/TLS, 평문 패스워드(암호화 통신)으로 설정 한다.
  3. Mozilla Thunderbird 도구->설정->표시->서식탭->기본글꼴 고급설정->문자인코딩에서 UTF-8 설정 하면 보내기 받기가 설정된다.


윈도우10에서 동기화 설정 에서
  1. 송신 서버(pop3): exm.kr 설정 한다.
  2. 발신 서버(smtp): exm.kr 설정 한다.


사용자가 스팸으로 분류하지 않는 한 정상적으로 분류된다.
잘~ 된다.

Logo