HOME > 이용안내
이용안내
 
작성일 : 11-06-17 21:40
[리눅스서버] ftp 접속방식 문제
 글쓴이 : 관리자
조회 : 43,630  
FTP
먼저 FTP 서버가 사용하는 포트는 2개 이다.
하나는 로그인과 디렉토리 검색을 하기위해 사용되는 정보포트와 실제적으로 데이터를 업다운로드하는데 쓰이는 데이터 포트 이다.

FTP 서비스는 패시브모드(Passive-mode)액티브모드(Active-mode) 2가지를 지원한다.
Active-mode 는 클라이언트 기반 접속으로 클라이언트에 선점되지 않은(1024이상)의 포트에서 웹서버쪽에 21번 포트로 FTP를 접속한다.
클라이언트에서 서버쪽으로 port 명령어를 보내는것으로 랜덤포트를 이용하여 서버 포트로 접속하는 것으로 서버포트는 항상 21번 포트로 접속된다.

따라서 Active 모드 접속시에 문제점이 발생되는 경우는 대부분이 클라이언트측에 있다.
FTP 클라이언트는 서버의 데이터포트로 실제 연결을 생성하지 않고 단지 서버에게 자신이 리스닝하는 포트를 이야기하고 서버 클라이언트가 이야기한 포트로 연결을 맺는다.
만일 자신이 공유기나 마스커레이드를 통해서 FTP 서버로 접속을 시도하게 될때 접속이 안되는경우에 대부분은 서버로의 접속후에 클라이언트쪽으로 접속을 요청할때 사설아이피를 못찾아서 실패하는 경우이다.

이는 서버에 Passive 모드접속을 허용하지 않게끔 설정두어서 생기게되는 경우로 서버설정에 변경없이 꼭접속을 하기를 원한다면 공유기를 떼고 다이렉트로 접속해 보면 된다.
이에 공유기나 마스커레이드 같은 사설사용자들을 위해 생겨난 방식이 Passive 모드이다.


Passive-mode
는 서버쪽 21번 포트로 접속시, 클라이언트의 랜덤포트가 아니라 서버쪽 랜덤포트를 이용하게 된다.
서버는 클라언트에게 pasv 명령어를 보내며, 클라이언트는 승인하게 된다.
문제는, 패시브모드의 경우 서버쪽에 1024 에서 65535 포트 사이를 랜덤하게 할당하며, 네트워크 세션이 있을때마다 신규포트를 이용하게 된다.

이때, 서버쪽에 방화벽을 운영하거나 대량접속서비스가 운영중일때는 네트워크 자원이 부족하게 되어 접속장애가 있을수 있다.
FTP를 통한 실제세션은 어떠한지 한번 확인해보자.
아래는 FileZilla를 통해서 FTP 서버로 접속해서 특정 동영상파일을 다운로드하는 과정이다.
# Active-mode 상태로의 FTP 접속
응답: 220 (vsFTPd 2.0.5)
명령: USER mojily
응답: 331 Please specify the password.
명령: PASS **********
응답: 230 Login successful.
명령: SYST
응답: 215 UNIX Type: L8
명령: FEAT
응답: 211-Features:
응답: EPRT
응답: EPSV
응답: MDTM
응답: SIZE
응답: TVFS
응답: 211 End
상태: 접속되었습니다
상태: /DVDRip.XviD.CD1-XXXXX.avi 다운로드 시작 중
명령: PWD
응답: 257 "/"
명령: TYPE I
응답: 200 Switching to Binary mode.
명령: PORT 192,168,0,239,12,13
응답: 200 PORT command successful.
명령: RETR DVDRip.XviD.CD1-XXXXX.avi
응답: 150 Opening BINARY mode data connection for DVDRip.XviD.CD1-XXXXX.avi (162157784 bytes).
응답: 226 File send OK.
상태: 다운로드 완료
명령: PWD
응답: 257 "/"
명령: TYPE A
응답: 200 Switching to ASCII mode.
명령: REST 0
응답: 350 Restart position accepted (0).

접속과정을 통해서 보면 PORT 명령의 옵션으로 6가지의 숫자가 사용되는데 처음 4가지의 숫자는 IP주소를 의미하고 마지막 2가지의 숫자는 포트번호이다.
포트번호의 (첫번재 숫자 * 256) + 두번째 숫자를 계산해보면 실제 포트번호를 얻을수 있다.
PORT 218,236,115,239,12,13
(12 * 256) + 13 = 3085
실제 시스템에서의 포트사용번호를 비교해보면 일치한다.
[root@smileserv src]# netstat -atnp |grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 21414/vsftpd
tcp 0 0 192.168.0.222:21 192.168.0.239:3082 ESTABLISHED 21461/vsftpd
tcp 0 127424 192.168.0.222:20 192.168.0.239:3085 ESTABLISHED 21472/vsftpd
tcp 0 0 192.168.0.222:21 192.168.0.239:3084 ESTABLISHED 21470/vsftpd

패시브모드를 설정하고 확인해보면 이 반대의 결과인 서버쪽에 포트가 변경되서 접속됨이 확인이 가능할 것이다.
따라서 방화벽을 사용하게 되면 접속및 데이터 송수신포트자체가 고정적이지 못할경우에는 문제점이 많다.
이럴대는 서버쪽에 포트를 고정하는 방식(패시브모드)으로 수정해서 사용하면 된다.
이제는 방화벽 설정을 사용하기 위해 패시브 포트를 고정하는 방법을 확인해 보자.

2. Passive-Mode를 사용하기 위한 포트 고정방법
1) Window 시스템
Windows 2000 Server 및 Windows Server 2003 모두 PassivePortRange 값을 이용하여 조정이 가능하다.
Windows Server 2003 의 경우는 메타베이스를 수정
1. 인터넷 정보 서비스 관리] - [로컬 컴퓨터] - [속성 ] - [메타베이스 직접 편집 허용]에 체크
2. C:\WINDOWS\system32\inetsrv 밑에 metabase.xml 을 메모장으로 연다.
3. 고정해야될 패시브 데이타 포트항목을 아래 라인과 같이 추가한다.
PassivePortRange="5001-5001"
..................................................................................
..................................................................................
..................................................................................
<IIsFtpService Location ="/LM/MSFTPSVC"
AdminACL="XXXXXXXX"
AllowAnonymous="TRUE"
AnonymousOnly="FALSE"
AnonymousUserName="IUSR_SERVER-X62W0LSZ"
AnonymousUserPass="XXXXXXXXX"
ConnectionTimeout="120"
DownlevelAdminInstance="1"
ExitMessage=" "
LogAnonymous="FALSE"
LogExtFileFlags="XXXXXXXXX"
LogFileDirectory="C:\WINDOWS\system32\LogFiles"
LogFilePeriod="1"
LogFileTruncateSize="20971520"
LogNonAnonymous="FALSE"
LogOdbcDataSource="TSLOG"
LogOdbcPassword="XXXXXXXXXX"
LogOdbcTableName="FTPLog"
LogOdbcUserName="InternetAdmin"
LogPluginClsid="{FF160663-DE82-11CF-BC0A-00AA006111E0}"
LogType="1"
MSDOSDirOutput="TRUE"
MaxClientsMessage=" "
MaxConnections="100000"
PassivePortRange="5001-5001"
>
</IIsFtpService>
..................................................................................
..................................................................................
..................................................................................

4. 편집한 metabase.xml 파일을 저장한다
5. IIS 를 다시한번 재시작한다.
6. Ipsec 이나 방화벽이 설정되어있다면 tcp 5001을 추가한다.

Windows 2000 Server 의 경우는 레지스트리 값을 추가
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msftpsvc\Parameters\
에서 REG_SZ 타입의 PassivePortRange 값이름을 추가한다.
값으로는, 5500-5700 을 설정한다.


2) Linux 시스템
먼저 패시브 모드를 사용하기 위해서는 서버에 ip_conntrack 모듈이 있어야 한다.
ip_conntrack 은 연결추적 모듈이다. 몇번 IP 가 몇번 포트를 통해서 접속했는지에 대한 정보가 담겨있다.
정보가 담겨있는 위치는 /proc/net/ip_conntrack 이다.
[root@smileserv ~]# cat /proc/net/ip_conntrack
........................................................................................................................
........................................................................................................................
........................................................................................................................
udp 17 27 src=219.78.47.179 dst=111.111.111.241 sport=7957 dport=8630 packets=1 bytes=90 src=111.111.111.241 dst=219.78.47.179 sport=8630 dport=7957 packets=1 bytes=81 mark=0 use=1
udp 17 7 src=58.172.208.159 dst=111.111.111.241 sport=55210 dport=8630 packets=2 bytes=306 src=111.111.111.241 dst=58.172.208.159 sport=8630 dport=55210 packets=2 bytes=411 [ASSURED] mark=0 use=1
udp 17 114 src=111.111.111.1111 dst=222.222.222.22 sport=33181 dport=161 packets=34 bytes=2692 src=222.222.222.22 dst=111.111.111.236 sport=161 dport=33181 packets=34 bytes=2875 [ASSURED] mark=0 use=1


패시브 모드를 사용하기 위한 vsftp.conf 설정
[root@smileserv ~]# vi /etc/vsftpd/vsftpd.conf
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
........................................................................................................................
........................................................................................................................
## 데이터 전송을 위해서 Passive mode를 사용할 것인지 설정 (기본값 = YES)
## => Active Mode로 접근할 수 없는 사용자들을 위해 활성화
pasv_enable=YES
## 패시브 모드로 연결시 할당될 최대 및 최소 포트를 설정 (기본값 = 0)
## => 일반적으로 50000~60000 포트를 지정 (기본값 = 0)
## 기본값인 0은 well-known port를 제외한 무작위 포트를 이용하게 됩니다.
pasv_min_port=50000
pasv_max_port=50001
.......................................................................................................................
........................................................................................................................
패시브 모드를 사용하기 위한 proftpd.conf
[root@smileserv ~]# vi /etc/proftpdproftpd.conf
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
........................................................................................................................
........................................................................................................................
AllowForeignAddress on
# 30000 ~ 32000 Port 를 사용해서 패시브 포트 지정
PassivePorts 50000 50001
.......................................................................................................................
........................................................................................................................
실제로 바뀐부분이 적용되는지를 확인해 본다.
[root@smileserv ~]# netstat -atnp |grep vsftpd ==> FTP 접속전
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 21363/vsftpd

[root@smileserv ~]# netstat -atnp |grep vsftpd ==> FTP 접속중
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 21363/vsftpd
tcp 0 0 192.168.0.222:21 192.168.0.4:3621 ESTABLISHED 21374/vsftpd
tcp 0 0 192.168.0.222:21 192.168.0.4:3622 ESTABLISHED 21377/vsftpd
[root@smileserv ~]# netstat -atnp |grep vsftpd ==> PASV 고정전 데이타 전송중
tcp 0 0 218.236.115.222:34795 0.0.0.0:* LISTEN 21427/vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 21414/vsftpd
tcp 0 0 192.168.0.222:21 192.168.0.4:1090 ESTABLISHED 21422/vsftpd
tcp 0 0 192.168.0.222:21 192.168.0.4:1091 ESTABLISHED 21425/vsftpd
tcp 0 87765 192.168.0.222:34795 192.168.0.4:1106 ESTABLISHED 21427/vsftpd

[root@smileserv ~]# netstat -atnp |grep vsftpd ==> PASV 고정후 데이타 전송중
tcp 0 0 218.236.115.222:50001 0.0.0.0:* LISTEN 21379/vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 21363/vsftpd
tcp 0 116800 192.168.0.222:50001 192.168.0.4:3666 ESTABLISHED 21379/vsftpd
tcp 0 0 192.168.0.222:21 192.168.0.4:3621 ESTABLISHED 21374/vsftpd
tcp 0 0 192.168.0.222:21 192.168.0.4:3622 ESTABLISHED 21377/vsftpd

설정된 정보가 잘 반영되는것이 확인된다.
주의 ) 익스플로러를 통해서 FTP 접속은 패시브 모드방식이다





Cloud server Streaming service Domain Cloud Firewall

 
 

Total 377

번호 제   목   글쓴이 날짜 조회
377 [스크립트언어] [PHP] php에서 Excel 파일 읽기/쓰기 (2) 제이네트워크 2015-01-23 492361
376 [스크립트언어] [php]php.ini 설정에서 register_globals = on/off 차이점과 기능설명 (1) 관리자 2012-02-09 65366
375 [DB] [mysql] DB 에러 메세지 Unable to lock ./ibdata1, error: 11 (1) 제이네트워크 2012-11-18 58253
374 [윈도우서버] [ASP] IIS 7.x 에서 500내부서버오류 정보보기 제이네트워크 2013-02-05 57813
373 [리눅스서버] find 명령어로 일정기간, 특정용량 파일 삭제 및 찾기 제이네트워크 2013-02-27 56162
372 [스크립트언어] [php]php설치후 에러 SAFE MODE Restriction in effect. The script whose uid is 501 is not allowed… 제이네트워크 2013-08-19 52012
371 [리눅스서버] 리눅스서버에서 한글파일명 깨질때 (파일질라나 ftp로 한글깨짐) 제이네트워크 2017-03-16 49103
370 [스크립트언어] php 에러 메세지 출력하기 (php.ini 설정) 제이네트워크 2016-07-27 48913
369 [스크립트언어] [php]설치시 에러 configure: error: xml2-config not found. please check your libxml2 installatio… 관리자 2011-10-11 48307
368 [리눅스서버] Centos 6.x + php5.x 에서 mssql 서버 연동방법 (1) 제이네트워크 2014-12-12 47586
367 [DB] [mysql] 해당 컬럼 값을 1씩 증가시키기 와 mysql 자료형,제약조건,엔진 제이네트워크 2015-01-21 47045
366 [스크립트언어] [XE] xe (제로보드xe) 로그인 패스워드를 잊어 버렸을 경우 제이네트워크 2013-08-06 46473
365 [리눅스서버] 리눅스 서비스 목록 및 내용 (1) 제이네트워크 2014-01-24 46349
364 [기타] 메일 첨부파일에 winmail.dat 파일만 첨부되었을때 확인방법 관리자 2012-01-30 46099
363 [메일] 메일에러 리턴메세지 제이네트워크 2011-06-17 45825
362 [리눅스서버] 리눅스서버 HDD추가및 MOUNT하기 (2) 관리자 2011-06-17 45689
361 [스크립트언어] [php]php5.3.x 버전에서 phpinfo 가 안보일 때 제이네트워크 2013-08-19 45660
360 [리눅스서버] 리눅스 메모리(memory)관리 및 캐시(cache)를 삭제하고 지우는법 제이네트워크 2014-04-30 44972
359 [스크립트언어] [php] configure 중 에러 : error: mcrypt.h not found. Please reinstall libmcrypt. 관리자 2011-07-08 44863
358 [리눅스서버] 리눅스 파일시스템 체크 하기 fsck(e2fsck)사용법 제이네트워크 2013-10-21 44750
357 [윈도우서버] IIS 7.0에서 오류 메시지 [HTTP 오류 403.6-IP 주소 거부] 제이네트워크 2012-07-27 44405
356 [스크립트언어] mysql 설치 후 phpMyAdmin #2002 MySQL 서버에 로그인할 수 없습니다. 해결법 (1) 제이네트워크 2015-09-03 44375
355 [스크립트언어] [ASP]windows2008R2 서버에서 cdo.message 사용시 에러 [CDO.Message.1 error '80040222… (1) 제이네트워크 2015-01-28 44367
354 [윈도우서버] [오류]예약된 작업(작업스케줄러)실행시 0x80090016: 키 세트가 없습니다 제이네트워크 2012-09-11 44361
353 [스크립트언어] php5.3. 이상 버전에서 ZendGuardLoader설치 관리자 2012-02-09 44016
352 [리눅스서버] [아파치서버]mod_url.so 모듈 추가 설치 (웹서버에서 한글링크 허용) 제이네트워크 2016-09-29 43674
351 [리눅스서버] ftp 접속방식 문제 관리자 2011-06-17 43631
350 [스크립트언어] [PHP]PHP코드를 최적화하는 40가지 팁 제이네트워크 2013-12-04 43498
349 [DB] [MSSQL 쿼리] 컬럼값에서 한글, 영문 구분 쿼리 제이네트워크 2012-09-22 43382
348 [기타] [네임서버]네이버웍스를 사용할 경우 MX 레코드 설정 (리눅스 bind의 경우) 제이네트워크 2014-06-13 43179
347 [리눅스서버] [리눅스서버 - ftp] vsftpd.conf 설정의 기본 옵션 제이네트워크 2015-01-16 43135
346 [리눅스서버] 쉘에서 바로 다운로드 업로드 하기(lrzsz) 제이네트워크 2014-01-21 43097
345 [리눅스서버] rsync 를 사용하여 원격지에 데이타 백업하기 (1) 제이네트워크 2013-10-21 43061
344 [리눅스서버] [SSH]SSH Geoip적용 하여 국가별 IP 허용하기 제이네트워크 2015-01-21 42989
343 [리눅스서버] 리눅스 서버에 메모리 뱅크 확인 제이네트워크 2014-01-24 42951
342 [스크립트언어] [php]php5.3.x 에서 zend 설치시 주의 할 점 관리자 2012-02-09 42866
341 [스크립트언어] 그누보드 Function eregi() is deprecated 오류문제~ 관리자 2011-08-01 42504
340 [스크립트언어] php컴파일에러(flex) configure: error: cannot find output from lex; giving up 제이네트워크 2012-11-13 42495
339 [윈도우서버] [robocopy 사용법]윈도우에서 실시간 복사나 스케줄 복사에 사용 관리자 2011-06-13 42249
338 [리눅스서버] SSH 클라이언트 접속시 한글 깨짐 문제 (1) 관리자 2011-06-17 42021
 1  2  3  4  5  6  7  8  9  10