[1] 개발 환경

  • FTP (vsftpd)
  • openssl로 인증서, 개인키 발급 - self signed certificate 방법
  • 테스트 서버 - linux (ubuntu)
  • 클라이언트 - window

[2] vsftpd 설정

[2.1] 개발환경 설치

# /bin/bash

# openssl 설치
sudo apt install openssl

# vsftpd 설치
sudo apt install vsftpd


# vsftpd 에 ssl 적용이 가능한지 확인
ldd $(which vsftpd) | grep ssl

openssl, vsftpd 가 설치되지 않았다면 설치를 진행합니다. 그리고 설치된 vsftpd에 ssl 이 적용할 수 있는지 확인합니다

vsftpd 에 ssl 의존성확인


lld 명령어는 지정한 프로그램의 의존성을 확인할 떄 사용하는 명령어이다

 

[2.2] vsftpd 설정파일 설정

[2.2.1] vsftpd 설정

FTP 서버에서 active 모드로 진행하면 클라이언트에서 포트를 방화벽에서 오픈해야 하기 때문에 패시브 모드로 변경하고, SSL 활성화 그리고 SSL에 인증서와 개인키 경로를 지정합니다.

# sudo vim /etc/vsconf.conf

# 인증서 위치 설정 및 ssl 활성화
rsa_cert_file=/etc/ssl/vsftpd/vsftpd.pem 
rsa_private_key_file=/etc/ssl/vsftpd/vsftpd.key
ssl_enable=YES

# 패시브 활성화 (포트 범위 10001~10010)
pasv_enable=YES
pasv_promiscuous=YES
pasv_min_port=10001
pasv_max_port=10010

[2.2.2] vsftpd.conf 파일 설정 설명

   
설정 설명
ssl_enable SSL 활성화 여부
rsa_cert_file SSL/TLS 인증서 위치 지정
rsa_private_key_file 인증서에 대응하는 개인키 파일의 경로 지정
ssl_tlsv1 SSL/TLS 프로토콜 중 TLSv1 을 사용할지 여부
pasv_enable 패시브 모드 활성화
pasv_min_port 패시브 모드 범위 최소 포트설정
pasv_max_port 패시브 모드 범위 최대 포트설정
pasv_promiscuous 같은 IP 내에서만 접속하게 하는 옵션

[3]. SSL 인증서 발급

openssl 로 self signed certificates를 발급해서 사용하려고 합니다.. 테스트 용도로 하는 것이기 때문에 이렇게 사용하는 것이라 문제가 발생하지 않지만, 따로 여러 명이서 사용하는 곳이라면 공식적인 인증서를 발급하는 편이 좋습니다.

[3.1] openssl 이용 발급

# vsftpd 폴더가 없다면 생성
mkdir -f /etc/ssl/vsftpd

# openssl 인증서 발급
openssl req -x509 -nodes -days 1825 -newkey \
rsa:2048 -keyout /etc/ssl/vsftpd/vsftpd.key -out /etc/ssl/vsftpd/vsftpd.pem

[3.1.1] openssl 옵션 설명

옵션 설명
req 인증서 요청을 처리하는 서브커맨드
x509 x.509
nodes 인증서의 개인 키를 암호화하지 않도록 지정하는 옵션
days 인증서의 유효 기간을 일단위로 설정하는 옵션
newkey 새로운 RSA 키 쌍을 생성하는 옵션입니다.
rsa:2048은 2048 비트의 RSA 키를 생성하도록 지정합니다.
keyout 개인 키를 저장한 파일 경로를 지정하는 옵션
out 생성도니 X.509 인증서를 저장할 파일 경로를 지정하는 옵션

[3.1.2] openssl 질의 분석

openssl 옵션을 지정하고 입력하면 해당 질의가 나오는데 이 질의는 다음과 같다.

질의 설명 작성 예제
Country Name 국가코드 KR
State or Province Name 시/도의 전체이름 Seoul
Locality Name 시/군/구 등의 이름 XXX-gu
Organization 회사이름 XXX
Organization Unit 부서명 S
Common Name SSL 인증서를 설치할 서버의 도메인, IP 테스트 목적이고 도메인이 없다면
사설 ip나 공인 ip를 적거나 도메인을 적어도 된다.

[3] 적용 및 확인

[3.1] 서비스 및 확인

[3.1.1] ftp 서비스 시작

# 시스템 서비스 적용 
sudo systemctl enable vsftpd

# 시스템 서비스 확인
sudo systemctl status vsftpd

vsftpd 서비스

[3.1.2] 서비스 확인

systemctl status vsftpd에서 위에 그림처럼 정삭적으로 실행되고 있다면 파일질러라는 클라이언트를 통해서 FTPS를 통해서 패시브 모드가 잘 작동하고 있는지 확인하도록 합니다.

ftp

클라이언트에서 접속을 하고나서 netstat 명령어를 통해서 vsftpd 에서 수동 모드를 적용한 패시브 포트(10001~10010)로 데이터를 주고받는 것을 확인할 수 있습니다. 21번 포트도 vsftpd.conf 파일에서 설정(listen_port=PORT_NUM)을 통해 변경할 수 있습니다.

[3.2] SSL 확인 및 암호화 적용 확인

[3.2.1] SSL 확인

접속 모습

self signed certificate 이기 때문에 경고 문구가 나옵니다. Subject 에서 이름, 기관, 국가, 시/도에서 설정한 대로 SSL 이 적용된 것을 확인할 수 있습니다. 팝업에 확인을 누르면 FTPS 서버에 접속이 가능합니다.

[3.2.2] SSL 암호화 확인

SSL 적용이 된 패킷

FTPS 서버와 클라어언트간의 데이터가 와이어샤크를 통해 확인 결과 애플리케이션 데이터가 암호화되고 있는 것을 확인할 수 있다.

[3.2.3] SSL 암호화 적용이 안되었을 때

SSL 적용이 안된 패킷

만약 적용되지 않는다면 파일을 주고 받을 때 위와 같이 평문 전송을 하고 스니핑 공격에 취약해질 수 있다. SSL 적용이 번거롭다면 SSH와 같은 대안이 있다.

감사합니다.

'서버 > Linux' 카테고리의 다른 글

FTP - xferlog 로그 분석 (2/3)  (2) 2023.06.10
FTP - 서버 운영 (1/3)  (0) 2023.06.08