rsyslog의 TLS(SSL)를 통한 안전한 송수신(암호화 및 인증)
이 기사는 rsyslog의 TLS(Secure Surgent) 기반 보안 송수신에 관한 기사입니다.
마지막으로 rsyslog의 TLS(SSL)를 통한 안전한 송수신(암호화만)에서 Syslog 통신을 암호화했습니다.하지만 터미널은 인증되지 않았다.
이렇게 하면 도청을 방지할 수 있지만 사칭을 방지할 수 없기 때문에 고객 단말기의 인증 설정을 한다.
인증 환경은 계속해서 CentOS 8 및 Ubuntu(18.04)입니다.
Syslog 전송 측면(클라이언트): CentOS(rsyslog version 8.37.0), IP = 192.168.0.15
syslog 수신 측면(서버): Ubuntu(rsyslog version 8.32.0), IP = 192.168.0.13
마지막 확인
지난번 글에서 만든 기밀 키와 인증서는 다음과 같습니다.
터미널 인증은 클라이언트 인증서가 필요하기 때문에 저희는 이 인증서를 만들 것입니다.
서버와 마찬가지로 프로그램은 다음과 같습니다.
1. 터미널에 기밀 키 만들기
2. 개인 키 기반 인증서 서명 요청: CSR을 만들어 인증국(CA)에 보내기
3. 인증서(CA)가 CSR에서 인증서를 만들고 터미널로 전송
개인 키 생성
클라이언트 터미널로 기밀 키를 만들까 서버 터미널로 만들까1고민 중입니다. 제 비밀 키는 직접 만들어야 하기 때문에 클라이언트 터미널로 만들었습니다.
$ sudo certtool --generate-privkey --outfile client-key.pem
CSR 만들기
개인 키를 사용하여 인증서 서명 요청: CSR(Certficate Signing Request)을 만듭니다.
$ sudo certtool --generate-request --load-privkey client-key.pem --outfile client-request.pem
이번에도 다양한 정보를 요청받고, 이것도 이쪽 문서를 참고해서 만들 거예요.Generating the machine certificate 여기서 중요한 것은 Common name입니다.호스트가 DNS를 등록할 때 사용됩니다.사용하지 않더라도 FQDN 형식의 호스트 이름이 필요합니다.
Common name: client.example.jp
Organization unit name: SomeOU
Organization name: SomeOrg
Locality name: Chiyoda-ku
State or province name: Tokyo
Country name(2 chars): JP
# 途中はすべてデフォルト値
Is this a TLS web client certificate? (y/N): y
Is this also a TLS web server certificate? (y/N): y
인증서 작성
이전에 제작한 CSR을 CA가 담당하는 터미널에 전달합니다.
전송 시 읽기 권한이 필요할 때 추가됩니다.
$ sudo chmod +r client-request.pem
다음은 인증서(CA)의 업무 부분입니다.
전달된 클라이언트 CSR을 사용하여 클라이언트 인증서를 만듭니다.
실행하기 전에 다음 서류가 완비되었는지 확인하세요.
$ sudo certtool --generate-certificate --load-request client-request.pem --outfile client-cert.pem --load-ca-certificate ca.pem --load-ca-privkey ca-key.pem
기한을 물어야 하기 때문에 먼저 3600일로 정했다.(CA의 기한은 3650일이기 때문에 더 적은 날이 좋다는 뜻)
The certificate will expire in (days): 3600
확장된 곳은 이번에는 다음과 같다.서버와 달리 클라이언트 이름과 IP 모두 변경될 가능성이 높아 설정하지 않습니다.
Does the certificate belong to an authority?(y/N): n
Is this a TLS web client certificate? (y/N): y
(略)
Is this a TLS web server certificate? (y/N): y
최종적으로'Is the above information ok'로 확인되므로 y를 입력합니다.
클라이언트 인증서를 만듭니다.
client-cert.pem이 존재하면 성공합니다.
생성된 client-cert.pem을 고객 터미널에 전달합니다.
키 및 인증서의 권한 및 구성
전송된 파일은 이동할 때의 계정 권한이기 때문에 루트 권한으로 변경하여 지난번에 만든 폴더로 이동합니다.
$ sudo chown root:root client-cert.pem
$ sudo chmod 644 client-cert.pem
$ sudo mv client-cert.pem /etc/rsyslog.d/tls
$ sudo mv client-key.pem /etc/rsyslog.d/tls
권한을 확인하다.
rsyslog 설정
서버 측 rsyslog 설정
클라이언트 인증을 위해 Authmode="x509/name"로 변경하고 PermittedPeer=["client.example.jp"]를 추가합니다.
module(
load="imtcp"
StreamDriver.Name="gtls"
StreamDriver.Mode="1"
StreamDriver.Authmode="x509/name"
PermittedPeer=["client.example.jp"]
)
다시 시작하여 상태를 확인합니다.
$ sudo systemctl restart rsyslog.service
$ sudo systemctl status rsyslog.service
이렇게 하면 고객측에 인증 오류가 발생했음을 알 수 있다.터미널 인증이 설정되어 있기 때문입니다.실제로 이 상태에서는 로그 전송을 할 수 없다.클라이언트의 rsyslog 설정
그러면 로그 전송을 다시 할 수 있도록 클라이언트의rsyslog를 설정합니다.
서버 측의 설정과 같이 인증서 파일별로 Authmode와 PermittedPeers를 설정합니다.2
global(
DefaultNetstreamDriver="gtls"
DefaultNetstreamDriverCAFile="/etc/rsyslog.d/tls/ca.pem"
DefaultNetstreamDriverCertFile="/etc/rsyslog.d/tls/client-cert.pem"
DefaultNetstreamDriverKeyFile="/etc/rsyslog.d/tls/client-key.pem"
)
module(
load="imtcp"
StreamDriver.Name="gtls"
StreamDriver.Mode="1"
StreamDriver.Authmode="x509/name"
StreamDriverPermittedPeers="server.example.jp"
)
재부팅하여 문제가 발생했는지 확인합니다.
클라이언트
$ sudo systemctl restart rsyslog.service
$ sudo systemctl status rsyslog.service
로그 전송과 사칭할 수 없음 확인클라이언트가 로그 전송을 하는지 확인합니다.
로그 전송이 완료되었는지 다시 확인할 수 있습니다.
그럼 정말 사칭하면 안돼요?
다른 고객 단말기를 준비하여 인증이 가능한지 확인하세요.
다른 고객 단말기 자체를 인증국(CA)으로 설정하고 제 인증서를 제작하며 같은 설정의 고객 인증서를 만들고 이 인증서를 사용하여 인증 설정을 합니다.rsyslog.conf는 정규 고객 단말기에서 복사됩니다.
로그에서 보듯이, 시작할 때 (start) 'unexpected gnuls error' 가 발생했습니다.
서버의 ca.pem 및 ca-key입니다.확인했습니다.
ca.pem은 나눠줄 수 있어요,ca-key.나는pem의 중요성을 잘 안다.
이렇게 하면 허용된 단말기 이외의 단말기를 연결할 수 없어 사칭을 방지할 수 있다.
참고 자료
이 문서Setting up a client를 참고하여 인증 파일을 설정하면 Authmode는'anon'상태를 유지하고 PermittedPeers의 설정이 없어도 전송할 수 있습니다.서버 쪽에서 설정하면 자동으로 전환되나요?몰라. ↩
Reference
이 문제에 관하여(rsyslog의 TLS(SSL)를 통한 안전한 송수신(암호화 및 인증)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/saeki4n/items/f7de2c948316c0d021dd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)