sua abordagem para conjuntos de regras complexas do iptables

3

Estou interessado em como você escreve seus complexos conjuntos de regras de filtragem de pacotes no roteador linux atuando como firewall. um com política de descarte padrão.

eu costumo ir com essa abordagem [apenas um exemplo artificial]:

iptables -F ; iptables -X; iptables -P FORWARD DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -N FORWARD_machineA
iptables -A FORWARD_machineA -d $machineA -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD_machineA -d $machineA -s $machineB -p tcp --dport 3306 -j ACCEPT
iptables -A FORWARD_machineA -d $machineA -j DROP
iptables -A FORWARD_machineA -s $machineA -d $machineC -p tcp --dport 2 -j ACCEPT
iptables -A FORWARD_machineA -s $machineA -j REJECT

iptables -N FORWARD_machineB
iptables -A FORWARD_machineB -d $machineB -s $machineA -p tcp --dport 3306 -j ACCEPT
iptables -A FORWARD_machineB -d $machineB -j DROP
iptables -A FORWARD_machineB -s $machineB -d $machineC -p tcp --dport 2 -j ACCEPT
iptables -A FORWARD_machineB -s $machineB -j REJECT

iptables -N FORWARD_machineC
iptables -A FORWARD_machineC -d $machineC -s $machineA -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD_machineC -d $machineC -s $machineB -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD_machineC -d $machineC -j DROP
iptables -A FORWARD_machineC -s $machineC -j REJECT

iptables -A FORWARD -s $machineA -j FORWARD_machineA
iptables -A FORWARD -d $machineA -j FORWARD_machineA

iptables -A FORWARD -s $machineB -j FORWARD_machineB
iptables -A FORWARD -d $machineB -j FORWARD_machineB

iptables -A FORWARD -s $machineC -j FORWARD_machineC
iptables -A FORWARD -d $machineC -j FORWARD_machineC

isso funciona bem, mas está longe de ser perfeito: por exemplo, se eu adicionar dois servidores em diferentes sub-redes que precisam se comunicar - as regras precisam ser adicionadas em cadeias para machineA e machineB.

neste caso, estou mais interessado em gerenciabilidade / legibilidade - por isso não há necessidade de otimização de desempenho especial [por exemplo, minimizando o número médio de pesquisas de regras].

ps: pergunta semelhante , mas não são as respostas que estou procurando.

obrigado!

    
por pQd 18.07.2009 / 19:40

2 respostas

3

Você pode alterar

iptables -A FORWARD -s $machineA -j FORWARD_machineA
iptables -A FORWARD -d $machineA -j FORWARD_machineA

para

iptables -A FORWARD -g FORWARD_machineA

Dessa forma, você pode ter três regras como esta

iptables -A FORWARD -g FORWARD_machineA
iptables -A FORWARD -g FORWARD_machineB
iptables -A FORWARD -g FORWARD_machineC

e depois destas três regras basta colocar uma

iptables -A FORWARD -j REJECT

Dessa forma, se você permitir uma comunicação apenas uma vez na cadeia FORWARD_machineA ou chian FORWARD_machineB para comunicação entre a máquina A e a máquina B, isso pode funcionar.

Pelo menos, reduz seis linhas de cadeia -j para três linhas de cadeia -g. Também elimina a necessidade de colocar -j REJECT no final de cada cadeia. De fato, você deve remover -j REJECT do final de cada cadeia para fazer trabalhos acima do método.

Esta é a melhoria simples que pode ser generalizada com base no seu exemplo. Outras melhorias podem exigir mais detalhes sobre o que você deseja permitir e o que você deseja bloquear.

    
por 18.07.2009 / 19:55
0

Você pode usar o pfSense . Ele tem muitos recursos :

  • Firewall

    • Filtragem por IP de origem e destino, protocolo IP, porta de origem e destino para tráfego TCP e UDP
    • É possível limitar as conexões simultâneas por regra
    • O pfSense utiliza o p0f, um utilitário avançado de impressão digital passiva de sistema operacional / rede para permitir a filtragem pelo sistema operacional que inicia a conexão. Quer permitir que máquinas FreeBSD e Linux para a Internet, mas bloquear máquinas Windows? O pfSense pode fazê-lo (entre muitas outras possibilidades) detectando passivamente o sistema operacional em uso.
    • Opção para registrar ou não o tráfego que corresponde a cada regra.
    • Roteamento de políticas altamente flexível possível selecionando o gateway em uma base por regra (para balanceamento de carga, failover, várias WAN, etc.)
    • Os aliases permitem agrupar e nomear IPs, redes e portas. Isso ajuda a manter o conjunto de regras do seu firewall limpo e fácil de entender, especialmente em ambientes com vários IPs públicos e inúmeros servidores.
    • Transparent layer 2 firewalling capaz - pode interligar interfaces e filtrar tráfego entre elas, até mesmo permitindo um firewall sem IP (embora você provavelmente queira um IP para fins de gerenciamento).
    • Normalização de pacote - Descrição da documentação do scr pf - "'Scrubbing' é a normalização de pacotes, portanto não há ambiguidades na interpretação pelo destino final do pacote. A diretiva scrub também remonta pacotes fragmentados, protegendo alguns sistemas operacionais de algumas formas de ataque e descarta pacotes TCP que possuem combinações de sinalizadores inválidas. "
      • Ativado no pfSense por padrão
      • Pode desativar, se necessário. Esta opção causa problemas para algumas implementações do NFS, mas é segura e deve ser deixada ativada na maioria das instalações.
    • Desativar filtro - você pode desativar totalmente o filtro do firewall se desejar transformar o pfSense em um roteador puro.

  • Tradução de endereços de rede (NAT)
  • Redundância
  • Balanceamento de carga Relatórios e monitoramento
  • Gráficos RRD

    Os gráficos RRD no pfSense mantêm informações históricas sobre o seguinte.

    • utilização da CPU
    • Taxa de transferência total
    • Estados do firewall
    • Taxa de transferência individual para todas as interfaces
    • Taxas de pacotes por segundo para todas as interfaces
    • tempos de resposta de ping dos gateways de interface WAN
    • Filas do shaper de tráfego em sistemas com modelagem de tráfego ativadas
  • VPN
    • IPsec
    • PPTP
    • OpenVPN
  • DNS dinâmico

    Através de:

    • DynDNS
    • DHS
    • DyNS
    • easyDNS
    • Não-IP
    • ODS.org
    • ZoneEdit
  • Portal cativo
  • Servidor DHCP e retransmissão

Tem uma configuração simples e fácil de utilizar baseada na Web, basta olhar para os screen-shots .

O melhor de tudo é que você pode criá-lo sozinho com hardware comum e é Código aberto .

    
por 19.07.2009 / 18:36