클릭하여 터미널 활성화

Ubuntu vsftpd 보안 설정 | FTPS + 포트 변경 + IP 화이트리스트

// vsftpd · FTPS · TLS · IP Whitelist · Port
기본 설치 그대로 운영하면 안 된다 — 실무에서 쓰는 보안 설정 3가지

기본 vsftpd가 왜 문제냐면

기본 설치 상태에서 FTP는 평문 전송이다.

"같은 네트워크에서 패킷 캡처하면 ID, 패스워드, 파일 내용이 그대로 보인다."

내부망이라고 안전한 게 아니다. 포트 21은 스캐너가 제일 먼저 두드리는 포트고, IP 제한 없으면 누구든 시도할 수 있다. 세 가지만 막아도 공격 표면이 확 줄어든다.

기본 vsftpd 취약점
평문 전송 → 스니핑으로 크레덴셜 탈취 가능
포트 21 오픈 → 자동화 스캐너가 바로 감지
IP 제한 없음 → 외부에서 무제한 접근 시도

이 세 가지를 막는다. 구성 항목:

FTPS — TLS 암호화
openssl 자체 서명 인증서 + 전송/로그인 암호화 강제
포트 변경 — 21 → 비표준 포트
자동화 스캐너, 스크립트 공격 회피
IP 화이트리스트 — 허용 IP 명시
등록된 IP 외 접근 차단 (tcp_wrappers / ufw)

기술 스택

ENCRYPTION
TLS 1.2 / 1.3
openssl 자체 서명 인증서
PORT
21 → 2121
비표준 포트로 변경
ACCESS CONTROL
IP Whitelist
tcp_wrappers + ufw
BASE
WSL2 Ubuntu
vsftpd 기본 설치 완료 상태

구조

FILES
/etc/vsftpd.confTLS + 포트 변경 설정
/etc/ssl/private/vsftpd.keyTLS 개인키
/etc/ssl/certs/vsftpd.pemTLS 인증서
/etc/hosts.allow허용 IP 등록
/etc/hosts.deny나머지 전부 차단
/var/log/vsftpd.log전송 감사 로그

TLS 인증서 생성

openssl로 자체 서명 인증서를 만든다. RSA 2048bit, 유효기간 10년.

Ubuntu (WSL2)
user@DESKTOP:~$ sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.pem
Country Name (2 letter code): KR
Common Name: localhost ← 서버 IP 또는 도메인
나머지는 Enter 스킵 가능
💡
자체 서명 vs 공인 인증서
자체 서명은 암호화는 되지만 신뢰 체계가 없다. WinSCP에서 경고창이 뜨는데 내부망이면 수락하면 된다. 외부에 오픈하는 서버라면 Let's Encrypt 공인 인증서로 교체해야 한다.
openssl 인증서 생성

vsftpd.conf — TLS + 포트 변경

기존 vsftpd.conf 아래에 추가한다. 포트는 listen_port로 바꾼다. 여기선 2121로 설정한다.

/etc/vsftpd.conf — 추가 설정
# ── 포트 변경 ──────────────────────────────
listen_port=2121 ← 21에서 변경. 원하는 포트로
# ── TLS 암호화 ─────────────────────────────
ssl_enable=YES
ssl_ciphers=HIGH ← TLS 강력한 암호화 스위트만 허용
ssl_sslv2=NO
ssl_sslv3=NO ← SSLv2/v3 취약, 반드시 NO
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
require_ssl_reuse=NO ← WinSCP 호환성, 없으면 426 오류
force_local_data_ssl=YES ← 데이터 채널 암호화 강제
force_local_logins_ssl=YES ← 로그인 암호화 강제
# ── 접속 제한 ──────────────────────────────
max_clients=10
max_per_ip=3
idle_session_timeout=300
# ── 감사 로그 ──────────────────────────────
xferlog_enable=YES
log_ftp_protocol=YES
vsftpd_log_file=/var/log/vsftpd.log
⚠️
삽질 포인트 — require_ssl_reuse
require_ssl_reuse=NO 빠지면 WinSCP에서 접속은 되는데 파일 전송 시 "426 Failure writing network stream" 오류 난다. 반드시 넣을 것.
vsftpd.conf 보안 설정 추가

Ubuntu (WSL2)
user@DESKTOP:~$ sudo systemctl restart vsftpd
user@DESKTOP:~$ sudo systemctl status vsftpd
Active: active (running)
systemctl restart + status 확인

IP 화이트리스트 설정

등록된 IP만 접속 허용한다. tcp_wrappers로 설정한다. hosts.allow에 허용 IP 넣고, hosts.deny에서 나머지 전부 차단하는 방식이다.

/etc/hosts.allow
# vsftpd 접속 허용 IP 목록
vsftpd : 192.168.1.100 ← 단일 IP
vsftpd : 192.168.1.0/255.255.255.0 ← 대역 허용
vsftpd : 127.0.0.1 ← 로컬 항상 포함
/etc/hosts.deny
# hosts.allow에 없는 모든 IP 차단
vsftpd : ALL
⚠️
순서가 중요하다
tcp_wrappers는 hosts.allow 먼저 확인 → 없으면 hosts.deny 확인 순서다. hosts.deny에만 쓰고 hosts.allow를 빠뜨리면 본인도 못 들어간다.
💡
ufw로 추가 잠금 (선택)
tcp_wrappers와 별개로 ufw에서도 포트 레벨로 막을 수 있다.
sudo ufw allow from 192.168.1.100 to any port 2121
sudo ufw deny 2121
두 레이어를 같이 쓰면 더 안전하다.
/etc/hosts.allow 설정

/etc/hosts.deny 설정

WinSCP FTPS 접속 설정

TLS + 포트 변경 후 WinSCP 설정을 바꿔야 접속된다. SFTP 모드가 아니다.

WinSCP 접속 정보 (변경 후)
프로토콜      : FTP ← SFTP 아님, 반드시 FTP 선택
암호화       : TLS/SSL Explicit (FTPS)
호스트       : localhost 또는 WSL2 IP
포트         : 2121 ← 변경한 포트
사용자명     : ftpuser
비밀번호     : 설정한 비밀번호
💡
인증서 경고창 뜰 때
자체 서명 인증서라 WinSCP가 신뢰할 수 없다는 경고를 띄운다. 내부망이면 수락하면 된다. 수락 후 인증서 정보가 저장돼서 다음부터는 안 뜬다.
WinSCP FTP + FTPS 설정
FTPS 접속 성공 + 자물쇠 아이콘

전체 흐름 요약

SECURITY SETUP FLOW
01openssl req -x509  TLS 자체 서명 인증서 생성
02vi /etc/vsftpd.conf  listen_port=2121 + TLS 설정 추가
03systemctl restart vsftpd
04vi /etc/hosts.allow  허용 IP 등록
05vi /etc/hosts.deny  vsftpd : ALL
06WinSCP  FTP → FTPS (TLS Explicit) + 포트 2121
07접속암호화된 FTPS 접속 성공 ✓

보안 체크리스트

이 포스트 기준 / 추가 권장
TLS 암호화 — 전송 평문 차단
포트 변경 — 자동화 스캐너 회피
IP 화이트리스트 — 허용된 IP만 접근
chroot_local_user — 홈 디렉터리 격리
xferlog — 파일 전송 감사 로그
fail2ban — 브루트포스 자동 차단 (별도 설정)
공인 인증서 교체 — 외부 오픈 시 Let's Encrypt
SFTP 전환 — FTP 자체를 버리는 게 제일 낫다

기본 FTP 대비 공격 표면이 확 줄어든다. TLS로 평문 차단, 포트 변경으로 스캐너 회피, IP 화이트리스트로 접근 자체를 막는다. 이 세 개가 실무 최소 기준이다.

// 결론
기본 FTP 그대로 운영하는 건 없다.
TLS + 포트 변경 + IP 화이트리스트, 세 개가 최소다.
Tags: #vsftpd보안 #FTPS #TLS #IP화이트리스트 #포트변경 #Ubuntu #서버보안