ssh-hardening (Ansible Role)
주의: 이 역할은 hardening-collection으로 마이그레이션되었습니다:
이슈와 풀 리퀘스트는 해당 저장소에 열어 주세요!
요구 사항
역할 변수
network_ipv6_enable
- 기본값: false
- 설명: IPv6가 필요한 경우 true.
ssh_listen_to도 IPv6 주소(예: [::])를 수신하도록 설정해야 합니다.
ssh_server_ports
- 기본값: ['22']
- 설명: ssh-server가 수신해야 하는 포트
ssh_client_port
- 기본값: '22'
- 설명: ssh-client가 연결해야 하는 포트
ssh_listen_to
- 기본값: ['0.0.0.0']
- 설명: ssh-server가 수신해야 하는 하나 이상의 IP 주소. 기본값은 모든 IPv4 주소이지만, 보안상의 이유로 특정 주소로 구성해야 합니다!
ssh_host_key_files
- 기본값: []
- 설명: sshd용 호스트 키. 비어 있으면 설치된 sshd 버전이 지원하는 한 ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_ecdsa_key', '/etc/ssh/ssh_host_ed25519_key']가 사용됩니다.
ssh_host_key_algorithms
- 기본값: []
- 설명: 서버가 제공하는 호스트 키 알고리즘. 비어 있으면 기본 목록이 사용되고, 그렇지 않으면 지정된 알고리즘 목록으로 설정을 재정의합니다.
ssh_client_alive_interval
- 기본값: 600
- 설명: keepalive 메시지 전송 간격을 지정합니다.
ssh_client_alive_count
- 기본값: 3
- 설명: keep-alive 메시지가 전송되는 횟수를 정의합니다.
ssh_permit_tunnel
- 기본값: false
- 설명: SSH 포트 터널링이 필요한 경우 true
ssh_remote_hosts
- 기본값: []
- 설명: ssh-client용 사용자 지정 옵션을 가진 하나 이상의 호스트. 기본값은 비어 있습니다.
defaults/main.yml의 예시를 참조하세요.
ssh_permit_root_login
- 기본값: no
- 설명: root 로그인 비활성화. root 로그인을 활성화하려면
without-password 또는 yes로 설정
ssh_allow_tcp_forwarding
- 기본값: no
- 설명: TCP 포워딩을 비활성화하려면
'no'. TCP 포워딩을 허용하려면 'yes'로 설정. OpenSSH >= 6.2 버전을 사용하는 경우 'yes', 'no', 'all' 또는 'local'을 지정할 수 있습니다.
참고: 이 변수에 전달되는 값은 문자열이어야 하므로 'yes' 및 'no' 값은 따옴표와 함께 전달해야 합니다.
ssh_gateway_ports
- 기본값:
false
- 설명: 포워딩된 포트를 non-loopback 주소에 바인딩하지 않으려면
false. 와일드카드 주소에 바인딩을 강제하려면 true로 설정. 클라이언트가 바인딩할 주소를 지정하도록 허용하려면 clientspecified로 설정.
ssh_allow_agent_forwarding
- 기본값: false
- 설명: 에이전트 포워딩을 비활성화하려면 false. 에이전트 포워딩을 허용하려면 true로 설정.
ssh_x11_forwarding
- 기본값: false
- 설명: X11 포워딩을 비활성화하려면 false. X11 포워딩을 허용하려면 true로 설정.
ssh_pam_support
- 기본값: true
- 설명: SSH에 PAM 지원이 있는 경우 true.
ssh_use_pam
- 기본값: true
- 설명: pam 인증을 비활성화하려면 false.
ssh_gssapi_support
- 기본값: false
- 설명: SSH에 GSSAPI 지원이 있는 경우 true.
ssh_kerberos_support
- 기본값: true
- 설명: SSH에 Kerberos 지원이 있는 경우 true.
ssh_deny_users
- 기본값: ''
- 설명: 지정된 경우 패턴 중 하나와 일치하는 사용자 이름의 로그인이 허용되지 않습니다.
ssh_allow_users
- 기본값: ''
- 설명: 지정된 경우 패턴 중 하나와 일치하는 사용자 이름만 로그인이 허용됩니다.
ssh_deny_groups
- 기본값: ''
- 설명: 지정된 경우 기본 그룹 또는 보조 그룹 목록이 패턴 중 하나와 일치하는 사용자의 로그인이 허용되지 않습니다.
ssh_allow_groups
- 기본값: ''
- 설명: 지정된 경우 기본 그룹 또는 보조 그룹 목록이 패턴 중 하나와 일치하는 사용자만 로그인이 허용됩니다.
ssh_authorized_keys_file
- 기본값: ''
- 설명: 사용자 인증에 사용할 수 있는 공개 키가 포함된 기본 파일을 변경합니다.
ssh_trusted_user_ca_keys_file
- 기본값: ''
- 설명: 사용자 인증서 서명에 사용되는 신뢰할 수 있는 인증 기관 공개 키가 포함된 파일을 지정합니다.
ssh_trusted_user_ca_keys
- 기본값: []
- 설명: 사용자 인증서 서명에 사용되는 신뢰할 수 있는 인증 기관 공개 키를 설정합니다.
ssh_trusted_user_ca_keys_file이 설정된 경우에만 사용됩니다.
ssh_authorized_principals_file
- 기본값: ''
- 설명: 허용되는 principals가 포함된 파일을 지정합니다.
ssh_trusted_user_ca_keys_file이 설정된 경우에만 사용됩니다.
ssh_authorized_principals
- 기본값: []
- 설명: 파일 경로와 허용된 principals를 포함하는 해시 목록. 모든 옵션은
default_custom.yml을 참조하세요. ssh_authorized_principals_file이 설정된 경우에만 사용됩니다.
ssh_print_motd
- 기본값: false
- 설명: MOTD 출력을 비활성화하려면 false
ssh_print_pam_motd
- 기본값: false
- 설명: pam을 통한 MOTD 출력을 비활성화하려면 false (Debian 및 Ubuntu)
ssh_print_last_log
- 기본값: false
- 설명: 마지막 로그인 정보 표시를 비활성화하려면 false
sftp_enabled
- 기본값: false
- 설명: sftp 구성을 활성화하려면 true
sftp_umask
- 기본값: '0027'
- 설명: sftp용 umask를 지정합니다.
sftp_chroot
- 기본값: true
- 설명: sftp용 chroot를 비활성화하려면 false
sftp_chroot_dir
- 기본값: /home/%u
- 설명: 기본 sftp chroot 위치를 변경합니다.
ssh_client_roaming
- 기본값: false
- 설명: 실험적인 클라이언트 로밍 활성화
sshd_moduli_file
- 기본값: '/etc/ssh/moduli'
- 설명: SSH moduli 파일 경로
sshd_moduli_minimum
- 기본값: 2048
- 설명: logjam을 완화하기 위해 정의된 크기보다 작은 Diffie-Hellman 매개변수를 제거합니다.
ssh_challengeresponseauthentication
- 기본값: false
- 설명: challenge-response 인증이 허용되는지 여부를 지정합니다 (예: PAM을 통해)
ssh_client_password_login
- 기본값: false
- 설명: ssh 클라이언트에서 비밀번호 기반 인증을 허용하려면
true
ssh_server_password_login
- 기본값: false
- 설명: ssh 서버에서 비밀번호 기반 인증을 허용하려면
true
ssh_banner
- 기본값:
false
- 설명: 로그인 시 배너를 출력하려면
true
ssh_banner_path
- 기본값: '/etc/sshd/banner.txt'
- 설명: SSH 배너 파일 경로
ssh_client_hardening
- 기본값:
true
- 설명: 클라이언트 하드닝을 중지하려면
false
ssh_client_port
- 기본값:
'22'
- 설명: 원격 호스트에 연결할 포트 번호를 지정합니다.
ssh_client_compression
- 기본값:
false
- 설명: 클라이언트가 압축을 요청하는지 여부를 지정합니다.
ssh_compression
- 기본값:
false
- 설명: 사용자가 성공적으로 인증한 후 서버 측 압축이 활성화되는지 여부를 지정합니다.
ssh_login_grace_time
- 기본값:
30s
- 설명: SSH 서버에 대한 성공적인 인증에 허용되는 시간을 지정합니다.
ssh_max_auth_retries
- 기본값:
2
- 설명: 연결당 허용되는 최대 인증 시도 횟수를 지정합니다.
ssh_max_sessions
- 기본값:
10
- 설명: 주어진 연결에서 허용되는 최대 열린 세션 수를 지정합니다.
ssh_print_debian_banner
- 기본값:
false
- 설명: debian 특정 배너를 출력하려면
true
ssh_server_enabled
- 기본값:
true
- 설명: opensshd 서버를 비활성화하려면
false
ssh_server_hardening
- 기본값:
true
- 설명: 서버 하드닝을 중지하려면
false
ssh_server_match_address
- 기본값: ''
- 설명: 조건부 블록을 도입합니다. Match 줄의 모든 기준이 충족되면 다음 줄의 키워드는 구성 파일의 전역 섹션에 설정된 값을 재정의하며, 다른 Match 줄이나 파일 끝까지 적용됩니다.
ssh_server_match_group
- 기본값: ''
- 설명: 조건부 블록을 도입합니다. Match 줄의 모든 기준이 충족되면 다음 줄의 키워드는 구성 파일의 전역 섹션에 설정된 값을 재정의하며, 다른 Match 줄이나 파일 끝까지 적용됩니다.
ssh_server_match_user
- 기본값: ''
- 설명: 조건부 블록을 도입합니다. Match 줄의 모든 기준이 충족되면 다음 줄의 키워드는 구성 파일의 전역 섹션에 설정된 값을 재정의하며, 다른 Match 줄이나 파일 끝까지 적용됩니다.
ssh_server_match_local_port
- 기본값: ''
- 설명: 조건부 블록을 도입합니다. Match 줄의 모든 기준이 충족되면 다음 줄의 키워드는 구성 파일의 전역 섹션에 설정된 값을 재정의하며, 다른 Match 줄이나 파일 끝까지 적용됩니다.
ssh_server_permit_environment_vars
- 기본값:
no
- 설명:
yes는 ~/.ssh/environment 및 ~/.ssh/authorized_keys의 environment= 옵션이 sshd에 의해 처리되도록 지정합니다. openssh 버전 7.8 이상에서는 전역 "yes" 또는 "no" 설정 외에도 환경 변수 이름의 화이트리스트를 지정할 수 있습니다.
ssh_server_accept_env_vars
- 기본값: ''
- 설명: 클라이언트가 보낸 환경 변수 중 세션의 환경에 복사될 변수를 지정합니다. 여러 환경 변수는 공백으로 구분할 수 있습니다.
ssh_use_dns
- 기본값:
false
- 설명: sshd가 원격 호스트 이름을 조회하고 원격 IP 주소에 대해 확인된 호스트 이름이 동일한 IP 주소로 다시 매핑되는지 확인할지 여부를 지정합니다.
ssh_server_revoked_keys
- 기본값: []
- 설명: ssh 서버가 항상 거부하는 폐기된 공개 키 목록. 알려진 취약하거나 손상된 키를 폐기하는 데 유용합니다.
ssh_max_startups
- 기본값: '10:30:100'
- 설명: SSH 데몬에 대한 최대 동시 인증되지 않은 연결 수를 지정합니다.
ssh_macs
- 기본값: []
- 설명: macs를 재정의하려면 이 목록을 변경하세요. 기본값은
defaults/main.yml에 있습니다.
ssh_kex
- 기본값: []
- 설명: kexs를 재정의하려면 이 목록을 변경하세요. 기본값은
defaults/main.yml에 있습니다.
ssh_ciphers
- 기본값: []
- 설명: ciphers를 재정의하려면 이 목록을 변경하세요. 기본값은
defaults/main.yml에 있습니다.
ssh_custom_options
- 기본값: []
- 설명: SSH 클라이언트 구성을 위한 사용자 지정 줄
sshd_custom_options
- 기본값: []
- 설명: SSH 데몬 구성을 위한 사용자 지정 줄
sshd_syslog_facility
- 기본값: 'AUTH'
- 설명: sshd에서 메시지를 기록할 때 사용되는 facility 코드
sshd_log_level
- 기본값: 'VERBOSE'
- 설명: sshd에서 메시지를 기록할 때 사용되는 상세 수준
sshd_strict_modes
- 기본값: true
- 설명: 로그인을 수락하기 전에 사용자의 파일 모드와 소유권 및 홈 디렉터리를 확인합니다.
sshd_authenticationmethods
- 기본값:
publickey
- 설명: 사용자에게 액세스 권한을 부여하기 위해 성공적으로 완료해야 하는 인증 방법을 지정합니다. 선택한 인증 방법에 필요한 모든 변수를 설정해야 합니다. 기본값은
defaults/main.yml에 있습니다.
역할 변수에 나열되지 않은 설정 구성
위에 나열되지 않은 ssh 옵션을 구성하려면 ssh_custom_options (/etc/ssh/ssh_config용) 또는 sshd_custom_options (/etc/ssh/sshd_config용)를 사용하여 설정할 수 있습니다. 이러한 옵션은 파일의 시작 부분에 설정되므로 파일 아래쪽에서 옵션을 재정의할 수 있습니다.
플레이북 예시:
- hosts: localhost
roles:
- dev-sec.ssh-hardening
vars:
ssh_custom_options:
- "Include /etc/ssh/ssh_config.d/*"
sshd_custom_options:
- "AcceptEnv LANG"
기본 포트 변경 및 멱등성