우분투 서버 메일 서버 설치 안내서

초보자를 위한 단계별 가이드

소개

이 안내서는 우분투 서버에 메일 서버를 설치하고 구성하는 전체 과정을 단계별로 설명합니다. 초보자도 쉽게 따라할 수 있도록 상세한 명령어와 설정 방법을 제공합니다.

메일 서버는 이메일을 송수신하고 저장하는 시스템으로, 개인 또는 기업의 이메일 서비스를 직접 운영할 수 있게 해줍니다. 이 안내서에서는 Postfix와 Dovecot을 사용하여 안정적이고 보안이 강화된 메일 서버를 구축하는 방법을 배우게 됩니다.

1. 메일 서버 개요

1.1 메일 서버란?

메일 서버는 이메일을 송수신하고 저장하는 시스템입니다. 메일 서버는 크게 두 가지 주요 구성 요소로 이루어집니다:

1.2 주요 메일 서버 소프트웨어

Postfix (MTA)

  • 이메일 송수신을 담당
  • SMTP(Simple Mail Transfer Protocol) 프로토콜 사용
  • 외부에서 들어오는 메일을 받고, 외부로 메일을 보내는 역할 수행

Dovecot (MDA)

  • 이메일 클라이언트 접근을 위한 서버
  • POP3, IMAP 프로토콜 지원
  • 사용자가 이메일 클라이언트(Thunderbird, Outlook 등)를 통해 메일을 확인할 수 있게 함

기타 보조 소프트웨어

  • SpamAssassin: 스팸 메일 필터링
  • OpenDKIM: DKIM(DomainKeys Identified Mail) 인증 제공
  • Roundcube: 웹 기반 이메일 클라이언트

1.3 시스템 요구사항

하드웨어

  • CPU: 1-2 코어 이상
  • RAM: 최소 1GB (권장 2GB 이상)
  • 디스크: 최소 10GB (사용자 수와 메일 보관 정책에 따라 증가)

네트워크

  • 고정 IP 주소
  • 포트 개방: 25(SMTP), 465(SMTPS), 587(Submission), 110(POP3), 995(POP3S), 143(IMAP), 993(IMAPS)
  • 역방향 DNS 설정 권장

소프트웨어

  • Ubuntu 22.04 LTS
  • 기본 패키지: postfix, dovecot-imapd, dovecot-pop3d, dovecot-lmtpd

2. 서버 환경 준비

2.1 시스템 업데이트

우분투 서버를 최신 상태로 유지하는 것은 보안과 안정성을 위해 매우 중요합니다:

# 패키지 목록 갱신
sudo apt-get update

# 설치된 패키지 업그레이드
sudo apt-get upgrade -y

2.2 기본 패키지 설치

메일 서버 운영에 필요한 기본 패키지를 설치합니다:

# 기본 유틸리티 설치
sudo apt-get install -y vim curl wget net-tools dnsutils

2.3 호스트네임 및 FQDN 설정

메일 서버는 올바른 호스트네임과 FQDN(Fully Qualified Domain Name) 설정이 중요합니다:

# 호스트네임 설정
sudo nano /etc/hostname

파일 내용을 다음과 같이 설정합니다(예시):

mail.aaa.org

변경사항을 적용합니다:

sudo hostname -F /etc/hostname

/etc/hosts 파일을 편집하여 IP 주소와 호스트네임을 매핑합니다:

sudo nano /etc/hosts

파일 내용을 다음과 같이 설정합니다(예시):

127.0.0.1       localhost
127.0.1.1       mail.aaa.org mail

# 서버의 실제 IP 주소
192.168.1.100   mail.aaa.org mail

중요: 192.168.1.100 부분은 서버의 실제 IP 주소로 변경해야 합니다.

2.4 시스템 시간 설정

메일 서버는 정확한 시간 설정이 중요합니다:

# 타임존 설정
sudo dpkg-reconfigure tzdata

# NTP 설치
sudo apt-get install -y ntp

# NTP 서비스 시작 및 부팅 시 자동 실행 설정
sudo systemctl start ntp
sudo systemctl enable ntp

2.5 방화벽 설정

메일 서버는 여러 포트를 사용하므로 방화벽 설정이 필요합니다:

# UFW 설치
sudo apt-get install -y ufw

# SSH 접속을 위한 포트 허용 (기본 설정)
sudo ufw allow ssh

# 메일 서버 관련 포트 허용
sudo ufw allow 25/tcp    # SMTP
sudo ufw allow 465/tcp   # SMTPS (SSL)
sudo ufw allow 587/tcp   # Submission (TLS)
sudo ufw allow 110/tcp   # POP3
sudo ufw allow 995/tcp   # POP3S (SSL)
sudo ufw allow 143/tcp   # IMAP
sudo ufw allow 993/tcp   # IMAPS (SSL)

# 방화벽 활성화
sudo ufw enable

# 방화벽 상태 확인
sudo ufw status verbose

3. 메일 서버 소프트웨어 설치

3.1 Postfix 설치

Postfix는 메일 전송 에이전트(MTA)로, 이메일을 송수신하는 역할을 합니다:

# Postfix 설치
sudo apt-get install -y postfix

설치 중 다음과 같은 설정을 선택합니다:

3.2 Dovecot 설치

Dovecot은 POP3/IMAP 서버로, 사용자가 이메일을 확인할 수 있게 합니다:

# Dovecot 설치
sudo apt-get install -y dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd

3.3 기타 유용한 패키지 설치

# 메일 유틸리티 설치
sudo apt-get install -y mailutils

# 스팸 필터 설치 (선택 사항)
sudo apt-get install -y spamassassin spamc

# DKIM 설치 (선택 사항)
sudo apt-get install -y opendkim opendkim-tools

4. 도메인 설정

4.1 Postfix 기본 설정

Postfix 구성 파일을 편집합니다:

sudo nano /etc/postfix/main.cf

다음 설정을 추가하거나 수정합니다:

# 기본 설정
myhostname = mail.aaa.org
mydomain = aaa.org
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

# 네트워크 설정
inet_interfaces = all
inet_protocols = ipv4

# 메일박스 설정
home_mailbox = Maildir/
mailbox_command =

참고: mail.aaa.orgaaa.org를 실제 도메인으로 변경하세요.

4.2 Dovecot 기본 설정

Dovecot 메일 형식 설정:

sudo nano /etc/dovecot/conf.d/10-mail.conf

다음 설정을 찾아 수정합니다:

mail_location = maildir:~/Maildir

Dovecot 인증 설정:

sudo nano /etc/dovecot/conf.d/10-auth.conf

다음 설정을 찾아 수정합니다:

disable_plaintext_auth = no
auth_mechanisms = plain login

Dovecot 프로토콜 설정:

sudo nano /etc/dovecot/conf.d/10-master.conf

다음 설정을 찾아 수정합니다:

service auth {
  # Postfix SMTP 인증
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

4.3 서비스 재시작

설정을 적용하기 위해 서비스를 재시작합니다:

sudo systemctl restart postfix
sudo systemctl restart dovecot

5. DNS 레코드 설정

5.1 DNS 레코드 개요

메일 서버가 제대로 작동하려면 다음과 같은 DNS 레코드가 올바르게 구성되어야 합니다:

5.2 Cloudflare에서 DNS 레코드 설정

5.2.1 메일 서버용 A 레코드 설정

  1. Cloudflare 대시보드에 로그인합니다.
  2. aaa.org 도메인을 선택합니다.
  3. "DNS" 탭을 클릭합니다.
  4. "레코드 추가" 버튼을 클릭합니다.
  5. 다음과 같이 설정합니다:
    • 유형: A
    • 이름: mail (메일 서브도메인 생성)
    • IPv4 주소: 귀하의 서버 IP 주소 입력
    • 프록시 상태: DNS만 (회색 구름 아이콘)
    • TTL: 자동

5.2.2 MX 레코드 설정

  1. "레코드 추가" 버튼을 클릭합니다.
  2. 다음과 같이 설정합니다:
    • 유형: MX
    • 이름: @ (루트 도메인을 의미)
    • 메일 서버: mail.aaa.org (앞서 생성한 A 레코드)
    • 우선 순위: 10 (낮은 숫자가 높은 우선순위)
    • TTL: 자동

5.2.3 SPF 레코드 설정

  1. "레코드 추가" 버튼을 클릭합니다.
  2. 다음과 같이 설정합니다:
    • 유형: TXT
    • 이름: @
    • 콘텐츠: v=spf1 ip4:귀하의서버IP a:mail.aaa.org ~all
    • TTL: 자동

5.2.4 DKIM 레코드 설정

1. 서버에서 DKIM 키를 생성합니다:

# OpenDKIM 패키지 설치
sudo apt-get install -y opendkim opendkim-tools

# 키 디렉토리 생성
sudo mkdir -p /etc/opendkim/keys/aaa.org

# 키 생성
sudo opendkim-genkey -D /etc/opendkim/keys/aaa.org/ -d aaa.org -s default

# 권한 설정
sudo chown -R opendkim:opendkim /etc/opendkim/keys

2. 생성된 DKIM 공개 키를 확인합니다:

sudo cat /etc/opendkim/keys/aaa.org/default.txt

3. Cloudflare에서 DKIM 레코드를 추가합니다:

5.2.5 DMARC 레코드 설정

  1. "레코드 추가" 버튼을 클릭합니다.
  2. 다음과 같이 설정합니다:
    • 유형: TXT
    • 이름: _dmarc
    • 콘텐츠: v=DMARC1; p=none; rua=mailto:admin@aaa.org; ruf=mailto:admin@aaa.org; sp=none; ri=86400
    • TTL: 자동

5.3 DNS 레코드 확인

설정한 DNS 레코드가 올바르게 적용되었는지 확인합니다:

# MX 레코드 확인
dig MX aaa.org +short

# A 레코드 확인
dig A mail.aaa.org +short

# SPF 레코드 확인
dig TXT aaa.org +short

# DKIM 레코드 확인
dig TXT default._domainkey.aaa.org +short

# DMARC 레코드 확인
dig TXT _dmarc.aaa.org +short

6. 보안 및 인증 설정

6.1 SSL/TLS 인증서 설정

Let's Encrypt 인증서를 사용하여 메일 서버의 보안을 강화합니다:

# Certbot 설치
sudo apt-get install -y certbot

# 인증서 발급
sudo certbot certonly --standalone --agree-tos --preferred-challenges http \
  --email admin@aaa.org -d mail.aaa.org

6.2 Postfix에 SSL/TLS 인증서 적용

Postfix 구성 파일을 수정하여 발급받은 인증서를 적용합니다:

sudo nano /etc/postfix/main.cf

다음 설정을 추가하거나 수정합니다:

# TLS 설정
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.aaa.org/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.aaa.org/privkey.pem

# 보안 강화 설정
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
smtp_tls_protocols = !SSLv2, !SSLv3

# 암호화 알고리즘 설정
tls_preempt_cipherlist = yes
smtpd_tls_mandatory_ciphers = high
smtpd_tls_ciphers = high
smtpd_tls_exclude_ciphers = aNULL, DES, 3DES, MD5, DES+MD5, RC4

6.3 Dovecot에 SSL/TLS 인증서 적용

Dovecot 구성 파일을 수정하여 발급받은 인증서를 적용합니다:

sudo nano /etc/dovecot/conf.d/10-ssl.conf

다음 설정을 수정합니다:

# SSL/TLS 지원 활성화
ssl = required

# 인증서 및 키 파일 경로
ssl_cert = 

6.4 SMTP 인증 설정

Postfix가 Dovecot SASL을 사용하도록 설정합니다:

sudo nano /etc/postfix/main.cf

다음 설정을 추가하거나 수정합니다:

# SMTP 인증 설정
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname

# 인증된 사용자만 이메일 발송 허용
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination

7. 메일 서버 테스트

7.1 테스트 계정 생성

테스트를 위한 사용자 계정을 생성합니다:

# 테스트 사용자 계정 생성
sudo useradd -m testuser1 -s /bin/bash

# 비밀번호 설정
sudo passwd testuser1

# 메일 디렉토리 생성
sudo mkdir -p /home/testuser1/Maildir/{new,cur,tmp}
sudo chown -R testuser1:testuser1 /home/testuser1/Maildir
sudo chmod -R 700 /home/testuser1/Maildir

7.2 내부 메일 송수신 테스트

명령줄에서 mail 명령을 사용하여 내부 메일 송수신을 테스트합니다:

# mail 명령어 설치 (없는 경우)
sudo apt-get install -y mailutils

# 메일 보내기
echo "테스트 메일 내용입니다." | mail -s "테스트 제목" testuser1@aaa.org

# 메일 확인 (testuser1로 로그인 후)
sudo su - testuser1
mail

7.3 외부 메일 송수신 테스트

Swaks를 사용하여 외부 메일 송신을 테스트합니다:

# Swaks 설치
sudo apt-get install -y swaks

# 외부 메일로 테스트 메일 보내기
swaks --to your.email@gmail.com --from testuser1@aaa.org --server mail.aaa.org \
  --auth-user testuser1 --auth-password 비밀번호 \
  --tls --body "외부 테스트 메일입니다."

7.4 로그 확인

메일 서버 로그를 확인하여 문제를 진단합니다:

# Postfix 로그 확인
sudo tail -f /var/log/mail.log

# Dovecot 로그 확인
sudo tail -f /var/log/dovecot.log

8. 문제 해결 가이드

8.1 메일 송신 문제

SMTP 인증 실패

로그 메시지: "authentication failed"

해결 방법: 사용자 이름과 비밀번호가 올바른지 확인하고, SASL 설정을 점검합니다.

릴레이 거부

로그 메시지: "Relay access denied"

해결 방법: smtpd_recipient_restrictions 설정을 확인하고, 인증된 사용자에게 릴레이 권한이 있는지 확인합니다.

TLS 연결 문제

로그 메시지: "TLS handshake failed"

해결 방법: SSL/TLS 인증서 설정을 확인하고, 인증서가 유효한지 확인합니다.

8.2 메일 수신 문제

DNS 설정 문제

로그 메시지: "Host or domain name not found"

해결 방법: MX 레코드와 A 레코드가 올바르게 설정되어 있는지 확인합니다.

스팸 필터 차단

로그 메시지: "Blocked by SpamAssassin"

해결 방법: SpamAssassin 설정을 확인하고, 필요에 따라 조정합니다.

메일박스 권한 문제

로그 메시지: "Permission denied"

해결 방법: 메일박스 디렉토리의 소유권과 권한을 확인합니다.

8.3 문제 해결 명령어

메일 서버 문제를 진단하는 데 유용한 명령어들입니다:

# 메일 큐 확인
sudo mailq

# 메일 큐 강제 처리
sudo postfix flush

# 메일 큐에서 특정 메일 삭제
sudo postsuper -d [메일ID]

# 모든 메일 큐 삭제
sudo postsuper -d ALL

# Postfix 설정 확인
sudo postconf -n

# Dovecot 설정 테스트
sudo dovecot -n

9. 유지 보수 및 관리

9.1 인증서 자동 갱신 설정

Let's Encrypt 인증서는 90일마다 갱신해야 합니다. 자동 갱신을 위한 cron 작업을 설정합니다:

# crontab 편집
sudo crontab -e

다음 내용을 추가합니다:

# 매일 자정에 인증서 갱신 시도
0 0 * * * certbot renew --quiet --post-hook "systemctl reload postfix dovecot"

9.2 시스템 업데이트 자동화

보안 업데이트를 자동으로 설치하도록 설정합니다:

sudo apt-get install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

9.3 백업 설정

메일 서버 데이터를 정기적으로 백업합니다:

# 백업 스크립트 생성
sudo nano /usr/local/bin/backup-mail.sh

다음 내용을 추가합니다:

#!/bin/bash
BACKUP_DIR="/var/backups/mail"
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR

# 설정 파일 백업
tar -czf $BACKUP_DIR/mail-config-$DATE.tar.gz /etc/postfix /etc/dovecot /etc/opendkim

# 메일 데이터 백업
tar -czf $BACKUP_DIR/mail-data-$DATE.tar.gz /home/*/Maildir

# 오래된 백업 삭제 (30일 이상)
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

스크립트에 실행 권한을 부여합니다:

sudo chmod +x /usr/local/bin/backup-mail.sh

cron 작업으로 정기 백업을 설정합니다:

sudo crontab -e

다음 내용을 추가합니다:

# 매일 새벽 3시에 메일 서버 백업
0 3 * * * /usr/local/bin/backup-mail.sh

결론

이 안내서를 통해 우분투 서버에 Postfix와 Dovecot를 사용한 메일 서버를 설치하고 구성하는 방법을 배웠습니다. 메일 서버는 지속적인 관리와 모니터링이 필요하므로, 정기적으로 로그를 확인하고 보안 업데이트를 적용하는 것이 중요합니다.

메일 서버 운영에 관한 추가 질문이나 문제가 있으면 관련 문서를 참조하거나 커뮤니티에 도움을 요청하세요.

참고 자료