Linux 로그 경로 정리 · 34/50 · Part 4. journald / rsyslog / auditd
선행 학습 → 31. systemd-journald 이해 · 08. Syslog의 Facility와 Severity
이번 글 → rsyslog 구조 이해
이어서 → 35. rsyslog 설정 파일 분석
journald가 "모으는 곳"이라면 rsyslog는 "나눠서 보내는 곳" 입니다. /var/log/secure 같은 텍스트 파일, 중앙 로그 서버 전송, 필터링이 모두 rsyslog의 일입니다. 구조를 알아야 "왜 파일에 로그가 안 쌓이지?"와 "공격자가 무엇을 바꾸면 로그가 사라지나?"에 답할 수 있습니다.
핵심 요약
- rsyslog = 입력(im) → 규칙(selector/RainerScript) → 출력(om) 파이프라인
- RHEL 9:
imjournal(저널에서 읽기) +imuxsock소켓 off / Ubuntu:imuxsock+imklog중심(환경별)- 출력 액션마다 큐를 둘 수 있어 원격 서버 장애 시에도 유실을 줄인다.
| 단계 | 모듈 | 역할 |
|---|---|---|
| 입력 | imjournal | journald 저널을 읽어 가져옴 (RHEL 기본) |
| 입력 | imuxsock | 로컬 소켓 /dev/log 수신 |
| 입력 | imklog | 커널 로그 수신 |
| 입력 | imudp / imtcp / imrelp | 원격 수신 (중앙 서버 역할) |
| 처리 | selector (authpriv.*), RainerScript (if $programname == 'sshd') | 분류·필터 |
| 출력 | omfile | 파일 기록 |
| 출력 | omfwd | 원격 전송 (UDP/TCP) |
| 출력 | omrelp | RELP 신뢰 전송 |
| 출력 | omusrmsg | 로그인 사용자 터미널 알림 (*.emerg) |
| 큐 | main queue / action queue | 버퍼링, 디스크 보조 큐 |

Application
↓ syslog() API
/dev/log ──┐ ┌── imjournal (RHEL 9 기본 입력)
├──▶ systemd-journald ──┤
kernel ────┘ └── (Ubuntu: imuxsock/imklog 등 환경별)
↓
rsyslog main queue
↓
rules (facility.severity / RainerScript)
┌────────────┬───────┴──────┬──────────────┐
omfile omfile omfwd omusrmsg
/var/log/secure /var/log/messages →중앙 서버 터미널
/etc/rsyslog.conf 메인 설정 (RHEL 은 규칙까지 여기에)
/etc/rsyslog.d/*.conf 추가 설정 (Ubuntu 규칙 50-default.conf, 원격 전송 설정 위치)
/var/lib/rsyslog/ 작업 디렉터리 (imjournal.state = 저널 읽기 위치, 큐 파일)
/usr/lib64/rsyslog/ (RHEL), /usr/lib/x86_64-linux-gnu/rsyslog/ (Ubuntu) 모듈
imjournal.state 의미: rsyslog가 저널의 어디까지 읽었는지 저장합니다. rsyslog가 중지됐다가 재시작하면 이 위치부터 이어 읽으므로, 중지 기간의 로그가 나중에 파일에 기록될 수 있습니다(저널이 그 사이 유지된 경우).
rsyslogd -v | head -2
systemctl status rsyslog --no-pager | head -5
# 입력 모듈 확인
grep -nE 'module\(load="im|\$ModLoad' /etc/rsyslog.conf /etc/rsyslog.d/*.conf 2>/dev/null
# 출력 액션 (파일 / 전송)
grep -nE 'omfile|omfwd|omrelp|@@?[a-zA-Z0-9]' /etc/rsyslog.conf /etc/rsyslog.d/*.conf 2>/dev/null
# 설정 문법 검증 (설정 변경 전후 필수)
rsyslogd -N1
# 상태 파일 / 큐 파일
ls -la /var/lib/rsyslog/

위 이미지는 Rocky Linux 9.8 실습 환경에서 rsyslog 상태와 문법 검사를 실제로 실행한 결과입니다.
실습 환경의 Rocky 9.8 /etc/rsyslog.conf 에서 확인한 입력 구성(실제 파일 내용 발췌):
module(load="imuxsock" SysSock.Use="off")
module(load="imjournal" UsePid="system" FileCreateMode="0644" StateFile="imjournal.state")
include(file="/etc/rsyslog.d/*.conf" mode="optional")
rsyslog 속성(property)은 규칙·템플릿에서 필드처럼 쓰입니다.
| 속성 | 의미 | 활용 |
|---|---|---|
$programname | 태그 (sshd) | 프로그램별 분리 |
$syslogfacility-text | facility | 분류 |
$syslogseverity-text | severity | 필터 |
$hostname / $fromhost-ip | 호스트 / 실제 전송 IP | 중앙 서버에서 출처 검증 |
$msg | 메시지 | 키워드 필터 |
$hostname 은 메시지 안의 값(위조 가능), $fromhost-ip 는 실제 연결 IP입니다. 중앙 서버에서는 후자로 출처를 검증합니다.
| 정상 | 의심 |
|---|---|
| 기본 입력 모듈 | 입력 모듈 주석 처리 → 파일 로그 전면 중단 |
| 인증 규칙 존재 | authpriv 규칙 제거, & stop / ~ (discard) 추가 |
| 전송 설정 유지 | 원격 전송 액션 삭제·주석 |
rsyslogd -N1 정상 | 설정 파일 mtime이 사고 시간대 |
stop 규칙 예: if $programname == 'sshd' then stop 한 줄이면 sshd 로그가 파일·원격 모두에서 사라집니다(저널에는 남음). 공격자의 로그 은폐 기법으로 쓰일 수 있어 설정 파일 무결성 감시가 필요합니다.
/etc/rsyslog.conf, /etc/rsyslog.d/ 감시 + audit -w /etc/rsyslog.d -p wa -k rsyslog_conf.rsyslogd -N1, 설정 변경 시각, 저널 비교.[ ] 입력 → 규칙 → 출력 → 큐 구조 설명
[ ] RHEL / Ubuntu 입력 모듈 차이 확인
[ ] 출력 액션(omfile/omfwd) 목록 확인
[ ] rsyslogd -N1 문법 검증
[ ] imjournal.state 의 의미 설명
[ ] stop/discard 규칙을 이용한 은폐 위험 설명
$fromhost-ip 는 위조할 수 없는 실제 출처다.stop)로 특정 로그를 숨길 수 있으므로 설정 무결성을 감시한다.rsyslogd -N1 로 검증한다.| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 33. journalctl 시간·서비스·우선순위 필터링 |
| ▶ 다음 글 | 35. rsyslog 설정 파일 분석 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |