/엔지니어/보안 설정/rsyslog로 로그 중앙화 — 원격 수집과 필터링
보안 설정중급UbuntuDebianCentOSrsyslog로그중앙화syslog

rsyslog로 로그 중앙화 — 원격 수집과 필터링

rsyslog로 여러 서버의 로그를 중앙 서버에 수집하고, 필터링·파싱·전달 규칙을 설정하며, Elasticsearch·파일로 로그를 라우팅하는 방법을 설명합니다.

rsyslog 구조

CODE
[원격 서버들] → rsyslog (UDP/TCP 514) → [중앙 로그 서버]
                                              ↓
                                    /var/log/ 또는 DB/ES

설치 및 기본 설정

Bash
sudo apt install -y rsyslog rsyslog-elasticsearch

# 상태 확인
sudo systemctl status rsyslog

# 설정 파일
/etc/rsyslog.conf                  # 메인 설정
/etc/rsyslog.d/*.conf              # 추가 설정 (여기서 관리 권장)

중앙 로그 서버 설정 (수신)

Bash
# /etc/rsyslog.d/00-server.conf

# UDP 514 수신 활성화
module(load="imudp")
input(type="imudp" port="514")

# TCP 514 수신 (신뢰성 높음)
module(load="imtcp")
input(type="imtcp" port="514")

# 원격 호스트별 파일 분리 저장
template(name="RemoteLog" type="string"
  string="/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log")

*.* ?RemoteLog
Bash
# 방화벽 허용
sudo ufw allow 514/udp
sudo ufw allow 514/tcp

sudo systemctl restart rsyslog

클라이언트 서버 설정 (전송)

Bash
# /etc/rsyslog.d/50-remote.conf

# UDP로 전송
*.* @192.168.1.100:514

# TCP로 전송 (더 신뢰성 높음, @@ 사용)
*.* @@192.168.1.100:514

# 큐 사용 (서버 다운 시 로컬 보관 후 재전송)
action(type="omfwd"
  target="192.168.1.100"
  port="514"
  protocol="tcp"
  action.resumeRetryCount="100"
  queue.type="linkedList"
  queue.size="10000"
  queue.filename="remote-fwd"
  queue.maxDiskSpace="1g"
  queue.saveOnShutdown="on")

필터링 규칙

Bash
# 우선순위(severity) 기준 필터
# auth.* → SSH, sudo 등 인증 로그
# kern.* → 커널 로그
# *.emerg → 긴급 메시지 모두

# /etc/rsyslog.d/10-filters.conf

# 보안 로그 별도 파일
auth,authpriv.*                /var/log/auth.log

# 에러 이상만 중앙 서버로
*.err                          @@192.168.1.100:514

# 특정 프로그램 로그
:programname, isequal, "nginx" /var/log/nginx-syslog.log

# 특정 문자열 포함
:msg, contains, "CRITICAL"    /var/log/critical.log

# 특정 호스트
:fromhost-ip, isequal, "10.0.0.5" /var/log/specific-host.log

애플리케이션 로그를 syslog로 전송

Bash
# logger 명령으로 테스트
logger -p local0.info "Test message from myapp"
logger -p auth.warning "Failed login attempt" -t myapp

# 앱에서 syslog 사용 (Python)
import logging, logging.handlers
handler = logging.handlers.SysLogHandler(address='/dev/log')
handler.setFormatter(logging.Formatter('myapp: %(message)s'))
logging.getLogger().addHandler(handler)
logging.warning("Something went wrong")

로그 로테이션 설정

CODE
# /etc/logrotate.d/remote-logs
/var/log/remote/*/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    sharedscripts
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

설정 검증

Bash
# 설정 문법 검사
sudo rsyslogd -N1

# 재시작 없이 설정 재로드
sudo kill -HUP $(cat /var/run/rsyslogd.pid)
sudo systemctl reload rsyslog

# 동작 확인
logger "test message"
tail -f /var/log/syslog
#rsyslog#로그중앙화#syslog#모니터링#보안#logging
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

관련 공식 문서OWASP 공식 문서

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.