Ubuntu 에서 FTP 서버 설정하기
저는 리눅스에 기본 내장된 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
이제 모든 작업이 끝났습니다! 안전하게 이용하시면 됩니다!
끝~
좋은 글 감사합니다.
혹시 블로그에 글 공유해도 괜찮을까요?
네! 그대로 다 복사하셔도 됩니다~
좋은 글 감사합니다. 블로그에 공유 해도 될까요?