로컬 서비스에 대한 암호화 및 인증으로서의 SSH 터널링

로컬 서비스에 대한 암호화 및 인증으로서의 SSH 터널링

배경:

/srv/socket내 서버에는 들어오는 연결을 도메인 소켓에서 수신한 다음 연결된 사용자와 상호 작용하는 서비스가 실행 중입니다 . 이 서비스는 서비스 동작을 매우 쉽게 수정할 수 있도록 C++로 작성한 서비스입니다. 현재 이 서비스에서는 인증이나 권한 확인이 수행되지 않습니다(잠시 후에 확인하시겠지만 변경되어야 함). 나와 함께 작업하고 있는 몇몇 개발자(5~10명)는 인터넷의 다른 컴퓨터에서 이 서비스(및 이 서비스만)에 액세스해야 합니다. 이 서비스는 그들에게 꽤 많은 권한을 부여하기 때문에 인증이 최대한 강력하고 연결이 암호화되기를 바랍니다. (XY 문제를 피하기 위해) 제가 가지고 있는 근본적인 질문은 다음과 같습니다: 이것을 어떻게 설정합니까?

그것에 관한 아이디어와 질문:

내 원래 아이디어는 자체 인증을 제공한 다음 암호화에 TLS를 사용하는 것이었습니다(물론 외부 포트에 서비스를 노출함). 그러나 자체 인증을 작성하면 보안 결함이 발생할 가능성이 높으며 TLS를 통해 작동하도록 연결을 설정하는 것은 어려울 것입니다.

두 번째 아이디어는 SSH를 사용하는 것이었습니다. SSH는 이미 매우 강력한 인증 및 암호화 기능을 갖추고 있으며 기본적으로 필요한 작업을 수행합니다. 불행히도, 나는 이것을 어떻게 설정하는지 잘 모르겠습니다. 첫째, 물론 개발자에게 전체 쉘 액세스 권한을 부여하고 싶지 않으므로 기본 쉘을 /bin/false(이 사이트 및 관련 사이트의 몇 가지 다른 답변에 따라)로 변경하겠습니다. 하지만 관련 소켓에 연결하려면 여전히 그것들이 필요합니다. SSH 터널링을 조사했지만 그것은 나에게 필요한 것이 아닌 것 같고 "프록시로서의 SSH"와 유사한 항목에 대한 다른 검색은 모두 관련되어 있지만 동일하지는 않은 문제를 나타냅니다. 여기서 해야 할 올바른 일은 무엇입니까? 물론 "셸" 역할을 하고 해당 사용자를 내 서비스에 연결하는 사용자 정의 실행 파일을 작성할 수도 있지만, 이 코드는 보안에 민감하므로 가능하면 직접 작성하는 것을 피하고 싶습니다.

최상의 시나리오:

이상적으로는 다음과 같은 일이 일어나기를 바랍니다.

  1. 사용자는 클라이언트에서 일부 명령을 실행합니다.
  2. 내 서버의 프록시 서비스에 대한 암호화된 연결이 생성되고 사용자는 이 서비스에 대해 자신을 인증합니다(이상적으로는 합리적으로 안전하다고 알려진 잘 확립된 서비스입니다).
  3. 프록시 서비스는 내 서비스에 대한 연결을 열고 사용자 이름(또는 일부 사용자 식별자)을 전달한 다음 클라이언트에 연결합니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변1

귀하의 질문 이후 시간이 꽤 흘렀다는 것을 알고 있습니다. 하지만 여전히 관심이 있으신 경우 제 블로그를 살펴보십시오.우편서버 결함. 문제는 귀하의 요구 사항과 관련이 없지만 제가 제안한 솔루션은 직접적으로 관련이 있을 수 있습니다. 나는 나보다 보안 관련 내용을 더 잘 이해하고 있는 전문가로부터 해당 게시물에 대한 답변을 이끌어내고 싶었지만 그런 일은 일어나지 않았습니다.

게시물이 여기에 복제하기에는 약간 길지만 간단히 말해서 개념은 다음과 같습니다.

  • 비밀번호 + 키 + otp 등 필요하거나 허용할 수 있는 인증 메커니즘을 최대한 많이 요구하도록 SSH를 설정하세요.
  • 사용자 쉘을 /sbin/nologin( /sbin/nologin보다 선호됨 /bin/false) 로 설정하십시오.
  • 사용자가 ssh를 통해 연결(인증)할 때 서버에서 sshrc를 활용하여 스크립트를 호출하면 스크립트는 필요한 모든 작업을 수행할 수 있습니다(예: 서비스 시작)

위 설정에서 사용자는 SSH를 통해 인증하고, 일단 인증되면 /etc/ssh/sshrc서비스에 필요한 작업을 수행하고 /sbin/nologin더 이상 필요하지 않으므로 인증 후 SSH 세션의 연결을 정상적으로 끊습니다.

sshrc의 스크립트를 사용하면 열광할 수 있습니다. 예를 들어 서비스에 대해 열린 포트 없이 시작하는 것을 고려해 보세요. 사용자가 인증되면 sshrc 스크립트는 즉시 방화벽에서 사용자 IP용 포트를 열 수 있습니다.

참고:위의 내용은 여러분이 SSH 구성과 관련하여 무엇을 하고 있는지 정말로 알고 있다고 가정합니다. 잘 테스트된 SSH 구현이 여러 개 있지만 그 중 다수는 주요 보안 문제로 인해 쉽게 잘못 구성될 수 있습니다. 또한 SSH 인증의 경우 항상 키 +(사용자가 아는 최소한 한 가지, 예: 비밀번호 또는 otp, 이상적으로는 둘 다)를 사용하는 것이 좋습니다.

관련 정보