본문 바로가기

Projects/Server

proftpd 접속 유지시간 설정

ProFTPd 설정 지시자 중에서 Timeout에 관한 지시자는 다음의
4가지의 지시자가 있습니다.

  - TimeoutLogin : 인증(Login)에 걸리는 시간 설정.
  - TimeoutNoTransfer : 파일 전수송(Transfer)이 없을 경우의 Timeout.
  - TimeoutIdle : 휴(休:Idle) Timeout.
  - TimeoutStalled : 서버와 클라이언트의 지체(지연) 시간에 관련된 시간 설정

이 지시자에 관한 자세한 설명은

http://www.proftpd.org/docs/configuration.html

에 있습니다.

상당히 4개의 지시자가 비슷비슷하군요..
먼저, 간단하게 이 4개의 지시자에 대한 설정법은 다음과 같습니다.


[TimeoutLogin]
  - 구문 : TimeoutLogin seconds
  - 기본값 : 300
  - 범위 : server config
  - 모듈 : mod_core
  - 사용버전 : 0.99.0 이후
  - 설명 :
  Login에 관련된 지시자로써 클라이언트가 한번 인증에 필요한 최대 시간을 설정한다.
  기본값은 300초(5분)로 이 지시자에 의한 설정값이 없다면 300초로 기본 설정된다.
  즉 이 시간 안에 인증이 성공하지 못하면 Logout 된다.
  비교적 원거리의 FTP 클라이언트에서 접속이 자주 들어오면 이 값을 올려주는 것이
  좋다.
  Login time은 자료가 전송 중에는 다시 환원(초기화:reset:0)되지 않으며, 오직
  USER/PASS 명령에 대한 인증을 재전송하는 경우에 초기화(0)된다.
  관련 지시자 : TimeoutNoTransfer, TimeoutIdle


[TimeoutNoTransfer]
  - 구문 : TimeoutNoTransfer seconds
  - 기본값 : 300
  - 범위 : server config
  - 모듈 : mod_core
  - 사용버전 : 0.99.0 이후
  - 설명 :
  이 지시자는 클라이언트가 인증 후, 아무런 파일 전수송(명령어 포함)이 없을 경우 최대
  접속을 유지할 수 있는 시간을 설정한다.
  기본값은 300초로 클라이언트에서 아무런 작업이 없다면 300초(5분) 후에 접속이 종료됨.
  관련 지시자 : TimeoutLogin, TimeoutIdle

[TimeoutIdle]
  - 구문 : TimeoutIdle seconds
  - 기본값 : 600
  - 범위 : server config
  - 모듈 : mod_core
  - 사용버전 : 0.99.0 이후
  - 설명 :
  이 지시자는 ProFTPd가 클라이언트에서 아무런 작업(자료 전수신/자료접속/등등) 없을 경우
  접속을 계속 유지할 수 있는 최대시간을 설정한다.
  이 시간안에 다시 클라이언트에서 작업이 이루어지면 TimeoutIdle은 초기화(0)된다.
  이 점이 TimeoutLogin 지시자와 다르다.
  설정값으로 0으로 설정이 가능한데, 이는 계속적인 접속을 유지하라는 의미이지만,
  별로 좋은 생각이 아니다. 즉, 클라이언트가 접속을 확실히 끊었음에도 불구하고, 수동으로
  child server를 죽이지(kill)이 않은 이상 계속 살아있기 때문이다.

  이 시간(IDLE)을 명령라인에서도 알아볼 수 도 있는데,

  # ftpwho
  1290 1m20s  proftpd: user1 - xxx.xxx.xxx.xxx: IDLE

  여기에서는, user1이 현재 1분 20초 동안 IDEL되는 시간으로 이시간이 600s(10m)이 되면 자동
  접속이 종료됨.
  관련 지시자 : TimeoutLogin, TimeoutNoTransfer


[TimeoutStalled]
  - 구문 : TimeoutStalled seconds
  - 기본값 : 600
  - 범위 : server config
  - 모듈 : mod_core
  - 사용버전 : 0.99.0 이후
  - 설명 :
  이 지시자는 ProFTPd 서버와 FTP 클라이언트 사이에 접속은 되어 있으나 아무런 데이터 이동이
  없을(no actual) 경우(지연, 지체)에 데이터 접속을 유지할 수 있는 최대 시간을 초 단위로
  설정한다.
  또한 0으로도 설정이 가능한데 이는 계속적인 접속 지연을 유지하라는 의미이다.

---

상당히 4개의 지시자가 차이가 없을 정도로 비슷비슷하군요..

간략하게 각각의 지사자의 핵심(용도?)을 요약하자면,

  - TimeoutLogin : 한번 인증에 걸리는 시간 설정.
  - TimeoutNoTransfer : 아무런 반응(전송,명령어 등등)이 없을 경우에 지속적인 접속 유지 설정
  - TimeoutIdle : TimeoutNoTransfer와 거의 동일하나, 무한정(0) 지속적인 접속 유지 설정이 가능
  - TimeoutStalled : 데이터 접속 지연, 지체에 관한 시간 접속 유지 설정

따라서 지속적인 접속을 유지하기 위해서는 TimeoutLogin 지시자를 제외하고, 나머지 3개의 지시자
에 대해서 그 조합(?) 결과가 바로 최종적인 Timeout 시간이다.
그런데 TimeoutStalled 지시자는 데이터 접속의 지연, 지체(네트워크 장애 등등의 원인) 등에 관한
설정이므로, 이 지시자는 클라이언트에서 뭔가 작업이 현재 이루어 지고 있는 것으로 해석되며(뭔가
반응이 있고 시도하고 있음)결국 위의 질문과 대한 답변에 속하지 않은 지시자이다.
따라서 나머지 2개의 지시자 중 설정한 값 중 작은 값이 결국 최종적인 Timeout 시간이다.

참고로, TimeoutLogin 지시자는 Login에 관련된 지시자이므로 지속적인 접속과 관련 없는 지시자임.

##### 중요 #########################################################################
##
## 아마 대부분 사용자가 헷갈리는 부분이 바로 이 부분이다.
## 일례로, 아무리 TimeoutStalled이나 TimeoutIdle 지사자에 대해서 최대 접속시간을 원하는 시간
## 으로 정했다고 하더라도, 사용자가 TimeoutNoTransfer을 설정하지 않으면 이 시지자에 의한 기본값
## 이 300초 이므로 결국 제일 작은 값이 300초가 되고, 클라이언트에서 아무런 작업(반응)이 없다면
## 자동적으로 300초 후에 접속이 끊어지게 된다. 잘못된 설정으로 원하는 시간이 나오지 않음.
##
####################################################################################

그럼 예제를 통해서 몇가지 않아보죠.

예제1. 기본값으로 설정되어 있을 경우

TimeoutLogin 300
TimeoutNoTransfer 300
TimeoutIdle 600
TimeoutStalled 600

기본값 들에 대한 설정값이며, 이 들 내용은 지시자 설정이 없을 경우와 똑 같다(기본값 이므로)
제일 작은 값이 300초(TimeoutNoTransfer) 이므로 클라이언트에서 아무런 작업이 없다면 300초 후에
접속이 끊긴다. TimeoutStalled 지시자는 데이터 접속시 지체 지연시 600초가 넘으면 접속을 끊어라는
의미가 된다.


예제2. TimeoutNoTransfer > TimeoutIdle 인 경우

TimeoutLogin 300
TimeoutNoTransfer 900
TimeoutIdle 600
TimeoutStalled 3600

클라이언트에서 아무런 반응이 없으면 600초(TimeoutIdle) 후에 접속이 종료된다.
즉 ProFTPd 서버측에서 child server를 먼저(600초) 죽이기 때문에 TimeoutNoTransfer이 900초라도
접속이 종료된다.


예제3. TimeoutNoTransfer < TimeoutIdle 인 경우

TimeoutLogin 300
TimeoutNoTransfer 600
TimeoutIdle 900
TimeoutStalled 3600

예제2와 반대의 경우로 IDLE 시간(900-600=300초)이 남아 있더라도 TimeoutNoTransfer에 의해서
먼저(600초) 클라이언트의 접속을 끊어버리기 때문에 접속이 종료된다.


[질문] TimeoutNoTransfer와 TimeoutIdle 지시자 쓰임새가 비슷한데 어떻게 다른가요?

[답변]
메뉴얼에 의하면, T.T

TimeoutNoTransfer :
  - 인증 후 활성화(접속된 상태) 되어 있음.
  - 데이터 접속을 유지(생성)하는 어떤 명령어(ls,?,help,...)가 없을 경우.
  - 데이터 접속(파일 받기/보내기)이 없을 경우.
  - FTP 클라이언트 측면.

TimeoutIdle :
  - 인증 후 활성화(접속된 상태) 되어 있음.
  - 제어(control)나 데이터 접속에 대해서 어떠한 데이터를 받지 않은 경우
  - ProFTPd 서버 측면.


[최종 답변]
만약 접속 후 Logoff 하지 않고 접속을 계속 유지시키는 시간을 30분으로 정하려면,

TimeoutNoTransfer 1800
TimeoutIdle 1800

두개의 지시자를 모두 사용해야 하며, 최소한 이 이상으로 설정해야함.