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
이제 모든 작업이 끝났습니다! 안전하게 이용하시면 됩니다!
끝~
좋은 글 감사합니다.
혹시 블로그에 글 공유해도 괜찮을까요?
네! 그대로 다 복사하셔도 됩니다~
좋은 글 감사합니다. 블로그에 공유 해도 될까요?
겁나 감사합니다!!!!
몸둘바를 모르겠구먼유!
안녕하세요
데이터 분석 업무를 하고 있는 개발자입니다
이번에 기관의 실시간 데이터를 받을 서버를 구축하게 되었습니다ㅠㅠㅠ
요구사항이 FTP active서버이고 저는 크롤링을 통해 수집된 데이터 처리만 해왔기에 막막했는데
올리신 게시글들에서 많은 도움을 받았습니다
AWS EC2 Ubuntu 20.04 LTS build : https://blog.lael.be/post/10608
Ubuntu FTP Server : https://blog.lael.be/post/8404
알고 계신 좋은 지식을 공유해주셔서 감사합니다!
도움이 되어서 다행이네요. 오늘도 멋진 코드를 만들어주세요!