SSH 보안 모범 사례: 서버 및 클라이언트 강화
보안 셸(SSH)은 시스템 관리자와 개발자에게 없어서는 안 될 도구로, 서버 및 기타 네트워크 장치에 대한 안전한 원격 액세스를 가능하게 합니다. SSH는 기본적으로 강력한 암호화를 제공하지만, 서버와 클라이언트 측 모두에서 일련의 모범 사례를 구현함으로써 보안을 크게 강화할 수 있습니다. 이 문서는 SSH 연결을 강화하고, 일반적인 취약점으로부터 보호하며, 무단 액세스를 방지하기 위해 고안된 중요한 보안 조치에 대해 자세히 설명합니다.
SSH 보안을 소홀히 하면 시스템이 무차별 대입 공격, 중간자 공격 및 무단 데이터 유출에 노출될 수 있습니다. 아래에 설명된 방법을 채택하면 보안 태세를 크게 강화하고 원격 작업의 무결성과 기밀성을 보장할 수 있습니다.
서버 측 보안 강화
SSH 서버(sshd_config)를 구성하는 것은 원격 액세스를 위한 안전한 기반을 구축하는 데 가장 중요합니다. 이러한 변경 사항은 클라이언트가 서버에 연결하고 인증하는 방식에 직접적인 영향을 미칩니다.
1. 비밀번호 인증 비활성화
비밀번호 인증은 본질적으로 무차별 대입 공격에 취약합니다. 이를 SSH 키 기반 인증으로 대체하는 것은 수행할 수 있는 가장 효과적인 보안 강화 조치 중 하나입니다.
- 이유: SSH 키는 비밀번호보다 훨씬 복잡하며 무차별 대입 방식을 통해 쉽게 추측하거나 해독할 수 없습니다. 이는 훨씬 더 강력한 형태의 인증을 제공합니다.
-
방법:
sshd_config파일(일반적으로/etc/ssh/sshd_config에 위치)을 편집하고PasswordAuthentication no로 설정합니다. 변경한 후 SSH 서비스를 다시 시작합니다.```bash
sudo systemctl restart sshd또는 이전 시스템의 경우:
sudo service ssh restart
```중요: 비밀번호 인증을 비활성화하기 전에 SSH 키 기반 인증이 성공적으로 설정 및 테스트되었는지 확인하여 잠기는 것을 방지하십시오.
2. 표준이 아닌 포트 사용
정교한 공격자에 대한 주요 보안 조치는 아니지만, 기본 SSH 포트(22)를 변경하면 취약한 서버를 검색하는 자동화된 봇의 노이즈를 줄일 수 있습니다.
-
방법:
sshd_config에서Port지시문을 변경합니다. 예를 들어, 포트2222를 사용하려면 다음과 같이 합니다.Port 2222새 포트에서 트래픽을 허용하도록 방화벽 규칙을 업데이트하고 클라이언트에서 연결할 때 포트를 지정해야 합니다.
bash ssh -p 2222 user@your_server_ip
3. 사용자 및 그룹 액세스 제한
SSH를 통해 로그인할 수 있는 사용자와 그룹을 제어합니다.
AllowUsers및AllowGroups:sshd_config에서 이러한 지시문을 사용하여 연결할 수 있는 사용자를 명시적으로 지정합니다.
AllowUsers admin user1 AllowGroups sshusersDenyUsers및DenyGroups: 또는 이러한 지시문을 사용하여 특정 사용자나 그룹을 차단할 수 있습니다.
4. 루트 로그인 비활성화
공격자가 가장 강력한 계정을 즉시 목표로 삼는 것을 방지하기 위해 SSH를 통한 직접적인 루트 로그인을 비활성화해야 합니다. 대신, 사용자는 자신의 계정으로 로그인하고 관리 작업에는 sudo를 사용해야 합니다.
- 방법:
sshd_config에서PermitRootLogin no로 설정합니다.
5. 유휴 시간 초과 및 Keepalive 설정
해당 조치가 없는 활성 SSH 세션이 무기한 열려 있는 것을 방지합니다.
ClientAliveInterval및ClientAliveCountMax: 이러한 서버 측 설정은 정기적인 간격으로 클라이언트에게 널 패킷을 보내 연결이 여전히 활성 상태인지 확인합니다. 클라이언트가ClientAliveCountMax횟수만큼 응답하지 않으면 서버는 세션을 끊습니다.
ClientAliveInterval 300 # 5분마다 패킷 전송 ClientAliveCountMax 2 # 응답 누락 2회 후 연결 끊기 (10분)
6. 프로토콜 2만 사용하도록 설정
SSH 프로토콜 버전 1은 구식이며 알려진 보안 취약점이 있습니다. 프로토콜 2만 사용하도록 설정해야 합니다.
- 방법:
sshd_config에서Protocol 2로 설정합니다.
7. 호스트 키 강화
서버의 호스트 키가 보호되고 적절하게 관리되는지 확인합니다.
- 권한: 호스트 키 파일(예:
/etc/ssh/ssh_host_rsa_key)에 제한적인 권한(예:600)이 있고 루트가 소유자인지 확인합니다.
클라이언트 측 보안 모범 사례
클라이언트 머신과 SSH 키를 보호하는 것은 서버 측 강화만큼이나 중요합니다.
1. 개인 키 보호
개인 SSH 키는 서버로 가는 게이트웨이입니다. 최대한 주의해서 다루십시오.
- 권한: 개인 키 파일(예:
~/.ssh/id_rsa)에 엄격한 권한(예:600또는400)을 설정하여 본인만 읽을 수 있도록 해야 합니다.
bash chmod 600 ~/.ssh/id_rsa - 암호 구문: 개인 키를 암호화하려면 항상 강력한 암호 구문을 사용하십시오. 이렇게 하면 키 파일이 손상되더라도 암호 구문이 필요하여 추가적인 보안 계층이 제공됩니다.
- 복사 금지: 개인 키를 다른 사람과 공유하거나 안전하지 않은 위치에 저장하지 마십시오.
2. SSH 에이전트 포워딩 신중하게 사용
SSH 에이전트 포워딩을 사용하면 개인 키를 해당 서버에 복사하지 않고도 로컬 SSH 키를 사용하여 원격 서버에 인증할 수 있습니다. 편리하지만 원격 서버가 손상된 경우 보안 위험이 될 수 있습니다.
- 활성화:
ssh -A user@your_server_ip - 모범 사례: 반드시 필요한 경우에만 에이전트 포워딩을 사용하고 가능한 한 빨리 연결을 끊으십시오. 클라이언트 구성에서 기본적으로 비활성화하는 것을 고려하십시오.
3. 호스트 키 지문 확인
SSH 서버에 처음 연결할 때 클라이언트는 서버의 호스트 키 지문(fingerprint)을 확인하라는 메시지를 표시합니다. 이는 중간자 공격을 방지하는 데 도움이 됩니다.
- 방법: 항상 신뢰할 수 있는 출처(예: 호스팅 제공업체 또는 시스템 관리자가 제공하는 정보)와 지문이 일치하는지 확인하십시오. 후속 연결에서 지문이 예기치 않게 변경되면 보안 문제가 있음을 나타낼 수 있습니다.
4. SSH 클라이언트 소프트웨어 업데이트 유지
최신 보안 패치 및 기능을 활용하려면 SSH 클라이언트 소프트웨어(OpenSSH, PuTTY 등)를 최신 상태로 유지하십시오.
고급 보안 조치
기본 단계 외에도 다음 고급 기술을 고려하십시오.
1. 2단계 인증(2FA)
추가적인 보안 계층을 위해 2단계 인증을 구현합니다. 이는 일반적으로 알고 있는 것(SSH 키 또는 비밀번호)과 가지고 있는 것(인증 앱 또는 하드웨어 토큰의 코드)의 조합을 포함합니다.
- 도구: Google Authenticator, Duo Security 또는 하드웨어 토큰을 PAM(Pluggable Authentication Modules)과 통합하여 SSH에 사용할 수 있습니다.
2. Fail2ban
Fail2ban은 침입 방지 소프트웨어 프레임워크로, 로그 파일(예: /var/log/auth.log)을 스캔하고 비밀번호 실패 횟수가 너무 많거나 익스플로잇을 찾는 등 악의적인 징후를 보이는 IP를 차단합니다. 지정된 시간 동안 IP를 거부하도록 방화벽 규칙을 업데이트합니다.
- 설치: 일반적으로 패키지 관리자(
sudo apt install fail2ban또는sudo yum install fail2ban)를 통해 사용 가능합니다. - 구성: SSH 로그를 모니터링하고 차단 시간 및 임계값을 정의하기 위해
/etc/fail2ban/jail.local에서 '감옥(jail)'을 구성합니다.
3. 방화벽 구성
방화벽(ufw, firewalld 또는 iptables와 같은)을 사용하여 SSH 포트(기본 또는 사용자 지정)에 대한 액세스를 신뢰할 수 있는 IP 주소 또는 범위로만 제한합니다.
- 예시 (ufw):
bash sudo ufw allow from trusted_ip to any port 22 sudo ufw enable
결론
SSH 연결을 보호하는 것은 일회성 설정이 아닌 지속적인 프로세스입니다. 서버 측 및 클라이언트 측의 모범 사례를 성실하게 적용하면 원격 액세스와 관련된 위험을 크게 완화할 수 있습니다. SSH 키 인증, 강력한 액세스 제어 및 Fail2ban과 같은 모니터링 도구의 우선순위를 정하는 것이 안전한 SSH 환경의 기반을 형성합니다. 보안 구성을 정기적으로 검토하고 업데이트하면 시스템이 진화하는 위협으로부터 계속 보호받을 수 있도록 보장합니다.