HaProxy 1.5.8을 FTP 서버로

HaProxy 1.5.8을 FTP 서버로

나는 이것을 몇 번 겪었고 구성에서 완전히 멈췄습니다. 현재 FTP 서버에 대해 다음과 같이 설정되어 있습니다.

로컬 PC(내 MAC) -> AWS EC2(HaProxy) -> FTP 서버

지금까지 수행한 작업은 다음과 같습니다.

  1. 보안 그룹에서 포트 20/21이 열려 있는지 확인했습니다.
  2. SG에서 개방형 TCP 포트를 구성합니다(패시브 포트용).
  3. netstat를 통해 해당 포트가 열려 있는지 확인합니다(온전성 검사로 HaProxy가 TCP 포트 0-65535(SG와 동일)에 바인딩되어 있습니다.
  4. 프록시를 통해 FTP 서버에 연결하려고 할 때 TCPDump 실행

여기 내 haproxy.cfg의 복사본이 있습니다.

listen FTP :21, :10000-10250
        mode tcp
        log 127.0.0.1 local0 debug info warning error
        bind *:21
        bind *:20
        server foo xx.xx.xx.xx:21 check port 21

tcpdump를 실행하면 다음을 얻습니다.

10:54:11.695983 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [P.], seq 45:51, ack 684, win 16384, options [nop,nop,TS val 652929632 ecr 148377527], length 6: FTP: EPSV
10:54:11.726462 IP ec2-54-234-x-x.compute-1.amazonaws.com.ftp > 10.33.x.x.56374: Flags [P.], seq 684:726, ack 51, win 227, options [nop,nop,TS val 148377680 ecr 652929632], length 42: FTP: 229 Extended Passive mode OK (|||12612|)
10:54:11.726513 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [.], ack 726, win 16378, options [nop,nop,TS val 652929662 ecr 148377680], length 0
10:55:27.134823 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [P.], seq 51:80, ack 726, win 16384, options [nop,nop,TS val 653004663 ecr 148377680], length 29: FTP: EPRT |1|10.33.x.x|56397|
10:55:27.165241 IP ec2-54-234-x-x.compute-1.amazonaws.com.ftp > 10.33.x.x.56374: Flags [P.], seq 726:798, ack 80, win 227, options [nop,nop,TS val 148396540 ecr 653004663], length 72: FTP: 500 I won't open a connection to 50.232.x.x (only to 54.234.x.x)
10:55:27.165287 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [.], ack 798, win 16375, options [nop,nop,TS val 653004693 ecr 148396540], length 0
10:55:27.165377 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [P.], seq 80:106, ack 798, win 16384, options [nop,nop,TS val 653004693 ecr 148396540], length 26: FTP: PORT 10,33,x,x,220,77
10:55:27.194982 IP ec2-54-234-x-x.compute-1.amazonaws.com.ftp > 10.33.x.x.56374: Flags [P.], seq 798:870, ack 106, win 227, options [nop,nop,TS val 148396547 ecr 653004693], length 72: FTP: 500 I won't open a connection to 50.232.x.x (only to 54.234.x.x)
10:55:27.195025 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [.], ack 870, win 16375, options [nop,nop,TS val 653004722 ecr 148396547], length 0
10:55:27.195304 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [P.], seq 106:112, ack 870, win 16384, options [nop,nop,TS val 653004722 ecr 148396547], length 6: FTP: LIST
10:55:27.224432 IP ec2-54-234-x-x.compute-1.amazonaws.com.ftp > 10.33.x.x.56374: Flags [P.], seq 870:894, ack 112, win 227, options [nop,nop,TS val 148396555 ecr 653004722], length 24: FTP: 425 No data connection
10:55:27.224464 IP 10.33.x.x.56374 > ec2-54-234-x-x.compute-1.amazonaws.com.ftp: Flags [.], ack 894, win 16381, options [nop,nop,TS val 653004751 ecr 148396555], length 0

HaProxy에 로깅이 구성되어 있으며 현재 다음이 있습니다(도움이 되는지 확실하지 않음).

Jun 12 14:49:25 localhost haproxy[18805]: 50.232.x.x:14857 [12/Jun/2017:14:48:24.811] FTP FTP/media 1/14/60772 792 -- 0/0/0/0/0 0/0
Jun 12 14:49:25 localhost haproxy[18805]: 50.232.x.x:14857 [12/Jun/2017:14:48:24.811] FTP FTP/media 1/14/60772 792 -- 0/0/0/0/0 0/0
Jun 12 14:51:48 localhost haproxy[18805]: 50.232.x.x:56254 [12/Jun/2017:14:49:41.820] FTP FTP/media 1/13/127012 960 -- 0/0/0/0/0 0/0
Jun 12 14:51:48 localhost haproxy[18805]: 50.232.x.x:56254 [12/Jun/2017:14:49:41.820] FTP FTP/media 1/13/127012 960 -- 0/0/0/0/0 0/0
Jun 12 14:52:02 localhost haproxy[18805]: 50.232.x.x:56342 [12/Jun/2017:14:51:54.618] FTP FTP/media 1/14/7670 401 -- 1/1/1/1/0 0/0
Jun 12 14:52:02 localhost haproxy[18805]: 50.232.x.x:56342 [12/Jun/2017:14:51:54.618] FTP FTP/media 1/14/7670 401 -- 1/1/1/1/0 0/0
Jun 12 14:53:36 localhost haproxy[18805]: 50.232.x.x:56345 [12/Jun/2017:14:51:59.386] FTP FTP/media 1/19/97481 1032 -- 0/0/0/0/0 0/0
Jun 12 14:53:36 localhost haproxy[18805]: 50.232.x.x:56345 [12/Jun/2017:14:51:59.386] FTP FTP/media 1/19/97481 1032 -- 0/0/0/0/0 0/0
Jun 12 14:53:59 localhost haproxy[18805]: 50.232.x.x:56373 [12/Jun/2017:14:53:37.880] FTP FTP/media 1/14/21641 333 -- 0/0/0/0/0 0/0
Jun 12 14:53:59 localhost haproxy[18805]: 50.232.x.x:56373 [12/Jun/2017:14:53:37.880] FTP FTP/media 1/14/21641 333 -- 0/0/0/0/0 0/0

FTP 서버에 연결하고 디렉토리로 CD를 이동할 수 있습니다. 하지만 ls/put/get there를 실행할 수는 없습니다. 패시브 모드를 시도하면 다음과 같은 결과를 얻습니다.

ftp> ls
229 Extended Passive mode OK (|||12612|)
ftp: Can't connect to `54.234.x.x': Operation timed out
500 I won't open a connection to 50.232.x.x (only to 54.234.x.x)
425 No data connection

활성 모드에서 실행:

Passive mode: off; fallback to active mode: off.
ftp> ls
500 I won't open a connection to 50.232.x.x (only to 54.234.x.x)
425 No data connection

특히 FTP 서버에서는 프록시를 통해 연결할 수 있기 때문에 이것이 문제가 된다고 생각하지 않습니다. FTP 서버에 직접 연결하더라도 능동 모드와 수동 모드에서 명령을 실행할 수 있습니다. 내 질문은 다음과 같습니다

  • 이 문제를 추가로 해결하기 위해 추가로 무엇을 조사할 수 있습니까?
  • 현재 가지고 있는 것 외에 모든 유형의 TCP 요청에 대한 로깅을 향상하기 위해 수행할 수 있는 추가 로깅 구성이 있습니까?
  • HaProxy에 누락된 구성 측면이 있습니까?(HaProxy 자체가 HTTP 로드 밸런서라는 것을 알고 있지만 FTP 서버의 프록시로 사용되도록 구성하기 위한 충분한 예제를 찾았지만 얻을 수 없습니다. SFTP로 실행되도록 FTP 서버를 재구성하시겠습니까?

답변1

동료들과 함께 많은 연구와 조사를 한 끝에 일어난 일은 다음과 같습니다.

  • HaProxy는 실행 가능한 솔루션이 될 수 있습니다. 그러나 FTP 서버는 수동 모드를 강제하도록 구성되어 있습니다. HaProxy는 FTP 연결을 프록시하는 데 사용할 수 있지만 수동 연결에 따라 반응하도록 구성할 수 있는 실제 방법은 없습니다. 결과적으로 ls/get/put(그리고 아마도 더 많은) 명령을 실행할 수 없습니다!

내 해결책은 ftp-proxy로 가서 구성하는 것이었습니다. 트래픽을 FTP 서버로 라우팅하도록 ftp-proxy를 구성한 후(또한 수동 연결을 수신하도록 구성) VIOLA! 효율적인! !

답변2

나도 같은 작업을 시도했지만 ls 명령이 실패했습니다. 아래는 HA 에이전트에서 구성한 내용입니다. xmldb 10.204.24.71:2100 서버 xmldb1 10.212.22.31:2100 20초 동안 확인 서버 xmldb2 10.212.22.36:2100 20초 동안 확인

10.212.22.36과 10.212.22.31은 FTP 서버를 구동하는 DB 서버이다. 그리고 HA 에이전트를 실행하는 10.204.24.71 서버에서만 액세스할 수 있습니다.

이제 데이터베이스 서버에 대한 액세스 권한은 없지만 HA 프록시 서버에 대한 액세스 권한이 있는 다른 Linux 시스템에서 연결하고 있습니다.

이 작업을 수행하려면 추가 구성을 수행해야 합니까?

관련 정보