웹사이트 검색

Linux용 OpenSSH 보안 강화 가이드


이 페이지에서

  1. SSH는 어떻게 작동합니까?\n
  2. 모범 사례를 사용하여 SSH 구성\n
    1. 1. 기본 포트 변경
    2. 2. 루트 사용자로 로그인 비활성화\n
    3. 3. 프로토콜 버전 설정\n
    4. 4. 비밀번호 복잡성\n

    SSH는 Linux 플랫폼에서 시스템 관리를 위해 가장 널리 사용되는 프로토콜 중 하나입니다. Unix, Linux 및 MacOS 기반의 많은 운영 체제에서 사용할 수 있습니다. 클라이언트-서버 모델을 기반으로 하며, 한 시스템은 서버 구성 요소를 실행하고 다른 시스템은 클라이언트 도구를 사용하여 액세스합니다.

    SSH는 어떻게 작동합니까?

    클라이언트(ssh)는 서버에 요청을 보내 연결을 시작합니다. 서버는 서버 데몬(sshd)을 사용하여 들어오는 요청을 수신합니다. 공개 키를 사용하여 연결을 시도하는 클라이언트에 자신을 인증합니다.

    이러한 방식으로 클라이언트는 올바른 SSH 서버에 연결되어 있음을 확신합니다. 이 작업이 완료되면 클라이언트는 서버에 액세스할 수 있습니다. Windows 클라이언트에 있는 경우 putty와 같은 도구를 사용하여 서버에 연결해야 합니다. 클라이언트와 서버 모두 동일한 시스템에 설치할 수 있습니다. 즉, 클라이언트 도구를 사용하여 다른 시스템에 액세스하거나 시스템이 다른 사람이 액세스할 수 있는 서버가 될 수 있습니다. 이 경우 구성 파일은 동일한 디렉토리에 있지만 이름이 약간 다릅니다. 디렉토리 위치는 '/etc/ssh'이고 ssh 클라이언트 구성 파일의 이름은 'ssh_config'이고 서버의 구성 파일 이름은 'sshd_config'입니다.


    시스템에 두 파일이 모두 있는 경우 구성할 파일을 현명하게 선택해야 합니다. 대부분의 경우 시스템에 대한 잠재적인 액세스의 문을 열어주기 때문에 보안을 위해 구성해야 하는 서버입니다.

    먼저 서버에서 SSH 데몬 또는 sshd의 상태를 확인하는 것으로 시작합니다. 이러한 방식으로 실행 중인지 확인하고 부팅 시 자동으로 시작하도록 활성화할 수 있습니다. 아래 명령은 sshd 상태를 확인합니다.

    $systemctl 상태 ssh.service

    또는 아래 중 하나를 사용하십시오.

    $systemctl 상태 sshd.service

    스크린샷에서 서비스가 활성화되고 활성화된 것을 볼 수 있습니다. 지난 6시간 동안 실행되었습니다. 오른쪽 화살표를 눌러 터미널 보기를 확장하면 기본 포트 22에서 수신 대기하고 있음을 알 수 있습니다.

    때로는 SSH 자체를 사용하여 원격 시스템에 연결되어 있는 동안 원격 시스템의 SSH 구성 파일을 변경합니다. 이러한 경우 다시 시작 명령 대신 다시 로드 명령을 사용해야 합니다. 이런 식으로 우리는 연결이 끊어질 가능성이 적습니다.

    모범 사례를 사용하여 SSH 구성

    이제 SSH 서버 구성을 시작할 때라고 생각합니다. SSH 구성 파일로 손을 더럽히기 전에 기본 설정으로 파일을 백업해야 합니다.

    $sudo cp /etc/ssh/sshd_config ~/sshd_config.bkp


    백업을 수행한 후 기본 파일을 엉망으로 만들고 SSH를 중단하더라도 백업 파일을 사용하여 정상 상태로 돌아갈 수 있습니다.

    1. 기본 포트 변경

    sshd 데몬은 기본적으로 서버의 포트 22에서 수신 대기합니다. 스크립트를 사용하는 자동화된 공격의 범위를 줄이기 위해 이 값을 다른 숫자로 변경하는 것이 좋습니다. 이 접근 방식을 모호성을 통한 보안이라고 합니다. 이를 위해 아래 파일을 열고 '#Port 22' 텍스트가 포함된 줄을 찾습니다.

    $sudo 나노 /etc/ssh/sshd_config

    '#Port 22' 행의 주석을 제거하고 '22'를 시스템에서 사용하지 않는 다른 포트 번호로 변경하십시오. 222로 변경하고 서비스를 다시 시작해야 합니다. 이제 옵션 p와 함께 ssh 명령을 사용하여 새 포트를 지정합니다.

    $ssh [이메일 보호됨]_ip -p 222

    2. 루트 사용자로 로그인 비활성화

    루트는 시스템의 모든 리소스에 액세스할 수 있는 모든 Linux 시스템의 최종 사용자입니다. 엄격한 루트 액세스가 필요하지 않은 경우 서버에서 루트 로그인 기능을 비활성화해야 합니다. 이를 위해 위의 동일한 파일을 엽니다.

    $sudo 나노 /etc/ssh/sshd_config

    'PermitRootLogin' 매개변수를 'no'로 설정합니다. 이렇게 하면 루트 계정을 대상으로 하는 무작위 공격으로부터 서버가 보호됩니다. 기본 옵션은 공개 키 인증 기반 로그인을 허용하지만 비밀번호 기반 로그인은 거부하는 '비밀번호 금지'입니다.

    3. 프로토콜 버전 설정

    SSH의 이전 프로토콜 버전은 1이며 SSH2에 비해 덜 안전하며 네트워킹 구현이 다르고 서로 호환되지 않습니다. 서버에서 활성화된 프로토콜 버전을 확인하려면 sshd_config 파일을 다시 열고 Protocol 행을 찾으십시오.

    $고양이 /etc/ssh/sshd_config | 그렙 프로토콜

    빈 출력이 있는 경우 OpenSSH는 아마도 버전 2를 사용하고 있을 수 있습니다. 또 다른 방법은 netcat 명령 유틸리티를 사용하는 것입니다.

    $nc 로컬 호스트 22

    샘플 출력:

    SSH-2.0-OpenSSH_8.2p1 우분투-4ubuntu0.4

    출력에서 SSH2가 시스템에서 활성화되어 있음을 알 수 있습니다.


    원격 서버가 실행 중인 프로토콜 버전을 확인하려면 -Q(쿼리) 옵션과 함께 ssh 클라이언트를 사용하여 연결을 시도하십시오.

    $ssh -Q 프로토콜 버전 [이메일 보호됨]_이름

    위 이미지는 Kali Linux에서 Ubuntu ssh 서버에 액세스하는 동안 SSH 버전 2를 보여줍니다.

    4. 암호 복잡성

    취약한 비밀번호는 항상 악용되기 쉬우므로 비어 있는 비밀번호는 악용될 가능성이 더 높습니다. 따라서 sshd_config 파일에서 PermitEmptyPasswords 옵션을 'no'로 설정해야 합니다. 마찬가지로 무차별 대입 공격의 가능성을 줄이기 위해 잘못된 비밀번호로 로그인을 시도하는 횟수를 제한해야 합니다. 이는 'MaxAuthTries' 옵션을 3과 같은 더 작은 값으로 설정하여 달성할 수 있습니다.


    위 그림에서 'MaxAuthTries' 값을 3으로 설정하면 3번의 잘못된 비밀번호로 인해 SSH가 거부되는 것을 볼 수 있습니다. 또 다른 주요 보안 측면은 로그인에 공개 키 인증을 사용하는 것입니다. 키 기반 인증 모델은 무차별 대입 공격에 덜 취약합니다. 마찬가지로 PAM 인증 모듈을 사용하여 SSH 서버를 더욱 강화할 수 있습니다.

    결론

    이 가이드에서는 SSH 서버 보안에 대한 가장 중요한 사항을 다루고 이를 네 가지 주요 사항으로 요약하려고 했습니다. 이 가이드가 완전한 가이드는 아니지만 SSH 서버를 더욱 강화할 수 있는 더 많은 영역을 찾을 수도 있습니다. 예를 들어 SSH를 통한 시스템 사용에 대해 사용자에게 경고하는 배너 메시지를 추가할 수 있습니다. 비밀번호를 사용하여 로그인을 거부하고 비밀번호 없는 로그인을 위해 키 기반 인증을 사용할 수도 있습니다. 또 다른 흥미로운 점은 SSH 사용자 수와 연결 시간을 제한할 수 있다는 것입니다.