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 화이트리스트를 구성하려면 어떻게해야합니까?
답변
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 매뉴얼 페이지에서 옵션에 대한 자세한 내용을 읽을 수 있습니다.
답변
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를 차단합니다. 다른 모든 서비스에는 영향을 미치지 않습니다.