개요

SSH(Secure Shell)는 원격 서버 관리의 표준 프로토콜이지만, 기본 설정 그대로 사용하면 브루트포스 공격이나 키 탈취 등의 보안 위험에 노출됩니다. 또한 SSH 터널링은 VPN 없이도 안전한 네트워크 통신을 구현할 수 있는 강력한 기능이지만, 많은 엔지니어가 그 잠재력을 충분히 활용하지 못하고 있습니다. 이 글에서는 SSH 보안을 실질적으로 강화하는 설정과 함께, 로컬/리모트/다이나믹 포워딩의 실전 활용법을 다룹니다.

핵심 개념

Ed25519 키: RSA보다 짧은 키 길이로 동등 이상의 보안 강도를 제공합니다. 현재 SSH 키 생성의 권장 알고리즘입니다.

Certificate 기반 인증: 대규모 인프라에서는 개별 공개키 배포 대신 SSH CA(Certificate Authority)를 사용하면 키 관리가 간소화됩니다.

SSH 터널링 유형: 로컬 포워딩(-L)은 클라이언트의 포트를 원격 서비스에 연결하고, 리모트 포워딩(-R)은 서버의 포트를 클라이언트 쪽에 연결하며, 다이나믹 포워딩(-D)은 SOCKS 프록시를 생성합니다.

ProxyJump: 배스천 호스트(점프 서버)를 통한 다단계 접속을 간편하게 설정하는 기능으로, 기존 ProxyCommand보다 직관적입니다.

실전 예제: SSH 보안 설정

# Ed25519 키 생성 (비밀번호 보호)
ssh-keygen -t ed25519 -C "user@company.com" -f ~/.ssh/id_ed25519

# SSH 에이전트에 키 등록 (macOS Keychain 연동)
ssh-add --apple-use-keychain ~/.ssh/id_ed25519

# 서버에 공개키 등록
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server.example.com

서버 측 sshd 보안 강화 설정입니다.

# /etc/ssh/sshd_config.d/hardening.conf
sudo tee /etc/ssh/sshd_config.d/hardening.conf <<EOF
# 비밀번호 인증 비활성화
PasswordAuthentication no
KbdInteractiveAuthentication no

# root 로그인 차단
PermitRootLogin no

# 키 알고리즘 제한
PubkeyAcceptedAlgorithms ssh-ed25519,sk-ssh-ed25519@openssh.com

# 세션 제한
MaxAuthTries 3
MaxSessions 5
LoginGraceTime 30

# 암호 스위트 강화
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms sshd-x25519-sha256,curve25519-sha256

# 유휴 세션 타임아웃 (5분)
ClientAliveInterval 300
ClientAliveCountMax 2
EOF

# 설정 검증 및 적용
sudo sshd -t && sudo systemctl reload sshd

SSH 터널링 실전 예제입니다.

# 로컬 포워딩: 원격 DB에 로컬처럼 접근
ssh -L 5432:db-internal:5432 user@bastion.example.com
# 이후 localhost:5432로 DB 접속 가능

# 리모트 포워딩: 로컬 개발 서버를 외부에 노출
ssh -R 8080:localhost:3000 user@public-server.com
# 외부에서 public-server.com:8080으로 접근 가능

# 다이나믹 포워딩 (SOCKS5 프록시)
ssh -D 1080 -N user@proxy-server.com
# 브라우저 SOCKS 프록시를 localhost:1080으로 설정

# ProxyJump로 배스천 경유 접속
ssh -J bastion.example.com internal-server.local

활용 팁

  • ~/.ssh/config 적극 활용: Host 별칭, ProxyJump, 포트 포워딩 등을 설정 파일에 미리 정의하면 매번 긴 명령을 입력할 필요가 없습니다.
  • FIDO2 키 지원: YubiKey 등 하드웨어 보안 키로 SSH 인증하면 키 파일 탈취 위험을 원천 차단할 수 있습니다. sk-ssh-ed25519 타입을 사용하세요.
  • fail2ban 연동: SSH 브루트포스 공격을 자동 차단합니다. maxretry=3, bantime=3600 설정을 권장합니다.
  • 포트 변경의 한계: SSH 포트를 22에서 변경하는 것은 자동 스캔을 줄이지만 실질적인 보안 강화는 아닙니다. 키 인증이 본질적인 방어입니다.
  • ControlMaster: 같은 서버로의 다중 연결 시 ControlMaster auto와 ControlPersist 600을 설정하면 연결 속도가 크게 향상됩니다.

마무리

SSH 보안은 키 기반 인증, 암호 스위트 제한, 세션 관리만으로도 대부분의 위협을 차단할 수 있습니다. 여기에 터널링을 활용하면 VPN 없이도 안전한 네트워크 접근이 가능하며, ProxyJump와 ControlMaster를 병행하면 복잡한 인프라 환경에서도 효율적인 서버 관리가 가능합니다.