텔레포트 녹화 프록시 모드는 텔레포트 사용자가 sshd
를 실행하는 서버에 대한 세션 녹화를 활성화할 수 있도록 추가되었습니다. 이는 대규모 서버 플릿을 텔레포트로 점진적으로 전환할 때 도움이 됩니다.
텔레포트 클라우드는 노드 수준에서만 세션 녹화를 지원합니다. 세션 녹화를 설정하는 데 관심이 있다면, 텔레포트 노드로 OpenSSH 서버를 교체할 수 있도록 서버 액세스 시작 가이드를 읽어보세요.
녹화 프록시 모드는 두 가지 이유로 노드 수준에서의 녹화보다 덜 안전하다고 간주됩니다:
- 텔레포트 프록시 서비스에 추가 권한을 부여합니다. 기본 노드 녹화 모드에서는 프록시 서비스가 비밀을 저장하지 않으며 해독된 데이터를 "볼" 수 없습니다. 이는 프록시 서버가 전체 클러스터의 보안에 덜 중요하게 만듭니다. 그러나 공격자가 프록시 녹화 모드로 실행되고 있는 프록시 서버에 물리적으로 접근하게 되면, 해독된 트래픽과 프록시 서버의 프로세스 메모리에 저장된 클라이언트 키를 볼 수 있게 됩니다.
- 녹화 프록시 모드는 SSH 에이전트 포워딩을 사용해야 합니다. 에이전트 포워딩이 필요한 이유는, 그렇지 않으면 프록시 서버가 대상 노드에 대한 두 번째 연결을 설정할 수 없기 때문입니다.
텔레포트 프록시 서비스는 클라이언트가 접근할 수 있도록 TLS로 설정되어야 합니다.
사전 요구 사항
-
자가 호스팅된 Teleport 클러스터가 실행 중입니다. 자가 호스팅된 Teleport Enterprise를 시작하려면, 판매팀에 문의하세요. 또한 Teleport Community Edition으로 데모 환경을 설정할 수 있습니다.
-
tctl
관리 도구와tsh
클라이언트 도구 버전 >= 16.2.0.tctl
및tsh
다운로드에 대한 지침은 설치를 방문하세요.
- OpenSSH 서버를 실행할 호스트.
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다.
1단계/3단계. 텔레포트 구성
프로덕션에서 Teleport를 실행할 때 보안 사고를 피하기 위해 다음 모범 사례를 준수해야 합니다:
- 필요한 경우가 아니면 프로덕션 환경에서
sudo
사용을 피하세요. - 새로운 비루트 사용자 계정을 생성하고 Teleport 실험을 위해 테스트 인스턴스를 사용하세요.
- 필요하지 않는 한 비루트 사용자로서 Teleport의 서비스를 실행하세요. SSH 서비스만 루트 접근을 필요로 합니다. Teleport가
1024
보다 작은 포트(예:443
)에서 수신 대기하도록 하려면 루트 권한(또는CAP_NET_BIND_SERVICE
권한)이 필요합니다. - 최소 권한 원칙을 따르세요. 더 제한적인 역할로도 충분할 때 사용자의 권한을 허용하는 역할을 부여하지 마세요.
예를 들어, 사용자가 모든 클러스터 리소스에 액세스하고 편집할 수 있는 내장된
access,editor
역할을 부여하지 마세요. 대신 각 사용자에게 필요한 최소 권한을 가진 역할을 정의하고 액세스 요청을 구성하여 일시적으로 권한을 상승시켜주세요. - Teleport 리소스를 등록할 때(예: 새로운 데이터베이스나 응용 프로그램) 초대 토큰을 파일에 저장해야 합니다.
명령행에 토큰을 직접 입력하면 악의적인 사용자가 손상된 시스템에서
history
명령을 실행하여 이를 볼 수 있습니다.
이러한 관행이 문서에서 사용되는 예제에 반드시 반영되지 않는 점에 유의해야 합니다. 문서의 예제는 주로 시연 및 개발 환경을 위한 것입니다.
프로덕션 인스턴스, 환경 및/또는 설정을 영구적으로 수정하기 전에 백업하는 것이 모범 사례로 권장됩니다. 이렇게 하면 필요할 경우 기존 상태로 롤백할 수 있습니다.
프록시 녹화 모드 활성화
sshd
노드에 대한 세션 녹화를 활성화하려면, 클러스터를 녹화 프록시 모드로 전환해야 합니다. 이 모드에서는 녹화가 프록시 수준에서 수행됩니다.
인증 서비스 구성 파일을 다음과 같이 편집합니다:
# /etc/teleport.yaml의 스니펫
auth_service:
# 세션 녹화는 OpenSSH와 함께 작동하려면 프록시로 설정해야 합니다.
session_recording: "proxy" # "off" 및 "node"도 가능 (기본값)
선택적 불안전 단계: 엄격한 호스트 검사 비활성화
녹화 모드에서는 텔레포트가 사용자가 연결하는 모든 노드의 호스트 인증서가 텔레포트 CA에 의해 서명되었는지 확인합니다. 기본적으로 이는 엄격한 검사입니다. 노드가 단순히 키나 다른 CA에 의해 서명된 인증서를 제시할 경우 텔레포트는 다음과 같은 오류 메시지로 이 연결을 거부합니다:
ssh: handshake failed: remote host presented a public key, expected a host
certificate
아래와 같이 엄격한 호스트 검사를 비활성화할 수 있습니다. 그러나 이는 중간자 공격의 가능성을 열어주며 권장되지 않습니다.
# /etc/teleport.yaml의 스니펫
auth_service:
proxy_checks_host_keys: no
2단계/3단계. sshd
구성
sshd
는 텔레포트 사용자 CA에 의해 생성된 인증서를 사용하여 사용자가 로그인할 수 있도록 허용해야 합니다. 먼저 텔레포트 CA 공개 키를 내보냅니다.
텔레포트 노드에서 텔레포트 인증 기관 인증서를 파일로 내보내고 SSH 구성을 업데이트하여 텔레포트의 CA를 신뢰하도록 설정합니다. proxy를 텔레포트 프록시 서비스의 주소에 할당합니다:
curl 'https://proxy/webapi/auth/export?type=user' | sed s/cert-authority\ // > teleport_user_ca.pubsudo mv ./teleport_user_ca.pub /etc/ssh/teleport_user_ca.pubecho "TrustedUserCAKeys /etc/ssh/teleport_user_ca.pub" | sudo tee -a /etc/ssh/sshd_config
sshd
를 재시작합니다.
이제 sshd
는 텔레포트에서 발급한 인증서를 제시하는 사용자를 신뢰합니다.
다음 단계는 호스트 인증을 구성하는 것입니다.
추천 솔루션은 텔레포트에 모든 OpenSSH 노드에 대해 유효한 호스트 인증서를 발급하도록 요청하는 것입니다. 호스트 인증서를 생성하려면 텔레포트 인증 서버에서 다음을 실행합니다:
액세스할 모든 호스트의 배열로 호스트 인증서 생성.
와일드카드 인증서는 OpenSSH에서 지원되지 않습니다. 도메인은 완전하게
정격되어야 합니다.
호스트 인증서 관리가 복잡해질 수 있습니다. 이는 노드에서 텔레포트 SSH를 사용하도록 권장하는 또 다른 이유입니다.
sudo tctl auth sign \ --host=api.example.com,ssh.example.com,64.225.88.175,64.225.88.178 \ --format=openssh \ --out=api.example.com
credentials have been written to api.example.com, api.example.com-cert.pubssh-keygen을 사용해 내용을 확인할 수 있습니다.
ssh-keygen -L -f api.example.com-cert.pubapi.example.com-cert.pub:
Type: ssh-rsa-cert-v01@openssh.com host certificate
Public key: RSA-CERT SHA256:ireEc5HWFjhYPUhmztaFud7EgsopO8l+GpxNMd3wMSk
Signing CA: RSA SHA256:/6HSHsoU5u+r85M26Ut+M9gl+HventwSwrbTvP/cmvo
Key ID: ""
Serial: 0
Valid: after 2020-07-29T20:26:24
Principals:
api.example.com
ssh.example.com
64.225.88.175
64.225.88.178
Critical Options: (none)
Extensions:
x-teleport-authority UNKNOWN OPTION (len 47)
x-teleport-role UNKNOWN OPTION (len 8)
그런 다음 모든 OpenSSH 노드의 /etc/ssh/sshd_config
에 다음 줄을 추가하고 sshd
를 재시작합니다.
HostKey /etc/ssh/api.example.com
HostCertificate /etc/ssh/api.example.com-cert.pub
3단계/3단계. 프록시 녹화 모드 사용
이제 tsh ssh
명령을 사용하여 클러스터의 모든 sshd
노드에 로그인할 수 있으며, 세션이 녹화됩니다.
기본 ssh 포트:22를 사용하여 tsh ssh
tsh ssh --port=22 user@host.example.com아마존 EC2 호스트 예시
tsh ssh --port=22 ec2-user@ec2-54-EXAMPLE.us-west-2.compute.amazonaws.com
프록시 뒤에 있는 sshd
서버에 "녹화 모드"로 로그인하기 위해 OpenSSH ssh
클라이언트를 사용하려면, ssh
클라이언트에게 점프 호스트를 사용하고 SSH 에이전트 포워딩을 활성화하도록 지시해야 합니다. 그렇지 않으면 녹화 프록시가 SSH 연결을 종료하고 기록할 수 없습니다:
에이전트 포워딩은 두 번 활성화됩니다: 하나는 클라이언트에서 프록시로
(녹화 프록시를 사용할 경우 필수) 그리고 선택적으로 프록시에서 종료 서버로
에이전트를 실행하려는 경우
ssh -o "ForwardAgent yes" \ -o "ProxyCommand ssh -o 'ForwardAgent yes' -p 3023 %r@p.example.com -s proxy:%h:%p" \ user@host.example.com
모두 입력할 필요 없이 일반적인 ssh user@host.example.com
을 사용하도록 하려면, 사용자는 ~/.ssh/config
파일을 업데이트할 수 있습니다.
로그인한 후 텔레포트 인증서가 에이전트에 로드되어 있는지 확인합니다:
Joe로 로그인
tsh login --proxy=proxy.example.com --user=joe인증서에 "teleport:joe"가 있는지 확인하세요
ssh-add -L
Gnome 키링 SSH 에이전트는 우분투와 같은 인기 있는 리눅스 데스크탑에서 사용되며, gpg-agent
는 GnuPG에서 SSH 인증서를 지원하지 않는 것으로 잘 알려져 있습니다. OpenSSH의 ssh-agent
사용을 권장합니다.
또는 --no-use-local-ssh-agent
플래그 또는 TELEPORT_USE_LOCAL_SSH_AGENT=false
환경 변수를 사용하여 SSH 에이전트 통합을 완전히 비활성화할 수 있습니다.
OpenSSH 속도 제한
녹화 모드에서 텔레포트 프록시를 사용할 때는 OpenSSH의 내장 속도 제한에 유의하세요. 프록시 서비스의 연결 수가 많은 경우 다음과 같은 오류가 발생할 수 있습니다:
channel 0: open failed: connect failed: ssh: handshake failed: EOF
man sshd_config
의 MaxStartups
설정을 참조하세요. 이 설정은 기본적으로 OpenSSH가 동시에 10개의 인증되지 않은 연결만 허용하고 10개를 초과할 경우 30%의 확률로 연결을 떨어뜨리기 시작함을 의미합니다. 100개의 인증 요청에 도달하면 모든 새로운 연결이 떨어집니다.
동시성 수준을 높이려면 값을 MaxStartups 50:30:100
과 같은 값으로 늘리세요. 이는 50개의 동시 연결과 최대 100개의 연결을 허용합니다.