Acesso externo

1. Acesso externo

Daniel Zitzke
guasca

(usa Debian)

Enviado em 22/06/2017 - 11:15h

Bom dia pessoal.

Em princípio estou fazendo uma tarefa muito simples, mas que esta me dando uma pequena dor de cabeça. Instalei o ProFTPd em um Debian 8.7, e internamente acessa certo os diretórios.
Mas como a ideia do FTP é acessar externamente, solicitei a empresa que configura nosso FW (PfSense) o redirecionamento da porta 21, e quando vou acessar externamente, ele não me traz o diretório com os arquivos, chega a pedir autenticação, e no log do proftpd até vejo que o user consegue se autenticar, mas ele retorna o seguinte erro no cliente:

"Erro ao abrir esta pasta no servidor FTP. Certifique-se de que você tem permissão parra acessar a pasta
Detalhes:
200 Type set to A
227 Entering Passive Mode (192.168.x.x.129.32)"

O adm do FW, disse que teria que funcionar se eu desabilitasse o modo passivo no ProFTPd, e comentei esta linha mas continua o problema.

O que será que pode ser?


  


2. Re: Acesso externo

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 22/06/2017 - 11:30h

posta ai o seu proftpd.conf


3. Re: Acesso externo

Daniel Zitzke
guasca

(usa Debian)

Enviado em 22/06/2017 - 11:39h

danniel-lara escreveu:

posta ai o seu proftpd.conf


Olá danniel-lara, segue:


# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes, reload proftpd after modifications, if
# it runs in daemon mode. It is not required in inetd/xinetd mode.
#

# Includes DSO modules
Include /etc/proftpd/modules.conf

# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6 off
# If set on you can experience a longer connection delay in many cases.
IdentLookups off

ServerName "SRV6"
ServerType standalone
DeferWelcome off
AllowForeignAddress on

MultilineRFC2228 on
DefaultServer on
ShowSymlinks on

TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200

DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"

DenyFilter \*.*/

# Use this to jail all users in their homes
DefaultRoot ~

# Users require a valid shell listed in /etc/shells to login.
# Use this directive to release that constrain.
RequireValidShell off

# Port 21 is the standard FTP port.
Port 21

# In some cases you have to specify passive ports range to by-pass
# firewall limitations. Ephemeral ports can be used for that, but
# feel free to use a more narrow range.
# PassivePorts 49152 65534

# If your host was NATted, this option is useful in order to
# allow passive tranfers to work. You have to use your public
# address and opening the passive ports used on your firewall as well.
# MasqueradeAddress 1.2.3.4

# This is useful for masquerading address with dynamic IPs:
# refresh any configured MasqueradeAddress directives every 8 hours
<IfModule mod_dynmasq.c>
# DynMasqRefresh 28800
</IfModule>

# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances 5

# Set the user and group that the server normally runs at.
User proftpd
Group nogroup

# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask 022 022
# Normally, we want files to be overwriteable.
AllowOverwrite on

# Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
# PersistentPasswd off

# This is required to use both PAM-based authentication and local passwords
# AuthOrder mod_auth_pam.c* mod_auth_unix.c

# Be warned: use of this directive impacts CPU average load!
# Uncomment this if you like to see progress and transfer rate with ftpwho
# in downloads. That is not needed for uploads rates.
#
# UseSendFile off

TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log

# Logging onto /var/log/lastlog is enabled but set to off by default
#UseLastlog on

# In order to keep log file dates consistent after chroot, use timezone info
# from /etc/localtime. If this is not set, and proftpd is configured to
# chroot (e.g. DefaultRoot or <Anonymous>), it will use the non-daylight
# savings timezone regardless of whether DST is in effect.
#SetEnv TZ :/etc/localtime

<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>

<IfModule mod_ratio.c>
Ratios off
</IfModule>


# Delay engine reduces impact of the so-called Timing Attack described in
# http://www.securityfocus.com/bid/11430/discuss
# It is on by default.
<IfModule mod_delay.c>
DelayEngine on
</IfModule>

<IfModule mod_ctrls.c>
ControlsEngine off
ControlsMaxClients 2
ControlsLog /var/log/proftpd/controls.log
ControlsInterval 5
ControlsSocket /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>

#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf

#
# This is used for FTPS connections
#
#Include /etc/proftpd/tls.conf

#
# Useful to keep VirtualHost/VirtualRoot directives separated
#
#Include /etc/proftpd/virtuals.conf

# A basic anonymous configuration, no upload directories.

# <Anonymous ~ftp>
User ftp
# Group nogroup
# # We want clients to be able to login with "anonymous" as well as "ftp"
# UserAlias anonymous ftp
# # Cosmetic changes, all files belongs to ftp user
# DirFakeUser on ftp
# DirFakeGroup on ftp
#
# RequireValidShell off
#
# # Limit the maximum number of anonymous logins
# MaxClients 10
#
# # We want 'welcome.msg' displayed at login, and '.message' displayed
# # in each newly chdired directory.
# DisplayLogin welcome.msg
# DisplayChdir .message
#
# # Limit WRITE everywhere in the anonymous chroot
# <Directory *>
# <Limit WRITE>
# DenyAll
# </Limit>
# </Directory>
#
# # Uncomment this if you're brave.
# # <Directory incoming>
# # # Umask 022 is a good standard umask to prevent new files and dirs
# # # (second parm) from being group and world writable.
# # Umask 022 022
# # <Limit READ WRITE>
# # DenyAll
# # </Limit>
# # <Limit STOR>
# # AllowAll
# # </Limit>
# # </Directory>
#
# </Anonymous>

# Include other custom configuration files
Include /etc/proftpd/conf.d/



4. Re: Acesso externo

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 22/06/2017 - 12:25h

guasca escreveu:

"Erro ao abrir esta pasta no servidor FTP. Certifique-se de que você tem permissão parra acessar a pasta
Detalhes:
200 Type set to A
227 Entering Passive Mode (192.168.x.x.129.32)"

Pelo tipo de erro que você descreve, costuma ser problema no Cliente relacionado a liberação de portas no Firewall.

Na mensagem de erro citada a reclamação é em relação à porta 31766 ("129" x 246 = 31734 + "32" = 31766). Sendo que a cada tentativa deverá ser uma porta diferente a ser reclamada -- uma vez que no modo passivo as portas são escolhidas aleatoriamente no interior de um port_ranger.

A conexão com o servidor FTP funciona no seu caso porque neste momento da conexão se está utilizando a Porta de Comandos (21 ou seu valor redirecionado).

Mas quando se tenta listar os arquivos e diretórios aí já se passa a utilizar a Porta de Dados (portas altas 1024:65535) (Esses valores podem ser mais estreitos a depender da configuração do arquivo /proc/sys/net/ipv4/ip_local_port_range e das regras do Firewall, ambos no cliente)

É quando se tenta conectar em uma Porta de Dados que dá o erro por você mencionado.

Possíveis Soluções:

- Verifique se nas regras de Iptables do Firewall no cliente alguma faixa de Portas Altas está liberada. Algo mais ou menos assim:
iptables -A INPUT -p tcp --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 

ou algo mais genérico como:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 

se não tiver, providencie para que tenha.

- aumentar a faixa de portas na variável "PassivePorts" do arquivo proftpd.conf do Servidor. Por exemplo para:

PassivePorts 1024 65535 
Isso faria aumentar as portas disponíveis para a negociação da conexão com o Cliente. o que acabaria aumentando as chances de o Cliente ter alguma porta nessa faixa de portas que atenda as necessidades da conexão FTP em seu modo passivo.

(obs:
- Atualmente é bem mais frequente as conexões por FTP Passivo do que Ativo.
- Ao menos do ponto de vista do Cliente é bem mais fácil uma implementação para o FTP Passivo do que para o Ativo.)




5. Re: Acesso externo

Daniel Zitzke
guasca

(usa Debian)

Enviado em 22/06/2017 - 14:22h

raserafim escreveu:

guasca escreveu:

"Erro ao abrir esta pasta no servidor FTP. Certifique-se de que você tem permissão parra acessar a pasta
Detalhes:
200 Type set to A
227 Entering Passive Mode (192.168.x.x.129.32)"

Pelo tipo de erro que você descreve, costuma ser problema no Cliente relacionado a liberação de portas no Firewall.

Na mensagem de erro citada a reclamação é em relação à porta 31766 ("129" x 246 = 31734 + "32" = 31766). Sendo que a cada tentativa deverá ser uma porta diferente a ser reclamada -- uma vez que no modo passivo as portas são escolhidas aleatoriamente no interior de um port_ranger.

A conexão com o servidor FTP funciona no seu caso porque neste momento da conexão se está utilizando a Porta de Comandos (21 ou seu valor redirecionado).

Mas quando se tenta listar os arquivos e diretórios aí já se passa a utilizar a Porta de Dados (portas altas 1024:65535) (Esses valores podem ser mais estreitos a depender da configuração do arquivo /proc/sys/net/ipv4/ip_local_port_range e das regras do Firewall, ambos no cliente)

É quando se tenta conectar em uma Porta de Dados que dá o erro por você mencionado.

Possíveis Soluções:

- Verifique se nas regras de Iptables do Firewall no cliente alguma faixa de Portas Altas está liberada. Algo mais ou menos assim:
iptables -A INPUT -p tcp --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 

ou algo mais genérico como:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 

se não tiver, providencie para que tenha.

- aumentar a faixa de portas na variável "PassivePorts" do arquivo proftpd.conf do Servidor. Por exemplo para:

PassivePorts 1024 65535 
Isso faria aumentar as portas disponíveis para a negociação da conexão com o Cliente. o que acabaria aumentando as chances de o Cliente ter alguma porta nessa faixa de portas que atenda as necessidades da conexão FTP em seu modo passivo.

(obs:
- Atualmente é bem mais frequente as conexões por FTP Passivo do que Ativo.
- Ao menos do ponto de vista do Cliente é bem mais fácil uma implementação para o FTP Passivo do que para o Ativo.)



Ola raserafim.

Mas creio não ser alguma liberação no cliente, uma vez que fiz um testes de diversos locais, até de uma ADSL doméstica, e critica sempre este mesmo erro, mas de fato agora observando, as portas mudam a cada nova conexão como vc mencionou.

Aumentei a faixa de portas no PassivePorts para 1024 65535 como sugeristes, e ainda esta dando o mesmo erro. Será que não é algum tipo de ajuste que deva ser feito no FW (PfSense) que tenho na rede onde se localiza o server FTP? Ou como o admin do nosso fw sugeriu "desabilitar o modo passivo do FTP Server e assim forçar o uso da porta 21 e 22"?

Muito obrigado pela atenção raserafim


6. Re: Acesso externo

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 23/06/2017 - 00:40h

Se tentou em vários clientes e não funcionou, então, é provável mesmo que o problema seja no servidor.

O mais provável é que o problema esteja relacionado ao Firewall.

Minha aposta é de que o problema se dá porque o Firewall não está permitindo que o Cliente estabeleça uma nova conexão nas portas altas. ou seja, O Firewall não está permitindo conexões com o status NEW (--ctstate NEW) (Flag SYN).

Se realmente for esse o problema, então, as regras desse Firewall estão mais próximas das regras para um Firewall destinado a cliente do que de um Firewall destinado a servidor.

O que diferencia centralmente o modo ativo do modo passivo do FTP é que no modo ativo é o servidor que inicia uma conexão no cliente (assim, o servidor não precisa aceitar conexões com o status NEW -- mas o cliente precisa); já no modo passivo é o cliente que inicia uma conexão no servidor (assim, o servidor precisa aceitar conexões com o status NEW)

A questão é que o modo passivo foi criado para contornar um problema do modo ativo. qual seja, no modo ativo o cliente precisa ser configurado para permitir conexão NEW -- o que contraria o princípio básico da filosofia cliente-servidor uma vez que apenas o Servidor deveria ser conectado.

O FTP ativo é pouquíssimo utilizado hoje em dia porque transfere um problema que deve ser do Servidor para todos os clientes. Talvez você não devesse pensar uma solução por esse caminho. Minha sugestão é a de que você deveria se manter no modo passivo.

Ou como o admin do nosso fw sugeriu "desabilitar o modo passivo do FTP Server e assim forçar o uso da porta 21 e 22"? 
Com essa sugestão do admin a ideia é se manter no FTP ativo. Mas apenas desabilitando o suporte ao modo passivo no servidor não faz com que seja forçado uso na porta 20 (22). Será preciso configurar em todos os clientes para eles utilizarem o modo ativo.

A porta 21, por padrão, sempre é utilizada tanto no modo ativo quanto no passivo -- porque é a Porta de Comandos.

Sugestão para o problema:

no servidor deverá ter algo assim:
iptables -A INPUT -p tcp --dport 1024:65535 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT 







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts