Perguntas sobre o estado e a política do Firewall?

6

Eu finalmente consegui instalar meu host de VM e agora estou mexendo com o iptables para criar, testar e aprender.

  1. Será que importa se eu colocar o abaixo regras no início ou no final de minhas regras?

    $IPT -P INPUT DROP
    $IPT -P FORWARD DROP
    $IPT -P OUTPUT DROP
    

    Eu testei e não houve diferença, mas gostaria de confirmar.

    Resposta Eu escolhi até agora: É uma boa ideia aplicar as suas políticas o mais cedo possível. Coloque-os no começo. As regras DROP no tráfego interno podem causar problemas.

  2. Ter a regra abaixo seria considerada uma falha no firewall?

    $IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    

    Sem essa regra, eu precisaria adicionar, por exemplo, uma regra OUTPUT para minha conexão ssh, por exemplo:

    $IPT -A OUTPUT -p tcp --sport 2013 -j ACCEPT
    

    Resposta: Depois de mais testes e conversas com pessoas no # iptables @ freenode, cheguei à conclusão de que usar -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT para INPUT e OUPUT é uma boa abordagem e irá ajudá-lo a lidar com muitas coisas, como por exemplo o FTP e é uma boa abordagem. porque a menos que você tenha aquela porta aberta aberta e sendo aceita, não haverá conexão maliciosa.

    Aqui está um exemplo normal sem usar o acima:

    $IPT -A INPUT -p tcp --dport 20:21 -j ACCEPT
    $IPT -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
    

    Agora, veja como a regra se parece com o uso acima:

    $IPT -A INPUT -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
    

    Isso é tudo o que você precisa, porque assim que a conexão for ESTABELECIDA, a saída será acompanhada imediatamente e você não precisará criar regras para a porta de dados FTP.

  3. Quais são as coisas ruins de ter a regra abaixo, você poderia dar um exemplo do porque não tê-la e, em vez disso, apenas definir qualquer coisa que você precise usar?

    $IPT -P OUTPUT ACCEPT
    

    Resposta Eu escolhi até agora: Esta regra de política permite todo o tráfego de saída. Como política, permitir tudo é obviamente menos seguro do que permitir apenas tipos explícitos de tráfego. Portanto, se a segurança for sua maior prioridade, você deverá definir uma política DROP na cadeia de saída. Esteja ciente de que você terá que incluir um número de regras para permitir o tráfego de saída para um número possivelmente grande de coisas mundanas, como: DNS, SMTP, IMAP, POP3, HTTP, HTTPS, etc.

  4. Qual é a diferença entre conntrack e state no contexto abaixo?

    exemplo de estado:

    $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    

    exemplo de conntrack:

    $IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    

    Resposta: Depois de algumas conversas de pesquisa com pessoas no # iptables @ freenode eu cheguei à conclusão que eu deveria estar usando conntrack daqui em diante.

    Technically the conntrack match supersedes - and so obsoletes - the state match. But practically the state match is not obsoleted in any way.

Eu também apreciaria bons materiais de leitura on-line do iptables.

Links recomendados até o momento:

Conjunto de regras perfeito

O projeto de documentação do Linux

    
por Guapo 14.10.2010 / 18:04

3 respostas

3
  1. É uma boa ideia aplicar suas políticas o mais cedo possível. Coloque-os no começo. As regras DROP no tráfego interno podem causar problemas.
  2. Esta regra seria considerada uma falha, pois implementa e ACEITA a política. Adicionar uma regra de aceitação por serviço é a maneira correta de construir seu firewall.
  3. Uma política de aceitação indica que você está executando uma política principalmente aberta. (Nós trancamos a porta da frente trancada, mas você pode usar qualquer outra porta para entrar.) A melhor política é a política mais fechada. Mantemos todas as portas e janelas trancadas e apenas desbloqueamos as que precisamos.
  4. Parece que não há diferença, embora todas as regras que vi usem o estado. O módulo conctrack irá monitorar o estado. Use esta regra com a regra de aceitação de porta na pergunta 2 para ativar os serviços.

Você pode querer olhar para a documentação Shorewall para ver o que pode ser feito com o iptables. Eu uso para construir um firewall em todas as minhas instâncias do Linux (incluindo OpenWRT). Ele tem configurações de amostra (padrão / base) bem documentadas para servidores com 1, 2 ou 3 interfaces.

O Projeto de Documentação do Linux também tem documentação.

    
por 14.10.2010 / 20:11
2

Você não mencionou nada sobre a tabela nat , por isso vou supor que esta pergunta se relaciona a escrever scripts de firewall iptables para servidores autônomos, e não para caixas multi-homed / gateway .

  1. Você está correto: cada cadeia tem uma única política, portanto, não importa onde ou em que ordem essas regras de política são declaradas.

  2. Esta regra estabelece uma convenção que muitos / mais scripts de firewall usam: o de statefulness . Apenas um pequeno erro, no entanto. Eu não incluiria o estado NEW e também incluiria uma regra para a cadeia INPUT, ou seja:

    $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    Eu coloco essas regras próximas ou no topo de todos os meus scripts de firewall, pois elas permitem que eu me concentre na criação de regras para filtrar tentativas de conexão e não precise pensar em pacotes que não estabelecem conexões. Na minha opinião, um script de firewall sem essas regras provavelmente será mais complicado e, portanto, mais propenso a erros do que um que os inclua.

  3. Esta regra de política permite todo o tráfego de saída. Como política, permitir tudo é obviamente menos seguro do que permitir apenas tipos explícitos de tráfego. Portanto, se a segurança for sua maior prioridade, você deverá definir uma política DROP na cadeia de saída. Esteja ciente de que você terá que incluir um número de regras para permitir o tráfego de saída para um número possivelmente grande de coisas mundanas, como: DNS, SMTP, IMAP, POP3, HTTP, HTTPS, etc.

por 14.10.2010 / 21:30
0

State vs. Conntrack: State foi removido em favor de conntrack efetivo com o kernel Linux 3.7

    
por 07.01.2013 / 02:50