Limitar portas do cliente FTP?

1

Ok, então eu uso o simples cliente linux ftp para baixar / carregar arquivos de servidores ftp. Eu tenho um firewall iptables que bloqueia a maioria das portas e eu tenho que fechar o firewall para que ele funcione. Embora a porta 21 esteja aberta, mas acho que isso explica porque o download funciona e não o upload. O seguinte comando funciona perfeitamente com o firewall:

wget ftp://user:[email protected]

Eu só tenho problemas quando realmente me conecto ao servidor e tento "colocar" / upload de um arquivo para o servidor. Aqui está um exemplo de saída netstat da porta usada naquele momento, mas é sempre diferente.

netstat -a | grep ServerIP
tcp        0 197520 myIP.:59622 ServerIP:ftp-data ESTABLISHED
tcp        0      0 myIP.:40341 ServerIP:ftp      ESTABLISHED

Ambas as portas no intervalo myIP estão bloqueadas e não estou conseguindo adivinhar quais portas eu tenho que abrir. A pesquisa do Google também falha. Em segundo lugar, se eu tentar algo como isto no iptables, isso me dá um erro:

-A INPUT -p tcp --match multiport --dport 40000:40500 -j ACCEPT
iptables-restore v1.4.8: too many ports specified

Em segundo lugar, por que eu precisaria abrir as portas quando eu tiver a seguinte linha antes que as portas sejam bloqueadas no arquivo de configuração:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
por Asad Moeen 18.07.2013 / 19:41

2 respostas

3

Uma possível causa é que você usa o FTP ativo.

O FTP tem um modo ativo e um modo passivo.

Ativo:

In active mode FTP the client connects from a random unprivileged port (N > 1023) to the FTP server's command port, port 21. Then, the client starts listening to port N+1 and sends the FTP command PORT N+1 to the FTP server. The server will then connect back to the client's specified data port from its local data port, which is port 20.

Passivo:

In order to resolve the issue of the server initiating the connection to the client a different method for FTP connections was developed. This was known as passive mode, or PASV, after the command used by the client to tell the server it is in passive mode. In passive mode FTP the client initiates both connections to the server, solving the problem of firewalls filtering the incoming data port connection to the client from the server. When opening an FTP connection, the client opens two random unprivileged ports locally (N > 1023 and N+1). The first port contacts the server on port 21, but instead of then issuing a PORT command and allowing the server to connect back to its data port, the client will issue the PASV command. The result of this is that the server then opens a random unprivileged port (P > 1023) and sends P back to the client in response to the PASV command. The client then initiates the connection from port N+1 to port P on the server to transfer data.

- FTP ativo vs. FTP passivo, uma explicação definitiva

Isso significa que você tem duas opções:

  1. Opção fácil: use o modo passivo
  2. Opção difícil: Permitir conexões de entrada da porta 20, de qualquer host do qual você já tenha uma conexão estabelecida.

Eu escolheria a opção 1

    
por 18.07.2013 / 21:21
1

Para realizar a opção 2 da resposta de Christopher Perrin , você pode usar o recent extensão de correspondência. Ele adiciona o endereço IP de origem a uma lista que você pode verificar nas regras subsequentes. Para essas regras, assumi que eth0 é sua interface WAN.

iptables -A FORWARD -o eth0 -p tcp --dport 21 -m state --state ESTABLISHED -m recent --name trustedftp --set
iptables -A FORWARD -i eth0 -p tcp --sport 20 -m recent --name trustedftp --seconds 30 --rcheck -j ACCEPT

Eu não testei isso, mas acho que deve funcionar.

    
por 19.07.2013 / 17:00