저는 초보자이고 보드와 Linux 전반에 익숙하지 않으며 Debian의 멋진 SSH 패키지(OpenSSH라고 생각합니다)를 사용하여 Pi에 물리적으로 연결하지 않고도 더 많은 것을 배우고 배울 수 있습니다. 직렬 케이블.
저는 이 포럼의 다양한 사이트와 스레드를 따라 SSH를 더욱 안전하게 만들기 위해 강화하고 조정했습니다. 그러나 내 파일에 적용하고 싶은 sshd_config
중요한 변경 사항 중 하나 는 나를 괴롭히는 것입니다 ListenAddress
. 내가 이해한 바에 따르면, ListenAddress
의 값은 sshd_config
서버가 요청을 수신해야 하는 IP 주소의 엄격한 매개변수를 정의합니다.
ListenAddress
in의 기본값은 주석 처리된 sshd_config
입니다 0.0.0.0
. 나는 일을 안다"기본값을 주석 처리합니다."정책에 따라 애플리케이션은 기본적으로 이 값을 사용합니다. 내가 읽고매뉴얼 페이지이는 기본값이 다음과 같음을 나타냅니다.
현재 라우팅 도메인의 모든 로컬 주소를 수신합니다.
네트워킹에 대해 많이 알고 있다고 주장할 수는 없지만 0.0.0.0
서버가 네트워크의 요청을 수신한다는 내용을 다른 곳에서 읽은 적이 있습니다.어느인터넷의 IPv4 주소? 이로 인해 내 (인터넷 연결) Pi가 표적이 될 수 있다는 우려가 있으며 ListenAddress
내부 네트워크의 요청만 수신하도록 제한하는 것이 신중한 것 같습니다. 집 외에는 다른 곳을 방문할 필요가 없습니다.
내 라우터(Apple Airport)의 DHCP 범위는 이고 10.0.1.2
, 10.0.1.200
라우터는 에 있습니다 10.0.1.1
. (이것이 기본값인 것 같습니다. 더 많은 것을 알고 있다면 로 변경해야 할 수도 있습니다 192.168.1.1
.) 다음 값을 설정하려고 시도했는데 ListenAddress
, 모두 SSH에서 나를 잠그고 ListenAddress
기본값으로 되돌리려면 USB 직렬 케이블 연결이 필요합니다.
10.0.1.0
0
- 해당 범위 의 모든 IP를 나타낼 수 있도록 마지막 옥텟을 설정하려고 생각했습니다.10.0.1.
10.0.1.*
- *
와일드카드로 사용하면 위의 첫 번째 예와 같이 작동할 수 있을 것 같습니다.
10.0.1.**
-단일 와일드카드가 범위 *
만 나타내는 경우.1
.9
10.0.1.1
- 지금은 어리석은 것처럼 보이지만 라우터의 IP를 설정하는 것이 효과가 있을 것이라고 생각했습니다. 왜냐하면 그것이 IP 주소를 전달하는 마법의 "상자"이기 때문입니다.
10.0.1.1/24
- 처음 3개의 옥텟을 정의하는 데 사용되며 /24
마지막 옥텟은 열린 "범위"로 남겨둡니다. 그런데 이 캐릭터를 sshd_config
인식하지 못하는 것 같아요/
127.0.0.1
- 나배운 ~에 대한또는 루프백 주소 옵션이 있지만 localhost
그것도 작동하지 않습니다
10.0.1.24
- 내 컴퓨터의 IP. 마지막 주사위 굴림은 효과가 없으며 런타임에서 systemctl status ssh.service
를 반환 error: Bind to port 22 on 10.0.1.24 failed: Cannot assign requested address
하고 메시지가 표시됩니다 fatal: Cannot bind any address
.Failed to start OpenBSD Secure Shell server
이것이 제가 생각하는 것과 지금까지 시도한 것을 설명하는 데 도움이 되기를 바랍니다. 모든 논리적 옵션을 다 써버린 것 같고 어쩌면 0.0.0.0
이것이 제가 달성하려는 것에 대해 허용되는 유일한 옵션일 수도 있습니다. 제 질문이 웹 포럼에 더 적합한지 알려주세요.
걱정스럽게도 다음 값 systemctl status ssh.service
도 권장됩니다 .Deprecated option
sshd_config
Deprecated option KeyRegenerationInterval
Deprecated option RhostsRSAAuthentication
Deprecated option RSAAuthentication
Deprecated option KeyRegenerationInterval
Deprecated option RhostsRSAAuthentication
Deprecated option RSAAuthentication
그런데 이들에 대한 프로그램의 호감도가 어떻게 되어야 할지 모르겠습니다.
나는 지금까지 내가 가진 (매우 제한된) 지식의 한계를 뛰어넘고 있지만, 이 위원회에 대한 이전 문의를 통해 귀하가 친절하고 자세한 답변을 해주시기를 바랍니다.
내 거sshd_config
기본값은 v1.103입니다. 내가 변경한 사항은 다음과 같습니다.
AddressFamily inet
AllowUsers keith
Protocol 2
LoginGraceTime 30
KeyRegenerationInterval 3600
PermitRootLogin no
StrictModes yes
MaxAuthTries 3
MaxSessions 1
PubkeyAuthentication yes
IgnoreUserKnownHosts yes
IgnoreRhosts yes
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
AuthenticationMethods publickey keyboard-interactive
UsePAM yes
X11Forwarding no
PrintMotd no
TCPKeepAlive no
ClientAliveInterval 360
ClientAliveCountMax 0
저는 안내를 위해 다양한 웹사이트와 리소스를 사용해왔기 때문에 이러한 값 중 일부는 이제 오래된 것일 수 있습니다. 나는 SSH 보안이 끊임없이 발전하고 있으며 움직일 수 있는 축제라는 것을 알고 있습니다.
이것이 내 사고 과정과 접근 방식을 설명하기를 바라며, 간결함이 부족한 점에 대해 사과드립니다. 지금까지 열정적으로 도와주신 모든 분들께 감사드립니다. 학습을 멈추지 마세요!
답변1
이는 실제로 ListenAddress
어떤 시스템 인터페이스를 수신해야 하는지 SSH 서버에 알려줍니다(0:0:0:0은 모든 인터페이스에서 수신하도록 합니다). 예를 들어 시스템에 하나의 Wi-Fi(10.0.1.4)와 하나의 이더넷(10.0.1.12)이 있는 경우 이더넷 인터페이스에서만 수신 대기하게 되며 다른 컴퓨터는 연결 ListenAddress 10.0.1.12
하려면 SSH를 사용해야 합니다 .10.0.1.12
외부 사용자를 특정 주소 범위로 제한하려면 iptables
방화벽을 직접 사용하거나(사람에게는 적합하지 않음) 더 수용 가능한 프런트엔드를 사용할 수 있습니다.ufw
.
그러나 귀하는 외부 액세스를 차단했을 수 있는 라우터 뒤에 있기 때문에 라우터 반대편에 있는 시스템은 귀하의 10.0.1.*
주소를 볼 수 없습니다. 모든 것이 하나의 주소, 즉 라우터에서 나오고 외부에서 시작하여 다음 중 하나의 주소로 시작됩니다. 로컬 컴퓨터에는 포트 전달을 수행하도록 라우터가 설정되어 있어야 합니다(라우터의 일부 지정된 포트에 대한 연결은 로컬 네트워크의 특정 로컬 주소:포트로 전달됩니다).
답변2
iptables
방법(매뉴얼 페이지)
iptables
다음과 같이 로컬 네트워크만 허용하여 컴퓨터에 연결하는 것이 좋습니다 .
그러한 규칙의 예는 내에서 가져온 것입니다.rules.v4
긴 버전
--append INPUT --protocol tcp --match tcp --destination-port 22 --match iprange --src-range 192.168.0.2-192.168.0.254 --match comment --comment "ssh + sshfs" --jump ACCEPT
간결한 버전
-A INPUT -p tcp -m tcp --dport 22 -m iprange --src-range 192.168.0.2-192.168.0.254 -m comment --comment "ssh + sshfs" -j ACCEPT
conntrack
+를 사용하여 지정된 수정 예subnet
긴 버전
--append INPUT --match conntrack --ctstate NEW,ESTABLISHED --protocol tcp --match tcp --destination-port 22 --source 192.168.0.0/24 --match comment --comment ssh --jump ACCEPT
간결한 버전
-A INPUT -s 192.168.0.0/24 -p tcp -m conntrack --ctstate NEW,ESTABLISHED -m tcp --dport 22 -m comment --comment ssh -j ACCEPT
답변3
ssh
"Match" 지시문을 사용하여 모든 것을 유지할 수 있습니다.sshd_config
# This will disallow everyone
AuthorizedKeysFile /dev/null
# Put the netmask you want to allow here
Match Address 10.0.1.1/24
# Connections from above IP can use normal authorized keys to authenticate
AuthorizedKeysFile %h/.ssh/authorized_keys
실수로 잠기는 것을 방지하려면 콘솔에서 테스트하는 것이 가장 좋습니다.