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")
*.* ?RemoteLogBash
# 방화벽 허용
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편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
관련 공식 문서OWASP 공식 문서 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.