[linux] 초간단 Postfix, Covecot, SSL/TLS (SMTP)
첨부 '1' |
|
---|
CentOS 7 버전에 SMTP 서버 설치하기
Postfix, Dovecot, SSL/TLS 설치 및 설정
[Postfix]
리눅스 계열이나 버전에 따라 기본으로 사용하는 MTA(Mail Transfer Agent)가 다를 수 있다.
CentOS(레드햇 계열)에서는 Sendmail이 기본 MTA로 설정되어 있고 우분투에서는 Postfix를 기본 MTA로 설정되어 있다. 개인적으로 Sendmail 보다는 Postfix는 빠르고 관리와 보안이 수월하다. 그리고 Sendmail과 호환이 된다.
설치에 앞서 메일서버에서 사용하는 기본적인 포트 번호를 알아두고 설치 후 방화벽에 적용하자.
smtp(25), smtps(465), pop3(110), pop3s(995), submission(587, pop3 대체 포트)
1. yum 을 이용해 postfix 설치
[root@hooni ~] yum -y update
[root@hooni ~] yum -y install postfix
2. hosts 파일 설정
[root@hooni ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
121.78.119.99 mail.hooni.net
3. SSL 인증서 생성
일반적으로 SSL 인증서는 공인된 인증기관(CA)에서 유료로 발급하지만 Let’s Encrypt라는 비영리 무료 개방형 이증 기관(CA)에서 무료로 발급 받을 수 있다.
Let's Encrypt 인증서 발급하는 방법은 이번 주제와 무관하므로 관련 링크를 첨부함
[참고] 무료로 HTTPS 적용하기 (Let's Encrypt)
여기서는 openssl 명령어를 이용해 로컬에서 직접 생성해서 이용하는 방법으로 설명하겠다.
SSL 관련 파일을 저장할 디렉토리 생성
[root@hooni ~]# mkdir /etc/postfix/ssl
[root@hooni ~]# cd /etc/postfix/ssl
openssl 이 설치되어 있지 않는 경우 yum을 이용해 설치
[root@hooni ssl]# yum -y install openssl
openssl 명령을 통해 개인키와 인증서 생성
[root@hooni ssl]# openssl req -x509 -nodes -newkey rsa:2048 -keyout server.key -out server.crt -nodes -days 365
다음 예와 같이 개인키에 대한 정보를 입력하고 생성
Generating a 2048 bit RSA private key
..........................+++
...........................+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:CA
Locality Name (eg, city) [Default City]:Irvine
Organization Name (eg, company) [Default Company Ltd]:Hooni.net
Organizational Unit Name (eg, section) []:S/W Develop
Common Name (eg, your name or your server's hostname) []:mail.hooni.net
Email Address []:me@hooni
4. Postfix 설정파일 수정 (/etc/postfix/main.cf)
[root@hooni ~]# vi /etc/postfix/main.cf
myhostname = mail.hooni.net
mydomain = hooni.net
myorigin = $mydomain
home_mailbox = mail/
mynetworks = 127.0.0.0/8
inet_interfaces = all
inet_protocols = all
inet_interfaces = localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_key_file = /etc/postfix/ssl/server.key
smtpd_tls_cert_file = /etc/postfix/ssl/server.crt
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
5. Postfix 설정파일 수정 (/etc/postfix/master.cf)
[root@hooni ~]# nano /etc/postfix/master.cf
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
다음과 같이 해당 영역의 주석을 제거한다.
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
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
6. Dovecot 설치
[root@hooni ~]# yum -y install dovecot
7. Dovecot 설정파일 수정 (/etc/dovecot/conf.d/10-master.cf)
[root@hooni ~]# vi /etc/dovecot/conf.d/10-master.conf
다음과 같이 해당 영역의 주석을 제거한다.
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
8. Dovecot 설정파일 수정 (/etc/dovecot/conf.d/10-auth.cf)
nano /etc/dovecot/conf.d/10-auth.conf
다음과 같이 'login' 키워드를 추가한다.
# Space separated list of wanted authentication mechanisms:
# plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey
# gss-spnego
# NOTE: See also disable_plaintext_auth setting.
auth_mechanisms = plain
9. Dovecot 설정파일 수정 (/etc/dovecot/conf.d/10-mail.cf)
다음과 같이 해당 영역의 주석을 제거하고 maildir을 설정.
mail_location = maildir:~/mail
10. Dovecot 설정파일 수정 (/etc/dovecot/conf.d/20-pop3.cf)
[root@hooni ~]# vi /etc/dovecot/conf.d/20-pop3.conf
다음과 같이 해당 내용의 주석을 제거한다.
# Note that Outlook 2003 seems to have problems with %v.%u format which was
# Dovecot's default, so if you're building a new server it would be a good
# idea to change this. %08Xu%08Xv should be pretty fail-safe.
#
pop3_uidl_format = %08Xu%08Xv
11. Postfix와 Devecot 실행 및 서비스 등록
설정파일이 반영되도록 Postfix와 Devecot를 재시작 하고 시스템이 재부팅되면 자동으로 실행되도록 서비스에 등록한다.
[root@hooni ~]# systemctl restart postfix
[root@hooni ~]# systemctl enable postfix
[root@hooni ~]# systemctl restart dovecot
[root@hooni ~]# systemctl enable dovecot
12. 방화벽에 서비스 관련 포트를 적용
[root@hooni ~]# firewall-cmd --permanent --add-service=smtp
[root@hooni ~]# firewall-cmd --permanent --add-port=587/tcp
[root@hooni ~]# firewall-cmd --permanent --add-port=465/tcp
[root@hooni ~]# firewall-cmd --permanent --add-port=110/tcp
[root@hooni ~]# firewall-cmd --permanent --add-service=pop3s
[root@hooni ~]# firewall-cmd --permanent --add-port=143/tcp
[root@hooni ~]# firewall-cmd --permanent --add-service=imaps
[root@hooni ~]# firewall-cmd --permanent --add-service=http
[root@hooni ~]# firewall-cmd --reload
13. 서비스 확인하기
텔넷 명령어(telnet)를 통해 각 서비스의 해당 포트로 접속해서 잘 작하는지 확인할 수 있다.
telnet 클라이언트가 없다면 설치한다.
[root@hooni ~]# yum -y install telnet
telnet 명령으로 smtp 서비스에 접속한다.
[root@hooni ~]# telnet mail.hooni.net smtp
접속 후 ehlo mail.hooni.net 명령 실행 후 다음과 같이 출력되면 잘 동작하는 것이다.
Trying 121.78.119.99...
Connected to localhost.
Escape character is '^]'.
220 mail.hooni.net ESMTP Postfix
ehlo
mail.hooni.net
250-mail.hooni.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
다음과 같은 명령을 사용하여 콘솔에서 메일을 발송할 수 있다.
mail from:hooni@test.com
mail from:hooni@test.com
250 2.1.0 Ok
rcpt to:picomax@test.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
This is a kind of test email.
It would be finished when you put a period at the end of the document.
.
250 2.0.0 Ok: queued as 655A4C1C08
telnet 명령으로 pop3 서비스에 접속한다.
[root@hooni ~]# telnet mail.hooni.net pop3
다음과 같은 내용이 출력되면 정상적으로 동작하는 것이다.
Trying 121.78.119.99...
Connected to mail.hooni.net.
Escape character is '^]'.
+OK Dovecot ready.
등록된 사용자 계정으로 로그인을 시도해보자.
user picomax
+OK
pass Password
+OK Logged in.
retr
-ERR There's no message 1.
quit
+OK Logging out.
Connection closed by foreign host.
웹서버가 설치되어 있다면 다음 링크를 통해 Squirrelmail을 설치해서 이용할 수 있다.
다람쥐메일 설치 방법 https://hooni.net/87319
-
[php][laravel] 초간단 MacOS에서 Laravel 개발 환경 구축
-
[mysql] MacOS에 MySQL 설치, 설정, 암호 재설정
-
[mysql] ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
-
[js] 문자열에서 숫자만 걸러내기 (jQuery 안쓰고 정규표현식)
-
[js] URL 파싱하기 (jQuery 안쓰고)
-
[linux] 초간단 SquirrelMail 설치/설정 (다람쥐 메일)
-
[linux] 초간단 Postfix, Covecot, SSL/TLS (SMTP)
-
[php] Laravel 5.4: Specified key was too long error
-
[php] mysql_ 과 mysqli_ 의 차이
-
[mysql] MySQL 한글 깨짐 현상 해결하기(UTF8)
-
RSVP 란?
-
[mysql] 중복데이터 삭제하는 초간단 쿼리