Tailscale SSH
Tailscale VPN 서비스(https://tailscale.com/)는 tailnet 내 호스트 간 연결 시 투명한 SSH 인증을 지원합니다. 인증과 권한 부여는 SSH 비밀번호나 키 대신 Tailscale 정책으로 강제됩니다.
Sandfly 노드가 tailnet에 속한 머신에 있을 때, Sandfly는 Tailscale SSH를 통해 대상 호스트에 연결하는 것을 지원합니다.
Sandfly로 스캔하기
Tailscale SSH를 사용해 tailnet의 호스트를 스캔하려면, Sandfly 노드 호스트와 스캔하려는 대상 호스트가 동일한 tailnet에 있어야 합니다.
대상 호스트 설정
대상 호스트에서 Sandfly 전용 계정을 사용할 경우 Sandfly용 사용자 계정을 생성하세요. 이 사용자는 sudo 권한이 있어야 합니다. sudo에 비밀번호가 필요한 경우, 해당 사용자의 비밀번호가 설정되어 있는지 확인하고 기록해 두세요.
다음 명령으로 Tailscale SSH 서버를 활성화하세요: tailscale up --ssh
Tailscale ACL 설정
Tailscale SSH가 연결을 허용하려면, network ACL과 SSH 정책이 Sandfly 노드가 올바른 사용자로 대상 호스트에 연결하는 것을 허용해야 합니다. 구체적으로:
- 네트워크 정책은 Sandfly 노드가 포트 22로 대상 호스트에 연결할 수 있도록 허용해야 합니다.
- SSH 정책은 Sandfly 노드가 "sandfly" 또는 원하는 다른 사용자로 대상 호스트에 연결하는 것을 허용해야 합니다.
여러 호스트를 관리하려면, 모든 Sandfly 노드에 "sandfly-node" 태그를, 모든 대상 호스트에 "sandfly-target" 태그를 지정한 다음, sandfly-node 태그에서 sandfly-target 태그로의 연결을 허용하는 ACL을 만드는 간단한 방법을 사용할 수 있습니다.
Sandfly가 "sandfly"라는 사용자로 모든 "sandfly-target" 호스트에 연결하도록 허용하는 Tailscale ACL의 일부 예시는 다음과 같습니다:
{
"acls": [
{
"action": "accept",
"src": [ "tag:sandfly-node" ],
"dest": [ "tag:sandfly-target:22" ]
}
],
"ssh": [
{
"action": "accept",
"src": [ "tag:sandfly-node" ],
"dest": [ "tag:sandfly-target" ],
"users": [ "sandfly" ]
}
]
}Sandfly 설정
Sandfly에 호스트를 추가하려면 먼저 Sandfly에서 credential을 생성하세요. Tailscale SSH는 비밀번호나 SSH 키를 사용하지 않지만 연결에 사용할 사용자명은 알아야 합니다. 또한 해당 사용자에 sudo 비밀번호가 필요한 경우, Sandfly는 생성한 credential에 설정된 사용자 비밀번호를 사용합니다:
- Sandfly에서 Username/Password credential을 생성합니다.
- 사용자명을 Tailscale SSH 정책에서 허용된 사용자와 일치하도록, Sandfly가 대상 호스트에 연결할 때 사용할 사용자로 설정합니다.
- 사용자에 sudo 비밀번호가 필요하다면 해당 비밀번호를 credential에 입력합니다. sudo 비밀번호가 필요하지 않은 사용자라면 비밀번호 필드는 필수이므로 임시 비밀번호(예: "test1234")를 입력합니다.
이제 새 credential을 사용해 호스트를 추가할 수 있습니다. Sandfly가 tailnet을 통해 호스트에 연결하도록, Tailscale이 할당한 100.x.x.x IP 주소를 반드시 사용하세요.
알려진 제한 사항
Sandfly 노드는 노드 호스트의 Docker 컨테이너에서 실행되므로, Tailscale Magic DNS 이름(머신 단축 이름 또는 machine-name.tailxxxxxx.ts.net)이 컨테이너 내부에서 해석되지 않을 수 있습니다. 안정적인 연결을 위해, 호스트는 Tailscale IP 주소(100.x.x.x)로 Sandfly에 추가하세요.
Sandfly의 대상 호스트 연결은 비대화형이므로, 주기적으로 사용자의 재인증을 요구하는 Tailscale SSH의 "check" 모드는 지원되지 않습니다. Tailscale SSH 정책은 "action": "accept"이어야 하며, "action": "check"가 아니어야 합니다.
Updated 7 days ago