Visão geral
Os leitores aprenderão como criar um firewall baseado em zona.
EdgeOS suporta firewalls tanto baseada em ACL e baseada em zonas, mas atualmente o firewall baseada em zonas só é configurável da CLI. Para um bom artigo sobre a diferença entre firewalls baseada em ACL e baseada em zonas, consulte: ACL vs zonas
Existem três redes:
- WAN - 172.16.10.0/24, 2001:0DB8:0:9999::0 / 64
- LAN - 192.168.100.0/24, 2001:0DB8:0:AAAA::0 / 64
- DMZ - 192.168.200.0/24, 2001:0DB8:0:BBBB::0 / 64
Neste exemplo específico é para um roteador em uma vara, mas você pode facilmente adaptar este exemplo para o número de NICs (Network Interface Cards) você tem.
Diagrama de rede lógica
- Internet – 192.168.200.100 – tcp/80
- Internet – 192.168.200.100 – tcp/443
- Internet – 192.168.200.100 – tcp/25
- Internet – 192.168.200.100 – tcp/53
- EdgeOS atua como DHCP, roteador de encaminhador, NAT, DNS, firewall.
- 192.168.200.200/2001:0DB8:0:bbbb::200 é um servidor de email (SMTP/IMAP), web e DNS interno/externo.
- 192.168.100.10/2001:0DB8:0:aaaa::10 é o console do administrador, que pode SSH para EdgeOS.
- LAN e DMZ hosts têm acesso de saída básico: web, FTP, SSH.
- LAN pode acessar os recursos de DMZ.
- DMZ não pode acessar recursos de LAN.
- De entrada WAN conecta ao anfitrião de DMZ.
Diagrama de rede física
A interface EdgeOS é atribuída a . 1 /: 1 endereço de suas respectivas redes. Aqui estão as atribuições VLAN dos portos:
- WAN - VLAN 10
- LAN - VLAN 20
- DMZ - VLAN 30
A configuração ficará assim:
interfaces { ethernet eth0 { vif 10 { address 172.16.10.1/24 address 2001:db8:0:9999::1/64 } vif 20 { address 192.168.100.1/24 address 2001:db8:0:AAAA::1/64 } vif 30 { address 192.168.200.1/24 address 2001:db8:0:BBBB::1/64 } } }
Noções básicas de zonas
- Cada interface é atribuído a uma zona. A interface pode ser físico ou virtual, tais como túneis (VPN PPTP, GRE, etc.) e são tratados exatamente o mesmo.
- Tráfego flui da zona A, zona B. Refiro-me a este fluxo como uma zona-par-direção. Por exemplo, A-> B e B-> A são duas direções-zona-par.
- Conjuntos de regras são criados por zona-par-direção.
- Eu nome rulesets para indicar qual zona-par-direção representam (exemplos: ZoneA-ZoneB e ZoneB-ZoneA; LAN-DMZ e DMZ-LAN). Em EdgeOS você deve ter nomes de conjunto único de regras. Em caso de sobreposição, adicionar um -6 ao final do conjunto de regras IPv6 (exemplo: LAN-DMZ e LAN-DMZ-6). Isto permite preenchimento automático e singularidade.
- Neste exemplo, temos quatro zonas:
- LAN
- WAN
- DMZ
- Local
- Nota: A zona Local é o firewall em si.
- Se seu computador está na LAN e você precisará SSH em sua caixa de EdgeOS, então você precisa uma regra para permitir no conjunto de regras LAN Local. Se você deseja acessar uma página da Web da sua caixa de EdgeOS, então você precisa uma regra para permitir no conjunto de regras Local-LAN.
- É bom citar as regras consistentemente. Como cresce o número de regras que têm e a consistência mais você tem, mais fácil sua vida será.
Rule 1 - State Established, Related Rule 2 - State Invalid Rule 100 - ICMP Rule 200 - Web Rule 300 - FTP Rule 400 - NTP Rule 500 - SMTP Rule 600 - DNS Rule 700 - DHCP Rule 800 - SSH Rule 900 - IMAPS default-action drop enable-default-log
Log e ação padrão
Zonas e conjuntos de regras têm uma declaração padrão de ação. Ao usar a zona-políticas, a ação padrão é definida pela instrução zona-política e é representada pela regra 10000.
É boa prática para registrar tráfego aceito e negado. Ele pode te salvar de significativas dores de cabeça ao tentar solucionar um problema de conectividade. Usando enable-padrão-log irá registrar tráfego batendo o ação padrão .
Por padrão, iptables não permite tráfego para sessões estabelecidas retornar, então você deve explicitamente permitir isto. Faço isso adicionando duas regras para o início de cada conjunto de regras. Regra n º 1 permite que pacotes de estado estabelecido e relacionados através de e a regra 2 gotas e logs de pacotes de estado inválido. Coloco a regra estabelecida/relacionados na parte superior, porque a grande maioria do tráfego em uma rede é estabelecida, e a regra inválida impede que pacotes de estado inválido por engano sendo comparados com outras regras. Tendo a regra mais correspondente listada primeiro reduz a carga de CPU em ambientes de alto volume.
Nota importante: você não quer adicionar o log para governar o estado estabelecido, como você vai estar registrando ambos os pacotes de entrada e de saída para cada sessão em vez de apenas o início da sessão. Seus registros serão maciças em um período muito curto de tempo.
Em EdgeOS você deve ter as interfaces criadas antes você pode aplicá-los à zona, e você deve criar o conjunto de regras antes você pode aplicá-los a uma zona-política.
- Criar e configurar as interfaces.
- Construir o conjunto de regras para cada zona-par-direção; cada conjunto de regras deve incluir pelo menos as regras do três estado.
- Configure as zona-políticas.
Zonas não permitem uma ação padrão de aceitação; a ação padrão é gota ou rejeitar. É importante lembrar isso, porque se você aplicar uma interface para uma zona e se comprometem, quaisquer conexões ativas serão retiradas. Especificamente, se você:
- são SSH'ed em EdgeOS
- Adicionar o Local ou a interface que você está se conectando através de uma zona
- não ter conjuntos de regras para permitir SSH e sessões estabelecidas
Então você não será capaz de se conectar.
A seguir estão as regras que foram criadas para este exemplo (que pode não ser completo), tanto em IPv4 e IPv6. Se não houver nenhum IP especificado e, em seguida, o endereço de origem/destino não é explícito.
- WAN – DMZ:192.168.200.200 – tcp/80
- WAN – DMZ:192.168.200.200 – tcp/443
- WAN – DMZ:192.168.200.200 – 25/tcp
- WAN – DMZ:192.168.200.200 – tcp/53
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/80
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/443
- WAN – DMZ:2001:0DB8:0:BBBB::200 – 25/tcp
- WAN – DMZ:2001:0DB8:0:BBBB::200 – tcp/53
- DMZ - Local - tcp/53
- DMZ - Local - tcp/123
- DMZ - Local - udp/67,68
- LAN - Local - tcp/53
- LAN - Local - tcp/123
- LAN - Local - udp/67,68
- LAN:192.168.100.10 - Local - 22/tcp
- LAN:2001:0DB8:0:aaaa::10 - Local - 22/tcp
- LAN - WAN - tcp/80
- LAN - WAN - tcp/443
- LAN - WAN - 22/tcp
- LAN - WAN - tcp/20,21
- DMZ - WAN - tcp/80
- DMZ - WAN - tcp/443
- DMZ - WAN - 22/tcp
- DMZ - WAN - tcp/20,21
- DMZ - WAN - tcp/53
- DMZ - WAN - udp/53
- Local - WAN - tcp/80
- Local - WAN - tcp/443
- Local - WAN - tcp/20,21
- Local - WAN - tcp/53
- Local - WAN - udp/53
- Local - WAN - udp/123
- Local - DMZ - 25/tcp
- Local - DMZ - tcp/67,68
- Local - DMZ - tcp/53
- Local - DMZ - udp/53
- Local - LAN - tcp/67,68
- LAN - DMZ - tcp/80
- LAN - DMZ - tcp/443
- LAN - DMZ - tcp/993
- LAN:2001:0DB8:0:aaaa::10 - DMZ:2001:0DB8:0:BBBB::200 - 22/tcp
- LAN:192.168.100.10 - DMZ:192.168.200.200 - 22/tcp
Conjunto de regras de zona
Como temos quatro zonas, nós precisamos configurar os seguintes conjuntos de regras:
- LAN-WAN
- LAN-Local
- LAN-DMZ
- WAN-LAN
- WAN-Local
- WAN-DMZ
- Local-LAN
- Local-WAN
- Local-DMZ
- DMZ-LAN
- DMZ-WAN
- DMZ-Local
Mesmo que nunca irão se comunicar as duas zonas, é uma boa idéia para criar o conjunto de regras de zona-par-direção e habilitar o log padrão. Isso permitirá que você registrar as tentativas de acesso as redes. Sem ele, você nunca verá as tentativas de conexão.
Este é um exemplo que mostra a configuração de duas regras de base, o padrão do log e a ação padrão.
name wan-lan { default-action drop enable-default-log rule 1 { action accept state { established enable related enable } } rule 2 { action drop log enable state { invalid enable } } }
Aqui está um exemplo de um conjunto de regras IPv6 DMZ-WAN.
ipv6-name dmz-wan-6 { default-action drop enable-default-log rule 1 { action accept state { established enable related enable } } rule 2 { action drop log enable state { invalid enable } rule 100 { action accept log enable protocol ipv6-icmp } rule 200 { action accept destination { port 80,443 } log enable protocol tcp } rule 300 { action accept destination { port 20,21 } log enable protocol tcp } rule 500 { action accept destination { port 25 } log enable protocol tcp source { address 2001:db8:0:BBBB::200 } } rule 600 { action accept destination { port 53 } log enable protocol tcp_udp source { address 2001:db8:0:BBBB::200 } } rule 800 { action accept destination { port 22 } log enable protocol tcp } }
Criação de diretiva de zona
Uma vez que você tem todos os seus conjuntos de regras construídos, então você precisa criar sua diretiva de zona.
Comece por definir a ação de interface e padrão para cada zona.
set zone-policy zone dmz default-action drop set zone-policy zone dmz interface eth0.30
Neste caso, estamos a definir o conjunto de regras de IPv6 que representa o tráfego originário de LAN e destinado para a DMZ. Porque a sintaxe de firewall zona-política é um pouco estranha, mantê-lo em linha reta por pensar mais nela para trás.
set zone-policy zone dmz from lan firewall ipv6-name lan-dmz-6
A política de DMZ-LAN é LAN-DMZ. Você pode obter um ritmo quando você construir um monte de uma vez.
No final, você vai acabar com algo parecido com essa config: ZonesExampleConfigBoot . Eu tirei tudo mas o firewall, interfaces e seções de zona-política. É longo o suficiente como-é.
Nota: neste exemplo é incompleto.
Túnel IPv6
Se você estiver usando um túnel IPv6 de HE.net ou em outro lugar, a base é o mesmo, exceto que você tem duas interfaces WAN, uma para IPv4 e para IPv6.
Você tem cinco zonas em vez de apenas quatro, e configurar seu ruleset IPv6 entre sua interface de túnel e suas zonas de LAN/DMZ em vez de para a WAN.
Pares de LAN, WAN, DMZ, Local e TUN (túnel) IPv6 são:
- LAN-TUN
- LAN-Local
- LAN-DMZ
- TUN-LAN
- TUN-Local
- TUN-DMZ
- Local-LAN
- Local-TUN
- Local-DMZ
- DMZ-LAN
- DMZ-TUN
- DMZ-Local
Nota: nenhum vai a WAN desde WAN não tem um endereço IPv6 sobre ele.
Você tem que adicionar algumas regras para seu conjunto de regras de WAN-Local para permitir o protocolo 41 pol.
aqui está um exemplo:
rule 400 { action accept destination { address 172.16.10.1 } log enable protocol 41 source { address ip.of.tunnel.broker } }