Iptables e FTP

1. Iptables e FTP

Matheus
matheuspt

(usa Slackware)

Enviado em 19/09/2014 - 13:57h

Criei várias regras com o iptables e todas funcionaram muito bem até o momento. Porém ao configurar o servidor FTP me debati em um problema. Quando a política de saída é configurada para drop, o ftp não conecta, ainda que a regra foi incluída na cadeia do iptables. Também adicionei os módulos do conntrack com o modprobe mas ainda assim sem sucesso.

Segue meu rc.firewall para melhor compreensão.



# LIMPANDO REGRAS

iptables -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# STATEFUL FIREWALL

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#REQUISICOES DE SAIDA DNS

iptables -A OUTPUT -o eth0 -p udp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

# SAIDA/ENTRADA SSH
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

# DIRETRIZES GLOBAIS

iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP

# TRATAMENTO ICMP

iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 10/second -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

# REGRAS DO FTP

iptables -A INPUT -m tcp -p tcp -m multiport --dports 20,21 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -m tcp -p tcp -m multiport --dports 20,21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# MODO PASSIVO
iptables -A INPUT -p tcp -m tcp --sport 1024: --dport 1024 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# HTTP
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT


# SAMBA

iptables -A INPUT -i eth0 -p tcp --dport 445 -s 192.168.1.1/24 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 139 -s 192.168.1.1/24 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 445 -s 192.168.1.1/24 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 139 -s 192.168.1.1/24 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 137 -s 192.168.1.1/24 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 138 -s 192.168.1.1/24 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --sport 137 -s 192.168.1.1/24 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --sport 138 -s 192.168.1.1/24 -j ACCEPT

# NTP
iptables -A INPUT -i eth0 -p udp --dport 123 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --sport 123 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# PORT-KNOCKING

# KNOCK1
#iptables -N STATE0
#iptables -A STATE0 -p udp --dport 12345 -m recent --name KNOCK1 --set -j DROP
#iptables -A STATE0 -j LOGDROP

# KNOCK2
#iptables -N STATE1
#iptables -A STATE1 -m recent --name KNOCK1 --remove
#iptables -A STATE1 -p udp --dport 23456 -m recent --name KNOCK2 --set -j DROP
#iptables -A STATE1 -j STATE0

# KNOCK3

#iptables -N STATE2
#iptables -A STATE2 -m recent --name KNOCK2 --remove
#iptables -A STATE2 -p udp --dport 34567 -m recent --name KNOCK3 --set -j DROP
#iptables -A STATE2 -j STATE0

# ACEITANDO AS REGRAS
#iptables -N STATE3
#iptables -A STATE3 -m recent --name KNOCK3 --remove
#iptables -A STATE3 -p tcp --dport 22 -j ACCEPT
#iptables -A STATE3 -j STATE0

# VERIFICANDO OS FLAGS
#iptables -A INPUT -m recent --name KNOCK3 --rcheck -j STATE3
#iptables -A INPUT -m recent --name KNOCK2 --rcheck -j STATE2
#iptables -A INPUT -m recent --name KNOCK1 --rcheck -j STATE1
#iptables -A INPUT -j STATE0

# CRIANDO LOGS

iptables -N LOGDROP
iptables -A INPUT -p tcp -j LOGDROP
iptables -A INPUT -p udp -j LOGDROP

# LIMITAR O TAMANHO DO ARQUIVO
iptables -A LOGDROP -m limit --limit 7/min --limit-burst 10 -j LOG
iptables -A LOGDROP -j DROP


O fato é que quando ele encontra-se com a política output drop, o cliente ftp não conecta. Quando está com output accept o cliente conecta normalmente.

Alguma luz?

Grato.



  


2. Re: Iptables e FTP

leonardo Souza
lejoso

(usa Debian)

Enviado em 19/09/2014 - 14:34h

Primeiro teria que saber se a conexão ftp que você está tentando é no modo ativo ou passivo para ter mais clareza da origem do problema.
De qualquér forma, acredito que uma das alternativas abaixo funcionará.

Se o Ftp estiver no modo ativo:

iptables -I OUTPUT -p tcp --sport 20 -j ACCEPT

Se tiver no modo passivo:

iptables -I OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Att,

Lejoso


3. Re: Iptables e FTP

Matheus
matheuspt

(usa Slackware)

Enviado em 19/09/2014 - 15:23h

Obrigado pela resposta Lejoso. Porém não acredito que haja alguma relação entre o modo passivo ou ativo, pois trato ambos no firewall. Além disso, a conexão direta no servidor com o comando ftp localhost também me resulta no mesmo erro.


4. Re: Iptables e FTP

Patrick Ernandes
patrickernandes

(usa Debian)

Enviado em 19/09/2014 - 15:37h

Ola,

Aqui tem um otimo artigo com o vsftp e a configuração do firewall, talvez te de uma ideia melhor.

http://xmodulo.com/2014/06/secure-ftp-service-vsftpd-linux.html




5. Re: Iptables e FTP

leonardo Souza
lejoso

(usa Debian)

Enviado em 19/09/2014 - 16:12h

O modo do FTP sempre pode influenciar nas regras de firewall já que a diferença de estrutura do ativo pro passivo é grande.
Cria as regras, testa e depois posta aqui.
Outro detalhe é que a conexão via localhost também passa pela chain OUTPUT, logo depende das mesmas estarem devidamente configuradas.


6. Re: Iptables e FTP

Matheus
matheuspt

(usa Slackware)

Enviado em 19/09/2014 - 16:46h

Tentei os inputs que me passaste porém como desconfiei não deu resultado, pois essas regras já estavam definidas no rc.firewall...

De qualque modo obrigado pela atenção....


7. Re: Iptables e FTP

Buckminster
Buckminster

(usa Debian)

Enviado em 19/09/2014 - 16:53h

E qual é o problema em deixar a política padrão OUTPUT como ACCEPT?

Eu sempre coloco INPUT DROP, FORWARD DROP e OUTPUT ACCEPT.

De qualquer maneira faça assim:

iptables -I INPUT -p tcp -i lo -s 127.0.0.1 --dport 20,21 -m state --state NEW -j ACCEPT
iptables -I INPUT -p tcp --dport 20,21 -m state --state NEW,ESTABLISHED,RELATED -j DROP

Daí pode deixar OUTPUT como DROP.








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts