검색

1.6. OpenSSH의 보안 강화

download PDF

OpenSSH를 사용할 때 보안을 강화하기 위해 시스템을 조정할 수 있습니다.

/etc/ssh/sshd_config OpenSSH 서버 구성 파일의 변경 사항을 적용하려면 sshd 데몬을 다시 로드해야 합니다.

# systemctl reload sshd
주의

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

비보안 연결 프로토콜 비활성화
SSH를 실제로 효과적으로 수행하려면 OpenSSH 제품군으로 대체되는 안전하지 않은 연결 프로토콜을 사용하지 않도록 합니다. 그렇지 않으면 Telnet을 사용하여 로그인할 때 나중에 하나의 세션이 캡처되도록 SSH를 사용하여 사용자 암호를 보호할 수 있습니다.
암호 기반 인증 비활성화
인증에 대한 암호를 비활성화하고 키 쌍만 허용하면 공격 면적이 줄어듭니다. 자세한 내용은 OpenSSH 서버에서 유일한 방법으로 키 기반 인증 설정을 참조하십시오.
보다 강력한 키 유형

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

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

# systemctl mask sshd-keygen@rsa.service
# rm -f /etc/ssh/ssh_host_rsa_key*
# systemctl restart sshd
참고

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 로그인 없음

특정 사용 사례에 root 사용자로 로그인할 가능성이 필요하지 않은 경우 PermitRootLogin 구성 지시문을 /etc/ssh/sshd_config 파일에서 no 로 설정할 수 있습니다. root 사용자로 로그인할 가능성을 비활성화하여 관리자는 일반 사용자로 로그인한 후 권한이 있는 명령을 실행하는 사용자를 감사한 다음 root 권한을 얻을 수 있습니다.

또는 prohibit-passwordPermitRootLogin을 설정합니다.

PermitRootLogin prohibit-password

이렇게 하면 root로 로그인하는 데 암호를 사용하는 대신 키 기반 인증을 사용하고 무차별 강제 공격을 방지하여 위험을 줄입니다.

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로 설정합니다.

특정 사용자, 그룹 또는 IP 범위에 대한 SSH 액세스 제한

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

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

이 구성에서는 다음 조건이 모두 충족되는 경우에만 연결을 허용합니다.

  • 연결의 소스 IP는 192.168.1.0/24 또는 10.0.0.0/24 서브넷에 있습니다.
  • 소스 IP는 192.168.1.2가 아닙니다.
  • 사용자는 example-group 그룹의 멤버입니다.

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/sysconfig/sshd 파일에서 CRYPTO_POLICY= 변수로 행의 주석을 제거합니다. 이 변경 후 /etc/ssh/sshd_config 파일의 Ciphers, MACs, KexAlgoritms, GSSAPIKexAlgorithms 섹션에 지정하는 값은 재정의되지 않습니다.

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

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

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

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.