SSH(Secure Shell)는 많은 서버 관리자가 원격 관리를 위해 사용하는 필수 도구입니다. 그러나 기본 설정만으로는 무차별 대입 공격이나 권한 탈취와 같은 보안 위협에 노출될 수 있습니다. 실제로 한 연구에 따르면 평균적으로 하루에 수천 건의 무차별 대입 공격이 SSH 서버를 겨냥하고 있습니다. 이 글에서는 실무에서 즉시 적용 가능한 SSH 서버 보안 강화 방법을 5단계로 나누어 설명하겠습니다. 각 단계는 구체적인 명령어와 예제 코드를 포함하여 누구나 쉽게 따라 할 수 있도록 구성되어 있습니다.
SSH 보안 위협과 공격 시나리오
SSH는 기본적으로 강력한 암호화 기술을 사용하지만 잘못된 설정으로 인해 보안 취약점이 발생할 수 있습니다. 대표적인 공격 시나리오는 다음과 같습니다:
무차별 대입 공격(Brute Force Attack): 공격자가 자동화된 도구를 이용해 여러 사용자 이름과 비밀번호 조합을 시도하여 서버에 접근을 시도하는 방식입니다. 특히 기본 포트(22번)를 사용하는 경우 공격 대상이 되기 쉽습니다.
중간자 공격(Man-in-the-Middle Attack): 네트워크 통신 중간에서 공격자가 개입하여 데이터를 가로채는 공격입니다. SSH의 암호화를 우회하려는 시도로, 서버 및 클라이언트 인증이 부족할 때 발생할 수 있습니다.
권한 탈취: 루트 계정으로 직접 접근할 수 있는 경우, 공격자는 시스템 전체를 제어할 수 있는 권한을 얻게 됩니다. 이를 방지하기 위해 루트 계정의 SSH 접근을 차단하는 것이 중요합니다.
Verizon의 2023년 데이터 유출 보고서에 따르면, 약 61%의 침해 사건이 약한 또는 도난당한 자격 증명을 통해 발생했습니다. SSH 서버 역시 예외는 아닙니다. 이러한 통계는 SSH 서버 보안 강화의 중요성을 강조합니다.
SSH 서버 필수 보안 설정 5단계
- 기본 포트 변경: SSH의 기본 포트인 22번을 다른 포트로 변경하여 무차별 대입 공격의 대상이 되는 가능성을 줄입니다.
# /etc/ssh/sshd_config 파일을 열어 다음 줄을 수정합니다.
Port 2222 # 원하는 포트 번호로 변경합니다.
변경된 포트 번호가 방화벽에 의해 차단되지 않도록 설정합니다.
- 루트 로그인 차단: 루트 계정의 SSH 접근을 차단하여 관리자 권한 탈취를 방지합니다.
# /etc/ssh/sshd_config에서 다음 줄을 수정합니다.
PermitRootLogin no
적용 후 SSH 서비스를 재시작합니다.
- 키 기반 인증: 패스워드 대신 공개 키 기반 인증을 사용하여 보안을 강화합니다.
# 클라이언트에서 공개 키 생성
ssh-keygen -t rsa
# 서버에 공개 키 복사
ssh-copy-id -i ~/.ssh/id_rsa.pub user@yourserver
패스워드 인증을 차단하려면 다음을 설정합니다:
# /etc/ssh/sshd_config에서 다음 줄을 수정합니다.
PasswordAuthentication no
- fail2ban 설치 및 설정: 무차별 대입 공격을 방지하기 위해 fail2ban을 설치하고 설정합니다.
# fail2ban 설치
sudo apt install fail2ban
# 기본 설정 파일 편집
/etc/fail2ban/jail.local
SSH 설정 섹션에서 다음 내용을 추가합니다:
[sshd]
enabled = true
port = 2222 # 변경한 포트 번호
- 설정 후 테스트: 각 설정의 적용 여부를 확인하고 테스트합니다.
SSH 서버에 접속하여 변경된 포트와 인증 방식을 통해 접근이 가능한지 확인합니다.
결론
SSH 서버 보안 강화를 위해 이 글에서 제시한 5단계를 실천함으로써 무차별 대입 공격과 같은 위협으로부터 서버를 보호할 수 있습니다. 추가적으로, UFW와 같은 방화벽 설정 및 모니터링 툴을 통해 지속적인 보안 강화를 권장합니다. 보다 깊이 있는 참고 자료는 공식 SSH 문서와 보안 커뮤니티의 사례 연구를 참조하시기 바랍니다.