Linux 로그 경로 정리 · 15/50 · Part 2. RHEL / Rocky Linux 로그 경로
선행 학습 → 14. /var/log/cron 분석
이번 글 → /var/log/maillog 분석
이어서 → 16. /var/log/boot.log 분석
메일 서버는 외부에 직접 노출되는 서비스입니다. 계정이 탈취되면 스팸·피싱 발송 경유지가 되고, 서버 IP가 블랙리스트에 올라 업무 메일 전체가 막힙니다. /var/log/maillog 는 이런 악용을 가장 먼저 보여주는 로그입니다.
핵심 요약
- Postfix 로그는 Queue ID 하나로 수신 → 큐 → 발송 전 과정을 묶는다.
- 보안 신호:
SASL LOGIN authentication failed,Relay access denied, 급증하는status=sent/deferred- 경로: Rocky
/var/log/maillog· Ubuntu/var/log/mail.log(+mail.err)
| Postfix 구성요소 | 로그 태그 | 역할 |
|---|---|---|
| smtpd | postfix/smtpd[PID] | 외부 연결 수신, 인증(SASL), 수신 거부 |
| cleanup | postfix/cleanup | 메시지 헤더 정리, message-id 부여 |
| qmgr | postfix/qmgr | 큐 관리 (from=<>, size, nrcpt) |
| smtp | postfix/smtp | 외부로 발송, 결과 status=sent/deferred/bounced |
| local | postfix/local | 로컬 메일함 배달 |

외부 클라이언트 ──▶ smtpd (connect, SASL 인증) ──Queue ID 발급: 3F2A1C0B7E
↓
cleanup (message-id)
↓
qmgr (from=, size=, nrcpt=)
↓
smtp / local (to=, relay=, status=)
↓
syslog(mail) ──▶ journald ──▶ rsyslog mail.* ──▶ /var/log/maillog (sync)
| 항목 | Rocky / RHEL | Ubuntu / Debian |
|---|---|---|
| 메일 로그 | /var/log/maillog | /var/log/mail.log |
| 오류 전용 | — | /var/log/mail.err (mail.err 규칙) |
| 설정 | /etc/postfix/main.cf | 동일 |
| journald | journalctl -u postfix | 동일 |
Postfix가 설치되지 않은 서버에서는
maillog가 비어 있거나 없습니다. Rocky 9 최소 설치에는 Postfix가 기본 포함되지 않을 수 있으므로rpm -q postfix로 먼저 확인합니다.
rpm -q postfix 2>/dev/null || dpkg -l postfix 2>/dev/null | tail -1
M=/var/log/maillog # Ubuntu: /var/log/mail.log
# SASL 인증 실패 IP (SMTP 계정 무차별 대입)
grep 'SASL .* authentication failed' $M | grep -oE '\[[0-9.]+\]' | sort | uniq -c | sort -rn | head
# 릴레이 거부 (오픈 릴레이 시도)
grep 'Relay access denied' $M | grep -oE 'from [^ ]+\[[0-9.]+\]' | sort | uniq -c | sort -rn | head
# 인증 성공 계정별 발송량 (탈취 계정 대량 발송 탐지)
grep 'sasl_username=' $M | grep -oE 'sasl_username=[^ ,]+' | sort | uniq -c | sort -rn | head
# Queue ID 로 한 통의 메일 전체 추적
QID=$(grep -m1 -oE ': [0-9A-F]{10,}:' $M | tr -d ': ')
grep "$QID" $M

위 이미지는 Rocky Linux 9.8 실습 환경의 실제 실행 결과로, maillog의 존재 여부와 구조를 확인한 화면입니다.
아래는 Postfix 형식을 설명하기 위한 예시 로그입니다(실제 시스템 출력 아님).
[예시 로그]
Sep 20 03:10:02 mail01 postfix/smtpd[5120]: warning: unknown[198.51.100.77]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
Sep 20 03:12:40 mail01 postfix/smtpd[5188]: 3F2A1C0B7E: client=unknown[198.51.100.77], sasl_method=LOGIN, sasl_username=sales01
Sep 20 03:12:40 mail01 postfix/qmgr[1022]: 3F2A1C0B7E: from=<sales01@example.com>, size=4812, nrcpt=48 (queue active)
Sep 20 03:12:42 mail01 postfix/smtp[5190]: 3F2A1C0B7E: to=<a@example.net>, relay=mx.example.net[192.0.2.25]:25, status=sent (250 OK)
Sep 20 03:13:05 mail01 postfix/smtpd[5201]: NOQUEUE: reject: RCPT from unknown[203.0.113.9]: 554 5.7.1 <x@example.org>: Relay access denied
| 필드 | 값 | 해석 |
|---|---|---|
| Queue ID | 3F2A1C0B7E | 한 메시지의 전 과정 연결 키 |
| client | unknown[198.51.100.77] | 역방향 DNS 없는 외부 IP |
| sasl_username | sales01 | 인증 성공 계정 — 직전 실패 IP와 같다면 탈취 의심 |
| nrcpt | 48 | 수신자 수 — 평소 대비 급증 여부 |
| status | sent / deferred / bounced | 대량 deferred/bounced 는 스팸 발송 징후 |
| NOQUEUE reject | Relay access denied | 서버가 올바르게 거부 (정상 방어 흔적) |
| 정상 | 의심 |
|---|---|
| 업무시간, 계정별 일정 발송량 | 새벽 시간대 특정 계정 대량 발송 |
| 드문 SASL 실패 | 한 IP의 반복 SASL 실패 → 성공 |
Relay access denied 소량 | 릴레이 허용(status=sent)된 외부→외부 메일 |
bounced 소량 | 대량 bounced (존재하지 않는 수신자에게 스팸) |
sasl_username 로그인 출발지 IP 확인.postqueue -p 확인 후 postsuper), 블랙리스트 등재 여부 확인.[ ] Postfix 설치 여부 확인
[ ] 배포판별 메일 로그 경로 확인
[ ] SASL 인증 실패 IP 집계
[ ] 계정별 발송량 집계
[ ] Queue ID 로 메시지 전 과정 추적
[ ] 정상 거부(NOQUEUE reject)와 침해 신호 구분
Relay access denied 는 방어가 동작한 정상 흔적이다.maillog, Ubuntu는 mail.log + mail.err 를 본다.| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 14. /var/log/cron 분석 |
| ▶ 다음 글 | 16. /var/log/boot.log 분석 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |