클라우드 환경이나 기업 네트워크에서는 보안을 위해 직접적으로 접근할 수 없는 내부 서버들이 존재합니다. 이러한 환경에서 Bastion 호스트(또는 점프 서버)를 활용한 안전한 접속 방법은 필수적인 지식입니다. 이 글에서는 SSH 터널링을 활용하여 내부 서버에 접근하는 방법과 파일 전송을 위한 SFTP 구성 방법에 대해 심층적으로 알아보겠습니다.
Bastion 호스트란?
Bastion 호스트는 내부 네트워크와 외부 네트워크 사이에 위치한 특별한 서버로, 보안 관문 역할을 합니다. 이 서버는 외부에서 내부 네트워크로 들어가는 유일한 진입점으로 작동하며, 모든 트래픽은 이 서버를 통과해야 합니다. 이를 통해 내부 네트워크의 보안을 강화할 수 있습니다.
SSH 점프 서버를 통한 내부 접속 구조
일반적인 구성은 다음과 같습니다:
외부 네트워크 → Bastion 서버(공개 IP) → 내부 서버(사설 IP)
이러한 구조에서는 사용자가 직접 내부 서버에 접속할 수 없으며, 반드시 Bastion 서버를 경유해야 합니다. 이는 보안 측면에서 큰 이점을 제공하지만, 접속 방법이 복잡해질 수 있습니다.
SSH 키를 활용한 안전한 접속 방법
Bastion 호스트를 통해 내부 서버에 접속하기 위해서는 보통 SSH 키 인증 방식을 사용합니다. 이는 비밀번호보다 훨씬 안전한 방법입니다.
1. Bastion 서버 SSH 접속
ssh -i private_key.pem username@bastion_public_ip -p custom_port
여기서 -p
옵션은 기본 SSH 포트(22) 대신 다른 포트를 사용할 때 필요합니다. 많은 보안 설정에서는 기본 포트를 변경하여 무차별 대입 공격을 줄입니다.
2. 내부 서버 SSH 접속
Bastion 서버에 접속한 후, 내부 서버로 접속합니다:
ssh -i /path/to/private_key.pem username@internal_server_ip
단일 명령으로 내부 서버 접속하기
매번 두 단계를 거치는 것은 번거로울 수 있습니다. SSH의 ProxyJump 기능을 사용하면 한 번의 명령으로 내부 서버에 접속할 수 있습니다:
ssh -J username@bastion_public_ip:custom_port -i private_key.pem username@internal_server_ip
또는 SSH 설정 파일(~/.ssh/config)에 다음과 같이 설정할 수도 있습니다:
Host bastion
HostName bastion_public_ip
Port custom_port
User username
IdentityFile ~/path/to/private_key.pem
Host internal
HostName internal_server_ip
User username
IdentityFile ~/path/to/private_key.pem
ProxyJump bastion
이렇게 설정하면 ssh internal
명령만으로 내부 서버에 접속할 수 있습니다.
SSH 터널링을 활용한 포트 포워딩
SSH 터널링은 내부 서버의 특정 서비스에 안전하게 접근할 수 있는 강력한 방법입니다.
로컬 포트 포워딩
로컬 포트 포워딩은 로컬 컴퓨터의 포트를 내부 서버의 포트로 연결합니다:
ssh -L local_port:internal_server_ip:internal_server_port -i private_key.pem username@bastion_public_ip -p custom_port
예를 들어, 로컬 컴퓨터의 8000번 포트를 내부 서버의 8000번 포트로 포워딩하려면:
ssh -L 8000:internal_server_ip:8000 -i private_key.pem username@bastion_public_ip -p custom_port
이제 로컬에서 localhost:8000
으로 접속하면 내부 서버의 8000번 포트로 연결됩니다.
원격 포트 포워딩
원격 포트 포워딩은 Bastion 서버의 포트를 내부 서버의 포트로 연결합니다:
ssh -R bastion_port:internal_server_ip:internal_server_port -i private_key.pem username@bastion_public_ip -p custom_port
동적 포트 포워딩(SOCKS 프록시)
더 유연한 접근이 필요한 경우, SOCKS 프록시를 설정할 수 있습니다:
ssh -D local_socks_port -i private_key.pem username@bastion_public_ip -p custom_port
이후 브라우저나 다른 애플리케이션의 프록시 설정에서 이 SOCKS 프록시를 사용하면, 모든 트래픽이 SSH 터널을 통해 라우팅됩니다.
Bastion 서버를 통한 SFTP 파일 전송
파일 전송은 서버 관리의 중요한 부분입니다. SFTP(SSH File Transfer Protocol)는 SSH의 보안 이점을 활용한 안전한 파일 전송 프로토콜입니다.
명령줄을 통한 SFTP 접속
직접 내부 서버에 SFTP로 접속하려면:
sftp -J username@bastion_public_ip:custom_port -i private_key.pem username@internal_server_ip
FileZilla와 같은 그래픽 도구 사용
많은 사용자들이 FileZilla와 같은 그래픽 SFTP 클라이언트를 선호합니다. 이런 도구에서 Bastion 서버를 통해 내부 서버에 접속하는 방법은 두 가지가 있습니다:
- SSH 터널 설정 후 접속 먼저 로컬 터미널에서 SSH 터널을 설정합니다:
ssh -i private_key.pem -p custom_port -L 2222:internal_server_ip:22 username@bastion_public_ip
그런 다음 FileZilla에서 다음과 같이 설정합니다:- 프로토콜: SFTP
- 호스트: localhost
- 포트: 2222
- 사용자: 내부 서버 사용자명
- 비밀번호/키 파일: 적절한 인증 방법
- SFTP 프록시 설정 사용 일부 고급 SFTP 클라이언트는 프록시 설정을 지원합니다. FileZilla의 경우:
- 사이트 관리자에서 새 사이트 추가
- 기본 연결 정보 입력 (내부 서버 정보)
- ‘연결’ 또는 ‘프록시’ 탭에서 SFTP 프록시 설정
- 프록시 유형: SSH
- 프록시 호스트: Bastion 서버 IP
- 프록시 포트: Bastion 서버 SSH 포트
- 프록시 사용자: Bastion 서버 사용자명
- 인증 방법: 적절한 방법 선택
iptables를 활용한 영구적 포트 포워딩
SSH 터널링은 세션이 유지되는 동안만 작동합니다. 더 영구적인 솔루션이 필요하다면, Bastion 서버에서 iptables를 사용한 포트 포워딩을 설정할 수 있습니다:
sudo iptables -t nat -A PREROUTING -p tcp --dport external_port -j DNAT --to-destination internal_server_ip:internal_port
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
이 설정을 영구화하려면:
sudo apt install iptables-persistent
sudo netfilter-persistent save
보안 고려사항
이러한 접근 방식을 사용할 때 몇 가지 중요한 보안 고려사항이 있습니다:
- SSH 키 권한: 개인 키 파일의 권한은 너무 개방적이지 않아야 합니다. 일반적으로
chmod 600 private_key.pem
을 사용하여 소유자만 읽고 쓸 수 있도록 설정합니다. - 비표준 포트 사용: 기본 SSH 포트(22) 대신 다른 포트를 사용하면 무차별 대입 공격의 위험을 줄일 수 있습니다.
- 방화벽 설정: Bastion 서버에는 필요한 포트만 개방하고 나머지는 모두 차단하는 엄격한 방화벽 규칙을 적용해야 합니다.
- 로그 모니터링: 모든 SSH 접속 시도는 로깅되어야 하며, 비정상적인 패턴을 탐지하기 위해 정기적으로 모니터링해야 합니다.
- 정기적인 업데이트: Bastion 서버는 항상 최신 보안 패치로 업데이트되어야 합니다.
결론
Bastion 호스트와 SSH 터널링은 보안에 민감한 환경에서 내부 리소스에 안전하게 접근하는 강력한 방법입니다. 이 기술을 제대로 이해하고 구현하면 보안을 강화하면서도 필요한 작업을 효율적으로 수행할 수 있습니다. 특히 클라우드 환경이나 대규모 기업 네트워크에서 작업하는 경우, 이러한 접근 방식은 필수적인 지식입니다.
대부분의 보안 전문가들은 직접적인 접근보다 Bastion 호스트를 통한 중개 접근 방식을 권장합니다. 이는 공격 표면을 줄이고 침입 탐지 및 감사를 위한 중앙 지점을 제공하기 때문입니다. SSH 키 인증과 결합하면 매우 강력한 보안 계층을 구축할 수 있습니다.
고급 사용자의 경우, SSH 설정 파일을 최적화하고 자동화 스크립트를 개발하여 이러한 접근 방식을 더욱 간소화할 수 있습니다. 또한 Ansible, Terraform과 같은 인프라 자동화 도구는 이러한 구성을 코드로 관리하는 데 도움이 됩니다.