1.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

기본값 이외의 포트

  • 기본적으로 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 --runtime-to-permanent

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

Root 로그인

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

    경고

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

X 보안 확장 사용

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

    기본적으로 /etc/ssh/ssh_config.d/05-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 서버는 다른 모든 연결을 거부합니다.

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

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

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

    # update-crypto-policies --set FUTURE
    Setting system policy to FUTURE
  • OpenSSH 서버에 대한 시스템 전체 암호화 정책을 옵트아웃하려면 /etc/sysconfig/sshd 파일에서 CRYPTO_POLICY= 변수로 행의 주석을 해제합니다. 이 변경 후 /etc/ssh/sshd_config 파일의 Ciphers, MACs, KexAlgoritms, GSSAPIKexAlgorithms 섹션에 지정하는 값은 재정의되지 않습니다. 이 작업에는 암호화 옵션 구성에 대한 전문 지식이 필요합니다.
  • 자세한 내용은 보안 강화에서 시스템 전체 암호화 정책 사용을 참조하십시오.

추가 리소스

  • sshd_config(5), ssh-keygen(1), crypto-policies(7)update-crypto-policies(8) 도움말 페이지