본 문서는 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로 서버 인증서·클라이언트 인증서를 각각 발급합니다.
-
사설 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로 넘어가기(필요에 따라 기입) -
-
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! (패스워드 입력) - 로그프레소
-
클라이언트 인증서 발급
-
mTLS 클라이언트가 자신의 신원을 증명하기 위한 인증서를 동일 CA(
sonar-tls-ca)로 서명해 발급합니다. -
같은 CA로 서명되어야 서버의 trust 키스토어에서 검증을 통과합니다.
-
클라이언트 개인키 생성
# openssl genrsa -out client1-key.pem 4096 -
클라이언트 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로 넘어가기(필요에 따라 기입) -
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까지 지정하시기 바랍니다.
-
서버 설정(로그프레소 셸에서 진행)
- 서버 인증서와 클라이언트 검증용 CA를 각각 등록한 뒤 mTLS 서버를 오픈합니다.
-
서버 자신의 신분증 등록 (Key Alias 용)
logpresso> keystore.register sonar-tls-server PKCS12 /opt/logpresso/tls-ca/sonar-tls-ca.pfx -
상대방(클라이언트) 검증용 도장 등록 (Trust Alias 용)
logpresso> keystore.register sonar-tls-trust PKCS12 /opt/logpresso/tls-ca/sonar-tls-ca.pfx -
mTLS syslog 서버 오픈
logpresso> syslog.openTls mtls sonar-tls-server 6514 0.0.0.0 utf-8 sonar-tls-trust
-
클라이언트 검증
-
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 -