[CentOS 5.4] vsftpd 설치 및 셋팅, 포트변경

운영환경

  • 운영체제 : Linux
  • 배포판 : CentOS 5.4 Final
  • 커널버전 : 2.6.18-164.15.1.el5PAE

proftpd를 직접 빌드해서 FTP서버를 운영하려고 했지만, 무슨 이유인지 정상적으로 동작하지 않아서 CentOS 5.4 저장소에 있는 vsftpd로 전환을 했습니다. 나중에서야 알게된 사실이지만 proftpd의 문제가 아니라 현재 운영 중인 서버의 ftp포트가 6721로 변경되면서 막혀있는 20번 포트를 data port로 활용해야되는데 그렇게 안되서 생겼던 문제라고 합니다. 그래서 강제로 data port도 변경해줘야 했던 것이지요… 하여튼 설치 및 셋팅은 아래와 같습니다.

1. vsftpd 설치

저의 경우에는 학과에서 운영하는 서버라 유지관리가 용이하도록 왠만하면 직접 빌드를 하는 방식이 아닌 저장소를 활용하는 방법을 이용했습니다. 그래서 간단하게 아래의 명령어로 설치가 가능합니다.

yum install -y vsftpd

우분투의 aptitude처럼 yum을 이용해서 간단하게 의존성까지 해결해서 설치가 가능합니다.

2. vsftpd 설정

제가 설정한 것을 기준으로 설명하도록 하겠습니다. 자세한 설정방법은 참고문서 1번을 참고하시길 바라겠습니다. 아래에 나와있는 것은 코멘트(주석)를 삭제하거나 없으면 넣어주시면 됩니다.

요구사항

  • 20, 21 포트는 사용 불가
  • 대체 포트로 6721과 6720을 사용
  • 패시브 모드를 위한 포트를 50031~50040까지 할당
  • 관리자 사용자는 자신의 계정 상위로 이동이 가능하도록 설정

설정파일 1 (/etc/vsftpd/vsftpd.conf)

local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ftpd_banner=Welcome to FTP SERVER(환영메시지, 원하는 것으로 바꾸시면 됩니다.)
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
listen_port=6721
port_enable=YES
pasv_enable=YES
ftp_data_port=6720
pasv_min_port=50031
pasv_max_port=50040
session_support=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrapper=YES

설정파일 2 (/etc/vsftpd/chroot_list)

예)
simplism

이 파일에 관리자의 아이디를 넣어주시면 해당 아이디의 사용자는 자신의 홈계정 외부로도 이동이 가능합니다.(하지만 퍼미션에 따라서 업로드 및 접근이 안될 수 있습니다. 그룹 지정과 같은 방법을 통해서 퍼미션을 할당해줘야할 것 같습니다.)

설치 후에 포트를 변경하지 않는 문서들을 참고해서 설정을 하는 경우에 proftpd도 동일한 증상을 가지고 있었는데, 문제점은 ftp의 경우에는 포트를 2개를 활용한다는 점입니다. 한 포트는 연결을 위한 포트(default : 21)이고 한 포트는 전송을 위한 포트(default : 20)입니다.

저의 경우에는 그런 내용을 모르고 있다가 설정을 완료했는데 정상적으로 로그인까지는 되지만 실제로 계정 내부에 있는 파일들의 목록을 불러오지 못하는 일이 발생했습니다. 그래서 관련문서를 검색해봤는데 그 결과 2번 문서를 찾게되어 어렵지 않게 문제를 해결할 수 있었습니다.

그리고 패시브 모드의 경우에 패시브를 하지 않고 설정을 해보니 전송 시에 패시브 모드를 권장한다는 에러메시지를 뿜어대길레 설정한 것입니다.

이제는 실제로 외부에서 접근이 가능하도록 방화벽에서 해당 포트들을 개방을 시켜줄 차례입니다.

3. 방화벽 설정

대부분의 리눅스 배포판의 방화벽 파일(iptables)의 위치는 /etc/sysconfig/iptables 입니다. 물론 IPv4버전의 방화벽 파일입니다. 해당 파일을 열어서 아래의 내용들을 추가해준 뒤에 방화벽을 재시작하면 정상적으로 해당 포트들이 개방됩니다.

# vim /etc/sysconfig/iptables

추가할 내용

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 6720 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 6721 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50031 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50032 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50033 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50034 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50035 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50036 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50037 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50038 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50039 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50040 -j ACCEPT

방화벽 재시작

# /etc/init.d/iptables restart

4. 자동실행 설정

이제 standalone으로 vsftpd를 실행/정지/재시작 시키는 방법은 아래와 같습니다.

# /etc/init.d/vsftpd start
# /etc/init.d/vsftpd stop
# /etc/init.d/vsftpd restart

주로 이 세 가지를 많이 사용하고 다른 옵션으로는 condrestart, status가 있습니다.

# /etc/init.d/vsftpd
사용법: /etc/init.d/vsftpd {start|stop|restart|condrestart|status}

서버를 재부팅할 때마다 일일이 켜줄 수 없으므로 자동으로 켜지도록 설정을 할 차례입니다.

# chkconfig –add vsftpd
# chkconfig –list | grep vsftpd
vsftpd 0:해제 1:해제 2:해제 3:해제 4:해제 5:해제 6:해제

현재는 모든 런레벨에서 아예 안켜지도록 되어있으니 2345 런레벨에서 자동으로 켜지도록 아래처럼 설정합니다.

# chkconfig –level 2345 vsftpd on
# chkconfig –list | grep vsftpd
vsftpd 0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제

보통 웹서비스를 위해서 동작하는 레벨인 5레벨과 그 이하의 레벨인 234에서도 vsftpd는 동작하게 됩니다. 서버 재부팅이 필요하다면 그냥 재부팅만 시켜주면 vsftpd가 동작하게 되는 것이지요!

문서를 작성할 때 보다 다른 분들이 이해하기 좋도록 작성하려고 노력하는 편이지만 이번에는 작업 중간중간 문서화를 한 것이 아니라 작업 결과물만 가지고서 작업을 하게 되어서 설명이 많이 부족해서 조금 민망하기도 합니다. 그렇지만 저와 같은 문제점을 가지고 있는 분들이 있을 것 같아서 혹시 참고라도 하시도록 올립니다.

작업 중에 막히는 부분은 아래의 참고문서들을 참고하시면 될 것 같습니다.

5. 참고문서

  1. http://kltp.kldp.net/stories.php?story=03/10/09/5659809
  2. http://www.jopenbusiness.com/tc/oss/entry/vsftp-전송-port-변경-방법

One Comment

  1. guk says:

    tcp_wrappers=YES

Leave a Reply

Your email address will not be published. Required fields are marked *