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


22

SSH 로그인 (RSA 키 페어)을 통해 특정 개인 IP 세트를 Linux 서버에 입력하는 방법은 무엇입니까?


3
방화벽 규칙은 일반적인 조치입니다
Raman Sailopal

2
ssh가 TCP 래퍼 또는 / etc / ssh / sshd_config 파일 규칙으로 컴파일하는 경우 방화벽 또는 /etc/hosts.allow.
Rui F Ribeiro

한 가지 이상의 방법은 linux.die.net/man/5/sshd_config 를 참조하십시오 ./etc/ssh/sshd_config
ron

답변:


42

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

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

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

예를 들어, 192.168.0.0/24 네트워크의 트래픽을 허용하고 그렇지 않으면 트래픽을 포트 22로 떨어 뜨립니다. DROP당신의 iptables 기본 정책에 구성되어있는 경우 규칙은 필요하지 않습니다 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

삭제 규칙 전에 더 많은 규칙을 추가하여 더 많은 네트워크 / 호스트와 일치시킬 수 있습니다. 네트워크 나 호스트 주소가 많은 경우 ipset 모듈을 사용해야 합니다. 임의의 IP 주소 범위를 사용할 수있는 iprange 모듈 도 있습니다 .

iptables는 재부팅시 지속되지 않습니다. 부팅시 iptables를 복원 할 메커니즘을 구성해야합니다.

iptablesIPv4 트래픽에만 적용하십시오. ssh가 IPv6 주소를 청취하는 시스템은 필요한 구성으로 수행 할 수 있습니다 ip6tables.

옵션 2 : TCP 래퍼 사용

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

기본적으로 모든 호스트를 거부하십시오.

/etc/hosts.deny:

sshd : ALL

그런 다음 hosts.allow에 허용 된 호스트를 나열하십시오. 예를 들어 네트워크 192.168.0.0/24localhost 를 허용합니다 .

/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파일 끝에 원하는 인증 방법을 추가 하십시오. Match파일의 끝에 배치 하는 것이 중요합니다. 파일 이후의 모든 구성 행은 다음 Match행 까지 조건부 블록 안에 배치되기 때문 입니다. 예를 들면 다음과 같습니다.

Match Address 127.0.0.*
    PubkeyAuthentication yes

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

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


/ etc / ssh / sshd_config에 ListenAddress 지시문을 추가하는 것은 어떻습니까?
jerome

네트워크 구성 및 허용 할 호스트에 따라 특정 상황 (예 : 개인 네트워크 주소 청취)이 가능합니다.
sebasth

2
또한, sshd_config는 AlowUsers 지시문을 사용하여 필터링을 설정할 수 있으며, 또한 "IP 또는 서브넷에서"를 사용하여 인증 된 키도 필터링하도록 설정할 수 있습니다.
tonioc

@tonioc 사용 사례에 적합한 솔루션입니다. 이 제안을 답변으로 확장하십시오.
simlev

당신은 4 개 개의 포트는 각각 다음 기본, 다른 네트워크로 이동이있는 NIC가있는 경우 #ListenAddress ::/etc/ssh/sshd_config이러한 네트워크의에서 들어오는 허용하도록 SSH 서버를 말할 것이다. 그렇지 않으면 할 ListenAddress <ip address>경우 <ip address>그 NIC 포트의 허용 된하려는 것입니다. 내는 eth0것입니다 192.168.3.4, 따라서 ListenAddress 192.168.3.4전용 네트워크 eth0를에 192.168.3.4 작업 SSH 결과; eth1 eth2 eth3이 거부되었습니다.
ron

5

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

  • 파일에 AllowUsers옵션을 사용하여 사용자 필터링을 추가 sshd_config하십시오.

    AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
    

    이를 통해 주소 및 otherid1 , 다른 위치의 otherid2 에서만 johndoeadmin2가 허용 됩니다 .192.168.1.*

  • ssh 키 또는 ca 기반 키를 .ssh/authorized_keys주어진 사용자의 홈 디렉토리 파일에있는 주소 세트로 제한하십시오 .

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

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

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