IP 주소로 특정 클라이언트에 대한 SSH 액세스 제한

IP 주소로 특정 클라이언트에 대한 SSH 액세스 제한

SSH 로그인(RSA 키 쌍)을 통해 특정 개인 IP 세트가 Linux 서버에 입력되도록 어떻게 허용합니까?

답변1

구성하여 연결할 수 있는 호스트를 제한할 수 있습니다.TCP 래퍼 또는 다음을 사용하여 네트워크 트래픽 필터링(방화벽)iptables. 클라이언트 IP 주소에 따라 다른 인증 방법을 사용하려면 대신 SSH 데몬을 구성하십시오(옵션 3).

옵션 1: IPTABLES를 사용한 필터링

Iptables 규칙은 처음 일치할 때까지 순서대로 평가됩니다.

예를 들어 192.168.0.0/24 네트워크의 트래픽을 허용하고 그렇지 않으면 포트 22로의 트래픽을 삭제합니다. DROPiptables 기본 정책이 로 구성된 경우 규칙이 필요하지 않습니다 DROP.

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

더 많은 네트워크/호스트와 일치하도록 삭제 규칙 앞에 더 많은 규칙을 추가할 수 있습니다. 네트워크나 호스트 주소가 많으면 다음을 사용해야 합니다.IP세트기준 치수. 도 있습니다아이레인지임의의 범위의 IP 주소를 사용할 수 있는 모듈입니다.

iptable은 재부팅 후에도 지속되지 않습니다. 부팅 시 iptables를 복원하려면 일부 메커니즘을 구성해야 합니다.

iptablesIPv4 트래픽에만 적용됩니다. IPv6 주소를 수신하는 SSH가 있는 시스템에서는 를 사용하여 필요한 구성을 수행할 수 있습니다 ip6tables.

옵션 2: TCP 래퍼 사용

참고: tcpwrappers에 대한 지원이 제거되었으므로 이는 최신 배포판에서는 옵션이 아닐 수 있습니다.오픈SSH 6.7

TCP 래퍼를 사용하여 연결할 수 있는 호스트를 구성할 수도 있습니다. TCP 래퍼를 사용하면 IP 주소 외에도 규칙에 호스트 이름을 사용할 수도 있습니다.

기본적으로 모든 호스트를 거부합니다.

/etc/hosts.deny:

sshd : ALL

그런 다음 Host.allow에 허용된 호스트를 나열하십시오. 예를 들어 네트워크를 허용하려면192.168.0.0/24그리고로컬호스트.

/etc/hosts.allow:

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

옵션 3: SSH 데몬 구성

클라이언트 주소/호스트 이름에 따라 다른 인증 방법을 사용하도록 sshd_config에서 ssh 데몬을 구성할 수 있습니다. 다른 호스트의 연결만 차단하려면 대신 iptables 또는 TCP 래퍼를 사용해야 합니다.

먼저 기본 인증 방법을 제거합니다.

PasswordAuthentication no
PubkeyAuthentication no

Match Address그런 다음 파일 끝의 a 뒤에 원하는 인증 방법을 추가합니다 . Match파일 끝 부분에 배치하는 것이 중요합니다. 왜냐하면 파일 뒤의 모든 구성 라인은 다음 Match라인까지 조건부 블록 내에 배치되기 때문입니다. 예를 들어:

Match Address 127.0.0.*
    PubkeyAuthentication yes

다른 클라이언트는 계속 연결할 수 있지만 사용 가능한 인증 방법이 없기 때문에 로그인이 실패합니다.

일치 인수 및 허용되는 조건부 구성 옵션은 다음에 설명되어 있습니다. sshd_config 매뉴얼 페이지. 일치 패턴은 다음에 문서화되어 있습니다.ssh_config 매뉴얼 페이지.

답변2

다음은 이전 답변을 확장하기 위한 SSH 데몬에 대한 몇 가지 추가 구성입니다.

  • 파일 AllowUsers에 옵션을 사용하여 사용자 필터링을 추가합니다 .sshd_config

    AllowUsers [email protected].* [email protected].* otherid1 otherid2
    

    이를 통해존 도우그리고관리자2192.168.1.*주소 에서만다른 ID1,다른 ID2어디에서나.

  • .ssh/authorized_keysSSH 키 또는 CA 기반 키를 특정 사용자의 홈 디렉터리 파일 에 있는 주소 집합으로 제한합니다 .

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    이 예에서 사용자 별칭의 공개 키는 지정된 주소에서만 유효합니다.

답변3

UFW(Uncomplicated FireWall) 설치에 문제가 없다면:

sudo ufw allow from 192.168.1.0/24 to any port 22

편집하다: 이전에 언급한 것처럼 비밀번호를 편집하여 수행할 수 있는 대신 키를 사용하여 인증하는 것이 좋습니다./etc/ssh/sshd_config:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

답변4

클라이언트 인증에 SSH CA를 사용하는 경우 source-address인증서에 서명할 때 옵션을 지정할 수 있습니다.

ssh-keygen -s ca_privkey -O source-address=172.16.0.0/16 id_rsa.pub
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

인증서는 주소를 id_rsa-cert.pub통해서만 호스트에 로그인하는 데 사용할 수 있습니다 172.16.0.0/16( 127.0.0.1이를 지정하지 않은 경우에도 마찬가지입니다).

man 1 ssh-keygen더 자세한 내용을 원한다면 좋은 문서입니다.

관련 정보