이전 편을 먼저 읽어보세요
이 글은 "리눅스에서 메일 서버 구축하기" 시리즈의 일곱 번째 글입니다.
이전 편에서 Dovecot과 PostgreSQL을 연동하여 사용자 인증을 설정하는 방법을 다루었습니다.
아직 확인하지 않았다면 먼저 읽어보는 것을 추천합니다.
👉 이전 편: Dovecot의 auth-sql.conf.ext 설정과 비밀번호 해싱


Postfix 설정 파일 구조

Postfix는 메일 전송을 담당하는 SMTP 서버로, 다양한 설정 파일을 사용하여 동작을 조정합니다.
이 글에서는 Postfix의 설정 파일 구조와 주요 역할을 설명합니다.

Postfix Configuration Diagram

Postfix 주요 설정 파일

파일명 역할
/etc/postfix/main.cf Postfix의 주요 설정 파일 (메일 전송, 네트워크 설정 등)
/etc/postfix/master.cf Postfix 서비스 관리 (SMTP, LMTP, SASL 인증 등)
/etc/postfix/virtual 가상 사용자(도메인) 매핑
/etc/postfix/aliases 시스템 사용자 이메일 별칭 관리
/etc/postfix/transport 특정 도메인/주소에 대한 메일 전송 경로 지정
/etc/postfix/relay_domains 릴레이 허용 도메인 설정
/etc/postfix/sasl_passwd SMTP 릴레이 서버 인증 정보 저장
/etc/postfix/sql/*.cf 데이터베이스 연동 설정 파일 (PostgreSQL)

Postfix 주요 설정 항목 (main.cf)

Postfix의 동작을 정의하는 주요 설정을 살펴보겠습니다. 파일의 위치는 /etc/postfix/main.cf 입니다.

1️⃣ 기본적인 메일 서버 설정

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
  • myhostname → 메일 서버의 호스트명
  • mydomain → 기본 도메인 설정
  • inet_interfaces → 모든 네트워크 인터페이스에서 메일을 수신하도록 설정
  • inet_protocols → IPv4만 사용 (IPv6 비활성화 가능)

2️⃣ 메일 릴레이 제한

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
  • permit_mynetworks → 신뢰할 수 있는 네트워크에서 릴레이 허용
  • permit_sasl_authenticated → SASL 인증된 사용자만 메일 릴레이 가능
  • defer_unauth_destination → 인증되지 않은 외부 릴레이 차단

3️⃣ 가상 사용자 및 데이터베이스 연동

Postfix가 PostgreSQL을 사용하여 가상 도메인과 메일박스를 관리하려면, 다음 설정을 추가해야 합니다.

virtual_mailbox_domains = pgsql:/etc/postfix/sql/virtual_domains.cf
virtual_mailbox_maps = pgsql:/etc/postfix/sql/virtual_mailboxes.cf
virtual_alias_maps = pgsql:/etc/postfix/sql/virtual_aliases.cf

🔹 설명
- virtual_mailbox_domains → 수신 가능한 가상 도메인을 데이터베이스에서 조회
- virtual_mailbox_maps → 사용자 메일박스 정보를 데이터베이스에서 조회
- virtual_alias_maps → 이메일 별칭을 데이터베이스에서 조회

💡 MySQL을 사용하는 경우
pgsql: 대신 mysql:을 사용하면 됩니다.

💡 대규모 트래픽 환경에서는 proxy:pgsql:을 사용하는 것이 성능 면에서 유리할 수 있습니다. 하지만 일반적인 환경에서는 proxy: 없이도 충분히 동작합니다.


Postfix가 데이터베이스를 사용하도록 설정하기

Postfix가 PostgreSQL을 사용하려면 관련 패키지를 설치해야 합니다.

sudo apt update
sudo apt install postfix postfix-pgsql
  • postfix → 기본적인 Postfix SMTP 서버
  • postfix-pgsql → Postfix가 PostgreSQL과 연동할 수 있도록 하는 패키지

설치가 완료되면, Postfix가 PostgreSQL에서 사용자 정보를 가져오도록 설정 파일을 작성해야 합니다.


Postfix 데이터베이스 연동 설정 (virtual_*.cf 파일 작성)

Postfix는 virtual_domains.cf, virtual_mailboxes.cf, virtual_aliases.cf 파일을 사용하여 데이터베이스에서 정보를 조회합니다.
이 파일들은 직접 생성해야 하며, 아래 내용을 참고하여 작성하면 됩니다.

1️⃣ /etc/postfix/sql/virtual_domains.cf (도메인 조회 설정)

user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT domain_name FROM mail_domain WHERE domain_name='%s' AND active=true

설명

user → PostgreSQL 사용자 계정 (postfix 가 DB에 접근할 수있도록 DB에 사용자를 미리만들어 두세요.) password → PostgreSQL 계정 비밀번호 (미리 만들어둔 DB 유저 mailadmin의 DB 계정비밀번호) dbname → 데이터베이스 이름 hosts → 데이터베이스 서버 주소 (로컬 서버 사용) query → mail_domain 테이블에서 수신 가능 도메인 조회

2️⃣ /etc/postfix/sql/virtual_mailboxes.cf (메일박스 조회 설정)

user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT home_directory FROM mail_users WHERE email='%s'

설명

query → 사용자의 메일 저장 경로를 조회 (mail_users 테이블에서 home_directory 필드 반환) Postfix가 사용자의 메일을 올바른 디렉터리에 저장하도록 경로를 반환함

3️⃣ /etc/postfix/sql/virtual_aliases.cf (이메일 별칭 조회 설정)

user = mailadmin
password = yourpassword
dbname = mail
hosts = 127.0.0.1
query = SELECT destination_email FROM mail_alias WHERE source_email='%s'

설명

query → 별칭이 있는 경우, 실제로 메일이 전달될 대상 이메일을 조회 mail_alias 테이블을 참조하여 별칭이 등록된 이메일을 찾아서 반환


보안 설정

이 설정 파일들은 비밀번호가 포함되어 있으므로 권한을 제한해야 합니다.

sudo chmod 640 /etc/postfix/sql/virtual_*.cf
sudo chown root:postfix /etc/postfix/sql/virtual_*.cf

🔒 보안 주의사항:

비밀번호가 포함된 설정 파일이므로 다른 사용자들이 읽을 수 없도록 권한을 제한해야 합니다. chmod 640을 적용하여 Postfix 프로세스(postfix 그룹)만 접근 가능하도록 설정합니다.


Postfix 설정을 다시 로드

설정이 완료되면 Postfix를 다시 로드하여 변경 사항을 반영해야 합니다.

sudo systemctl restart postfix

정리 및 다음 단계

Postfix 설정 파일 구조 및 역할 설명
Postfix의 main.cf에서 주요 설정 추가
Postfix가 PostgreSQL과 연동되도록 virtual_*.cf 파일 설정

다음 편에서는 Postfix와 Dovecot을 연동하여 SMTP 인증을 구성하는 방법을 다룰 예정입니다.
이를 통해 메일 서버가 송수신 기능을 완전히 갖추도록 설정할 계획입니다.

👉 다음 편: Postfix와 Dovecot 연동 및 SMTP 인증 (Coming Soon!)