Mail/Sendmail

Sendmail 설치 설정

서버엔지니어 2023. 3. 10.
728x90

Sendmail 이란?


sendmail은 가장 많이 사용되고 있는 MTA프로그램(Mail Transfer Agent)으로 유닉스 기반의 환경에서 전자우편 전송을 위해 SMTP 를 구현한 가장 보편적인 소프트웨어입니다.sendmail 서버가 전자우편을 받으면, 그 편지를 수신자에게 즉시 전달하려는 시도를 하며, 만약 수신자가 존재하지 않으면, 나중에 배달하기 위해 메시지를 큐에 저장합니다. 그러나, sendmail 은 메일박스를 제공하지 않기 때문에, POP 이나 IMAP 과 같은 다른 소프트웨어를 함께 써야합니다. 대부분의 인터넷 서비스 공급자들은 sendmail 과 같은 SMTP 서버와, POP 또는 IMAP 서버를 모두 제공합니다. sendmail 의 상용버전을 Sendmail 이라고 부르는데, sendmail 의 개방형소스에 POP3 서버와 기타 강화된 여러가지 기능들을 포함하고 있으며, 윈도우 NT 운영체계에 설치될 수 있는 버전도 나오고 있습니다. 공식사이트는 http://www.sendmail.org입니다. 메일을 보내기 위한 서버인 SMTP(Simple Mail Transfer Protocol)로 사용하기 위함이며, 포트는 기본적으로 25번 포트를 사용합니다. 또한 메일을 주고 받기 위해서는 pop3 혹은 imap과 같이 사용해야 합니다.

 

 

 

Sendmail 설치

yum install -y sendmail*

sendmail saslauthd 설정 (인증 및 계정 설정)

1. SASL 설치

 

SASL (Simple Authentication and Security Layer) - 간이 인증 및 보안 계층 서비스
프로토콜이다
인증 서비스와 선택 사항인 보안 계층 서비스로 이루어져 있다
SMTP, POP, IMAP, LDAP 등의 응용계층 프로토콜과 전송계층 프로토콜에서 주로 사용한다
대표적인 구현으로 카네기멜론 대학의 사이러스 메일 프로젝트에서 개발된 Cyrus SASL이 있다

 

- sendmail이 설치되어 있는 메일서버를 이용하여 스팸메일을 Relay 하는 서버로 악용 가능성이 있기때문이다
- /etc/mail/access 파일에서 다른 도메인이나 특정 IP에서 접속시에만 Relay를 허용하는 설정이 필요하다
- 하지만 /etc/mail/access 파일에서 설정을 하지 않아도 인증된 사용자는 모든 도메인에 Relay를 허용 할 수 있도록 설정도 가능하다
- 인증된 사용자만 Relay를 허용 할 것인지, 특정 IP 혹은 특정 도메인만 허용 할 것인지 필요에 맞게 설정하면 된다
- SASL이 설치되어 있는지 확인한다
- 설치가 안 되어 있다면 cyrus-sasl 패키지를 설치하자 > yum install -y cyrus-sasl*
- 아래 다섯개 모두 설치해 주자 (cyrus-sasl-md5 는 꼭 필요하다)

 

yum install -y cyrus-sasl*

-> 이부분이 있어야 중계메일서버 기능인 relay 관련 outlook 부분에서 정상적으로 수발신이 가능합니다. 이부분을 누락하지마세요.

 

 

2. SASL 설정변경

- SASL은 여러가지 패스워드 인증방식을 지원한다

1) PAM (Pluggable Authentication Module)
인증 모듈을 이용한 방법

2) shadow
/etc/shadow 를 이용한 인증 방법
shadow 파일의 퍼미션을 644로 변경해 줘야 한다

3) sasldb
SASL의 독자적인 DB를 이용한 인증 방법

4) pwcheck
/etc/shadow 를 이용한다는 점에서는 shadow 방식과 같지만 pwcheck 데몬이 루트권한으로 실행되기 때문에 인증 요구 시 shadow의 퍼미션을 변경할 필요가 없다는 장점이 있다

5) saslauthd
pwcheck와 비슷한 역할을 하지만 PAM과 같은 인증 시스템을 병용 할 수 있다

- SASL2 부터 shadow를 지원하지 않는다
- saslauthd 데몬을 이용해서 인증해야 한다
- /etc/sysconfig/saslauthd 설정파일을 변경해 준다
- MECH=pam

 

3. SASL 실행하기

- saslauthd가 실행되어 있다면 정지
- saslauthd를 pam과 함께 실행한다
- sasl 인증 메카니즘으로 pam을 활용한다

service saslauthd restart
systemctl restart  saslauthd
saslauthd -a pam

 

hosts 파일수정

 

vi /etc/hosts
=========================================================
192.168.10.5 mail.suwon.tk
=========================================================
-> 해당설정은 DNS가 제대로 등록되어 있다면 할필요 없습니다.

 


vi /etc/mail/local-host-names
=========================================================
suwon.tk

=========================================================

-> 해당설정이 무조건 있어야합니다. 그래야 outlook에서 메일이 수발신이 제대로 테스트가 됩니다.

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

 


vi /etc/mail/sendmail.mc
=========================================================
52,53번째줄을 고친다.

dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

맨앞의 dnl를 지워줍니다. 
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl 
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

118번째줄을 고친다
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl 
-> DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl 
=========================================================

 

m4 명령어로 sendmail.mc 파일을 sendmail.cf 파일로 재생성한다.
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf 

Relay 설정

vi /etc/mail/access
=========================================================
Connect:localhost.localdomain                        RELAY

Connect:localhost                                                   RELAY
Connect:127.0.0.1                                                    RELAY
Connect:IP주소                                                          RELAY
Connect:도메인주소(ex: naver.com)                  RELAY
=========================================================

makemap 명령어를 사용하여 access 설정 파일을 DB화
makemap hash /etc/mail/access < /etc/mail/access

virtusertable 설정

vi /etc/mail/virtusertable
=========================================================
abcd@suwon.tk     abcd

=========================================================

makemap 명령어를 사용하여 virtusertable 설정 파일을 DB화
makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

방화벽에 설정


vi /etc/sysconfig/iptables
=========================================================
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT 
=========================================================

 

SMTP_AUTH 기능 활성화하기위해 saslauthd 데몬 재시작 
systemctl stop saslauthd
systemctl status saslauthd
systemctl start saslauthd
systemctl status saslauthd
systemctl enable saslauthd

sendmail 재시작
systemctl stop sendmail
systemctl status sendmail
systemctl start sendmail
systemctl status sendmail
systemctl enable sendmail

netstat -ntlp
=========================================================
메일전송확인


telnet localhost 25 
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 컴퓨터호스트네임 ESMTP Sendmail 8.14.7/8.14.7; Fri, 2 Oct 2020 09:08:29 +0900
mail from:현재컴퓨터이메일아이디@현재컴퓨터서버이메일주소(ex: test@suwon.tk)
250 2.1.0 test@suwon.tk... Sender ok
rcpt to : 네이버,다음,구글이메일아이디@네이버,다음,구글이메일
250 2.1.5 네이버,다음,구글이메일아이디@네이버,다음,구글이메일... Recipient ok
data
354 Enter mail, end with "." on a line by itself
subject : league of legends funny             
I like LCK, LoL World Cup    
HaHa
.
250 2.0.0 09208T0F002620 Message accepted for delivery
quit
221 2.0.0 techsmile-111792.novalocal closing connection
Connection closed by foreign host.
=========================================================

Mail계정생성 스크립트
=========================================================
#!/bin/bash
echo
echo -n -e "ID : "
read id
echo -n -e "PW : "
read pw
echo
echo -n -e "[ ID : $id ] [ PW : $pw ] OK? [y/n] : "
read answer
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
7
useradd -G 12 -s /sbin/nologin $id
// 입력한 id값으로 계정을 생성해줍니다.
echo $pw | /usr/bin/passwd --stdin $id
// 명령어 한 줄로 계정의 패스워드를 설정합니다.
else
exit 1
fi
echo "$id@도메인 $id" >> /etc/mail/virtusertable
// ex) echo “$id@taktak77.xyz $id” >> /etc/mail/virtsertable
// 새로 생성한 계정을 /etc/mail/virtusertable에 추가합니다.
// 계정에 추사용자가 사용할 도메인으로 설정합니다.

makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
// makemap을 사용하여 virtusertable파일을 DB화 합니다.
chsh -s /bin/bash $id
// 생성한 계정의 쉘을 chsh명령어를 이용하여 계정의 쉘을 /bin/bash로 변경하여 로그인도 가능하게 해줍니다.
service sendmail restart
// 모든 설정 완료 후 Sendmail 서비스를 재시작 해줍니다.
=========================================================

//주석줄은 설명이니 삭제하고 vi sendmailuseradd.sh로 만들어준다.

chmod 755 sendmailuseradd.sh
실행은 ./sendmailuseradd.sh 로 실행한다.


=========================================================
./sendmailuseradd.sh

ID : testtest
PW : testtest

[ ID : testtest ] [ PW : testtest ] OK? [y/n] : y
./sendmailuseradd.sh: line 11: 7: command not found
testtest 사용자의 비밀 번호 변경 중
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.
Changing shell for testtest.
Shell changed.
Restarting sendmail (via systemctl):                       [  OK  ]
=========================================================

설정 파일 설명

/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 가상 유저 테이블 설정 파일

 

 

 

 

'Mail > Sendmail' 카테고리의 다른 글

Ubuntu Sendmail 설치 및 설정  (0) 2023.03.17
Sendmail 속도 최적화  (0) 2023.03.10
Sendmail 설정 tip  (0) 2023.03.10

댓글