// WSL2 · vsftpd → SFTP · SSH 보안 · UFW · fail2ban · chroot
FTP 버리고 SFTP 전환 — 포트 변경 + UFW 화이트리스트 + fail2ban까지
왜 FTP 버리고 여기까지 왔냐면
vsftpd에 TLS 붙이고, 포트 바꾸고, IP 화이트리스트까지 달았다. 근데 생각해보니 이미 SSH가 떠 있다.
"SSH 있으면 SFTP 그냥 되는데 FTP를 왜 따로 올려?"
vsftpd 걷어내고 SSH에 SFTP 올렸다. 포트 3개가 22 하나로 줄었다. 그리고 SSH 자체도 기본값 그대로면 안 된다. 포트 변경, UFW 화이트리스트, fail2ban까지 묶어서 처리했다. 이게 실무 최소 기준이다.
변경 전 / 후
BEFORE
파일전송 : vsftpd (포트 2121)
열린포트 : 22, 2121, 30000~30100
방화벽 : UFW 없음
침입차단 : fail2ban 없음
SSH포트 : 22 (봇 스캔 대상)
AFTER
파일전송 : SFTP (OpenSSH)
열린포트 : 2222 하나만
방화벽 : UFW + IP 화이트리스트
침입차단 : fail2ban (5회 실패 → 1h 차단)
SSH포트 : 2222 (비표준)
기술 스택
SFTP
OpenSSH
internal-sftp + chroot
FIREWALL
UFW
IP 화이트리스트 + 기본 차단
BRUTE FORCE
fail2ban
5회 실패 → 1시간 자동 차단
ACCESS
chroot
홈 디렉터리 외부 접근 차단
구조
/etc/ssh/sshd_config←Port 2222 + Subsystem + Match Group
/etc/fail2ban/jail.local←신규 생성 (sshd jail 설정)
/home/ftpuser/←root:root / 755 (chroot 조건)
/home/ftpuser/upload/←ftpuser:ftpuser / 755
sftpusers 그룹 생성 + 계정 추가
SFTP 전용 그룹을 만들고 기존 ftpuser를 추가한다. 그룹으로 관리하면 나중에 계정 추가할 때 그룹만 넣으면 된다.
root@HOME:~# groupadd sftpusers
root@HOME:~# usermod -aG sftpusers ftpuser
root@HOME:~# id ftpuser
groups=1002(ftpuser),100(users),1003(sftpusers)
chroot 디렉터리 구조 설정
chroot 조건에 맞게 홈 디렉터리 소유자와 권한을 바꾼다. 실제 파일을 올릴 upload 디렉터리는 별도로 만든다.
# chroot 조건: 홈 디렉터리 소유자 root, 권한 755
root@HOME:~# chown root:root /home/ftpuser
root@HOME:~# chmod 755 /home/ftpuser
# 업로드용 하위 디렉터리
root@HOME:~# mkdir -p /home/ftpuser/upload
root@HOME:~# chown ftpuser:ftpuser /home/ftpuser/upload
root@HOME:~# chmod 755 /home/ftpuser/upload
root@HOME:~# ls -la /home/ftpuser/
drwxr-xr-x root root /home/ftpuser
drwxr-xr-x ftpuser ftpuser /home/ftpuser/upload
⚠️
삽질 포인트 — chroot 권한 오류
/home/ftpuser 소유자가 root가 아니거나 권한이 755가 아니면 접속 시 "Broken pipe" 또는 "Permission denied" 오류 난다. 반드시 chown root:root + chmod 755 순서로 설정할 것.
ufw + fail2ban 설치
root@HOME:~# apt-get update
root@HOME:~# apt-get install -y ufw fail2ban
sshd_config 수정 — 포트 변경 + SFTP 설정
포트 변경, Subsystem 변경, sftpusers 그룹 블록 추가 — 세 가지를 한 번에 처리한다.
root@HOME:~# vi /etc/ssh/sshd_config
① Port 변경
/etc/ssh/sshd_config
# 변경 전
#Port 22
# 변경 후
Port 2222 ← 주석 제거 + 포트 변경
② Subsystem 변경
/etc/ssh/sshd_config
# 변경 전
Subsystem sftp /usr/lib/openssh/sftp-server
# 변경 후
Subsystem sftp internal-sftp
③ 파일 맨 아래 Match Group 블록 추가
/etc/ssh/sshd_config — 파일 끝에 추가
Match Group sftpusers
ChrootDirectory /home/%u
ForceCommand internal-sftp ← 셸 접속 불가
AllowTcpForwarding no
X11Forwarding no
PasswordAuthentication yes
💡
Match Group 블록은 반드시 파일 맨 아래
중간에 넣으면 그 아래 설정이 전부 Match 블록 안으로 들어가서 SSH 전체 설정이 꼬인다.
fail2ban 설정
jail.local 파일을 새로 만든다. jail.conf는 건드리지 않는다. 업데이트로 덮어써지기 때문이다.
root@HOME:~# vi /etc/fail2ban/jail.local
/etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h ← 차단 지속 시간
findtime = 10m ← 실패 감지 시간 범위
maxretry = 5 ← 최대 허용 실패 횟수
ignoreip = 127.0.0.1/8 192.168.219.101 ← 차단 제외 IP
[sshd]
enabled = true
port = 2222 ← 변경된 포트
logpath = /var/log/auth.log
maxretry = 5
bantime = 1h
UFW 방화벽 설정
기본 정책을 차단으로 깔고, 허용 IP만 화이트리스트로 뚫는다.
# 기본 정책: 수신 차단, 송신 허용
root@HOME:~# ufw default deny incoming
root@HOME:~# ufw default allow outgoing
# 허용 IP만 2222 포트 오픈
root@HOME:~# ufw allow from 192.168.219.101 to any port 2222 proto tcp
# UFW 활성화
root@HOME:~# ufw --force enable
# 규칙 확인
root@HOME:~# ufw status verbose
To Action From
2222/tcp ALLOW IN 192.168.219.101
⚠️
UFW 활성화 전에 허용 규칙 먼저
UFW 활성화하기 전에 반드시 허용 IP 규칙을 먼저 추가해야 한다. 순서 바꾸면 본인 IP도 차단돼서 접속이 끊긴다.
SSH 재시작 + fail2ban 시작
# 문법 검사 먼저
root@HOME:~# mkdir -p /run/sshd
root@HOME:~# sshd -t
(아무 출력 없음 = 정상)
# SSH 재시작
root@HOME:~# systemctl daemon-reload
root@HOME:~# systemctl restart ssh.socket
root@HOME:~# systemctl restart ssh
# fail2ban 자동시작 등록 + 시작
root@HOME:~# systemctl enable fail2ban
root@HOME:~# systemctl restart fail2ban
사진 6 — sshd -t + systemctl restart + fail2ban status
vsftpd 중지 + 최종 포트 확인
root@HOME:~# systemctl stop vsftpd
root@HOME:~# systemctl disable vsftpd
# 최종 포트 확인
root@HOME:~# ss -tlnp | grep LISTEN
22, 2121, 30000~30100 사라짐
2222 하나만 남음 ✓
# fail2ban 감시 상태 확인
root@HOME:~# fail2ban-client status sshd
Currently failed: 0 / Currently banned: 0
WinSCP 접속 설정 (변경 후)
WinSCP 접속 정보
프로토콜 : SFTP
호스트 : 192.168.51.20
포트 : 2222 ← 기존 22에서 변경
사용자명 : ftpuser
접속 후 경로 : /upload
전체 흐름 요약
── SFTP 전환 ──────────────────────────────
01│groupadd sftpusers + usermod -aG sftpusers ftpuser
02│chown root:root /home/ftpuser + chmod 755
03│mkdir /home/ftpuser/upload + chown ftpuser
── SSH 보안 강화 ───────────────────────────
04│apt install ufw fail2ban
05│vi /etc/ssh/sshd_config Port 2222 + Subsystem + Match Group
06│vi /etc/fail2ban/jail.local sshd jail 설정
07│ufw default deny + allow 192.168.219.101:2222 + enable
08│sshd -t → systemctl restart ssh + enable fail2ban
09│systemctl stop vsftpd + disable
10│WinSCP SFTP + 포트 2222 → 접속 성공 ✓
보안 체크리스트
이 포스트 기준
✓│FTP → SFTP 전환 — 평문 전송 제거
✓│chroot 격리 — 홈 디렉터리 밖 접근 차단
✓│SSH 포트 변경 — 22 → 2222, 봇 스캔 회피
✓│UFW 화이트리스트 — 허용 IP 외 전체 차단
✓│fail2ban — 브루트포스 자동 차단
△│SSH 공개키 인증 — 패스워드 인증 완전 제거
△│root 로그인 비활성화 — PermitRootLogin no
// 결론
FTP 걷어내고 포트 4개가 2222 하나로 줄었다.
SFTP + 포트변경 + UFW + fail2ban, 이게 최소 기준이다.
Tags:
#SFTP
#SSH보안
#fail2ban
#UFW
#chroot
#Ubuntu
#WSL2
#OpenSSH
#WinSCP