Qual é a maneira canônica de armazenar regras de iptables?

8

O iptables, o firewall Linux padrão, não salva regras entre reinicializações. Você tem que cuidar disso sozinho. Existem muitas maneiras de fazer isso. Qual é a maneira canônica de fazer isso? Quais são as melhores práticas?

Eu respondo com minha própria solução, mas estou interessado em outras / melhores soluções.

    
por amarillion 11.05.2009 / 13:05

7 respostas

6

Aqui estão algumas regras de exemplo. Salve-os em /etc/iptables.rules

# Generated by iptables-save v1.3.6 on Wed Oct 24 17:07:29 2007
*filter
:INPUT ACCEPT [89458:132056082]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [263904:15667452]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 
-A INPUT -j DROP 
COMMIT
# Completed on Wed Oct 24 17:07:29 2007

adicione esta linha no final de / etc / network / interfaces

pre-up iptables-restore < /etc/iptables.rules
    
por 11.05.2009 / 13:08
3

Usamos muitas regras de iptables , por isso, para facilitar a administração, fazemos o seguinte:

  • As regras são todas chamadas de scripts - os scripts são chamados de /etc/init.d/firewall (script personalizado)
  • Um arquivo de nomes de servidor / nomes de rede (variáveis de endereço IP) é mantido e incluído em todo script do iptables para consistência.
  • scripts separados são mantidos para cada sub-rede (ou seja, privada / DMZ / VPN, etc) para tornar as coisas mais fáceis de encontrar. As regras que pertencem a dois scripts (como aquelas que restringem a comunicação entre particulares e DMZ) são colocadas no script da rede "mais segura"
  • sempre que possível, loops e loops aninhados são usados para manter os scripts o mais curtos possíveis.
  • cada nova regra ou alteração é documentada com comentários que precedem a seção apropriada do script.

Não sei se essa é a melhor maneira de fazer isso, mas funcionou bem para nós.

    
por 11.05.2009 / 16:23
3

Embora seja verdade que isso depende do ambiente e da plataforma, vi duas boas abordagens, dependendo da plataforma:

  • RHEL / CentOS: armazena todas as regras em um único arquivo / etc / sysconfig / iptables que é lido pelo script de inicialização do iptables.

  • Debian / Ubuntu: armazena todas as regras em arquivos específicos de serviços separados no diretório /etc/iptables.d/. Por exemplo, /etc/iptables.d/port_http, /etc/iptables.d/port_dns, em que port_service mapeia para um nome de serviço em / etc / services.

Em ambos os casos, o arquivo ou arquivos são gerenciados por uma ferramenta de configuração, como Chef ou Puppet, e lidos pelo script de inicialização 'mestre' do iptables que é executado no momento da inicialização.

    
por 02.06.2009 / 07:31
1

Além de iptables-save (e iptables-restore ), esquemas de firewall complicados são mais bem tratados com programas dedicados. Por exemplo, usamos shorewall ("iptables facilitado") para configurar o iptables.

Ferramentas mais simples também estão disponíveis, como firestarter e kmyfirewall .

    
por 11.05.2009 / 14:01
1

Isso depende da distribuição que você usa. Algumas distribuições, especialmente aquelas baseadas em uma distribuição da Red Hat, mantêm as regras do iptables automaticamente, mas no próprio diretório especial. Eu estou mais familiarizado com o RHEL e as regras do iptables podem ser encontradas em / etc / sysconfig / iptables. Familiarizar-se com a sintaxe das regras do iptables pode ser difícil no começo, mas é muito fácil quando você pega o jeito.

O site do netfilter tem muita documentação sobre o iptables, incluindo algumas introduções. Se você está pronto para ler um pouco, pode encontrar muitas informações boas aqui: link

    
por 11.05.2009 / 15:14
1

Esta questão está muito perto de ser um dup de 4934 e está relacionado a 397 .

Eu uso firehol combinado com uma interface web que desenvolvi para gerenciar o arquivo de configuração.

Eu realmente gosto de firehol, ele fornece uma sintaxe mais simples, usando o iptables diretamente.

  • Você pode usar o comando firehol debug para exatamente quais comandos do iptables são gerados
  • Se você tiver um erro em sua configuração e iniciar o firewall, o firehol detectará o erro e voltará ao estado anterior.
  • Firehol tem um comando 'try' que você pode usar para iniciar o firewall remotamente, se suas alterações matarem sua conexão, firehol irá reverter para o estado anterior, se você não matar sua conexão, ele pedirá que você confirme o troco.
  • O FireHl tem um grande conjunto de serviços pré-definidos, para que você não precise se lembrar exatamente de quais portas você precisa ter quais portas abrir para algum protocolo obscuro.
por 11.05.2009 / 18:34
1

Nós usamos um script de inicialização personalizado, é claro. Eu posso usar for-loops para iterar sobre uma lista de portas, analisar outros arquivos de configuração, como os usuários da VPN, etc. Excelente!

E o iptables-restore é certamente a maneira mais "canônica" de salvá-lo.

O que eu quero adicionar:

Por favor, note que a versão atual do iptables irá, para cada simples invocação, pedir ao kernel para devolver a lista completa de cadeias. Então fará a mudança que você pede para fazer. Em seguida, fará o upload da lista novamente.

Isso é lento (O (n ^ 2)), para nós, ele precisa de 5 segundos, o que é muito longo; -)

Se você usar o iptables-restore, tudo será executado em uma operação rápida.

    
por 15.05.2009 / 10:16