Google OTP(Authenticator) 이용한 SSH 로그인 보안 강화

일반적으로 서버의 SSH 접속하기 위해 사용자의 아이디와 비밀번호가 필요하다. 이 말은 즉슨 대충 ID만 알아도 Brute Force Attack 할 수 있다는 얘기가 된다. 서버 관리자 입장에서 생각해보면 여간 짜증나는 일이 아니다. 로그인이 안 된다 할지라도 해킹이 시도되는 동안 소모되는 서버 자원은 어쩔 것인가 ㄷㄷㄷㄷ

이를 방지하기 위해 Fail2Ban 과 같은 Python 기반의 스크립트를 이용하여 지정된 횟수 이상으로 로그인을 실패하면 해킹으로 판단하여 일정시간 접근을 차단시키는 방법도 있다. 하지만 이 방법도 지정된 횟수 이내로.. 예를 들면 로또보다 더한 확률로 1~2번 시도만에 로그인이 성공하면 낭패다. (그러니 유저들을 추가할 땐 비밀번호 정책을 빡세게 합시다 ㄷㄷㄷ)

하지만 OTP를 이용하게 되면 약간은 안심이 될 것 같다. 1분마다 6자리의 숫자가 갱신이 되고 그 이전의 숫자조합은 무용지물이 되어버리니 이 얼마나 짱짱한가. 몇가지 OTP 서비스들이 있긴 하지만 Google OTP(정확히 말하면 Google Authenticator) 를 이용하기로 했다. 별 거 없다. 왜냐면 구글신이니까..

말머리에서 언급한 바와 같이 SSH 접속하기 위해선 사용자의 아이디와 비밀번호가 필요하지만 Google Authenticator 를 이용하면 그 중간에 OTP 번호를 입력하는 절차가 추가된다.

예를 들면 다음과 같다.

일반적인 SSH 로그인

일반적인 SSH 로그인

 

OTP 이용한 SSH 로그인

OTP 이용한 SSH 로그인

 

세팅하는 방법을 순서대로 나열하겠다. 기존의 타 블로그들에서 작성된 대부분의 Google Authenticator 세팅 방법들은 크게 문제가 없지만 중요한 부분이 빠져있다. 이 글에선 빠지지 않고 모두 작성해놨으니 그대로 차근차근 실행만 한다면 될 것이다.

  • CentOS 6.8 & 7 기준으로 작성
  • root (최고관리자) 권한 기준으로 작성
  • 작업시작 전 모든 패키지들을 업데이트 (하지 않아도 크게 상관 없음)
  1. .ssh 디렉토리 권한 변경
    * 필수 작업 – 0700으로 맞추지 않으면 로그인이 제대로 작동하지 않는다.
  2. Google OTP 패키지 설치에 필요한 필수 패키지 설치
  3. Git 으로 Google OTP 다운로드
  4. 소스 컴파일 작업
  5. Google Authenticator 설정
  6. y 누르고 엔터 (일반적으로 2번)
  7. 스마트 폰에 Google Authenticator 앱 설치 후, 모니터에 나타나는 QR코드 촬영 또는 Secret Key 작성으로 OTP 추가
  8. PAM 설정

    8.1. %PAM-1.0 바로 밑에 다음 내용 추가 (한 줄임)

    8.2 저장
  9. SSH 설정

    9.1. 다음 설정사항들을 모두 yes로 변경

    9.2 저장
  10. SSH 재시작
  11. (옵션) 모든 유저에게 OTP 부여가 완료되었고 더이상 유저 추가 계획이 없을 경우 8.1. 에서 추가된 내용 중 nullok 를 삭제한다.
    nullok 삭제시 해당 서버 SSH에 접근하는 모두가 OTP를 거쳐야 함.

 

위 과정을 모두 마치면 Google Authenticator 를 거쳐 로그인을 할 수 있다. 이렇게 되면 어제 작성했던 Root 비밀번호 자동 변경 쉘 스크립트에서 비밀번호를 좀 더 약하게 생성시켜도 괜찮을 듯 하다.

약 2주간 적용하고 싶은 마음에 수많은 삽질을 했고 결국 성공했다. 별 거 아닌데 뿌듯하다.

 

  • 이장호

    안녕하세요~! 현재 운영중인 서버에 해당 글을 참고하여 구글OTP 인증을 추가 적용해서 사용중에 있습니다.
    한가지 드리고 싶은 질문은 추후에 구글 OTP사용을 중지하고자 할때 어떤 진행절차로 적용하면 되는지 여쭙고자 댓글을 남깁니다. (참고로 현재 해당 일반사용자 계정 /home 디렉토리에 git으로 다운받아 설치하였습니다.)
    아무리 구글링을 해도 설치에 관한 내용만 있을뿐 사용중지나 삭제에 대한 정보가 없어서 여기에 문의글을 남깁니다.