Dúvida Firewall Netfilter [RESOLVIDO]

1. Dúvida Firewall Netfilter [RESOLVIDO]

Matheus Gutjahr Stolf
matheusgs01

(usa Debian)

Enviado em 08/05/2019 - 10:45h

Bom dia senhores(a),

Estou iniciando meu conhecimento no assunto de Firewall em geral e estou começando o aprendizado justamente com a ferramenta Netfilter.

Antes de tudo, vou explicar o meu cenário:
Tenho um servidor WEB (apache2) rodando na distro debian9 stretch, no qual está configurado a aplicação de gestão de chamados GLPI, pretendo disponibilizar este acesso WEB para todas as nossas filiais, portanto gostaria de fazer isto de forma segura e eficiente.

Atualmente ainda não tenho um Firewall protegendo a minha borda, portanto estou criando um Firewall especificamente para proteger o servidor web, unica coisa que temos na borda é uma mikrotik que é controlada pelo nosso provedor de internet.

Segue abaixo o código do meu Firewall até o momento:


#!/bin/bash

## Limpando as tabelas
iptables -F
iptables -t nat -F
iptables -t mangle -F

## Fechando as Políticas
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

## Liberando LoopBack
iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -d 127.0.0.1 -j ACCEPT

#Criar LOG de entrada de pacotes no Firewall
iptables -A INPUT -p tcp --dport 8080 -j LOG --log-prefix "Firewall.: Acesso HTTP:"

# Linha abaixo evita ataques Denial of Service (DoS)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

#Permitir conexões de entrada estabelecidas
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Liberando acesso a rede interna nas portas necessárias:
iptables -A INPUT -p tcp -s $_REDE_INTERNA --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -s $_REDE_INTERNA --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s $_REDE_INTERNA --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -s $_REDE_INTERNA --dport 3306 -j ACCEPT

#Liberando acesso a filial 1 nas portas necessárias
iptables -A INPUT -p tcp -s $IP_EXT_FILIAL1 --dport 8080 -j ACCEPT


Estive lendo sobre o assunto e identifiquei que o correto quando disponibilizado um acesso externo, o correto é disponibilizar uma porta de acesso alta e redirecionar para uma porta baixa, contudo, estou com algumas dúvidas.

Este redirecionamento de portas tem que ser feito na borda ou no próprio firewall da aplicação? Exemplo eu poderia solicitar no momento para o meu provedor fazer o redirecionamento das solicitações externas da porta 8080 para um IP Interno, correto? Devo pedir para eles inserirem a porta especifica nesta regra ou é mais seguro eu fazer o redirecionamento de portas com um nat no netfilter conforme abaixo?


echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -d $IP_EXT_FILIAL1 --dport 8080 -j DNAT --to $IP_HOST:80

Obs.: Me perdoem se a regra acima está incorreta, ainda não testei a mesma.

Existe mais alguma boa pratica para deixar este firewall mais robusto minimizando problemas de invasões?


  


2. MELHOR RESPOSTA

Marcos Piske Sendecki
DebUser

(usa Debian)

Enviado em 11/05/2019 - 22:02h

matheusgs01 escreveu:

Bom dia senhores(a),

Estou iniciando meu conhecimento no assunto de Firewall em geral e estou começando o aprendizado justamente com a ferramenta Netfilter.

Antes de tudo, vou explicar o meu cenário:
Tenho um servidor WEB (apache2) rodando na distro debian9 stretch, no qual está configurado a aplicação de gestão de chamados GLPI, pretendo disponibilizar este acesso WEB para todas as nossas filiais, portanto gostaria de fazer isto de forma segura e eficiente.

Atualmente ainda não tenho um Firewall protegendo a minha borda, portanto estou criando um Firewall especificamente para proteger o servidor web, unica coisa que temos na borda é uma mikrotik que é controlada pelo nosso provedor de internet.

Segue abaixo o código do meu Firewall até o momento:


#!/bin/bash

## Limpando as tabelas
iptables -F
iptables -t nat -F
iptables -t mangle -F

## Fechando as Políticas
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

## Liberando LoopBack
iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -d 127.0.0.1 -j ACCEPT

#Criar LOG de entrada de pacotes no Firewall
iptables -A INPUT -p tcp --dport 8080 -j LOG --log-prefix "Firewall.: Acesso HTTP:"

# Linha abaixo evita ataques Denial of Service (DoS)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

#Permitir conexões de entrada estabelecidas
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Liberando acesso a rede interna nas portas necessárias:
iptables -A INPUT -p tcp -s $_REDE_INTERNA --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -s $_REDE_INTERNA --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s $_REDE_INTERNA --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -s $_REDE_INTERNA --dport 3306 -j ACCEPT

#Liberando acesso a filial 1 nas portas necessárias
iptables -A INPUT -p tcp -s $IP_EXT_FILIAL1 --dport 8080 -j ACCEPT


Estive lendo sobre o assunto e identifiquei que o correto quando disponibilizado um acesso externo, o correto é disponibilizar uma porta de acesso alta e redirecionar para uma porta baixa, contudo, estou com algumas dúvidas.

Este redirecionamento de portas tem que ser feito na borda ou no próprio firewall da aplicação? Exemplo eu poderia solicitar no momento para o meu provedor fazer o redirecionamento das solicitações externas da porta 8080 para um IP Interno, correto? Devo pedir para eles inserirem a porta especifica nesta regra ou é mais seguro eu fazer o redirecionamento de portas com um nat no netfilter conforme abaixo?


echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -d $IP_EXT_FILIAL1 --dport 8080 -j DNAT --to $IP_HOST:80

Obs.: Me perdoem se a regra acima está incorreta, ainda não testei a mesma.

Existe mais alguma boa pratica para deixar este firewall mais robusto minimizando problemas de invasões?


Olá,

Geralmente o pessoal indica que a porta seja alta devido ao alto número de bots que ficam varrendo as portas abertas para explorar vulnerabilidades, porém isso pode ser evitado se você simplesmente criar um bloqueio de toda a internet para o serviço e liberar o acesso apenas para a filial. Para um rede segura o indicado é o uso de uma vpn, visto que se um hacker consiga comprometer um roteador que passe da matriz para a filial o tráfego poderia ser capturado, porém como é informação não sigilosa como você mencionou(GLPI), uma regra de bloqueio irá funcionar bem.
Quando utilizado o firewall na borda como você mencionou, as regras precisam ser na cadeia FORWARD. As regras na cadeia INPUT só se aplicam caso o servidor apache, mysql, ssh estiverem no próprio firewall. Irei dar alguns exemplos como utilizo, claro que precisa ser adaptado conforme o seu cenário...

*Estou supondo que a interface de rede WAN, seja a eth0 e a LAN seja a eth1
IP do servidor apache 192.168.1.254

Regra para redirecionar a porta 80 da interface de internet (eth0) para o endereço 192.168.1.254
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to 192.168.1.254:80

Regra para bloqueio de toda conexão vinda da internet com destino a porta 80, com exceção do IP da filial:
iptables -A FORWARD -p tcp --dport 80 -i eth0 ! -s 123.123.123.123 -j DROP

Regras para permitir acesso do endereço IP da filial(123.123.123.123) para o servidor com bloqueio de syn flood:
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.254 --syn --dport 80 -m recent --name HTTPSUSPEITO --set
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.254 --dport 80 --syn -m recent --name HTTPSUSPEITO --rcheck --seconds 3600 --hitcount 50 -m limit --limit 1/h --limit-burst 1 -j LOG --log-prefix '[fw-http-bruteforce-wan]'
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 192.168.1.254 --dport 80 --syn -m recent --name HTTPSUSPEITO --rcheck --seconds 3600 --hitcount 50 -j DROP
iptables -A FORWARD -p tcp -i eth0 -o eth1 -s 123.123.123.123 -d 192.168.1.254 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Caso surgir uma nova filial com IP 12.12.12.12, por exemplo, basta adicionar a regra:
iptables -A FORWARD -p tcp -i eth0 -o eth1 -s 12.12.12.12 -d 192.168.1.254 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Faça as mesmas regras para todas as portas que precisar...
**Existe mais alguma boa pratica para deixar este firewall mais robusto minimizando problemas de invasões?
Para minimizar os problemas de invasão utilize senhas fortes e prefira utilizar chaves no ssh, se possível libere somente para o ip necessário, também existe o conceito de port knock caso isso não for possível.
Depois de definido as regras pense em colocar um IDS/IPS se a aplicação(GLPI) for critica.
Também leve em consideração firewall como o pfsense(utm), ou um next generation, porém os custos são bem maiores...

3. Re: Dúvida Firewall Netfilter [RESOLVIDO]

Matheus Gutjahr Stolf
matheusgs01

(usa Debian)

Enviado em 13/05/2019 - 17:00h

Obrigado por suas dicas!


Atenciosamente,

Matheus Gutjahr Stolf


4. Re: Dúvida Firewall Netfilter [RESOLVIDO]

Patrick
Freud_Tux

(usa Outra)

Enviado em 18/08/2019 - 18:57h

Apenas para marcar o tópico, para não perder.

T+

-------------------------------------------------------------------------------------------------------------------------------------------------
Noob: "[...]Sou muito noob ainda usando o terminal, então preciso de ajuda "mastigada", pra operá-lo."
zhushazang: "Sou velho e meus dentes desgastados. Estude linux www.guiafoca.org";






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts