RHCE : SMTP – 시스템이 모든 이메일을 중앙 메일 서버로 전송하도록 구성

RHCE 주제입니다. CertDepot 사이트를 번역 및 내용 추가하였으며, 컨텐츠 관련 모든 권리는 CertDepot에 있습니다.

사전 준비사항 - 중앙 메일 서버 설정

이 실습을 하기 위해서는 중앙 메일 서버를 설정하여야 한다.

0. 설정하기 전에

중앙 메일 서버를 MX 레코드를 사용하는 일반적인 방법으로 테스트하기 위해서는 마스터 DNS 서버 구축을 하여야 한다.

단지 null-클라이언트 설정(RHCE 7 요구사항)을 테스트 하기를 원한다면, 마스터 DNS 서버를 설정하지 않아도 가능하다. 이 경우에 relayhost = [mail.example.com] 또는 relayhost = [ipaddress]구문을 사용하여야 한다(모든 이메일을 중앙 이메일 서버로 포워딩하도록 시스템 구성)을 참조할 것(아래 포스팅이 해당 포스팅의 번역본임).

1. 설치하지 않았다면, postfix패키지를 설치한다.
[root@server1 ~]# yum install -y postfix
Loaded plugins: fastestmirror, langpacks
base                                                            | 3.6 kB  00:00:00     
extras                                                          | 3.4 kB  00:00:00     
updates                                                         | 3.4 kB  00:00:00     
updates/7/x86_64/primary_db                                     | 4.1 MB  00:00:00     
Determining fastest mirrors
 * base: mirror.oasis.onnetcorp.com
 * extras: mirror.oasis.onnetcorp.com
 * updates: mirror.oasis.onnetcorp.com
Package 2:postfix-2.10.1-6.el7.x86_64 already installed and latest version
Nothing to do
2. 새 서비스를 방화벽에 추가한다.
[root@server1 ~]# firewall-cmd --permanent --add-service=smtp
success
[root@server1 ~]# 
3. 방화벽 설정을 다시 로드한다.
[root@server1 ~]# firewall-cmd --reload 
success
[root@server1 ~]# 
4. postfix서비스를 부팅시에 활성화하고, 시작한다.
[root@server1 ~]# systemctl enable postfix && systemctl start postfix
[root@server1 ~]# 
5. 설정하고자 하는 서버의 주소를 192.168.1.0/24네트워크에 있는 mail.example.com이라고 하자. 다음과 같이 /etc/postfix/main.cf 파일을 수정할 수 있을 것이다.
[root@server1 ~]# vim /etc/postfix/main.cf 
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8 
[root@server1 ~]# 
6. 구문을 확인한다.
[root@server1 ~]# postfix check
[root@server1 ~]# 
7. 기본 설정이 아닌 설정을 확인한다.
[root@server1 ~]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = example.com
myhostname = mail.example.com
mynetworks = 192.168.1.0/24, 127.0.0.0/8 
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
[root@server1 ~]# 
8. SELinux 부울 변수 allow_postfix_local_write_mail_spoolon으로 변경한다.
[root@server1 ~]# setsebool -P allow_postfix_local_write_mail_spool on
[root@server1 ~]# 
9. postfix 서비스를 재시작한다.
[root@server1 ~]# systemctl restart postfix
[root@server1 ~]# 
10-1. nmap커맨드를 이용해 클라이언트로부터 테스트한다. 25/tcp open smtp가 반드시 나타나야 한다.
[root@server2 ~]# yum install -y nmap
Loaded plugins: fastestmirror, langpacks
RHELREPO                                                 | 3.6 kB     00:00     
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package nmap.x86_64 2:6.40-4.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package       Arch            Version                  Repository         Size
================================================================================
Installing:
 nmap          x86_64          2:6.40-4.el7             RHELREPO          3.9 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 3.9 M
Installed size: 16 M
Downloading packages:
nmap-6.40-4.el7.x86_64.rpm                                 | 3.9 MB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 2:nmap-6.40-4.el7.x86_64                                     1/1 
  Verifying  : 2:nmap-6.40-4.el7.x86_64                                     1/1 

Installed:
  nmap.x86_64 2:6.40-4.el7                                                      

Complete!
[root@server2 ~]# nmap mail.example.com

Starting Nmap 6.40 ( http://nmap.org ) at 2016-05-03 11:26 KST
Nmap scan report for mail.example.com (192.168.1.24)
Host is up (0.00013s latency).
Not shown: 995 filtered ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
2049/tcp open  nfs
MAC Address: 00:0C:29:8B:8D:34 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 4.66 seconds
[root@server2 ~]# 
10-2. 앞의 방법 대신에 telnet 커맨드를 사용하여 클라이언트로부터 테스트 할 수도 있다.
[root@server2 ~]# yum install -y telnet
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package telnet.x86_64 1:0.17-59.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch            Version                Repository         Size
================================================================================
Installing:
 telnet          x86_64          1:0.17-59.el7          RHELREPO           63 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 63 k
Installed size: 113 k
Downloading packages:
telnet-0.17-59.el7.x86_64.rpm                              |  63 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:telnet-0.17-59.el7.x86_64                                  1/1 
  Verifying  : 1:telnet-0.17-59.el7.x86_64                                  1/1 

Installed:
  telnet.x86_64 1:0.17-59.el7                                                   

Complete!
[root@server2 ~]# telnet mail.example.com 25
Trying 192.168.1.24...
Connected to mail.example.com.
Escape character is '^]'.
220 mail.example.com ESMTP Postfix
HELO client
250 mail.example.com
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@server2 ~]# 
11. 중앙 메일 서버로 다시 돌아가서, me라는 사용자를 추가한다.
[root@server1 ~]# adduser me
[root@server1 ~]#
12. me에게 메일을 보내본다.
[root@server1 ~]# echo "This is a test." | mail -s "Test" me@example.com
[root@server1 ~]# 
13. me 계정으로 로그인해 메일을 확인한다.
[root@server1 ~]# su - me
[me@server1 ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/me": 1 message 1 new
>N  1 root                  Tue May  3 11:31  18/560   "Test"
& quit
Held 1 message in /var/spool/mail/me
[me@server1 ~]$ 

패키지 설치

[mail.example.com]이나 메일 게이트웨이의 ip를 구문(아래를 참조할 것)에 사용한다면 마스터 DNS 서버의 설정을 하지 않을 수 있다.

1. postfix 패키지가 설치되어 있지 않다면 설치한다.
[root@server2 ~]# yum install -y postfix
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package postfix.x86_64 2:2.10.1-6.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package         Arch           Version                  Repository        Size
================================================================================
Installing:
 postfix         x86_64         2:2.10.1-6.el7           RHELREPO         2.4 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 2.4 M
Installed size: 12 M
Downloading packages:
postfix-2.10.1-6.el7.x86_64.rpm                            | 2.4 MB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 2:postfix-2.10.1-6.el7.x86_64                                1/1 
  Verifying  : 2:postfix-2.10.1-6.el7.x86_64                                1/1 

Installed:
  postfix.x86_64 2:2.10.1-6.el7                                                 

Complete!
[root@server2 ~]# 
2. postfix 서비스를 부팅시에 활성화하고, 시작(보통 시작되어 있을 것이다)한다.
[root@server2 ~]# systemctl enable postfix && systemctl restart postfix
[root@server2 ~]#

설정을 시작하기 전에

두 가지의 경우가 있을 수 있다.

RHCE 7 시험의 목표는 null-클라이언트 구성에 가까워보인다. 이 튜토리얼은 이 설정을 어떻게 하는지에 대해 먼저 설명할 것이다. gateway 설정은 그 이후에 설명할 것이다.

Null-클라이언트 설정

1. 현재 나의 주소는 192.168.1.0/24네트워크에 있는 server2.example.com이라고 하고, 중앙 메일 서버의 ip주소가 192.168.1.1, 주소는 mail.example.com이라고 하자. 다음과 같이 /etc/postfix/main.cf 파일을 수정할 수 있을 것이다.
[root@server2 ~]# vim /etc/postfix/main.cf 
myhostname = server.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = loopback-only
mydestination =
relayhost = 192.168.1.1
[root@server2 ~]#
2. 구문을 체크한다.
[root@server2 ~]# postfix check
[root@server2 ~]# 
3. 기본이 아닌 설정을 확인한다.
[root@server2 ~]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = loopback-only
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination =
mydomain = example.com
myhostname = server2.example.com
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
relayhost = 192.168.1.1
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
[root@server2 ~]# 
4. postfix 서비스를 재시작한다.
[root@server2 ~]# systemctl restart postfix
[root@server2 ~]# 

테스트 하기

1. 중앙 메일 서버에 있는 me에게 메일을 보내보자(중앙 메일 서버에 해당 사용자의 생성이 필요하다). 다음과 같이 입력한다.
[root@server2 ~]# echo "My Mailtest from server2." | mail -s "Mailtest from Server2" me@example.com
[root@server2 ~]# 
2. 로컬 메일 큐를 확인하려면 다음과 같이 입력한다.
[root@server2 ~]# mailq
Mail queue is empty
[root@server2 ~]# 
3. 메일을 다시 큐에 올리려면(-r 옵션) 다음과 같이 입력한다.
[root@server2 ~]# postsuper -r "Queue ID"
4. 로컬 큐의 메일을 삭제하려면(-d 옵션) 다음과 같이 입력한다.
[root@server2 ~]# postsuper -d "Queue ID"
5. 중앙 메일 서버에서 이전 단계에서 me 사용자에게 보낸 메일을 확인하려면 다음과 같이 입력한다.
[root@server2 ~]# ssh root@mail.example.com
root@mail.example.com's password: 
[root@server1 ~]# su - me
[me@server1 ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/me": 19 messages 1 new 19 unread
 U  1 root                  Tue May  3 12:25  21/769   "Mailtest from Server2"
& quit
Held 1 message in /var/spool/mail/me
You have mail in /var/spool/mail/me
[me@server1 ~]$ exit
logout
6. 메일과 관련된 프로세스들을 확인하려면 다음과 같이 입력한다.
[root@server1 ~]# tail -f /var/log/maillog
May  3 12:06:08 server1 postfix/qmgr[37725]: A4DCD10F3C99: from=<root@example.com>, size=437, nrcpt=1 (queue active)
May  3 12:06:08 server1 postfix/local[38185]: A4DCD10F3C99: to=<me@example.com>, relay=local, delay=0, delays=0/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
May  3 12:06:08 server1 postfix/qmgr[37725]: A4DCD10F3C99: removed
May  3 12:25:16 server1 postfix/smtpd[38696]: connect from unknown[10.10.10.25]
May  3 12:25:16 server1 postfix/smtpd[38696]: 314D710F3C99: client=unknown[10.10.10.25]
May  3 12:25:16 server1 postfix/cleanup[38699]: 314D710F3C99: message-id=<20160503032516.254532D7F89@server2.example.com>
May  3 12:25:16 server1 postfix/qmgr[37725]: 314D710F3C99: from=<root@example.com>, size=645, nrcpt=1 (queue active)
May  3 12:25:16 server1 postfix/smtpd[38696]: disconnect from unknown[10.10.10.25]
May  3 12:25:16 server1 postfix/local[38700]: 314D710F3C99: to=<me@example.com>, relay=local, delay=0.02, delays=0.01/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
May  3 12:25:16 server1 postfix/qmgr[37725]: 314D710F3C99: removed
[root@server1 ~]#

게이트웨이 설정

게이트웨이 설정으로 구축하고자 할 경우(서버는 로컬 네트워크부터 메일을 받고 그것들을 중앙 메일 서버에 포워딩한다), 다음 단계를 수행한다.

1. /etc/postfix/main.cf파일을 열고, 다음과 같이 변경한다.
[root@server2 ~]# vim /etc/postfix/main.cf
myhostname = server.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8
relayhost = 192.168.1.1
[root@server2 ~]# 
2. 구문을 체크한다.
[root@server2 ~]# postfix check
[root@server2 ~]# 
3. 기본이 아닌 설정들을 확인한다.
[root@server2 ~]# postconf -n
4. postfix서비스를 재시작한다.
[root@server2 ~]# systemctl restart postfix
[root@server2 ~]# 
5. 방화벽을 외부로부터 이메일을 받을 수 있도록 연다.
[root@server2 ~]# firewall-cmd --permanent --add-service=smtp
success
[root@server2 ~]# 
6. 방화벽을 다시 로드한다.
[root@server2 ~]# firewall-cmd --reload
success
[root@server2 ~]# 

유용한 팁

시험 전 또는 중간에, /usr/share/doc/postfix-2.10.1/README_FILES 디렉토리의 BASIC_CONFIGURATION_README 파일이나 STANDARD_CONFIGURATION_README파일을 읽어 보면 많은 Postfix설정 예제를 확인할 수 있을 것이다.

[root@server2 ~]# cd /usr/share/doc/postfix-2.10.1/README_FILES/
[root@server2 README_FILES]# ls
AAAREADME                    OVERVIEW
ADDRESS_CLASS_README         PACKAGE_README
ADDRESS_REWRITING_README     PCRE_README
ADDRESS_VERIFICATION_README  PGSQL_README
BACKSCATTER_README           POSTSCREEN_README
BASIC_CONFIGURATION_README   QSHAPE_README
BUILTIN_FILTER_README        RELEASE_NOTES
CDB_README                   RESTRICTION_CLASS_README
CONNECTION_CACHE_README      SASL_README
CONTENT_INSPECTION_README    SCHEDULER_README
DATABASE_README              SMTPD_ACCESS_README
DB_README                    SMTPD_POLICY_README
DEBUG_README                 SMTPD_PROXY_README
DSN_README                   SOHO_README
ETRN_README                  SQLITE_README
FILTER_README                STANDARD_CONFIGURATION_README
INSTALL                      STRESS_README
IPV6_README                  TLS_LEGACY_README
LDAP_README                  TLS_README
LINUX_README                 TUNING_README
LOCAL_RECIPIENT_README       ULTRIX_README
MAILDROP_README              UUCP_README
MEMCACHE_README              VERP_README
MILTER_README                VIRTUAL_README
MULTI_INSTANCE_README        XCLIENT_README
MYSQL_README                 XFORWARD_README
NFS_README
[root@server2 README_FILES]#  

추가 자료

Postfix 웹사이트에서 유용한 관련 자료들을 무료로 얻을 수 있다. Postfix Overview 페이지부터 시작하면 좋다. 또한 global picture of Postfix는 포함된 수많은 프로세스들에 대한 나은 이해에 도움이 될 것이다.

at4am의 프로필 이미지

at4am

2016년 05월 03일

글쓴이의 더 많은 글 읽어보기