본문 바로가기

Learning/ └Essential & Admin

FTP Server Guide

FTP Server Guide

 

인터넷의 TCP/IP 응용 프로토콜 

FTP - 인터넷상의 pc들 간에 파일을 교환하기 위한 표준 프로토콜

HTTP - 웹 페이지와 관련 파일들을 전송하는 프로토콜

SMTP - 전자우편 을 전송하는 프로토콜

 

 

FTP 프로그램의 종류

wu-ftpd : RedHat Linux에서 사용하던 기본 FTP

vsftpd   : 현재 많이 사용되고 있는 기본 FTP 프로그램

proftpd : 현재 많이 사용되고 있는 기본 FTP 프로그램

 

 

vsftpd 프로그램 특징

 

특징 설명

UNIX 시스템에서 사용할 수 있는 Free FTP daemon

리눅스, Solaris, HP, FreeBSD 등에 지원된다.

보안부분을 특히 강조한 서버 데몬

Redhat, SUSE, OPEN-BSD에서 기본 FTP 데몬으로 채택

가상 IP 설정(Virtual IP Configuration)

가상 유저 지원(Virtual Users)

Standalon 또는 inetd(xinetd) 지원

전송 대역폭 조절 기능(Bandwidth Throttling)

환경설정파일을 IP별로 독립적인 지원(Per-source-IP Configurability)

IP별 제한 기능(Per-source-IP Limits)

IPv6 지원

SSL을 사용한 암호화 지원(Encryption support through SSL integration)

 

 

vsFTP(very Secure FTP)

vsftpd is a GPL licensed FTP server for UNIX systems, including Linux. It is secure and extremely fast. It is stable. Don't take my word for it, though. Below, we will see evidence supporting all three assertions. We will also see a list of a few important sites which are happily using vsftpd. This demonstrates vsftpd is a mature and trusted solution.

 

 

안정적이고 빠르며 보안이 강화된 FTP로 RedHat, Suse, Open-BSD등에서 기본으로 채택하는 FTP서버

기본 프로그램인 vsFTP 는 Standalone 방식(xinetd 방식 서비스가 아님)

 

 프로그램

 vsftpd 

 데몬&포트&프로토콜

 /usr/sbin/vsftpd. 20/21, TCP

 주 설정 파일

 /etc/vsftpd/vsftpd.conf

 하위 설정 파일

 /etc/vsftpd/{user_list, ftpusers}

 스크립트

 /etc/init.d/vsftpd 

 

 

(1) vsftpd 프로그램 설치 및 설정 파일 확인

 

# rpm -qa|grep vsftpd

vsftpd-2.0.5-16.el5_4.1

 

# vi /etc/resolv.conf

# yum -y install vsftpd

 

패키지 정보 확인

# rpm -ql vsftpd

/etc/logrotate.d/vsftpd.log

/etc/pam.d/vsftpd

/etc/rc.d/init.d/vsftpd

/etc/vsftpd

/etc/vsftpd/ftpusers

/etc/vsftpd/user_list

/etc/vsftpd/vsftpd.conf

/etc/vsftpd/vsftpd_conf_migrate.sh

/usr/sbin/vsftpd

/var/ftp

/var/ftp/pub

....(중략)...

 

 

 

vsftpd 설치 폴더

# cd /etc/vsftpd

ftpusers    user_list    vsftpd.conf    vsftpd_conf_migrate.sh

 

vsftpd.conf : vsftpd 프로그램의 주 설정 파일

ftpusers    : vsftpd 서버에 접속할 수 없는 사용자 정의

user_list   : vsftpd 서버에 접속할 수 없는 사용자 정의

/var/ftp    : Anonumous FTP 사용자를 위한 디렉토리

 

[!] 기본적으로 root 사용자는 ftp 서버에 들어갈수 없다.

cat /etc/vsftpd/ftpusers 에 root 사용자가 자동으로 입력되어 있음

스니핑과 같은 위험에 취약하기 때문에 root 사용자의 FTP이용을 권장하지 않는다.

 

[!] FTP 환경 설정을 편리하게 사용하기 위한 bashrc_alias 목록

#
# FTP Server Alias
#
alias FTP='cd /etc/vsftpd'
alias vsftpd.conf='vi /etc/vsftpd/vsftpd.conf'
alias ftpusers='vi /etc/vsftpd/ftpusers'
alias user_list='vi /etc/vsftpd/user_list'
alias flog='tail -f /var/log/xferlog'

 

 

[1]vsftpd.conf 설정

# vi /etc/vsftpd/vsftpd.conf

 

13 anonymous_enable=YES    익명 사용자의 접속을 가능하게 설정

14 #anonymous_enable=NO

....

18 local_enable=YES        로컬 사용자의 접속을 가능하게 설정

19 #local_enable=NO

....

22 write_enable=YES        로컬 사용자의 쓰기 기능을 활성화

....

26 local_umask=022         로컬 사용자의 파일 생성시 적용될 umask값 설정

....

31 #anon_upload_enable=YES 익명 사용자의 파일 업로드를 가능하게 설정

....

38 #anon_mkdir_write_enable=YES  익명 사용자의 디렉토리 생성을 가능하게 설정

....

45 dirmessage_enabel=YES    특정 폴더에 접속시 .message 파일의 메세지를 보여줄 것인지 지정하는 설정

....

48 xferlog_enable=YES    업로드/다운로드 로그를 xferlog에 기록하겠다는 설정

...

51 connect_from_port_20=YES    ftp 데이터 전송시 20번 포트 사용을 설정

....

56 #chown_uploads=YES    익명 사용자가 업로드한 파일의 소유권을 변경할 때 설정

57 #chown_username=whoever    chown_uploads=YES일 경우 지정한 사용자 이름으로 익명 사용자가

....                          업로드한 파일의 소유자가 지정된다.

61 #xferlog_file=/var/log/vsftpd.log    업로드/다운로드 로그파일 지정

....

xferlog_std_format=YES     xferlog를 표준 로그포맷으로 기록

idle_session_timeout=600    ftp접속의 타임아웃 시간을 지정

date_connection_timeout=120    데이터 전송의 타임아웃 시간을 지정

nopriv_user=ftpsecure    vsftpd 데몬을 루트가 아닌 시스템에 존재하는 일반 사용자의 비특권권한으로 동작시킨다.

#async_abor_enable=YES  async_abor_enables 기능을 사용하겠다는 설정이다.

#ascii_upload_enable=YES  ASCII 모드로 업로드를 허락하겠다는 설정이다.

#ascii_download_enable=YES  ASCII 모드로 다운로드를 허락하겠다는 설정이다.

#ftpd_banner=Welcome to blah FTP service.  ftp 서버 접속시 안내메세지를 출력한다.

#deny_email_enable=YES  익명사용자 접속시 패스워드를 e-mail형식으로 받겠다는 설정이다.

#banned_email_file=/etc/vsftpd/banned_emails  허용하지 않을 e-mail 주소를 파일에 넣어두면 접

 속이 안된다. (banned_emails파일 생성시)

chroot_local_user=YES  전체 사용자가 chroot 기능을 사용하도록 설정한다.

#chroot_list_enable=YES  chroot_list에 등록된 사용자만 chroot 기능을 사용하도록 설정한다.

#chroot_list_file=/etc/vsftpd/chroot_list  chroot 기능을 사용할 사용자 리스트 파일을 지정한다.

#ls_recurse_enable=YES  ls -R(서브디렉토리 파일 목록 출력) 명령 사용여부를 설정한다.

listen=YES  단독 데몬일 경우 listen YES로 지정한다.

# listen=NO  xinetd 로 설정할 경우 NO로 지정한다.

#listen_ipv6=YES

....

128 pam_service_name=vsftpd  pam 사용자 인증 설정

129 userlist_enable=YES  userlist 사용을 허가하겠다는 설정이다.

130 # userlist_deny=NO  userlist 에 등록된 사용자만 허가하겠다는 설정이다.

131 tcp_wrappers=YES  tcp_wrappers 기능을 사용하겠다는 설정이다. (host, ip 차단)

 

설정 하는 방법

# ftp localhost

ftp: connect: Connection refused

ftp> quit<enter>

-> 프로그램이 설치는 되어 있지만, vsftpd 데몬이 동작하지 않는 상태

 

# service vsftpd restart

# chkconfig vsftpd on

 

[!]확인 하는 방법

pgrep -lf vsftpd

vsftpd -v

# ftp localhost

Connected to linuxXXX.example.com.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (localhost:root): root

530 Permission denied.

Login failed.

ftp> quit

221 Goodbye.

root사용자는 ftp 접속이 불가능하다. ( ftpusers에 등록 되어 있다 )

 

 

 

(결론) vsftpd 서비스가 실행되면

- (일반사용자)/etc/vsftpd/ftpusers, /etc/vsftpd/user_list 파일에 등록이 되어 있지 않기 때문에

FTP 로그인이 가능하다.

- (root 사용자)/etc/vsftpd/ftpusers, /etc/vsftpd/user_list 파일에 등록에 등록 되어 있기 때문에

FTP 로그인이 가능하지 않다. 이런 경우 두개의 파일에서 root 라인을 삭제하면 된다.

하지만, 이 설정은 실무에서는 권장하지 않는다. root 사용자로 로그인 하는 것은 보안상 좋지 않다.

 

[!] ftpusers 혹은 user_list 파일 둘중 하나라도 등록 되어 있는 사용자는 FTP 접속이 불가능

 

 

FTP 서버 사용은 텍스트 모드가 아닌 GUI모드로 사용 할 수 있다.

(GUI)# gftp &

(TUI)# ftp <IP> <PORT>

ftp localhost

ftp 171.16.6.209 22

 

gftp (GUI) 모드로 사용시

rpm -qa|grep gftp

yum -y install gftp 로 확인 혹은 설치하여 사용한다.

 

 

ftp 명령어 사용 방법

 

ftp 172.16.6.209

사용자 로그인

ㄱ) 업로드/다운로드 포인터 맞추기(cd/lcd)

ㄴ) 편리한 기능 설정 (bin/hash/prompt)

ㄷ) 업로드/다운로드 (mget/mput/get/put)

ㄹ) 확인/해제 (ls/dir/bye/quit)

 

ftp 172.16.6.252   ftp 접속할 ip주소 입력

user01 / user01    로그인할 계정 패스워드 입력

ftp> cd /tmp        접속한 서버 쪽 폴더 지정

ftp> lcd /root               내 쪽 폴더 지정

 

ftp> bin            전송모드 : binary, ascii

ftp> hash            파일전송 : Hash(#) 표시 / # = 4k 전송시마다 # 1개로 전송되는 방식 

ftp> prompt            대화형모드 ON/OFF 파일전송시마다 y/n 여부 확인

 

ftp> put linux209.txt    업로드

ftp> get linux209.txt    다운로드

 

ftp> mput linux*    와일드카르를 이용한 대량 전송

ftp> mget linux*    어나니머스 사용자는 mput/mget 사용불가

 

ftp> ls    (ls or dir)

ftp> !ls   ( >!CMD)

ftp> quit

 

[!] windows CMD창에서 리눅스 서버에 FTP로 접속하여 전송 하여 실습확인 할 수 있다.

(관리설정) 배너 메세지출력

 

vsftpd.conf 파일 설정을 통해 보다 보안적인 사용 권장

  • (관리설정) 배너 메세지 출력
  • (보안설정) Greeting Message 출력
  • (보안설정) chroot 구성
  • (보안설정) 익명사용자의 홈디렉토리
  • (보안설정) FTP 포트 변경
  • (관리설정) MAX client 제한
  • (보안설정) 한개 아이피에 대한 접속 제한
  • (보안설정) 접속 사용자 제한

(1)배너 메세지 출력 vsftpd.conf 파일에 banner_file 키워드를 추가

# vi /etc/vsftpd/vsftpd.conf

#

# Specific Configuration

#

banner_file=/etc/vsftpd/banner.txt <--추가

-> banner_file 키워드가 vsftpd.conf 파일에 기본적으로 선언된것이 아니기 때문에 새로 추가시켜 줘야 한다.

 

배너 파일 생성은 vi /etc/vsftpd/banner.txt 로 사용하고

한글에 대한 부분이 깨져서 나오는 부분이 있으면 UTF-8 언어를 변경하고 다시 수행

________________________

/                        \

|                        |               이 사이트를 해킹한다면 모종의 그룹에

| !! 공격하지마!!!    |                 의해 보복 공격이 가해질것 입니다.

|                        |                이 사이트에서 얻은 지식을 악의적인

\________________________/                목적으로 절대 사용하지 않을 것을

  \                                           약속하세요.

   \ _____

    {~._.~}

     ( Y )

    ()~.~()

    (_)-(_)

이런식으로 귀엽게 만들어 주어도 좋다.

 

 

설정후 적용필수 # service vsftpd restart && chkconfig vsftpd on

변경된 데몬을 재 시작하여 변경된 서비스 내용응 적용 시킨다.

 

# export LANG=ko_KR.UTF-8 && ftp localhost

 

 

(2) Greeting 메세지 출력

vi /etc/vsftpd/vsftpd.conf

/ftpd_banner 최하위행 모드에서 검색

# You may fully customise the login banner string:

ftpd_banner=Welcome to blah FTP service. 주석해제

 

[!] ftpd_banner 설정과 banner_file 설정이 둘다 되어 있을 경우

banner_file에 지정된 내용이 출력된다.

 

(3) FTP사용자 chroot 구성

FTP 사용자의 chroot 구성은 FTP 사용자가 서버에 로그인 한 경우에 자신의 홈디렉토리를

/(root) 디렉토리 인 것 처럼 인식이 되어 자신의 홈 디렉토리 아래에 있는 디렉토리만 이동

가능하게 된다.

 

사용자의 홈디레토리 보다 상위 디렉토리 접속을 제한하는 설정

-> 기본적으로 인증된 사용자라면 권한이 되는 범위안에서 다른 디렉토리로 이동이 가능하지만

디렉토리 이동이 가능하다면 디렉토리안의 내용을 살펴 볼수 있기 때문에 보안상 취약하다.

 

vi /etc/vsftpd/vsftpd.conf

 

chroot_local_user=YES

기본적으로 선언되어 있는 명령어가 아니기 때문에

새로 추가 시켜야 한다.

 

 

(4) FTP 서버 접근 사용자 제한

 

-/etc/vsftpd/ftpusers

-/etc/vsftpd/user_list

 

userlist_deny=YES 두개의 파일 중 한개의 파일에라도 사용자가 정의되어 있으면 FTP로그인 할 수 없다.

userlist_deny=NO user_list 파일에 존재하는 사용자만 FTP 로그인 할 수 있다.

 

vsftpd.conf 문서 마지막 라인에 추가하면된다.

userlist_deny=NO

 

 

 

실무 에서 FTP 사용자 제한을 소수만 ftp 서비스를 이용할수 있게 설정한다.

# vi /etc/vsftpd/vsftpd.conf

userlist_enable=YES

userlist_deny=NO

 

# cat /etc/vsftpd/user_list

root

wasuser

oracle

 

 

(5) 익명사용자(anonymous) ftp 구성

vsftp 프로그램이 설치 되어 있으면 기본적으로 익명사용자가 ftp안에 구성되어 있다.

익명 사용자는 다운로드는 가능하지만 업로드는 할 수 없다.

(고의적으로 파일을 다운로드 하여 파일을 수정하고 재 업로드 할시 바이러스 위험)

 

ftp서버에서 익명 사용자가 파일을 업로드 할 수 있도록 설정하기 위해서 vsftpd.conf 파일에

설정 할 수 있다.

anon_upload_enamle=YES

anon_mkdir_write_enable=YES

 

하지만 익명 사용자의 파일 업로드는 보안상 권장하지 않는 설정이다.

 

/var/ftp 에 pub이라는 공용폴더를 생성하여

chroot 구성이 되어져 있는 익명사용자의 최상위 디렉토리를 /var/ftp/ 로 설정하여 사용할 수 있다.

 

익명 사용자 FTP 서버에 파일 업로드 기능 설정

/var/pub/incoming 퍼미션 설정

anon_upload_enable=YES

chown_uploads=YES

chown_username=ftpupload

 

cd /var/ftp/pub

mkdir incoming

chmod 603 incoming (-rw-----wx root root)

 

useradd -d /var/ftp/pub/incoming -r -s /sbin/nologin ftpupload

-d 디렉토리를 홈폴더로 지정한뒤 -s 쉘 -r 시스템어카운트(UID 번호를 100번대 이하로 낮춰서 생성)

 

[!] /var/ftp/pub 에 디렉토리 들의 퍼미션을 751로 변경하면

ftp CMD를 통해서만 접속 하도록 하고 mget 이 아닌 get을 통해서

다운 받으려는 파일의 이름이 정확한 경우만 다운로드 가능하게 설정 할 수 있다.

 

(6) FTP 포트 변경

vsftp 서버에서 사용하는 FTP 서버용 포트는 기본값으로 21로 지정되어 있다.

listen port 키워드를 사용하여  FTP 서버용 포트를 다른 포트로 지정할 수 있다.

 

ex) listen_port=2121  <-- vsftpd.conf 마지막 라인에 추가

 

ftp localhost = ftp localhost 21 이기 때문에

포트번호를 변경하면 포트번호를 알지 못하면 사용 할 수 없다.

ftp localhost 2121 로 들어와야 하기 때문이다.

 

(7) vsFTP 서버에 접속할 수 있느 사용자 수 제한

vsFTP 서버에서 FTP 서버에 접속할 수 있는 사용자 수는 기본값으로 unlimit 이다.

max_clients를 사용하여 최대로 접속할 수 있는 클라이언트의 개수를 제한 할 수 있다.

ex) max_clients=3

서버의 부하량 을 방지하고 최대로 수용할 수 있는 클라이언트의 개수를 지정해야

안정적인 서버 운영을 할 수 있다.

 

 

(8) 한개의 아이피에 대한 전송 제한

vi vsftpd.conf

max_per_ip=3 추가

 

보통 max_per_ip 값은 2/3/4 값 정도 쓸 것을 권장한다.

 

실무에서는 max_client 개수의 제한이 필요하며, 개수의 제한은 서버의 H/W 사양에 비례한다.

cat /etc/vsftd/vsftpd.conf

....

max_clients=100

max_per_ip=3

 

 

 

 

 

 

 

 

 

마지막으로 FTP 의 보안을 잘 지킬수 있기 위해서

 

호스트제한 사용자제한 포트관리 등을 잘 살펴보아야 한다.

 

위와 같은 것들에 관해 항상 관심을 가지고 모니터링을 해야 한다. 서비스에 접근할 수 있는 호스와 접근할 수 없는

 

호스트 설정, 서비스를 받을 수 있응 사용자와 받을 수 없는 사용자의 구별, 버그 패치를 위한 프로그램 업데이트와 보

 

안 패치 적용, FTP 서비스 포트 변경 및 쓰지 않는 포트 차단 등 보안에 관련한 사항이 FTP 서버관리자의 중요한 역할

 

중 한가지이다.

 

 

 

 

 

 

 

FTP 서버에서 호스트에 관한 제한을 두는 설정 : Firewall(EX: iptables), tcp_wrapper

FTP 서버에서 사용자에 관한 제한을 두는 설정 : /etc/vsftpd/ftpusers, /etc/vsftpd/user_list

 

FTP 서버에서 호스트에 관한 제한을 두는 설정

 

CentOS 5.4 버전에서 Firewall 기능을 하는 iptable 설정을 통해 들어 서버 방화벽이나 네트워크 방화벽을 구축할 수 있다. tcp_wrapper/etc/hosts.allow, /etc/hosts.deny 파일을 가지고 간단한 제어를 할 수 있다.

 

FTP 서버에서 사용자에 제한을 두는 설정

 

/etc/vsftpd/ftpusers, /etc/vsftpd/user_list 파일에 서비스를 받지 못할 사용자를 등록 한다.

 

 

 

 

(2) FTP 호스트 제한

 

외부에서 접근하는 많은 FTP 클라이언트를 제어 하는 것은 성능상, 보안상 서버 관리자에 역할 중 한가지이다. 특정 지역의 IP 대역에 존재하는 그룹은 서비스를 막고 또는 특정 지역의 IP 대역에 존재하는 그룹은 서비스로 열어 주는 설정은 일반적으로 tcp_wrapper을 통해 제어한다.

 

이 문서는 Firewall(iptables)에 대해 설명하고 있지 않다.

 

 

 

(2-1) tcp_wrapper을 통한 FTP 서버 제한

 

 

 

tcp_wrapper (/usr/share/doc/tcp_wrappers-7.6)

tcp_wrapperfinger, ftp, telnet, rlogin, rsh, exec, tftp, talk, comsat등의 네트워크 서비스를 필터링 할 수 있는 프로그램이다.

/usr/sbin/tcpd 데몬에 의해서 TCP 서비스를 제어 하는 역할을 가지고 있다.

TCP 제어를 위해서는 /etc/hosts.allow, /etc/hosts.deny 파일을 가지고 설정한다. (Rule 적용 순서)- /etc/hosts.allow 파일에 정의된것은 허용이 되고, - 만약 정의 되지 않은 내용이 있다면, /etc/hosts.deny 파일에 정의된것은 거부가 되고, - 만약 정의 되지 않은 내용이 있다면, 허용된다.------> tcpd ---+----> /etc/hosts.allow(Allow) | +----------------------------> /etc/hosts.deny(Deny) | +--------------------------------------------------> (Allow)

tcp_wrapperFirewall(iptable)과 비교하였을때 성능을 떨어트리지 않는 장점을 가지고 있다. 빠르게 tcp 방식의 서비스를 제어할 수 있는 장점을 가지고 있다.

(권장) 이 파일에 설정할 때 시스템이름이나 도메인 이름을 사용하지 말고 IP주소를 사용할 것을 권장합니다.

(권장) 또한, /etc/hosts.deny 파일에는 deny ALL로 설정한 후 접속을 허용할 주소만 /etc/hosts.allow 파일에 기록할것을 권장한다.

(주의) 2개의 설정파일(EX: hosts.allow, hosts.deny)에 정의를 할 때 저장하는 즉시 유효하므로 작성시에 주의하여야 합니다. (서비스를 restart 하는 방법이 아니므로 주의해야 한다.)

2개의 설정 파일에 정의하는 방식은 다음과 같습니다.# cat /etc/hosts.allow (# cat /etc/hosts.deny)<데몬이름>: <Source IP주소 or 네트워크 or 이름>::[옵션]

 

 

 

다음은 tcp_wrapper을 통한 FTP 서버를 제한하는 예이다.

 

# cat /etc/vsftpd/vsftpd.conf | grep tcp_wrappers

tcp_wrappers=YES

 

 

-> vsftpd 프로그램은 기본적으로 tcp_wrappers의 기능을 사용하고 있기 때문에 /etc/vsftpd/vsftpd.conf 파일을

살펴 보면 tcp_wrappersYES로 설정되어 있다.

 

# vi /etc/hosts.allow allow에 정의된 ip만 허용

#

# hosts.allow This file describes the names of the hosts which are

# allowed to use the local INET services, as decided

# by the '/usr/sbin/tcpd' server.

#

vsftpd: LOCAL, 172.16.6.1XX

 

 

 

-> vsftpd: vsftpd 데몬에 대해서

-> LOCAL 자신의 IP

-> 192.168.0.240 허용할 IP

 

# vi /etc/hosts.deny deny에 정의된 ip 차단

#

# hosts.deny This file describes the names of the hosts which are

# *not* allowed to use the local INET services, as decided

# by the '/usr/sbin/tcpd' server.

#

# The portmap line is redundant, but it is left to remind you that

# the new secure portmap uses hosts.deny and hosts.allow. In particular

# you should know that NFS uses portmap!

vsftpd: ALL

 

 

 

-> vsftpd: vsftpd 데몬에 대해서

-> ALL 모든 지역의 IP 차단

 

(172.16.6.252) # ftp 172.16.6.2XX

(172.16.6.1XX) # ftp 172.16.6.2XX

 

 

 

 

(tcp_wrappers을 사용하는 다른예) /etc/hosts.allow 파일에 정의한 예라고 생각한다.

ALL: localhost, .yahoo.com

localhostyahoo.com 도메인 이름을 가진 모든 호스트에게 서비스를 허용한다.

 

vsftpd: 192.168.0.2, 192.168.0.3, 192.168.1., 172.16.

192.168.0.2, 192.168.0.3, 192.168.1.0, 172.16.0.0 호스트/네트워크에 대한 서비스를 허용한다.

 

ALL: .daum.net EXCEPT killer.daum.net

daum.net 도메인 중 killer.daum.net 호스트를 제외한 모든 호스트에 대한 서비스를 허용한다.

 

ALL EXCEPT in.ftpd: .paran.com EXCEPT cafe.paran.com

inftpd 데몬을 제외한 모든 서비스들에 대해 cafe.paran.com 호스트를 제외한 모든 paran.com 호스트를 허용한다.

 

ALL: ALL: DENY

모든 서비스(데몬)에 대해 모든 호스트들의 서비스는 거부된다.

 

ALL: 192.168.0.0/24, 192.168.1.0/255.255.255.0

모든 서비스를 192.168.0.0/24, 192.168.1.0/24 네트워크들에 대해서 서비스를 허용한다.

 

 

 

 

(복원) /etc/hosts.allow, /etc/hosts.deny 파일 복원

# vi /etc/hosts.allow

-> 주석처리

# vi /etc/hosts.deny

-> 주석처리

 

(2-2) 클라이언트의 접속 수 제한

 

max_clients 접속할 수 있는 클라이언트의 개수 지정

max_per_ip 한개의 IP에 대해서 몇번의 커넥션을 이룰수 있는 것인지를 지정

 

(참고) vsftpd 데몬은 아쉽게도 클라이언트가 접속시 IDLE TIME 제어 할 수 있는 설정이 없다.

 

 

# vi /etc/vsftpd/vsftpd.conf

..... (중략) .....

max_clients=200

max_per_ip=2

 

 

[참고] max_clients 개수의 산정

max_clients의 개수는 서버의 자원(CPU, MEM, DISK, Network)에 따라서 결정할 수 있다.

 

max_client = ?

 

[TERM1] 테스트용 윈도우1

# pgrep -lf vsftpd

8868 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 

# ftp localhost

user01 사용자로 로그인

 

[TERM2] 테스트용 윈도우2

# pgrep -lf vsftpd

8868 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

10262 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

10265 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 

# pmap 8868

..... (중략) .....

00002b0480fab000 2048K ----- /lib64/libsepol.so.1

00002b04811ab000 4K rw--- /lib64/libsepol.so.1

00002b04811ac000 48K rw--- [ anon ]

00002b0499578000 132K rw--- [ anon ]

00007fff1d94a000 84K rw--- [ stack ]

00007fff1d9fd000 12K r-x-- [ anon ]

ffffffffff600000 8192K ----- [ anon ]

total 52488K

-> 8868(vsftpd) 데몬 하나가 약 5M 정도의 메모리 공간을 사용한다.

-> 한명의 FTP 사용자가 접속할 때 마다 vsftpd 데몬이 2(한개당 5M 정도씩) 뜨게 되는 것이다.

 

# pmap `pgrep vsftpd` | grep total

total 52488K

total 54580K

total 54604K

 

# top (# top -n 1 | grep Mem:)

Tasks: 157 total, 1 running, 155 sleeping, 0 stopped, 1 zombie

Cpu(s): 1.6%us, 0.7%sy, 0.0%ni, 97.4%id, 0.0%wa, 0.2%hi, 0.1%si, 0.0%st

Mem: 1035032k total, 519328k used, 515704k free, 32448k buffers

Swap: 1052248k total, 0k used, 1052248k free, 365828k cached

..... (중략) .....

-> 전체 메모리 : 1035032KB

-> 사용중인 메모리 : 519328KB

-> 남은 메모리 공간: 515704KB

 

1035032KB * (80/100) * {(남은메모리) * (80/100)}

 

 

 

 

(3) FTP 사용자 제한

 

FTP 서버에 접속하는 사용자를 제한하기 위해서는 /etc/vsftpd/user_list, /etc/vsftpd/ftpusers 파일을 사용할 수 있다.

 

특정한 사용자만 FTP 서버에 접속할수 있도록 하기 위해서는 다음과 같은 2가지 방법이 있다.

 

(첫번째 방법) 기본설정을 사용하는 경우 (좋은방법이아님)

# cat /etc/vsftpd/vsftpd.conf

..... (중략) .....

userlist_deny=YES

..... (중략) .....

 

 

 

-> userlist_deny의 기본값은 YES 입니다.(정의하지 않으면 YES 입니다.)

 

# awk -F: '{print $1}' /etc/passwd > /etc/vsftpd/ftpusers (ftpusers or user_list)

# cat /etc/vsftpd/ftpusers

..... (중략) .....

user01

user02

#ftpuser # FTP Upload User

 

 

(두번째 방법) userlist_deny=NO 설정을 사용하는 경우 (강추)

# cat /etc/vsftpd/vsftpd.conf

..... (중략) .....

userlist_deny=NO

..... (중략) .....

 

# cat /etc/vsftpd/user_list

ftpuser

 

 

특정한 ip에서 특정한 사용자만 사용 가능하게 설정

 

단점: 오픈소스를 다운로드하여 트래킹 후 재 업로드 하는 취약점

 

 

 

 

'Learning >  └Essential & Admin' 카테고리의 다른 글

Mail Server Guide  (0) 2016.11.15
Apache WebServer Guide(수정중)  (0) 2016.11.13
DNS Server Guide(수정중)  (0) 2016.11.10
Network Configuration Administration(수정중)  (0) 2016.11.10