[1] 서론
1탄은 간단한 FTP 서버 운영을 알아보고, 2탄은 FTP 서버에서 파일을 옮긴 흔적을 보는 xferlog 확인, 3탄 평문 취약점 보완을 위한 ssl 적용
FTP 서버를 운영하는 방법을 적기 앞서, 중요한 데이터를 FTP 서버로 사용하려고 한다면, FTP는 전송 과정이 평문으로 전송되어 데이터 노출의 취약점이 있어 sftp
, ftps
를 사용하기를 권장합니다. 지금은 vsftpd(very secure file transfer protocol deamon)
을 설치하여 FTP 서버
를 구성하여 파일을 전송하고 공유해보겠습니다.
ssh를 사용하고 있거나 할 줄 안다면 sftp
를 적용하기 빠릅니다. 현재 글에서는 ftps
를 적용하는 방법을 적도록 하겠습니다.
[2] 서버 설치 및 구성
[2.1] 설치
# /bin/bash
# 사용 가능한 패키지 목록 업데이트
sudo apt update
# vsftpd 설치
sudo apt install vsftpd
vsftpd를 설치를 진행합니다.
[2.2] 설정 파일 재구성
# /etc/vsftpd.conf
# sudo vim /etc/vsftpd.conf
# standalone 관련 설정
listen=NO
listen_ipv6=YES
# 익명 사묭 불가능
anonymous_enable=NO
# 로컬 계정 사용자 접속
local_enable=YES
# 새로운 디렉토리에 접속했을 때, 보여줄 메시지를 저장
dirmessage_enable=YES
# 로컬타임
use_localtime=YES
# ftp 로그 사용
xferlog_enable=YES
# standalone 모드에서, ftp 포트변경
# 데이터 체널
connect_from_port_20=YES
# chroot 은 change root의 약어로 root 디렉터리를 바꾼다라는 의미이다.
# 해당 옵션을 이용해서 vsftpd.chroot_list 파일안에 적힌 유저 리스트는 secure_chroot_dir
# 에 적힌 경로의 디렉터리가 최상위 디렉터리가 되어, 다른 상위 디렉터리에 접근이 불가하다.
chroot_local_user=NO
chroot_list_enable=YES
# 저자는 해당 파일에 cothi 라는 user를 기입
chroot_list_file=/etc/vsftpd.chroot_list
# root 폴더 변경
# local_root는 적지 않아도 상관없다
# 만약 secure_chroot_dir을 설정할거면 폴더에 500 또는 555 권한을 줘야 정상적으로 접속이 가능함
# 아니면 접속 불가(error), secure_dir 용도로 사용할 것이면 local_root을 굳이 적어두지 않아도 상관없습니다.
# 단지 예시로 표현
local_root=/home/userName/ftp/empty
secure_chroot_dir=/home/userName/ftp/empty
# vsftpd에서 pam 설정 파일명으로 사용할 파일명 지정
pam_service_name=vsftpd
# 평문 전송 취약점이 생길 수 있으니, YES로 적용하는게 맞는데 3탄에서 지정하도록 할게요.
# 지금은 따로 하지 않겠습니다.
ssl_enable=NO
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
sudo vim /etc/vsftpd.conf을
통해서 해당 파일을 편집을 진행합니다. 해당 서버의 가이드나 보안 설정을 추가하거나 제거해도 됩니다.
[3] FTP 서버 시작 및 확인
# /bin/bash
# chroot_list 빈 파일
sudo touch /etc/vsftpd.chroot_list
# vsftpd 데몬 시작
sudo systemctl start vsftpd
# 재부팅시 vsftpd 데몬 자동 시작
sudo systemctl enable vsftpd
이제 vsftpd 데몬
이 실행됩니다. 간략하게 정상적으로 작동 중인지 확인해 봅시다.
netstat -tlp
명령어로 ftp 서버가 LISTEN 상태가 된 것을 확인할 수 있다. 권한을 555로 주게 되면, 테스트하기 까다로우니, secure_chroot_dir이 설정을 해제하고, ftp 서버에서 파일을 만들어, ftp 서버에 접속을 진행해 ftp 폴더 내부에 있는 생성한 파일을 가져오겠습니다.
흐름은 ftpTest.txt라는 파일을 만들었고, ~/ftp/empty 경로에 ftp localhost
명령어로 접속을 진행해 local root 경로에 있는 생성한 파일을 가져와 확인합니다.
[4] 포트 포워딩
이로써, 서버가 정상적으로 실행되는 것을 확인할 수 있었습니다. 하지만 이것은 로컬 호스트에서 단순히 실행한 것이므로 외부에서 접속을 허용하려면 방화벽 및 인증 및 제어를 담당하는 21번 포트를 포워딩이 필요합니다. 데이터 채널인 20번은 포트 포워딩을 하지않는 이유는 제어를 담당하는 21번 포트는 클라이언트에서 서버로 들어오는 입장이고, 20번 포트는 서버에서 클라이언트로 데이터가 나가는 입장이기 때문입니다. 하지만, NAT 환경이라면 클라이언트에서 따로 데이터 채널 포트 포워딩을 따로 해줘야 한다는 단점이 생깁니다. 단점을 보완하고자 패시브 모드를 사용하기도 합니다. 현재 예시에서는 액티브 모드를 사용합니다. 따라서, 21번 포트만 포트 포워딩을 진행합니다.
[5] 방화벽(iptables)을 사용하는 경우
# /bin/bash
# iptables -I INPUT -s source_ip -d destiantion_ip -p tcp --dport 21 -j ACCEPT
# example
iptables -I INPUT -s 0.0.0.0/0 -d 192.168.0.7 -p tcp --dport 21 -j ACCEPT
마침
2/3탄에는 vsftpd
를 사용하면서 남은 로그를 분석하겠습니다.
올바르지 않은 지식이 있거나, 잘못 기입된 지식이 있을 경우 메일로 연락 부탁드립니다.
감사합니다!
---
'서버 > Linux' 카테고리의 다른 글
FTP- FTP에 SSL 적용 (3/3) (0) | 2024.02.04 |
---|---|
FTP - xferlog 로그 분석 (2/3) (2) | 2023.06.10 |