홈 서버를 설치한다고 하니, 인프라를 담당하시는 직장 선배님께서 한 말씀. “보안에 신경 쓰지 않으면 전 세계 사람들이 너의 서버에 노크하고 들어와서 놀다 갈 거야.” 이번 포스트에서는 홈 서버의 보안을 강화하는 방법 중 SSH와 관련된 보안 강화 방법에 대해 알아보겠습니다.

SSH 란?

SSH는 Secure SHell 의 줄임말로, 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜(통신 방식) 입니다. 기존의 Telnet 이라는 방식의 원격 접속에서 보안성을 높이기 위한 암호화 방식 등을 도입한 통신 방식입니다.

출처 : gabia 라이브러리

SSH 보안 강화 방법

  1. SSH 포트 변경
  2. SSH 키 이용
  3. 비밀번호 인증 비활성화
  4. 기타 SSH 설정

1. SSH 포트 변경

SSH 서비스가 실행되는 포트를 변경함으로써, 잘 알려진 포트에 대한 무작위 대입 공격(Brute Force Attack)을 방어하는 기본적인 방법 중 하나입니다.

SSH의 기본 포트는 22번으로, 이는 잘 알려진 사실입니다. 따라서 22번 포트는 공격자에게 최우선 공격 지점이 될 것이며, 이를 피하기 위해 SSH 포트를 변경하는 것이 SSH 보안 중 가장 기본적인 사항이라고 할 수 있습니다.

SSH 포트 번호는 SSH 설정 파일에서 변경할 수 있습니다.

1
sudo vi /etc/ssh/sshd_config

SSH 데몬 설정파일을 연 뒤 Port 항목의 숫자를 변경해줍니다. 만약 주석처리(#)가 되어있다면, 주석을 해제해주세요.

1
2
3
4
5
6
7
8
9
# sshd_config 파일
# ...
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER

Port 12322 # <<< 이 부분을 수정
#AddressFamily any
#ListenAddress 0.0.0.0
# ...

변경 사항을 저장한 후, SSH 데몬을 재시작합니다.

1
sudo systemctl restart sshd

추가로, 홈서버 네트워크의 가장 상위 레벨에 통신사 공유기 혹은 라우터가 있다면, 외부와 홈서버간의 포트포워딩 설정도 변경해주는 게 좋습니다. 만약 홈서버의 SSH에 연결되는 외부 포트가 22번으로 설정되어 있다면, 내부에서 SSH 포트 번호를 변경한다 해도 외부에서는 22번 포트로 접속이 가능하므로 보안 효과가 줄어듭니다. 따라서 포트포워딩 설정에서 외부 포트를 변경하여 보안을 강화하는 것이 좋습니다.

2. SSH 키 인증 방식 이용

SSH 키 인증 방식이란, SSH에 접속하는 사용자가 본인을 인증하기 위해 비밀번호 대신 공개 키 - 개인 키 인증 방식을 사용하는 것을 말합니다. 서버에 공개 키를 두고, 사용자는 이와 매칭되는 개인 키를 사용하여 SSH 접속시 두 키를 매칭함으로써 인증을 수행합니다.

비밀번호 인증 방식은 서버와 사용자가 동일한 인증값을 가지고 있는 ‘대칭 키’ 인증 방식입니다. 이 경우 사용자는 비밀번호를 기억하기 쉽지만, 공격자가 비밀번호를 유추할 가능성이 있으며, 짧은 비밀번호는 무작위 대입 공격(부르트포스 공격)에 취약할 수 있습니다.

반면, SSH 키 인증 방식은 ‘비대칭 키’ 인증 방식입니다. 서버와 사용자가 가지고 있는 인증값이 서로 다르며, 인증시에 SHA-256, ED25519 등의 알고리즘을 통해 두 값을 비교합니다. 서버에는 공개 키가 저장되며, 사용자는 개인 키를 보유하게 됩니다.

SSH 키(인증값)는 무작위로 생성되며, 매우 긴 길이의 키를 가지게 되므로 공격자가 유추하기 어렵습니다. 또한, 각각의 서버마다 고유한 키 한 쌍을 사용할 경우, 하나의 키가 유출되더라도 다른 서버의 보안에는 영향을 미치지 않습니다.

SSH 키 인증 방법은 이전의 포스트를 참고해주세요.

ssh key 발급 및 등록(윈도우)
모바일 환경에서 SSH 키 발급받기

3. 비밀번호 인증 비활성화

SSH 키 인증 방식을 적용했다면, 비밀번호 인증을 비활성화 하는 것도 함께 진행하길 권장합니다. 이렇게 하면 SSH 접속시 비밀번호 인증을 아예 차단하게 되어, 공격자가 비밀번호를 유추하거나 무작위 대입 공격을 시도하는 것을 막을 수가 있습니다.

SSH 키는 사용자 기기에 저장되므로, 해당 키를 보유한 기기에서만 SSH 접속이 가능하다는 제약이 생기지만, 반대급부로 얻을 수 있는 보안성 향상이 매우 큽니다.

먼저 SSH 설정 파일을 열고

1
sudo vi /etc/ssh/sshd_config

PasswordAuthentication 항목을 no 로 변경합니다.

1
2
# sshd_config 파일
PasswordAuthentication no

변경사항을 저장한 뒤, ssh 데몬을 재시작합니다.

1
sudo systemctl restart sshd

4. 기타 SSH 설정

보안을 강화하기 위한 기타 SSH 설정들은 아래와 같습니다.

1
sudo vi /etc/ssh/sshd_config
1
2
3
4
5
6
7
# sshd_config 파일

PermitRootLogin no      # 루트 계정으로 SSH 접속 비활성화
MaxAuthTries 10         # 최대 인증 시도 횟수 제한
ClientAliveInterval 300 # SSH 연결 세션 300초마다 체크
ClientAliveCountMax 2   # 체크 2번 이상 응답 안하면 세션 종료
LoginGraceTime 1m       # 로그인 시도 실패 후 1분 내로 로그인 못하면 접속 종료됨

Reference

gabia 라이브러리 - SSH 명칭부터 접속까지 한 번에 이해하기 1