ftp modo passivo e php

1

Eu tenho um servidor web Apache rodando nesta máquina com Debian stable, este programa PHP tem que conectar usando FTP a um servidor online remoto entre outras coisas.

Tudo funcionou bem até que eu instalei um servidor FTP ( vsftpd versão 3.0.3-8 + b1), mas não acho que esse seja o culpado.

Agora recebo este erro

Os erros exatos são:

I won't open a connection to x.x.x.x --->*remote server ip* (only to x.x.x.x ---->*my public ip*)

E nem mesmo ls diretórios remotos, recebendo este erro:

Unable to list directory

Eu suspeito que isso ocorre porque o FTP é executado no modo ativo "por padrão" agora, mas eu realmente não tenho certeza. Esses erros parecem algo relacionados com o modo passivo.

O que você acha?

  • Versão do Debian: Debian GNU / Linux 9
  • Versão do PHP: 7.0.30-0 + deb9u1

As rotinas PHP sobre as quais estamos falando são: ftp_login() e ftp_fput()

Eu acho que é o modo auto ativo porque toda vez que eu uso ftp_pasv(, true) ele funciona bem. Não precisou especificar antes.

    
por Carondimonio 29.08.2018 / 16:13

1 resposta

1

Problema na mão

Você está relatando que não pode se conectar ao seu servidor ftp remoto. Você recebe a seguinte mensagem de erro:

I won't open a connection to x.x.x.x remote server ip (only to x.x.x.x my public ip)

Dependendo de se você está usando uma solução php ftp ou vsftpd como sua solução de servidor ftp , eu posso ter encontrado duas soluções possíveis.

1. Correção de configuração possível do VSFTP

Você só precisa corrigir sua configuração vsftp . Eu encontrei esta postagem do fórum pelo usuário nhtrader que poderia fornecer uma solução possível. Por favor, leia-o na íntegra para se certificar de que se aplica a você.

  • Primeiramente, este é um servidor ftp localizado remotamente ou dentro de sua casa / LAN? Verifique se você pode autenticar ou pelo menos se comunicar com o servidor sem usar o serviço ftp .

  • Em segundo lugar, verifique se o seu roteador pode suportar o encaminhamento de porta e adicionar as portas relevantes que você precisa à lista de encaminhamento de porta do roteador. Se você estiver usando um VPS para o servidor ftp , faça referência à documentação referente aos métodos de encaminhamento e suporte de porta para ftp , autenticação, gerenciamento remoto etc.

  • O GRC, fornece uma ferramenta decente para verificar se a sua rede doméstica está bloqueando qualquer portas ou serviços que você irá requerer. Esta pode ser uma boa verificação para verificar se o seu encaminhamento de porta funciona e não está bloqueado pelo seu ISP. Você também precisará criar regras de firewall no seu host e servidor para permitir conexões através das portas que você deseja usar.

  • Em terceiro lugar, edite seu arquivo de configuração vsftpd localizado em /etc/vsftpd.conf .

Adicione as seguintes entradas ao arquivo usando sudo nano /etc/vsftpd.conf :

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
idle_session_timeout=600
data_connection_timeout=120
ftpd_banner=[Whatever message of your choice]
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem

As seguintes entradas podem ser de sua propriedade, como as portas que você deseja usar, estas são apenas as que usuário nhtrader usado .

listen_port=26   
pasv_max_port=7004
pasv_min_port=7000

Se você estiver usando um endereço IP dinâmico e não tiver estático, use esta entrada:

pasv_addr_resolve=YES

Se você estiver usando um endereço IP estático, use isso:

pasv_address=x.x.x.x

Salve e feche o arquivo de configuração e reinicie o vsftpd service.

 sudo systemctl restart vsftpd.service

Agora você deve conseguir se conectar ao seu servidor ftp corretamente. Mais uma vez, sugiro que você examine a postagem no fórum , pois ela abrange muitos informações e possíveis problemas.

2. Correção possível do PHP

De acordo com o usuário Martin Prikryl em esta postagem de estouro de pilha , você pode resolver essa mensagem de erro exata movendo ftp_pav após ftp_login no php module que você está usando em seu servidor.

$conn_id = ftp_connect('x.x.x.x');

ftp_login($conn_id, 'user', 'pass');

ftp_pasv($conn_id, true);

Ele encontrou essa resposta consultando a documentação do php . Por favor, leia todos os links para se certificar de que esta é uma correção aplicável para você.

Conclusão

Primeiro, verifique se sua configuração de vsftpd ou outro ftp está correta, se seu firewall permite ftp de conexões e se você pode se conectar ao seu host. Consulte a documentação do seu VPS ou roteador para obter as melhores práticas ao fazer isso.

Eu também incluirei um link para a% man_de% manpage para referência. Tem um link para uma página explicando o que cada entrada do arquivo de configuração faz.

Por favor, comente se você tiver dúvidas ou problemas com esta resposta. Eu sugiro que você leia cada link que eu forneci completamente antes de tentar os comandos. Eu aprecio o feedback para corrigir quaisquer equívocos e melhorar minhas postagens. Eu posso atualizar minha resposta conforme necessário.

Melhor da sorte!

    
por 29.08.2018 / 17:06

Tags