pf.conf para bloquear * apenas * um endereço IP específico quando a VPN não está conectada

1

Estou tentando configurar um firewall de filtro de pacotes para bloquear o acesso a um pequeno intervalo de endereços IP quando uma VPN não está conectada.

Minhas regras devem permitir tráfego https / http além dessa pequena lista específica de endereços IP. É importante que o dispositivo não consiga acessar esses endereços IP quando a VPN não estiver conectada.

Estou usando a VPN integrada do macOS na 10.13

Até agora, tenho algumas coisas bastante padrão em minhas regras:

vpn_ifs = "{ utun1 ipsec0 }"
hw_ifs = "{ en0 en1 en2 }"
...
pass quick on $vpn_ifs

O motivo da minha solicitação é que eu tenho um recurso baseado na Web que só posso acessar quando a VPN está conectada. Permitir a conectividade com este recurso antes da conexão da VPN desativa o acesso à minha conta.

Preciso de acesso ao tráfego http e https antes que a VPN seja estabelecida para habilitar os serviços que precisam funcionar antes que a conexão VPN esteja ativa. Incluindo, mas não limitado ao suporte de portal cativo.

John
fonte
1. não deve pass out quick on $vpn_ifs from any to { <web_res1> <web_res2> } no statee depois 2. block out quick on $hw_ifs from any to { <web_res1> <web_res2> } no statefunciona?
klanomath
Também foi adicionado: Permita que $ hw_ifs atinja {80 443} para atender meus outros requisitos de http e https sem VPN.
John
Ah, eu não li esse requisito adicional. As portas 80/443 estão de alguma forma relacionadas aos "recursos baseados na web"? Em seguida, a seqüência correta das rápidas regras e os 80/443 assuntos regra ...
klanomath
Duas coisas diferentes 1. Acesso a 80, 443 antes do estabelecimento da VPN - não controlado pelo intervalo de IPs. 2. Nenhum acesso a alguns 'recursos da Web' específicos antes do estabelecimento da VPN. Todo o acesso a esses "recursos da web" específicos permanece bloqueado quando a VPN não está conectada.
John

Respostas:

0

Cada pacote é avaliado em relação ao conjunto de regras de filtro de cima para baixo e a última regra correspondente vence. A palavra-chave rápida é a única exceção: o pacote será bloqueado ou passado imediatamente sem ser perturbado por nenhuma regra posterior.

Supondo que você esteja usando a abordagem negar tudo , você precisa permitir explicitamente que os pacotes entrem ou saiam.

Conjunto de regras:

block all
...

Para atender aos seus requisitos de "recurso baseado na Web", é necessário permitir / negar pacotes rapidamente, dependendo da interface:

pass out quick on $vpn_ifs from any to { <web_res1>, <web_res2> } no state  
block out quick on $hw_ifs from any to { <web_res1>, <web_res2> } no state

Para atender ao seu requisito "tráfego http e https", você deve permitir o tráfego de saída na porta 80/443:

pass out on $hw_ifs from any to any port { 80, 443 }

Usando a abordagem negar tudo , você adiciona mais algumas regras (por exemplo, para permitir tráfego de / para redes locais).

O conjunto de regras final é assim:

block all
...
rules
...
pass out quick on $vpn_ifs from any to { <web_res1>, <web_res2> } no state  
block out quick on $hw_ifs from any to { <web_res1>, <web_res2> } no state
...
pass out on $hw_ifs from any to any port { 80, 443 }
...
more rules

Aqui está um exemplo de negar todo o pf.conf com muitas regras explicadas. As regras são usadas no Gateway FreeBSD: algumas não devem ser aplicadas ou não são úteis no seu ambiente. Regras únicas não funcionam (por exemplo, recursos relacionados ao ALTQ).

Klanomath
fonte