há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)? [RESOLVIDO]

1. há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 25/05/2017 - 13:38h

qual o sentido de definir na tabela filter o OUTPUT com a política padrão DROP e então ir liberando os acessos necessários por meio de regras ACCEPT?

haveria um ganho no nível de segurança?

ou esse tipo de política representaria mais um esforço não-recompensador do que um ganho em segurança?

que tipo de situações essa política restritiva preveniria?

é fácil visualizar a importância de se fechar uma porta no INPUT: por exemplo, evitaria ou dificultaria um possível ataque àquela porta;

mas o que se evitaria com o bloqueio de uma determinada porta no OUTPUT?

não estou aqui com este tópico tomando qualquer posição quanto à política padrão para o OUTPUT. minha intenção é tão somente ampliar meu entendimento sobre regras de segurança para um firewall.



  


2. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)? [RESOLVIDO]

Takahashi
signout

(usa Slackware)

Enviado em 25/05/2017 - 18:22h

Boas....
Existe um tópico em que já discutiram isso:
https://www.vivaolinux.com.br/topico/Squid-Iptables/DROP-na-INPUT-e-OUTPUT-e-necessario

Alguns adms recomendam deixar tudo em DROP (inclusive OUTPUT) para melhorar controle de banda, ter total controle das regras, restringir acesso a determinados sites a partir do servidor, etc.

Particularmente, depende da finalidade do firewall, disponibilidade para ficar dar manutenção nas regras, etc.

Se o firewall for utilizado somente para liberar o acesso à internet (forward) então não colocaria o output como DROP.
Se o firewall for utilizado na sua estação e voce quer liberar acesso somente à alguns sites, então sim.

De qualquer maneira, essa é a minha opinião e pode não refletir a sua necessidade.....

Espero que ajude.
[]s





3. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 29/05/2017 - 15:01h

signout, obrigado pela sugestão e pela indicação do post.

pois é... tenho chegado a uma conclusão parcial no mesmo sentido que a sua...

a de que não há ganhos de segurança (por enquanto diria "substantivo") utilizando-se uma política restritiva no OUTPUT.

estava pensando... por exemplo... se utilizar uma política restritiva no OUTPUT com o intuito de bloquear o uso de serviço como SSH ou TELNET...me parece (ainda não tenho certeza) que com o bloqueio no INPUT esses serviços já não teriam como funcionar (uma vez que as conexões não teriam como se estabelecerem sendo bloqueadas no INPUT....[apenas acho também])

talvez seja como você também sugeriu... uma política restritiva teria mais sentido no caso de uma necessidade de restringir determinados sites, ou algo parecido...

enfim, de todo modo espero ainda outras sugestões, opiniões e esclarecimentos neste post..!






4. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)?

Buckminster
Buckminster

(usa Debian)

Enviado em 29/05/2017 - 16:11h

INPUT - (entrada - para pacotes destinados a sockets locais, pacotes destinados para o próprio servidor);
FORWARD - (para pacotes sendo roteados através do servidor, pacotes que passam pelo servidor) e
OUTPUT - (para pacotes gerados localmente, pacotes oriundos do próprio servidor com destino para fora dele).

Vantagem:
Dropar a chain OUTPUT aumentaria a segurança em caso de invasão do servidor e isso impediria que as porcarias se espalhassem pela rede.
Mas é lógico que isso depende do nível de segurança necessário para a rede.
Geralmente dropa-se a INPUT e a FORWARD e libera-se a OUTPUT nas políticas padrões

Desvantagem:
Dropar a chain OUTPUT e ir liberando depois somente o que se quer pode ocasionar o bloqueio de algum pacote e/ou porta necessário para algum processo e/ou programa. Claro que depois durante o uso da rede pode se ir liberando tais pacotes e/ou portas, mas daí depende de um acompanhamento no servidor.

E dê uma lida no link fornecido pelo signout, as informações ali são bastante pertinentes.

https://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras/


5. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 09/06/2017 - 19:29h

Buckminster, agradeço os comentários e a sugestão do link: um texto de sua autoria que já conhecia e que considero um bom apanhado sobre o iptables!

Vantagem:
Dropar a chain OUTPUT aumentaria a segurança em caso de invasão do servidor e isso impediria que as porcarias se espalhassem pela rede.
Mas é lógico que isso depende do nível de segurança necessário para a rede.

se vc puder detalhar um pouco mais...agradeço.

fiquei pensando nessa hipótese, mas não consegui imaginar nada de muito concreto.

mesmo porque, como mencionei no meu último tópico, estava em mente que ter bloqueado um determinado tipo de conexão de fora para dentro já inviabilizaria essas conexões de dentro para fora. um argumento para se pensar assim é que, em geral, as conexões precisam de confirmações.... (se bem que o UDP não...)

enfim... não estou seguro disso...



6. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)?

Buckminster
Buckminster

(usa Debian)

Enviado em 09/06/2017 - 20:55h

Veja bem:

INPUT - (entrada - para pacotes destinados a sockets locais, pacotes destinados para o próprio servidor, pacotes que vem de fora com destino para o servidor onde o Iptables está instalado);
FORWARD - (para pacotes sendo roteados através do servidor, pacotes que passam pelo servidor, ou seja, pacotes que vem de fora e passam pelo servidor com destino à rede) e
OUTPUT - (para pacotes gerados localmente, pacotes oriundos do próprio servidor com destino para fora dele, ou seja, pacotes que o próprio servidor gera com destino para a rede externa e/ou rede interna).

"mesmo porque, como mencionei no meu último tópico, estava em mente que ter bloqueado um determinado tipo de conexão de fora para dentro já inviabilizaria essas conexões de dentro para fora."

Esse teu raciocínio está errado.
Bloquear as conexões de fora para dentro não inviabilizam as conexões de dentro para fora porque as conexões de dentro para fora são aquelas que o próprio servidor gera.
Essas três chains (INPUT, FORWARD e OUTPUT) são independentes, tanto assim que o comando -A (--append) adiciona uma regra no final da chain (cadeia), ou seja, iptables -A INPUT adiciona a regra no final das regras da chain INPUT e somente dela. E isso é válido para as outras duas.
As três chains, se não for definida a tabela na regra, serão aplicadas na tabela padrão, a filter (ver as tabelas no manual).
A tabela nat tem como chains PREROUTING, OUTPUT e POSTROUTING.
A tabela mangle tem como chains INPUT, PREROUTING, OUTPUT, FORWARD e POSTROUTING.
A tablela raw tem como chains PREROUTING E OUTPUT.

No Iptables tu podes enumerar as regras, por exemplo:

iptables -A FORWARD 1 etc, etc...
iptables -A FORWARD 3 etc, etc...
iptables -A INPUT 2 etc, etc...
iptables -A FORWARD 2 etc, etc...
iptables -A INPUT 1 etc, etc...

essas regras acima numeradas podem ser colocadas fora de ordem que o Iptables lerá o script de cima para baixo, mas executará as regras na ordem. Claro que, para melhor organização e leitura do script é interessante colocá-las em ordem... 1, 2, 3...

Geralmente se coloca a política padrão da chain OUTPUT como ACCEPT porque o administrador do servidor deve ter um constante monitoramento do seu servidor, daí o administrador tem controle caso alguma porcaria seja instalada no servidor aproveitando uma falha de segurança.
Lógico que, como já foi dito, isso depende do nível de segurança desejado.
Nada impede que tu coloque as três políticas como DROP e vá liberando nas três chains somente o que se quer. Isso até melhora o desempenho, pois não ficarão pacotes trafegando desnecessariamente pelo servidor e pela rede. Claro que as três chains como DROP implica em mais trabalho por parte do administrador.

Lembrando que na definição do protocolo, por exemplo, -p tcp, tu já define que o bloqueio ou liberação englobará todos os protocolos constantes da gama tcp.
No caso do udp é somente ele.
E a "confirmação" que tu mencionaste é parte do protocolo. O tcp tem essa confirmação, pois ele verifica se o pacote foi enviado com sucesso, e o udp não, por isso o udp é mais rápido, mas não tem como saber se o pacote chegou ao seu destino ou se ele chegou completo. Isso é implementação do protocolo.

Outro exemplo para melhor entendimento:

iptables -A FORWARD etc, etc...
iptables -I FORWARD etc, etc...
iptables -A INPUT etc, etc...
iptables -I INPUT etc, etc...

O Iptables lerá as regras acima de cima para baixo, mas as executará da seguinte maneira:
na chain FORWARD acima a regra com -A será lida primeiro, mas executada depois da segunda regra com -I, pois -I coloca a regra no topo da chain e -A no final da chain. O mesmo vale para as regras da chain INPUT no exemplo acima.
Usar -A , -I e/ou numerar as regras implica em definir a ordem de prioridade de execução da regra.

Por isso que é importante saber essas questões para uma melhor execução, desempenho e organização do script.
Espero ter esclarecido o assunto um pouco melhor.


7. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

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

Buckminster escreveu:

Espero ter esclarecido o assunto um pouco melhor.
sim. ajudou a esclarecer o assunto!

Buckminster escreveu:

Nada impede que tu coloque as três políticas como DROP e vá liberando nas três chains somente o que se quer. Isso até melhora o desempenho, pois não ficarão pacotes trafegando desnecessariamente pelo servidor e pela rede.
A melhora de desempenho já é, então, uma boa justificativa para se utilizar o DROP no OUTPUT!

Buckminster escreveu:

"mesmo porque, como mencionei no meu último tópico, estava em mente que ter bloqueado um determinado tipo de conexão de fora para dentro já inviabilizaria essas conexões de dentro para fora."

Esse teu raciocínio está errado.
Bloquear as conexões de fora para dentro não inviabilizam as conexões de dentro para fora porque as conexões de dentro para fora são aquelas que o próprio servidor gera.
fico me perguntando o seguinte...

digamos que eu seja infectado por um Trojan ou algo do tipo...

e digamos que esse Trojan tente estabelecer uma conexão SSH a alguma outra máquina para poder enviar informações.

como essa conexão SSH seria estabelecida se a porta correspondente a esse serviço está bloqueada no INPUT?

a solicitação de conexão (SYN) sairia do meu computador, mas a outra máquina não conseguiria confirmar a solicitação de conexão (ACK SYN) porque a resposta seria bloqueado nas regras do INPUT. a conexão não seria estabelecida e então o envio de informações não poderia se concretizar. não seria isso?

esse mesmo raciocínio, caso esteja correto, não valeria para outros protocolos?

salvo engano, acho que apenas o protocolo UDP tem um modo de funcionamento que não se faz por meio do estabelecimento de conexões...

enfim... fico me fazendo essas questões...





8. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)? [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

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

"digamos que eu seja infectado por um Trojan ou algo do tipo..."

Aí depende o modo como ocorreu essa infecção.
Se o servidor foi infectado por um trojan ou algo do tipo ele pode desbloquear a porta bloqueada no INPUT para usar o serviço para ele, daí as outras questões que tu colocou já não importam mais.

Como o nome já diz; Trojan, Cavalo de Tróia, geralmente se instala após o usuário executá-lo.
Geralmente os Trojans se imiscuem disfarçados em um programa aparentemente inofensivo.
A melhor maneira de se proteger de Trojans é nunca executar programas de origem desconhecida.

A proteção de um servidor se faz com normas de segurança, firewall, Squid, anti-vírus, DMZ, honeypot, etc.

Hoje em dia o administrador de um servidor deve realizar um constante monitoramento do servidor e da rede justamente para evitar e, em caso de ataque, minimizar os efeitos e reparar o estrago de forma rápida.


9. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 12/06/2017 - 17:19h

Buckminster escreveu:

Se o servidor foi infectado por um trojan ou algo do tipo ele pode desbloquear a porta bloqueada no INPUT para usar o serviço para ele, daí as outras questões que tu colocou já não importam mais.
Se para Trojans e correlatos não posso entender o OUTPUT em DROP (e ir liberando) como uma política de segurança... então que tipo de situações essa política poderia ser útil em relação à segurança?


Buckminster escreveu:

Vantagem:
Dropar a chain OUTPUT aumentaria a segurança em caso de invasão do servidor e isso impediria que as porcarias se espalhassem pela rede.
a que tipo de situações de ameaças você se refere nessa sua frase acima? a "invasão do servidor" não seria como um caso semelhante (onde o invasor poderia mudar as regras do firewall para abrir as portas)?



10. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)?

Buckminster
Buckminster

(usa Debian)

Enviado em 12/06/2017 - 17:45h

"a que tipo de situações de ameaças você se refere nessa sua frase acima? a "invasão do servidor" não seria como um caso semelhante (onde o invasor poderia mudar as regras do firewall para abrir as portas)?"

Sim, mas entenda, não existe proteção completa. Por isso falei do monitoramento constante.
Você deve levar em conta também o tipo de servidor, por exemplo, servidores de bancos que lidam com proteção de dinheiro devem ter proteção elevada.
Caso o servidor seja de uma universidade, por exemplo, ele sofrerá ataques, mas não serão ataques fortes, serão, geralmente ataques para invadir e colocar uma imagem, deixar uma mensagem, etc. Raramente haverá roubo de dados.
Os servidores mais visados são aqueles em que há dados importantes para serem roubados, entenda-se dados que darão um lucro financeiro ao atacante.
Até porque para roubar dados deve-se invadir o banco de dados que, por sua vez, também tem proteções.

Além do que, colocar um Trojan ou um Backport que altere portas no servidor é coisa de quem entende e não é tarefa para qualquer um e esse tipo de atacante não fará isso somente por diversão.

Não se preocupe tanto assim, não seja paranóico. Um Iptables bem configurado e um Squid bem configurado darão a segurança necessária para servidores e redes que não lidam com dados que envolvem lucro financeiro.

Acesse o link abaixo e vá lendo as páginas na parte vermelha embaixo da página, com calma, que você entenderá como funciona um sistema de firewall (Muro de Fogo). Atente para a página 2-Generalidades.

http://eriberto.pro.br/iptables/


11. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 13/06/2017 - 11:31h

Buckminster escreveu:

Não se preocupe tanto assim, não seja paranóico. Um Iptables bem configurado e um Squid bem configurado darão a segurança necessária para servidores e redes que não lidam com dados que envolvem lucro financeiro.
Minha preocupação com esse tópico não é propriamente me decidir por qual medida de segurança vou adotar.

A intenção que tive com o tópico é me ajudar (e espero que a outros também) a entender o Iptables; nesse caso particular, a importância ou não de se utilizar uma política DROP no OUTPUT.

Já utilizo no meu Firewall a política DROP no OUTPUT. sendo que o utilizo mais por questões de aprendizagem do que por qualquer outras questões de segurança (justamente porque ainda não encontrei um caso concreto que ilustre a importância do seu uso!).

de todo modo, mesmo não conseguindo pensar em um caso concreto onde a política DROP no OUTPUT se justifique por questões de segurança, é sempre uma boa prática de segurança fechar tudo que não é utilizado e abrir apenas o que se vai utilizar (o que, portanto, já seria uma razão para se utilizar essa política restritiva!).





12. Re: há sentido em definir o OUTPUT com a política DROP (e ir liberando por regras ACCEPT)? [RESOLVIDO]

Rodrigo Albuquerque Serafim
raserafim

(usa Slackware)

Enviado em 16/06/2017 - 12:28h

Não sei se está de acordo, mas me parece razoável dizer que fazendo um apanhado do que aprendi, das sugestões de signout e das suas sugestões (Buckminster), talvez seja possível chegar às seguintes conclusões parciais:

há sentido sim em utilizar a política DROP no OUTPUT pelas seguintes razões:
- melhora o desempenho das conexões por não ter pacotes desnecessários trafegando (controle de banda);
- permite restringir o acesso a determinados sites e serviços;
- é sempre uma boa prática de segurança fechar tudo que não é utilizado (mesmo que não se visualize uma situação concreta a ser justificada);




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts