VPS(ovh)에 pureftpd를 설치했습니다. 작은 디렉토리를 나열할 수 있지만(작다는 것은 단지 몇 개의 파일만 있는 디렉토리를 의미합니다), 수천 개의 파일(디렉터리 포함)이 있는 큰 디렉토리를 나열하려고 하면 filezilla 클라이언트에서 "Unable to"라는 오류 메시지가 나타납니다. "ps" 디렉터리를 클릭하면 클라이언트 측에서 디렉터리 목록 검색" 오류 메시지가 나타납니다.
Command: USER xxxxx
Response: 331 User xxxxx OK. Password required
Command: PASS ************
Response: 230 OK. Current directory is /
Command: OPTS UTF8 ON
Response: 200 OK, UTF-8 enabled
Status: Connected
Status: Retrieving directory listing...
Command: CWD /ps
Response: 250 OK. Current directory is /ps
Command: TYPE I
Response: 200 TYPE is now 8-bit binary
Command: PASV
Response: 227 Entering Passive Mode (<my_vps_ip>,156,188)
Command: MLSD
Response: 150 Accepted data connection
Response: 226-Options: -a -l
Response: 226 33 matches total
Error: Connection timed out
Error: Failed to retrieve directory listing
명령줄에서는 끝없이 기다립니다.
ftp> cd ps
250 OK. Current directory is /ps
ftp> ls
200 PORT command successful
150 Connecting to port 38359
나는 이 규칙을 읽고 내 서버의 문제를 해결했기 때문에 이 규칙을 iptables에 추가했습니다.
root@vpsxxx:/var/www/html# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data ctstate RELATED,ESTABLISHED /* Allow ftp connections on port 20 */
ACCEPT tcp -- anywhere anywhere tcp spts:1024:65535 dpts:1024:65535 ctstate ESTABLISHED /* Allow passive inbound connections */
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data ctstate ESTABLISHED /* Allow ftp connections on port 20 */
ACCEPT tcp -- anywhere anywhere tcp spts:1024:65535 dpts:1024:65535 ctstate RELATED,ESTABLISHED /* Allow passive inbound connections */
puretpd에 패시브 모드에 대한 수정 포트 범위를 추가했습니다.
root@xxx:/var/www/html# cat /etc/pure-ftpd/conf/PassivePortRange
40110 40210
root@xxx:/var/www/html#
나열하려는 ps 디렉토리의 권한은 다음과 같습니다.
drwxr-xr-x 25 root root 4096 May 9 08:29 ps
이것은 내 클라이언트 OS(Debian 8)의 iptables입니다.
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
내가 시도한 모든 것이 쓸모없고 효과가 없는 것 같습니다. Wireshark를 사용하여 트래픽 분석을 시도했는데 FTP-DATA 프로토콜 패키지의 디렉터리 목록 일부를 가져오는 것처럼 보이지만 문제가 발생하지만 무엇인지 모르겠습니다...
방금 proftpd와 동일한 문제가 있다는 것을 알았습니다. puretpd를 사용하는 것이 더 나을 것이라고 생각했지만 그렇지 않았습니다 :)
답변1
귀하의 의견을 포함한 문제 설명에 따르면 방화벽( iptables
)이 TCP 포트 20 및 21과의 연결을 차단하고 있습니다. 수동 FTP를 사용하더라도(수신 21은 분명히 열려 있음) 이러한 연결이 필요합니다.
자세히 알아보려면 방화벽 블록에 대한 로그를 검색하세요.
dmesg | grep -i firewall | tail -40
파일을 다운로드하려고 시도한 후 실패합니다.
또한 AppArmor 또는 기타 보안 기능으로 인해 pureftpd
이러한 파일을 제공하는 프로세스가 차단될 수 있습니다. 따라서 위의 내용에 포트 차단이 표시되지 않으면 차단을 해제하여 문제를 해결할 수 있으며 로그 파일도 살펴보세요( s 없는 출력을 ls -ltr /var/log
제외하고 후보 로그 파일을 확인해 보세요 ).dmesg
grep