[Linux] SSH 보안설정

K·2023년 4월 6일
0

SSH 보안설정

SSH 보안을 강화시키기 위한 여러가지 설정을 정리


1. 개요

  • 리눅스를 OS로 사용하는 서버에 접속하고자 할 때 SSH를 이용
    이에 SSH를 통한 해킹시도(계정탈취)를 차단하기 위한 보안설정을 정리

  • SSH 란?

    • Secure Shell의 줄임말, 원격 호스트에 접속하기 위해 사용되는 네트워크 프로토콜, 컴퓨터 간의 통신을 할 때 보안적으로 안전하게 통신을 위해 암호화기능을 제공
      ※ Shell : 커널과 사용자 간의 다리 역할을 하는 인터페이스

    • Telnet을 이용한 원격접속에서 SSH를 이용한 접속으로 변경
      ☞ 이유는 보안강화 측면, Telnet은 암호화를 제공하지 않아 보안상 취약, 이를 보완한 것(암호화)이 SSH


2. 보안설정

 🎯 적용대상: CentOS, Rocky, Alma Linux 를 대상

 이하의 설정방법을 정리해두고자 함.

  1. 접속포트 변경
  2. root 계정 원격접속 차단
  3. 세션 타임아웃
  4. 로그인 시도 횟수 제한

3. 접속포트 변경

  • 이유
    🤦🏻‍♂️ ssh 접속의 default 포트는 22, default 포트는 익히 알려져 많은 접속시도에 노출
    포트변경을 통해 무분별한 접속시도를 회피하고자 함
    ☞ nmap 등의 툴을 이용하면 포트확인 가능

  • How to

      1. ssh 설정파일 수정
       2. SELinux 설정
       3. 방화벽 설정
       4. ssh daemon 재시작
       5. 포트 open여부 확인
       6. 재접속
    • Step 1. ssh 설정 파일 수정
      설정파일(sshd_config) 내의 port를 변경하고자 하는 포트번호로 변경 & 저장

      22222 포트로 변경하는 예)

      # vi /etc/ssh/sshd_config
      #Port 22
       Port 22222
    • Step 2. SELinux 설정
      SELinux를 활성화상태 내 포트 허용

      # semanage port -a -t ssh_port_t -p tcp 22222
    • Step 3. 방화벽 설정
      방화벽 내 22222 포트 허용 및 정책 적용

      # firewall-cmd --permanent --zone=public --add-port=22222/tcp
      # firewall-cmd --reload
    • Step 4. ssh 재실행

      # systemctl restart sshd.service
    • Step 5. 설정한 포트가 열려있는지 확인

      $ netstat -nap | grep 22222
    • Step 6. 재접속

      $ ssh root@xxx.xxx.xxx.xxx -p 22222

4. root 계정 원격접속 차단

  • 이유 및 목적
    root 계정은 기본적으로 생성되는 관리자 계정
    ssh 기본설정에서는 root 로그인이 허용상태이며 공격자로부터 무분별한 root 계정을 통한 ssh 접속시도 가능성 존재, 이를 방지하기 위해 root 계정을 통한 접속차단 설정

  • How to

      1. root 이외 접속계정 생성
       2. ssh 설정파일(sshd_config) 수정
       3. ssh daemon 재시작
       4. 확인
    • Step 1. root 이외 접속계정 생성

      $ adduser user1
    • Step 2. ssh 설정파일(sshd_config) 수정

      # vi /etc/ssh/sshd_config

      ssh-key를 이용한 로그인을 허용하는 경우: prohibit-password
      root 로그인자체를 막는 경우: no

      #PermitRootLogin prohibit-password 
       PermitRootLogin prohibit-password     # ssh-key 로그인 허용
      #PermitRootLogin prohibit-password 
       PermitRootLogin no                    # root 계정을 통한 원격로그인 차단
    • Step 3. ssh daemon 재시작

      # systemctl restart sshd.service
    • Step 4. 확인

      $ ssh user1@xxx.xxx.xxx.xxx -p 22222

    📣 참고
    rocky, alma linux의 경우, 이하의 파일 설정을 변경해야함❗️

    • 이하의 파일내용 확인 및 변경

      /etc/ssh/sshd_config.d/01-permitrootlogin.conf
      
      [변경 전]
      PermitRootLogin yes[변경 후]
      PermitRootLogin no
    • 설정내용 확인

      # sshd -T

5. 세션 타임아웃

  • 이유 및 목적
    ssh를 연결해 놓으면 사용자가 연결을 끊지 않는 이상, 계속 연결된 상태
    연결이 유지된 상태는 보안상 위험하므로, 일정 시간이 지나면 자동으로 연결이 끊어지도록 설정해서 보안을 강화

  • How to (ssh설정변경을 이용)

     1. ssh 설정파일(sshd_config) 수정
      2. ssh daemon 재시작
      3. 확인
    • Step 1. ssh 설정파일(sshd_config) 수정

      # vi /etc/ssh/sshd_config
      
      sshd_config 파일 내부
      [변경 전]
      #ClientAliveInterval 0
      #ClientAliveMax 3[변경 후]
      ClientAliveInterval 100
      ClientAliveCountMax 3

      ClientAliveInterval: 클라이언트 살아있는지 확인하는 간격
      ClientAliveCountMax: 클라이언트 응답 없어도 접속 유지하는 횟수

      참고) ClientAliveInterval = 100, ClientAliveCountMax = 3 이면 300초(5분) 후 접속 끊김

       최대접속유지시간 = ClientAliveInterval × ClientAliveCountMax
                    = 100 × 3
                    = 300 초
    • Step 2. ssh daemon 재시작

      # systemctl restart sshd.service
    • Step 3. 확인

      # cat /etc/ssh/sshd_config | grep Client
  • 💡 참고) 다른방법: profile 내 세션 타임아웃을 설정(10초)
    profile 내 세션타임(10초)을 설정

    # vi /etc/profile
    export TMOUT=10

    profile을 적용

    # source /etc/profile

6. 로그인 시도 횟수 제한

  • 이유 및 목적
    로그인 시도횟수를 제한함으로써 보안성 강화

  • How to

     1. ssh 설정파일(sshd_config) 수정
      2. ssh daemon 재시작
      3. 확인
    • Step 1. ssh 설정파일(sshd_config) 수정

      # vi /etc/ssh/sshd_config
      
      sshd_config 파일 내부
      [변경 전]
      #MaxAuthTries 6[변경 후]
      MaxAuthTries 3
    • Step 2. ssh daemon 재시작

      # systemctl restart sshd.service
    • Step 3. 확인

      # cat /etc/ssh/sshd_config | grep MaxAuthTries

7. References

profile
Luck favors the prepared

0개의 댓글