서론
SSH(Secure Shell)는 원격 서버 관리를 위한 핵심 프로토콜이지만, 잘못 구성된 경우 심각한 보안 위험을 초래할 수 있습니다. 무작위 대상 공격, 무차별 대입 공격, 권한 상승 등의 위협은 지속적으로 증가하고 있으며, 이러한 공격으로부터 시스템을 보호하기 위해서는 체계적인 보안 강화가 필요합니다.
본 가이드에서는 기업 환경에서 즉시 적용 가능한 9가지 SSH 보안 모범 사례를 다룹니다. 인증 체계부터 설정 최적화, 모니터링까지 포괄적인 접근 방식을 통해 서버 보안 수준을 획기적으로 높일 수 있습니다.
본론
1. 키 기반 인증으로 전환
비밀번호 기반 인증은 무차별 대입 공격에 취약합니다. 키 기반 인증은 암호화된 키 쌍을 사용하므로 비밀번호보다 훨씬 안전합니다.
실무적 적용:
- RSA 4096비트 또는 Ed25519 키 사용
- 키 생성 시 강력한 암호구(passphrase) 설정
- 공개키를
~/.ssh/authorized_keys에 등록
# Ed25519 키 생성 (권장)
ssh-keygen -t ed25519 -C "admin@company.com"
# RSA 4096비트 키 생성
ssh-keygen -t rsa -b 4096 -C "admin@company.com"
엔터프라이즈 제약:
- 기존 비밀번호 사용자는 키 기반으로 단계적 마이그레이션
- 사용자별 개별 키 관리 필요
- 키 순환(key rotation) 정책 수립
2. 비밀번호 인증 완전 비활성화
키 기반 인증으로 전환한 후, 비밀번호 인증은 반드시 비활성화해야 합니다.
sshd_config 설정:
PasswordAuthentication no
ChallengeResponseAuthentication no
실무적 주의사항:
- 키 기반 인증이 정상적으로 작동하는지 확인 후 비활성화
- 비상용 접속 채널 확보 (예: 콘솔 접속)
- 비밀번호 복구 절차 문서화
3. root 계정 직접 로그인 차단
root 계정의 직접 SSH 접속은 권한 상승 공격의 주요 진입점입니다.
sshd_config 설정:
PermitRootLogin no
대안:
- 일반 사용자로 로그인 후
sudo사용 - 필요 시
PermitRootLogin prohibit-password설정으로 키 기반 접속만 허용
4. 기본 포트 변경 (22번 포트)
공격자는 기본적으로 22번 포트를 스캔합니다. 포트 번호를 변경하면 자동화된 공격 도구의 탐지를 방지할 수 있습니다.
sshd_config 설정:
Port 22222
실무적 주의사항:
- 방화벽 규칙 동시 업데이트
- 포트 충돌 방지를 위해 잘 알려진 포트 사용 자제
- 포트 변경 정보를 운영 팀에 공유
5. 2FA/MFA (2단계 인증) 적용
키 기반 인증에 2단계 인증을 추가하면 키가 노출되더라도 추가 보안 계층을 제공합니다.
Google Authenticator 설정 예시:
# 패키지 설치
apt-get install libpam-google-authenticator
# 사용자별 설정
google-authenticator
# PAM 설정
# /etc/pam.d/sshd 파일에 추가
auth required pam_google_authenticator.so
# sshd_config 설정
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
엔터프라이즈 적용 시 고려사항:
- 사용자 교육 및 가이드 제공
- 복구 코드(backup codes) 안전 저장
- 통합 MFA 솔루션(예: Duo Security, Okta) 고려
6. 불필요한 기능 비활성화
SSH는 다양한 인증 방법과 기능을 지원하지만, 불필요한 기능은 공격 표면을 넓힙니다.
sshd_config 설정:
# X11 포워딩 비활성화
X11Forwarding no
# 포트 포워딩 비활성화
AllowTcpForwarding no
# 터널링 비활성화
PermitTunnel no
# Agent 포워딩 비활성화
AllowAgentForwarding no
영향 분석:
- X11 포워딩을 사용하는 애플리케이션 확인
- 포트 포워딩 의존성 확인
- 터널링 사용 여부 점검
7. 접속 제어 및 사용자 제한
특정 사용자, IP 주소, 또는 그룹만 SSH 접속을 허용하여 공격 표면을 최소화합니다.
sshd_config 설정:
# 특정 사용자만 허용
AllowUsers admin user1 user2
# 또는 특정 그룹만 허용
AllowGroup ssh-admins
# 특정 IP만 허용 (TCP Wrappers)
# /etc/hosts.allow
sshd: 192.168.1.0/24
# /etc/hosts.deny
sshd: ALL
엔터프라이즈 정책:
- 최소 권한 원칙 적용
- 정기적 접속 권한 검토
- 퇴사자 계정 즉시 제거
8. 최신 암호화 알고리즘 사용
취약한 암호화 알고리즘은 중간자 공격(Man-in-the-Middle)에 취약합니다.
sshd_config 설정:
# 강력한 암호화 알고리즘 사용
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
# 키 교환 알고리즘
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
# MAC 알고리즘
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
검증 방법:
# 현재 사용 중인 알고리즘 확인
ssh -vvv user@server 2>&1 | grep "kex\|cipher\|mac"
# 보안 취약점 스캔
nmap --script ssh2-enum-algos -p 22 server
9. 모니터링 및 감사 로그
SSH 접속 활동을 모니터링하고 비정상 접속을 탐지하여 신속한 대응이 가능하게 합니다.
로그 확인:
# 인증 실패 로그
grep "Failed password" /var/log/auth.log
# 성공적 로그인
grep "Accepted" /var/log/auth.log
# 위반 시도 탐지
grep -i "invalid\|failed" /var/log/auth.log | awk "{print \$1, \$2, \$3, \$9, \$11}" | sort | uniq -c | sort -nr
자동화된 경고 설정:
- 동일 IP에서 5회 이상 실패 시 경고
- 비정상적인 시간대 접속 탐지
- 새로운 IP 접속 알림
- root 계정 접속 시도 감지
SIEM 연동:
- 로그를 중앙 로그 서버로 전송
- 실시간 모니터링 대시보드 구축
- 자동화된 인시던트 대응 워크플로우
결론
SSH 보안 강화는 단일 설정 변경이 아닌 다계층 접근이 필요합니다. 키 기반 인증, 2FA, 접속 제어, 모니터링을 조합하여 공격 표면을 최소화하고, 침해 발생 시 신속한 탐지와 대응이 가능하도록 구성해야 합니다.
특히 엔터프라이즈 환경에서는 보안과 운영 편의성의 균형을 고려해야 합니다. 모든 설정을 한 번에 변경하는 대신, 단계적으로 적용하고 각 단계에서 영향을 평가하여 서비스 중단 없이 보안 수준을 높이는 것이 중요합니다.
정기적인 보안 감사와 설정 검토를 통해 지속적으로 SSH 보안 상태를 점검하고, 새로운 위협에 대응하는 것이 필수적입니다.
대응 방안
| 위협 레벨 | 즉시 대응 | 단기 대응 | 장기 대응 |
|---|---|---|---|
| Critical | 키 기반 인증 활성화, 비밀번호 인증 비활성화, root 로그인 차단 | 2FA/MFA 적용, 포트 변경 | 모든 불필요한 기능 비활성화 |
| High | 최신 암호화 알고리즘 적용 | 접속 제어 정책 수립 | SIEM 연동 및 자동화된 경고 |
| Medium | 로그 확인 프로세스 수립 | 모니터링 대시보드 구축 | 정기적 보안 감사 |
| Low | 보안 가이드라인 작성 | 사용자 교육 | 키 순환 정책 도입 |
참고자료
본 콘텐츠는 AI 기술로 생성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하시면 댓글을 통해 소중한 의견 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다