macOS에서 선택된 IP에 대한 ssh 액세스 제한


5

macOS 10.12의 ssh 액세스를 로컬 네트워크의 선택된 IP로 제한하고 싶습니다. 다음 파일을 작성해 보았습니다.

# /etc/hosts.allow
sshd: 192.168.1.32
sshd: 192.168.1.33

# /etc/hosts.deny
sshd: ALL

그런 다음 다음을 사용하여 다시 시작하십시오.

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist

언로드가 ssh.plist성공적으로 ssh를 비활성화했지만 다시로드 한 후에도 여전히 모든 IP에서 연결할 수 있습니다.

IP 화이트리스트를 구성하려면 어떻게해야합니까?

답변:


4

hosts.allow 및 hosts.deny는 TCP 래퍼를 통해 서비스 (sshd)를 실행할 때만 사용됩니다. 기본 macOS 설치는 그렇게하지 않으므로 아무런 영향을 미치지 않습니다.

다른 답변에서 권장하는 것처럼 방화벽을 사용하여 SSH에 대한 액세스를 제한 할 수 있습니다. 하드웨어 (예 : "외부") 방화벽 또는 내장 된 pf 방화벽과 같은 소프트웨어 방화벽 일 수 있습니다.

그러나 방화벽 만 사용하지 않는 것이 좋습니다. 최선의 방법은 sshd 서비스 자체를 제한하는 것입니다. 원하는 경우 방화벽 보호 기능을 추가 할 수 있습니다. 그 이유는 어떤 이유로 든 방화벽이 비활성화되면 외부 사용자가 갑자기 sshd와 통신하기 위해 액세스 할 수 있다는 것입니다. 실제로 원하지 않습니다.

액세스를 제한하도록 sshd를 구성하려면 / etc / ssh / sshd_config 파일을 편집하고 다음을 추가해야합니다.

AllowUsers username@192.168.1.32 username@192.168.1.33

"username"을 실제 사용자 이름으로 바꿉니다.

원하는 경우 부품을 *로 바꾸어 와일드 카드를 표시 할 수 있습니다 (예 : username@192.168.1.*또는) *@192.168.1.32. sshd_config 매뉴얼 페이지에서 옵션에 대한 자세한 내용을 읽을 수 있습니다.


이 방법으로는 비밀번호 인증을 통과 할 수 없습니다. 비밀번호를 4 번 요청받은 후 응답을받습니다Received disconnect from [...] port 22:2: Too many authentication failures
seven11

비밀번호로 로그인 하시겠습니까? - 사용자 이름은 무엇입니까? sshd_config에 추가 한 실제 줄을 붙여 넣으십시오?
jksoegaard

추가 AllowUsers admin@192.168.1.32 admin@192.168.1.33한 다음에 연결을 시도했습니다 ssh admin@192.168.1.31. 필터가 없으면 관리자 암호를 입력하여 성공적으로 로그인합니다.
seven11

그리고 로그인하려는 PC의 IP 주소는 무엇입니까? -서버의 로그를 통해 해당 IP의 로그인을 확인할 수 있습니까? (IP가 여러 개인 경우) .. 구성 파일을 변경 한 후 sshd를 다시 시작 했습니까?
jksoegaard

예, launchctl을 사용하여 sshd를 다시 시작했습니다. IP 제한없이 연결하면 다음과 같이 표시됩니다.sshd: Accepted keyboard-interactive/pam for admin from 192.168.1.32 port 38766 ssh2
seven11 November

2

hosts.allow그리고 hosts.deny더 이상 사용되지 않으며 당신은 (방화벽을 사용한다 pf) 대신.

의 기본 규칙은 pf에서 찾을 수 있습니다 /etc/pf.conf. 이 파일 디렉토리를 편집하거나 사용자 정의 규칙 세트를 작성할 수 있지만 기본 파일의 컨텐츠를 여기에 복사하십시오. 다음 두 줄을 추가하십시오.

# The name of the network interface as shown in ifconfig
ext_if="en0"

tcp_services = "{ssh}"
icmp_types = "{echoreq, unreach}"
trusted = "{192.168.1.32, 192.168.1.33}"

# Exempt the loopback interface to prevent services that use if from being blocked
set skip on lo0

# This is a desktop so we have to be permissive in allowing outgoing  connections
pass out quick modulate state


# Block all incoming SSH Traffic by default 
  block in on $ext_if inet proto tcp from any to any port $tcp_services

# Allow SSH traffic from trusted IPs
pass in on $ext_if inet proto tcp from $trusted to any port $tcp_services

다음 pf명령으로 활성화 하십시오

$ sudo pfctl -e                                 #if using the default /etc/pf.conf
$ sudo pfctl -e -f /path/to/custom_pf.conf      #if using a custom pf.conf

이 규칙 세트는 기본적으로 정의 된 신뢰할 수있는 IP를 제외한 모든 SSH를 차단합니다. 다른 모든 서비스에는 영향을 미치지 않습니다.


을 (를) 수정 /etc/pf.conf한 후을 사용하도록 설정 pf했습니다 sudo pfctl -e -f /etc/pf.conf. 이제 다른 컴퓨터에서 연결할 수 없습니다 ssh admin@192.168.1.31. 영원히 중단됩니다. 또한 이것은 모든 트래픽을 차단하므로 pf활성화 된 웹 사이트에 연결할 수 없습니다 .
seven11

저는 데스크탑 설정을위한보다 포괄적 인 규칙 세트를 작성했습니다. 내 편집 내용을 참조하십시오.
Allan

고마워, 나는 구현하기가 더 간단한 다른 대답을 갔다.
seven11
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.