IP가 아닌 이름으로 특정 클라이언트에 대한 SSH 액세스를 제한합니다.

IP가 아닌 이름으로 특정 클라이언트에 대한 SSH 액세스를 제한합니다.

최근에 내 서버 중 하나를 RHEL8에 해당하는 서버로 마이그레이션했습니다. 이는 (i) tcp_wrappers가 뒤에 남아 있고(openssh가 더 이상 libwrap에 대해 컴파일되지 않음), (ii) 더 이상 단순히 호스트.거부 및 호스트.허용을 조정할 수 있는 유연성이 없음을 의미합니다. , (iii) 방화벽과 같은 것들과 싸우기 시작합니다.

그러나 이 특정 상자의 보안 요구 사항은 매우 간단합니다.

  1. sshd가 대체 포트(예: 1234)에서 수신하도록 합니다.

  2. 2명의 "원격" 사용자가 있습니다(서버의 사용자 ID "fred" 및 "barney").

  3. 사용자 "fred"는 화창한 캘리포니아에 거주하며 각 연결마다 IP가 동적으로 할당되는 ISP를 사용합니다. "Barney"는 습한 텍사스에 살고 있습니다. DHCP 이야기도 마찬가지입니다.

  4. 해당 ISP는 일정 빈도로 IP 블록을 변경하므로 일반적으로 Hosts.allow 파일에서 와일드카드와 함께 ISP 이름을 사용합니다. 예를 들어

    sshd : .calif.isp.net : ALLOW
    sshd : .texas.isp.com : ALLOW
    

(각각 "fred" 및 "barney"용)

  1. 어려운 것 같습니다 -> 방화벽에서 이름으로 필터링하는 것은 불가능합니다. 하지만... 저는 (이론적으로) 이런 종류의 일을 처리하기 위해 sshd_config를 조정할 수 있다고 확신합니다.

이론적으로는...하지만 이 작업을 수행하기 위해 sshd 구성 파일을 조정하는 방법을 잘 모르겠습니다. 사용자가 자신(예: 버몬트 ISP(.vermont.com)을 사용하는 "wilma"), "fred" 및 "barney"를 제한할 수 있도록 설정했습니다.

 AllowUsers wilma fred barney

하지만 이것은 양파의 한 겹일 뿐입니다. 우리는 비밀번호 인증을 사용하므로추측하다(누군가가 확인하거나 수정할 수 있기를 바랍니다)는 (i) 먼저 비밀번호 인증을 끄고,

 PasswordAuthentication no

그런 다음 (ii) sshd 구성 파일의 맨 아래에 다음을 추가합니다.

 Match Address *.calif.isp.net, *.texas.isp.com, *.vermont.com
   PasswordAuthentication yes

이것이 (원격이라도) 맞습니까? 그리고 맞다면 일치하는 주소를 나열하는 더 효율적인 방법이 있습니까? 내 예에서는 3개만 있는데 3개가 아닌 300개가 있다고 가정해 보겠습니다. 이 모든 주소를 일부 "블록"("친숙한"이라고 함)에 넣고 다음과 같은 것을 간단히 사용할 수 있는 방법이 있습니까?

 Match Address friendly
   PasswordAuthentication yes

미리 감사드립니다.

답변1

당신의 가정은 정확합니다

PasswordAuthentication no

그리고

Match Address *.calif.isp.net, *.texas.isp.com, *.vermont.com
  PasswordAuthentication yes

그런 개념은 없어요조각하지만, 그래서 이것은아니요존재하다 friendly.

그러나 규모(300개 ISP? 외근 직원?)를 고려하면 2FA 또는 이와 유사한 VPN을 설정하고 이를 통해 SSH를 강제 실행하고 SSH 구성에 좀 더 편안해질 수 있습니다.

관련 정보