Letmein은 간단하고 안전한 인증 메커니즘을 갖춘 간단한 포트 노커입니다. SSH, VPN, IMAP 등과 같은 서비스에 대한 사전 인증 공격을 강화하는 데 사용할 수 있습니다.
Letmein은 서비스의 공격 표면을 줄이기 위해 노크 인증 장벽 뒤에 있는 서버의 서비스를 숨깁니다. 노크 인증이 성공하지 않으면 서비스 이용이 불가능합니다. 노크에 성공하면 letmeind 서버는 노크를 수행한 클라이언트 IP 주소에 대해 노크된 포트만 엽니다. 다른 IP 주소를 가진 컴퓨터는 여전히 보호된 서비스에 액세스할 수 없습니다.
노크 시퀀스를 성공적으로 인증할 수 없는 컴퓨터는 보호된 서비스에 액세스할 수 없습니다. 제공된 예제 nftables.conf
를 사용하여 보호된 서비스 포트에서 ICMP reject
수신하게 됩니다. (대신 nftables.conf
에서 패킷을 drop
결정할 수도 있습니다.)
Letmein에는 nftables
기반 방화벽이 필요합니다. iptables
에서는 작동하지 않습니다 . iptables
기반 방화벽을 사용하는 경우 letmein을 설치하기 전에 nftables
로 변환하세요. 인터넷에서 이를 수행하는 방법에 대한 설명이 있습니다. 들리는 것만큼 힘들지도 않고 일도 많지 않습니다. :)
letmein 제어 통신 자체의 기본값은 TCP 포트 5800이지만 모든 TCP 또는 UDP 포트로 구성할 수 있습니다. UDP 포트를 제어 포트로 선택하고 control-error-policy=basic-auth를 구성하면 letmein 서비스 자체는 스텔스 모드에서 작동하며 인증되지 않은 수신 메시지에 응답하지 않습니다.
홈페이지
힘내 저장소
Github 저장소
서버에 letmein 서버 소프트웨어를 설치합니다(아래 섹션 참조).
클라이언트에 letmein 클라이언트 소프트웨어를 설치합니다(아래 섹션 참조).
이 프로젝트와 함께 제공되는 nftables.conf 예제 구성 파일을 읽어보세요. 기존 nftables
구성에 letmein 특정 입력 체인을 추가해야 합니다. 이에 따라 nftables.conf
수정하십시오.
다음 클라이언트 명령을 사용하여 서버와 클라이언트에 설치할 공유 비밀 키와 사용자 식별자를 생성합니다.
letmein gen-key -u 00000000
gen-key 명령은 생성된 키 문자열을 콘솔에 인쇄합니다. 기본적으로 이는 사용자 식별자 00000000
에 대한 보안 무작위 키를 생성합니다. 원하는 경우 사용자 식별자를 수동으로 편집하거나 그대로 둘 수 있습니다.
생성된 문자열(사용자 식별자 및 공유 비밀)을 /opt/letmein/etc/letmeind.conf
의 서버 구성에 추가합니다. 생성된 키 문자열을 사용자 식별자와 함께 구성 파일의 [KEYS]
섹션에 넣습니다.
생성된 동일한 문자열(사용자 식별자 및 공유 비밀)을 /opt/letmein/etc/letmein.conf
의 클라이언트 구성에 추가합니다. 생성된 키 문자열을 사용자 식별자와 함께 구성 파일의 [KEYS]
섹션에 넣습니다.
열 수 있는 sshd
포트를 설명하는 resource
서버에 생성합니다. 서버 구성 파일 /opt/letmein/etc/letmeind.conf
의 [RESOURCES]
섹션에서 열 수 있는 모든 포트를 지정해야 합니다. 리소스는 다음과 같은 리소스 식별자와 포트 식별자로 구성됩니다.
[RESOURCES]
00000022 = port: 22
리소스 식별자는 8자리 16진수 숫자입니다. 이 예에서는 22(16진수)이지만 임의의 숫자일 수 있습니다. 서버와 클라이언트의 번호가 같아야 합니다. port:
노크 오픈할 수 있는 포트 번호(십진수)가 지정됩니다.
/opt/letmein/etc/letmein.conf
의 클라이언트 구성에 동일한 리소스 식별자와 동일한 포트 번호를 가진 동일한 리소스를 추가합니다.
letmein 서버를 다시 시작하십시오.
systemctl restart letmeind.service
이제 nftables.conf
방화벽 구성에서 정적 sshd
포트(22) accept
제거하십시오. Letmein은 성공적인 노크 인증 후 letmein 입력 체인에 이러한 규칙을 동적으로 설치합니다. 그런 다음 nftable을 다시 시작합니다.
systemctl restart nftables.service
완료! 이제 서버의 sshd
포트를 열 수 있습니다.
# This must fail! No successful knock authentication, yet.
# If this does not fail, check if you have removed the sshd accept rule from nftables.conf.
ssh your-server.com
# Knock-open port 22 (sshd) on the server using user-id/key 00000000:
# (You do not have to specify -u 00000000 if that is your default user (see config).)
letmein knock -u 00000000 your-server.com 22
# Now you should be able to ssh into your server successfully:
ssh your-server.com
SSH에 연결하기 전에 자동으로 포트를 노크하려면 ~/.ssh/config
파일에 Match exec
규칙을 추가하면 됩니다.
Match host your-server.com exec "letmein knock -u 00000000 your-server.com 22"
letmein을 빌드하고 설치하는 방법에 대한 자세한 내용은 설치 지침을 참조하세요.
시스템에서 letmein을 완전히 제거하려면 제거 지침을 참조하세요.
클라이언트 애플리케이션 letmein
이식 가능하며 모든 주요 플랫폼에서 실행되어야 합니다. 테스트된 플랫폼은 다음과 같습니다.
서버 애플리케이션 letmeind
방화벽 백엔드로 nftables
만 지원하므로 Linux 전용입니다.
letmein 서버와 클라이언트를 구성하는 방법에 대한 자세한 내용은 구성 설명서를 참조하세요.
구성 파일의 사용자 식별자와 리소스 식별자는 암호화되지 않고 일반 텍스트로 네트워크를 통해 전송된다는 점에 유의하세요.
사용자 식별자와 리소스 식별자에 개인 정보가 포함되지 않았는지 확인하세요.
이러한 식별자는 단지 다양한 letmein
키, 설치 및 설정을 관리하기 위한 추상적 식별을 의미합니다.
letmein의 주요 설계 목표는 다음과 같습니다.
-4
및 -6
클라이언트 명령줄 옵션을 사용하여 조정할 수 있습니다.보안 및 취약점 보고에 대한 자세한 내용은 letmein의 보안 문서를 참조하세요.
저작권 (c) 2024 Michael Büsch [email protected]
귀하의 선택에 따라 Apache 라이센스 버전 2.0 또는 MIT 라이센스에 따라 라이센스가 부여됩니다.