[ 우분투 리눅스 ] SSH 서버 접속 보안 설정

서버를 만들고 외부에서 접속하려면 매번 SSH 비밀번호를 입력하고 접속합니다. 매우 귀찮죠. 그리고 비밀번호가 노출되면 컴퓨터는 해커의 세상이됩니다. SSH 접속만 잘 관리한다면 사실 보안상 문제가 별로 없죠. 나중에 참고를 위해서 사용자 생성과 SUDO 권한 부터 보안 접속과 SSH 에 관련된 전반적인 사용법을 정리해 보겠습니다.

 

목차

 

 공개키 생성 및 로그인 

 

▼ 1. 키를 생성합니다. 해당키는 .ssh 디렉토리에 id_rsa, id_rsa.pub (공개키) 로 각각 생성됩니다.

$ ssh-keygen -b 4096 

 

▼ 2. 실행 결과 passphrase 부분은 그냥 엔터를 칩니다.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/storyg/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
SHA256:abc abc abc abc +4 storyg@xx.local
The key's randomart image is:
+---[RSA 4096]----+
|                 |
+----[SHA256]-----+

 

▼ 3. 생성된 키를 확인합니다.

$ cd ~/.ssh
$ cat id_rsa.pub

 

 

▼ 4. 키를 SCP명령을 통해서 로그인 할 해당 서버로 복사합니다.

$ scp id_rsa.pub [계정명]@[서버명]:[이동위치]/[파일명]

SCP 를 이용한 공개키 키 복사
사용자 폴더 루트에 복사된 키

 

▼ 5. 복사된 공개키를 authorized_keys 에 포함시킵니다.

$ cat id_rsa.pub >> .ssh/authorized_keys

authorized_keys 에 공개키 복사

 

▼ 6. 이제 비밀번호 없이 로그인이 잘 되는지 확인합니다. 대충 6글자를 치고 로그인을 했습니다.

SSH 로그인 테스트


 

 fail2ban 설치 

▼ 1.  fail2ban 이라는 패키지를 설치하면 외부로 부터 반복적 접속에 대한 공격에 방어할 수 있습니다.

$ sudo apt install fail2ban

fail2ban 설치


▼ 2. journalctl -f 명령을 통해서 실시간으로 로그인 시도 내역을 확인할 수 있습니다.

$ journalctl -f

journalctl -f 명령

 

▼ 3. 설정 파일 jail.conf을 찾아서 백업후 수정합니다.

$ sudo vim /etc/fail2ban/jail.conf

fail2ban jail.conf 설정 파일 수정


 

[ DEFAULT ] 라고 정의된 곳에 옵션을 설정하면 됩니다. 

  • bantime : ban 시간 값 입니다.
  • maxretry : 접속 실패 횟수 입니다. (총 5회)

fail2ban 옵션 설정

▼ 5. fail2ban 재실행 (설정 파일 적용)

$ sudo service fail2ban restart

재실행 후 fail2ban 실행 확인


 

 

 비밀번호 로그인 막기 

 

이제 더 이상 외부에서 비밀번호를 이용을 할 수 없도록 설정에서 비밀번호 로그인을 막아보겠습니다.

$ sudo vim /etc/ssh/sshd_config

문서 내의 #PasswordAuthentication yes 값을 주석(#)을 제거 하고 PasswordAuthentication no 로 바꿔줍니다.

 

이제 외부에서 ssh 명령을 통해 비밀번호로 접근할 수 없습니다.

 

 ROOT 로그인 막기 

 

추가적으로 해당 값을 PermitRootLogin yes 로 설정하면 root 로 로그인을 할 수 없도록 막습니다.

root 로그인 막기


 

 사용자 추가하기 

만약 루트로 로그인을 할 수 없다면 새로운 사용자를 추가해야 합니다. 새로운 사용자를 추가하기 위해서 우선 sudo 권한이 있는 계정으로 서버에 접속합니다.

 

▼ 1. 그리고 다음 명령어를 통해서 사용자를 추가합니다. (테스트로 kims 라는 가상의 계정을 만들어 보겠습니다.)

useradd 명령과는 다릅니다. 메뉴얼에 따르면 a low level utility 즉 기본적으로 계정만 생성한다는 뜻 입니다. 홈 폴더와 기타 여러 사항이 포함된 계정을 생성하려면 adduser를 사용해야 합니다.

adduser kims

 

 

▼ 2. 새롭게 생성된 'kims'로 su(swiching user) 해보겠습니다.

$ su kims

 

 sudo 권한 설정하기 

▼ 1. 우선 sudo 그룹에 추가합니다.

$ adduser kims sudo

 

만약 sudo 명령이 동작하지 않는다면 다음 명령으로 install 해야합니다. 일반적으로 docker와 같은 최소화 설치 이미지에는 해당 기능이 빠져 있습니다. 

$ apt install sudo

 

▼ 2. 테스트로 sudo 명령을 이용해서 패키지 업데이트를 해봅니다. 만약 다음과 같은 문구와 함께 실행이 되지 않는다면 sudoer 문세어 추가를 해줘야 합니다.

 

Test is not in the sudoers file. This incident will be reported.

 

$ sudo apt update

 

▼ 3. 루트 권한으로 접근해서 /etc/sudoers 문서를 수정합니다.

$ sudo vim /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root	ALL=(ALL:ALL) ALL
kims	ALL=(ALL:ALL) ALL <----------- 수정!!!

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

 

 

댓글

Designed by JB FACTORY