소소한 IT이야기/정보보안기사 실기

[정보보안기사] 메일 서버 구성 및 보안 설정 (feat. sendmail)

Klaus 2023. 7. 28. 17:44

1. sendmail 설치

[+]개요

- 센드메일(Sendmail)은 유닉스 및 리눅스 시스템에서 가장 널리 사용되는 메일 서버 SW

- 이메일 전송을 위한 에이전트로서, SMTP(Simple Mail Transfer Protocol)를 사용하여 메일 송수신

- 센드메일은 오픈 소스로 개발되었으며, 가장 오래된 메일 전송 에이전트 중 하나로 알려져 있습니다.

 

[+] 실습환경

- ubuntu 22.04

- 패키지 최신 상태 : sudo apt update && upgrade

- install : apt install sendmail

[+] 서비스 재시작 및 상태 확인

 

- systemctl restart sendmail

- systemctl status sendmail

상태 확인

2. 주요 설정 파일

- sendmail 설치 후 디렉터리의 파일 및 설명

/etc/mail 에서 ll명령 cnffur (ls -al)

[+] 주요 설정 파일 설명

파일명 설명
access 메일 서버가 수신하는 이메일의 액세스 제어를 정의하는 파일 (스팸 방지를 위한 메일 릴레이 설정)
access.db access 파일을 컴파일하여 생성되는 데이터베이스 파일
aliases 이메일 주소에 대한 별칭을 정의하는 파일
aliases.db aliases 파일을 컴파일하여 생성되는 데이터베이스 파일
sendmail.cf sendmail.mc 파일을 m4 컴파일러를 통해 생성된 실제 설정 파일
sendmail.mc sendmail의 구성 파일 템플릿으로, 메일 서버의 설정을 수정하는 데 사용됨

[+] access 파일 설정

- 한글 번역

더보기

# /etc/mail/access
# 저작권 (c) 1998,2004 Richard Nelson <cowboy@debian.org>.
# 시간 표시: <1998/10/27 10:00:00 cowboy>
# GPL 라이선스의 설정 파일입니다. 불만, 제안 등은 저에게 전달해주세요.
#
# 기능:
#  이 SMTP 서버에 대한 액세스 제어 - 다음을 결정합니다:
#  * 어디로부터의 이메일을 수신할지
#  * 어디로부터 릴레이를 허용할지
#  * 어느 주소로는 메일을 보내지 않을지
#
# 사용법:
#  FEATURE(access_db[, type [-o] /etc/mail/access])dnl
#  makemap hash access < access
#
# 형식:
#  lhs:
#  이메일 주소  <user@[host.domain]>
#  도메인 이름  FEATURE(relay_hosts_only)를 사용하지 않으면
#  이것은 완전한 도메인 이름이어야 하며, 릴레이 도메인 ($=R)도 완전한 도메인 이름이어야 합니다.
#  네트워크 번호  옥텟 경계로 끝나야 합니다. 그렇지 않으면 번거로운 방법으로 가야 합니다. ;-{
#  rhs:
#  OK  다른 규칙에서 거부될 수 있는 메일도 받아들입니다.
#  RELAY  도메인이 당신의 SMTP 서버를 통해 릴레이하도록 허용합니다. RELAY는 다른 체크에 대한 암묵적인 OK 역할을 합니다.
#  REJECT  발신자/수신자를 일반적인 메시지로 거부합니다. 사용자 정의 가능한 메시지로  confREJECT_MSG [550 Access denied]이 발행됩니다.
#  DISCARD  메시지를 완전히 버립니다. $#discard 메일러를 사용합니다.
#  ### 임의의 텍스트  ###은 RFC 821 호환 오류 코드이며, "임의의 텍스트"는 해당 명령에 대한 반환 메시지입니다.
# 예제:
# spammer@aol.com REJECT
# FREE.STEALTH.MAILER@ 550 Spam not accepted
#
# 참고:
# FEATURE(blacklist_recipients)와 함께 다음과 같이 설정할 수도 있습니다:
# badlocaluser  550 Mailbox disabled for this username
# host.mydomain.com  550 That host does not accept mail
# user@otherhost.mydomain.com  550 Mailbox disabled for this recipient
#
# 관련:
# define(`confREJECT_MSG', `550 Access denied')dnl
# define(`confCR_FILE', `-o /etc/mail/relay-domains')dnl <<- $=R
# FEATURE(relay_hosts_only)dnl
# FEATURE(relay_entire_domain)dnl <<- $=m 클래스의 모든 호스트에 대해 릴레이 수행
# FEATURE(relay_based_on_MX)dnl <<- 릴레이되는 호스트의 MX로 릴레이 수행
# FEATURE(blacklist_recipients)dnl
# FEATURE(rbl[,alternate server])dnl
# FEATURE(orbs[,alternate server])dnl   <<- Debian 추가
# FEATURE(orca[,alternate server])dnl   <<- Debian 추가
# FEATURE(accept_unqualified_senders)dnl
# FEATURE(accept_unresolvable_domains)dnl
#
# 로컬 주소 10.x.x.x, 127.x.x.x, 172.16-31.x.x, 192.168.x.x는 릴레이할 수 있습니다.
# 주의! 외부에서 이러한 주소를 위조할 수 없도록 반드시 확인해야 합니다.
# 또한, 발신 릴레이는 연결과/또는 인증으로 제어됩니다.
# 방화벽이 설정되지 않았고 로컬 네트워크가 없다면 주석 처리하세요.
# 방화벽이 설정되지 않았고 로컬 네트워크가 있다면 *지금* 방화벽을 설정하세요.
# 스팸 확인을 위한 GreetPause - 지연 시간
# 클라이언트 연결 속도 (및 #) 제어
#Connect:localhost RELAY
#GreetPause:localhost 0
#ClientRate:localhost 0
#ClientConn:localhost 0
#Connect:10 RELAY
#GreetPause:10 0
#ClientRate:10 0
#ClientConn:10 0
Connect:127 RELAY
GreetPause:127 0
ClientRate:127 0
ClientConn:127 0
Connect:IPv6:::1 RELAY
GreetPause:IPv6:::1 0
ClientRate:IPv6:::1 0
ClientConn:IPv6:::1 0
#Connect:172.16 RELAY
#Connect:172.17 RELAY

 

 

3. 스팸 메일 및 릴레이 차단 설정

 

[+] sendmail.cf 설정 파일에서 access.db 사용 여부 확인

> 주석처리되어 있다면 주석 제거

[+] /etc/mail/access 정책 적용

- OK : 조건없이 무조건 허용

- RELAY : 지정 대상의 릴레이 허용

- REJECT : 지정 대상의 메일을 모두 거부 (거부 메세지 전달)

- DISCARD : 지정 대상의 메일을 모두 폐기(메시지 보내지 않음)

 

[+] access.db 생성

- 형식 : makemap hash /etc/mail/access.db < /etc/mail/access