Configuração de regras do Debian ip6tables para IPv6

4

Estou configurando um firewall para o ipv6 no Debian Squeeze. É um servidor web, então eu acho que a única porta que precisa estar aberta para o mundo para o ipv6 é 80.

Isso é o que eu tenho:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:in-new - [0:0]
-P INPUT DROP
-P OUTPUT DROP
-P FORWARD DROP
-A INPUT  -i lo -s ::1/128 -j ACCEPT
-A OUTPUT -o lo -d ::1/128 -j ACCEPT
-A INPUT -s fe80::/10 -j ACCEPT
-A INPUT -m rt --rt-type 0 -j DROP
-A OUTPUT -m rt --rt-type 0 -j DROP
-A FORWARD -m rt --rt-type 0 -j DROP

-A INPUT -p tcp ! --syn -m state --state NEW -j DROP

-A INPUT -m state --state INVALID -j DROP

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN          -j DROP
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST          -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST          -j DROP
-A INPUT -p tcp -m tcp --tcp-flags ACK,FIN FIN              -j DROP
-A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG              -j DROP

-A INPUT -d ff02::1 -j REJECT

-A INPUT  -p tcp -m state --state ESTABLISHED  -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT  -p udp -m state --state ESTABLISHED  -j ACCEPT
-A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT

-A INPUT    -p IPv6-icmp -j ACCEPT
-I OUTPUT   -p IPv6-icmp -j ACCEPT
-I FORWARD -p IPv6-icmp -j ACCEPT

-A INPUT -p tcp -m tcp --dport 80 --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j ACCEPT
-A INPUT    -j LOG --log-level 4 --log-prefix "IPT_INPUT: "

-A INPUT    -j DROP
-A FORWARD -j LOG --log-level 4 --log-prefix "IPT_FORWARD: "
-A FORWARD -j DROP
-A OUTPUT   -j LOG --log-level 4 --log-prefix "IPT_OUTPUT: "
-A OUTPUT   -j DROP

COMMIT

Encontrei em algum lugar no inernet e mudei um pouco, mas quando tento restaurá-lo, aparece o seguinte erro:

sudo ip6tables-restore < /etc/ip6tables.firewall.rules
ip6tables-restore: line 47 failed

Alguma ideia de como configurar o meu ip6tables para que funcione?

Obrigado.

    
por user1447499 23.07.2012 / 16:49

4 respostas

1

É um problema com as tabelas OpenVZ e IPv6. Use o firewall CSF e você não terá problemas para configurar um firewall para o ipv6.

    
por 20.08.2013 / 15:05
23

Eu não sei de onde você tirou essa abominação, mas a melhor coisa que você pode fazer é deletar e começar do zero. Seu principal problema é que é desnecessariamente complicado e difícil de seguir, mesmo que possa funcionar (e eu não posso ter certeza de lê-lo, então certamente não vou testá-lo).

Os firewalls devem ser o mais simples possível: aceite apenas o que você precisa e rejeite todo o resto. Siga isso e você não precisará de regras complicadas e difíceis de entender.

Então, vamos dar uma olhada em um firewall de iptables IPv6 ativo e em funcionamento. Acabei de tirar isso de um dos meus servidores ao vivo:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

Definimos políticas padrão para as tabelas para ACCEPT; o tráfego será realmente descartado pelas regras dentro de cada tabela. Isso nos dá mais flexibilidade. Em particular, a tabela OUTPUT deve sempre ser definida para uma política padrão do ACCEPT, a menos que você pretenda bloquear as conexões de saída.

-A INPUT -m rt --rt-type 0 --rt-segsleft 0 -j DROP
-A FORWARD -m rt --rt-type 0 --rt-segsleft 0 -j DROP
-A OUTPUT -m rt --rt-type 0 --rt-segsleft 0 -j DROP

Isso corrige o problema de segurança do Tipo de cabeçalho de roteamento IPv6 0 . Deve aparecer antes de qualquer outra regra. (Observe que os kernels modernos, desde 2.6.21.1 , eliminam automaticamente esse tráfego e não precisa dessas regras.Se você tiver um kernel anterior, entre em contato com o seu fornecedor de distribuição para obter um patch para CVE-2007-2242 .) Regras explícitas para RH0 são obsoletas há muitos anos e não são mais necessárias em sistemas Linux modernos.

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

Isso aceita o tráfego em andamento de todas as conexões existentes que já aceitamos por meio de outras regras.

-A INPUT -p ipv6-icmp -j ACCEPT

Aceitamos todos os pacotes ICMP. Ao contrário do IPv4, não é uma boa ideia bloquear o tráfego ICMPv6, pois o IPv6 depende muito mais dele.

-A INPUT -i lo -j ACCEPT

Aceitamos todo o tráfego de / para a interface local.

-A INPUT -m state --state NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT

Aceitamos tráfego DHCPv6. Se você usa a autoconfiguração sem estado ou configura estaticamente suas máquinas, isso não é necessário.

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Estes aceitam novas conexões para ssh e http.

-A INPUT -j REJECT --reject-with icmp6-port-unreachable
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable

No final de nossas regras, rejeitamos todo o tráfego que não corresponda a uma regra, usando "porta inacessível". Isso resulta na mensagem padrão "Conexão recusada" no outro lado, e efetivamente esconde o fato de que temos um firewall. Ferramentas como nmap relatam que todos os nossos portos estão "fechados" em vez de "filtrados" e têm muito mais dificuldade em determinar se temos até mesmo um firewall.

COMMIT

Isso confirma todas as entradas da tabela.

    
por 23.07.2012 / 17:17
2

Eu consegui recarregar seu ip6tables-dump sem problemas. Eu sugiro que você primeiro tente criar seu firewall usando o comando ip6tables e, em seguida, despeje-o. pode ser muito mais fácil depurar.

você pode começar com o slate limpo - firewall.sh que se parece com isso:

#!/bin/bash
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP

ip6tables -F

ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT  -m state --state RELATED,ESTABLISHED -j ACCEPT

tenha cuidado - isso evitará qualquer comunicação ipv6. Espero que você tenha canal de comunicação console / out of band / ipv4. se não adicionar pelo menos:

ip6tables -A INPUT  -p tcp --dport 22 -j ACCEPT

quando estiver satisfeito com o script de firewall, você poderá executar ip6tables-save > your.rules .

    
por 23.07.2012 / 17:10
1

Eu tive o mesmo problema com a falha de confirmação. Eu estou usando o Debian Wheezy, mas suspeito que o problema é o mesmo. Parece que a instalação básica do Debian (pelo menos a que eu estou usando) não suporta rastreamento de conexão para ipv6. Isso faz com que as linhas que tentam rastrear o estado da conexão ( -m state... ) falhem, embora ip6tables-restore não seja cortês o suficiente para lhe dizer isso, infelizmente. A boa notícia é que isso pode ser resolvido sem muita dificuldade:

# apt-get install conntrack
# reboot

Tenho certeza de que é possível contornar a reinicialização, mas não tenho certeza de qual serviço precisa ser reiniciado para que isso funcione, por isso estou apenas reiniciando todos eles. Depois disso, conjuntos de regras como os que são postados aqui e que fazem uso do monitoramento de conexão com estado parecem funcionar bem.

    
por 30.07.2013 / 16:57