OS/Linux

sendmail로 메일송신 하기

엔지니어1 2024. 4. 16. 11:18

 

MTA(메일 전손 에이전트)는 메일을 송신 또는 수신을 하지만 sendmail은 전통적으로 리눅스 시스템에 사용됩니다.

sendmail의 주요 기능으로는 메일전송, 메일 라우팅, 메일 큐 관리 등이 있습니다.

설치 환경은 centos7이며 root계정에서 진행하였습니다.

 

1. sendmail 설치

yum install -y sendmail

 

2. sasl 설치

SASL(Simple Authentication and Security Layer)을 사용하여 Sendmail을 설정하는 것은 안전한 전송 및 인증을 통해 메일을 보내고 받는 것을 보장합니다.

뿐만 아니라 SMTP, POP, IMAP, LDAP 등의 응용계층 프로토콜과 전송계층 프로토콜에서 주로 사용하용합니다.

기본으로 설정되어 있는 pam방식을 사용하는 방법을 설명하겠습니다.

 

sasl 설치

yum install -y cyrus-sasl*

 

sendmail.cf 생성

sendmail.cf는 sendmail.mc를 m4명령어로 생성합니다. sendmail.mc는 매크로 설정 파일입니다.

vi /etc/mail/sendmail.mc

# 주석 처리된 설정을 수정합니다.
# sasl 인증을 사용하는 설정입니다.
52 : dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
53 : dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

# 수정 후
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

# 기본 설정은 루프백이 일어나도록 설정되어 있어 0.0.0.0으로 수정해야 메일을 송신할 수 있습니다.
118 : DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl 

# 수정 후
118 : DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl

 

mc파일로 cf파일을 생성합니다.

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

 

3. local-host-names 설정

메일 서버에 사용되는 도메인을 입력합니다.

한 줄에 하나의 도메인을 입력해야 하며 메일을 수신할 호스트 명을 입력합니다.

vi /etc/mail/local-host-names

domain.com

domain.com에 자신의 서버 dns로 입력해주면 됩니다.

 

4. access파일 설정

access파일은 메일 서버의 접근 제어를 설정하는 파일입니다.

vi /etc/mail/access

===============================================
Connect:localhost.localdomain           RELAY
Connect:localhost                       RELAY
Connect:127.0.0.1                       RELAY
Connect:naver.com                       RELAY
===============================================

기본 설정에서 왼쪽 부분은 제어대상을 설정하고, 오른쪽 부분은 제어옵션을 설정합니다.

제어 대상에 Connect, From, To를 함께 사용하여 접속하는 클라이언트 주소, 메일 보낸 주소, 메일 보낼 주소를 설정할 수 있고

제어 옵션은 RELAY, REJECT, DISCARD, OK 등이 있으며 송수신 허용, 송수신 거부, 받은 즉시 폐기, 조건 없이 허용을 뜻합니다.

DISCARD는 메일을 폐기하고 수신자에게 폐기소식을 알리지 않아 주로 스팸메일을 보내는 계정또는 ip에 지정하여 사용합니다.

테스트 시 송신할 메일의 도메인을 입력합니다.

 

sendmail은 access파일을 읽지 않고 access.db파일을 읽어 인식합니다.

makemap 명령어를 사용하여 access파일로 access.db파일을 생성합니다.

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

 

5. virtusertable 설정

virtusertable에는 여러 개의 도메인을 하나의 메일 ID로 사용할 수 있도록 설정할 수 있습니다.

vi /etc/mail/virtusertable

master@test.co.kr	test
master@hoho.co.kr	hoho

해당 설정은 master@test.co.kr로 오는 메일은 test라는 실제계정에서 받게 하고,

master@hoho.co.kr로 오는 메일은 hoho라는 실제계정에서 받게 한다는 의미입니다.

 

virtusertable도 access파일과 같이 db파일을 생성해 주어야 합니다.

makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

 

makemap 명령어를 사용하지 않고 make명령어만 사용하면 변경된 설정파일을 한꺼번에 적용할 수 있습니다.

 

6. 메일전송 테스트

telnet으로 localhost의 25 포트에 연결합니다.

telnet localhost 25

 

mail송신 시 표시될 주소를 입력합니다. enter

mail from:master@test.co.kr

 

서버는 250 OK로 응답합니다.

 

수신자의 메일주소를 입력합니다. enter

rcpt to : recipient@domain.com

 

명령어를 입력합니다. enter

data

 

제목을 입력합니다. enter

Subject: SPECIFY_SUBJECT_HERE

 

내용을 입력합니다. enter

SPECIFY_MESSAGE_HERE

 

완료했다는 명령어를 입력합니다. enter

.

 

메시지가 성공적으로 전송되었다고 출력되면 quit로 telnet을 종료합니다.

 

sendmail의 주요 설정 파일들은 아래와 같습니다.

/usr/sbin/sendmail Sendmail 데몬 실행 파일
/etc/init.d/sendmail Sendmail을 구동 시키는 스크립트 파일
/etc/sysconfig/sendmail Sendmail Queue 설정파일
/etc/mail/sendmail.cf Sendmail 주 설정 파일
/etc/mail/local-host-names 메일을 처리할 도메인에 대한 정보 기록 파일
/etc/mail/access 접근 제어 설정 파일
/etc/mail/domaintable 도메인 매핑 설정 파일
/etc/mail/mailertable 메일 경로 변경 설정 파일
/etc/mail/virtualtable 가상 유저 테이블 설정 파일

 

다음은 메일 수신을 알아보겠습니다.

감사합니다!