Syslog mTLS 설정 가이드

본 문서는 syslog over TLS의 mTLS(상호 인증) 구축 가이드입니다.

서버와 클라이언트가 서로의 인증서를 검증하는 구성으로, 강한 보안 요구 환경에 적합합니다.

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

유의사항

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

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

  • mTLS는 CA·서버 인증서·클라이언트 인증서 세 종류의 키페어를 모두 발급해야 합니다.

  • 인증서 생성·테스트는 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 상태 확인 후 하기 작업 부탁드립니다.


인증서 생성

  • 사설 CA를 생성한 뒤, 동일 CA로 서버 인증서·클라이언트 인증서를 각각 발급합니다.
  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)

    • 로그프레소 keystore.register는 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. 클라이언트 인증서 발급

    • mTLS 클라이언트가 자신의 신원을 증명하기 위한 인증서를 동일 CA(sonar-tls-ca)로 서명해 발급합니다.

    • 같은 CA로 서명되어야 서버의 trust 키스토어에서 검증을 통과합니다.

    1. 클라이언트 개인키 생성

      # openssl genrsa -out client1-key.pem 4096
      
      
    2. 클라이언트 CSR 생성 (CN에 에이전트 이름 입력)

      # openssl req -new -key client1-key.pem -out client1.csr
      (..중략..)
      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) []: client1 (호스트명 기재/예시)
      Email Address []: ENTER로 넘어가기(필요에 따라 기입)
      
      Please enter the following 'extra' attributes
      to be sent with your certificate request
      A challenge password []: ENTER로 넘어가기(필요에 따라 기입)
      An optional company name []: ENTER로 넘어가기(필요에 따라 기입)
      
      
    3. CA로 클라이언트 인증서 서명

      # openssl x509 -req -in client1.csr \\
      -CA sonar-tls-ca.pem -CAkey sonar-tls-ca-key.pem -CAcreateserial \\
      -out client1-cert.pem -days 36500 -sha256
      
      

syslog.openTls 명령 확인

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

  • 6번째 인자 trust alias가 mTLS의 핵심입니다. 지정하지 않으면 단방향 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)
    
    
    

mTLS 설정 및 검증

  • 서버는 자신의 인증서를 제시하고, 클라이언트도 자신의 인증서를 제시합니다.

  • 서버 측에서는 클라이언트 인증서를 발급한 CA를 trust 키스토어로 등록한 뒤, syslog.openTls의 6번째 인자로 지정합니다.

  • 6번째 인자를 누락하면 단방향 TLS로 동작하므로, mTLS를 의도한다면 반드시 trust alias까지 지정하시기 바랍니다.

  1. 서버 설정(로그프레소 셸에서 진행)

    • 서버 인증서와 클라이언트 검증용 CA를 각각 등록한 뒤 mTLS 서버를 오픈합니다.
    1. 서버 자신의 신분증 등록 (Key Alias 용)

      logpresso> keystore.register sonar-tls-server PKCS12 /opt/logpresso/tls-ca/sonar-tls-ca.pfx
      
      
    2. 상대방(클라이언트) 검증용 도장 등록 (Trust Alias 용)

      logpresso> keystore.register sonar-tls-trust PKCS12 /opt/logpresso/tls-ca/sonar-tls-ca.pfx
      
      
    3. mTLS syslog 서버 오픈

      logpresso> syslog.openTls mtls sonar-tls-server 6514 0.0.0.0 utf-8 sonar-tls-trust
      
      
  2. 클라이언트 검증

    • mTLS 서버에 접속할 때는 클라이언트 인증서·개인키를 추가로 제시합니다.

    • 클라이언트 인증서를 누락하거나, 서버에 등록된 trust 키스토어 CA에서 발급되지 않은 인증서를 사용하면 핸드셰이크 단계에서 즉시 차단됩니다.

    # echo "<13>1 $(date '+%Y-%m-%dT%H:%M:%S%:z') $(hostname) test - - - mTLS 메시지" | openssl s_client -connect 127.0.0.1:6514 \\
    -CAfile /opt/logpresso/tls-ca/sonar-tls-ca.pem \\
    -cert /opt/logpresso/tls-ca/client1-cert.pem \\
    -key /opt/logpresso/tls-ca/client1-key.pem \\
    -quiet -no_ign_eof 2>/dev/null