Syslog 단방향 TLS 설정 가이드

본 문서는 평문으로 노출되는 syslog 트래픽을 RFC 5425 기반 TLS 채널로 안전하게 전환하기 위한 단방향 TLS 구축 가이드입니다.

단방향 TLS는 클라이언트가 서버 인증서만 검증하는 구성이며, 일반 운영 환경에서 가장 보편적으로 사용됩니다.

내용 중 수정이 필요한 부분이나 추가 의견이 있으시면 언제든 피드백 부탁드립니다.

유의사항

  • 본 가이드는 분석노드 단일 구성에서 syslog 수신측을 로그프레소로 두는 환경 기준으로 작성되었습니다.

  • TLS syslog 표준 포트는 RFC 5425에 따라 TCP 6514를 사용합니다.

  • 인증서 생성·테스트는 openssl 설치가 필요합니다.

    # openssl version
    OpenSSL 3.5.1 1 Jul 2025 (Library: OpenSSL 3.5.1 1 Jul 2025)
    
    
  • CA 개인키는 로그프레소 서버 외부로 절대 유출되지 않도록 권한 관리가 필요합니다.

  • 클라이언트에는 CA 공개 인증서(.pem)만 배포하시기 바랍니다.

  • 로그프레소 패키지 경로는 /opt/logpresso/ 로 가정하며, /opt/logpresso/tls-ca 폴더 내 인증서 저장을 기준으로 가이드를 작성하였습니다.

  • 방화벽에서 6514 포트를 개방하고 LISTEN 상태 확인 후 하기 작업 부탁드립니다.


평문 syslog 노출 문제 재현

  • TLS 적용의 필요성을 먼저 평문 송신 결과로 확인합니다.

  • 송신측에서 logger로 메시지를 보내고 같은 호스트에서 tcpdump로 캡처하면 메시지 본문이 그대로 노출됩니다.

    # logger -n 127.0.0.1 -P 514 -d "test syslog message from local"
    
    
    # tcpdump -nni any -A port 514
    tcpdump: data link type LINUX_SLL2
    dropped privs to tcpdump
    tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
    listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
    18:01:17.822067 lo    In  IP 127.0.0.1.50551 > 127.0.0.1.514: SYSLOG user.notice, length: 146
    E.....@.@.F..........w......<13>1 2026-05-11T18:01:17.822012+09:00 CONTROL root - - [timeQuality tzKnown="1" isSynced="1" syncAccuracy="20166"] test syslog message from local
    
    

인증서 생성

  1. 사설 CA 인증서 및 키 생성(CA)

    • 실행 중 PEM 비밀번호 및 Subject 정보(국가, 조직, CN 등)를 입력합니다.

    • days 36500은 100년 유효 기간 예시이며, 운영 정책에 맞게 조정하시기 바랍니다.

    # cd /opt/logpresso/tls-ca
    # openssl req -new -x509 -keyout sonar-tls-ca-key.pem -out sonar-tls-ca.pem -days 36500
    (..중략..)
    Enter PEM pass phrase: logpresso1! (패스워드 입력)
    Verifying - Enter PEM pass phrase: logpresso1! (패스워드 입력)
    
    (..중략..)
    Country Name (2 letter code) [XX]: KR (예시)
    State or Province Name (full name) []: Seoul (예시)
    Locality Name (eg, city) [Default City]: Seoul (예시)
    Organization Name (eg, company) [Default Company Ltd]: MyCompany (회사명/예시)
    Organizational Unit Name (eg, section) []: Security (부서명/예시)
    Common Name (eg, your name or your server's hostname) []: 192.168.0.100 (로그프레소 리얼IP 기입/예시)
    Email Address []: ENTER로 넘어가기(필요에 따라 기입)
    
    
  2. PKCS#12 키스토어 생성(CA)

    • PKCS#12(.pfx) 형식으로 변환합니다.
    # openssl pkcs12 -export -out sonar-tls-ca.pfx -in sonar-tls-ca.pem -inkey sonar-tls-ca-key.pem
    Enter pass phrase for sonar-tls-ca-key.pem: logpresso1! (패스워드 입력)
    Enter Export Password: logpresso1! (패스워드 입력)
    Verifying - Enter Export Password: logpresso1! (패스워드 입력)
    
    
  3. 파일 목록 확인

    파일 용도 배포 대상
    sonar-tls-ca.pem CA 인증서(공개) syslog 송신 클라이언트(공통)
    sonar-tls-ca-key.pem CA 개인키 로그프레소 서버에서만 보관
    sonar-tls-ca.pfx CA 인증서 + 개인키(PKCS#12) 로그프레소 keystore.register 등록용

syslog.openTls 명령 확인

  • 서버 오픈 명령은 인자 순서가 중요하므로 셸에서 인자 없이 실행해 도움말을 먼저 확인합니다.

  • 6번째 인자 trust alias를 지정하지 않으면 단방향 TLS, 지정하면 mTLS로 동작합니다.

    logpresso> syslog.openTls
    Description
            open persistent TLS syslog server
    Arguments
            1. server name: unique server name (required)
            2. key alias: key alias. use 'keystore.list' command to list all registered key aliases. Keystore should contain public and private key pair. e.g. PKCS12 keystore (required)
            3. port: syslog port number (optional)
            4. address: syslog bind address. 0.0.0.0 by default (optional)
            5. charset: character set name. utf-8 by default (optional)
            6. trust alias: trust alias. use 'keystore.list' command to list all registered key aliases. Trusted keystore should contain public key of certificate authority (optional
    
    

단방향 TLS 설정 및 검증

  • 서버 인증서만 등록하고 클라이언트 인증서 검증은 수행하지 않는 구성입니다.
  1. 서버 설정(로그프레소 셸에서 진행)

    • PKCS#12 키스토어를 등록하고 TLS syslog 서버를 오픈합니다.

    • 첫 번째 인자 sonar-tls는 로그프레소 내부에서 사용할 식별자입니다.

    • 두 번째 인자 sonar-tls-ca는 위에서 등록한 키스토어 alias입니다.

    • 세 번째 인자 6514는 listen 포트입니다.

      logpresso> keystore.register sonar-tls-ca PKCS12 /opt/logpresso/tls-ca/sonar-tls-ca.pfx
      Key-Store Password?
      [sonar-tls-ca] key store registered
      
      
      logpresso> syslog.openTls sonar-tls sonar-tls-ca 6514
      opened TLS syslog server [/0.0.0.0:6514]
      
      
  2. 클라이언트 검증

    • 송신측에서 openssl s_client으로 TLS 핸드셰이크와 메시지 송신을 검증할 수 있습니다.

    • CLI에서 하기 명령어를 실행하여, 로그를 전송합니다.

      # echo "<13>1 $(date '+%Y-%m-%dT%H:%M:%S%:z') $(hostname) test - - - TLS 암호화 메시지" | \\
      openssl s_client -connect 127.0.0.1:6514 \\
      -CAfile /opt/logpresso/tls-ca/sonar-tls-ca.pem \\
      -quiet -no_ign_eof 2>/dev/null
      
      
    • CAfile로 지정한 CA 인증서로 서버 인증서를 검증합니다.

    • 핸드셰이크가 성공하면 표준 입력으로 보낸 syslog 메시지가 그대로 서버로 전달됩니다.

    • 클라이언트가 보낸 메시지가 로그프레소 서버에서 수집되는지 수집기를 생성하여 확인부탁드립니다.