Ubuntu 에서 FTP 서버 설정하기

HYEONG HWAN, MUN/ 1월 28, 2019/ 미분류/ 0 comments

저는 리눅스에 기본 내장된 ssh 의 subsystem 인 sftp 사용을 권장합니다. (즉, 이 글을 읽을 필요없이 기본적으로 존재하는 sftp 사용을 권장합니다!)

굳이 FTP 사용을 원하시는 분들이 계셔서 설치방법을 설명해봅니다.

Ubuntu Linux 기준으로 작성되었지만, 다른 운영체제에서도 적절히 응용해서 적용할 수 있습니다.

 

vsftpd란?

vsftpd는 Very Secure FTP Server Daemon 를 뜻합니다. (vsftpd 소스코드의 README 파일에 이렇게 쓰여있음)
GPLv2 라이센스를 따르며, 전세계에서 가장 많이 쓰이는 ftp 서버 프로그램입니다.

vsftpd 공식사이드(https://security.appspot.com/vsftpd.html) 에 따르면 다음의 유명한 저장소가 vsftpd 를 사용중이라고 합니다.

  • ftp.redhat.com
  • ftp.suse.com
  • ftp.debian.org
  • ftp.freebsd.org
  • ftp.gnu.org
  • ftp.gnome.org
  • ftp.kde.org
  • ftp.kernel.org
  • rpmfind.net
  • ftp.linux.org.uk
  • ftp.gimp.org
  • ftp-stud.fht-esslingen.de
  • gd.tuwien.ac.at
  • ftp.sunet.se
  • ftp.ximian.com
  • ftp.engardelinux.org
  • ftp.sunsite.org.uk
  • ftp.isc.org

따라서 우리는, 라이센스 문제가 없으며, 매우 많은 사람이 사용 중인 검증된 vsftpd 소프트웨어를 사용하여 FTP 서버를 구축하도록 하겠습니다.

 

설치 방법

APT 파일목록 갱신
# apt update

 

vsftpd 설치 패키지가 존재하는지 검색
# apt search vsftpd

 

vsftpd 설치
# apt install vsftpd

vsftpd 프로그램이 설치되고, 서비스에 등록되고, 실행된다.

 

vsftpd 실행 상태보기
# service vsftpd status

 

네트워크 포트 보기
# netstat -natp | grep ftp

vsftpd 가 실행중이며 TCP 21 번 포트로 LISTEN 중이라는 것을 알 수 있습니다.

 

이 명령어도 한번쯤 실행해보세요. (현재 네트워크 연결 상태 보기)

# netstat -natp

 

이 명령어도 한번쯤 실행해보세요.  (이 서버에서 연결가능한 포트번호 보기)

# netstat -natp | grep LISTEN

 

vsftpd 환경설정
# vi /etc/vsftpd.conf

환경설정 파일의 옵션 및 설명은 다음 페이지에서 볼 수 있습니다.

http://vsftpd.beasts.org/vsftpd_conf.html (영어)

 

내용을 다 지우고 아래 내용으로 저장해주세요.


listen=YES
listen_ipv6=NO
anonymous_enable=NO
port_enable=NO
pasv_enable=YES
local_enable=YES
write_enable=YES
use_localtime=YES
xferlog_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
ftpd_banner=Welcome to My FTP Server!
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
listen_port=21
pasv_min_port=60020
pasv_max_port=60030
#utf8_filesystem=YES
#local_umask=022

 

몇가지 변수 설명

ssl_enable : 인증서가 올바르지 않지만 안전하게 보안 통신합니다. 만약 당신의 소프트웨어가 보안연결을 지원하지 않는다면 NO로 바꿔주세요.
ftpd_banner : 최초연결시 표시되는 환영메세지입니다. 하지만 대부분의 FTP클라이언트에서 무시하는 값입니다.
listen_port : FTP 접속 포트입니다. TCP 21 번을 사용합니다.
pasv_min_port, pasv_max_port : FTP PASV 통신모드에서 사용할 포트입니다. 이 예제에서는 TCP 60020 ~ 60030 포트를 사용하게 설정했습니다.
즉 방화벽에서 TCP 21, TCP 60020~60030 번을 허용 설정해주어야 합니다.

* 로그인 및 파일전송 로그는 /var/log/vsftpd.log 파일에 기록됩니다.

/etc/ftpusers 파일에 쓰여진 사용자는 FTP 로그인이 거부됩니다.

 

설정파일 적용을 위해 서비스 재시작
# service vsftpd restart

 

방화벽 설정

당신이 클라우드 방화벽을 사용할 수 있다면, 굳이 이곳에서 설정하지 말고, 클라우드 방화벽을 사용하세요.

리눅스 내부에서 방화벽 설정하기 : https://blog.lael.be/post/7982 이 글을 읽고 설정해주세요.

 

IPTABLES 방화벽에서 FTP 설정 관련 코드 예시

* 특정 IP 에 대해서 접속 허용

-A INPUT -s 123.234.123.234/32 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -s 123.234.123.234/32 -p tcp -m state --state NEW -m tcp --dport 60020:60030 -j ACCEPT

* IP 제한 없이 접속 허용

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 60020:60030 -j ACCEPT

 

이제 모든 작업이 끝났습니다! 안전하게 이용하시면 됩니다!

 

끝~

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*