[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 이 적용할 수 있는지 확인합니다

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

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

클라이언트에서 접속을 하고나서 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 암호화 확인

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

만약 적용되지 않는다면 파일을 주고 받을 때 위와 같이 평문 전송을 하고 스니핑 공격에 취약해질 수 있다. SSL 적용이 번거롭다면 SSH와 같은 대안이 있다.
감사합니다.
'서버 > Linux' 카테고리의 다른 글
FTP - xferlog 로그 분석 (2/3) (2) | 2023.06.10 |
---|---|
FTP - 서버 운영 (1/3) (0) | 2023.06.08 |
[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 이 적용할 수 있는지 확인합니다

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

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

클라이언트에서 접속을 하고나서 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 암호화 확인

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

만약 적용되지 않는다면 파일을 주고 받을 때 위와 같이 평문 전송을 하고 스니핑 공격에 취약해질 수 있다. SSL 적용이 번거롭다면 SSH와 같은 대안이 있다.
감사합니다.
'서버 > Linux' 카테고리의 다른 글
FTP - xferlog 로그 분석 (2/3) (2) | 2023.06.10 |
---|---|
FTP - 서버 운영 (1/3) (0) | 2023.06.08 |