FTP 서버의 데몬인 vsftpd 에 SSL(Secure Socket Layer)을 적용 시키는 방법입니다.
본 글은 소스 설치 기준으로 진행 하였습니다.
vsftpd 가 SSL 을 지원 하는지 확인을 해봅니다.
헐.. 이런 지원을 안하는군요.. 그럼 소스 파일을 받아다가 SSL을 지원 하도록 컴파일 해줘야 합니다.
vsftpd 를 아래 주소에서 최신 버전으로 받아옵니다.
vsftpd 소스 디렉토리에 있는 builddefs.h 헤더 파일의 코드 내용중 SSL 부분앞에 #undef 를 #define 으로 수정합니다.
vsftpd를 컴파일을 합니다.
SSL을 지원하는지 다시 확인 해봅니다.
이제 인증서를 만들기 위해서 OpenSSL 를 설치 해줘야 합니다.
데이터 압축을 지원하기 위한 zlib 를 설치 해줍니다.
- zlib 설치
- OpenSSL 설치
OpenSSL 은 아래 사이트에서 빨간색 부분에 LATEST 를 받아줍니다.
openssl 을 심볼릭 링크를 걸어 줍니다.
10 년 짜리 사설 인증서를 생성합니다.
생성된 vsftpd.pem 인증서를 root 만 읽기/쓰기 가능 하도록 권한을 변경 해줍니다.
vsftpd.pem 파일을 적당한 곳에 이동 시킵니다.
vsftpd.conf 환경 설정 파일에 SSL 을 사용하도록 아래 처럼 추가 해줍니다.
이후 vsftpd 를 시작 합니다.
FTP 클라이언트인 파일질라를 아래 사이트에서 받은 후 설치하고 아래처럼 셋팅 해줍니다.
(알 FTP 클라이언트는 SFTP 는 지원하는데 FTPS 를 지원 하지 못하기에..)

접속과 동시에 인증서 확인 메세지가 뜨는데 확인 하고 접속하면 됩니다.
본 글은 소스 설치 기준으로 진행 하였습니다.
vsftpd 가 SSL 을 지원 하는지 확인을 해봅니다.
[root@yongbok ~]# ldd /usr/local/sbin/vsftpd
/usr/local/sbin/vsftpd:
libpam.so.4 => /usr/lib/libpam.so.4 (0x28093000)
libutil.so.7 => /lib/libutil.so.7 (0x2809a000)
libc.so.7 => /lib/libc.so.7 (0x280a8000)
헐.. 이런 지원을 안하는군요.. 그럼 소스 파일을 받아다가 SSL을 지원 하도록 컴파일 해줘야 합니다.
vsftpd 를 아래 주소에서 최신 버전으로 받아옵니다.
ftp://vsftpd.beasts.org/users/cevans/
[root@yongbok ~]# cd /usr/local/src
[root@yongbok ~]# wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.2.2.tar.gz
[root@yongbok ~]# tar xzvf vsftpd-2.2.2.tar.gz
vsftpd 소스 디렉토리에 있는 builddefs.h 헤더 파일의 코드 내용중 SSL 부분앞에 #undef 를 #define 으로 수정합니다.
[root@yongbok ~]# cd vsftpd-2.2.2변경 전
[root@yongbok ~]# vi builddefs.h
#ifndef VSF_BUILDDEFS_H변경 후
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */
vsftpd를 컴파일을 합니다.
[root@yongbok ~]# cd /usr/local/src/vsftpd-2.2.2
[root@yongbok ~]# make && make install
SSL을 지원하는지 다시 확인 해봅니다.
[root@yongbok ~]# ldd /usr/local/sbin/vsftpd
/usr/local/sbin/vsftpd:
libpam.so.4 => /usr/lib/libpam.so.4 (0x28095000)
libutil.so.7 => /lib/libutil.so.7 (0x2809c000)
libssl.so.5 => /usr/lib/libssl.so.5 (0x280aa000)
libcrypto.so.5 => /lib/libcrypto.so.5 (0x280eb000)
libc.so.7 => /lib/libc.so.7 (0x28244000)
이제 인증서를 만들기 위해서 OpenSSL 를 설치 해줘야 합니다.
데이터 압축을 지원하기 위한 zlib 를 설치 해줍니다.
- zlib 설치
[root@yongbok ~]# cd /usr/local/src
[root@yongbok ~]# wget http://www.zlib.net/zlib-1.2.3.tar.gz
[root@yongbok ~]# tar xzvf zlib-1.2.3.tar.gz
[root@yongbok ~]# cd zlib-1.2.3
[root@yongbok ~]# ./configure
[root@yongbok ~]# make && make install
- OpenSSL 설치
OpenSSL 은 아래 사이트에서 빨간색 부분에 LATEST 를 받아줍니다.
http://www.openssl.org/source/
[root@yongbok ~]# cd /usr/local/src
[root@yongbok ~]# wget http://www.openssl.org/source/openssl-0.9.8l.tar.gz
[root@yongbok ~]# tar xzvf openssl-0.9.8l.tar.gz
[root@yongbok ~]# cd openssl-0.9.8l
[root@yongbok ~]# LDFLAGS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include
[root@yongbok ~]# ./config --prefix=/usr/local --openssldir=/usr/local/openssl zlib
[root@yongbok ~]# make && make install
openssl 을 심볼릭 링크를 걸어 줍니다.
[root@yongbok ~]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
10 년 짜리 사설 인증서를 생성합니다.
[root@yongbok ~]# openssl \
req -x509 -nodes -days 3650 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem
Generating a 1024 bit RSA private key
................++++++
........................++++++
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:KR
State or Province Name (full name) [Some-State]:Seoul
Locality Name (eg, city) []:Gangseo-gu
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Yongbok
Organizational Unit Name (eg, section) []:CEO
Common Name (eg, YOUR name) []:yongbok.net
Email Address []:ruo91@yongbok.net
생성된 vsftpd.pem 인증서를 root 만 읽기/쓰기 가능 하도록 권한을 변경 해줍니다.
[root@yongbok ~]# chmod 600 vsftpd.pem
[root@yongbok ~]# ls -l vsftpd.pem
-rw------- 1 root wheel 2176 11 25 10:44 vsftpd.pem
vsftpd.pem 파일을 적당한 곳에 이동 시킵니다.
[root@yongbok ~]# mv vsftpd.pem /etc
vsftpd.conf 환경 설정 파일에 SSL 을 사용하도록 아래 처럼 추가 해줍니다.
[root@yongbok ~]# vi /etc/vsftpd.conf
listen_port=21
ftp_data_port=20
ssl_enable=YES
rsa_cert_file=/etc/vsftpd.pem
force_local_logins_ssl=YES
force_local_data_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
allow_anon_ssl=NO
이후 vsftpd 를 시작 합니다.
[root@yongbok ~]# /usr/local/sbin/vsftpd &
[root@yongbok ~]# ps -aux | grep vsftpd
ftp 88036 0.0 0.3 4880 2508 ?? I 11:10AM 0:00.02 /usr/local/sbin/vsftpd
FTP 클라이언트인 파일질라를 아래 사이트에서 받은 후 설치하고 아래처럼 셋팅 해줍니다.
(알 FTP 클라이언트는 SFTP 는 지원하는데 FTPS 를 지원 하지 못하기에..)
http://filezilla-project.org/

접속과 동시에 인증서 확인 메세지가 뜨는데 확인 하고 접속하면 됩니다.

Tag // FreeBSD,
FTP,
FTP Secure Socket Layer,
FTP SSL,
openssl,
OS,
Secure Socket Layer,
SSL,
vsftp SSL,
vsftpd,
vsftpd Secure Socket Layer,
vsftpd ssl 적용,
리눅스

