SFTP와 SSH 기반 파일 전송 보안 구성

SFTP의 SSH 기반 보안 구조, FTP와의 차이, 패킷 구성, Linux 서버 설정과 접근 통제 방안을 정리한다.

2026-08-15 · 최초 발행 2025-08-10

SSH 채널 위에서 파일을 전송하는 방식

SFTP(Secure File Transfer Protocol)는 SSH(Secure Shell)를 기반으로 파일을 주고받는 프로토콜이다. FTP에서 발생할 수 있는 인증 정보와 데이터의 평문 노출 문제를 피하기 위해, TCP 보안 채널을 통해 전송 내용을 암호화한다. 이 채널은 중간자 공격(Man-in-the-Middle Attack)과 패킷 스니핑(Packet Sniffing)에 대한 보호 수단이 된다.

SFTP는 FTP 프로토콜을 보안화한 형태가 아니라 SSH 위에 구현된 별도의 파일 전송 프로토콜이다. 따라서 서비스를 제공하려면 먼저 SSH 서버가 구성되어 있어야 한다. SSH의 인증, 기밀성, 무결성 메커니즘을 활용하면서 파일 탐색과 전송 기능을 제공하며, 업로드와 다운로드뿐 아니라 원격 파일 시스템의 디렉터리 탐색·생성·삭제, 파일 권한 변경, 파일 속성 확인도 안전한 세션 안에서 처리할 수 있다.

전송 과정에서 제공하는 보호 기능

전송 내용은 암호화되며, SSH-2 프로토콜을 통해 AES, 3DES 등의 암호화 알고리즘을 지원한다. 키 교환 과정에서는 세션별 고유 암호화 키가 생성되고, 서버 신원은 호스트 키로 확인한다. 클라이언트는 이를 통해 접속 대상 서버를 검증하고 중간자(Man-in-the-Middle) 공격을 방지한다.

메시지 인증 코드(MAC)는 데이터 무결성을 검증하고, 전송 중 변조를 방지하거나 탐지하는 데 쓰인다. 패킷 시퀀스 번호는 패킷 삽입과 재생 공격을 막는 데 사용된다.

데이터 압축도 지원하므로 네트워크 대역폭 사용량을 줄일 수 있다. 네트워크 경계에서는 단일 포트인 기본 22번 포트를 사용하므로 방화벽 규칙을 관리하기도 수월하다. SSH 터널을 이용하면 다른 프로토콜의 데이터도 보호된 경로로 전달할 수 있다.

FTP와 달라지는 연결 구조

SFTP포트 22: 단일 암호화 연결SFTP 클라이언트SSH 서버암호화된 데이터 전송FTP포트 21: 제어 연결포트 20: 데이터 연결FTP 클라이언트FTP 서버평문 데이터 전송
특성 FTP SFTP
보안 평문 인증 및 데이터 전송 암호화된 인증 및 데이터 전송
포트 20(데이터), 21(제어) 22(SSH)
방화벽 친화성 두 개의 포트 필요, 복잡한 설정 단일 포트, 간단한 설정
인증 방식 사용자명/비밀번호 비밀번호, 공개키, 다중 인증 지원
프로토콜 구조 FTP 프로토콜 사용 SSH 프로토콜의 일부로 구현

SFTP는 클라이언트가 서버의 22번 포트(기본값)에 TCP 연결을 시도하면서 시작한다. 이후 SSH 프로토콜이 보안 채널을 협상하고, 사용자는 암호 또는 공개/개인 키 쌍으로 인증한다. 인증이 끝나면 SSH 연결 안에서 SFTP 서브시스템을 요청하고, 클라이언트와 서버는 SFTP 프로토콜 버전을 협상한다.

바이너리 패킷으로 전달되는 요청

SFTP는 SSH 위에서 동작하는 바이너리 패킷 기반 프로토콜이다. 패킷은 길이, 타입, 요청 식별자, 실제 전달 내용으로 구성된다.

패킷 길이4바이트패킷 타입1바이트요청 ID4바이트페이로드가변 길이
  • 패킷 길이는 전체 패킷 크기를 나타내는 4바이트 필드다.
  • 패킷 타입은 OPEN, CLOSE, READ, WRITE 등의 명령어 유형을 나타내는 1바이트 필드다.
  • 요청 ID는 명령어를 식별하기 위한 4바이트 고유 ID다.
  • 페이로드에는 실제 데이터 또는 명령 매개변수가 가변 길이로 담긴다.

파일 작업은 클라이언트의 요청과 서버의 응답으로 처리한다. 세션 초기화에는 SSH_FXP_INIT를, 파일 처리에는 SSH_FXP_OPEN, SSH_FXP_READ, SSH_FXP_WRITE, SSH_FXP_CLOSE를 사용한다. 파일 정보는 SSH_FXP_STAT로 요청하며, 디렉토리 생성과 삭제에는 각각 SSH_FXP_MKDIR, SSH_FXP_RMDIR가 사용된다. 파일 삭제 명령은 SSH_FXP_REMOVE다.

응답 코드에는 명령 성공을 뜻하는 SSH_FX_OK, 파일 끝을 나타내는 SSH_FX_EOF, 파일이 없을 때의 SSH_FX_NO_SUCH_FILE, 권한 거부인 SSH_FX_PERMISSION_DENIED, 일반 실패인 SSH_FX_FAILURE가 있다.

민감한 데이터 교환 경로로 쓰이는 환경

금융 기관은 고객 개인정보와 금융 거래 데이터를 전송할 때 SFTP를 활용하며, PCI-DSS(Payment Card Industry Data Security Standard) 규정 준수에도 사용한다. 대규모 금융 기관에서는 자동화된 일일 배치에서 내부 시스템 사이의 데이터를 전송하거나, 파트너사와 민감한 금융 데이터를 교환하고, 규제 기관에 보고서를 제출하는 경우가 여기에 해당한다. 키 관리 시스템(KMS)과 연동해 인증 키 관리를 자동화할 수도 있다.

의료 기관에서는 환자 의료 기록을 안전한 채널로 전달하고 HIPAA(Health Insurance Portability and Accountability Act) 규정 준수에 활용할 수 있다. 기업 간 데이터 교환(B2B)에서도 공급망 관리, 주문 처리, 인보이스 교환처럼 기밀 비즈니스 정보를 다루는 작업에 적용된다.

클라우드 환경에서는 AWS Transfer Family와 같은 관리형 SFTP 서비스를 사용할 수 있다. S3 버킷을 파일 저장소로 연결하고, IAM 역할 기반 접근 제어와 CloudWatch 모니터링·로깅을 구성할 수 있다. 다중 인증과 IP 기반 제한도 구현 대상이다.

aws transfer create-server --protocols SFTP --identity-provider-type SERVICE_MANAGED \
  --logging-role arn:aws:iam::123456789012:role/logging-role \
  --tags Key=Name,Value=MyCompanySFTP

Linux에서 SFTP 전용 경로 구성하기

SFTP 서버 구성은 SSH 서버 설치와 설정에서 시작한다.

# Ubuntu/Debian 시스템
sudo apt-get install openssh-server

# RHEL/CentOS 시스템
sudo yum install openssh-server

/etc/ssh/sshd_config에서는 SFTP 하위 시스템을 활성화하고, 전용 그룹 사용자를 지정 경로에 제한할 수 있다.

# SFTP 하위 시스템 활성화
Subsystem sftp internal-sftp

# SFTP 전용 사용자 그룹 제한 설정
Match Group sftpusers
    ChrootDirectory /sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

OpenSSH 서버에서는 그룹 조건과 chroot, 내부 SFTP 명령, 인증 방식을 조합해 접근 범위를 제한할 수 있다.

# 서버 측 SFTP 구성 (OpenSSH)
Match Group sftp-only
    ChrootDirectory /sftp/%u
    ForceCommand internal-sftp
    PasswordAuthentication no
    PubkeyAuthentication yes
    AllowTcpForwarding no

전용 그룹과 사용자를 만들고, chroot 경로와 업로드 디렉터리에 필요한 소유권 및 권한을 부여한다.

# SFTP 사용자 그룹 생성
sudo groupadd sftpusers

# 사용자 생성 및 그룹 할당
sudo useradd -g sftpusers -d /sftp/testuser -s /bin/false testuser
sudo passwd testuser

# 디렉토리 생성 및 권한 설정
sudo mkdir -p /sftp/testuser/upload
sudo chown root:root /sftp/testuser
sudo chown testuser:sftpusers /sftp/testuser/upload
sudo chmod 755 /sftp/testuser
sudo chmod 770 /sftp/testuser/upload

설정을 반영하려면 SSH 서비스를 다시 시작한다.

sudo systemctl restart sshd

인증과 접근 제어를 함께 운영하기

비밀번호 대신 SSH 키 페어를 사용하는 공개키 인증은 무차별 대입 공격(Brute Force Attack)을 막는 데 도움이 된다. 공개키와 비밀번호 또는 OTP(One Time Password)를 조합한 다중 인증(MFA)도 인증 절차를 강화하는 방법이다.

접근 자체는 특정 IP 주소 또는 IP 범위로 제한하고, 방화벽 규칙으로 제어할 수 있다. 모든 SFTP 활동을 기록해 정기적으로 검토하고, 비정상 활동을 탐지할 모니터링 체계를 두는 것도 필요하다. SSH 서버 소프트웨어에는 보안 업데이트와 알려진 취약점 패치를 지속적으로 적용한다.

가용성을 요구하는 환경이라면 다중 SFTP 서버로 고가용성(HA)을 구성하고, 로드 밸런싱과 자동 장애 조치(failover)를 함께 설계한다. 운영 기록에는 모든 SFTP 세션과 명령을 남기며, 실시간 모니터링·알림과 정기 보안 감사를 연계한다.

성능과 운영 복잡도를 고려한 선택

암호화와 복호화는 CPU 부하를 늘릴 수 있으며, 대용량 파일을 전송할 때 성능이 저하될 가능성이 있다. 대용량 파일 처리에서는 다중 SFTP 연결로 병렬 전송을 구성해 전송 속도를 높이고 네트워크 리소스를 효율적으로 활용할 수 있다. 비동기 I/O는 여러 파일 작업을 동시에 요청하고 응답을 처리하므로, 고성능 파일 처리 환경에서 처리량을 높이는 방식이 된다.

전송이 끊긴 경우에는 처음부터 다시 보내지 않고 중단 지점부터 재개할 수 있다. 이는 네트워크가 불안정한 환경에서 유용하다. SSH 압축 기능을 이용한 압축 전송은 대역폭이 제한된 상황에서 전송 효율성을 높일 수 있다. 성능 측면에서는 버퍼 크기, 네트워크 지연시간(latency)에 따른 윈도우 크기, 대용량 파일 전송 시 청크 크기를 조정 대상으로 본다.

SSH 서버 설정과 관리는 비교적 복잡하고, 키 관리에도 오버헤드가 따른다. 요구사항에 따라 FTPS(FTP Secure), SCP(Secure Copy Protocol), Amazon S3나 Azure Blob Storage 같은 클라우드 스토리지 API를 대안으로 검토할 수 있다.

높음낮음높음중간성능+확장성파일 전송 요구사항보안 중요성?성능 중요성?FTPFTPSSFTP클라우드 API

SFTP는 SSH의 암호화, 무결성 검증, 인증 기능을 파일 전송에 연결한다. 민감한 정보를 다루는 금융, 의료, 기업 간 데이터 교환 환경에서 FTP의 보안상 약점을 보완하는 선택지다. 클라우드 환경이 확산되는 상황에서는 클라우드 네이티브 파일 전송 솔루션도 함께 검토할 수 있다.

SFTPSSH파일 전송네트워크 보안암호화