콘텐츠로 이동






Centos에서 POSTFIX설치하기

back

소개

CentOS 6은 RHEL 6 계열과 마찬가지로 Postfix와 Sendmail을 모두 제공하며, Postfix가 기본 MTA(Mail Transfer Agent)로 구성되어 있다.

단, 시스템에 Sendmail이 설치되어 있거나 기본 MTA 선택이 변경된 경우가 있으므로, 실제 사용 중인 MTA는 다음 명령으로 확인한다.

# alternatives --config mta

CentOS 6은 이미 지원이 종료된 운영체제이므로, 새로운 운영 환경에서는 지원 중인 RHEL 계열 배포판 또는 다른 최신 Linux 배포판을 사용한다.

작업 절차

1. 현재 MTA 확인

현재 시스템에서 기본 MTA를 확인한다.

# alternatives --config mta

Postfix와 Sendmail이 모두 설치된 경우 Postfix를 선택할 수 있다.

# alternatives --set mta /usr/sbin/sendmail.postfix

시스템 환경에 따라 다음 경로를 사용할 수도 있다.

# alternatives --set mta /usr/sbin/postfix

사용 가능한 alternative 이름은 시스템마다 다를 수 있으므로, 먼저 alternatives --config mta 출력 결과를 확인한다.

2. Sendmail 제거

Sendmail을 사용하지 않을 경우 패키지를 제거한다.

# yum erase -y sendmail

Sendmail 제거 전, 해당 서버에서 Sendmail 전용 설정이나 애플리케이션 의존성이 없는지 확인한다.

3. Postfix 및 SASL 패키지 설치

Postfix와 SMTP 인증에 필요한 Cyrus SASL 패키지를 설치한다.

# yum install -y postfix cyrus-sasl cyrus-sasl-plain cyrus-sasl-lib cyrus-sasl-md5

/etc/postfix/main.cf 파일을 수정한다.

# vi /etc/postfix/main.cf

기본적인 내부 발송 및 수신 서버 설정 예시는 다음과 같다.

# 메일 서버의 FQDN
myhostname = mail.example.com

# 메일 주소에 사용할 기본 도메인
mydomain = example.com

# 로컬 사용자가 메일을 보낼 때 사용할 발신 도메인
myorigin = $mydomain

# 이 서버가 최종 수신할 도메인
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# SMTP 연결을 수신할 인터페이스
inet_interfaces = all

# IPv4만 사용하는 환경의 예시
inet_protocols = ipv4

# SMTP relay를 허용할 신뢰 네트워크
mynetworks = 127.0.0.0/8, 192.168.0.0/24

# SMTP AUTH 활성화
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous

# 인증된 사용자와 mynetworks에만 relay 허용
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination
  • myhostname은 메일 서버의 FQDN이다. 예: mail.example.com
  • mydomain은 메일 서비스에 사용할 도메인이다. 예: example.com
  • mynetworks에 포함된 IP 또는 네트워크는 SMTP relay가 허용된다.
  • mynetworks를 직접 지정한 경우 mynetworks_style은 설정하지 않아도 된다.
  • inet_interfaces는 SMTP 서비스를 수신할 네트워크 인터페이스를 결정한다.
  • Open relay 방지는 mynetworksreject_unauth_destination 정책으로 제어한다.

mynetworks = 0.0.0.0/0처럼 모든 IP 대역을 신뢰 네트워크로 등록하면 Open relay가 될 수 있으므로 절대 사용하지 않는다.

4. Cyrus SASL 설정

SMTP AUTH에 Cyrus SASL과 saslauthd를 사용할 경우 설정 파일을 작성한다.

# vi /etc/sasl2/smtpd.conf

다음 내용을 설정한다.

pwcheck_method: saslauthd
mech_list: plain login

SASL 설정 파일의 실제 위치는 패키지 및 아키텍처에 따라 다를 수 있다. 다음 명령으로 파일 경로를 확인한다.

# rpm -ql cyrus-sasl | grep smtpd.conf

5. 설정 검증 및 서비스 시작

Postfix 설정 문법과 적용된 설정을 확인한다.

# postfix check
# postconf -n

Postfix와 saslauthd를 부팅 시 자동 시작하도록 설정한다.

# chkconfig postfix on
# chkconfig saslauthd on

인증 서비스를 먼저 시작한 후 Postfix를 시작한다.

# service saslauthd start
# service postfix start

서비스 상태를 확인한다.

# service saslauthd status
# service postfix status

SMTP 포트 리슨 상태를 확인한다.

# netstat -lntp | grep :25

6. 기본 Trouble Shooting

디렉터리 구조

Postfix의 큐 디렉터리는 일반적으로 다음 경로에 위치한다.

/var/spool/postfix

주요 큐 디렉터리는 다음과 같다.

디렉터리 설명
incoming 새로 수신되어 큐 관리자가 처리하기 전의 메시지
active 현재 배달을 시도 중인 메시지
deferred 일시적인 오류로 배달이 지연되어 재시도 대기 중인 메시지
hold 관리자가 보류한 메시지
bounce 반송 처리 관련 정보
corrupt 손상된 것으로 판단된 큐 파일

corrupt는 단순히 배달에 실패한 메일을 보관하는 디렉터리가 아니다. 일반적인 일시적 배달 실패 메일은 deferred 디렉터리에서 관리된다.

로그와 로컬 메일함

CentOS/RHEL 계열에서 Postfix 로그는 일반적으로 다음 파일에 기록된다.

/var/log/maillog

실시간 로그를 확인한다.

# tail -f /var/log/maillog

특정 발신자·수신자·큐 ID를 기준으로 로그를 검색할 수 있다.

# grep "user@example.com" /var/log/maillog
# grep "큐ID" /var/log/maillog

기본 로컬 전송 설정에서는 사용자별 메일함이 다음 경로에 생성될 수 있다.

/var/spool/mail/<계정명>

단, 실제 메일 저장 경로는 Postfix의 home_mailbox, mail_spool_directory, 가상 메일박스 구성 여부 및 Dovecot 설정에 따라 달라질 수 있다.

Queue 관리

현재 메일 큐를 확인한다.

# mailq

또는 다음 명령을 사용할 수 있다.

# postqueue -p

큐의 메시지에 대해 즉시 재전송을 시도한다.

# postfix flush

또는 다음 명령을 사용한다.

# postqueue -f

postfix flush는 메일을 삭제하는 명령이 아니라, 현재 큐에 있는 메일의 즉시 배달을 시도하는 명령이다.

특정 Queue ID의 메일을 삭제한다.

# postsuper -d <Queue_ID>

지연 전송 상태의 메시지만 모두 삭제한다.

# postsuper -d ALL deferred

모든 큐 메일을 삭제한다.

# postsuper -d ALL

postsuper -d ALL은 모든 대기 메일을 영구 삭제하므로, 반드시 mailq 또는 postqueue -p로 원인을 확인한 뒤 사용한다.

7. 가상 별칭 도메인 설정

가상 별칭 도메인은 별도 메일박스를 생성하지 않고, 특정 도메인으로 수신된 메일을 로컬 사용자 또는 다른 주소로 전달하는 용도다.

/etc/postfix/main.cf 파일에 가상 별칭 도메인과 맵을 설정한다.

# vi /etc/postfix/main.cf
virtual_alias_domains = example.com test.com
virtual_alias_maps = hash:/etc/postfix/virtual

가상 별칭 테이블을 작성한다.

# vi /etc/postfix/virtual

예시는 다음과 같다.

postmaster@example.com    postmaster
info@example.com          joe
sales@example.com         jane
  • 왼쪽: 수신할 가상 메일 주소
  • 오른쪽: 전달할 로컬 사용자 계정 또는 다른 메일 주소

예를 들어 다음 설정은 info@example.com으로 수신한 메일을 로컬 계정 joe에게 전달한다.

info@example.com          joe

8. 가상 별칭 맵 적용

가상 별칭 테이블을 DB 파일로 생성한다.

# postmap /etc/postfix/virtual

명령 실행 후 /etc/postfix/virtual.db 파일이 생성된다.

설정을 적용한다.

# postfix check
# service postfix reload

가상 별칭 설정을 변경할 때마다 다음 순서로 반영한다.

# postmap /etc/postfix/virtual
# service postfix reload






작성일: 2026년 7월 15일 ,  마지막 업데이트: 2026년 8월 13일