5.6. OpenSSH의 보안 강화

다음 팁은 OpenSSH를 사용할 때 보안을 강화하는 데 도움이 됩니다. /etc/ssh/sshd_config OpenSSH 구성 파일의 변경 사항을 적용하려면 sshd 데몬을 다시 로드해야 합니다.

# systemctl reload sshd
중요

대부분의 보안 강화 구성 변경으로 최신 알고리즘 또는 암호 제품군을 지원하지 않는 클라이언트와의 호환성이 줄어듭니다.

비보안 연결 프로토콜 비활성화

  • SSH를 효과적으로 사용하려면 OpenSSH 제품군으로 대체되는 안전하지 않은 연결 프로토콜을 사용하지 않도록 합니다. 그렇지 않으면 Telnet을 사용하여 로그인할 때 나중에 하나의 세션이 캡처되도록 SSH를 사용하여 사용자 암호를 보호할 수 있습니다. 이러한 이유로 telnet, rsh, rlogin 및 ftp와 같은 비보안 프로토콜을 비활성화하는 것이 좋습니다.

키 기반 인증 활성화 및 암호 기반 인증 비활성화

  • 인증에 대한 암호 비활성화 및 키 쌍만 허용하면 공격 면적이 줄어들고 사용자의 시간도 절약할 수 있습니다. 클라이언트에서 ssh-keygen 툴을 사용하여 키 쌍을 생성하고 ssh-copy-id 유틸리티를 사용하여 OpenSSH 서버의 클라이언트에서 공개 키를 복사합니다. OpenSSH 서버에서 암호 기반 인증을 비활성화하려면 /etc/ssh/sshd_config를 편집하고 PasswordAuthentication 옵션을 no로 변경합니다.

    PasswordAuthentication no

키 유형

  • ssh-keygen 명령은 기본적으로 RSA 키 쌍을 생성하지만 -t 옵션을 사용하여 ECDSA 또는 Ed25519 키를 생성하도록 지시할 수 있습니다. ECDSA(Elliptic Curve Digital Signature Algorithm)는 동등한 대칭 키 힘에서 RSA보다 더 나은 성능을 제공합니다. 또한 더 짧은 키를 생성합니다. Ed25519 공개 키 알고리즘은 RSA, DSA 및 ECDSA보다 더 빠르고 안전하며 더 빠릅니다.

    OpenSSH는 RSA, ECDSA 및 Ed25519 서버 호스트 키가 누락된 경우 자동으로 생성합니다. RHEL에서 호스트 키 생성을 구성하려면 sshd-keygen@.service 인스턴스화 서비스를 사용합니다. 예를 들어, RSA 키 유형의 자동 생성을 비활성화하려면 다음을 실행합니다.

    # systemctl mask sshd-keygen@rsa.service
    참고

    cloud-init 가 활성화된 이미지에서 ssh-keygen 단위가 자동으로 비활성화됩니다. 이는 ssh-keygen 템플릿 서비스가 cloud-init 툴을 방해하고 호스트 키 생성에 문제가 발생할 수 있기 때문입니다. 이러한 문제를 방지하려면 cloud-init 가 실행 중인 경우 etc/systemd/system/sshd-keygen@.service.d/disable-sshd-keygen-if-cloud-init-active.conf 드롭인 구성 파일에서 ssh-keygen 장치를 비활성화합니다.

  • SSH 연결에 대한 특정 키 유형을 제외하려면 /etc/ssh/sshd_config에서 관련 행을 주석 처리하고 sshd 서비스를 다시 로드합니다. 예를 들어 Ed25519 호스트 키만 허용하려면 다음을 수행합니다.

    # HostKey /etc/ssh/ssh_host_rsa_key
    # HostKey /etc/ssh/ssh_host_ecdsa_key
    HostKey /etc/ssh/ssh_host_ed25519_key
    중요

    Ed25519 알고리즘은 FIPS-140과 호환되지 않으며 OpenSSH는 FIPS 모드에서 Ed25519 키와 작동하지 않습니다.

기본값 이외의 포트

  • 기본적으로 sshd 데몬은 TCP 포트 22에서 수신 대기합니다. 포트를 변경하면 자동화된 네트워크 스캔을 기반으로 시스템이 공격에 노출되는 것을 줄이며 비만에 의해 보안이 향상됩니다. /etc/ssh/sshd_config 구성 파일에서 Port 지시문을 사용하여 포트를 지정할 수 있습니다.

    또한 기본이 아닌 포트를 사용할 수 있도록 기본 SELinux 정책을 업데이트해야 합니다. 이렇게 하려면 policycoreutils-python-utils 패키지에서 semanage 툴을 사용합니다.

    # semanage port -a -t ssh_port_t -p tcp <port_number>

    또한 firewalld 구성을 업데이트합니다.

    # firewall-cmd --add-port <port_number>/tcp
    # firewall-cmd --remove-port=22/tcp
    # firewall-cmd --runtime-to-permanent

    이전 명령에서 < port_number>Port 지시문을 사용하여 지정된 새 포트 번호로 바꿉니다.

Root 로그인

  • PermitRootLogin은 기본적으로 prohibit-password 로 설정됩니다. 이렇게 하면 root로 로그인하는 데 암호를 사용하는 대신 키 기반 인증을 사용하고 무차별 강제 공격을 방지하여 위험을 줄입니다.

    주의

    관리자가 권한이 있는 명령을 실행하는 사용자를 감사할 수 없기 때문에 root 사용자로 로그인 활성화는 안전한 방법이 아닙니다. 관리 명령을 사용하려면 로그인하고 sudo를 대신 사용합니다.

X 보안 확장 사용

  • Red Hat Enterprise Linux 클라이언트의 X 서버는 X 보안 확장을 제공하지 않습니다. 따라서 클라이언트는 X11 전달을 사용하여 신뢰할 수 없는 SSH 서버에 연결할 때 다른 보안 계층을 요청할 수 없습니다. 대부분의 애플리케이션은 이 확장 기능을 사용하여 실행할 수 없습니다.

    기본적으로 /etc/ssh/ssh_config.d/50-redhat.conf 파일의 ForwardX11Trusted 옵션은 yes 로 설정되고 ssh -X remote_machine (신뢰할 수 없는 호스트)과 ssh -Y remote_machine (신뢰할 수 있는 호스트) 명령 사이에 차이가 없습니다.

    시나리오에 X11 전달 기능이 전혀 필요하지 않은 경우 /etc/ssh/sshd_config 구성 파일의 X11Forwarding 지시문을 no로 설정합니다.

특정 사용자, 그룹 또는 도메인에 대한 액세스 제한

  • /etc/ssh/sshd_config 구성 파일 서버의 AllowUsersAllowGroups 지시문을 사용하면 특정 사용자, 도메인 또는 그룹만 OpenSSH 서버에 연결할 수 있습니다. AllowUsersAllowGroups를 결합하여 보다 정확하게 액세스를 제한할 수 있습니다. 예를 들면 다음과 같습니다.

    AllowUsers *@192.168.1.* *@10.0.0.* !*@192.168.1.2
    AllowGroups example-group

    이전 구성 행은 192.168.1.2 주소가 있는 시스템을 제외하고 192.168.1.* 및 10.0.0.* 서브넷의 모든 사용자로부터의 연결을 허용합니다. 모든 사용자는 example-group 그룹에 있어야 합니다. OpenSSH 서버는 다른 모든 연결을 거부합니다.

    OpenSSH 서버는 /etc/ssh/sshd_config 의 모든 Allow 및 Deny 지시문을 전달하는 연결만 허용합니다. 예를 들어 AllowUsers 지시문이 AllowGroups 지시문에 나열된 그룹에 포함되지 않은 사용자를 나열하는 경우 사용자는 로그인할 수 없습니다.

    허용 목록(허용으로 시작하는 디렉터리)을 사용하는 것은 차단 목록(거부로 시작하는 옵션)을 사용하는 것보다 더 안전합니다. allowlists는 새로운 권한 없는 사용자 또는 그룹도 차단하기 때문입니다.

시스템 전체 암호화 정책 변경

  • OpenSSH는 RHEL 시스템 전체 암호화 정책을 사용하며 기본 시스템 전체 암호화 정책 수준은 현재 위협 모델에 대한 보안 설정을 제공합니다. 암호화 설정을 보다 엄격하게 수행하려면 현재 정책 수준을 변경합니다.

    # update-crypto-policies --set FUTURE
    Setting system policy to FUTURE
    주의

    시스템이 인터넷에서 통신할 경우 FUTURE 정책의 엄격한 설정으로 인해 상호 운용성 문제에 직면할 수 있습니다.

시스템 전체 암호화 정책을 통해 SSH 프로토콜의 특정 암호만 비활성화할 수도 있습니다. 자세한 내용은 보안 강화 문서의 하위 정책을 사용하여 시스템 전체 암호화 정책 사용자 지정 섹션을 참조하십시오.

OpenSSH 서버에 대한 시스템 전체 암호화 정책을 비활성화하려면 /etc/ssh/sshd_config.d/ 디렉터리에 있는 드롭인 구성 파일에 암호화 정책을 지정하려면 /etc/ssh/sshd_config.d/ 디렉터리에 있는 암호화 정책을 지정하여 두 자리 숫자 접두사가 50-redhat.conf 파일 앞에 있고 .conf 접미사를 .conf 접미사로 지정합니다.

자세한 내용은 sshd_config(5) 도움말 페이지를 참조하십시오.

OpenSSH 클라이언트에 대한 시스템 전체 암호화 정책을 비활성화하려면 다음 작업 중 하나를 수행합니다.

  • 지정된 사용자의 경우 ~/.ssh/ config 파일의 사용자별 구성으로 글로벌 ssh_ config 를 재정의합니다.
  • 전체 시스템의 경우 /etc/ssh/ssh_config.d/ 디렉터리에 있는 드롭인 구성 파일에 암호화 정책을 지정하고 두 자리 숫자 접두사가 50-redhat.conf 파일 앞에 있고 .conf 접미사(예: 49-crypto-policy-override.conf )를 사용합니다.

추가 리소스