특정 사용자 만 한 포트에서 ssh를 통해 로그인하고 다른 사용자는 다른 포트를 통해 로그인 할 수 있습니다


13

다음과 같은 유스 케이스가 있습니다.

  • 사용자가 안전하고 신뢰할 수있는 네트워크에서 로그인 할 수 있어야합니다.
  • 그런 다음 몇 명의 모바일 사용자가 Linux Centos 시스템에서 원격으로 로그인 할 수 있도록합니다.

sshd를 다른 포트에서 실행할 수 있습니다.

  • 내부에서 다른 포트에서 연결하고 싶지 않기 때문에 22에서 실행하는 것이 좋습니다 (스크립트를 메시지로 표시).
  • 외부 모바일 사용자의 경우 포트 X와 같은 다른 포트에서 sshd를 실행합니다 (보안 강화-소규모 사무실 유형의 설치입니다).

보안을 강화하기 위해 포트 X의 특정 사용자 만 액세스 할 수 있도록 sshd를 구성하고 사용자가 포트 X를 통해 로그인 할 때 알 수 있도록 일부 경고를 구성하려고했습니다.

그러나 sshd 설명서에서 이와 같은 구성을 찾을 수 없습니다. 이와 같은 해결책이 없다면 누군가가 포트 X에서 sshd 로그인을 완료 할 때마다 실행되도록 쉘 스크립트를 트리거 할 수 있습니까? sshd 로그인이있을 때 경고를 트리거 할 수 있는지, iptables 설명서를보고 있었지만 아무것도 만들 수 없었습니다.

감사의 의견

답변:


12

SSH대체 포트에서 실행 되는 것은 더 이상 보안으로 간주되지 않습니다. 약간의 불명확 함과 사용자에게 복잡한 단계가 추가됩니다. 자동화 된 포트 스캐너를 사용하고 있고 어떤 포트에서 실행 중인지 신경 쓰지 않는 네트워크를 침입하려는 사람들에게 장애물이 없습니다.

원격 인터넷 기반 인바운드 SSH를 허용하는 시스템에서 보안을 강화하려면 sshd_config@Anthon에 표시된대로 사용자를 제어 한 다음 PAM에서 직접 보안을 구현하십시오.

두 그룹을 작성 lusers하고 rusers. 원격 모바일 사용자를 rusers그룹에 추가하십시오 . 사용 pam_succeed_if.so의 그 사용자에 대한 액세스를 허용하는 PAM 모듈을. ssh의 pam 구성에 행을 추가하십시오.

account     sufficient  pam_succeed_if.so user ingroup lusers
account     sufficient  pam_succeed_if.so user ingroup rusers

일부 pam_succeed_if.so 모듈은 약간 다른 구문을 사용해야 할 수도 있습니다 group = lusers.

그런 다음 sshd연결할 수있는 사용자를 제한 할뿐 아니라에 버그가있는 sshd경우에도 PAM 기반 제한이 제공하는 보호 기능이 있습니다.

원격 사용자를위한 추가 단계 중 하나는 암호와 함께 ssh_keys를 사용하는 것입니다. 따라서 로컬 사용자는 키 또는 비밀번호로 로그인 할 수 있지만 원격 사용자는 키를 가져야하며,이를 위해 키를 작성하는 경우 키에 비밀번호 문구 연관자가 있는지 확인할 수 있습니다. 따라서 실제로 SSH 키 암호 가있는 위치에 대한 액세스를 제한합니다 . 그리고 사용자의 암호가 인식되면 잠재적 공격 경로를 제한합니다.

에서 sshd_config:

2 설정 변경 :

ChallengeResponseAuthentication yes

PasswordAuthentication yes

에:

ChallengeResponseAuthentication no

PasswordAuthentication no

따라서 기본값은 이제 키 인증 만 허용하는 것입니다. 그런 다음 로컬 사용자의 경우 match구성 설정을 사용하여 로컬 사용자의 기본값을 변경할 수 있습니다. 로컬 개인 네트워크가 192.168.1.0/24라고 가정하면 다음에 추가하십시오 sshd_config.

Match Address 192.168.1.0/24
PasswordAuthentication yes

이제 로컬 사용자는 비밀번호 또는 키로 연결할 수 있으며 원격 사용자는 키를 사용해야합니다. 패스 프레이즈를 사용하여 키를 생성하는 것은 사용자의 책임입니다.

추가 이점으로 단일을 관리 sshd_config해야하며 단일 포트에서만 ssh를 실행하면되므로 자체 관리가 쉬워집니다.


편집 2017-01-21-authorized_keys 파일 사용 제한 .

사용자가 ssh 키를 자체 생성하지 않고 authorized_keys파일 과 함께 사용 하여 로그인 할 수 없도록하려면 sshd의 특정 위치를 설정하여 인증 된 키를 찾도록 제어 할 수 있습니다.

에서 다음 /etc/ssh/sshd_config을 변경하십시오.

AuthorizedKeysFile  %h/ssh/authorized_keys

같은 것 :

AuthorizedKeysFile  /etc/.ssh/authorized_keys/%u

사용자에게 쓰기 권한이없는 제어 된 디렉토리를 가리키면 사용자는 자신의 키를 생성 할 수없고 적용한 규칙을 해결하는 데이를 사용할 수 없습니다.


2
귀하의 답변이 원격 사용자와 로컬 사용자를 어떻게 구별하는지 모르겠습니다. lusers그룹에 속하지만 그룹에 속하지 않은 누군가 rusers키 쌍을 생성하고 키 쌍을 업데이트하면 ~/.ssh/authorized_keys원격에서 로그인 할 수 있습니다.
Richard Hansen

8

다음과 같은 것을 추가 할 수 있습니다 /etc/ssh/sshd_config:

AllowUsers mobileuser1 mobileuser2 *@10.0.0.0/8

위는 허용 된 원격 사용자의 이름이 mobileuser1mobileuser2이며 신뢰할 수있는 네트워크는 서브넷 마스크가 255.0.0.0 인 10.0.0.0 이라고 가정합니다 .

이를 통해 두 명의 모바일 사용자가 어디서나 로그인 할 수 있고 모든 사람이 신뢰할 수있는 네트워크에서 로그인 할 수 있습니다. 이러한 패턴과 일치하지 않는 사용자 (예 : foo원격에서 로그인 한 사용자 )는 액세스가 거부됩니다.


그것은 내가 대답에서 빠뜨린 부분입니다. 우리가 당신의 대답을 내 것과 결합 시키면 매우 강력한 해결책이라고 생각합니다.
Tim Kennedy

2

두 개의 ssh 데몬과 두 개의 sshd_config파일 을 시작하여이를 수행 할 수 있습니다 . 기존 구성을 복사하십시오 (예 : /etc/ssh/sshd_config /etc/ssh/sshd_alt_config대체 구성 설정에서 또는 다른 man페이지에서 sshd_config:

포트

Specifies the port number that sshd(8) listens on.  The default
is 22.  Multiple options of this type are permitted.  See also
ListenAddress

AllowUsers

This keyword can be followed by a list of user name patterns,
separated by spaces.  If specified, login is allowed only for
user names that match one of the patterns.  Only user names are
valid; a numerical user ID is not recognized.  By default, login
is allowed for all users.  If the pattern takes the form
USER@HOST then USER and HOST are separately checked, restricting
logins to particular users from particular hosts.  The
allow/deny directives are processed in the following order:
DenyUsers, AllowUsers, DenyGroups, and finally AllowGroups.

대체 ssh 로그를 다른 파일에 저장하고 싶을 수 있습니다. 예를 들어 잘못된 로그인 시도를 확인하기 위해 해당 파일에 기록 된 내용을 따르십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.