CentOS 8
MailServer With Postfix, Dovecot, MariaDB And Roundcube Install
[2022-05-30]
Rocky 리눅스에서 새로 구축한 메일서버[리뉴얼]
https://foxydog.tistory.com/104
단순히 [Postfix/Sendmail]를 이용하여 메일을 전달만 하는 게 아닌 상용 메일 솔루션처럼 웹 인터페이스를 통해 메일을 주고받고 할 수 있는 메일서버를 만들어보도록 하겠습니다. 모든 오픈 소스를 동원해 하나의 메일서버처럼 작동을 해야 하므로 매우 복잡한 세팅 과정을 거쳐야 합니다. 최대한 순차적으로 풀어서 이해할 수 있도록 진행하도록 하겠습니다.
□ 오픈소스 솔루션 소개
Postfix [공식 홈페이지] | IBM 보안 전문가가 만든 무료 오픈 소스 MTA(메일 전송 에이전트)로 인터넷을 통해 다른 서버로 전자 메일을 라우팅하고 SMTP 프로토콜을 이용해 전달하는 역활을 합니다. |
Dovecot [공식 홈페이지] | 보안 위주로 제공하고 있는 Linux/Unix계열 시스템 용 오픈 소스 IMAP/POP3 서비스입니다. |
MariaDB [공식 홈페이지] | 이제는 누구나 알고 있는 관계형 데이터베이스(DB) 관리 시스템 오픈 소스 입니다. 여기서는 RoundCube(웹메일) 및 사용자(로그인 정보)계정을 보관하기 위해 사용됩니다. |
RoundCube [공식 홈페이지] | 메일을 읽고 쓰고 발송할 수 있는 인터페이스를 제공하는 오픈 소스용 웹메일 입니다. 상용 메일 솔루션만큼은 아니지만 기본적인 MIME지원, 주소록, 폴더 조작, 메시지 검색 및 맞춤법 검사를 포함한 이메일 클라이언트와 비슷하게 기능을 제공 하고 있습니다. |
만약 실제 메일서버를 운영하기 위해서는 다음과 같은 전제조건이 필요
※ 도메인 구입 필요 [예로 제가 사용하는 foxydog.co.kr 도메인 주소를 말합니다]
※ 수발신을 위한 A/MX 레코드 등록 필요 [서버를 찾아갈 수 있게 mail.foxydog.co.kr DNS에 호스트를 등록]
■ [설치환경 및 준비물]
릴리즈 설치 테스트 : 2020-08-24
※ YUM/DNF 명령어를 통해 설치 진행
※ 저의 경우는 Firewall 방화벽이 아닌 IPtables 방화벽 이용
서버준비 | CentOS 8 리눅스 설치 서버 [포스팅 참고] |
OS Version | CentOS Linux release 8.2.2004 (Core) |
커널(Kernel) | 4.18.0-193.14.2.el8_2.x86_64 |
postfix | 3.3.1 |
dovecot | 2.3.8 |
DB | MariaDB 10.5 |
Web | Apache 2.4.X / PHP 7.4.X |
Webmail | RoundCube 1.4.8 |
■진행 순서
STEP01 → CentOS 8 설치 후 준비 과정
1-1 전체 패키지 업데이트 하기
오픈 소스의 경우는 한번 적용하기 시작하면 추후 보안 패치나 수정에 어려움이 많이 발생합니다. 특히나 메일서버의 경우는 스패머들에 의해 타켓 노출이 많이 되므로 보안을 위해 설치 전 모든 이전 패치가 최신 패키지로 시작하는 게 좋습니다.
[root@localhost ]# dnf update
1-2 iptables 방화벽 사용
편한 방화벽을 이용하시면 됩니다.
CentOS 7 이상 부터는 기본이 firewall 방화벽을 이용하므로 iptables 이용 시는 아래와 같은 순서로 명령어 진행
[root@localhost ~]# systemctl stop firewalld (firewalld 중지)
[root@localhost ~]# systemctl mask firewalld (firewalld 자동시작 중지)
[root@localhost ~]# dnf install -y iptables-services (iptables 서비스 관련 패키지 설치)
[root@localhost ~]# systemctl enable iptables (iptables 자동 시작)
[root@localhost ~]# systemctl start iptables (iptables 시작)
[root@localhost ~]# iptables -nL (적용 확인)
[root@localhost ~]# /etc/sysconfig/iptables (설정 기본경로)
1-3 SELinux 비활성화
[root@localhost ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
[root@localhost ~]# cat /etc/selinux/config | grep disabled (변경 확인)
# disabled - No SELinux policy is loaded.
SELINUX=disabled
1-4 호스트 등록
아래와 같이 eztest.com이라는 가상의 도메인이 있다고 가정하에 등록합니다. 한번 정하면 이후 세팅 시에 전부 동일한 도메인 이름으로 해주시기 바랍니다. 현재는 가상 서버 테스트이므로 임의로 아무거나 해도 상관없습니다.
[root@localhost ~]# hostnamectl set-hostname mail.eztest.com
[root@localhost ~]# hostname
mail.eztest.com (적용 확인)
1-5 패키지 업데이트 및 SELinux 적용을 위해 서버 재시작
[root@localhost ~]# reboot
STEP02 → Postfix, Apache 및 PHP 설치하기
2-1 Postfix, Apache 설치하기
[root@localhost ]# dnf install httpd postfix postfix-mysql policycoreutils-python-utils epel-release
2-2 PHP는 7.4.X 버전 설치를 위해 Remi 저장소 이용
[root@localhost ]# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm (Remi 저장소)
[root@localhost ]# dnf module list php (PHP 설치 버전 확인)
[root@localhost ]# dnf module enable php:remi-7.4 (7.4 버전 기본 설정)
[root@localhost ]# dnf install php (설치)
[root@localhost ]# dnf install php-common php-json php-xml php-mbstring php-mysqlnd (추가 php모듈 설치)
STEP03 → MariaDB 설치 및 구성하기
3-1 MariaDB 10.5 버전 설치
[root@localhost ~]# vi /etc/yum.repos.d/MariaDB.repo (아래의 값을 복사 후 저장)
# MariaDB 10.5 CentOS repository list - created 2020-08-26 07:08 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos8-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
[root@localhost ~]# dnf install MariaDB-server MariaDB-client (설치)
[root@localhost ~]# systemctl start mariadb (DB 구동)
[root@localhost ~]# systemctl enable mariadb (부팅 자동 실행)
[root@localhost ~]# ps -ef | grep mariadbd (구동 확인)
mysql 10718 1 0 03:14 ? 00:00:00 /usr/sbin/mariadbd
[root@localhost ~]# mysql_secure_installation (초기 세팅)
Enter current password for root (enter for none): Enter
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] Y
New password: 패스워드 입력
Re-enter new password: 패스워드 재입력
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
Thanks for using MariaDB!
3-2 로그인 계정 및 RoundCube를 사용하기 위한 구성
※ Postfix가 IMAP을 이용하여 계정을 인증할 때 크게 3가지 방법이 있습니다.
1. /etc/passwd 리눅스 계정 리스트의 PAM을 이용한 인증
2. 직접 사용자 계정 login.list (임의) 파일을 만들어 관리 및 인증
3. MariaDB 같은 데이터베이스에 저장하여 인증 (해당 방법을 이용)
[root@localhost ~]# mysql -u root -p (DB 접속, 순서대로 진행)
□Postfix 계정을 저장할 데이터베이스 생성
MariaDB [(none)]> create database postfix_accounts;
□방금 생성한 데이터베이스에 접근할 전체 권한 계정을 생성
예시) grant all on 데이터베이스 이름.* to '유저 ID'@'localhost' identified by '패스워드';
MariaDB [(none)]> grant all on postfix_accounts.* to eztest_admin@localhost identified by 'test123';
MariaDB [(none)]> flush privileges; (바로 적용)
□서버에 도메인을 저장할 테이블 만들기(전체 한 줄)
MariaDB [(none)]> CREATE TABLE `postfix_accounts`.`domains_table` ( `DomainId` INT NOT NULL AUTO_INCREMENT , `DomainName` VARCHAR(50) NOT NULL , PRIMARY KEY (`DomainId`)) ENGINE = InnoDB;
□사용자 계정을 보관할 테이블 만들기(전체 한 줄)
MariaDB [(none)]> CREATE TABLE `postfix_accounts`.`accounts_table` (
`AccountId` INT NOT NULL AUTO_INCREMENT,
`DomainId` INT NOT NULL,
`password` VARCHAR(300) NOT NULL,
`Email` VARCHAR(100) NOT NULL,
PRIMARY KEY (`AccountId`),
UNIQUE KEY `Email` (`Email`),
FOREIGN KEY (DomainId) REFERENCES domains_table(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;
□별칭 사용자 계정을 보관할 테이블 만들기(전체 한 줄)
별칭은 일종의 리다이렉션처럼 A계정이 수신을 받으면 B계정으로 받는 기능
MariaDB [(none)]> CREATE TABLE `postfix_accounts`.`alias_table` (
`AliasId` INT NOT NULL AUTO_INCREMENT,
`DomainId` INT NOT NULL,
`Source` varchar(100) NOT NULL,
`Destination` varchar(100) NOT NULL,
PRIMARY KEY (`AliasId`),
FOREIGN KEY (DomainId) REFERENCES domains_table(DomainId) ON DELETE CASCADE
) ENGINE = InnoDB;
이제 만든 테이블에 사용할 도메인 및 계정 정보 레코드 입력(각 한 줄씩 명령어)
□eztest.com 도메인 등록
MariaDB [(none)]> INSERT INTO `postfix_accounts`.`domains_table` (DomainName) VALUES ('eztest.com');
□test1@eztest.com 계정 생성
MariaDB [(none)]> INSERT INTO `postfix_accounts`.`accounts_table` (DomainId, password, Email) VALUES (1, ENCRYPT('test123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'test1@eztest.com');
□test2@eztest.com 계정 생성
MariaDB [(none)]> INSERT INTO `postfix_accounts`.`accounts_table` (DomainId, password, Email) VALUES (1, ENCRYPT('test123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'test2@eztest.com');
□testfc@eztest.com ▷ testsc@eztest.com 별칭 계정 생성
MariaDB [(none)]> INSERT INTO `postfix_accounts`.`alias_table` (DomainId, Source, Destination) VALUES (1, 'testfc@eztest.com', 'testsc@eztest.com');
또한 정상적으로 등록되었는지도 확인(스크린샷 대처)
□나중에 설치할 RoundCube 데이터베이스 미리 생성하기
MariaDB [none]> create database roundcube;
□동일하게 데이터베이스에 접근할 전체 권한 계정을 생성
MariaDB [none]> grant all on roundcube.* to roundcube_admin@localhost identified by 'test123';
MariaDB [none]> flush privileges; (바로 적용)
MariaDB [none]> quit (끝)
STEP04 → Postfix 구성 세팅 하기
※ 구성파일 위치 /etc/postfix/
4-1 master.cf 파일 설정(수정 또는 추가 후 저장)
[root@localhost ]# vim /etc/postfix/master.cf
□다음과 같이 아래 주석(#) 제거하거나 추가(스크린샷 참고)
17 submission inet n - n - - smtpd
18 -o syslog_name=postfix/submission
20 -o smtpd_sasl_auth_enable=yes
22 -o smtpd_reject_unlisted_recipient=no
27 -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
28 -o milter_macro_daemon_name=ORIGINATING
41 pickup unix n - n 60 1 pickup
42 cleanup unix n - n - 0 cleanup
43 qmgr unix n - n 300 1 qmgr
45 tlsmgr unix - - n 1000? 1 tlsmgr
46 rewrite unix - - n - - trivial-rewrite
47 bounce unix - - n - 0 bounce
48 defer unix - - n - 0 bounce
49 trace unix - - n - 0 bounce
50 verify unix - - n - 1 verify
51 flush unix n - n 1000? 0 flush
52 proxymap unix - - n - - proxymap
53 proxywrite unix - - n - 1 proxymap
54 smtp unix - - n - - smtp
55 relay unix - - n - - smtp
58 showq unix n - n - - showq
59 error unix - - n - - error
60 retry unix - - n - - error
61 discard unix - - n - - discard
62 local unix - n n - - local
63 virtual unix - n n - - virtual
64 lmtp unix - - n - - lmtp
65 anvil unix - - n - 1 anvil
66 scache unix - - n - 1 scache
□맨 하단에 Dovecot 관련 값 미리 추가하기
134 dovecot unix - n n - - pipe
135 flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
4-2 main.cf 파일 설정(수정 또는 추가후 저장)
[root@localhost ]# vim /etc/postfix/main.cf
□다음과 같이 아래 주석(#) 제거하거나 추가(스크린샷 참고)
96 myhostname = mail.eztest.com
104 mydomain = eztest.com
120 myorigin = $mydomain
137 inet_interfaces = all
140 inet_protocols = all
185 mydestination = $myhostname, localhost.$mydomain, localhost
273 smtpd_recipient_restrictions = permit_mynetworks
440 home_mailbox = Maildir/
712 #smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem (SSL인증서 Cert 파일, 지금은 사용안함으로 주석처리)
718 #smtpd_tls_key_file = /etc/pki/tls/private/postfix.key (SSL인증서 Key 파일, 지금은 사용안함으로 주석처리)
723 smtpd_tls_security_level = may
739 smtp_tls_security_level = may
□맨 하단에는 SSL 보안 관련 옵션으로 당장 사용하지는 않지만 미리 등록
743 append_dot_mydomain = no
744 biff = no
745 config_directory = /etc/postfix
746 dovecot_destination_recipient_limit = 1
747 message_size_limit = 4194304
748 smtpd_use_tls = yes
749 smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
750 smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
751 virtual_transport = dovecot
752 smtpd_sasl_type = dovecot
753 smtpd_sasl_path = private/auth
□마지막으로 STEP03에서 데이터베이스에 저장 한 계정 대한 Postfix 액세스 권한 부여하는 구성 추가
755 virtual_mailbox_domains = mysql:/etc/postfix/database-domains.cf
756 virtual_mailbox_maps = mysql:/etc/postfix/database-users.cf
757 virtual_alias_maps = mysql:/etc/postfix/database-alias.cf
4-3 Postfix가 데이터베이스에 각 정보를 엑세스 할 수 있도록 파일 생성(추가 후 저장)
□도메인 엑세스
[root@localhost ]# vim /etc/postfix/database-domains.cf
user = eztest_admin
password = test123
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT 1 FROM domains_table WHERE DomainName='%s'
□사용자 계정 엑세스
[root@localhost ]# vim /etc/postfix/database-users.cf
user = eztest_admin
password = test123
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT 1 FROM accounts_table WHERE Email='%s'
□별칭 계정 엑세스
[root@localhost ]# vim /etc/postfix/database-alias.cf
user = eztest_admin
password = test123
hosts = 127.0.0.1
dbname = postfix_accounts
query = SELECT Destination FROM alias_table WHERE Source='%s'
4-4 생성한 파일 권한 설정
[root@localhost ]# chmod 640 /etc/postfix/database-domains.cf
[root@localhost ]# chmod 640 /etc/postfix/database-users.cf
[root@localhost ]# chmod 640 /etc/postfix/database-alias.cf
[root@localhost ]# chown root:postfix /etc/postfix/database-domains.cf
[root@localhost ]# chown root:postfix /etc/postfix/database-users.cf
[root@localhost ]# chown root:postfix /etc/postfix/database-alias.cf
[root@localhost postfix]# ls -al /etc/postfix/ | grep database (적용 확인)
-rw-r----- 1 root postfix 145 8월 27 02:57 database-alias.cf
-rw-r----- 1 root postfix 145 8월 27 02:55 database-domains.cf
-rw-r----- 1 root postfix 137 8월 27 02:56 database-users.cf
[root@localhost ]# systemctl restart postfix (서비스 재시작)
[root@localhost postfix]# systemctl status postfix | grep active (Active 되어 있어야 정상 구동)
Active: active (running) since Thu 2020-08-27 03:00:05 EDT; 42s ago
4-5 설정 테스트(Postfix가 데이터베이스에 정상 접근하는지)
※ 응답 값이 숫자 1이 나오거나 끝에는 별칭(리다이렉트) 계정이 표시되면 정상
[root@localhost postfix]# postmap -q eztest.com mysql:/etc/postfix/database-domains.cf
1
[root@localhost postfix]# postmap -q test1@eztest.com mysql:/etc/postfix/database-users.cf
1
[root@localhost postfix]# postmap -q test2@eztest.com mysql:/etc/postfix/database-users.cf
1
[root@localhost postfix]# postmap -q testfc@eztest.com mysql:/etc/postfix/database-alias.cf
testsc@eztest.com
STEP05 → Dovecot 설치 및 구성
5-1 Dovecot 설치하기
[root@localhost ~]# dnf install dovecot dovecot-mysql
5-2 설치 후 시스템에서 메일을 처리할 사용자 및 그룹을 추가
[root@localhost ~]# groupadd -g 6000 vmail
[root@localhost ~]# useradd -g vmail -u 6000 vmail -d /home/vmail -m
5-3 dovecot.conf 설정(수정 후 저장)
[root@localhost ]# vim /etc/dovecot/dovecot.conf
24 protocols = imap pop3 lmtp
30 listen = *, ::
98 !include conf.d/*.conf
102 !include_try local.conf
104 log_path = /var/log/dovecot.log
5-4 10-auth.conf 설정(수정 후 저장)
[root@localhost ]# vim /etc/dovecot/conf.d/10-auth.conf
10 disable_plaintext_auth = yes
100 auth_mechanisms = plain login
123 !include auth-sql.conf.ext
5-5 활성화한 auth-sql.conf.ext 파일 구성 (수정 후 저장)
[root@localhost ~]# vim /etc/dovecot/conf.d/auth-sql.conf.ext
5 passdb {
6 driver = sql
9 args = /etc/dovecot/dovecot-sql.conf.ext
10 }
27 userdb {
28 driver = static
29 args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
30 }
별도로 /home/vmail 경로에 이메일을 저장하기 위해 다음과 같은 변수를 이용
%u – 사용자 이름
%n – user@domain의 사용자 부분 , 도메인이 없는 경우 % u와 동일
%d – user@domain의 도메인 부분 , 도메인이 없으면 비어 있음
%h – 홈 디렉토리
5-6 변수에 맞게 해당 경로 도메인 등록
※ /home/vmail/domain 디렉터리 (/home/vmail/%d/ )를 생성
[root@localhost ~]# mkdir /home/vmail/eztest.com
5-7 위 설정에서 "args"에 포함된 파일에 postfix에 대해 구성한 데이터베이스 세부 정보를 추가
[root@localhost ~]# vim /etc/dovecot/dovecot-sql.conf.ext (추가 후 저장)
driver = mysql
connect = "host=127.0.0.1 dbname=postfix_accounts user=eztest_admin password=test123"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM accounts_table WHERE Email='%u';
5-8 10-mail.conf 파일 구성
※ 메일 사서함(저장 위치) 및 네임스페이스(Namespace) inbox 사용 설정
[root@localhost ~]# vim /etc/dovecot/conf.d/10-mail.conf (수정 후 저장)
30 mail_location = maildir:/home/vmail/%d/%n/Maildir
42 namespace inbox {
61 inbox = yes
80 }
114 mail_privileged_group = mail
325 mbox_write_locks = fcntl
5-9 10-master.conf 파일 구성
※ 각 서비스에 대한 포트 지정 생각하면 됩니다.
[root@localhost ~]# vim /etc/dovecot/conf.d/10-master.conf
17 service imap-login {
18 inet_listener imap {
19 port = 143
20 }
21 inet_listener imaps {
24 }
36 }
38 service pop3-login {
39 inet_listener pop3 {
40 port = 110
41 }
42 inet_listener pop3s {
45 }
54 service lmtp {
55 unix_listener /var/spool/postfix/private/dovecot-lmtp {
56 mode = 0666
57 user = postfix
58 group = postfix
59 }
67 }
88 service auth {
102 unix_listener /var/spool/postfix/private/auth {
103 mode = 0666
104 user = postfix
105 group = postfix
106 }
107 unix_listener auth-userdb {
108 mode = 0600
109 user = vmail
110 }
111 user = dovecot
120 }
122 service auth-worker {
126 user = vmail
127 }
129 service dict {
132 unix_listener dict {
136 }
137 }
5-10 10-ssl.conf 파일 구성
※ SSL을 선택하여 사용할 수 있으나 현재는 인증서가 없기 때문에 제외(사용 안 함 처리)
[root@localhost ~]# vim /etc/dovecot/conf.d/10-ssl.conf
□[사용 안 함]
8 ssl = no
14 #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem (주석 처리)
15 #ssl_key = </etc/pki/dovecot/private/dovecot.pem (주석 처리)
□[사용할 경우]
8 ssl = required
14 ssl_cert = </etc/pki/dovecot/certs/dovecot.pem (인증서 CRT 경로)
15 ssl_key = </etc/pki/dovecot/private/dovecot.pem (인증서 KEY 경로)
5-10 vmail 권한 설정
※ 메일을 처리할 vmail 계정은 사용자 메일 위치에 액세스를 해야 하므로 아래와 같이 필요한 권한을 부여
[root@localhost ~]# chown -R vmail:vmail /home/vmail
[root@localhost ~]# ls -al /home/vmail | grep eztest
[root@localhost ~]# chown -R vmail:dovecot /etc/dovecot
[root@localhost ~]# chmod -R o-rwx /etc/dovecot
[root@localhost ~]# ls -al /etc | grep dovecot
drwxr-x--- 3 vmail dovecot 4096 8월 27 21:17 dovecot
5-11 Dovecot 서비스 실행 테스트
[root@localhost ~]# systemctl restart dovecot (서비스 시작)
[root@localhost ~]# systemctl status dovecot | grep Active (Active 되어 있어야 정상 구동)
Active: active (running) since Thu 2020-08-27 22:52:07 EDT; 3min 51s ago
STEP06 → RoundCube 설치 및 구성
※ 공식 홈페이지에서 최신 파일 다운, [2020-08-28] 기준으로 [1.4.8] 버전 설치
6-1 RoundCube 다운 및 경로 설정
[root@localhost ~]# wget https://github.com/roundcube/roundcubemail/
releases/download/1.4.8/roundcubemail-1.4.8-complete.tar.gz (한줄 명령어/다운)
[root@localhost ~]# tar xvzf roundcubemail-1.4.8-complete.tar.gz (압축 해제)
[root@localhost ~]# mv roundcubemail-1.4.8 roundcube (이름 변경)
[root@localhost ~]# mv roundcube /var/www/html/ (경로 이동)
[root@localhost ~]# chown -R apache:apache /var/www/html/ (권한 설정)
[root@localhost ~]# ls -al /var/www/html/ | grep roundcube (변경 확인)
drwxr-xr-x 13 apache apache 4096 8월 10 15:05 roundcube
[root@localhost ~]# systemctl restart httpd (웹 서버스 시작)
6-2 진행하기 전 웹브라우저 접속 연결을 위한 방화벽 포트 허용
[root@localhost ~]# vi /etc/sysconfig/iptables (추가 후 저장)
## WEB ACCEPT ##
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
## MAIL ACCEPT ##
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
[root@localhost ~]# systemctl restart iptables (방화벽 재시작)
6-3 웹 브라우저(크롬/엣지)를 통해 URL 접속
http://서버IP/roundcube/installer/ 접속
6-4 [CREATE CONFIG] 설정에서 [Database setup] 부분만 세팅 후에 다음 진행
6-5 구성 설정 메시지 성공 확인 후 바로 [CONTINUE] 클릭
6-6 데이터베이스 초기화[Initialize Database] 후 [Test config] 설정 마무리
6-7 콘솔 접근 후 [config.inc.php] 구성 파일 확인 및 설정
[root@localhost ~]# ls -al /var/www/html/roundcube/config/ | grep config.inc.php
-rw-r--r-- 1 apache apache 2562 8월 28 01:18 config.inc.php
※ SMTP 호스트, 포트 및 로그인 방법을 포함하기 위해 다음과 같이 추가 구성 설정하기
[root@localhost ~]# vim /var/www/html/roundcube/config/config.inc.php
36 $config['default_host'] = 'localhost';
40 $config['support_url'] = '';
52 $config['plugins'] = array('virtuser_query');
53 $config['virtuser_query'] = "SELECT Email FROM postfix_accounts.accounts_table WHERE Email = '%u'";
54 $config['defautl_port'] = 143;
55 $config['smtp_server'] = 'localhost';
56 $config['smtp_port'] = 587;
57 $config['smtp_user'] = '%u';
58 $config['smtp_pass'] = '%p';
59 $config['smtp_auth_type'] = 'LOGIN';
60 $config['debug_level'] = 1;
61 $config['smtp_debug'] = true;
6-8 /installer 파일 삭제
[root@mail roundcube]# rm -rf /var/www/html/roundcube/installer/
STEP07 → 최종 메일 테스트
http://서버IP/roundcube/ 접속
□로그인 후 메인화면
테스트 시 발송은 되었으나 수신이 안되어있어 로그 확인 결과 매우 단순한 이유였습니다.
□수발신 로그 경로 중 발췌
[root@localhost ~]# cat /var/log/maillog
Aug 28 03:14:24 mail postfix/qmgr[1978]: 0DFD567: from=<test1@eztest.com>, size=662, nrcpt=1 (queue active)
Aug 28 03:14:25 mail postfix/pipe[3204]: 0DFD567: to=<test2@eztest.com>,
relay=dovecot, delay=1194, delays=1194/0.02/0/0.42, dsn=4.3.0, status=defeorary failure.
Command output: lda(test2@eztest.com): Error: net_connect_unix(/var/run/dovecot/stats-writer) failed:
Permission denied Can't open lar/log/dovecot.log: Permission denied)
결과값에 대한 로그를 내보낼 때 dovecot.log 파일이 권한 때문에 Postfix가 제대로 처리를 하지 못 했던 문제였습니다.
[root@mail log]# ls -al /var/log | grep dovecot
-rw------- 1 root root 33498 8월 28 03:26 dovecot.log
[root@mail log]# chown vmail:dovecot /var/log/dovecot.log (권한 수정)
[root@mail log]# ls -al /var/log | grep dovecot
-rw------- 1 vmail dovecot 34208 8월 28 03:28 dovecot.log
□재시도
□수발신은 잘되는 것을 확인했습니다만 또 다른 에러 로그 확인
[root@localhost ~]# cat /var/log/maillog
(delivered via dovecot service (lda(test2@eztest.com):
Error: net_connect_unix(/var/run/dovecot/stats-writer) failed: Permission den))
이것도 역시 권한 문제로 확인됩니다. 다만 통계 데이터를 사용할 일은 없어서 무시해도 됩니다만 어떤 서비스든 사소한 에러 로그라도 없는 게 좋습니다.
□권한 확인
[root@localhost ~]# ls -al /var/run/dovecot/stats-writer
srw-rw---- 1 root dovecot 0 8월 27 22:52 /var/run/dovecot/stats-writer
[root@localhost ~]# chown vmail:dovecot /var/run/dovecot/stats-writer (권한 수정)
[root@mail log]# ls -al /var/run/dovecot/stats-writer
srw-rw---- 1 vmail dovecot 0 8월 27 22:52 /var/run/dovecot/stats-writer
□최종 로그 확인(에러 없이 정상 발송)
[root@localhost ~]# cat /var/log/maillog
Aug 28 04:07:36 mail postfix/qmgr[1978]: BB07767: from=<test1@eztest.com>, size=828, nrcpt=1 (queue active)
Aug 28 04:07:36 mail postfix/pipe[3849]: BB07767: to=<test2@eztest.com>,
relay=dovecot, delay=0.24, delays=0.05/0.01/0/0.18, dsn=2.0.0, status=sent (delivered via dovecot service)
마무리
테스트까지 정상 작동되는 것이 확인되었습니다. 다만 테스트 시 주의해야 할 점은 인터넷이 되기 때문에 외부로 발송 시도는 가능합니다만 가상의 도메인이기 때문에 실제 외부[네이버/다음] 같은 기업끼리의 메일로 발송하게 되면 수신 거부하거나 계속 시도할 경우 스팸으로 인식하여 IP가 차단될 수 있으니 주의하시기 바랍니다. 물론 같은 내부 도메인끼리 주고받을 경우는 전혀 문제없습니다. 제가 직접 구매한 도메인으로 실서버에 세팅 후 외부 수발신이 되는지에 대해서는 따로 검증을 진행하려고 합니다. 메일서버는 이렇게 구성이 된다는 방법만 숙지해주시면 됩니다. 또한 지금은 웹메일에서의 작동만 확인을 했지만 마이크로소프트 아웃룩이나 썬더메일 같은 클라이언트를 이용해 POP/IMAP이 연결이 되는지도 테스트 예정입니다. 한 포스팅에 너무 많은 정보를 담을 경우 가독성이 떨어질 것으로 예상돼 다음 포스팅에 설명을 보충하도록 하겠습니다. 긴 글 읽느라 수고하셨습니다.
'◈『Open(Source) Solution』 > 메일서버(RoundCube)' 카테고리의 다른 글
Rocky Linux - 메일서버 보안 인증서 적용하기 (Roundcube, Postfix, Dovecot) [리뉴얼] (2) | 2022.06.04 |
---|---|
Rocky Linux - 메일서버 구축(Postfix, Dovecot, MariaDB And Roundcube) [리뉴얼] (48) | 2022.05.30 |
CentOS 8 - Roundcube 메일 보안 인증서 적용하기 (Postfix, Dovecot) (0) | 2020.11.06 |
CentOS 8 - Roundcube 메일 보안 인증서 적용하기 (Apache) (0) | 2020.11.04 |
CentOS 8 - 메일서버 구축(리얼서버 운영) (31) | 2020.09.10 |