vsftpd

vsftp 설치 및 설정내역

 

1. vsftpd FTP 서버에 대해

vsftpd는 UNIX 시스템에서 사용할 수 있는 free FTP 서버(라이센스는 GPL)이다.
vsftpd가 내세우고 있는 것은 보안, 성능, 안정성이다. 지금까지 vsftpd의 자체 보안 문제가 있어
보안권고가 나온 적은 없다.(Redhat의 rpm 패키지중에 tcp_wrappers 지원없이 만들어져서 업데이트
rpm은 나온 적 있음)

* 지원 및 테스트된 OS

- Linux (Redhat, SuSE, Debian)
- Solaris (버전에 따라 IPv6나 inet_aton함수때문에 설치가 잘 안될 수 있음)
- FreeBSD, OpenBSD
- HP-UX
- IRIX

* 주요 기능

- 가상 IP별 별도의 환경 설정 기능 (설정파일의 listen_address= 이용)
- 가상 사용자 설정
- 전송 대역폭 지정
- PAM 지원 (버전 1.2.0부터는 PAM을 통한 wtmp에 로긴 로그를 남김)
- xferlog 표준 로그 파일보다 상세한 자체 로그 파일 형식 지원
- Standalone 방식과 inetd(xinetd)를 통한 운영 모두 지원
- IP별 다른 환경 파일 지정 기능 (tcp_wrappers와 함께 사용할 때)
- ...

 

 

 

 

2. vsftpd 설치

※ 설치는 Redhat 기준. 솔라리스의 PAM에 대한 것은 README.solaris 파일 참조한다.

http://vsftpd.beasts.org/ 에서 최신버전(현재 1.2.0)의 소스를 받아온다.

-------------------------------------------------------------
# tar xvfz vsftpd-1.2.0.tar.gz
# cd vsftpd-1.2.0
-------------------------------------------------------------

한글로 된 파일명을 전송할 때 로그에 파일명이 ???? 로 남지 않도록
logging.c 파일을 연 후 140번째 줄의

str_replace_unprintable(p_str, '?');

를 다음처럼 주석 처리한다.

/* str_replace_unprintable(p_str, '?'); */

또한 tcp_wrappers를 통한 접속제어를 사용하려면 builddefs.h 에서

#undef VSF_BUILD_TCPWRAPPERS 를
#define VSF_BUILD_TCPWRAPPERS 로 바꾼다.

-------------------------------------------------------------
# make
# make install (vsftpd 데몬, man page, xinetd 용 설정 파일 설치)
# cp vsftpd.conf /etc (환경설정 파일 복사)
# chmod 600 /etc/vsftpd.conf
# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd (PAM 설정 파일 복사)
-------------------------------------------------------------

/etc/pam.d/vsftpd 첫번째 줄에 다음과 같이 있다.

pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

즉, /etc/ftpusers 파일에 존재하는 ID는 접속할 수 없게된다.(sense=deny)

-------------------------------------------------------------
# FTP 접속을 허용하지 않을 ID를 등록한다.
# /etc/passwd를 참조해서 설치할 서버의 환경에 맞게 등록
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
smmsp
xfs
gdm
mysql

 

 

 

 

 

3. 설정내역

# anonymous 사용자의 접속 허용 여부, 즉 anonymous ftp (default = YES)
# 공개된 형태의 FTP 서버로 운영할 것이 아니라면 NO로 한다.
anonymous_enable=NO

# 로컬 계정 사용자의 접속 허용 여부
local_enable=YES

# write 명령어 허용 여부
write_enable=YES

# 로컬 계정 사용자용 umask
local_umask=022

# anonymous 사용자가 파일을 업로드 할 수 있는지 여부
# anon_upload_enable=NO
#
# anonymous 사용자의 디렉토리 생성 허용 여부
# anon_mkdir_write_enable=NO
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES

# xferlog 표준 포맷으로 로그를 남길지 여부
# 아래에서 NO로 설정했을 때를 설명함
xferlog_std_format=NO
# 파일 전송 로그 파일명
#xferlog_file=/var/log/vsftpd.log
#
# 파일 전송 로그를 남길 것인지 여부
xferlog_enable=NO

# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#

#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that turning on ascii_download_enable enables malicious remote parties
# to consume your I/O resources, by issuing the command "SIZE /big/file" in
# ASCII mode.
# These ASCII options are split into upload and download because you may wish
# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
# on the client anyway..
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# FTP 서버 접속할 때 로긴 메시지 (default = vsFTPd 버전번호)
# 한글 사용 가능
# ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails

#
# 사용자의 홈디렉토리를 벗어나지 못하도록 제한하기 위한 설정
# 제한이 필요할 경우 YES로 바꾼 후 제한할 사용자 ID를 chroot_list_file= 에 설정한 파일에
# 지정한다.
# chroot_local_user= 설정과 관련이 있으니 '3. 문제 해결'을 꼭 읽어보라.
#
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES

# PAM 파일명을 지정 (설치할 때 /etc/pam.d/vsftpd명으로 복사함)
pam_service_name=vsftpd

userlist_enable=YES
#enable for standalone mode
listen=YES
tcp_wrappers=YES

 

 

 

 

4. 문제 해결

1) ftpwho 같은 명령은 있나?
  또한 last를 해도 접속된 걸 확인할 수가 없는데 방법이 없나?

 ftpwho 형태의 명령은 없으며 임시적으로 다음 명령어 등으로 확인할 수 있다.

 # ps -ef|grep vsftpd
 # fuser -v ftp/tcp

 vsftpd v1.2.0이상부터 PAM을 통해 wtmp에 로그를 남기므로 last로 접속여부를 확인할 수 있다.

2) 한글 파일명이 전송될 때는 vsftpd.log 에 ???? 로 남는다. 해결책은?

 vsftpd는 출력할 수 없다고 판단하는
 ASCII 코드 31 이하, 128~159, 177 문자를 모두 ? 로 바꿔서 저장을 한다.
 따라서 이 부분을 처리하지 않고 저장하도록 소스를 수정한 후 컴파일하면 해결된다.

3) 사용자가 홈디렉토리를 못 벗어나게 하고 싶는데?

/etc/vsftpd.conf에 다음을 추가하면, 모든 사용자는 자신의 홈디렉토리만 접근할 수 있다.

chroot_local_user=YES

또한 특정 사용자로만 제한을 하고 싶다면 다음과 같이 한다. /etc/vsftpd.chroot_list에는 제한할
사용자 ID를 한줄에 하나씩 나열하면 된다.

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

주의할 것은 chroot_local_user=YES와 chroot_list_enable=YES를 함께 사용할 경우에는
/etc/vsftpd.chroot_list에 포함된 사용자 ID만 제한없이 홈디렉토리를 벗어날 수 있다.
즉, 반대로 작용한다.

standalone으로 FTP서버가 동작중이면 재실행 필요. standalone에 대해서는 6)번에서.

4) root로 접속할 수는 없나?

 가능하면 root 접속은 허용하지 않기를 바란다.
 /etc/ftpusers 파일에서 root를 빼면 접속이 가능하다.

5) ID/비밀번호가 정확히 맞는데 로긴할 때 자꾸 530 Login incorrect. 라고 나온다.

 /etc/ftpusers (또는 vsftpd.ftpusers)에 등록된 사용자인지 확인한다.
 여기에 등록된 사용자는 로긴할 수 없다. 이럴 때 /var/log/messages에 다음과 같은 로그가 남는다.

 Aug 16 22:21:52 truefeel vsftpd: PAM-listfile: Refused user xxxxxxxx for service vsftpd

6) standalone으로 운영하고 싶다.
  (즉, apache나 sendmail처럼 xinetd 통하지 않고 운영을 원한다.)

 /etc/xinetd.d/vsftpd (vsftpd가 아닌 다른 파일명일 수 있음) 에서 disable = yes 로 변경하여
 xinetd로 서비스 하지 않도록 설정한다. xinetd 를 재실행하면 이제 xinetd를 통한 ftp 서비스는 종료된다.

 레드햇의 경우 /etc/rc.d/init.d/xinetd restart

 이제 vsftpd 데몬를 실행한다. (소스로 설치시 기본 경로는 /usr/local/sbin)

 # /usr/local/sbin/vsftpd &

7) 다른 포트(기본 21번)를 사용하고 싶다. (예를 들어 11121번 포트를 원할 때)

 * xinetd를 이용하는 경우

  /etc/service 에 'ftp2  11121/tcp' 한 줄을 추가한다.
  그리고 /etc/xinetd.d/vsftpd (vsftpd가 아닌 ftp와 같은 다른 파일명일 수 있음) 에서
  service ftp 를 service ftp2로 바꾸고, xinetd 를 재실행한다.

 * standalone으로 운영하는 경우

  /etc/vsftpd.conf 에서 listen_port=11121 을 추가하고 vsftpd 서버를 재실행한다.

 바뀐 포트로 운영중인지 확인은 netstat -atnp(리눅스) 또는 netstat -an(그 이외 유닉스)

8) 업로드 파일 크기를 제한하는 방법은 없나요? 이를테면 5MB이상의 파일은 업로드 못한다든지.

현재 1.2.1버전까지 vsftpd 자체에 설정하는 방법은 없습니다.

5. 참고할만한 문서

* vsftpd 1.2.0 설치 문서
 ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.2.0/INSTALL
* vsftpd.conf man page
* vsftpd에서 한글파일로그와 lastlog 로긴확인하기 (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=4
* vsftpd에서 전송속도 제한 (bandwidth limit) (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=21

 

 

 

 

 

vsftpd의 다양한 기능 설정(vsftpd.conf)
  vsftpd는 다양한 기능이 있습니다. 꼭 필요한 몇개의 지시자에 대해 알아보도록 하겠습니다.

  1) 아스키모드로 파일전송 하려면?
vsftp는 기본적으로 아스키모드(ASCII)로의 파일 전송을 허용하지 않습니다. 윈도우와 리눅스등의 엔터문자로 인한 text파일 변조(??)등 때문에 기본 허용하지 않습니다. 만약 필요해서 허용 하려면 다음과 같이 설정하시기 바랍니다.

ascii_download_enable=YES
ascii_upload_enable=YES


  2) 쉘권한이 없는 사용자들이 ftp를 사용가능하게 하려면?
대부분의 ftp서버는 로그인시 쉘을 요구하게 됩니다. 하지만 쉘 권한을 주지 않은 사용자들에게 ftp접근 권한을 주려면 /etc/pam.d/vsftpd파일에서 4번째 줄에 #을 입력하여 주석 처리 합니다.
(check_shell=NO 라는 지시자가 있었지만 PAM인증을 받는 곳에서는 작동하지 않았다.)


#%PAM-1.0
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
auth       required     pam_stack.so service=system-auth
#auth       required     pam_shells.so
account    required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth


  3) 사용자 home 디렉토리를 벗어나지 못하게 하려면?
ftp사용자가 자기 home디렉토리를 벗어나지 못하게 하려면 다음과 같이 설정합니다.

chroot_list_enable=YES
chroot_local_user=YES
위와같이 설정합니다. 접속하면 /etc/vsftpd.chroot_list 파일이 없다고 에러가 나게 됩니다.
단순히 touch /etc/vsftpd.chroot_list 이렇게 파일을 만들어 주면 됩니다.
 그리고 특정유저는 제외하려면 /etc/vsftpd.chroot_list 파일에 사용자 계정을 넣어줍니다.



  4) "."으로 시작하는 숨김파일을 기본적으로 보이게 하려면?
리눅스에서 "."으로 시작하는 파일은 숨김 파일입니다. 하지만, 다른 os에서는 "."으로 시작해도 숨김파일으로 취급하지 않는 경우가 있습니다. 이런경우 항상 "."으로 시작하는 파일을 보여주려면 다음과 같이 설정합니다.
force_dot_files=YES



  5) ftp 접속시 파일과 디렉토리의 소유권을 숨기려면?
특수한 목적으로 파일 및 디렉토리의 소유자를 숨길 경우가 있습니다. 이런 경우 다음과 같이 설정하면, ftp라는 사용자로 보이며, 본 ID는 보이지 않습니다.
hide_ids=YES



  6) 하위디렉토리의 파일 및 디렉토리를 볼수 있는 ls -R 명령 허용하려면?
하위디렉토리 리스트를 보여주기 위해서 ls -R 명령어를 내릴때가 있습니다. 이런경우 대부분의 ftp 서버는 부하등의 이유로 막아 두게 됩니다. vsftpd또한 기본적으로 막아 놓은 상태이며, 허용하기 위해서는 다음 지시자를 입력하세요.
ls_recurse_enable=YES



  7) openssh에 chroot 패치가 된 것을 사용하는데 정책을 같이 적용하려면?
openssh에 패치를 가하면, ssh 또한 자기 home 디렉토리를 벗어나지 못하게 설정가능합니다. 이 정책은 /etc/passwd파일의 홈디렉토리 부분에 /home/사용자/./ 와 같이 "/./"을 붙여 사용자를 홈디렉토리로 제한하게 됩니다. 이 정책에 따라 적용하려면, 다음 옵션을 적용하시기 바랍니다.
passwd_chroot_enable=YES


  8) 파일을 올렸는데 시간이 이상하게 보인다면?

대부분의 ftp서버에서 시간 표현은 표준시각(GMT)을 보여주게 됩니다. 국내에서만 사용하는 ftp서버는 다음 옵션으로 국내 시간으로 보여줄 수 있습니다.
use_localtime=YES


  9) 전송속도를 제한하고 싶다면?
다운로드 받는 한 사용자가 네트웍 트래픽을 모두 사용해 버리는 것을 방지하기 위해서 대역폭을 조정해야 하는 경우가 있습니다. 다음 옵션으로 가능합니다. 뒤에 나오는 숫자의 단위는  (Bytes/Sec) 입니다.
local_max_rate=300000

위 설정은 300KByte/Sec의 대역폭을 제공합니다.


  10) 동시 접속자수를 제한하려면?
ftp서버에 접속할 수 있는 최대 접속수를 제한하려면, 아래의 설정으로 제한 가능합니다.
max_clients=10
위 설정은 동시에 10개의 연결으로 제한합니다.


  11) 한 IP당 접속할 수 있는 동시접속 수 제한하려면?
ftp서버의 한 사용자가 대역폭을 모두 사용해 버리는 것을 방지하기 위해, 전송 속도를 제한하면, flashget 등의 유틸리티로 몇개의 접속으로 나눠 받으면 대역폭 제한을 우회 할 수 있습니다. 이런경우 한 IP에서 접속 가능한 동시접속 수를 제한하므로 해결 가능합니다.
max_per_ip=2
위 설정은 한 IP에서 접속할 수 있는 연결을 2개로 제한합니다.


  12) PASSIVE 모드 사용시 사용하는 포트 범위를 제한하려면?
FTP에서 데이터 전송을 위해서 20번 포트를 사용합니다. 이경우 서버에서 클라이언트 쪽으로 연결을 하기 때문에 중간에 방화벽 또는 공유기등을 사용한다면, 정상작동하지 않을 수 있습니다. 이런 문제를 해결하기위해서 PASSIVE모드라는 것이 있고, 이 모드에서는 서버의 1024이후 포트를 사용합니다. 이 포트의 범위를 제한하기 위해서는 다음과 같이 설정합니다.
pasv_min_port=40000
pasv_max_port=50000
위 설정은 PASSIVE에서 사용할 포트를 40000~50000로 합니다.



  13) mp3, wmv 등의 확장자를 가진 파일의 업로드를 금지하려면?
ftp를 통해 인증된 사용자가 파일을 올리는 것을 막는 방법은 거의 없었습니다. 이 vsftpd는 특이하게 특정파일 패턴을 제한하는 기능이 있습니다.
deny_file={*.mp3,*.wmv}
위 설정은 mp3, wmv 파일을 전송하지 못하게 하는 방법입니다.



  14) 특정파일 패턴을 숨기려면?
특정파일이 서버내에는 존재하지만, ftp접속시 보여지지 않게 설정할 수 있습니다. 다음예를 보시기 바랍니다.
hide_file={*.mp3,.hidden,hide*,h?}
위 설정은 mp3파일, .hidden 파일, hide로 시작하는 파일을 보여지지 않게 하는 옵션입니다.

 

 

 

 

 

 

 

-----------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

####################################### Global Settings ########################################
## VsFTPd의 전체 설정 입니다. ##
################################################################################################
#
############################## 기본 설정 ##############################
#
## VsFTP 데몬을 background로 실행할 것인지 설정 합니다. (기본값 = NO)
## => VsFTP 데몬은 기본적으로 inetd 모드로 동작이 됩니다. 따라서 독립모드(standalone)로
## 데몬을 운영하실 거라면 이 옵션과 listen 옵션을 모두 YES로 켜주셔야 됩니다.
## 반대로 VsFTP 데몬을 inetd 모드로 운영하시려면 이 옵션과 listen 옵션을 비활성화 하시면 됩니다.
## 일반적으로 FTP 데몬은 많은 접속이 있을 경우에 standalone 모드로 운영하는것이 좋으며,
## 많은 접속이 없는 경우에는 inetd 모드로 운영하는것이 시스템 자원효율에 좋습니다.
background=YES

## background 옵션과 같이 사용되며, 이 옵션은 listen_port에서 들어오는 요청에 대해서
## 데몬이 요청을 받아드릴지에 대해 설정합니다. (기본값 = NO)
## => 만약 데몬을 독립모드(standalone)로 운영하실 거라면 background 옵션과 같이 이 옵션도
## 함께 활성화 시켜야 됩니다.
listen=YES

## listen 옵션과 동일하지만, IPv6에서 운영할 때 사용 합니다. (기본값 = NO)
## => 일반적으로 IPv6는 사용하지 않으므로 비활성화 하시면 됩니다.
listen_ipv6=NO

## VsFTP 데몬이 독립모드(standalone)로 동작할 때 사용할 포트를 지정합니다. (기본값 = 21)
listen_port=21

## 멀티 FTP 데몬을 사용할 때 요청을 받아드릴 IP를 설정합니다. (기본값 = none)
## => 이 옵션은 multi-homed의 설정을 참조하시기 바랍니다.
#listen_address=none

## listen_address와 동일하며 IPv6에서 운영할 때 사용 합니다. (기본값 = none)
#listen_address6=none

## NAT를 사용하는 클라이언트의 공용 IP를 설정할 때 사용 합니다. (기본값 = none)
## => 일반적으로 설정하지 않아도 상관 없습니다.
#pasv_address=none

## VsFTPd가 구동될 서버의 유저를 설정합니다. (기본값 = nobody)
nopriv_user=nobody

## FTP 서버에 접속할 수 있는 클라이언트의 최대수를 제한하는 옵션 입니다. (기본값 = 0)
## => 기본값인 0으로 설정하면 제한을 두지 않습니다.
max_clients=100

## IP당 접속할 수 있는 최대수를 제한하는 옵션 입니다. (기본값 = 0)
## => 기본값인 0으로 설정하면 제한을 두지 않습니다.
max_per_ip=30

## 계정 사용자의 최대전송률을 지정합니다. (기본값 = 0)
## => 업/다운로드의 속도를 제한할때 사용하며, 단위는 bps 입니다.
local_max_rate=0

## 한번에 전송될 크기를 지정합니다. (기본값 = 0)
## => 이 옵션은 전송할 파일을 지정한 단위로 나눠서 전송하도록 하는 옵션입니다.
## rate 옵션과 밀접한 관계가 있으며, 기본값인 0으로 설정하면, vsftpd가 알아서 판단하므로
## 되도록이면 수정하지 않는것이 좋습니다.
## vsftpd의 제작자 또한 이 옵션을 따로 수정할 이유가 없을 것이라고 말하고 있습니다.
trans_chunk_size=0

## 서버의 FTP 데몬시간을 서버의 표준시간으로 고정할지 설정합니다. (기본값 = NO)
## => 만약 이 옵션을 비활성화 하게되면 표준시각(GMT)를 보여주므로, 한국의 경우 9시간의 오차가 발생합니다.
use_localtime=YES

## 프로토콜의 현재 상태를 출력해줄 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 ps 명령어를 사용했을때 세션의 현재 상태도 보여줍니다.
## 또한 LTN에서 제공하는 ftpwho 스크립트를 사용할 때에도 이 옵션을 활성화 하셔야 됩니다.
setproctitle_enable=YES

## 특정 사용자의 개별 설정 파일을 지정합니다. (기본값 = none)
## => 이 옵션을 사용하면 /etc/vsftpd/vsftpd.conf의 지시문을 무시하고 사용할 수 있습니다.
#user_config_dir=none
#
############################## 접속 설정 ##############################
#
## 계정 사용자의 접속에 대한 설정을 합니다. (기본값 = NO)
local_enable=YES

## 명시된 사용자만 로그인을 허용할 때 사용하는 옵션입니다. (기본값 = NO)
## => userlist_deny 옵션이 비활성화 된 상태에서만 작동합니다.
userlist_enable=NO

## 명시된 사용자가 로그인을 할 수 없도록 제한하는 옵션 입니다. (기본값 = YES)
## => userlist_enable 옵션이 비활성화 된 상태에서만 작동하며, 서로 반대되는 개념 입니다.
userlist_deny=YES

## 명시된 사용자를 읽어올 파일을 지정합니다. (기본값 = /etc/vsftpd.user_list)
userlist_file=/etc/vsftpd.user_list

## 디렉토리 목록의 사용자와 그룹 필드들에 있는 숫자 ID 들이 보이는 것이 기본값 입니다.
## 당신은 이 파라미터를 활성화 함으로써 글자 이름을 사용할 수도 있습니다.
## 그러나 이 항목은 성능상의 이유로 기본적으로 비활성화 되어 있습니다. (기본값 = NO)
text_userdb_names=NO

## PAM 사용자 인증을 할 때 사용될 인증파일을 지정합니다. (기본값 = ftp)
## => VsFTPd를 RPM으로 설치하게 되면 일반적으로 vsftpd로 인증파일이 생성됩니다.
pam_service_name=vsftpd

## TCP wrappers에 의해서 FTP 접속을 제어 할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 /etc/hosts.allow와 /etc/hosts.deny에 의해서 제어할 수 있습니다.
## 그러나 이 옵션을 사용하려면 vsftpd 소스중 builddefs.h 파일에서 설정을 변경해야 됩니다.
## 변경전 -> #undef VSF_BUILD_TCPWRAPPERS
## 변경후 -> #define VSF_BUILD_TCPWRAPPERS
## 참고: LTN에서 제공하는 vsftpd는 이미 패치되어 있습니다.
tcp_wrappers=YES

## TLS를 사용할 것인지에 대해 설정합니다. (기본값 = YES)
## => 이 옵션은 TLS를 활성화하며, TLS가 가능한 클라이언트가 이용하는데 도움이 됩니다.
ssl_tlsv1=YES

## SSL을 통한 보안접속을 지원할 것인지에 대해 설정합니다. (기본값 = NO)
## => 만약 OpenSSL에 대해서 컴파일 되어 있고, 이 옵션을 허용할 경우 vsftpd는 SSL을 통한 보안 접속을 지원합니다.
## 이 옵션은 제어 연결을 지원(로그인을 포함)하며, 또한 데이터 연결도 지원 합니다.
## 사용자는 SSL을 지원하는 클라이언트를 필요로 할 것이며, 반드시 필요한 경우에만 허용하는것이 좋습니다.
## 그러나 vsftpd는 OpenSSL 라이브러리의 보안과 관련한 게런티를 만들 수 없으며,
## 이 옵션을 활성화 한다는것은 OpenSSL 라이브러리의 보안을 믿는다는 것을 전제로 합니다.
ssl_enable=NO

## SSL v2 프로토콜 연결을 허용할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, TLS v1 연결들을 선호 합니다.
ssl_sslv2=NO

## SSL v3 프로토콜 연결을 허용할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, TLS v1 연결들을 선호 합니다.
ssl_sslv3=NO

## SSL 인증서의 위치를 지정합니다. (기본값 = none)
## => SSL의 암호화 접속을 사용하기 위해, DSA 인증서의 위치를 지정합니다.
#dsa_cert_file=none

## 이 옵션은 vsftpd가 암호화 된 SSL 연결들에 대해 어떤 SSL 암호화 방식을 선택하는지에 따라 사용됩니다.
## 더 자세한 사항은 관련 암호 메뉴얼 페이지를 보십시요.
## 암호화를 알리지 않는 것은 원격에서 선택된 암호화 방식의 취약점을 공격하려고 불법적인 원격 공격을
## 막기 위한 유용한 보안 지침이 될 수 있습니다. (기본값 = DES-CBC3-SHA)
#ssl_ciphers=DES-CBC3-SHA

## 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, 만약 이 옵션이 활성화 되어 있다면
## 모든 비익명 로그인은 데이터 연결 상태에서 데이터를 주고 받기 위해 보안 SSL 연결을 사용하도록
## 강제적으로 설정됩니다. (기본값 = YES)
#force_local_data_ssl=YES

## 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, 만약 이 옵션이 활성화 되어 있다면
## 모든 비익명 로그인은 비밀번호를 전달하기 위해 보안 SSL 연결을 사용하도록 강제적으로 설정됩니다.
## (기본값 = YES)
#force_local_logins_ssl=YES
#
############################ 대기시간 설정 ############################
#
## 액티브 모드(Active Mode)를 사용하는 클라이언트의 접속 허용시간을 설정합니다. (기본값 = 60/초)
## => 클라이언트의 요청패킷(SYN Packet)을 받은뒤, 지정된 시간내에 접속이 안될경우 종료합니다.
connect_timeout=60

## 패시브 모드(Passive Mode)를 사용하는 클라이언트의 접속 허용시간을 설정합니다. (기본값 = 60/초)
## => 클라이언트의 요청패킷(SYN Packet)을 받은뒤, 지정된 시간내에 접속이 안될경우 종료합니다.
accept_timeout=60

## 데이터 전송 대기시간을 설정합니다. (기본값 = 300/Secs)
## => FTP 서버로부터 데이터를 업/다운로드를 한 뒤 아무런 작동도 안할때 접속이 종료되도록 합니다.
data_connection_timeout=300

## 접속 대기시간을 설정합니다. (기본값 = 300/Secs)
## => FTP에 접속한 뒤 아무런 작동도 안할 때 지정된 시간이후 접속이 종료되도록 합니다.
idle_session_timeout=300
#
############################# 메시지 설정 #############################
#
## 사용자가 FTP 서버에 접속했을 때 보여줄 환영 메시지 파일을 설정합니다. (기본값 = none)
#banner_file=/etc/vsftpd/welcome.msg

## 사용자가 FTP 서버에 접속했을 때 보여줄 환영 메시지를 설정합니다. (기본값 = none)
ftpd_banner=Welcome to vsftpd server

## 디렉토리의 메시지 파일을 사용자에게 보여줄 것인지 설정합니다. (기본값 = NO)
dirmessage_enable=NO

## 메시지 파일을 지정 합니다. (기본값 = .message)
## => dirmessage_enable 옵션을 허용했을 경우에 메시지를 읽어올 파일을 지정합니다.
message_file=.message
#
############################## 모드 설정 ##############################
#
## 데이터 전송을 위해서 Active Mode를 사용할 것인지 설정합니다. (기본값 = YES)
port_enable=YES

## 액티브모드(Active Mode) 데이터 전송 포트인 20번을 사용할 것인지 설정 합니다. (기본값 = NO)
connect_from_port_20=YES

## 데이터 전송 포트를 지정합니다. (기본값 = 20)
## => connect_from_port_20 옵션이 활성화되었을때 사용되는 포트를 지정합니다.
ftp_data_port=20

## 데이터 전송을 위해서 Passive mode를 사용할 것인지 설정합니다. (기본값 = YES)
## => Active Mode로 접근할 수 없는 사용자들을 위해 활성화 하는것이 좋습니다.
pasv_enable=YES

## 동일한 IP주소에서 이루어지는 데이터 연결을 보장해주는 보안체크 기능을 사용할 것인지
## 설정합니다. (기본값 = NO)
pasv_promiscuous=NO

## 패시브 모드로 연결시 할당될 최대 및 최소 포트를 설정하는 옵션 입니다. (기본값 = 0)
## => 일반적으로 50000~60000 포트를 지정하는것이 좋으며, 기본값인 0으로 설정하게 되면
## well-known port를 제외한 무작위 포트를 이용하게 됩니다.
pasv_min_port=0
pasv_max_port=0

## 아스키모드(ASCII Mode) 전송 허용에 대해서 설정합니다. (기본값 = NO)
## => 이 옵션은 악의적인 사용자에 의해서 시스템의 자원이 고갈될 수 있으므로 주의해야 됩니다.
ascii_download_enable=YES
ascii_upload_enable=YES
#
############################## 권한 설정 ##############################
#
## 파일 생성 umask 값을 지정합니다. (기본값 = 077)
## => umask는 "max permission-umask=create permission" 의 공식을 가지고 있습니다.
## 디렉토리의 기본값은 0777이며, 파일의 기본값은 0666 입니다.
## 따라서 일반적인 시스템의 파일생성 퍼미션인 644를 생성하려면 022로 해야 됩니다.
## 디렉토리: 0777-022=0755, 파일: 0666-022=0644
local_umask=022

## 파일이 업로드 되었을 때의 퍼미션을 지정해주는 옵션 입니다. (기본값 = 0666)
## => 이 옵션은 반드시 umask 옵션보다 아래에 있어야 됩니다.
file_open_mode=0644

## 접속한 디렉토리의 파일리스트를 보여줄 지 설정합니다. (기본값 = YES)
dirlist_enable=YES

## 히든 파일/디렉토리를 보여줄 것인지 설정하는 옵션 입니다. (기본값 = NO)
## => 히든 파일/디렉토리는 dot(.) 으로 시작하는 것을 말합니다.
force_dot_files=NO

## 이 옵션이 활성화되면, vsftpd는 ~chris/pics와 같이 사용자 계정 이름에 틸드 표시가 따라오는 경우의
## 경로명을 접근하도록 시도하고 해석할 것입니다.
## vsftpd는 항상 ~ 와 ~/somthing 을 해석한다는 것을 주의하시기 바랍니다.
## (여기서 ~ 는 기본적으로 로그인 했을 때의 디렉토리로 해석됩니다.)
## ~user 경로들은 _current_ chroot() 에서 /etc/passwd 파일을 찾을 수 있을 경우에만 해석 될 수 있을 것입니다.
## (기본값 = NO)
tilde_user_enable=NO

## 디렉토리 목록에서 UID를 보여주지 않고, 모두 FTP로 표시할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화 하면 모든 파일의 소유권이 FTP로 표시되므로 보안에 도움이 될 수 있습니다.
hide_ids=NO

## 사용자에게 STOR(저장),DELE(삭제),RNFR(이름변경),RNTO(이름변경),MKD(디렉토리생성),RMD(디렉토리삭제),
## APE(이어올리기), SITE(umask,chmod)등의 권한을 허용할지 설정합니다. (기본값 = NO)
## => 이 옵션이 비활성화되어 있으면 사용자는 FTP 서버에 데이터를 쓸 수 없습니다.
write_enable=YES

## 다운로드에 대한 권한을 설정합니다. (기본값 = YES)
download_enable=YES

## 사용자가 퍼미션을 변경할 수 있도록 설정합니다. (기본값 = YES)
chmod_enable=YES

## 이 옵션은 당신의 플랫폼에서 sendfile() 시스템 호출을 사용하는 것과 관련된 이익을 테스트 할 때
## 사용되는 내부 설정입니다. (기본값 = YES)
use_sendfile=YES

## 사용자에게 허가할 명령어를 지정합니다. (기본값 = none)
#cmds_allowed=PASV,RETR,QUIT

## 업로드를 거부할 파일명을 지정합니다. (기본값 = none)
#deny_file={*.mp3,*.mov}

## 숨길 파일명을 지정합니다. (기본값 = none)
## => 이 옵션을 사용하면 서버에 실제로 데이터는 존재하지만, FTP 사용자에게는 보이지 않도록
## 설정하는 기능입니다. 악의적인 사용자에게 간단한 fake를 걸 수 있습니다.
#hide_file={*.mp3,*.mov}

## async ABOR 명령어를 사용할 수 있도록 설정합니다. (기본값 = NO)
## => 일부 FTP 클라이언트에서 파일전송을 취소했을 경우, 취소되지 않은 상태로 있는 경우가
## 생길 수 있는데 그것을 방지하기 위해 사용할 수 있습니다.
## 그러나 보안상 좋지 않기 때문에, 비활성화 하시는것이 좋습니다.
async_abor_enable=NO

## ls -R 명령을 허용할 것인지를 설정하는 옵션 입니다. (기본값 = NO)
## => 만약 하위디렉토리나 파일이 매우 많은 상위디렉토리에서 이 옵션을 활성화하게 되면
## 시스템 자원의 낭비가 심하므로, 비활성화 하시는것이 좋습니다.
ls_recurse_enable=NO
#
############################## 보안 설정 ##############################
#
## 모든 계정 사용자가 자신의 홈상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => FTP 사용자가 시스템에 접근할 수 있으면 위험하므로 반드시 활성화 하는것이 좋습니다.
chroot_local_user=YES

## SSH로 접속했을 때 자신의 홈 상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => chroot_local_user 옵션이 활성화되었고, OpenSSH에 패치를 했을경우, SSH 또한 자신의
## 홈상위 디렉토리를 접근할 수 없도록 설정할 수 있으며, /etc/passwd 파일의 홈 디렉토리
## 필드의 /home/사용자/./와 같이 "/./"를 붙여 사용자를 홈디렉토리에 제한하게 합니다.
passwd_chroot_enable=NO

## 명시된 사용자가 자신의 홈상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => 이 옵션은 chroot_local_user 옵션이 비활성화되어 있어야 사용할 수 있습니다.
## => 전체 적용이 아니라 일부 사용자만 제한할때 편하지만, 개별 적용은 보안상 좋지 않습니다.
chroot_list_enable=NO

## 사용자의 홈상위 디렉토리를 설정한 파일을 지정합니다. (기본값 = /etc/vsftpd.chroot_list)
## => chroot_list_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
chroot_list_file=/etc/vsftpd.chroot_list

## secure chroot()에 사용될 디렉토리를 지정합니다. (기본값 = /usr/share/empty)
## => 이 옵션에서 지정된 디렉토리는 비어있어야되며, ftp 사용자에 대해 쓰기 권한이 없어야 됩니다.
#secure_chroot_dir=/usr/share/empty
#
############################## 로그 설정 ##############################
#
## VsFTP의 기본 로그 파일을 지정합니다. (기본값 = /var/log/vsftpd.log)
## => 이 옵션은 xferlog_enable 옵션과 xferlog_std_format 옵션이 비활성화일때 작동하며,
## dual_log_enable 옵션이나 syslog_enable 옵션이 활성화될때 사용됩니다.
#vsftpd_log_file=/var/log/vsftpd.log

## 2중 로그를 기록할 것인지에 대해 설정합니다. (기본값 = NO)
## => 만약 이 옵션을 활성화하면, /var/log/xferlog와 /var/log/vsftpd.log에 로그가 기록됩니다.
#dual_log_enable=NO

## syslogd 데몬을 이용해서 로그를 기록할 것인지 설정합니다. (기본값 = NO)
#syslog_enable=NO

## xferlog_enable 옵션을 활성화했을 경우에 로그를 기록할 파일을 지정합니다.
## (기본값 = /var/log/vsftpd.log)
xferlog_file=/var/log/vsftpd.log

## 파일의 송/수신 결과를 xferlog_file 옵션으로 지정된 로그파일에 기록합니다. (기본값 = NO)
xferlog_enable=YES

## 로그를 기록할 때 표준 xferlog 포맷으로 저장할 것인지를 설정합니다. (기본값 = NO)
xferlog_std_format=NO

## FTP Protocol의 모든 내용을 기록할지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 FTP 명령어와 반응이 모두 로깅되므로 디버그에 유용하게 쓰입니다.
log_ftp_protocol=NO

## 로그 파일을 잠글것인지에 대해서 설정합니다. (기본값 = NO)
## => 이 옵션은 vsftpd가 로그 파일을 기록할 때, 파일을 잠그는 것을 막는 옵션 입니다.
## 보통은 활성화 하지 않아도 되며, 솔라리스/베리타스 파일 시스템 조합에서 때때로
## 로그파일을 잠그려는 시도를 하는 운영체제 시스템 버그를 피하기 위해 존재 합니다.
no_log_lock=NO

## 사용자의 접속 기록을 남길 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 utmp/wtmp 파일에 접속 기록이 로깅됩니다.
## 따라서 last 명령어로 접속 여부를 확인하려면 활성화 하셔야 됩니다..
session_support=YES
#
#
##################################### Virtual User Settings ####################################
## 가상 사용자에 대한 설정 입니다. ##
################################################################################################
#
## 가상유저 모드로 운영할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 모든 비익명 사용자는 가상 사용자로 접속이 됩니다.
guest_enable=NO

## 가상유저들의 실제 계정을 지정합니다. (기본값 = ftp)
#guest_username=ftp

## 가상유저들의 권한을 실제 계정의 권한처럼 허용할 것인지를 설정합니다. (기본값 = NO)
## => 이 옵션이 활성화되어있지 않으면 가상유저는 FTP에 접속해서 파일을 생성하지 못합니다.
## 또한 가상유저는 기본적으로 anonymous의 권한을 갖고 있습니다.
#virtual_use_local_privs=NO

## 가상유저들을 지칭할 가상의 변수를 지정합니다. (기본값 = none)
#user_sub_token=$USER

## 가상유저들이 로그인 후 이동될 디렉토리를 지정합니다. (기본값 = none)
#local_root=/home/virtual/$USER
#
###################################### Anonymous Settings ######################################
## 익명 사용자에 대한 설정 입니다. ##
################################################################################################
#
############################## 기본 설정 ##############################
#
## 익명 사용자의 접속에 대한 설정을 합니다. (기본값 = YES)
anonymous_enable=NO

## 익명사용자의 SSL을 통한 보안접속을 지원할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용됩니다.
#allow_anon_ssl=NO

## 로그인 거부 리스트 사용에 대한 설정을 합니다. (기본값 = NO)
## => /etc/vsftpd.banned_emails 에 설정된 주소로 로그인을 거부할 수 있습니다.
## 만약 anonymous@ 라고 설정해두면, anonymous@를 사용하는 사용자는 접속할 수 없게됩니다.
#deny_email_enable=NO

## 로그인 거부 파일을 지정합니다. (기본값 = /etc/vsftpd.banned_emails)
## => deny_email_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
#banned_email_file=/etc/vsftpd.banned_emails

## 명시된 이메일 주소로만 접속을 허용할 지 설정합니다. (기본값 = NO)
#secure_email_list_enable=NO

## 접속을 허용할 이메일 주소 파일을 지정합니다. (기본값 = /etc/vsftpd.email_passwords)
## => secure_email_list_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
#email_password_file=/etc/vsftpd.email_passwords

## 익명 사용자의 접속에 사용될 계정명을 지정합니다. (기본값 = ftp)
#ftp_username=ftp

## 익명 사용자가 접속할 때 패스워드를 묻지않고 접속시킬 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 접속시 패스워드를 묻지 않습니다.
#no_anon_password=NO

## 클라이언트 접속마다 하나의 프로세스가 작동되도록 할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 접속하는 수만큼 프로세스가 작동되므로 효율이 좋습니다.
#one_process_model=NO

## 익명 사용자의 기본 디렉토리를 지정합니다. (기본값 = none)
## => 일반적으로 익명 사용자의 접근을 허용하면 ftp_username에 지정된 사용자의
## 홈 디렉토리가 기본적으로 설정됩니다.
## 그렇지만 만약 변경할 필요가 있을 경우에 이 옵션을 사용하면 됩니다.
#anon_root=/var/ftp/pub

## 익명 사용자의 다운로드 최대전송률을 지정합니다. (기본값 = 0)
## => 다운로드 속도를 제한할때 사용하며, 단위는 bps 입니다.
#anon_max_rate=0
#
############################## 권한 설정 ##############################
#
## 익명 사용자의 업로드에 대한 설정을 합니다. (기본값 = NO)
## => Global Setting에서의 write_enable 옵션이 허용되었을 경우에
## 익명 사용자가 업로드 가능한 디렉토리에 파일을 업로드할 수 있게 합니다.
#anon_upload_enable=NO

## 익명 사용자들의 다운로드에 대한 설정을 합니다. (기본값 = YES)
## => 익명 사용자들이 읽기 가능한 파일을 다운로드 할 수 있게 설정합니다.
#anon_world_readable_only=YES

## 익명 사용자의 디렉토리 생성에 대한 설정을 합니다. (기본값 = NO)
## => 익명 사용자가 쓰기 가능한 디렉토리에서 새로운 디렉토리를 생성할 수 있습니다.
#anon_mkdir_write_enable=NO

## 익명 사용자의 파일 삭제,변경에 대한 설정을 합니다. (기본값 = NO)
## => 파일 삭제 및 파일명 변경등과 같은 기능을 사용할 수 있게 합니다.
#anon_other_write_enable=NO

## 익명 사용자의 소유권 변경이 가능한 계정명을 설정합니다. (기본값 = root)
#chown_username=root

## 익명 사용자의 소유권 변경에 대한 설정을 합니다. (기본값 = NO)
## => 익명으로 업로드된 파일을 chown_username 옵션으로 명시된 사용자의
## 소유권으로 변경되도록 할 수 있습니다.
#chown_uploads=NO

## 익명 사용자의 파일생성 umask 값을 지정 합니다. (기본값 = 077)
## => umask에 대한 설명은 local_mask의 설명을 참조하시기 바랍니다.
#anon_umask=022
#
#######################################################################

 



이어지는 내용

by 융현 | 2007/10/03 02:54 | 참여활동 | 트랙백 | 덧글(0)

vsftp

vsftp 설치 및 설정내역

 

1. vsftpd FTP 서버에 대해

vsftpd는 UNIX 시스템에서 사용할 수 있는 free FTP 서버(라이센스는 GPL)이다.
vsftpd가 내세우고 있는 것은 보안, 성능, 안정성이다. 지금까지 vsftpd의 자체 보안 문제가 있어
보안권고가 나온 적은 없다.(Redhat의 rpm 패키지중에 tcp_wrappers 지원없이 만들어져서 업데이트
rpm은 나온 적 있음)

* 지원 및 테스트된 OS

- Linux (Redhat, SuSE, Debian)
- Solaris (버전에 따라 IPv6나 inet_aton함수때문에 설치가 잘 안될 수 있음)
- FreeBSD, OpenBSD
- HP-UX
- IRIX

* 주요 기능

- 가상 IP별 별도의 환경 설정 기능 (설정파일의 listen_address= 이용)
- 가상 사용자 설정
- 전송 대역폭 지정
- PAM 지원 (버전 1.2.0부터는 PAM을 통한 wtmp에 로긴 로그를 남김)
- xferlog 표준 로그 파일보다 상세한 자체 로그 파일 형식 지원
- Standalone 방식과 inetd(xinetd)를 통한 운영 모두 지원
- IP별 다른 환경 파일 지정 기능 (tcp_wrappers와 함께 사용할 때)
- ...

 

 

 

 

2. vsftpd 설치

※ 설치는 Redhat 기준. 솔라리스의 PAM에 대한 것은 README.solaris 파일 참조한다.

http://vsftpd.beasts.org/ 에서 최신버전(현재 1.2.0)의 소스를 받아온다.

-------------------------------------------------------------
# tar xvfz vsftpd-1.2.0.tar.gz
# cd vsftpd-1.2.0
-------------------------------------------------------------

한글로 된 파일명을 전송할 때 로그에 파일명이 ???? 로 남지 않도록
logging.c 파일을 연 후 140번째 줄의

str_replace_unprintable(p_str, '?');

를 다음처럼 주석 처리한다.

/* str_replace_unprintable(p_str, '?'); */

또한 tcp_wrappers를 통한 접속제어를 사용하려면 builddefs.h 에서

#undef VSF_BUILD_TCPWRAPPERS 를
#define VSF_BUILD_TCPWRAPPERS 로 바꾼다.

-------------------------------------------------------------
# make
# make install (vsftpd 데몬, man page, xinetd 용 설정 파일 설치)
# cp vsftpd.conf /etc (환경설정 파일 복사)
# chmod 600 /etc/vsftpd.conf
# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd (PAM 설정 파일 복사)
-------------------------------------------------------------

/etc/pam.d/vsftpd 첫번째 줄에 다음과 같이 있다.

pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

즉, /etc/ftpusers 파일에 존재하는 ID는 접속할 수 없게된다.(sense=deny)

-------------------------------------------------------------
# FTP 접속을 허용하지 않을 ID를 등록한다.
# /etc/passwd를 참조해서 설치할 서버의 환경에 맞게 등록
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
smmsp
xfs
gdm
mysql

 

 

 

 

 

3. 설정내역

# anonymous 사용자의 접속 허용 여부, 즉 anonymous ftp (default = YES)
# 공개된 형태의 FTP 서버로 운영할 것이 아니라면 NO로 한다.
anonymous_enable=NO

# 로컬 계정 사용자의 접속 허용 여부
local_enable=YES

# write 명령어 허용 여부
write_enable=YES

# 로컬 계정 사용자용 umask
local_umask=022

# anonymous 사용자가 파일을 업로드 할 수 있는지 여부
# anon_upload_enable=NO
#
# anonymous 사용자의 디렉토리 생성 허용 여부
# anon_mkdir_write_enable=NO
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES

# xferlog 표준 포맷으로 로그를 남길지 여부
# 아래에서 NO로 설정했을 때를 설명함
xferlog_std_format=NO
# 파일 전송 로그 파일명
#xferlog_file=/var/log/vsftpd.log
#
# 파일 전송 로그를 남길 것인지 여부
xferlog_enable=NO

# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#

#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that turning on ascii_download_enable enables malicious remote parties
# to consume your I/O resources, by issuing the command "SIZE /big/file" in
# ASCII mode.
# These ASCII options are split into upload and download because you may wish
# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
# on the client anyway..
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# FTP 서버 접속할 때 로긴 메시지 (default = vsFTPd 버전번호)
# 한글 사용 가능
# ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails

#
# 사용자의 홈디렉토리를 벗어나지 못하도록 제한하기 위한 설정
# 제한이 필요할 경우 YES로 바꾼 후 제한할 사용자 ID를 chroot_list_file= 에 설정한 파일에
# 지정한다.
# chroot_local_user= 설정과 관련이 있으니 '3. 문제 해결'을 꼭 읽어보라.
#
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES

# PAM 파일명을 지정 (설치할 때 /etc/pam.d/vsftpd명으로 복사함)
pam_service_name=vsftpd

userlist_enable=YES
#enable for standalone mode
listen=YES
tcp_wrappers=YES

 

 

 

 

4. 문제 해결

1) ftpwho 같은 명령은 있나?
  또한 last를 해도 접속된 걸 확인할 수가 없는데 방법이 없나?

 ftpwho 형태의 명령은 없으며 임시적으로 다음 명령어 등으로 확인할 수 있다.

 # ps -ef|grep vsftpd
 # fuser -v ftp/tcp

 vsftpd v1.2.0이상부터 PAM을 통해 wtmp에 로그를 남기므로 last로 접속여부를 확인할 수 있다.

2) 한글 파일명이 전송될 때는 vsftpd.log 에 ???? 로 남는다. 해결책은?

 vsftpd는 출력할 수 없다고 판단하는
 ASCII 코드 31 이하, 128~159, 177 문자를 모두 ? 로 바꿔서 저장을 한다.
 따라서 이 부분을 처리하지 않고 저장하도록 소스를 수정한 후 컴파일하면 해결된다.

3) 사용자가 홈디렉토리를 못 벗어나게 하고 싶는데?

/etc/vsftpd.conf에 다음을 추가하면, 모든 사용자는 자신의 홈디렉토리만 접근할 수 있다.

chroot_local_user=YES

또한 특정 사용자로만 제한을 하고 싶다면 다음과 같이 한다. /etc/vsftpd.chroot_list에는 제한할
사용자 ID를 한줄에 하나씩 나열하면 된다.

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

주의할 것은 chroot_local_user=YES와 chroot_list_enable=YES를 함께 사용할 경우에는
/etc/vsftpd.chroot_list에 포함된 사용자 ID만 제한없이 홈디렉토리를 벗어날 수 있다.
즉, 반대로 작용한다.

standalone으로 FTP서버가 동작중이면 재실행 필요. standalone에 대해서는 6)번에서.

4) root로 접속할 수는 없나?

 가능하면 root 접속은 허용하지 않기를 바란다.
 /etc/ftpusers 파일에서 root를 빼면 접속이 가능하다.

5) ID/비밀번호가 정확히 맞는데 로긴할 때 자꾸 530 Login incorrect. 라고 나온다.

 /etc/ftpusers (또는 vsftpd.ftpusers)에 등록된 사용자인지 확인한다.
 여기에 등록된 사용자는 로긴할 수 없다. 이럴 때 /var/log/messages에 다음과 같은 로그가 남는다.

 Aug 16 22:21:52 truefeel vsftpd: PAM-listfile: Refused user xxxxxxxx for service vsftpd

6) standalone으로 운영하고 싶다.
  (즉, apache나 sendmail처럼 xinetd 통하지 않고 운영을 원한다.)

 /etc/xinetd.d/vsftpd (vsftpd가 아닌 다른 파일명일 수 있음) 에서 disable = yes 로 변경하여
 xinetd로 서비스 하지 않도록 설정한다. xinetd 를 재실행하면 이제 xinetd를 통한 ftp 서비스는 종료된다.

 레드햇의 경우 /etc/rc.d/init.d/xinetd restart

 이제 vsftpd 데몬를 실행한다. (소스로 설치시 기본 경로는 /usr/local/sbin)

 # /usr/local/sbin/vsftpd &

7) 다른 포트(기본 21번)를 사용하고 싶다. (예를 들어 11121번 포트를 원할 때)

 * xinetd를 이용하는 경우

  /etc/service 에 'ftp2  11121/tcp' 한 줄을 추가한다.
  그리고 /etc/xinetd.d/vsftpd (vsftpd가 아닌 ftp와 같은 다른 파일명일 수 있음) 에서
  service ftp 를 service ftp2로 바꾸고, xinetd 를 재실행한다.

 * standalone으로 운영하는 경우

  /etc/vsftpd.conf 에서 listen_port=11121 을 추가하고 vsftpd 서버를 재실행한다.

 바뀐 포트로 운영중인지 확인은 netstat -atnp(리눅스) 또는 netstat -an(그 이외 유닉스)

8) 업로드 파일 크기를 제한하는 방법은 없나요? 이를테면 5MB이상의 파일은 업로드 못한다든지.

현재 1.2.1버전까지 vsftpd 자체에 설정하는 방법은 없습니다.

5. 참고할만한 문서

* vsftpd 1.2.0 설치 문서
 ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.2.0/INSTALL
* vsftpd.conf man page
* vsftpd에서 한글파일로그와 lastlog 로긴확인하기 (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=4
* vsftpd에서 전송속도 제한 (bandwidth limit) (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=21

 

vsftpd의 다양한 기능 설정(vsftpd.conf)
  vsftpd는 다양한 기능이 있습니다. 꼭 필요한 몇개의 지시자에 대해 알아보도록 하겠습니다.

  1) 아스키모드로 파일전송 하려면?
vsftp는 기본적으로 아스키모드(ASCII)로의 파일 전송을 허용하지 않습니다. 윈도우와 리눅스등의 엔터문자로 인한 text파일 변조(??)등 때문에 기본 허용하지 않습니다. 만약 필요해서 허용 하려면 다음과 같이 설정하시기 바랍니다.

ascii_download_enable=YES
ascii_upload_enable=YES


  2) 쉘권한이 없는 사용자들이 ftp를 사용가능하게 하려면?
대부분의 ftp서버는 로그인시 쉘을 요구하게 됩니다. 하지만 쉘 권한을 주지 않은 사용자들에게 ftp접근 권한을 주려면 /etc/pam.d/vsftpd파일에서 4번째 줄에 #을 입력하여 주석 처리 합니다.
(check_shell=NO 라는 지시자가 있었지만 PAM인증을 받는 곳에서는 작동하지 않았다.)


#%PAM-1.0
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
auth       required     pam_stack.so service=system-auth
#auth       required     pam_shells.so
account    required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth


  3) 사용자 home 디렉토리를 벗어나지 못하게 하려면?
ftp사용자가 자기 home디렉토리를 벗어나지 못하게 하려면 다음과 같이 설정합니다.

chroot_list_enable=YES
chroot_local_user=YES
위와같이 설정합니다. 접속하면 /etc/vsftpd.chroot_list 파일이 없다고 에러가 나게 됩니다.
단순히 touch /etc/vsftpd.chroot_list 이렇게 파일을 만들어 주면 됩니다.
 그리고 특정유저는 제외하려면 /etc/vsftpd.chroot_list 파일에 사용자 계정을 넣어줍니다.

  4) "."으로 시작하는 숨김파일을 기본적으로 보이게 하려면?

리눅스에서 "."으로 시작하는 파일은 숨김 파일입니다. 하지만, 다른 os에서는 "."으로 시작해도 숨김파일으로 취급하지 않는 경우가 있습니다. 이런경우 항상 "."으로 시작하는 파일을 보여주려면 다음과 같이 설정합니다.
force_dot_files=YES

  5) ftp 접속시 파일과 디렉토리의 소유권을 숨기려면?
특수한 목적으로 파일 및 디렉토리의 소유자를 숨길 경우가 있습니다. 이런 경우 다음과 같이 설정하면, ftp라는 사용자로 보이며, 본 ID는 보이지 않습니다.
hide_ids=YES

  6) 하위디렉토리의 파일 및 디렉토리를 볼수 있는 ls -R 명령 허용하려면?
하위디렉토리 리스트를 보여주기 위해서 ls -R 명령어를 내릴때가 있습니다. 이런경우 대부분의 ftp 서버는 부하등의 이유로 막아 두게 됩니다. vsftpd또한 기본적으로 막아 놓은 상태이며, 허용하기 위해서는 다음 지시자를 입력하세요.
ls_recurse_enable=YES

  7) openssh에 chroot 패치가 된 것을 사용하는데 정책을 같이 적용하려면?
openssh에 패치를 가하면, ssh 또한 자기 home 디렉토리를 벗어나지 못하게 설정가능합니다. 이 정책은 /etc/passwd파일의 홈디렉토리 부분에 /home/사용자/./ 와 같이 "/./"을 붙여 사용자를 홈디렉토리로 제한하게 됩니다. 이 정책에 따라 적용하려면, 다음 옵션을 적용하시기 바랍니다.
passwd_chroot_enable=YES

  8) 파일을 올렸는데 시간이 이상하게 보인다면?

대부분의 ftp서버에서 시간 표현은 표준시각(GMT)을 보여주게 됩니다. 국내에서만 사용하는 ftp서버는 다음 옵션으로 국내 시간으로 보여줄 수 있습니다.
use_localtime=YES

  9) 전송속도를 제한하고 싶다면?
다운로드 받는 한 사용자가 네트웍 트래픽을 모두 사용해 버리는 것을 방지하기 위해서 대역폭을 조정해야 하는 경우가 있습니다. 다음 옵션으로 가능합니다. 뒤에 나오는 숫자의 단위는  (Bytes/Sec) 입니다.
local_max_rate=300000

위 설정은 300KByte/Sec의 대역폭을 제공합니다.

  10) 동시 접속자수를 제한하려면?
ftp서버에 접속할 수 있는 최대 접속수를 제한하려면, 아래의 설정으로 제한 가능합니다.
max_clients=10
위 설정은 동시에 10개의 연결으로 제한합니다.

  11) 한 IP당 접속할 수 있는 동시접속 수 제한하려면?
ftp서버의 한 사용자가 대역폭을 모두 사용해 버리는 것을 방지하기 위해, 전송 속도를 제한하면, flashget 등의 유틸리티로 몇개의 접속으로 나눠 받으면 대역폭 제한을 우회 할 수 있습니다. 이런경우 한 IP에서 접속 가능한 동시접속 수를 제한하므로 해결 가능합니다.
max_per_ip=2
위 설정은 한 IP에서 접속할 수 있는 연결을 2개로 제한합니다.

  12) PASSIVE 모드 사용시 사용하는 포트 범위를 제한하려면?
FTP에서 데이터 전송을 위해서 20번 포트를 사용합니다. 이경우 서버에서 클라이언트 쪽으로 연결을 하기 때문에 중간에 방화벽 또는 공유기등을 사용한다면, 정상작동하지 않을 수 있습니다. 이런 문제를 해결하기위해서 PASSIVE모드라는 것이 있고, 이 모드에서는 서버의 1024이후 포트를 사용합니다. 이 포트의 범위를 제한하기 위해서는 다음과 같이 설정합니다.
pasv_min_port=40000
pasv_max_port=50000
위 설정은 PASSIVE에서 사용할 포트를 40000~50000로 합니다.

  13) mp3, wmv 등의 확장자를 가진 파일의 업로드를 금지하려면?
ftp를 통해 인증된 사용자가 파일을 올리는 것을 막는 방법은 거의 없었습니다. 이 vsftpd는 특이하게 특정파일 패턴을 제한하는 기능이 있습니다.
deny_file={*.mp3,*.wmv}
위 설정은 mp3, wmv 파일을 전송하지 못하게 하는 방법입니다.

  14) 특정파일 패턴을 숨기려면?
특정파일이 서버내에는 존재하지만, ftp접속시 보여지지 않게 설정할 수 있습니다. 다음예를 보시기 바랍니다.
hide_file={*.mp3,.hidden,hide*,h?}
위 설정은 mp3파일, .hidden 파일, hide로 시작하는 파일을 보여지지 않게 하는 옵션입니다.

 

-------------------------------------------------------------------------------------------------------------------- 

 

####################################### Global Settings ########################################
## VsFTPd의 전체 설정 입니다. ##
################################################################################################
#
############################## 기본 설정 ##############################
#
## VsFTP 데몬을 background로 실행할 것인지 설정 합니다. (기본값 = NO)
## => VsFTP 데몬은 기본적으로 inetd 모드로 동작이 됩니다. 따라서 독립모드(standalone)로
## 데몬을 운영하실 거라면 이 옵션과 listen 옵션을 모두 YES로 켜주셔야 됩니다.
## 반대로 VsFTP 데몬을 inetd 모드로 운영하시려면 이 옵션과 listen 옵션을 비활성화 하시면 됩니다.
## 일반적으로 FTP 데몬은 많은 접속이 있을 경우에 standalone 모드로 운영하는것이 좋으며,
## 많은 접속이 없는 경우에는 inetd 모드로 운영하는것이 시스템 자원효율에 좋습니다.
background=YES

## background 옵션과 같이 사용되며, 이 옵션은 listen_port에서 들어오는 요청에 대해서
## 데몬이 요청을 받아드릴지에 대해 설정합니다. (기본값 = NO)
## => 만약 데몬을 독립모드(standalone)로 운영하실 거라면 background 옵션과 같이 이 옵션도
## 함께 활성화 시켜야 됩니다.
listen=YES

## listen 옵션과 동일하지만, IPv6에서 운영할 때 사용 합니다. (기본값 = NO)
## => 일반적으로 IPv6는 사용하지 않으므로 비활성화 하시면 됩니다.
listen_ipv6=NO

## VsFTP 데몬이 독립모드(standalone)로 동작할 때 사용할 포트를 지정합니다. (기본값 = 21)
listen_port=21

## 멀티 FTP 데몬을 사용할 때 요청을 받아드릴 IP를 설정합니다. (기본값 = none)
## => 이 옵션은 multi-homed의 설정을 참조하시기 바랍니다.
#listen_address=none

## listen_address와 동일하며 IPv6에서 운영할 때 사용 합니다. (기본값 = none)
#listen_address6=none

## NAT를 사용하는 클라이언트의 공용 IP를 설정할 때 사용 합니다. (기본값 = none)
## => 일반적으로 설정하지 않아도 상관 없습니다.
#pasv_address=none

## VsFTPd가 구동될 서버의 유저를 설정합니다. (기본값 = nobody)
nopriv_user=nobody

## FTP 서버에 접속할 수 있는 클라이언트의 최대수를 제한하는 옵션 입니다. (기본값 = 0)
## => 기본값인 0으로 설정하면 제한을 두지 않습니다.
max_clients=100

## IP당 접속할 수 있는 최대수를 제한하는 옵션 입니다. (기본값 = 0)
## => 기본값인 0으로 설정하면 제한을 두지 않습니다.
max_per_ip=30

## 계정 사용자의 최대전송률을 지정합니다. (기본값 = 0)
## => 업/다운로드의 속도를 제한할때 사용하며, 단위는 bps 입니다.
local_max_rate=0

## 한번에 전송될 크기를 지정합니다. (기본값 = 0)
## => 이 옵션은 전송할 파일을 지정한 단위로 나눠서 전송하도록 하는 옵션입니다.
## rate 옵션과 밀접한 관계가 있으며, 기본값인 0으로 설정하면, vsftpd가 알아서 판단하므로
## 되도록이면 수정하지 않는것이 좋습니다.
## vsftpd의 제작자 또한 이 옵션을 따로 수정할 이유가 없을 것이라고 말하고 있습니다.
trans_chunk_size=0

## 서버의 FTP 데몬시간을 서버의 표준시간으로 고정할지 설정합니다. (기본값 = NO)
## => 만약 이 옵션을 비활성화 하게되면 표준시각(GMT)를 보여주므로, 한국의 경우 9시간의 오차가 발생합니다.
use_localtime=YES

## 프로토콜의 현재 상태를 출력해줄 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 ps 명령어를 사용했을때 세션의 현재 상태도 보여줍니다.
## 또한 LTN에서 제공하는 ftpwho 스크립트를 사용할 때에도 이 옵션을 활성화 하셔야 됩니다.
setproctitle_enable=YES

## 특정 사용자의 개별 설정 파일을 지정합니다. (기본값 = none)
## => 이 옵션을 사용하면 /etc/vsftpd/vsftpd.conf의 지시문을 무시하고 사용할 수 있습니다.
#user_config_dir=none
#
############################## 접속 설정 ##############################
#
## 계정 사용자의 접속에 대한 설정을 합니다. (기본값 = NO)
local_enable=YES

## 명시된 사용자만 로그인을 허용할 때 사용하는 옵션입니다. (기본값 = NO)
## => userlist_deny 옵션이 비활성화 된 상태에서만 작동합니다.
userlist_enable=NO

## 명시된 사용자가 로그인을 할 수 없도록 제한하는 옵션 입니다. (기본값 = YES)
## => userlist_enable 옵션이 비활성화 된 상태에서만 작동하며, 서로 반대되는 개념 입니다.
userlist_deny=YES

## 명시된 사용자를 읽어올 파일을 지정합니다. (기본값 = /etc/vsftpd.user_list)
userlist_file=/etc/vsftpd.user_list

## 디렉토리 목록의 사용자와 그룹 필드들에 있는 숫자 ID 들이 보이는 것이 기본값 입니다.
## 당신은 이 파라미터를 활성화 함으로써 글자 이름을 사용할 수도 있습니다.
## 그러나 이 항목은 성능상의 이유로 기본적으로 비활성화 되어 있습니다. (기본값 = NO)
text_userdb_names=NO

## PAM 사용자 인증을 할 때 사용될 인증파일을 지정합니다. (기본값 = ftp)
## => VsFTPd를 RPM으로 설치하게 되면 일반적으로 vsftpd로 인증파일이 생성됩니다.
pam_service_name=vsftpd

## TCP wrappers에 의해서 FTP 접속을 제어 할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 /etc/hosts.allow와 /etc/hosts.deny에 의해서 제어할 수 있습니다.
## 그러나 이 옵션을 사용하려면 vsftpd 소스중 builddefs.h 파일에서 설정을 변경해야 됩니다.
## 변경전 -> #undef VSF_BUILD_TCPWRAPPERS
## 변경후 -> #define VSF_BUILD_TCPWRAPPERS
## 참고: LTN에서 제공하는 vsftpd는 이미 패치되어 있습니다.
tcp_wrappers=YES

## TLS를 사용할 것인지에 대해 설정합니다. (기본값 = YES)
## => 이 옵션은 TLS를 활성화하며, TLS가 가능한 클라이언트가 이용하는데 도움이 됩니다.
ssl_tlsv1=YES

## SSL을 통한 보안접속을 지원할 것인지에 대해 설정합니다. (기본값 = NO)
## => 만약 OpenSSL에 대해서 컴파일 되어 있고, 이 옵션을 허용할 경우 vsftpd는 SSL을 통한 보안 접속을 지원합니다.
## 이 옵션은 제어 연결을 지원(로그인을 포함)하며, 또한 데이터 연결도 지원 합니다.
## 사용자는 SSL을 지원하는 클라이언트를 필요로 할 것이며, 반드시 필요한 경우에만 허용하는것이 좋습니다.
## 그러나 vsftpd는 OpenSSL 라이브러리의 보안과 관련한 게런티를 만들 수 없으며,
## 이 옵션을 활성화 한다는것은 OpenSSL 라이브러리의 보안을 믿는다는 것을 전제로 합니다.
ssl_enable=NO

## SSL v2 프로토콜 연결을 허용할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, TLS v1 연결들을 선호 합니다.
ssl_sslv2=NO

## SSL v3 프로토콜 연결을 허용할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, TLS v1 연결들을 선호 합니다.
ssl_sslv3=NO

## SSL 인증서의 위치를 지정합니다. (기본값 = none)
## => SSL의 암호화 접속을 사용하기 위해, DSA 인증서의 위치를 지정합니다.
#dsa_cert_file=none

## 이 옵션은 vsftpd가 암호화 된 SSL 연결들에 대해 어떤 SSL 암호화 방식을 선택하는지에 따라 사용됩니다.
## 더 자세한 사항은 관련 암호 메뉴얼 페이지를 보십시요.
## 암호화를 알리지 않는 것은 원격에서 선택된 암호화 방식의 취약점을 공격하려고 불법적인 원격 공격을
## 막기 위한 유용한 보안 지침이 될 수 있습니다. (기본값 = DES-CBC3-SHA)
#ssl_ciphers=DES-CBC3-SHA

## 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, 만약 이 옵션이 활성화 되어 있다면
## 모든 비익명 로그인은 데이터 연결 상태에서 데이터를 주고 받기 위해 보안 SSL 연결을 사용하도록
## 강제적으로 설정됩니다. (기본값 = YES)
#force_local_data_ssl=YES

## 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, 만약 이 옵션이 활성화 되어 있다면
## 모든 비익명 로그인은 비밀번호를 전달하기 위해 보안 SSL 연결을 사용하도록 강제적으로 설정됩니다.
## (기본값 = YES)
#force_local_logins_ssl=YES
#
############################ 대기시간 설정 ############################
#
## 액티브 모드(Active Mode)를 사용하는 클라이언트의 접속 허용시간을 설정합니다. (기본값 = 60/초)
## => 클라이언트의 요청패킷(SYN Packet)을 받은뒤, 지정된 시간내에 접속이 안될경우 종료합니다.
connect_timeout=60

## 패시브 모드(Passive Mode)를 사용하는 클라이언트의 접속 허용시간을 설정합니다. (기본값 = 60/초)
## => 클라이언트의 요청패킷(SYN Packet)을 받은뒤, 지정된 시간내에 접속이 안될경우 종료합니다.
accept_timeout=60

## 데이터 전송 대기시간을 설정합니다. (기본값 = 300/Secs)
## => FTP 서버로부터 데이터를 업/다운로드를 한 뒤 아무런 작동도 안할때 접속이 종료되도록 합니다.
data_connection_timeout=300

## 접속 대기시간을 설정합니다. (기본값 = 300/Secs)
## => FTP에 접속한 뒤 아무런 작동도 안할 때 지정된 시간이후 접속이 종료되도록 합니다.
idle_session_timeout=300
#
############################# 메시지 설정 #############################
#
## 사용자가 FTP 서버에 접속했을 때 보여줄 환영 메시지 파일을 설정합니다. (기본값 = none)
#banner_file=/etc/vsftpd/welcome.msg

## 사용자가 FTP 서버에 접속했을 때 보여줄 환영 메시지를 설정합니다. (기본값 = none)
ftpd_banner=Welcome to vsftpd server

## 디렉토리의 메시지 파일을 사용자에게 보여줄 것인지 설정합니다. (기본값 = NO)
dirmessage_enable=NO

## 메시지 파일을 지정 합니다. (기본값 = .message)
## => dirmessage_enable 옵션을 허용했을 경우에 메시지를 읽어올 파일을 지정합니다.
message_file=.message
#
############################## 모드 설정 ##############################
#
## 데이터 전송을 위해서 Active Mode를 사용할 것인지 설정합니다. (기본값 = YES)
port_enable=YES

## 액티브모드(Active Mode) 데이터 전송 포트인 20번을 사용할 것인지 설정 합니다. (기본값 = NO)
connect_from_port_20=YES

## 데이터 전송 포트를 지정합니다. (기본값 = 20)
## => connect_from_port_20 옵션이 활성화되었을때 사용되는 포트를 지정합니다.
ftp_data_port=20

## 데이터 전송을 위해서 Passive mode를 사용할 것인지 설정합니다. (기본값 = YES)
## => Active Mode로 접근할 수 없는 사용자들을 위해 활성화 하는것이 좋습니다.
pasv_enable=YES

## 동일한 IP주소에서 이루어지는 데이터 연결을 보장해주는 보안체크 기능을 사용할 것인지
## 설정합니다. (기본값 = NO)
pasv_promiscuous=NO

## 패시브 모드로 연결시 할당될 최대 및 최소 포트를 설정하는 옵션 입니다. (기본값 = 0)
## => 일반적으로 50000~60000 포트를 지정하는것이 좋으며, 기본값인 0으로 설정하게 되면
## well-known port를 제외한 무작위 포트를 이용하게 됩니다.
pasv_min_port=0
pasv_max_port=0

## 아스키모드(ASCII Mode) 전송 허용에 대해서 설정합니다. (기본값 = NO)
## => 이 옵션은 악의적인 사용자에 의해서 시스템의 자원이 고갈될 수 있으므로 주의해야 됩니다.
ascii_download_enable=YES
ascii_upload_enable=YES
#
############################## 권한 설정 ##############################
#
## 파일 생성 umask 값을 지정합니다. (기본값 = 077)
## => umask는 "max permission-umask=create permission" 의 공식을 가지고 있습니다.
## 디렉토리의 기본값은 0777이며, 파일의 기본값은 0666 입니다.
## 따라서 일반적인 시스템의 파일생성 퍼미션인 644를 생성하려면 022로 해야 됩니다.
## 디렉토리: 0777-022=0755, 파일: 0666-022=0644
local_umask=022

## 파일이 업로드 되었을 때의 퍼미션을 지정해주는 옵션 입니다. (기본값 = 0666)
## => 이 옵션은 반드시 umask 옵션보다 아래에 있어야 됩니다.
file_open_mode=0644

## 접속한 디렉토리의 파일리스트를 보여줄 지 설정합니다. (기본값 = YES)
dirlist_enable=YES

## 히든 파일/디렉토리를 보여줄 것인지 설정하는 옵션 입니다. (기본값 = NO)
## => 히든 파일/디렉토리는 dot(.) 으로 시작하는 것을 말합니다.
force_dot_files=NO

## 이 옵션이 활성화되면, vsftpd는 ~chris/pics와 같이 사용자 계정 이름에 틸드 표시가 따라오는 경우의
## 경로명을 접근하도록 시도하고 해석할 것입니다.
## vsftpd는 항상 ~ 와 ~/somthing 을 해석한다는 것을 주의하시기 바랍니다.
## (여기서 ~ 는 기본적으로 로그인 했을 때의 디렉토리로 해석됩니다.)
## ~user 경로들은 _current_ chroot() 에서 /etc/passwd 파일을 찾을 수 있을 경우에만 해석 될 수 있을 것입니다.
## (기본값 = NO)
tilde_user_enable=NO

## 디렉토리 목록에서 UID를 보여주지 않고, 모두 FTP로 표시할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화 하면 모든 파일의 소유권이 FTP로 표시되므로 보안에 도움이 될 수 있습니다.
hide_ids=NO

## 사용자에게 STOR(저장),DELE(삭제),RNFR(이름변경),RNTO(이름변경),MKD(디렉토리생성),RMD(디렉토리삭제),
## APE(이어올리기), SITE(umask,chmod)등의 권한을 허용할지 설정합니다. (기본값 = NO)
## => 이 옵션이 비활성화되어 있으면 사용자는 FTP 서버에 데이터를 쓸 수 없습니다.
write_enable=YES

## 다운로드에 대한 권한을 설정합니다. (기본값 = YES)
download_enable=YES

## 사용자가 퍼미션을 변경할 수 있도록 설정합니다. (기본값 = YES)
chmod_enable=YES

## 이 옵션은 당신의 플랫폼에서 sendfile() 시스템 호출을 사용하는 것과 관련된 이익을 테스트 할 때
## 사용되는 내부 설정입니다. (기본값 = YES)
use_sendfile=YES

## 사용자에게 허가할 명령어를 지정합니다. (기본값 = none)
#cmds_allowed=PASV,RETR,QUIT

## 업로드를 거부할 파일명을 지정합니다. (기본값 = none)
#deny_file={*.mp3,*.mov}

## 숨길 파일명을 지정합니다. (기본값 = none)
## => 이 옵션을 사용하면 서버에 실제로 데이터는 존재하지만, FTP 사용자에게는 보이지 않도록
## 설정하는 기능입니다. 악의적인 사용자에게 간단한 fake를 걸 수 있습니다.
#hide_file={*.mp3,*.mov}

## async ABOR 명령어를 사용할 수 있도록 설정합니다. (기본값 = NO)
## => 일부 FTP 클라이언트에서 파일전송을 취소했을 경우, 취소되지 않은 상태로 있는 경우가
## 생길 수 있는데 그것을 방지하기 위해 사용할 수 있습니다.
## 그러나 보안상 좋지 않기 때문에, 비활성화 하시는것이 좋습니다.
async_abor_enable=NO

## ls -R 명령을 허용할 것인지를 설정하는 옵션 입니다. (기본값 = NO)
## => 만약 하위디렉토리나 파일이 매우 많은 상위디렉토리에서 이 옵션을 활성화하게 되면
## 시스템 자원의 낭비가 심하므로, 비활성화 하시는것이 좋습니다.
ls_recurse_enable=NO
#
############################## 보안 설정 ##############################
#
## 모든 계정 사용자가 자신의 홈상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => FTP 사용자가 시스템에 접근할 수 있으면 위험하므로 반드시 활성화 하는것이 좋습니다.
chroot_local_user=YES

## SSH로 접속했을 때 자신의 홈 상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => chroot_local_user 옵션이 활성화되었고, OpenSSH에 패치를 했을경우, SSH 또한 자신의
## 홈상위 디렉토리를 접근할 수 없도록 설정할 수 있으며, /etc/passwd 파일의 홈 디렉토리
## 필드의 /home/사용자/./와 같이 "/./"를 붙여 사용자를 홈디렉토리에 제한하게 합니다.
passwd_chroot_enable=NO

## 명시된 사용자가 자신의 홈상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => 이 옵션은 chroot_local_user 옵션이 비활성화되어 있어야 사용할 수 있습니다.
## => 전체 적용이 아니라 일부 사용자만 제한할때 편하지만, 개별 적용은 보안상 좋지 않습니다.
chroot_list_enable=NO

## 사용자의 홈상위 디렉토리를 설정한 파일을 지정합니다. (기본값 = /etc/vsftpd.chroot_list)
## => chroot_list_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
chroot_list_file=/etc/vsftpd.chroot_list

## secure chroot()에 사용될 디렉토리를 지정합니다. (기본값 = /usr/share/empty)
## => 이 옵션에서 지정된 디렉토리는 비어있어야되며, ftp 사용자에 대해 쓰기 권한이 없어야 됩니다.
#secure_chroot_dir=/usr/share/empty
#
############################## 로그 설정 ##############################
#
## VsFTP의 기본 로그 파일을 지정합니다. (기본값 = /var/log/vsftpd.log)
## => 이 옵션은 xferlog_enable 옵션과 xferlog_std_format 옵션이 비활성화일때 작동하며,
## dual_log_enable 옵션이나 syslog_enable 옵션이 활성화될때 사용됩니다.
#vsftpd_log_file=/var/log/vsftpd.log

## 2중 로그를 기록할 것인지에 대해 설정합니다. (기본값 = NO)
## => 만약 이 옵션을 활성화하면, /var/log/xferlog와 /var/log/vsftpd.log에 로그가 기록됩니다.
#dual_log_enable=NO

## syslogd 데몬을 이용해서 로그를 기록할 것인지 설정합니다. (기본값 = NO)
#syslog_enable=NO

## xferlog_enable 옵션을 활성화했을 경우에 로그를 기록할 파일을 지정합니다.
## (기본값 = /var/log/vsftpd.log)
xferlog_file=/var/log/vsftpd.log

## 파일의 송/수신 결과를 xferlog_file 옵션으로 지정된 로그파일에 기록합니다. (기본값 = NO)
xferlog_enable=YES

## 로그를 기록할 때 표준 xferlog 포맷으로 저장할 것인지를 설정합니다. (기본값 = NO)
xferlog_std_format=NO

## FTP Protocol의 모든 내용을 기록할지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 FTP 명령어와 반응이 모두 로깅되므로 디버그에 유용하게 쓰입니다.
log_ftp_protocol=NO

## 로그 파일을 잠글것인지에 대해서 설정합니다. (기본값 = NO)
## => 이 옵션은 vsftpd가 로그 파일을 기록할 때, 파일을 잠그는 것을 막는 옵션 입니다.
## 보통은 활성화 하지 않아도 되며, 솔라리스/베리타스 파일 시스템 조합에서 때때로
## 로그파일을 잠그려는 시도를 하는 운영체제 시스템 버그를 피하기 위해 존재 합니다.
no_log_lock=NO

## 사용자의 접속 기록을 남길 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 utmp/wtmp 파일에 접속 기록이 로깅됩니다.
## 따라서 last 명령어로 접속 여부를 확인하려면 활성화 하셔야 됩니다..
session_support=YES
#
#
##################################### Virtual User Settings ####################################
## 가상 사용자에 대한 설정 입니다. ##
################################################################################################
#
## 가상유저 모드로 운영할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 모든 비익명 사용자는 가상 사용자로 접속이 됩니다.
guest_enable=NO

## 가상유저들의 실제 계정을 지정합니다. (기본값 = ftp)
#guest_username=ftp

## 가상유저들의 권한을 실제 계정의 권한처럼 허용할 것인지를 설정합니다. (기본값 = NO)
## => 이 옵션이 활성화되어있지 않으면 가상유저는 FTP에 접속해서 파일을 생성하지 못합니다.
## 또한 가상유저는 기본적으로 anonymous의 권한을 갖고 있습니다.
#virtual_use_local_privs=NO

## 가상유저들을 지칭할 가상의 변수를 지정합니다. (기본값 = none)
#user_sub_token=$USER

## 가상유저들이 로그인 후 이동될 디렉토리를 지정합니다. (기본값 = none)
#local_root=/home/virtual/$USER
#
###################################### Anonymous Settings ######################################
## 익명 사용자에 대한 설정 입니다. ##
################################################################################################
#
############################## 기본 설정 ##############################
#
## 익명 사용자의 접속에 대한 설정을 합니다. (기본값 = YES)
anonymous_enable=NO

## 익명사용자의 SSL을 통한 보안접속을 지원할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용됩니다.
#allow_anon_ssl=NO

## 로그인 거부 리스트 사용에 대한 설정을 합니다. (기본값 = NO)
## => /etc/vsftpd.banned_emails 에 설정된 주소로 로그인을 거부할 수 있습니다.
## 만약 anonymous@ 라고 설정해두면, anonymous@를 사용하는 사용자는 접속할 수 없게됩니다.
#deny_email_enable=NO

## 로그인 거부 파일을 지정합니다. (기본값 = /etc/vsftpd.banned_emails)
## => deny_email_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
#banned_email_file=/etc/vsftpd.banned_emails

## 명시된 이메일 주소로만 접속을 허용할 지 설정합니다. (기본값 = NO)
#secure_email_list_enable=NO

## 접속을 허용할 이메일 주소 파일을 지정합니다. (기본값 = /etc/vsftpd.email_passwords)
## => secure_email_list_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
#email_password_file=/etc/vsftpd.email_passwords

## 익명 사용자의 접속에 사용될 계정명을 지정합니다. (기본값 = ftp)
#ftp_username=ftp

## 익명 사용자가 접속할 때 패스워드를 묻지않고 접속시킬 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 접속시 패스워드를 묻지 않습니다.
#no_anon_password=NO

## 클라이언트 접속마다 하나의 프로세스가 작동되도록 할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 접속하는 수만큼 프로세스가 작동되므로 효율이 좋습니다.
#one_process_model=NO

## 익명 사용자의 기본 디렉토리를 지정합니다. (기본값 = none)
## => 일반적으로 익명 사용자의 접근을 허용하면 ftp_username에 지정된 사용자의
## 홈 디렉토리가 기본적으로 설정됩니다.
## 그렇지만 만약 변경할 필요가 있을 경우에 이 옵션을 사용하면 됩니다.
#anon_root=/var/ftp/pub

## 익명 사용자의 다운로드 최대전송률을 지정합니다. (기본값 = 0)
## => 다운로드 속도를 제한할때 사용하며, 단위는 bps 입니다.
#anon_max_rate=0
#
############################## 권한 설정 ##############################
#
## 익명 사용자의 업로드에 대한 설정을 합니다. (기본값 = NO)
## => Global Setting에서의 write_enable 옵션이 허용되었을 경우에
## 익명 사용자가 업로드 가능한 디렉토리에 파일을 업로드할 수 있게 합니다.
#anon_upload_enable=NO

## 익명 사용자들의 다운로드에 대한 설정을 합니다. (기본값 = YES)
## => 익명 사용자들이 읽기 가능한 파일을 다운로드 할 수 있게 설정합니다.
#anon_world_readable_only=YES

## 익명 사용자의 디렉토리 생성에 대한 설정을 합니다. (기본값 = NO)
## => 익명 사용자가 쓰기 가능한 디렉토리에서 새로운 디렉토리를 생성할 수 있습니다.
#anon_mkdir_write_enable=NO

## 익명 사용자의 파일 삭제,변경에 대한 설정을 합니다. (기본값 = NO)
## => 파일 삭제 및 파일명 변경등과 같은 기능을 사용할 수 있게 합니다.
#anon_other_write_enable=NO

## 익명 사용자의 소유권 변경이 가능한 계정명을 설정합니다. (기본값 = root)
#chown_username=root

## 익명 사용자의 소유권 변경에 대한 설정을 합니다. (기본값 = NO)
## => 익명으로 업로드된 파일을 chown_username 옵션으로 명시된 사용자의
## 소유권으로 변경되도록 할 수 있습니다.
#chown_uploads=NO

## 익명 사용자의 파일생성 umask 값을 지정 합니다. (기본값 = 077)
## => umask에 대한 설명은 local_mask의 설명을 참조하시기 바랍니다.
#anon_umask=022
#
#######################################################################

 

by 융현 | 2007/10/03 02:52 | Linux 관련 | 트랙백 | 덧글(0)

vsftp

vsftp 설치 및 설정내역

 

1. vsftpd FTP 서버에 대해

vsftpd는 UNIX 시스템에서 사용할 수 있는 free FTP 서버(라이센스는 GPL)이다.
vsftpd가 내세우고 있는 것은 보안, 성능, 안정성이다. 지금까지 vsftpd의 자체 보안 문제가 있어
보안권고가 나온 적은 없다.(Redhat의 rpm 패키지중에 tcp_wrappers 지원없이 만들어져서 업데이트
rpm은 나온 적 있음)

* 지원 및 테스트된 OS

- Linux (Redhat, SuSE, Debian)
- Solaris (버전에 따라 IPv6나 inet_aton함수때문에 설치가 잘 안될 수 있음)
- FreeBSD, OpenBSD
- HP-UX
- IRIX

* 주요 기능

- 가상 IP별 별도의 환경 설정 기능 (설정파일의 listen_address= 이용)
- 가상 사용자 설정
- 전송 대역폭 지정
- PAM 지원 (버전 1.2.0부터는 PAM을 통한 wtmp에 로긴 로그를 남김)
- xferlog 표준 로그 파일보다 상세한 자체 로그 파일 형식 지원
- Standalone 방식과 inetd(xinetd)를 통한 운영 모두 지원
- IP별 다른 환경 파일 지정 기능 (tcp_wrappers와 함께 사용할 때)
- ...

 

 

 

 

2. vsftpd 설치

※ 설치는 Redhat 기준. 솔라리스의 PAM에 대한 것은 README.solaris 파일 참조한다.

http://vsftpd.beasts.org/ 에서 최신버전(현재 1.2.0)의 소스를 받아온다.

-------------------------------------------------------------
# tar xvfz vsftpd-1.2.0.tar.gz
# cd vsftpd-1.2.0
-------------------------------------------------------------

한글로 된 파일명을 전송할 때 로그에 파일명이 ???? 로 남지 않도록
logging.c 파일을 연 후 140번째 줄의

str_replace_unprintable(p_str, '?');

를 다음처럼 주석 처리한다.

/* str_replace_unprintable(p_str, '?'); */

또한 tcp_wrappers를 통한 접속제어를 사용하려면 builddefs.h 에서

#undef VSF_BUILD_TCPWRAPPERS 를
#define VSF_BUILD_TCPWRAPPERS 로 바꾼다.

-------------------------------------------------------------
# make
# make install (vsftpd 데몬, man page, xinetd 용 설정 파일 설치)
# cp vsftpd.conf /etc (환경설정 파일 복사)
# chmod 600 /etc/vsftpd.conf
# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd (PAM 설정 파일 복사)
-------------------------------------------------------------

/etc/pam.d/vsftpd 첫번째 줄에 다음과 같이 있다.

pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

즉, /etc/ftpusers 파일에 존재하는 ID는 접속할 수 없게된다.(sense=deny)

-------------------------------------------------------------
# FTP 접속을 허용하지 않을 ID를 등록한다.
# /etc/passwd를 참조해서 설치할 서버의 환경에 맞게 등록
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
smmsp
xfs
gdm
mysql

 

 

 

 

 

3. 설정내역

# anonymous 사용자의 접속 허용 여부, 즉 anonymous ftp (default = YES)
# 공개된 형태의 FTP 서버로 운영할 것이 아니라면 NO로 한다.
anonymous_enable=NO

# 로컬 계정 사용자의 접속 허용 여부
local_enable=YES

# write 명령어 허용 여부
write_enable=YES

# 로컬 계정 사용자용 umask
local_umask=022

# anonymous 사용자가 파일을 업로드 할 수 있는지 여부
# anon_upload_enable=NO
#
# anonymous 사용자의 디렉토리 생성 허용 여부
# anon_mkdir_write_enable=NO
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES

# xferlog 표준 포맷으로 로그를 남길지 여부
# 아래에서 NO로 설정했을 때를 설명함
xferlog_std_format=NO
# 파일 전송 로그 파일명
#xferlog_file=/var/log/vsftpd.log
#
# 파일 전송 로그를 남길 것인지 여부
xferlog_enable=NO

# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#

#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that turning on ascii_download_enable enables malicious remote parties
# to consume your I/O resources, by issuing the command "SIZE /big/file" in
# ASCII mode.
# These ASCII options are split into upload and download because you may wish
# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
# on the client anyway..
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# FTP 서버 접속할 때 로긴 메시지 (default = vsFTPd 버전번호)
# 한글 사용 가능
# ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails

#
# 사용자의 홈디렉토리를 벗어나지 못하도록 제한하기 위한 설정
# 제한이 필요할 경우 YES로 바꾼 후 제한할 사용자 ID를 chroot_list_file= 에 설정한 파일에
# 지정한다.
# chroot_local_user= 설정과 관련이 있으니 '3. 문제 해결'을 꼭 읽어보라.
#
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES

# PAM 파일명을 지정 (설치할 때 /etc/pam.d/vsftpd명으로 복사함)
pam_service_name=vsftpd

userlist_enable=YES
#enable for standalone mode
listen=YES
tcp_wrappers=YES

 

 

 

 

4. 문제 해결

1) ftpwho 같은 명령은 있나?
  또한 last를 해도 접속된 걸 확인할 수가 없는데 방법이 없나?

 ftpwho 형태의 명령은 없으며 임시적으로 다음 명령어 등으로 확인할 수 있다.

 # ps -ef|grep vsftpd
 # fuser -v ftp/tcp

 vsftpd v1.2.0이상부터 PAM을 통해 wtmp에 로그를 남기므로 last로 접속여부를 확인할 수 있다.

2) 한글 파일명이 전송될 때는 vsftpd.log 에 ???? 로 남는다. 해결책은?

 vsftpd는 출력할 수 없다고 판단하는
 ASCII 코드 31 이하, 128~159, 177 문자를 모두 ? 로 바꿔서 저장을 한다.
 따라서 이 부분을 처리하지 않고 저장하도록 소스를 수정한 후 컴파일하면 해결된다.

3) 사용자가 홈디렉토리를 못 벗어나게 하고 싶는데?

/etc/vsftpd.conf에 다음을 추가하면, 모든 사용자는 자신의 홈디렉토리만 접근할 수 있다.

chroot_local_user=YES

또한 특정 사용자로만 제한을 하고 싶다면 다음과 같이 한다. /etc/vsftpd.chroot_list에는 제한할
사용자 ID를 한줄에 하나씩 나열하면 된다.

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

주의할 것은 chroot_local_user=YES와 chroot_list_enable=YES를 함께 사용할 경우에는
/etc/vsftpd.chroot_list에 포함된 사용자 ID만 제한없이 홈디렉토리를 벗어날 수 있다.
즉, 반대로 작용한다.

standalone으로 FTP서버가 동작중이면 재실행 필요. standalone에 대해서는 6)번에서.

4) root로 접속할 수는 없나?

 가능하면 root 접속은 허용하지 않기를 바란다.
 /etc/ftpusers 파일에서 root를 빼면 접속이 가능하다.

5) ID/비밀번호가 정확히 맞는데 로긴할 때 자꾸 530 Login incorrect. 라고 나온다.

 /etc/ftpusers (또는 vsftpd.ftpusers)에 등록된 사용자인지 확인한다.
 여기에 등록된 사용자는 로긴할 수 없다. 이럴 때 /var/log/messages에 다음과 같은 로그가 남는다.

 Aug 16 22:21:52 truefeel vsftpd: PAM-listfile: Refused user xxxxxxxx for service vsftpd

6) standalone으로 운영하고 싶다.
  (즉, apache나 sendmail처럼 xinetd 통하지 않고 운영을 원한다.)

 /etc/xinetd.d/vsftpd (vsftpd가 아닌 다른 파일명일 수 있음) 에서 disable = yes 로 변경하여
 xinetd로 서비스 하지 않도록 설정한다. xinetd 를 재실행하면 이제 xinetd를 통한 ftp 서비스는 종료된다.

 레드햇의 경우 /etc/rc.d/init.d/xinetd restart

 이제 vsftpd 데몬를 실행한다. (소스로 설치시 기본 경로는 /usr/local/sbin)

 # /usr/local/sbin/vsftpd &

7) 다른 포트(기본 21번)를 사용하고 싶다. (예를 들어 11121번 포트를 원할 때)

 * xinetd를 이용하는 경우

  /etc/service 에 'ftp2  11121/tcp' 한 줄을 추가한다.
  그리고 /etc/xinetd.d/vsftpd (vsftpd가 아닌 ftp와 같은 다른 파일명일 수 있음) 에서
  service ftp 를 service ftp2로 바꾸고, xinetd 를 재실행한다.

 * standalone으로 운영하는 경우

  /etc/vsftpd.conf 에서 listen_port=11121 을 추가하고 vsftpd 서버를 재실행한다.

 바뀐 포트로 운영중인지 확인은 netstat -atnp(리눅스) 또는 netstat -an(그 이외 유닉스)

8) 업로드 파일 크기를 제한하는 방법은 없나요? 이를테면 5MB이상의 파일은 업로드 못한다든지.

현재 1.2.1버전까지 vsftpd 자체에 설정하는 방법은 없습니다.

5. 참고할만한 문서

* vsftpd 1.2.0 설치 문서
 ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.2.0/INSTALL
* vsftpd.conf man page
* vsftpd에서 한글파일로그와 lastlog 로긴확인하기 (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=4
* vsftpd에서 전송속도 제한 (bandwidth limit) (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=21

 

 

 

 

 

vsftpd의 다양한 기능 설정(vsftpd.conf)
  vsftpd는 다양한 기능이 있습니다. 꼭 필요한 몇개의 지시자에 대해 알아보도록 하겠습니다.

  1) 아스키모드로 파일전송 하려면?
vsftp는 기본적으로 아스키모드(ASCII)로의 파일 전송을 허용하지 않습니다. 윈도우와 리눅스등의 엔터문자로 인한 text파일 변조(??)등 때문에 기본 허용하지 않습니다. 만약 필요해서 허용 하려면 다음과 같이 설정하시기 바랍니다.

ascii_download_enable=YES
ascii_upload_enable=YES


  2) 쉘권한이 없는 사용자들이 ftp를 사용가능하게 하려면?
대부분의 ftp서버는 로그인시 쉘을 요구하게 됩니다. 하지만 쉘 권한을 주지 않은 사용자들에게 ftp접근 권한을 주려면 /etc/pam.d/vsftpd파일에서 4번째 줄에 #을 입력하여 주석 처리 합니다.
(check_shell=NO 라는 지시자가 있었지만 PAM인증을 받는 곳에서는 작동하지 않았다.)


#%PAM-1.0
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
auth       required     pam_stack.so service=system-auth
#auth       required     pam_shells.so
account    required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth


  3) 사용자 home 디렉토리를 벗어나지 못하게 하려면?
ftp사용자가 자기 home디렉토리를 벗어나지 못하게 하려면 다음과 같이 설정합니다.

chroot_list_enable=YES
chroot_local_user=YES
위와같이 설정합니다. 접속하면 /etc/vsftpd.chroot_list 파일이 없다고 에러가 나게 됩니다.
단순히 touch /etc/vsftpd.chroot_list 이렇게 파일을 만들어 주면 됩니다.
 그리고 특정유저는 제외하려면 /etc/vsftpd.chroot_list 파일에 사용자 계정을 넣어줍니다.



  4) "."으로 시작하는 숨김파일을 기본적으로 보이게 하려면?
리눅스에서 "."으로 시작하는 파일은 숨김 파일입니다. 하지만, 다른 os에서는 "."으로 시작해도 숨김파일으로 취급하지 않는 경우가 있습니다. 이런경우 항상 "."으로 시작하는 파일을 보여주려면 다음과 같이 설정합니다.
force_dot_files=YES



  5) ftp 접속시 파일과 디렉토리의 소유권을 숨기려면?
특수한 목적으로 파일 및 디렉토리의 소유자를 숨길 경우가 있습니다. 이런 경우 다음과 같이 설정하면, ftp라는 사용자로 보이며, 본 ID는 보이지 않습니다.
hide_ids=YES



  6) 하위디렉토리의 파일 및 디렉토리를 볼수 있는 ls -R 명령 허용하려면?
하위디렉토리 리스트를 보여주기 위해서 ls -R 명령어를 내릴때가 있습니다. 이런경우 대부분의 ftp 서버는 부하등의 이유로 막아 두게 됩니다. vsftpd또한 기본적으로 막아 놓은 상태이며, 허용하기 위해서는 다음 지시자를 입력하세요.
ls_recurse_enable=YES



  7) openssh에 chroot 패치가 된 것을 사용하는데 정책을 같이 적용하려면?
openssh에 패치를 가하면, ssh 또한 자기 home 디렉토리를 벗어나지 못하게 설정가능합니다. 이 정책은 /etc/passwd파일의 홈디렉토리 부분에 /home/사용자/./ 와 같이 "/./"을 붙여 사용자를 홈디렉토리로 제한하게 됩니다. 이 정책에 따라 적용하려면, 다음 옵션을 적용하시기 바랍니다.
passwd_chroot_enable=YES


  8) 파일을 올렸는데 시간이 이상하게 보인다면?

대부분의 ftp서버에서 시간 표현은 표준시각(GMT)을 보여주게 됩니다. 국내에서만 사용하는 ftp서버는 다음 옵션으로 국내 시간으로 보여줄 수 있습니다.
use_localtime=YES


  9) 전송속도를 제한하고 싶다면?
다운로드 받는 한 사용자가 네트웍 트래픽을 모두 사용해 버리는 것을 방지하기 위해서 대역폭을 조정해야 하는 경우가 있습니다. 다음 옵션으로 가능합니다. 뒤에 나오는 숫자의 단위는  (Bytes/Sec) 입니다.
local_max_rate=300000

위 설정은 300KByte/Sec의 대역폭을 제공합니다.


  10) 동시 접속자수를 제한하려면?
ftp서버에 접속할 수 있는 최대 접속수를 제한하려면, 아래의 설정으로 제한 가능합니다.
max_clients=10
위 설정은 동시에 10개의 연결으로 제한합니다.


  11) 한 IP당 접속할 수 있는 동시접속 수 제한하려면?
ftp서버의 한 사용자가 대역폭을 모두 사용해 버리는 것을 방지하기 위해, 전송 속도를 제한하면, flashget 등의 유틸리티로 몇개의 접속으로 나눠 받으면 대역폭 제한을 우회 할 수 있습니다. 이런경우 한 IP에서 접속 가능한 동시접속 수를 제한하므로 해결 가능합니다.
max_per_ip=2
위 설정은 한 IP에서 접속할 수 있는 연결을 2개로 제한합니다.


  12) PASSIVE 모드 사용시 사용하는 포트 범위를 제한하려면?
FTP에서 데이터 전송을 위해서 20번 포트를 사용합니다. 이경우 서버에서 클라이언트 쪽으로 연결을 하기 때문에 중간에 방화벽 또는 공유기등을 사용한다면, 정상작동하지 않을 수 있습니다. 이런 문제를 해결하기위해서 PASSIVE모드라는 것이 있고, 이 모드에서는 서버의 1024이후 포트를 사용합니다. 이 포트의 범위를 제한하기 위해서는 다음과 같이 설정합니다.
pasv_min_port=40000
pasv_max_port=50000
위 설정은 PASSIVE에서 사용할 포트를 40000~50000로 합니다.



  13) mp3, wmv 등의 확장자를 가진 파일의 업로드를 금지하려면?
ftp를 통해 인증된 사용자가 파일을 올리는 것을 막는 방법은 거의 없었습니다. 이 vsftpd는 특이하게 특정파일 패턴을 제한하는 기능이 있습니다.
deny_file={*.mp3,*.wmv}
위 설정은 mp3, wmv 파일을 전송하지 못하게 하는 방법입니다.



  14) 특정파일 패턴을 숨기려면?
특정파일이 서버내에는 존재하지만, ftp접속시 보여지지 않게 설정할 수 있습니다. 다음예를 보시기 바랍니다.
hide_file={*.mp3,.hidden,hide*,h?}
위 설정은 mp3파일, .hidden 파일, hide로 시작하는 파일을 보여지지 않게 하는 옵션입니다.

 

 

 

 

 

 

 

-----------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

####################################### Global Settings ########################################
## VsFTPd의 전체 설정 입니다. ##
################################################################################################
#
############################## 기본 설정 ##############################
#
## VsFTP 데몬을 background로 실행할 것인지 설정 합니다. (기본값 = NO)
## => VsFTP 데몬은 기본적으로 inetd 모드로 동작이 됩니다. 따라서 독립모드(standalone)로
## 데몬을 운영하실 거라면 이 옵션과 listen 옵션을 모두 YES로 켜주셔야 됩니다.
## 반대로 VsFTP 데몬을 inetd 모드로 운영하시려면 이 옵션과 listen 옵션을 비활성화 하시면 됩니다.
## 일반적으로 FTP 데몬은 많은 접속이 있을 경우에 standalone 모드로 운영하는것이 좋으며,
## 많은 접속이 없는 경우에는 inetd 모드로 운영하는것이 시스템 자원효율에 좋습니다.
background=YES

## background 옵션과 같이 사용되며, 이 옵션은 listen_port에서 들어오는 요청에 대해서
## 데몬이 요청을 받아드릴지에 대해 설정합니다. (기본값 = NO)
## => 만약 데몬을 독립모드(standalone)로 운영하실 거라면 background 옵션과 같이 이 옵션도
## 함께 활성화 시켜야 됩니다.
listen=YES

## listen 옵션과 동일하지만, IPv6에서 운영할 때 사용 합니다. (기본값 = NO)
## => 일반적으로 IPv6는 사용하지 않으므로 비활성화 하시면 됩니다.
listen_ipv6=NO

## VsFTP 데몬이 독립모드(standalone)로 동작할 때 사용할 포트를 지정합니다. (기본값 = 21)
listen_port=21

## 멀티 FTP 데몬을 사용할 때 요청을 받아드릴 IP를 설정합니다. (기본값 = none)
## => 이 옵션은 multi-homed의 설정을 참조하시기 바랍니다.
#listen_address=none

## listen_address와 동일하며 IPv6에서 운영할 때 사용 합니다. (기본값 = none)
#listen_address6=none

## NAT를 사용하는 클라이언트의 공용 IP를 설정할 때 사용 합니다. (기본값 = none)
## => 일반적으로 설정하지 않아도 상관 없습니다.
#pasv_address=none

## VsFTPd가 구동될 서버의 유저를 설정합니다. (기본값 = nobody)
nopriv_user=nobody

## FTP 서버에 접속할 수 있는 클라이언트의 최대수를 제한하는 옵션 입니다. (기본값 = 0)
## => 기본값인 0으로 설정하면 제한을 두지 않습니다.
max_clients=100

## IP당 접속할 수 있는 최대수를 제한하는 옵션 입니다. (기본값 = 0)
## => 기본값인 0으로 설정하면 제한을 두지 않습니다.
max_per_ip=30

## 계정 사용자의 최대전송률을 지정합니다. (기본값 = 0)
## => 업/다운로드의 속도를 제한할때 사용하며, 단위는 bps 입니다.
local_max_rate=0

## 한번에 전송될 크기를 지정합니다. (기본값 = 0)
## => 이 옵션은 전송할 파일을 지정한 단위로 나눠서 전송하도록 하는 옵션입니다.
## rate 옵션과 밀접한 관계가 있으며, 기본값인 0으로 설정하면, vsftpd가 알아서 판단하므로
## 되도록이면 수정하지 않는것이 좋습니다.
## vsftpd의 제작자 또한 이 옵션을 따로 수정할 이유가 없을 것이라고 말하고 있습니다.
trans_chunk_size=0

## 서버의 FTP 데몬시간을 서버의 표준시간으로 고정할지 설정합니다. (기본값 = NO)
## => 만약 이 옵션을 비활성화 하게되면 표준시각(GMT)를 보여주므로, 한국의 경우 9시간의 오차가 발생합니다.
use_localtime=YES

## 프로토콜의 현재 상태를 출력해줄 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 ps 명령어를 사용했을때 세션의 현재 상태도 보여줍니다.
## 또한 LTN에서 제공하는 ftpwho 스크립트를 사용할 때에도 이 옵션을 활성화 하셔야 됩니다.
setproctitle_enable=YES

## 특정 사용자의 개별 설정 파일을 지정합니다. (기본값 = none)
## => 이 옵션을 사용하면 /etc/vsftpd/vsftpd.conf의 지시문을 무시하고 사용할 수 있습니다.
#user_config_dir=none
#
############################## 접속 설정 ##############################
#
## 계정 사용자의 접속에 대한 설정을 합니다. (기본값 = NO)
local_enable=YES

## 명시된 사용자만 로그인을 허용할 때 사용하는 옵션입니다. (기본값 = NO)
## => userlist_deny 옵션이 비활성화 된 상태에서만 작동합니다.
userlist_enable=NO

## 명시된 사용자가 로그인을 할 수 없도록 제한하는 옵션 입니다. (기본값 = YES)
## => userlist_enable 옵션이 비활성화 된 상태에서만 작동하며, 서로 반대되는 개념 입니다.
userlist_deny=YES

## 명시된 사용자를 읽어올 파일을 지정합니다. (기본값 = /etc/vsftpd.user_list)
userlist_file=/etc/vsftpd.user_list

## 디렉토리 목록의 사용자와 그룹 필드들에 있는 숫자 ID 들이 보이는 것이 기본값 입니다.
## 당신은 이 파라미터를 활성화 함으로써 글자 이름을 사용할 수도 있습니다.
## 그러나 이 항목은 성능상의 이유로 기본적으로 비활성화 되어 있습니다. (기본값 = NO)
text_userdb_names=NO

## PAM 사용자 인증을 할 때 사용될 인증파일을 지정합니다. (기본값 = ftp)
## => VsFTPd를 RPM으로 설치하게 되면 일반적으로 vsftpd로 인증파일이 생성됩니다.
pam_service_name=vsftpd

## TCP wrappers에 의해서 FTP 접속을 제어 할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 /etc/hosts.allow와 /etc/hosts.deny에 의해서 제어할 수 있습니다.
## 그러나 이 옵션을 사용하려면 vsftpd 소스중 builddefs.h 파일에서 설정을 변경해야 됩니다.
## 변경전 -> #undef VSF_BUILD_TCPWRAPPERS
## 변경후 -> #define VSF_BUILD_TCPWRAPPERS
## 참고: LTN에서 제공하는 vsftpd는 이미 패치되어 있습니다.
tcp_wrappers=YES

## TLS를 사용할 것인지에 대해 설정합니다. (기본값 = YES)
## => 이 옵션은 TLS를 활성화하며, TLS가 가능한 클라이언트가 이용하는데 도움이 됩니다.
ssl_tlsv1=YES

## SSL을 통한 보안접속을 지원할 것인지에 대해 설정합니다. (기본값 = NO)
## => 만약 OpenSSL에 대해서 컴파일 되어 있고, 이 옵션을 허용할 경우 vsftpd는 SSL을 통한 보안 접속을 지원합니다.
## 이 옵션은 제어 연결을 지원(로그인을 포함)하며, 또한 데이터 연결도 지원 합니다.
## 사용자는 SSL을 지원하는 클라이언트를 필요로 할 것이며, 반드시 필요한 경우에만 허용하는것이 좋습니다.
## 그러나 vsftpd는 OpenSSL 라이브러리의 보안과 관련한 게런티를 만들 수 없으며,
## 이 옵션을 활성화 한다는것은 OpenSSL 라이브러리의 보안을 믿는다는 것을 전제로 합니다.
ssl_enable=NO

## SSL v2 프로토콜 연결을 허용할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, TLS v1 연결들을 선호 합니다.
ssl_sslv2=NO

## SSL v3 프로토콜 연결을 허용할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, TLS v1 연결들을 선호 합니다.
ssl_sslv3=NO

## SSL 인증서의 위치를 지정합니다. (기본값 = none)
## => SSL의 암호화 접속을 사용하기 위해, DSA 인증서의 위치를 지정합니다.
#dsa_cert_file=none

## 이 옵션은 vsftpd가 암호화 된 SSL 연결들에 대해 어떤 SSL 암호화 방식을 선택하는지에 따라 사용됩니다.
## 더 자세한 사항은 관련 암호 메뉴얼 페이지를 보십시요.
## 암호화를 알리지 않는 것은 원격에서 선택된 암호화 방식의 취약점을 공격하려고 불법적인 원격 공격을
## 막기 위한 유용한 보안 지침이 될 수 있습니다. (기본값 = DES-CBC3-SHA)
#ssl_ciphers=DES-CBC3-SHA

## 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, 만약 이 옵션이 활성화 되어 있다면
## 모든 비익명 로그인은 데이터 연결 상태에서 데이터를 주고 받기 위해 보안 SSL 연결을 사용하도록
## 강제적으로 설정됩니다. (기본값 = YES)
#force_local_data_ssl=YES

## 이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, 만약 이 옵션이 활성화 되어 있다면
## 모든 비익명 로그인은 비밀번호를 전달하기 위해 보안 SSL 연결을 사용하도록 강제적으로 설정됩니다.
## (기본값 = YES)
#force_local_logins_ssl=YES
#
############################ 대기시간 설정 ############################
#
## 액티브 모드(Active Mode)를 사용하는 클라이언트의 접속 허용시간을 설정합니다. (기본값 = 60/초)
## => 클라이언트의 요청패킷(SYN Packet)을 받은뒤, 지정된 시간내에 접속이 안될경우 종료합니다.
connect_timeout=60

## 패시브 모드(Passive Mode)를 사용하는 클라이언트의 접속 허용시간을 설정합니다. (기본값 = 60/초)
## => 클라이언트의 요청패킷(SYN Packet)을 받은뒤, 지정된 시간내에 접속이 안될경우 종료합니다.
accept_timeout=60

## 데이터 전송 대기시간을 설정합니다. (기본값 = 300/Secs)
## => FTP 서버로부터 데이터를 업/다운로드를 한 뒤 아무런 작동도 안할때 접속이 종료되도록 합니다.
data_connection_timeout=300

## 접속 대기시간을 설정합니다. (기본값 = 300/Secs)
## => FTP에 접속한 뒤 아무런 작동도 안할 때 지정된 시간이후 접속이 종료되도록 합니다.
idle_session_timeout=300
#
############################# 메시지 설정 #############################
#
## 사용자가 FTP 서버에 접속했을 때 보여줄 환영 메시지 파일을 설정합니다. (기본값 = none)
#banner_file=/etc/vsftpd/welcome.msg

## 사용자가 FTP 서버에 접속했을 때 보여줄 환영 메시지를 설정합니다. (기본값 = none)
ftpd_banner=Welcome to vsftpd server

## 디렉토리의 메시지 파일을 사용자에게 보여줄 것인지 설정합니다. (기본값 = NO)
dirmessage_enable=NO

## 메시지 파일을 지정 합니다. (기본값 = .message)
## => dirmessage_enable 옵션을 허용했을 경우에 메시지를 읽어올 파일을 지정합니다.
message_file=.message
#
############################## 모드 설정 ##############################
#
## 데이터 전송을 위해서 Active Mode를 사용할 것인지 설정합니다. (기본값 = YES)
port_enable=YES

## 액티브모드(Active Mode) 데이터 전송 포트인 20번을 사용할 것인지 설정 합니다. (기본값 = NO)
connect_from_port_20=YES

## 데이터 전송 포트를 지정합니다. (기본값 = 20)
## => connect_from_port_20 옵션이 활성화되었을때 사용되는 포트를 지정합니다.
ftp_data_port=20

## 데이터 전송을 위해서 Passive mode를 사용할 것인지 설정합니다. (기본값 = YES)
## => Active Mode로 접근할 수 없는 사용자들을 위해 활성화 하는것이 좋습니다.
pasv_enable=YES

## 동일한 IP주소에서 이루어지는 데이터 연결을 보장해주는 보안체크 기능을 사용할 것인지
## 설정합니다. (기본값 = NO)
pasv_promiscuous=NO

## 패시브 모드로 연결시 할당될 최대 및 최소 포트를 설정하는 옵션 입니다. (기본값 = 0)
## => 일반적으로 50000~60000 포트를 지정하는것이 좋으며, 기본값인 0으로 설정하게 되면
## well-known port를 제외한 무작위 포트를 이용하게 됩니다.
pasv_min_port=0
pasv_max_port=0

## 아스키모드(ASCII Mode) 전송 허용에 대해서 설정합니다. (기본값 = NO)
## => 이 옵션은 악의적인 사용자에 의해서 시스템의 자원이 고갈될 수 있으므로 주의해야 됩니다.
ascii_download_enable=YES
ascii_upload_enable=YES
#
############################## 권한 설정 ##############################
#
## 파일 생성 umask 값을 지정합니다. (기본값 = 077)
## => umask는 "max permission-umask=create permission" 의 공식을 가지고 있습니다.
## 디렉토리의 기본값은 0777이며, 파일의 기본값은 0666 입니다.
## 따라서 일반적인 시스템의 파일생성 퍼미션인 644를 생성하려면 022로 해야 됩니다.
## 디렉토리: 0777-022=0755, 파일: 0666-022=0644
local_umask=022

## 파일이 업로드 되었을 때의 퍼미션을 지정해주는 옵션 입니다. (기본값 = 0666)
## => 이 옵션은 반드시 umask 옵션보다 아래에 있어야 됩니다.
file_open_mode=0644

## 접속한 디렉토리의 파일리스트를 보여줄 지 설정합니다. (기본값 = YES)
dirlist_enable=YES

## 히든 파일/디렉토리를 보여줄 것인지 설정하는 옵션 입니다. (기본값 = NO)
## => 히든 파일/디렉토리는 dot(.) 으로 시작하는 것을 말합니다.
force_dot_files=NO

## 이 옵션이 활성화되면, vsftpd는 ~chris/pics와 같이 사용자 계정 이름에 틸드 표시가 따라오는 경우의
## 경로명을 접근하도록 시도하고 해석할 것입니다.
## vsftpd는 항상 ~ 와 ~/somthing 을 해석한다는 것을 주의하시기 바랍니다.
## (여기서 ~ 는 기본적으로 로그인 했을 때의 디렉토리로 해석됩니다.)
## ~user 경로들은 _current_ chroot() 에서 /etc/passwd 파일을 찾을 수 있을 경우에만 해석 될 수 있을 것입니다.
## (기본값 = NO)
tilde_user_enable=NO

## 디렉토리 목록에서 UID를 보여주지 않고, 모두 FTP로 표시할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화 하면 모든 파일의 소유권이 FTP로 표시되므로 보안에 도움이 될 수 있습니다.
hide_ids=NO

## 사용자에게 STOR(저장),DELE(삭제),RNFR(이름변경),RNTO(이름변경),MKD(디렉토리생성),RMD(디렉토리삭제),
## APE(이어올리기), SITE(umask,chmod)등의 권한을 허용할지 설정합니다. (기본값 = NO)
## => 이 옵션이 비활성화되어 있으면 사용자는 FTP 서버에 데이터를 쓸 수 없습니다.
write_enable=YES

## 다운로드에 대한 권한을 설정합니다. (기본값 = YES)
download_enable=YES

## 사용자가 퍼미션을 변경할 수 있도록 설정합니다. (기본값 = YES)
chmod_enable=YES

## 이 옵션은 당신의 플랫폼에서 sendfile() 시스템 호출을 사용하는 것과 관련된 이익을 테스트 할 때
## 사용되는 내부 설정입니다. (기본값 = YES)
use_sendfile=YES

## 사용자에게 허가할 명령어를 지정합니다. (기본값 = none)
#cmds_allowed=PASV,RETR,QUIT

## 업로드를 거부할 파일명을 지정합니다. (기본값 = none)
#deny_file={*.mp3,*.mov}

## 숨길 파일명을 지정합니다. (기본값 = none)
## => 이 옵션을 사용하면 서버에 실제로 데이터는 존재하지만, FTP 사용자에게는 보이지 않도록
## 설정하는 기능입니다. 악의적인 사용자에게 간단한 fake를 걸 수 있습니다.
#hide_file={*.mp3,*.mov}

## async ABOR 명령어를 사용할 수 있도록 설정합니다. (기본값 = NO)
## => 일부 FTP 클라이언트에서 파일전송을 취소했을 경우, 취소되지 않은 상태로 있는 경우가
## 생길 수 있는데 그것을 방지하기 위해 사용할 수 있습니다.
## 그러나 보안상 좋지 않기 때문에, 비활성화 하시는것이 좋습니다.
async_abor_enable=NO

## ls -R 명령을 허용할 것인지를 설정하는 옵션 입니다. (기본값 = NO)
## => 만약 하위디렉토리나 파일이 매우 많은 상위디렉토리에서 이 옵션을 활성화하게 되면
## 시스템 자원의 낭비가 심하므로, 비활성화 하시는것이 좋습니다.
ls_recurse_enable=NO
#
############################## 보안 설정 ##############################
#
## 모든 계정 사용자가 자신의 홈상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => FTP 사용자가 시스템에 접근할 수 있으면 위험하므로 반드시 활성화 하는것이 좋습니다.
chroot_local_user=YES

## SSH로 접속했을 때 자신의 홈 상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => chroot_local_user 옵션이 활성화되었고, OpenSSH에 패치를 했을경우, SSH 또한 자신의
## 홈상위 디렉토리를 접근할 수 없도록 설정할 수 있으며, /etc/passwd 파일의 홈 디렉토리
## 필드의 /home/사용자/./와 같이 "/./"를 붙여 사용자를 홈디렉토리에 제한하게 합니다.
passwd_chroot_enable=NO

## 명시된 사용자가 자신의 홈상위 디렉토리를 접근할 수 없도록 설정합니다. (기본값 = NO)
## => 이 옵션은 chroot_local_user 옵션이 비활성화되어 있어야 사용할 수 있습니다.
## => 전체 적용이 아니라 일부 사용자만 제한할때 편하지만, 개별 적용은 보안상 좋지 않습니다.
chroot_list_enable=NO

## 사용자의 홈상위 디렉토리를 설정한 파일을 지정합니다. (기본값 = /etc/vsftpd.chroot_list)
## => chroot_list_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
chroot_list_file=/etc/vsftpd.chroot_list

## secure chroot()에 사용될 디렉토리를 지정합니다. (기본값 = /usr/share/empty)
## => 이 옵션에서 지정된 디렉토리는 비어있어야되며, ftp 사용자에 대해 쓰기 권한이 없어야 됩니다.
#secure_chroot_dir=/usr/share/empty
#
############################## 로그 설정 ##############################
#
## VsFTP의 기본 로그 파일을 지정합니다. (기본값 = /var/log/vsftpd.log)
## => 이 옵션은 xferlog_enable 옵션과 xferlog_std_format 옵션이 비활성화일때 작동하며,
## dual_log_enable 옵션이나 syslog_enable 옵션이 활성화될때 사용됩니다.
#vsftpd_log_file=/var/log/vsftpd.log

## 2중 로그를 기록할 것인지에 대해 설정합니다. (기본값 = NO)
## => 만약 이 옵션을 활성화하면, /var/log/xferlog와 /var/log/vsftpd.log에 로그가 기록됩니다.
#dual_log_enable=NO

## syslogd 데몬을 이용해서 로그를 기록할 것인지 설정합니다. (기본값 = NO)
#syslog_enable=NO

## xferlog_enable 옵션을 활성화했을 경우에 로그를 기록할 파일을 지정합니다.
## (기본값 = /var/log/vsftpd.log)
xferlog_file=/var/log/vsftpd.log

## 파일의 송/수신 결과를 xferlog_file 옵션으로 지정된 로그파일에 기록합니다. (기본값 = NO)
xferlog_enable=YES

## 로그를 기록할 때 표준 xferlog 포맷으로 저장할 것인지를 설정합니다. (기본값 = NO)
xferlog_std_format=NO

## FTP Protocol의 모든 내용을 기록할지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 FTP 명령어와 반응이 모두 로깅되므로 디버그에 유용하게 쓰입니다.
log_ftp_protocol=NO

## 로그 파일을 잠글것인지에 대해서 설정합니다. (기본값 = NO)
## => 이 옵션은 vsftpd가 로그 파일을 기록할 때, 파일을 잠그는 것을 막는 옵션 입니다.
## 보통은 활성화 하지 않아도 되며, 솔라리스/베리타스 파일 시스템 조합에서 때때로
## 로그파일을 잠그려는 시도를 하는 운영체제 시스템 버그를 피하기 위해 존재 합니다.
no_log_lock=NO

## 사용자의 접속 기록을 남길 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 utmp/wtmp 파일에 접속 기록이 로깅됩니다.
## 따라서 last 명령어로 접속 여부를 확인하려면 활성화 하셔야 됩니다..
session_support=YES
#
#
##################################### Virtual User Settings ####################################
## 가상 사용자에 대한 설정 입니다. ##
################################################################################################
#
## 가상유저 모드로 운영할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 모든 비익명 사용자는 가상 사용자로 접속이 됩니다.
guest_enable=NO

## 가상유저들의 실제 계정을 지정합니다. (기본값 = ftp)
#guest_username=ftp

## 가상유저들의 권한을 실제 계정의 권한처럼 허용할 것인지를 설정합니다. (기본값 = NO)
## => 이 옵션이 활성화되어있지 않으면 가상유저는 FTP에 접속해서 파일을 생성하지 못합니다.
## 또한 가상유저는 기본적으로 anonymous의 권한을 갖고 있습니다.
#virtual_use_local_privs=NO

## 가상유저들을 지칭할 가상의 변수를 지정합니다. (기본값 = none)
#user_sub_token=$USER

## 가상유저들이 로그인 후 이동될 디렉토리를 지정합니다. (기본값 = none)
#local_root=/home/virtual/$USER
#
###################################### Anonymous Settings ######################################
## 익명 사용자에 대한 설정 입니다. ##
################################################################################################
#
############################## 기본 설정 ##############################
#
## 익명 사용자의 접속에 대한 설정을 합니다. (기본값 = YES)
anonymous_enable=NO

## 익명사용자의 SSL을 통한 보안접속을 지원할 것인지에 대해 설정합니다. (기본값 = NO)
## => 이 옵션은 ssl_enable이 활성화 되었을 때만 적용됩니다.
#allow_anon_ssl=NO

## 로그인 거부 리스트 사용에 대한 설정을 합니다. (기본값 = NO)
## => /etc/vsftpd.banned_emails 에 설정된 주소로 로그인을 거부할 수 있습니다.
## 만약 anonymous@ 라고 설정해두면, anonymous@를 사용하는 사용자는 접속할 수 없게됩니다.
#deny_email_enable=NO

## 로그인 거부 파일을 지정합니다. (기본값 = /etc/vsftpd.banned_emails)
## => deny_email_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
#banned_email_file=/etc/vsftpd.banned_emails

## 명시된 이메일 주소로만 접속을 허용할 지 설정합니다. (기본값 = NO)
#secure_email_list_enable=NO

## 접속을 허용할 이메일 주소 파일을 지정합니다. (기본값 = /etc/vsftpd.email_passwords)
## => secure_email_list_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.
#email_password_file=/etc/vsftpd.email_passwords

## 익명 사용자의 접속에 사용될 계정명을 지정합니다. (기본값 = ftp)
#ftp_username=ftp

## 익명 사용자가 접속할 때 패스워드를 묻지않고 접속시킬 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 접속시 패스워드를 묻지 않습니다.
#no_anon_password=NO

## 클라이언트 접속마다 하나의 프로세스가 작동되도록 할 것인지 설정합니다. (기본값 = NO)
## => 이 옵션을 활성화하면 접속하는 수만큼 프로세스가 작동되므로 효율이 좋습니다.
#one_process_model=NO

## 익명 사용자의 기본 디렉토리를 지정합니다. (기본값 = none)
## => 일반적으로 익명 사용자의 접근을 허용하면 ftp_username에 지정된 사용자의
## 홈 디렉토리가 기본적으로 설정됩니다.
## 그렇지만 만약 변경할 필요가 있을 경우에 이 옵션을 사용하면 됩니다.
#anon_root=/var/ftp/pub

## 익명 사용자의 다운로드 최대전송률을 지정합니다. (기본값 = 0)
## => 다운로드 속도를 제한할때 사용하며, 단위는 bps 입니다.
#anon_max_rate=0
#
############################## 권한 설정 ##############################
#
## 익명 사용자의 업로드에 대한 설정을 합니다. (기본값 = NO)
## => Global Setting에서의 write_enable 옵션이 허용되었을 경우에
## 익명 사용자가 업로드 가능한 디렉토리에 파일을 업로드할 수 있게 합니다.
#anon_upload_enable=NO

## 익명 사용자들의 다운로드에 대한 설정을 합니다. (기본값 = YES)
## => 익명 사용자들이 읽기 가능한 파일을 다운로드 할 수 있게 설정합니다.
#anon_world_readable_only=YES

## 익명 사용자의 디렉토리 생성에 대한 설정을 합니다. (기본값 = NO)
## => 익명 사용자가 쓰기 가능한 디렉토리에서 새로운 디렉토리를 생성할 수 있습니다.
#anon_mkdir_write_enable=NO

## 익명 사용자의 파일 삭제,변경에 대한 설정을 합니다. (기본값 = NO)
## => 파일 삭제 및 파일명 변경등과 같은 기능을 사용할 수 있게 합니다.
#anon_other_write_enable=NO

## 익명 사용자의 소유권 변경이 가능한 계정명을 설정합니다. (기본값 = root)
#chown_username=root

## 익명 사용자의 소유권 변경에 대한 설정을 합니다. (기본값 = NO)
## => 익명으로 업로드된 파일을 chown_username 옵션으로 명시된 사용자의
## 소유권으로 변경되도록 할 수 있습니다.
#chown_uploads=NO

## 익명 사용자의 파일생성 umask 값을 지정 합니다. (기본값 = 077)
## => umask에 대한 설명은 local_mask의 설명을 참조하시기 바랍니다.
#anon_umask=022
#
#######################################################################

 

by 융현 | 2007/10/03 02:51 | 트랙백 | 덧글(2)

GSLB

출처 : http://www.datanet.co.kr/tech/read.html?cd=3256&N_cate1=2&N_cate2=17

Tech guide-GSLB(Global Server Load Balancing)

데이터센터 이중화와 DR센터 핵심 구성요소 ‘GSLB’
지능적 DNS 서비스 등 다기능 제공 … 에이전트·에이전트리스 솔루션으로 구분


예측이 불가능한 재해에 대한 피해를 최소화하기 위해 금융권이나 인터넷서비스 업체들은 최근 별도의 데이터센터 이중화 및 재해복구센터 구축하거나 검토를 하고 있다. 이러한 데이터센터 이중화 및 재해복구센터의 핵심 구성요소 중에 하나가 바로 GSLB(Global Server Load Balancing)다. 이번호에서는 GSLB 솔루션을 상세히 살펴보고, 다음 호에서는 GSLB의 적용사례를 소개한다. <편집자>

연재순서
1회 : GSLB 소개(이번호)
2회 : GSLB 적용사례

박정식 //
청어람시스템 네트워크컨설팅 팀장
jspark@cors.co.kr


지난해 12월 27일 타이완에서 발생한 강진으로 한국 등 아시아 각국을 연결하는 해저 광케이블이 녹아 내렸다. 이에 아시아 금융 허브를 자랑하는 홍콩에 전산센터를 둔 금융기관 및 관련 업체들은 이메일, 메신저, 온라인 쇼핑, 주식거래, 게임 등 모든 인터넷 서비스가 사실상 차단됐다.
이처럼 전혀 예상치 못한 사고로 외국에 본사를 둔 금융기관은 엄청난 금융적인 손실과 브랜드 이미지 손실을 가져왔다. 따라서 이러한 예측이 불가능한 재해에 대한 피해를 최소화하기 위해 금융권이나 인터넷서비스 업체들은 최근 별도의 데이터센터 이중화 및 재해복구센터를 구축하거나 검토하고 있다. 데이터센터 이중화 및 재해복구센터의 핵심 구성요소 중 하나가 바로 GSLB(Global Server Load Balancing) 솔루션이다.
GSLB 솔루션은 지리적으로 여러 곳에 분산 배치된 데이터센터나 재해복구센터에 위치한 비즈니스 애플리케이션 서버들을 기업의 서비스 이용자에게 비즈니스 정책에 따른 최상의 서비스를 제공할 수 있는 데이터센터의 서버를 선정해 서비스를 연결하는 기술을 보유하고 있다. GSLB 솔루션을 도입함으로써 특정 센터에 장애가 발생할 경우, 상위의 DNS(Domain Name System)에서 서비스가 가능한 센터의 IP로 우회 연결되도록 한다.


GSLB 개요
GSLB 솔루션은 크게 2가지로 구분할 수 있다. 첫 번째는 기존 L4 로드밸런서에서 발전된 GSLB 솔루션으로 별도의 서버 에이전트를 설치하지 않고 서버의 상태를 점검해 GSLB를 수행한다. F5, 시스코, 파운드리, 넷스케일러, 노텔, 라드웨어 등의 제품이 이에 해당한다.
두 번째로는 각각의 서버에 에이전트를 설치해 서버의 상태정보를 에이전트로부터 GSLB 서버가 수집하고 이를 기반으로 GSLB를 수행하는 제품이다. 엔피아, 오픈테크 등의 제품이 이에 해당한다. GSLB에서 제공하는 기본 기능은 다음과 같다.

1. 지능적인 DNS 서버 기능을 제공한다. 기본적으로 DNS 서버의 기능은 외부에서 www.domain.com과 같은 도메인이름에 대한 IP주소를 사용자에게 알려주는 기능을 제공한다. 사용자는 일일이 접속하고자 하는 사이트의 IP주소를 기억할 필요 없이 기억하기 쉬운 도메인 이름만 알고 있으면 브라우저를 통해 원하는 사이트에 접속할 수 있게 되는 것이다.
그러나 DNS 서버는 복수의 서버 혹은 여러 IP주소를 알려줄 경우에 서버의 서비스 가능 유무나 상태에 대한 정보와 상관없이 설정된 IP주소를 순차적으로 알려준다. 사용자가 접속이 불가능한 IP주소를 알려줄 경우에는 서비스 접속이 안 되는 장애가 발생한다. GSLB는 이와 같은 DNS의 한계를 극복하고 지능적인 DNS 서비스를 가능하게 해주는 솔루션이다.

2. GSLB는 서버의 서비스 상태 및 성능 정보를 수집하고 이를 통해 최적의 서버로 연결시키는 기능을 제공한다. 센터내의 인프라 이상 유무를 확인해 장애를 제거하고 트래픽으로 인해 성능이 저하된 사이트와 서버를 우회할 수 있도록 한다. 각 데이터센터 및 ISP 접속 링크, 부하분산 장비, 서버, 캐시, 엔드유저 콘텐츠 등에서 성능 및 가용성 정보를 취합해 트래픽을 사이트로 전달하기 전에 높은 가용성과 적절한 용량을 보장할 수 있게 한다.

3. 강력한 글로벌 콘텐츠 확인 기능(ECV-Extended Content Verification)을 제공해 서버와 정보를 제공하는 백엔드 서버를 갖추고 있는 사이트에 사용자가 접속할 경우 사이트에서 감지하기 어려운 콘텐츠 에러나 하드디스크 장애, 데이터베이스 오류 등을 사전에 방지할 수 있는 기능을 제공한다. 따라서 사용자는 서비스 접속 및 처리가 가능한 서버로 접속하게 되므로 분산된 서버 전체에 대한 높은 가용성을 보장한다.

4. 지능적인 부하 분산을 제공해 여러 센터에 분산 분포돼 있는 애플리케이션이나 웹 서비스에 적합할 수 있는 다양한 형태의 트래픽 분산 기능을 제공한다. 순차적으로 트래픽을 전달하는 일반적인 라운드-로빈 방식(서버의 IP를 순차적으로 사용자에게 알려주는 방식) 이외에도 가장 연결이 적은 서버로 트래픽을 전달하는 최소 연결(Least Connection) 등 다양한 형태의 부하분산기능을 제공한다.

5. 여러 가지 특별한 기능의 부하분산을 제공하고 있다. 사용자와 로컬 DNS 사이의 홉 수를 기준으로 QoS 부하 분산을 제공해 사용자와 데이터센터 간 홉 수가 가장 작은 데이터센터로 사용자를 연결시켜 빠른 액세스가 이뤄질 수 있도록 제공하고 있다. 또한 동적인 비율로 부하를 분산할 수 있어 대부분의 다른 왠(WAN) 부하분산 장치가 가지고 있는 승자가 모두 갖는 문제를 해결할 수 있다. 일정부분의 트래픽에 대해 최고 성능의 사이트, 2차 사이트 순으로 네트워크 및 서버 자원의 안정도와 성능에 비례해 분배할 수 있는 기능을 제공한다.

6. 동일 사이트가 여러 곳에 분포한 경우에 트래픽을 동일 사이트에 지능적으로 배분해 애플리케이션이나 트랜잭션에 대한 일관성을 유지시켜 주는 기능을 제공한다. 이를 통해 사용자는 동일 사이트 내에서 원하는 정보가 연속적으로 로컬 DNS 서버에 전파돼 백엔드 데이터베이스를 빈번하게 동기화시킬 필요가 없게 한다.

7. 장애시 우회 경로로 접속할 수 있도록 한다. GSLB를 적용하는 중요한 이유 중 하나는 장애나 재난시의 사이트 복구 및 비즈니스 연속성을 보장하는 데 있다. 종합적인 사이트의 가용성을 확인하고 기업에서 트래픽이 폭주하거나 일부 또는 전체 사이트에 장애 시 접속하는 데이터센터를 변경하거나 특정 애플리케이션에 대해서만 제어해 접속하는 다양한 기업 정책에 따른 방법을 선택할 수 있다. 재난으로부터 장애가 정상적으로 복구되면 GSLB 솔루션은 이를 자동으로 인식해 여러 곳에 분산 설치된 서버들에게 트래픽을 분산해 전달한다.

8. 목표 임계치 및 사이트나 애플리케이션 한계치 설정 후 자원이 용량 한계에 부딪혔는지 여부를 확인할 수 있게 한다. 이들 자원이 포화상태일 때 트래픽이 자동으로 다른 위치로 전환된다. 이 기능을 통해 네트워크 트래픽이 폭주 상태거나 기타 이벤트 발생 시에도 장애를 능동적으로 예방할 수 있다.

9. 이용률 향상 원칙을 지원하는데, 이를 통해 하루 중 일정 시간 또는 일정한 운용 조건 하에서 구성 정보를 다이내믹하게 변경시킬 수 있다. 예를 들면 글로벌 트래픽의 일부분을 근무 외 시간 중에 미국 데이터센터에서 유럽 센터로 스위칭이 가능하다. 이를 통해 이용률이 낮은 데이터센터를 활용함으로써 인프라의 용량과 성능을 높일 수 있다.


GSLB 솔루션 적용 고려사항
기업에서 GSLB 솔루션 적용시 고려사항은 다음과 같이 정리할 수 있다.


① DNS 서버로부터 위임 받은 하위 존에 포함된 서버들에 대해서 부하분산을 제공하므로 상위 DNS 서버의 이중화가 필요하다.
② 기업의 서비스에 따라 DNS 서버와 GSLB는 TTL(Time To Live) 시간을 적정하게 조정해 장애시간을 최소화 하도록 설정이 필요하다.
③ GSLB 장비 장애 시에도 안정적으로 운영될 수 있는 GSLB 장비의 이중화 및 장애 우회(Fail-over) 기능이 지원돼야 한다.
④ 장비 설정을 위한 별도의 인터페이스 통신을 암호화해 전달할 수 있도록 SSH나 https와 같은 방법을 제공해야 한다.
⑤ 웜 바이러스 및 서비스 거부 공격 등에 사이트 내에 일반적인 해킹 공격에 대해 트래픽 경로, 지점, 포트 등에 대한 모니터링을 제공하고 패킷 필터링을 제공해 장비 자신을 보호해야 한다.

by 융현 | 2007/10/01 16:49 | 네트워크 기술 | 트랙백 | 덧글(0)

DNS - PTR

DNS 전달자

 - DNS 전달자의 의미는 DNS 쿼리를 받아서 다른 서버에게 전달하는

   기능을 가진 서버를 의미한다.

 ex) Client----->DNS Fowarder----->DNS Server

      여기에서 전달자는 DNS Fowarder 가 전달자이고

      전달자 구성에서 DNS Server IP 주소를 입력해야 한다.

      Client----->Local DNS Server----->External DNS Server(Fowarder)

      여기에서 전달자는 External DNS Server가 전달자이고

      전달자 구성에서 External DNS Server IP Address를 입력해야 한다.

 

DNS Record Type

 - A : Host 이름에 Mapping 되어 있는 IP Address로 구성

  ex) london A 192.168.0.200

 - PTR : IP Address Mapping 되어 있는 FQDN 정보로 구성

           (역방향 조회 영역에서 사용되어짐)

       192.168.0.200 PTR london.nwtraders.msft

 - SOA(Start of Authority) : 영역에 대한 권한 있는 서버의 정보로 구성

  ex) @   IN  SOA london.nwtraders.msft.  hostmaster.

 - NS : Name Server 의 주소로 구성

  ex) @  NS  london.nwtraders.msft.

 - SRV : 도메인 컨트롤러의 역할 정보로 구성

  ex)  _ldap._tcp 600 SRV 0 100 389 london.nwtraders.msft.

 - MX(Mail Exchanger) : 메일 서버의 위치를 나타내는 정보로 구성

  ex) mail     MX    london.nwtraders.msft(FQDN)

 - CNAME : Host Name에 별칭을 부여하므로써 사용의 편리성을 추구

  ex) sexy CNAME london.nwtraders.msft(FQDN)

 

DNS 영역 : DNS 서버가 저장하고 있는 논리적인 이름 공간 또는 물리적인 Zone DateBase의 위치

 

ex) 하나의 DNS 서버가 여러개의 영역정보를 저장 할 수 있고 DNS 영역에 대한 권한 위임을 통해 영역 정보를 분리 할 수 있다.

    nwtraders.msft

    asia.nwtraders.msft

    europe.nwtraders.msft

  

영역은 Zone DataBase에 저장되어지며 Zone DataBase는 정방향 영역 파일과 역방향 영역 파일로 이루어져 있으며, 영역 종류에 따라 DNS 구성 요소로써(DNS DataBase File) 저장되어지거나 Active Directory DataBase에 저장 될 수 있다.

 

표준 DNS 영역의 종류

- 표준 주영역

- 표준 보조 영역

- 스텁 영역

 

Windows Domain 환경에서의 DNS 영역의 종류

- Active Directory Integratied Zone

- 표준 주영역

- 표준 보조 영역

- 스텁 영역

 

조회 영역에 따른 분류

- 정방향 조회 영역

- 역방향 조회 영역

 

영역을 변경하는 방법

 1. dnsmgmt.msc(DNS 서버 관리자)를 실행후 권한 있는 DNS 서버에 연결

 2. 권한 있는 DNS 서버가 저장하고 있는 Name Space를 선택후 속성의 영역

    변경 메뉴에서 4가지 타입의 영역을 선택, 변경 할 수 있다.

 

Zone Transfer : 권한 있는 서버가 다른 서버에게 DNS 데이터를 전송

 - DNS 서버에서  보조 DNS 서버로 데이터 전송시

 - Active Directory Integrated DNS 서버에서 다른 DNS 서버로 전송시

 

Zone Transfer 타입

- AXFR : Full(All) Zone Transfer(전체 영역 전송)

- IXFR  : Incremental Zone Transfer(증분 영역 전송)

 

DNS 동적 업데이트

- DNS Client : TCP/IP 구성정보 수정을 통해, ipconfig /registerdns

 

DNS 동적 업데이트 구성

-기본 설정 : DHCP Client(DNS Client)는 정방향 조회 영역의 A(Host) Record를 업데이트

하고 DHCP Server는 역방향 조회 영역의 PTR(Point) Record를 업데이트 한다.

- DHCP 설정 : 정방향 조회 영역 및 역방향 조회 영역을 업데이트 할 수 있으며 2000

이전 버전 클라이언트에 대한 업데이트도 지원 한다.

 

Active Directory 통합 영역 구성

- %systemroot%\system32\dns\nwtraders.msft.dns 영역 파일이 ADDB에 통합되어진다.

  dsa.msc=>nwtraders.msft=>system=>MicrosoftDNS=>nwtraders.msft 개체로 통합 되어 진다.

  ADDB에 통합되어지기 때문에 ADDB에대한 보안 설정이 적용된다.

- ADDB의 보안에 의해 DNS 콘솔에 보안 탭이 생성 되어 지며 보안된(인증된 클라이언트) 동적 업데이트가 가능하다.

- ADDB에 통합 되어 지면서 ADDB 복제 기간 동안에 다른 DC에 복제 되어 진다.(복제기간 5)

 

 DNS 동적 업데이트 실습

-실습환경-

파트너 컴퓨터중 번호가 높은 컴퓨터를 DHCP Server로 구성한다.

파트너 컴퓨터중 번호가 높은 컴퓨터를 DNS Server로 구성한다.

파트너 컴퓨터중 번호가 낮은 컴퓨터를 DHCP Client로 구성한다.

 

DNS Server 구성

- XXX.nwtraders.msft 에 대한 영역을 구성한다.

  (XXX 는 서버 이름의 앞 3자리)

- XXX.nwtraders.msft 에 대한 동적업데이트를 구성한다.

 

DHCP 서버 구성

- 임대범위 : 192.168.10X.100-199

- DHCP 서버의 IP Address : 192.168.10X.1

- DHCP 서버가 항상 동적업데이트를 하도록 구성한다.

 

DHCP 클라이언트 구성

- 물리적 연결 구성 : Classroom 연결 설정을 해제 하고 Partner 연결 설정만 활성화 시킨다.

- DHCP Server로 부터 IP Address를 할당 받기 위해 DHCP Client로 구성

- TCP/IP 고급 설정에서 (이 연결의 DNS 접미사를 (DNS 서버의 XXX.nwtraders.msft)

구성하고 (DNS 연결 등록에 이 연결의 DNS 접미사 사용)하도록 설정

1. DHCP 클라이언트에서 ipconfig/renew 입력하여 IP address를 정상적으로 할당 받는지 테스트한다.

2. DHCP 서버 임대 정보에 xxx.nwtraders.msft에 대한 DNS 접미사가 정상적으로 등록 되었는지 확인 한다.

3. DNS Zone Database host.xxx.nwtraders.msft에 대한 Record가 추가 되었는지 확인한다.

by 융현 | 2007/09/18 17:41 | Services | 트랙백 | 덧글(1)

L3 스위치

   목차

1. Layer 3 Switch 개요

 

Layer 3 switch는 업체에 따라서 routing switch, switch router, switching router, wire-speed router, hardware-based router라고 부르기도 한다. 이의 간단한 정의는 hardware-application specific integrated circuit (ASIC) 기술로 구현된 고성능 IP/IPX 라우터라고 할 수 있다.

1.1 기존 라우터의 한계

 

라우터에는 네트워크 관리자가 사용할 수 있는 많은 기능이 탑재되어 있다. 기술 발전으로 고속의 프로세서 및 메모리가 개발되고 이를 탑재함으로써, 필터링, NAT등을 라우터 성능 저해 없이 사용가능하였다. 그러나 인터넷연결등으로 네트워크의 요구 대역폭은 급격하게 증가하게 되었고 라우터에서 패킷폐기등 delay가 발생하기 시작하였다. 이에 대응하기 위해 여러가지 큐잉과 캐싱기법이 나타났다.

 

Hardware-based routing :  layer 3 switch에서 사용하는 방법으로 라우팅 처리 기능을 ASIC으로 구현되어 고속 라우팅이 가능하게 되었다.

 

flow-base or label-base routing  :  데이타 흐름에 기초하여 라우팅을 처리하며, 지정된 크기의 label을 붙여서 이를 통한 라우팅을 처리한다.

 

이러한 두 가지 기능은 Multi-layer switch등에서 상호 보완하여 사용하게 되었다.

1.2 Benefits

 

Wire speed packet forwarding

Layer 3 switch는 wire speed로 (10, 100, 1000Mbps) 라우팅 처리가 가능하며 이는 기존의 software로 처리하는 라우터에서는 불가능했던 것이다.

 

표준화된 기술의 사용

gigabit speed의 LAN이 나타나면서 중요 서버와 core 지역에 설치가 진행된다. 이때 발생되는 이기종간의 호환성 문제는 산업 표준 기술을 사용하여 개발된 Layer 3 Switch로 인해 해결될 수 있다.

 

Scalability
scalability는 고성능 layer 3 switch를 필요로 하는 주된 요인이다.
internet 사용자 증가, traffic 유형의 다양화, ADSL등으로 인한 access 네트웍의 고속화 등으로 인하여 스위칭 성능의 향상이 필요하게 되었다.

 

운영 및 관리
Layer 3 switching은 기존의 라우터와 LAN Switch에 점차적으로 첨가되는 형태이므로, 이전의 운영과 관리방법을 변경없이 사용할 수 있다.

 

비용대비 성능
Layer 3 switch는 hardware로 구현되므로 software로 동작하는 장비에 비해 성능이 우수하며 가격이 저렴하다.

2. Layer 3 Switch의 주요 특징

2.1 Layer 3 Switch가 수행하는 기능

 

앞에서 Layer 3 Switch는 제한된 기능의 hardware-based router라 하였다. 그렇다면 Layer 3 Switch가 수행하는 기능을 알아보자. 물론 장비의 종류에 따라 지원이 되지 않는 경우도 있다.

 

-  Layer 3 Switch는 대부분 OSI model의 Layer 3에서 동작하며 Layer 2에서 frame forwarding을 수행한다.

-  Layer 3 Switch는 IP, IPX 프로토콜만 라우팅 한다. 패킷의 라우팅은 기존의 라우터에서 수행되는 것처럼 지정된 Layer 3 라우팅 표준에 따라 처리한다.

-  Layer 3 Switch는 nonroutable traffic을 Layer 2에서 스위칭한다.

-  LAN-based 라우팅만을 수행한다.

-  RIP 또는 OSPF같은 routing update protocol을 지원한다.
-  많은 장비들이 class of service를 제공하기 위하여 RSVP 또는 여러개의 priority level을 지원한다.

-  streaming video등의 데이타를 처리하기 위해 IP multicast routing을 지원한다.

-  많은 장비들이 multiple backbone link를 위해서 trunking을 지원한다.

 

Layer 3 Switch의 고속 forwarding은 저속 link에서 많이 감쇄가 되므로, 대부분이 LAN 인터페이스만 보유하고 있다. 일부분은 ATM, SONET같은 고속 WAN 인터페이스를 제공하기도 한다.

2.2 Classical Router와 Layer 3 Switch의 비교

 

아래의 Table은 기존의 classical 라우터와 Layer 3 Switch를 비교한 것이다. 제품에 따라 다소 차이가 있으며, 아래의 표는 일반적인 내용을 나타낸 것이다.

Layer 3 switch는high-performance LAN에 최적화되었기 때문에 일부를 제외하고는 대부분이 WAN 연결에 대해서는 서비스를 하지 않는다. 물론 이러한 최적화로 인해 Layer 3 switch의 성능이 기존 라우터보다 10배 이상 증가한다고 볼 수도 있다.

 

주요 특징

Classical Router

Layer 3 Switch

주요 수행 OSI Layer

Layer 3

Layer 3

Routing 수행 방법

Software
(CPU + Software)

Hardware
(ASIC chip)

지원하는 Layer 2 MAC

Ethernet, TokerRing, FDDI
ATM, WAN

FastEthernet
Gigabit Ethernet

forwarding performance

Slow
(CPU성능과 가격에 따라 다름)

Fast
(near wire speed)

Latency

약 200 ms

< 10 ms (100 Mbps)

관리 및 program 가능성

매우 높음

적음

지원 Protocol

All

IP (일부 IPX)

Routing Protocol

All

RIP1,2 OSPF (일부 DVMRP)

WAN 지원

지원함

지원하지 않음

비용

높음

낮음

3. Basic Architecture model

 

먼저 라우터와 스위치가 동작하는 OSI layer에서의 위치와 넓은 의미의 layer 3 라우터를 조사해보자.

 

Layer 3

Route everywhere

Route once, switch afterwards

Layer 2/3

switch here you can, route where you must

Layer 2

switch everywhere

 

위에서 route everywhere는 기존의 classical router이며, 마지막의 switch everywhere는 사실상 bridge ( 협의의 스위치)라고 볼 수 있다. "Route once, switch afterwards"와 "switch here you can, route where you must"의 두가지 경우는 네트워크를 바라보는 관점이 다르다. switch의 경우는 bridge처럼 네트워크를 flat 구조로 보며, data를 어디로 forward 할지 모르는 상태일 경우만 라우팅을 사용한다. 이 둘은 패킷 처리성능을 향상시키기 위하여 구현되는 방식이 다르며, 업체에 따라 2세대 라우터, 또는 3세대 라우터라고 부르기도 한다. 진정한 의미의 layer 3 switch는 아직 구현되지 않았다고 볼 수 있다.  다음은 패킷처리 성능을 향상시키기 위해 구현되는 기술의 Architecture를 설명한 것이다.

 

Classical Router

Classical Router는 다른 Architecture와 비교하기 위하여 설정한 것이며, 경로설정과 패킷처리가 모두 Layer 3에서 일어난다. 따라서 패킷은 Layer 2 하드웨어 인터페이스에서 layer 3로 이동하여야 한다.

Routing Switch

경로 설정은 Layer 3에서 하드웨어 또는 소프트웨어적으로 일어나지만, 실제 패킷 처리는 Layer 2에서 진행된다. 성능 향상은 패킷 처리가 layer 3로 이동하지 않음으로서 가능하며, 많은 logic을 하드웨어로 구현함으로써 증가된다.

Flow Switch

데이타 트래픽의 흐름(Flow)가 나타나기 이전의 초기상태에서 경로설정과 패킷처리는 Layer 3에서 수행되나 flow 결정 후에는 layer 2에서 스위칭이 일어난다. 이는 ATM의 VC와 유사한 점이 있다. flow switch간의 정보교환은 flow management protocol을 사용한다.

Switched Router

경로설정과 패킷 처리는 초기 라우터의 경우 Layer 3에서 수행된다. 그후 처리된 패킷에 중요정보를 담은 Tag를 추가시킴으로서 네트워크의 다른 장비들은 Tag 정보를 사용하여 처리를 하므로 성능향상을 가져올 수 있다.

4. Vendor들의 Layer 3 switching 구현l

 

이번에는 보다 특화된 제조업체에서 Layer 3 switching을 구현하기 위해 사용하는 architecture를 검토해보자. 제조업체들은 라우팅 성능 향상과 WAN의 확장성을 위해 새로운 기술을 도입하였다. 여기서는 라우팅 성능향상을 위해 도입된 architecture를 설명한다.

라우팅 성능을 개선하기 위한 key point는 일반적인 데이타와 네트워크를 control하기 위한 데이타를 분리하는 것이다. control하기 위한 데이타는 초기 연결설정을 위한 call setup등이 포함되지만 일반 데이타들은 초기 연결 설정이후의 데이타이므로 라우터를 bypass할 수 있다.

4.1 IP Switching (Ipsilon)과 Cell Switch Router (Toshiba)

 

IP Switching과 Toshiba의 CSR(Cell Switch Router)는 트래픽의 flow 파악이 중점을 두었으며, switching을 위한 fabric으로는 ATM switching에 기반하였다. 또한 cut-through switching을 사용하였으며, 지원 protocol은 Ipsilon의 경우 IP/IPX, CSR의 경우는 IP only이다. 다른 protocol의 경우 ip encapsulation 되어야 한다.

 

Flow란 연속적인 data가 계속해서 오래동안 이어지는 네트워크 상의 source와 destination간의 대화하고 할 수 있다. FTP파일 전송, HTTP 전송 등과 같이 초기 setup후 연속해서 많은 양의 데이타 교환이 일어나며, ip switching과 CSR은 이러한 flow에 적용된다. DNS/snmp query같은 단발성 데이타는 기존의 layer 3 라우팅을 사용한다. 또한 이 둘은 flow에 대한 정보를 전파하기 위해 Ipsilon Flow Management Protocol과 Flow Attribute Notification Protocol (FANP-Thosiba)를 사용한다.

 

Flow-based switching은 위의 Flow Switch 설명부분을 참조하기 바라며, 해당 그림 중에서 Layer 2 부분이 ATM switch를 사용한다. 초기 지정된 기준 (packet수, application type)에 의해 flow가 설정되면 스위치는 cut-through switching을 실행하며, neighbor에게 flow를 전파한다. flow가  끝나면 일정 시간 후에 cut-through 연결 설정 또한 종료되며 초기 상태가 된다.

 

Ipsilon의 주장으로는 전송되는 패킷의 80%, byte의 90% 이상이 flow에 속하여 cut-through switching을 수행할 수 있다고 하였다. 단점으로는 아주 큰 네트워크의 경우 각 flow마다 가상회선 (virtual circuit) 설정이 일어나므로 이를 유지하기 위한 table의 overflow가 발생할 수 있다는 점이다.

4.2 Fast IP (3com)

 

Fast IP는 호스트에 dNHRP(Next Hop Routing Protocol)와 802.1Q frame tag를 지원하는 소프트웨어가 추가로 필요하다. dNHRP를 사용하여 Fast IP는 다른 subnetwork의 장비들과 peer-to-peer 통신을 수행한다. 이는 campus 네트워크에서 사용할 수 있도록 고안되었으며, Cascade의 IP Navigator와 연동하여 WAN으로 확장가능하다. 또한 layer 2 통신을 수행하므로 IP외의 다른 protocol도 지원하는 layer 3 independent하다. 802.1Q와 802.1p를 지원하지 않는 장비가 있을 경우도 이와 무관하게 전송하게 되나 core장비가 지원하지 않을 경우 성능 개선 효과는 없다.

 

아래그림은 Fast IP가 동작하는 방법을 간략하게 설명한 것이다.

 

 

다른 VLAN에 속한 두 장비가 통신을 할 경우 초기에는 라우터를 통한 일반적인 통신을 수행한다. layer 3를 통한 통신이 계속될 경우 dNHRP를 통하여 두 장비는 layer 2 경로설정 가능여부를 조사하고 가능할 경우 보다 빠른 layer 2 경로를 setup하여 통신하게 된다.

이러한 방법의 가장 큰 제약은 단말 장비의 lan card에 3Com 소프트웨어가 필요하다는 것이다.

4.3 Switched Virtual Networking / Multiprotocol Switched Services (IBM)

 

IBM의 Multiprotocol Switched Service (MSS)는 IBM의 ATM 네트워크 방식의 확장이며, 따라서 core 부분에 ATM 인프라가 필요하다. 또한 라우팅 기능을 edge에서 수행하도록 한다.

MSS에는 MSS 서버와 MSS client가 존재하며, MSS 서버는 route server, 라우팅 계산, LANE 서버로서 동작한다. MSS client는 ATM edge switch상에서 또는 ATM을 탑재한 서버에 위치하여 frame forwarding, filtering 기능, LANE client 기능을 수행한다.

두 MSS client 간에 통신이 발생할 경우 (다른 VLAN 상에서), MSS client는 경로 설정을 위해 destination에 대한 캐쉬정보를 찾으며, 있을 경우 ATM core를 통한 전송이 수행되며, 없을 경우 MSS 서버로 forward하여 필요한 가상 회선을 설정하도록 한다. 물론 이 정보는 MSS client의 cache 정보에 저장된다.

4.4 CiscoFusion과 NetFlow Switching

 

CiscoFusion은 초기 Cisco 7000 라우터 구조의 분산 확장형으로서 내부적으로 경로 계산/설정 기능과 프레임 포워딩 기능을 분리했다. 이를 사용한 네트워크에서 multilayer LAN switch는 모든 라우팅 설정을 7000-series 라우터에서 수행하며, 라우터에서 계산하여 보내준 경로정보를 저장하고 있다. 따라서 multilayer switch는 inter-Vlan간에도 라우터를 거치지 않고 layer 3 switching을 수행할 수 있다.

또한 CIsco에서는 7000-series 라우터의 성능 향상을 위해 NetFlow Switching 기법을 도입하였다. 데이타 흐름(Flow)에서 초기에는 일반적으로 라우팅에 의한 포워딩이 진행되며, 일련의 패킷이 flow를 나타내게 되면 그후의 데이타는 초기 정보에 의한 cache로 전달된다. 따라서 IOS에 의한 패킷처리가 감소하게 된다. NetFlow switching은 바이트수, 패킷수와 같은 트래픽의 통계치를 수집하므로 네트워크 설계로서도 사용가능하다.

4.5 SecureFast Virtual Networking (Cabletron)

 

Cabletron은 스위칭과 라우팅을 연결하여 policy에 의한 솔루션을 도입하였다. 이는 Layer 3 switching을 수행하는 SmartSwitch와 policy Server로 구성되어있다. 각 SmartSwitch는 연결된 포트이 MAC/network address를 알 수 있으며, 이 둘을 mapping하여 Layer 3 에 기초하여 Layer 2 forwarding결정을 한다. 또한 Policy/Accounting 서버는 통계수집을 진행하여 QoS 및 security를 제공할 수 있도록 한다.

 

 

한 호스트가 local switch의 MAC address table에 없는 destination으로 통신을 요청할 경우 해당 address의 resolution은 switch내의 SecureFast 기능이 담당한다. SecureFast는 다른 스위치와 통신을 통해 destination이 위치한 SmartSwitch와 경로 및 추가로 정의된 policy를 설정해 준다. 처음 패킷만 라우팅을 수행하며 이어지는 데이타는 layer 2 forwarding에 의해 수행된다.

SecureFast Virtual Network의 차이점은 broadcast 패킷을 다루는 방식에 있다. SFVN은 broadcast를 가로채서 vritual route server를 통하여 broadcast를 사용하는 ARP와 같은 request에 응답하여 준다. 또한 SFVN은 threshold(임계값)을 정하여 이를 초과시 특정 시간동안 해당 포트의 broadcast를 막는다. 따라서 broadcast flooding을 방지할 수 있다.

SFVN은 subnet을 필요로 하지 않으므로 이전의 VLAN 구성이 불필요하고, 모든 장비들이 같은 IP subnet에 속하게 된다. 기존에 subnetting된 IP network에 SFVN을 적용하기 위해서는 default gateway와 subnet mask의 변경이 필요하다.

4.6 Layer 3 "Learning Bridge"

 

Bay Networks에서 SwitchNode를 Foundry Networks에서 FastIron이 여기에 해당된다고 볼 수 있다. 잠깐 learning bridge의 기능을 살펴보자. learning bridg는 각 포트의 데이타를 모니터링한 후 MAC address forwarding table을 만든다. 그후에는  unicast traffic이 해당하는 port로만 전송되게 된다. SwitchNode와 FastIron은 이러한 기능을 Layer 3에 대해서 수행한다. destination의 address가 table에 있다면 스위치는 해당 포트로 포워딩 하게 된다. 만약 table에 없다면 스위치는 해당 데이타를 스위치 포트에 연결되어 있는 라우터로 보낸다. 단순히 포워딩 하기보다는 자신의 라우팅 테이블을 만든다.

이들 스위치는 여전히 WAN과 Appletalk등 다른 프로토콜 처리를 위해 라우터를 필요로 한다.

5  Summary

 

Layer 3 switch는 새롭게 나타난 혁신적인 새로운 기술은 아니다. 간단히 말한다면 기존의 software로 처리되던 라우팅을 hardware로 구현했다고 볼 수 있다. 다만 네트워트의 고속화가 진행됨에 따라 지연요소로서 라우터의 packet forwarding delay가 나타났으며, 이를 해결하기위한 "Route once, switch many" 방법을 사용한다. 업체에 따라 라우터 또는 스위치의 변형으로 보기도 한다. Layer 3 switch를 2세대 혹은 3세대 라우터라고도 하나 아직까지 모든 기능을 hardware로 구현한 장비는 없다. Gigabit가 각 고객의 네트웍에 구현되고 있는 시점에서 Layer 3 switch같은 고성능 패킷 처리장비는 필수적이라 할 수 있다.

by 융현 | 2007/09/18 17:40 | 장비운영 | 트랙백 | 덧글(0)

VPN 기술의 이해

출처 카페 > 기업의 네트워크 통신 파트너 / 초이
원본 http://cafe.naver.com/softmart/138

VPN은 공중 네트워크를 사설 네트워크화해 사용함으로써, 비용 절감과 보안성의 두 마리 토끼를 잡을 수 있는 기술이다. 이같은 강점으로 인해 이미 많은 기업에서 도입하고 있으며, ISP에서도 VPN 서비스를 소개하며 서비스 시장에서 당당히 한자리를 차지하고 있다. 이번 강좌에서는 VPN의 구성요소와 발전 과정을 알아본다.



김영미 기자

 

VPN(Virtual Private Network)은 공중 네트워크를 사설 네트워크처럼 사용할 수 있는, 인증과 데이터 암호화를 이용해 보안을 강화한 기술이다. VPN을 정확히 이해하기 위해 우선 사설 네트워크와 공중 네트워크의 차이점이 무엇인지 짚어보자. 사설 네트워크는 한 집단의 목적에 의해 만든 자체 네트워크로, 은행에서 구축한 본점과 지점간의 전용회선을 예로 들 수 있다. 이 전용회선은 은행 고객 정보를 교환하기 위해 물리적으로 폐쇄된 회선을 이용해, 네트워크 장비를 자체적으로 구축한다. 전용회선을 이용한 사설 네트워크는 보안성을 높이기 위한 최선의 방법이지만, 투자비가 많이 들고 운영 관리도 별도로 해야 하는 단점이 있다. 이와는 달리 공중 네트워크는 전화 통신처럼 모든 이에게 빌려주고 공개되는 것으로, ADSL, ISDN, 다이얼업 모뎀 등이 있다. 이용료는 저렴하지만 회선의 신뢰도, 보안성 등이 사설 네트워크보다 떨어지는 것이 사실이다. 
VPN은 공중 네트워크인 ADSL, ISDN, 다이얼 업 등의 방법으로 인터넷에 접속하고, VPN을 이용해 회사내의 사설 네트워크처럼 폐쇄적인 네트워크를 구성해 회사 내의 중요한 정보를 주고 받는다는 것이다. 인터넷을 이용해 VPN을 구성하면 인터넷 회선과 사설 회선을 별도로 구성해야 하는 번거로움이 사라질 뿐 아니라 전용회선을 도입하는 비용도 아낄 수 있다. 
따라서 대리점, 협력업체 간의 대금 지불, 구매, 발주 정보 등의 정보를 확인하는 익스트라넷(extranet)이 인터넷으로만 구성돼 있다면 VPN을 이용해서 보안성을 높일 수 있다. 부서원이 출장, 교육, 재택 근무를 할 때 집에서 개인적으로 ADSL, 케이블 모뎀, 다이얼업 모뎀 등으로 회사내의 게시판 정보나 급여 등을 인터넷을 통해 안전하게 볼 수 있다는 장점이 있다. 또한 VPN을 이용하면 지방이나 해외 지점에서 비싼 국제 전용 회선이 아닌 인터넷 회선을 이용해 본사 서버에 있는 게시판 등의 정보를 볼 수 있다.

 

                   (그림 1) VPN 적용 전과 적용 후 네트워크 구성

 

 

OSI 계층별로 다른 VPN 프로토콜
공중 네트워크를 사설 네트워크처럼 사용할 수 있게 하는 핵심적인 기술은 터널링(tunneling)이다. 터널링 과정은 연결하고자 하는 두 지점 간에 가상 터널을 형성해, 외부로부터 영향을 받지 않은 상황에서 정보를 주고 받는 것이다. 
터널링의 핵심은 OSI 7계층 중 어느 계층에서 터널링을 수행하는가와 어느 구간까지 터널을 구성하는가이다. 최종 사용자와 백본까지 엔드 투 엔드로 터널을 뚫을 것인가, 아니면 백본과 가입자 앞단의 VPN 게이트웨이나 라우터까지만 터널을 구성할 것인가 등을 고려해야 한다. 터널링하는 방법에는 크게 2계층과 3계층 터널링이 있는데, OSI 2계층에서 동작하는 방식으로는 PPTP(Point-to-Point Tunneling Protocol), L2TP(Layer 2 Tunneling Protocol)가 있고, OSI 3계층에서 동작하는 방식으로는 IPSec을 들 수 있다(표 1).
PPTP(Point-to-Point Tunneling Protocol)는 PPP의 확장 개발된 프로토콜로, 인터넷을 통한 새로운 수준의 강화된 보안과 멀티 프로토콜 통신 기능이 추가됐다. 인터넷 프로토콜인 TCP/IP를 그대로 이용하면서도 외부인은 접근할 수 없는 별도의 VPN을 운용할 수 있는 프로토콜이다. 특히 PPTP 기반의 VPN을 통한 데이터 전송은 새로운 EAP(Extensible Authentication Protocol)를 사용하기 때문에 단일 LAN 내의 회사 사이트에서 데이터를 전송하는 것만큼이나 안전성을 보장한다. VPN 서버는 모든 보안 검사와 유효성 검사를 수행하고 데이터를 암호화해, 보안되지 않는 네트워크를 통해 가상 터널을 생성해서 보다 안전하게 전송할 수 있다. PPTP에서는 전화 접속 연결이 필요하지 않다. 그러나 컴퓨터와 서버가 IP로 연결돼 있어야 한다. IP LAN에 직접 연결돼 있으면서 서버와 접속할 수 있으면 LAN을 통한 PPTP 터널을 설정할 수 있다. 그러나 인터넷을 통해 터널을 만드는 중이고 일반적으로 ISP와의 전화 접속을 통해 인터넷에 액세스하는 경우 터널을 설정하기 전에 전화 접속으로 인터넷에 연결해야 한다.
L2TP(Layer 2 Tunneling Protocol)는 마이크로소프트의 PPTP와 시스코의 L2F(Layer 2 Forwarding) 프로토콜이 결합돼 IETF가 산업 표준으로 제정한 터널링 프로토콜이다. 현재 L2TP v3는 L2TP를 확장해 일부 새로운 서비스 모델을 포함시켰다. LT2P는 IP, IPX, NetBEUI 트랙픽을 암호화한 다음, IP 헤더로 캡슐화해 전송한다. PPP에서 제공되는 데이터 암호화 기법을 사용할 수도 있고 IPSec에 의해 제공되는 데이터 암호화 기법을 사용할 수 있는데, 이것을 L2TP/IPSec라고 한다. L2TP와 IPSec의 결합 형태에서 연결은 DES(Data Encryption Standard) 알고리즘을 사용하는데, 이 알고리즘은 DES에 대해 하나의 56비트 키를, 3DES에 대해 세 개의 56비트 키를 사용한다. L2TP/IPSec 연결은 두 가지 수준의 인증을 요구한다. IPSec SA(보안 연결)를 작성해 L2TP 캡슐화 데이터를 보호하기 위해 L2TP/IPSec 클라이언트는 인증서나 미리 공유된 키를 사용해 컴퓨터측에서 인증을 수행한다. IPSec SA가 성공적으로 작성되면 연결의 L2TP 부분에서 PPTP와 동일한 사용자측에서 인증을 수행한다.

 

                 (표 1) 터널링 프로토콜의 종류

 

                              (그림 2) 터널링 구현 과정

 

IPSec으로 집중되는 VPN
VPN에서 가장 많이 사용되는 프로토콜은 IPSec(Internet Protocol Security)이다. 이전의 보안 기법들은 보안 프로토콜이 통신 모델의 애플리케이션 계층에 삽입됐다면 IPSec은 본질적으로 데이터 송신자의 인증을 허용하는 인증 헤더 AH(Authentication Header)와 송신자의 인증과 데이터 암호화를 함께 지원하는 ESP(Encapsulating Security Payload), 키교환을 위한 IKE 등을 이용해 보안 서비스를 제공한다. 즉 터널로 들어가기 전의 IP 패킷은 IP 헤더와 페이로드(payload)로 구성된다. 터널로 들어가면 AH가 추가돼 캘슐화되는 것이다. 다음으로 ESP 헤더가 삽입되면서 IP 패킷을 암호화한다.
AH는 MD5 또는 HMAC 알고리즘을 사용해 인증을 처리한다. ESP는 DES, RC5 등의 암호화 알고리즘을 사용해 데이터를 암호화한다. IKE 키관리 절차에서는 ISAKMP/Oakley 프로토콜과 같은 별개의 키 프로토콜을 선택할 수 있다. 이같은 각 서비스에 관련된 명확한 정보는 IP 패킷 헤더의 뒤를 잇는, 헤더 속의 패킷에 삽입된다. AH가 무결성을 보장한다면 ESP는 보안성을 보장한다.
그리고 IPSec으로 전송시 트랜스포트 모드(Transport Mode)와 터널 모드(Tunnel Mode)를 지원한다. 트랜스포트 모드는 IP 헤더와 페이로드 사이에 AH 헤더가 삽입돼 IP 헤더의 일부, AH 헤더, IP 페이로드를 인증하는데, 이 방식은 호스트에서 구현할 수 있다. 터널링 모드는 IP 헤더와 페이로드 앞에 새로운 IP 헤더를 붙여서 IP 헤더의 일부, AH 헤더, 원본 IP 헤더, IP 페이로드를 인증한다. 이는 주로 호스트나 보안 게이트웨이에 적용할 수 있다. 트랜스포트 모드는 원본 IP 헤더의 일부분만 인증하지만, 터널 모드는 새로운 IP 헤더를 만들면서 원본 IP 헤더와 페이로드까지 인증한다. 인증 범위가 넓으니 신뢰성이 더 높아진다고 볼 수 있다.

 

                              (그림 3) AH 트랜스포트 모드 터널링 모드

 

분산 터널링으로 일정한 인터넷 접속 속도 유지 
그렇다면 본사와 지사를 잇는 인트라넷이 아닌 인터넷을 사용할 경우에도 터널링을 통해 접속할까. 이는 VPN 장비가 제공하는 분산 터널링(Split Tunneling) 기능에 따라 달라질 수 있다. 예를 들어 본사에서는 인터넷 회선으로 E1(2.048Mbps)을 사용하는데 인터넷을 사용할 때 속도가 평균 100Kbps라고 가정하면, 지점에서 ADSL로 1Mbps의 고속 인터넷을 사용하다가 VPN 소프트웨어를 설치해 본사와 터널링을 구성해 본사 서버와 안정적으로 통신할 수 있다.
그러나 인터넷을 사용할 때는 본사와 연결된 터널링을 빠져나갈 수 없으니 본사의 E1 인터넷 회선으로 사용할 수밖에 없다. 그렇게 되면 직원들은 인터넷 접속 속도가 늦다고 불평을 할 것이다. 그래서 필요한 것이 분산 터널링이다. 분산 터널링을 적용하지 않으면 모든 트래픽이 VPN 장비까지 연결된 터널링으로 송수신해야 되므로, 사용자들은 인터넷에 접속할 때도 본사 VPN을 경유해야 한다. 이런 경우 보안은 강화될 지 모르나 접속 속도는 굉장히 늦어진다. 하지만 분산 터널링을 적용하면 인터넷을 사용할 때는 터널링을 적용하지 않고 바로 ISP로 연결되도록 할 수 있기 때문에 인터넷 속도가 빨라진다. 

 

네트워크 기반의 VPN
VPN의 발전을 살펴보면, 고전적인 VPN은 OSI 7계층 모델의 2계층을 이용한 프레임 릴레이, ATM이었다. 이는 터널링 기법이 아닌 PVC나 SVC 등을 통해 VPN을 구현한 형태다. 이들은 단순 회선의 개념으로 다양한 부가 서비스와 접목할 수 없는 가장 초보적인 VPN이라고 할 수 있다.
이후 등장한 것이 L2TP, PPTP, IPSec 등 다양한 터널 기법을 기반으로 한 CPE(Customer Premise Equipment) 기반의 VPN이다. 기업들은 CPE 기반의 VPN을 가장 선호하고 있다. CPE 기반 VPN은 VPN 장비에서 전적으로 터널링이나 암호화 등을 수행하도록 하는 것으로, 파이어월에서 VPN 기능을 수용한 장비, VPN 전용 게이트웨이, 라우터에 모듈을 장착해 VPN을 수행하는 것, 소프트웨어로 VPN 기능을 하는 것 등 다양한 솔루션들이 출시돼 있다.
CPE 기반의 VPN은 단순 회선 접속 솔루션이 아니라 보안성을 감당해야 하기 때문에 암호화 강도를 높일수록 비용은 올라가고 성능은 떨어지게 된다. 따라서 각 장비 업체들은 데이터 압축 등과 같은 기술을 발전시켜 암호화를 수행하더라도 일정 수준의 성능을 유지할 수 있도록 하고 있다. 
네트워크 기반의 VPN은 쉽게 생각해 서비스 제공업체에게 장비부터 회선, 관리까지 모두 아웃소싱하는 형태를 말한다. 네트워크 기반의 VPN은 최근 등장한 것으로, CPE 기반 VPN이 발전을 거듭하면서 생겨난 형태라고 볼 수 있다. 네트워크 기반의 VPN은 CPE VPN과는 달리 네트워크에서 ISP나 통신업체들이 VPN을 구현하는 것으로, 고객 입장에서는 투자 비용을 절감할 수 있고 ISP에게는 새로운 수익원이 될 수 있다. 때문에 향후 CPE 기반 VPN 시장을 다수 잠식하면서 세력을 키워나갈 것으로 전망된다.
네트워크 기반 VPN은 MPLS 기반 2계층 VPN, BGP/MPLS VPN이나 RFC2547bis(3계층), VRM(Virtual Router Model) 등의 기법에 의해 구현할 수 있다. BGP MPLS이 논리적인 포워딩 기술에 기반하고 있다면 VRM은 물리적인 라우터에서 논리적인 라우팅을 수행하는 기술이다.

 

서비스 업체의 새로운 수익원 VoIP VPN
현재 대부분의 VPN은 데이터 중심의 서비스가 주류를 이루고 있지만, VoIP 기술의 향상과 실제 적용 기업의 증가로 새로운 VPN 서비스로 VoIP VPN이 주목을 받고 있다. 이는 서비스 업체에게는 새로운 수익원으로, 기업은 저렴한 비용으로 기존의 음성 관리 및 통신비를 줄일 수 있을 것으로 기대되고 있다. 더 나아가 음성뿐 아니라 향후에는 화상 전송까지 포함한 멀티 서비스 over VPN이 등장하게 될 것이다.
VoIP VPN의 기본 개념은 기존의 데이터 VPN과 같지만, 음성이 네트워크를 타고 전송된다는 것이 다르다. VoIP VPN을 적용한 기업은 지역에 관계없이 공중 IP 네트워크를 이용해 4∼5자리의 구내 번호를 이용할 수 있다.
VoIP VPN은 비싼 음성 전용회선 대신 인터넷을 이용해 데이터 뿐 아니라 음성 서비스를 제공할 수 있어, ITSP(Internet Telephony Service Provider)나 서비스 공급업체들에게는 VoIP 기반의 새로운 서비스가 될 수 있다.

 

웹 기반의 인프라, SSL VPN 보안성 향상 
IPSec VPN이 설치가 복잡하고 각 플랫폼별로 호환이 잘되지 않는다는 이유 때문에 최근에는 SSL(Secure Socket Layer)  VPN에 관심이 높아지고 있다. SSL은 원래 넷스케이프(Netscape)에서 암호화된 웹 브라우징을 제공하기 위해 만든 프로토콜이다. SSL은 넷스케이프 뿐만 아니라 마이크로소프트의 인터넷 익스플로러에서도 지원하게 됐고 현재 많은 웹사이트에서 SSL을 통한 암호화 기능을 제공하고 있다. SSL은 사용자 영역 프로토콜(5계층)이기 때문에 기존의 커널을 수정하지 않고 단순히 웹 브라우저만 있으면 사용할 수 있다는 장점이 있다.
만약 기존의 VPN으로 하던 일을 SSL로 할 수 있게 된다면 커널을 수정하지 않고도 이미 거의 모든 시스템에 설치돼 있는 웹 브라우저를 이용해 쉽게 VPN 작업을 사용할 수 있을 것이다. 이같은 아이디어에서 출발한 것이 SSL VPN이다.
SSL VPN은 웹 브라우저를 통해 원격지에서 회사 네트워크에 접속할 수 있도록 한다. 이름에서 알 수 있는 것처럼 SSL VPN은 SSL 프로토콜을 이용하기 때문에 기존의 네트워크 애플리케이션 SSL을 지원하지 않을 경우에는 각각을 커스터마이징해야 한다는 단점이 있다. 하지만 대부분의 사용자가 웹, 메일, SSH 등을 사용한다고 봤을 때 대부분의 SSL VPN은 이들 프로토콜을 지원하기 때문에 사용하는데 큰 불편함이 없을 것이다.

 

                 (그림 4) SSL VPN과 IPSec VPN 비교

 

(그림 4)에서는 IPSec VPN과 SSL VPN을 비교했다. 일단 서버측에는 IPSec VPN과 SSL VPN의 위치가 크게 다르지 않다. 다만 일반적으로 IPSec VPN은 파이어월 기능을 함께 제공하는 제품이 많이 있기 때문에 별도의 파이어월을 설치하지 않는 경우가 많고 SSL VPN은 파이어월 기능을 제공하지 않기 때문에 별도의 파이어월이 필요하다는 점이 다르다.
클라이언트의 경우 IPSec은 전용 클라이언트를 설치해야 하지만 SSL VPN은 전용 클라이언트를 설치하지 않아도 된다는 큰 차이점이 있다. 그래서 IPSec의 경우 회사의 업무용 노트북이 아니면 사용하기 어렵지만 SSL VPN의 경우 웹 브라우저가 설치된 거의 모든 PC(게임방이나 공공 PC 포함)에서 사용할 수 있다는 장점이 있다. 

by 융현 | 2007/09/18 17:38 | 네트워크 기술 | 트랙백 | 덧글(1)

NAS/DAS/SAN

우선 스토리지를 운영함에 있어 아래와 같은 방식이 있습니다.

1. Internal Storage
2. External Storage

Internal 은 말그대로 장비 안에 있는걸로 흔히 PC HDD 생각하심 좋겠습니다.

다음으로 External은 Internal Storage로 커버하기 힘든 용량 (가령 PC에 아무리 큰 HDD를 끼우더라도 Tera 단위는 힘들겠죠?)을 운용하기 위하여 별도의 Storage 장비를 운용하는 케이습니다. 이 External Storage도 종류가 몇개 있는데...

1. NAS (Network Attach Storage) 말 그대로 Network에 붙어 있는 스토리지로 저렴하고 셋팅이 쉽다는게 그 특징입니다. 대부분 Windows 운영체제를 사용하고 10/100/1000Base Ethernet 방식으로 시스템과 연동됩니다. (자 그럼...속도는 잘나와봤자 1G 겠죠? Full~~로...^^)

2. DAS (Direct Attach Storage)는 시스템에 직접 붙이는 외장 스토리지입니다. 쉽게 풀어쓰면 PC나 노트북에 외장형 하드를 붙이는걸 상상하시면 됩니다. 전용 연결장치가 있음으로 (머..SCSI같은거) 당연히 NAS보다는 Access 속도가 빠르지만 이건 시스템 1대에 1대씩밖에 적용이 안됨으로 효율성에 문제가 됩니다. 가령 서버가 5대면 DAS도 5대가 되어야 한다는.....^^

3. 자 대망의 SAN입니다. SAN은 NAS와 DAS를 짬뽕시킨거라고 생각하심 되는데요...연결 인터페이스가 독특하게 FC 입니다 FC 케이블은 광케이블이라 생각하심 되는데요...시스템과 Storage간을 광으로 연결하는거죠....그럼 속도는??? ^^ 1GB??? 아닙니다. Network와는 틀린 방식으로 연결되는거구요..(저도 방식은 잘..ㅜ.ㅜ) Full-duplex에서 2GB까지 나옵니다. 더군다나 DAS처럼 한대에 한대가 아니라 한대를 여러대의 시스템이 공유할수 있구요...여기에 이 FC 케이블들로 시스템과 Storage를 연결할때 쓰는것이 바로 SAN Switch입니다.

 

by 융현 | 2007/09/18 17:34 | 장비운영 | 트랙백 | 덧글(0)

광케이블 종류

 

광케이블 종류

MMF로 불리는 멀티모드와 SMF로 불리는 싱글모드....보통 거리로 나뉩니다.

멀티모드는 가까운거리, 먼거리는 싱글모드가 사용됩니다.  패치코드는 눈으로 식별가능합니다. 주황,파랑색 패치코드는 MMF, 노랑색 패치코드는 SMF입니다. 


구분

적용분야

특징

Singlemode
Optical Fiber

· 장거리 고전송
· 단일모드 1310nm 파장에 최적화
· 1550nm 파장에서도 사용 가능함
· 근거리 통신망
· 데이터 전송케이블
· 장거리 무중계 전송용
· 제어 케이블
· CATV 케이블

· 균일한 광학특성 및 저손실
· 1310nm / 1550nm 전송가능
· 접속손실 최소화
· 마이크로벤딩에 강함

Multimode
Optical Fiber

· 850nm / 1300nm 파장에서 사용
· 근거리 통신망에 적합
· 옥내용 광케이블
· LAN 광케이블
· 데이터 광케이블
· 분배용 광케이블

· 코어지름 50㎛, 62.5㎛
· 2중 코팅형
· 접속손실 최소화
· 850nm / 1300nm 전송가능

 

광점퍼코드(싱글모드)
광분배함과 광전송기기를 연결하는 코드 (싱글모드: 9㎛(코아)/125㎛(글래딩))

- 광 분배함과 광 장비간 연결
- 광 장비와 광 단말간 연결


광점퍼코드(멀티모드)
광분배함과 광전송기기를 연결하는 코드 (멀티모드: 62.5㎛(코아)/125㎛(글래딩))

- 광 분배함과 광 장비간 연결
- 광 장비와 광 단말간 연결

 

광측정기 상호간의 접속 등에 콘넥터를 부착한 광코드를 사용하는 것으로, 광 시스템을 용이하게 구성할 수 있습니다.

 

-

 

SC형 콘넥터 패치 코드

FC형 콘넥터 패치 코드

SC형 어댑터

 FC형 어댑터

 

- 싱글모드SC - LC타입 -

- 광 송수신 장비와 전송로간 연결

- 광 분배함과 광케이블간 연결

- 광 분배함과 광 장비간 연결

- 광 장비와 광 단말간 연결

- 싱글모드SC - SC타입 -

- 광 송수신 장비와 전송로간 연결

- 광 분배함과 광케이블간 연결

- 광 분배함과 광 장비간 연결

- 광 장비와 광 단말간 연결

- 원하는 타입과 길이로 주문제작

- 싱글모드SC - ST타입 -

- 광 송수신 장비와 전송로간 연결

- 광 분배함과 광케이블간 연결

- 광 분배함과 광 장비간 연결

- 광 장비와 광 단말간 연결

- 싱글모드SC - FC타입 -

- 광 송수신 장비와 전송로간 연결

- 광 분배함과 광케이블간 연결

- 광 분배함과 광 장비간 연결

- 광 장비와 광 단말간 연결

- 싱글모드SC - MU타입 -

- 광 송수신 장비와 전송로간 연결

- 광 분배함과 광케이블간 연결

- 광 분배함과 광 장비간 연결

- 광 장비와 광 단말간 연결

- 싱글모드ST - ST타입 -

- 광 송수신 장비와 전송로간 연결

- 광 분배함과 광케이블간 연결

- 광 분배함과 광 장비간 연결

- 광 장비와 광 단말간 연결

- 멀티모드 SC - ST타입 -

- 광 송수신 장비와 전송로간 연결

- 광 분배함과 광케이블간 연결

- 광 분배함과 광 장비간 연결

- 광 장비와 광 단말간 연결

- 멀티모드 SC- FC타입 -

- 광 송수신 장비와 전송로간 연결

- 광 분배함과 광케이블간 연결

- 광 분배함과 광 장비간 연결

- 광 장비와 광 단말간 연결

- 멀티모드 SC - LC타입 -

- 광 송수신 장비와 전송로간 연결

- 광 분배함과 광케이블간 연결

- 광 분배함과 광 장비간 연결

-

- 멀티모드 SC-MU타입 -

- 광 송수신 장비와 전송로간 연결

- 광 분배함과 광케이블간 연결

- 광 분배함과 광 장비간 연결

- 광 장비와 광 단말간 연결

by 융현 | 2007/09/18 17:30 | 장비운영 | 트랙백 | 덧글(1)

L4/L7 스위치의 주요기능


서버 로드 발랜싱 기능은 여러 대의 서버를 마치 하나의 서버처럼 동작시킴으로써 성능을 쉽게 확장하게 하고, 서버의 장애 발생시에도 타 서버로 운영이 가능하게 함으로써 신뢰성을 향상시키기 위한 방법입니다.

여러 대의 서버들을 리얼서버(real server)라고 부르고, 리얼서버들의 집합을 클러스터 (cluster) 혹은 가상 서버(virtual server)라고 부릅니다.

서버 로드 발랜싱의 예를 아래의 그림으로 설명하여 봅시다.
위의 구성에서는 웹 서비스 (HTTP, TCP port = 80)와 이메일 서비스 (SMTP, TCP port=25)의 두 가지 종류에 대하여 서버 로드 발랜싱을 제공합니다. SLB 구성방법은 설치의 관점에 따라 여러 가지로 분류할 수 있습니다. 우선 네트워크 설정을 기준으로 브릿지 (bridge mode)방식과 라우팅(routing mode) 방식으로 나눌 수 있는 반면에, 물리적인 포트 연결 차원에서 외팔 (one-armed) 방식과 양팔(two-armed ) 방식이 있습니다.

 기준세부 방식
 네트워크 설정
브릿지 (bridge mode) 방식
라우팅 (routing mode) 방식
 포트 연결외팔 (one-armed) 방식
양팔 (two-armed ) 방식
브릿지 방식은 가상서버와 리얼서버의 네트워크 대역이 동일한 경우를 말하며, 라우팅 방식는 두 네트워크 대역이 다른 경우를 의미합니다. 예를 들어 위의 그림에서 가상서버의 IP (VIP)는 192.168.10.1/24 이고, 각각의 리얼서버는 동일한 192.168.10.x/24 (x=2,3,4) 입니다. 따라서, 위 그림 < SLB의 기본구성 >은 브릿지 방식의 SLB 입니다.

브릿지 방식인 경우에는 외부의 고객이나 관리자가 가상서버 및 리얼서버로 직접적인 접속이 가능합니다. 또한, 리얼서버에서도 인터넷과 같은 외부망으로 접속이 가능합니다. 브릿지 방식은 관리의 편리성이 높인 반면에, 외부의 보안에 취약하다는 것이 단점입니다.

라우팅 방식에서는 가상서버와 리얼서버의 네트워크 대역이 다릅니다. 따라서, L4/L7 스위치는 양변의 네트워크 대역에 대한 게이트웨이 역할을 수행합니다. 라우팅 방식에서는 리얼 서버들의 기본 게이트웨이 주소는 L4/L7 스위치 자신이 됩니다. 이러한 구성에서는 리얼서버로 직접적인 접속을 막기 위하여 사설 IP 대역을 많이 사용하고 있습니다. 외부에서 접속하기 위해서는 각 리얼서버에 NAT를 수행합니다. 라우팅 방식은 관리의 편리성이 낮은 반면에, 외부의 보안에 강하다는 장점이 있습니다.

포트연결을 기준으로 하는 분류에서 외팔방식이란 SLB를 위하여 L4에 연결되는 포트 구성이 한 개의 포트를 사용하는 경우를 말합니다. 위 그림 < SLB의 기본구성 >에서는 두개의 포트를 사용하므로 양팔방식으로 분류됩니다. 반면, 외팔방식의 구성에서는 1개의 포트만 사용하여 SLB를 수행합니다. 일반적으로 외팔방식과 양팔방식의 데이터의 흐름은 차이가 없으며 몇 개의 포트를 사용하느냐가 관건입니다. 한 개의 포트를 사용하더라도 내부적으로 가상적인 두개의 포트를 사용하는 것과 동일합니다.


캐싱 리다이렉션 기능은 내부 망에서 외부 인터넷으로 향하는 웹(WWW) 트래픽을 가로채어 캐싱 서버에게 전달하는 기능을 말합니다. 내부의 호스트 컴퓨터는 캐싱서버를 프락시로 등록할 필요가 없이 투명한(trapsparent) 방식으로 캐싱 서비스를 할 수 있습니다. 또한, 캐싱 리다이렉션을 통하여 웹 트래픽 (TCP=80 port)만을 처리하기 때문에 캐싱 서버에서 불필요한 패킷 처리를 막아주어 응답속도를 빠르게 해 줄 수 있습니다.
투명 케싱 서버의 동작은 아래와 같습니다. 사용자의 웹 트래픽 (Url 페이지) 요구는 L4스위치에 의하여 우선적으로 캐싱 서버에 보내집니다. 해당 트래픽의 URL이 캐싱 서버에 저장되어 있으면(hit), 캐싱 서버가 즉시 응답하여준다. 만약 캐싱 서버에 저장된 내용이 아니라면(missed) 캐싱 서버가 프락시로 동작하여 해당 URL에서 페이지를 요청하여 다시 사용자에게 전달하고, 캐싱 서버 자체에 저장합니다.
경우에 따라, RTSP (Real time streaming protocol:TCP,UDP=554), NNTP (Net news transfer protocol: TCP=119) 트래픽에 대하여 그룹을 등록하여 서비스 할 수 있습니다. 인터넷 트래픽 뿐아니라 임의의 응용프로그램에 대하여 포트(port) 설정을 통하여 리다이렉션 서비스를 구현할 수 있습니다.
L4 스위치는 패킷 재전송 (Packet Redirection) 기술에 기반하고 있습니다. 이 패킷 재전송기술을 이용해 투명한 캐싱 서버동작이 가능하며 또한, 로드 발랜싱 기능을 통하여 캐싱 서버들의 집합(서버군)을 관리하는 것이 가능합니다. 이런 방법으로 하나의 L4 스위치에 캐싱 서버를 여러 대로 확장 할 수 있습니다.


인터넷의 보안을 생각할 때 방화벽은 필수 사항입니다. 그러나, 방화벽 한 대로 서비스를 제공할 경우, single point of failure가 발생할 수 있습니다. 또한, 애플리케이션 수준의 프록시를 이용하여 높은 보안 수준을 제공하기 위해서 많은 부하가 방화벽에 걸리게 되어 응답시간의 지연을 초래합니다. 이러한 문제점들은 최근의 전자상거래 환경에서는 사업을 수행하는데 치명적인 걸림돌이 될 수 있습니다.

FWLB의 목적은 크게 아래의 3가지로 요약할 수 있습니다.
- 하나 이상의 방화벽을 추가하여 가용성 및 성능을 향상시킵니다.
- 동적인 로드 분산을 통해 응답속도를 향상시킵니다.
- 시스템 변경 없이 방화벽 확장 및 관리가 쉽도록 합니다.

FWLB를 구성하기 위하여, 공인망(Public network)과 사설망(Private network) 사이에 2대의 L4 스위치(상위 L4 스위치, 하위 L4 스위치)를 배치합니다. 상위 L4 스위치는 외부망에서 내부망으로 들어오는 패킷에 대한 부하 분산을 담당하며, 하위 L4 스위치는 내부망에서 외부망으로 나가는 패킷에 대한 부하 분산을 담당합니다.

FWLB의 중요한 특징 중 하나는 동일한 세션에 속하는 패킷들은 모두 동일한 방화벽으로 전송되어야 한다는 점입니다. 각 방화벽은 세션의 상태정보를 통하여 패킷 필터링을 수행하기 때문에, 현재 상태에 맞지않은 패킷이 들어올 경우 부적합한 패킷(illegal packet)으로 간주하여 삭제하게 됩니다. 즉, L4 스위치에 의해 들어오고 나가는 패킷이 서로 다른 방화벽으로 전송되면 세션을 유지할 수 없게 됩니다. 따라서, 상위 L4 스위치와 하위 L4 스위치는 입출력되는 패킷의 경로를 기억하여 경로를 지속적으로 유지할 수 있도록 합니다.

또한 DMZ 구간이 있는 경우에도 경로를 지속적으로 유지하기 위해여 DMZ 구간에 별도의 L4 스위치가 배치됩니다.

VPN 게이트웨이는 네트워크상의 배치와 패킷흐름이 방화벽과 유사한 점이 많지만, 부하분산 입장에서는 매우 다른점이 존재합니다. VPN 게이트웨이는 일반적으로 server/client 개념으로 본점-본점간 혹은 본점-지점간의 배치되는데, 특히 본점-지점간의 구성이 일반적입니다. 본점-지점 구성에서 본점으로의 터널링 접속은 지점단의 VPN게이트웨이에서 접속하는 방법과 원격 엑세스 사용자 (remote access users)에서 접속하는 방법이 있습니다. 어떤 경우이든, 본점에 접속하기 위하여 사용하는 터널링 프로토콜은 IPSEC, L2TP, PP2P 등이 있습니다. 아래의 그림은 본점에 VPN 게이트웨이들에 대하여 VPNLB를 구성한 예입니다.

L4 스위치의 네트워크 부하 분산기능 (NLB)는 다수의 인터넷 접속 라인을 사용하여 네트워크의 속도와 안정성을 개선하기 위한 기능입니다. NLB기능은 기존에 L4 스위치에서 제공하는 기능은 아니었으나, 사용자의 요구에 의하여 점차로 확산되는 추세라고 할 수 있습니다.

하나의 ISP(Internet Service Provider)의 인터넷 접속라인을 사용할 경우, 실제 기업이나 학교의 인터넷 접속 환경에서는 아래와 같은 문제점들이 발생합니다.
- 네트워크의 속도가 느려 업무에 지장이 많습니다.
- 네트워크의 다운으로 인한 인터넷 사용의 곤란 발생합니다.
- 네트워크 속도 업그레이드에 대한 경제적 부담이 가중합니다.
- 불필요한 트래픽으로 업무상 중요한 인터넷 사용에 지장이 발생합니다.

NLB는 L4 스위치를 이용하여 여러 개 ISP들의 전용선들과 ADSL, Cable Modem 등의 초고속 인터넷 회선을 결합시켜 단일한 전용선처럼 사용하게 합니다. 또한 인터넷 트래픽을 효율적으로 관리하여 불필요한 특정 회선에 대한 트래픽 집중현상을 완화하여, 트래픽 처리 효율을 최적화합니다.

위 그림은 내부망에서 인터넷을 사용하기 위해서 ISP1의 전용선 A, ISP2의 전용선 B 및 케이블 라인, ISP3의 ADSL 라인을 사용한 경우입니다.

내부망의 IP 대역은 전용선 A의 IP대역과 전용선 B의 IP 대역을 동시에 사용하거나, 사설 IP대역을
설정하여 PAT (Port Address Translation) 구성을 설정하여 사용할 수 있습니다. 특히, 케이블 인터넷 라인이나 ADSL/VDSL 라인에서 할당된 IP가 적은 경우에 내부망이 PAT를 사용하여 IP를 공유하도록 처리합니다. NLB에서 사용되는 부하 분산 방식에는 기존의 round-robin, hashing, least connection, maximum response time, maximum bandwidth 방식을 사용할 수 있습니다.

아래의 표는 E1 라인 하나만을 사용하는 회사에서 8Mbps ADSL 3개의 라인을 추가하여 NLB구성을 하였을 때 대역폭의 증가율을 보여주고 있습니다.
또한, NLB의 장점은 인터넷 회선의 고장율을 획기적으로 개선할 수 있다는 것입니다. 위의 예에서
E1 라인과 서로 다른 ISP의 ADSL 라인 3개를 동시에 사용하는 경우에 `전용선은 한 달에 한번 고장이 발생하고, ADSL 초고속 인터넷은 10일에 한번 고장이 발생한다`고 가정할 때 고장율은 다음과 같습니다.
NLB를 이용한 회선 고장율의 개선
 구분 고장율 비고
 NLB 적용전 (E1 only)1/30
한달에 한번 고장발생
 NLB 적용후 (E1 + 1*ADSL)1/3001년에 한번 고장발생
 NLB 적용후 (E1 + 3*ADSL)1/3000082년에 한번 고장발생

by 융현 | 2007/09/18 13:01 | 장비운영 | 트랙백(2) | 덧글(3)

◀ 이전 페이지          다음 페이지 ▶