그런데 정말 잘 모르겠는 옵션만 계속 만지고 답이 없더라
그리고 정말 필요한 지식들을 한곳에 모아둔곳이 전혀 없었다.
정말 뻘짓 다했는데 잘 안되고 그냥 첨부터 하나하나 공부해보자는 심정으로 시작했다.
완벽하진 않겠지만 그래도 점점 옵션 건드려가며 필요한것을 더해나가도록하자
이 글은 정말 초보자가 자기만의 메일서버를 구축하고 싶을때
시작할수 있는 지침서가 되길..
내 환경은
AWS에서 우분투 18.04LTS를 사용한다
환경마다 조금씩 다를수 있으니 필요한부분은 공부하길
----------------------------------------
방향성
postfix + mysql + dovecot + postfixadmin 방향으로 간다
여기서는 메일계정당 리눅스 계정을 부여하는 것이 아닌
virtual 계정을 부여한다. 리눅스 계정을 해킹당할 걱정을 조금 덜수 있다.
----------------------------------------
시작전에 필요한 포트번호는 알아두고 필요할때 열어주자 (AWS나 방화벽 사용시)
smtp (기본메일 주고받는 포트) - 25
smtps - 465 (이것은 SSL버전)
smtps - 587 (이것은 TLS 버전. 이것이 더 최신것이라 한다)
imap - 143
imaps - 993
pop3 = 110
pop3s = 995
----------------------------------------
여기서는 your-domain.com 을 메인 도메인으로 사용할것이니 자신에게 맞게 수정하길
----------------------------------------
1. DNS 레코드셋
우선 레코드셋부터
your-domain.com 이 사이트라면
your-domain.com 에 mx 레코드를 10 mail.your-domain.com 으로 지정
그다음
mail.your-domain.com 에 a레코드를 자신의 ip로 지정
2. 기본설정
호스트네임설정 명령어$sudo hostname your-domain.com
그다음
/etc/hostname 파일로가서 내용을 your-domain.com으로 수정한다.
3. MYSQL
설치$sudo apt install mysql-server
4. POSTFIXADMIN
설치$sudo apt install postfixadmin
설치하면 apache2가 자동으로 설치된다.
설치하면 mysql가 자동으로 삭제되는데 다시 mysql을 설치하도록 한다. 이렇게 하는이유는 mysql이 없는 상태에서 postfixadmin을 설치하면 mariaDB가 설치되는것 같았기 때문
그다음 mysql 부터 손본 후 postfixadmin을 손본다.
$sudo mysql
create database mail; (여기서 mail이라는 데이터베이스를 만들었는데 입맛대로하길)
GRANT ALL ON mail.* TO 'user'@'localhost' IDENTIFIED BY 'password'
(user와 password는 입맛대로)
다음 /etc/postfixadmin/dbconfig.inc.php 파일을 수정
$dbuser = 'user'
$dbpass = 'password'
$dbname = 'mail'
$dbtype = 'mysqli'
$dbserver = 'localhost'
브라우저에서 your-domain.com/postfixadmin 으로 접속하면된다.
templates_c 폴더 관련 권한 문제가 발생하면
$sudo chmod 777 /usr/share/postfixadmin/templates_c
your-domain.com/postfixadmin/setup.php 로 접속
setup password를 만들고 생성된 해쉬코드를
/etc/postfixadmin/config.inc.php 파일에 넣어줘야 한다.
$CONF['setup_password'] = '생성된 hash 코드'
your-domain.com/postfixadmin/login.php로 접속해서
도메인 생성하고 메일박스 생성하고 하면된다.
메일박스생성이 계정을 생성하는것이라고 생각하면 된다.
5. POSTFIX
설치
sudo apt install postfix
2가지 선택하는것 나오는데
첫번째에는 internet site
두번째는 your-domain.com
/etc/postfix/master.cf 파일을 수정한다 (주석해제 및 옵션추가 - 옵션은 추후 별도로 공부해야함)
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_reject_unlisted_recipient=no
/etc/postfix/main.cf 파일을 수정한다.
아래 항목을 수정하고
myhostname = your-domain.com (앞에 mail.을 쓰면 메일을 보낼때 @mail.your-domain.com으로 날라가게 된다.)
#mydestination = (주석처리. virtual user를 사용할 것이기 때문에.)
아래항목을 추가한다
smtpd_tls_cert_file=/etc/letsencrypt/live/your-domain.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your-domain.com/privkey.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_type = dovecot
queue_directory = /var/spool/postfix/
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtpd_sasl_authenticated_header = yes
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_mailbox_base = /home/vmail
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
home_mailbox = Maildir/
/etc/postfix/mysql 경로상에 파일 3개를 생성한다. 그전에 폴더부터 생성해두자
$sudo mkdir /etc/postfix/mysql
1. virtual_domains_maps.cf
user = user
password = password
hosts = 127.0.0.1
dbname = mail
table = domain
select_field = domain
where_field = domain
#additional_conditions = and backupmx = '0' and active = '1'
2. virtual_mailbox_maps.cf
user = user
password = password
hosts = 127.0.0.1
dbname = mail
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'
3. virtual_alias_maps.cf
user = user
password = password
hosts = 127.0.0.1
dbname = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
주의할점 . 127.0.0.1 을 localhost로 바꾸는 실수를 하지말자. 설명링크
같다고 알고있지만 동작방식에 미세한 차이가 있다. localhost는 내부 파일 소켓을 이용한 통신이고 127.0.0.1은 tcp 포트를 이용한 통신인데, 파일소켓 통신방식은 잘 안되는것 같다.
user와 password는 자기 mysql 계정에 맞게 수정한다.
vmail 사용자를 생성해주자
$ sudo groupadd -g 5000 vmail $ sudo useradd -m -g vmail -u 5000 -d /home/vmail -s /bin/bash vmail
postfix 재시작
$sudo service postfix restart
이젠 메일을 받으면
/home/vmail/your-domain.com/아이디/
폴더안에 메일이 쌓이게 된다.
**주의 아래 let's encrypt 까지 해야 에러가 안난다.**
6. LET'S ENCRYPT
무료로 SSL 인증을 받을수 있는 단체가 있다. 보통 SSL인증서는 돈이드는데
Let's encrypt 이 단체는 무료로 제공한다. 공식홈페이지에서 설명을 보든, 다른사이트 검색을해서 배우든해서 설치하자.
postfixadmin을 설치하면 자동으로 apache2도 설치가 되기 때문에 apache 설치방식을 따라야 한다.
/etc/postfix/main.cf 파일 수정
smtpd_tls_cert_file=/etc/letsencrypt/live/your-domain.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your-domain.com/privkey.pem
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
postfix 재시작
$sudo service postfix restart
**주의사항**
인증서를 your-domain.com으로 받을 경우 imap이나 pop 연결시 mail.your-domain.com 이 아니라 your-domain.com으로 해야할 수도 있다. (특히 Gmail에서 계정을 import할때 그렇다)
**
crontab을 이용하여 인증서 재발급까지 미리 해두자 까먹으면 나중에 에러났을때 귀찮다.
**인증서 발급이나 재발급시 80번, 443번 포트가 이용된다. 그러니 열어두자
7. DOVECOT
메일 받은것을 다른 웹어플리케이션이나 아웃룩 익스프레스로 받기 위해서는이것이 필요하다
pop방식 - 서버에 있는 메일을 클라이언트로 받으면서 서버에 있는 메일을 지운다
imap방식 - 서버에 있는 메일을 받으면서 지우지 않는다.
요즘같은 용량걱정이 없는 시대에는 imap을 쓴다더라.
설치
$sudo apt install dovecot-mysql
우리는 virtual 이메일 계정을 쓰기때문에 mysql과 연동이 되어야 한다.
/etc/dovecot/dovecot-sql.conf.ext 파일 수정
driver = mysql
connect = host=localhost dbname=mail user=user password=password
default_pass_scheme = MD5-CRYPT
password_query = SELECT username, domain, password, 5000 as uid, 5000 as gid \
FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT CONCAT('/home/vmail/', maildir) AS home, 5000 AS uid,\
5000 AS gid FROM mailbox WHERE username='%u' AND active = '1'
/etc/dovecot/conf.d/10-auth.conf 파일 수정
disable_plaintext_auth = yes (주석해제)
auth_mechanisms = plain login (수정)
#!include auth-system.conf.ext (주석처리)
!include auth-sql.conf.ext (주석해제)
/etc/dovecot/conf.d/10-mail.conf 파일 수정
mail_location = maildir:/home/vmail/%d/%n
/etc/dovecot/conf.d/10-ssl.conf 파일 수정
ssl_cert = </etc/letsencrypt/live/your-domain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/your-domain.com/privkey.pem
ssl_dh_parameters_length = 2048
ssl_protocols=!SSLv3
ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHAssl_prefer_server_ciphers = yes
/etc/dovecot/conf.d/10-master.conf 파일수정
사용하고자 하는 pop3s 나 imaps 주석처리된것을 해제한다. 그리고 아래부분도 수정한다
unix_listener auth-userdb {
mode = 0666
user = vmail
group = mail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0666
# Assuming the default Postfix user and group
user = postfix
group = postfix
}
프로토콜도 따로 설치해줘야 한다.
$sudo apt install dovecot-imapd dovecot-pop3d
$sudo service dovecot restart
여기까지하면 메일클라이언트 (예를들어 outlook express, roundcube, 핸드폰 mail 어플)에서 pop방식이나 imap방식으로 연결가능하다.
연결잘되는지 테스트 (imaps)
$openssl s_client -connect mail.your-domain.com:993 (pop3s 방식일경우 995)
받는포트 993(imaps) 995(pop3s) 중에서 선택
보내는포트 465(stmps)
Gmail에서 이 계정을 import 해서 사용하고싶으면 SSL을 발급받을때 도메인을 좀 신경써야한다.
RoundCube도 결국 클라이언트 프로그램을 깔아서 웹으로 제공하는것이다. 설치 및 등록은 구글링으로 각자해보자
****Gmail 특이사항 ***
Gmail에서 계정을 등록할때 메일을 수신하는부분(smtps-587)과 메일을 발신하는 부분(pop, imap)을 따로 설정한다. 따라서 메일서버에서 gmail로 포워딩만 걸어놓고 발신하는 부분만 설정해두면 더 좋은듯 하다. pop이나 imap을 사용하지 않고 포워딩만 걸어놓으면 forwarding 특성상 메일을 바로바로 수신할수 있다. pop이나 imap방식은 메일을 받을 때 바로바로 뜨지않고 주기적인 fetch를 하기때문에 몇분의 간격이 발생할 수 있다.
포워딩 거는 방법은 postfixadmin에서 alias를 추가하면된다.
추가사항
단계단계마다 잘 되고있는지 테스트하길 바란다.$telnet localhost 25
같은 명령어로 잘 작동하는지 알수 있다.
하다가 잘 안되거나 막히는 부분은 로그파일을 확인해서 구글링하면 된다.
/var/log/mail.log
대형 메일서버업체 (google, daum, naver, ...) 에서 스팸처리 안당할려면
reverse DNS, white domain 등록, spf레코드 설정, ptr레코드, DKIM 설정등이 필요하다. 자세한건 검색해보자.
*** 주의사항. spf, dmarc, dkim 등의 설정은 필수이다. 메일서버는 mail.your-domain.com 이라 할지라도 이런 레코드들은 your-domain.com을 가리켜야 한다. 그래야 된다.....
스팸이나 바이러스 필터를 적용하는것도 따로 있는데...... 언젠가는 업데이트 하겠다.
No comments:
Post a Comment