2개의 서로 다른 인증 체계를 사용하여 SSH에서 2개의 포트를 열 수 있습니까?

2개의 서로 다른 인증 체계를 사용하여 SSH에서 2개의 포트를 열 수 있습니까?

현재 SSH 키를 사용하여 네트워크 외부에서만 액세스할 수 있고 루트나 다른 사용자 이름/비밀번호 조합을 통해서는 액세스할 수 없도록 SSH 서버를 설정하려고 합니다.

한편, 네트워크 내의 내부 사용자는 여전히 동일한 시스템에 연결할 수 있어야 하지만 사용자 이름과 비밀번호를 사용하여 보다 전통적인 방식으로 로그인해야 합니다.

외부 및 내부 사용자 모두 PuttySSH를 사용하여 Windows에서 시스템에 액세스하고, 외부 액세스는 55000과 같이 임의로 선택한 높은 번호의 포트(또는 기타 관리자가 결정)

아래 이미지는 트래픽을 더 잘 보여줍니다.

SSH 설정

키만 사용하도록 실제 로그인을 설정하는 방법과 루트를 거부하는 방법을 알고 있지만 이 두 가지 로그인 유형을 구분하는 방법은 모르겠습니다.

나는 두 개의 SSHD 사본을 실행하고 동일한 IP의 다른 포트에서 수신 대기하며 각 포트에 두 가지 다른 구성을 제공하는 것을 고려했습니다.

또한 "일치" 규칙 설정을 고려했지만 이러한 옵션을 사용하여 서버 전체 구성을 격리할 수 있는지 확실하지 않습니다.

마지막으로 로그인하는 외부 사람은 항상 동일한 사용자입니다. 이 질문의 목적에 따라 "Frank"라고 부르겠습니다. 따라서 "Frank"는 외부 IP에서만 로그인이 허용되며 실제로는 절대 앞에 앉지 않습니다. 내부 A 연결 시스템인 경우 시스템의 다른 모든 사용자는 내부적으로만 연결되며 외부 IP에서는 연결되지 않습니다.

그가 연결하는 Franks IP는 동적으로 할당되지만 그가 연결하는 공용 IP도 고정되어 변경되지 않으며, 포트 전달자의 내부 IP도 변경되지 않으며, SSH 서버의 내부 IP 주소도 마찬가지입니다.

내부 클라이언트는 항상 내부 SSH 서버 IP가 속해 있고 16비트 마스크인 개인 네트워크 범위 내의 IP에서 연결합니다(EG: 192.168.0.0/16).

하나의 구성 파일과 하나의 SSH 서버 인스턴스를 사용하여 이 설정이 가능합니까? 그렇다면 어떻게 해야 합니까?

또는

구성이 다른 두 대의 실행 중인 서버를 사용하는 것이 더 낫습니까?

참고로 SSH 서버는 Ubuntu 18.04에서 실행되고 있습니다.

답변1

그래서 답은 실제로 생각했던 것보다 훨씬 간단하다는 것이 밝혀졌습니다.

하지만 그의 의견에 대해 "@jeff schaller"에게 감사를 표해야 합니다. 그가 없었다면 SSH "일치" 구성이 어떻게 작동하는지 조사하기 시작하지 않았을 것입니다.

그래도

비결은 /etc/ssh/sshd_config 파일을 외부 인터넷 연결에서 액세스하는 데 필요한 기본 구성으로 설정하는 것입니다.

내 경우에는 다음을 설정하는 것을 의미했습니다.

PermitRootLogin no
PasswordAuthentication no
UsePAM no

이렇게 하면 어디서 왔는지에 상관없이 모든 로그인에 SSH 키를 사용하는 키 기반 로그인을 요구하게 됩니다.

그런 다음 Windows 시스템에서 "PuttyGen"을 사용하여 외부 사용자의 홈 디렉터리에 있는 "authorized_hosts" 파일에 대한 해당 SSH 항목과 함께 디스크에 저장된 공개/개인 키 쌍을 생성했습니다.

이 SSH 키를 사용자 홈 폴더의 올바른 위치에 붙여넣은 다음 PuttyGen에서 생성한 개인(ppk) 파일을 사용하여 로그인하고 프로필을 저장하도록 putty를 설정했습니다.

그런 다음 구성 파일을 저장하고 보안 방법(비밀번호로 보호된 zip 파일이 첨부된 암호화된 이메일)을 사용하여 해당 파일과 ppk 키 파일을 외부 사용자에게 보냈습니다.

사용자가 퍼티 복사본에 ppk 및 구성 파일을 갖고 로그인할 수 있으면 sshd_config 파일의 마지막 두 줄에 다음을 추가합니다.

Match Host server1,server1.internalnet.local,1.2.3.4
    PasswordAuthentication yes

"일치" 줄에서는 내 서버 이름을 보호하기 위해 서버 이름을 변경했습니다.

각 서버 도메인은 쉼표로 구분되며 공백이 없다는 점에 유의하는 것이 중요합니다. 여기에 공백을 넣으면 SSHD가 구성을 로드하지 못하고 오류를 보고하게 되므로 거기에 있는 3개의 일치 항목은 다음을 수행합니다.

서버 1- 도메인 없이 "server1"만 사용하여 EG에 연결하는 모든 사람과 일치: "fred@server1"

server1.internalnet.local- 정규화된 내부 도메인 이름 EG를 사용하는 모든 사람과 일치합니다.'[이메일 보호됨]' (참고: 이 작업을 수행하려면 내부 DNS가 필요합니다.)

1.2.3.4- SSH 서버에 할당된 특정 IP 주소와 일치합니다. EG: '[이메일 보호됨]' 이 작업은 와일드카드를 사용하거나 더 나은 네트워크/마스크 cidr 형식(EG: 1.2.* 또는 192.168.1.0/8)을 사용하여 수행할 수 있습니다. 와일드카드를 사용하는 경우 아래 fchurca의 답변을 읽어 몇 가지 중요한 설명을 확인하세요.

제공된 패턴 중 하나라도 액세스 중인 호스트와 일치하는 경우 실행 중인 구성에 대한 유일한 변경 사항은 대화형 암호 로그인 기능을 다시 활성화하는 것입니다.

일치 목록에 나열된 내부 호스트를 다시 켜는 다른 구성 지시문을 여기에 배치할 수도 있습니다.

하지만 다음 내용을 읽어보시기 바랍니다.

https://man.openbsd.org/OpenBSD-current/man5/ssh_config.5

일치 블록 내에서 모든 구성 옵션이 허용되는 것은 아니므로 주의하세요. PAM 인증을 다시 켜기 위해 "UsePAM yes"를 시도했을 때 이 사실을 발견했지만 이것이 허용되지 않는다는 명시적인 안내만 받았습니다.

변경한 후 다음을 입력하세요.

sshd -T

그런 다음 서버를 다시 시작하기 전에 돌아가서 테스트하면 발생한 오류가 보고됩니다.

위 내용 외에도 다음 두 링크를 통해 많은 도움을 받았습니다.

https://raymii.org/s/tutorials/Limit_access_to_openssh_features_with_the_Match_keyword.html

https://www.cyberciti.biz/faq/match-address-sshd_config-allow-root-loginfrom-one_ip_address-on-linux-unix/

답변2

1.2.* - SSH 서버에 할당된 주소(서버 EG의 16비트 넷마스크)를 사용하여 로컬 네트워크의 모든 사람을 일치시킵니다.'[이메일 보호됨]'

주의 깊은! .ssh/config의 패턴 일치는 반드시 IP 주소가 아닌 문자열 글로빙을 기반으로 합니다. 당신이 읽고 있는 동일한 매뉴얼 페이지에 따르면:

무늬

패턴은 0개 이상의 공백이 아닌 문자, "*"(0개 이상의 문자와 일치하는 와일드카드) 또는 "?"(정확히 한 문자와 일치하는 와일드카드)로 구성됩니다. 예를 들어 ".co.uk" 도메인 집합의 호스트에 대한 클레임 집합을 지정하려면 다음 패턴을 사용합니다.

Host *.co.uk

다음 패턴은 192.168.0.[0-9] 네트워크 범위 내의 모든 호스트와 일치합니다.

Host 192.168.0.?

누군가 공개 역방향이 확인되는 IP에서 로그인을 시도하면 규칙 1.2.badguy.com과 일치하게 됩니다 1.2.*.

https://man.openbsd.org/OpenBSD-current/man5/ssh_config.5#PATTERNS

[완전성을 위해 업데이트됨]

Match Address 1.2.0.0/16다른 곳에서 지적했듯이 다음을 사용할 수 있습니다.Match Host 1.2.*

[/고쳐 쓰다]

답변3

당신이 조사해야 할 것은 SSH 구성을 분할하는 것입니다. 예를 들어, 모든 사용자에게 기본적으로 필요한 전역 변수(ssh 키 인증, 포트 전달 등)를 가져오려면 /etc/ssh/ssh_config를 설정하십시오.

그런 다음 사용자(Bob이라고 부르겠습니다)가 로컬(또는 nfs 마운트) 홈 디렉터리를 가지고 있는 경우 해당 사용자에 대한 구성을 /home/bob/.ssh/에 저장합니다. 이 구성에는 일치 문이 포함되며, 인증서 대신 비밀번호와 자신의 연결 유지 값 등을 사용하여 연결해야 하는 경우...

나는 과거에 이 작업을 수행했으며 여전히 하나의 IP 주소에서만 특정 로컬 계정을 잠그고 인증서 기반 인증만 허용하는 반면 다른 사용자 계정은 PAM 인증을 사용하고 비밀번호 기반 인증을 가질 수 있도록 이 작업을 수행합니다.

즉, SSH의 기본 프로필 아래에 모든 프로필을 유지하는 것보다 사용자 요구에 따라 별도의 사용자 프로필을 작성하고 유지 관리하는 것이 더 쉽습니다.

관련 정보