본문 바로가기

OS/Linux

[Linux] Sendmail 설치

[Linux] Sendmail 설치

1. Sendmail 설치

Sendmail 이란?

Sendmail은 인터넷에서 메일을 전송하기 위해 사용되는 프로그램입니다. MTA(Mail Transfer Agent) 라고 부르기도 합니다.
왠지 어려워 보이지만 쉽게 E-Mail(전자메일)을 보내기 위해 저희가 흔하게 사용하는 네이버, 다음, 구글의 메일 서비스를 생각하시면 됩니다.
이름 자체도 Send(보내다) + Mail(메일) = Sendmail 로 지어졌습니다.
대부분의 리눅스 배포판에 기본적으로 설치가 되어있습니다.

오늘은 Sendmail의 설치 방법과 사용법에 대해서 알아봅시다.

(1) Sendmail 설치 유무 확인

Sendmail을 설치하기전에 Sendmail이 설치되어있는지 rpm 명령어를 통해 확인합니다.

rpm -qa | grep sendmail

(2) Sendmail 설치

설치가 되어있지않다면 다음 명령어를 통해 Sendmail을 설치합니다.

yum -y install sendmail sendmail-cf

설치 후 rpm 명령어를 통해 Sendmail이 설치 되었는지 확인합니다.

rpm -qa | grep sendmail*

(3) /ets/hosts 설정

/etc/hosts 파일은 리눅스에서 DNS 보다 먼저 호스트명을 IP로 변경시켜주는 파일입니다.
centOS 7의 경우 기본 값은 다음과 같습니다.

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

파일에 자신의 ip와 도메인 정보를 입력해줍니다. 저는 테스트용으로 mail.dh-0419.com을 입력하였습니다.

vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 mail.dh-0419.com

(4) /etc/mail/local-host-names 설정

/etc/mail/local-host-names 파일은 메일을 수신할 호스트명을 입력해줍니다. 즉 메일로 사용할 도메인을 입력 하는겁니다.
만약 여러 도메인에 대해서 메일을 수신 받으려면 이 파일에 도메인을 한 줄씩 적어줘야 합니다.

vi /etc/mail/local-host-names
# local-host-names - include all aliases for your machine here.
dh-0419.com

(5) Sendmail 설정 파일 수정

Sendmail을 이용하기 위해 설정 파일을 수정해줍니다.
수정 전 만약의 상황을 대비해 백업본을 만든 후 진행합니다.


- 백업본 생성

cp /etc/mail/sendmail.mc /usr/local/src/backup_sendmail.mc
cp /etc/mail/sendmail.cf /usr/local/src/backup_sendmail.cf

- sendmail.mc 파일 수정

vi /etc/mail/sendmail.mc 
52 TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
53 define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
118 DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

- sendmail.cf 생성

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

(6) /etc/mail/access 설정

/etc/mail/access 파일은 메일 서버로 접근하는 호스트나 도메인을 제어 할 때 사용하는 파일입니다.
이 파일을 통해 특정 IP 주소 및 도메인에 대해서 접근을 가능하게 하거나 접근하지 못하도록 설정 할 수 있습니다.
파일의 첫 필드에는 도메인명(or IP or 메일 계정)을 작성하고 두번째 필드에 정책을 기입합니다.

파일은 기본적으로 localhost에서만 접근이 가능하게 되어있습니다.
위에서 등록한 도메인을 적어줍시다. Connect:도메인이름 RELAY 형식으로 적어주면 됩니다.

vi /etc/mail/access
# Check the /usr/share/doc/sendmail/README.cf file for a description
# of the format of this file. (search for access_db in that file)
# The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc
# package.
#
# If you want to use AuthInfo with "M:PLAIN LOGIN", make sure to have the
# cyrus-sasl-plain package installed.
#
# By default we allow relaying from localhost...
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
Connect:dh-0419.com RELAY

/etc/mail/access 파일을 수정 한 후에는 access 파일의 내용을 access.db 에 저장시키기 위해 다음 명령어를 사용해주어야 합니다.

makemap hash /etc/mail/access < /etc/mail/access

(7) Virtusertable 설정

메일 서버를 운영 하는 서버에 도메인이 하나만 존재 할 경우에는 위 파일을 수정해주지 않아도 됩니다.
하지만 도메인이 추가가 된다거나 서버에 도메인이 여러개일 경우에는 Virtusertable 설정을 꼭 해주어야합니다.
설정 작업을 톡해 동일한 메일 계정을 여러 개의 도메인에서 사용 할 수 있습니다.

파일의 첫 필드에는 메일 주소를 기입하고 두번째 필드에는 시스템에 존재하는 실계정을 기입해줍니다.

vi /etc/mail/virtusertable
test@dh-0419.com test

파일을 수정 한 후 이 파일도 마찬가지로 내용을 access.db 에 저장시키기 위해 다음 명령어를 사용해주어야 합니다.

makemap hash /etc/mail/virtusetable </etc/mail/virtusertable

(8) saslauthd / sendmail 시작

saslauthd 데몬은 SASL을 이용하여 암호화된 사용자 인증을 하기위해 사용되는 데몬 입니다.
메일서버에서 사용되는 인증 기능을 이 데몬이 맡아서 처리해줍니다.
데몬을 활성화 시켜줍시다.

systemctl start saslauthd

(9) 서비스 확인

netstat 명령어를 통해 sendmail 데몬이 올라왔는지 확인합니다.

netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 26804/sshd 
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 12616/sendmail: acc 
tcp6 0 0 :::111 :::* LISTEN 1/systemd 
tcp6 0 0 :::22 :::* LISTEN 26804/sshd

(10) 메일 발송 테스트

메일 발송 테스트를 하기전에, iptables 혹은 firewalld에 25번 포트를 방화벽에서 열어주어야 합니다.
저는 iptables를 사용하고 있으므로 iptables에서 25번 포트를 등록해주었습니다.

chkconfig saslauthd on
chkconfig sendmail on

포트를 등록 후 메일 발송을 합니다.

telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 techsmile-50520.novalocal ESMTP Sendmail 8.14.7/8.14.7; Wed, 27 Feb 2019 04:30:01 +0900
mail from:test@dh-0419.com
250 2.1.0 test@dh-0419.com... Sender ok
rcpt to:메일 받을 주소
250 2.1.5 ekgus419@gmail.com... Recipient ok
data
354 Enter mail, end with "." on a line by itself
hello world! mail test!
.
250 2.0.0 x1QJU13U012948 Message accepted for delivery
quit
221 2.0.0 techsmile-50520.novalocal closing connection
Connection closed by foreign host.

해당 메일 주소로  로그인을 한 후 메일함을 확인하면 방금 작성한 따끈 따끈한 메일이 도착한 것을 확인 할 수 있습니다.

이상으로 Sendmail 구축 방법에 대해 알아보았습니다.

감사합니다.