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

8

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

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

amarillion
fonte
Muito semelhante também serverfault.com/questions/4934/...
Zoredache

Respostas:

6

Aqui estão alguns exemplos de regras. 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
amarillion
fonte
11
Vou apontar que isso é específico do Ubuntu. Para as variantes Red Hat e Fedora, você verá / etc / sysconfig / iptables.
Esm
Você quer dizer em vez de /etc/iptables.rules? Isso não é determinado pelo Ubuntu, eu mesmo escolhi.
Amarillion
4
Eu estava me referindo à adição ao / etc / network / interfaces; minhas desculpas, eu deveria ter sido mais claro. O Fedora e o RHEL possuem um initscript (habilmente chamado "iptables";) que, se ativado, faz essencialmente uma restauração do iptables em / etc / sysconfig / iptables.
Esm 16/05/09
3

Usamos muitas regras do iptables ; portanto, para facilitar a administração, fazemos o seguinte:

  • Todas as regras são chamadas de scripts - os scripts são chamados de /etc/init.d/firewall (script personalizado)
  • Um arquivo de nomes de servidores / nomes de rede (variáveis ​​de endereço IP) é mantido e incluído em todos os scripts do iptables para obter consistência.
  • scripts separados são mantidos para cada sub-rede (por exemplo, private / DMZ / VPN, etc.) para facilitar a localização. Regras que pertencem a 2 scripts (como as que restringem a comunicação entre privado 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ível.
  • toda nova regra ou mudança é 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.

Brent
fonte
3

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

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

  • Debian / Ubuntu: armazene todas as regras em arquivos específicos de serviço 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 'master' para iptables que é executado no momento da inicialização.

jtimberman
fonte
2
Eu teria muito cuidado com a sua nomeação no seu exemplo Debian / Ubuntu. Este é o tipo de lugar em que você deseja prefixar seus nomes de regra com 00, 04, 22, etc. Há muitas regras de tabelas de ip que dependem da ordem e, se você carregá-las na ordem errada, terá coisas quebradas. Sugiro armazená-los em um único arquivo, a menos que você realmente saiba o que está fazendo.
Christopher Cashell
1

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

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

gimel
fonte
6
Discordo. Os casos mais simples podem ser facilmente manipulados com os programas dedicados, mas para uma regra complexa, não posso pensar em nada mais claro do iptables (significado mais claro não-ambígua, não iniciante necessário friendly)
Mikeage
2
Depende do motivo pelo qual você deseja simplificar as regras. Eu acho que o arquivo iptables.rules pode ser perfeitamente legível. É importante aproveitar os argumentos dos comentários para entender tudo.
Spoulson 11/05/09
Discordo do seu desacordo. Se você se concentrar em tornar os comandos do iptables legíveis, não os solicitará nem usará cadeias para que as regras sejam tão eficientes quanto possível.
Zoredache
11
Zoredache - Eu acho que o Mikeage está mais certo do que errado aqui. As regras do iptables podem ser bastante inequívocas, mesmo que sejam difíceis de ler (para uma pessoa menos qualificada como eu). Não acho que Mikeage fosse fácil de ler.
227 Michael Kohne
1

Isso depende da distribuição que você usa. Algumas distribuições, especialmente aquelas baseadas em uma distribuição Red Hat, mantêm as regras do iptables automaticamente, mas nesse diretório próprio. 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 complicado no começo, mas é bastante fácil quando você pega o jeito.

O site netfilter possui muita documentação sobre o iptables, incluindo algumas introduções. Se você está lendo um pouco, pode encontrar muitas informações boas aqui: http://www.netfilter.org/documentation/

TrueDuality
fonte
No redhat, você também pode manter o / etc / sysconfig / system-config-securitylevel atualizado. É aqui que o system-config-securitylevel-tui obtém suas regras na inicialização. Se você não mantiver o / etc / sysconfig / system-config-securitylevel atualizado, se alguém executar o system-config-securitylevel-tui, poderá perder as regras armazenadas em / etc / sysconfig / iptables.
2133 Jason Tan
1

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

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

Eu realmente gosto do firehol, ele fornece uma sintaxe mais simples do que o iptables diretamente.

  • Você pode usar o comando firehol debug para exatamente quais comandos do iptables são gerados
  • Se você tiver um erro na sua configuração e iniciar o firewall, o firehol detecta o erro e volta ao estado anterior.
  • O Firehol possui um comando 'try' que você pode usar para iniciar o firewall remotamente; se suas alterações matarem sua conexão, o firehol reverterá para o estado anterior; se você não matou sua conexão, solicitará que você confirme a alteração.
  • O Firehol possui um grande conjunto de serviços predefinidos, para que você não precise se lembrar exatamente de quais portas você precisa ter quais portas abrir para algum protocolo obscuro.
Zoredache
fonte
1

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

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

O que eu quero adicionar:

Observe que a versão atual do iptables solicitará, a cada invocação, que o kernel devolva a lista completa de cadeias. Então, ele fará a alteração que você pedir. Em seguida, ele 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.

cristão
fonte