집에 라즈베리 파이가 있고 홈 네트워크에 연결되어 있습니다. 저는 이를 사용하여 VPN 서버, SSH 터널을 실행하고 때로는 SSH를 통해 유지 관리를 수행합니다.
집에 없는 동안 Pi에 원격으로 연결할 수 있도록 라우터에서 포트를 열어(TCP) 두는 것이 나쁜 생각인가요? 나는 일반적인 포트 22를 사용하지 않습니다. 내가 선택한 임의의 포트입니다. 그러나 nmap
on 을 사용하여 내 IP 주소를 스캔하면 pentest-tools.com
SSH에 사용하기로 선택한 열린 포트가 표시됩니다. 내 Pi는 비밀번호로 보호되어 있으며 내가 아는 민감한 데이터나 신용카드 번호가 없습니다. 하지만 VPN이나 SSH 터널링에 사용한다는 점을 고려하면 민감한 데이터가 이를 통해 이동할 수 있습니다. 그러면 내 라우터에 이 SSH 포트를 열어 두는 것이 나쁜가요? 내 Pi가 항상 켜져 있고 해당 포트를 수신하고 있다는 점을 고려할 때 누구든지 이 포트를 열어 내 홈 네트워크에 악의적인 작업을 수행할 수 있습니까?
답변1
보안 측면에서 세 가지 추가 방법이 떠오릅니다.
A: 공개 키 인증을 사용하세요.
보안을 강화하려면 공개 키 인증을 사용하도록 SSH 서버를 설정할 수 있습니다. 즉, 강력한 비밀번호를 추가하거나 대신하여 SSH 클라이언트가 서버의 공개 키와 일치하는 개인 키를 제공하는 경우에만 연결이 열립니다. 공격자가 어떻게 해서든 공개 키를 얻을 수 있더라도 개인 키를 복구할 수는 없습니다. 그러나 이렇게 해도 포트 스캐너에서 포트가 숨겨지지는 않습니다.
B: 다른 포트를 사용하세요
또한 22번 포트가 아닌 다른 포트를 수신하도록 SSH 서버를 구성하여 포트 스캔을 줄이는 측면에서 좋은 경험을 했습니다. 해당 기본 구성 옵션은 다음과 같습니다 /etc/ssh/sshd_config
.
Port 22
예를 들어 54322로 변경할 수 있습니다.
Port 54322
나중에 SSH 서버를 다시 시작하는 것을 잊지 마세요. Raspberry의 Linux에 따라 다음 중 하나일 수 있습니다.
# service sshd restart
# systemctl restart sshd
( #
파일에 없는 경우 기호는 여기 예제에서 루트 프롬프트를 나타냅니다.)
걱정하지 마세요. 현재 SSH 세션은 활성 상태로 유지됩니다. 로그인이 여전히 작동하는지 확인하기 위해 포트 54322에 대한 두 번째 SSH 세션을 열어보는 것이 좋습니다. 기억해
- SSH 클라이언트를 새 포트로 설정
- 해당되는 경우 인터넷 라우터의 새 포트를 Raspberry Pi로 전달하세요.
C: 포트를 닫고 요청 시에만 엽니다.
이 포트가 열려 있다는 것을 "인터넷"에 표시하고 싶지 않다면 포트 노크 데몬을 살펴보십시오 knockd
. 이러한 프로그램은 귀하가 정의한 (닫힌) 포트를 수신하고, 귀하가 정의한 노크 시퀀스에 따라 다른 포트(예: SSH 포트)를 엽니다. 휴대폰이나 노트북에서 노킹 시퀀스를 시작하면 Raspberry Pi의 노크 데몬이 전혀 보이지 않는 SSH 포트를 엽니다.
더 자세히 말하면, 포트 노킹은 구성에 한 줄을 추가합니다 iptables
. 이 줄은 라즈베리의 포트를 엽니다. 이는 또한 SSH 포트가 iptables
이전에 닫혀야 함을 의미합니다. 이는 SSH를 통해 로그인할 수 없음을 의미합니다.
예 knockd.conf
는 다음과 같습니다.
[openclosessh]
sequence = 1000,2020,3015,65432
seq_timeout = 15
tcpflags = syn
start_command = /usr/local/bin/knockd-open.sh %IP%
cmd_timeout = 30
stop_command = /usr/local/bin/knockd-close.sh %IP%
또한, 인터넷 라우터의 노크 대상 포트를 Raspberry로 전달하는 것을 잊지 마십시오.
해당 열기/닫기 스크립트는 다음과 같습니다.
#!/bin/bash
# /usr/local/bin/knockd-open.sh
# adds two lines at the top of iptables which allow all incoming and outgoing traffic on tcp port 54322
iptables -I INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -I OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT
그리고
#!/bin/bash
# /usr/local/bin/knockd-close.sh
# deletes those two lines again
iptables -D INPUT -s $1 -p tcp --dport 54322 -j ACCEPT
iptables -D OUTPUT -d $1 -p tcp --sport 54322 -j ACCEPT
를 사용하여 두 스크립트를 모두 실행 가능하게 만드는 것을 잊지 마십시오 chmod +x /usr/local/bin/knockd*
. 또한 다음 중 하나를 사용하여 knockd 서비스를 시작하고 활성화해야 합니다.
# service knockd start && update-rc.d knockd enable
# systemctl start knockd && systemctl enable knockd
특히 콘솔 액세스 권한이 없는 원격 컴퓨터를 노크하는 경우 atd
구성 실수가 있을 경우 모든 변경 사항을 자동으로 취소하거나 Raspberry를 재부팅하는 데 사용할 수 있습니다.
iptables는 재부팅 시 자동으로 저장되지 않으므로 예를 들어 루트( 를 통해 su
) 및
# at now + 5 minutes
> reboot
> (hit ctrl-d)
# ./script-which-closes-iptables.sh
예는 ./script-which-closes-iptables.sh
다음과 같습니다( 를 사용하여 실행 가능하게 만드는 것을 기억하세요 chmod +x
).
#!/bin/bash
# allow everything on the loopback interface
iptables -A INPUT -i lo -j ACCEPT
# allow only related or established incoming ssh sessions
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --dport 54322 -j ACCEPT
# allow outgoing related or established ssh sessions
iptables -A OUTPUT -p tcp -m state --state RELATED,ESTABLISHED -m tcp --sport 54322 -j ACCEPT
# allow everything on the loopback interface
iptables -A OUTPUT -o lo -j ACCEPT
# drop everything else in and out
iptables -P INPUT DROP
iptables -P OUTPUT DROP
SSH 세션이 지금 종료되면 Raspberry는 5분 안에 재부팅됩니다. SSH 세션이 여전히 활성 상태이면 다음을 사용하여 보류 중인 재부팅을 취소합니다.
# atq
15 reboot
# atrm 15
SSH 세션이 여전히 활성 상태인 경우 두 번째 SSH 세션을 통해 로그인을 시도하세요. 작동하지 않습니다. 그런 다음 휴대폰을 사용하여 에서 구성한 포트를 노크하세요 /etc/knockd.conf
. 그런 다음 두 번째 SSH 세션을 통해 다시 로그인을 시도하세요. 이번에는 제대로 작동할 것입니다.
그런 다음 iptables가 재부팅을 유지하도록 할 수 있습니다. 시스템에서 다음을 통해 패키지를 설치해야 할 수도 있습니다.
# apt-get install iptables-persistent
iptables를 저장하세요
# iptables-save > /etc/iptables/iptables-rules
다음을 사용하여 iptables 서비스를 활성화합니다.
# systemctl enable iptables
답변2
Raspberry Pi에 강력한 비밀번호와 강력한 SSH 보안이 있다면 괜찮습니다. 공격자는 SSH에 로그인할 수 없거나 이를 악용할 수 없다면 SSH로 아무 것도 할 수 없습니다. 하지만 그들은 확실히 항구를 찾을 것입니다.
역사적 참고 사항: 과거에는문제가 생겼어SSH 구성으로; 자동 생성된 키는 예측 가능했습니다. 문제가 해결되었습니다.
공격자가하다SSH 액세스 권한을 얻으면 실제로 장치를 소유하게 됩니다. 그런 다음 그들은 그것을 사용하여 다음과 같은 나쁜 일을 할 수 있습니다.ARP 중독, 네트워크를 통해 암호화되지 않은 데이터를 캡처하고 변경할 수 있습니다. 또한 Pi를 다른 호스트에 대한 공격 시작점으로 사용할 수도 있습니다. Pi는 다른 컴퓨터와 마찬가지로 보안에 주의해야 합니다.