SSH는 서버 관리의 핵심 도구이지만, 기본 설정 그대로 사용하면 자동화된 브루트포스 공격의 표적이 됩니다. 실제로 새 서버를 개설하면 수분 내에 22번 포트로 로그인 시도가 시작됩니다. 이 글에서는 SSH 보안을 단계적으로 강화하는 방법을 설명합니다.

1. SSH 키 페어 생성

클라이언트(로컬 PC)에서 SSH 키 쌍을 생성합니다:

# ED25519 알고리즘 (권장)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 또는 RSA 4096
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

키 파일 위치: ~/.ssh/id_ed25519 (개인키), ~/.ssh/id_ed25519.pub (공개키)

2. 공개키를 서버에 등록

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip

또는 수동으로 서버에 추가:

# 서버에서 실행
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "공개키내용" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

3. SSH 설정 강화

/etc/ssh/sshd_config 파일을 편집합니다:

sudo nano /etc/ssh/sshd_config

다음 항목을 수정합니다:

# 포트 변경 (1024~65535 중 선택)
Port 2222

# 루트 직접 로그인 비활성화
PermitRootLogin no

# 비밀번호 로그인 비활성화 (키 인증 설정 후)
PasswordAuthentication no

# 빈 비밀번호 비활성화
PermitEmptyPasswords no

# 최대 인증 시도 횟수
MaxAuthTries 3

# 접속 타임아웃 (초)
LoginGraceTime 30

# X11 포워딩 비활성화 (불필요한 경우)
X11Forwarding no

# 특정 사용자만 접속 허용
AllowUsers myuser

설정 적용:

sudo systemctl restart sshd

주의: 설정을 저장하기 전에 현재 세션은 유지한 채로 새 터미널에서 접속 테스트를 먼저 하세요. 잘못된 설정으로 잠기면 IPMI나 콘솔 접근이 필요합니다.

4. 방화벽에서 새 포트 허용

sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp

5. 접속 확인

ssh -p 2222 -i ~/.ssh/id_ed25519 myuser@server_ip

보안 수준 확인

/var/log/auth.log에서 로그인 시도를 모니터링합니다:

sudo tail -f /var/log/auth.log | grep sshd

포트 변경만으로도 자동화 공격의 90% 이상을 차단할 수 있습니다.