[Anterior: Grupos de Endereços e Balanceamento de Carga] [Conteúdo] [Próximo: Registro de Dados]
pass in on $int_if all tag INTERNAL_NET keep state
A etiqueta INTERNAL_NET será adicionada a qualquer pacote que corresponda à regra acima.
Uma etiqueta também pode ser atribuída usando-se uma macro. Por exemplo:
name = "INTERNAL_NET"
pass in on $int_if all tag $name keep state
Existe um conjunto de macros predefinidas que também podem ser usadas.
Essas macros são expandidas em tempo de carregamento do conjunto de regras, e NÃO em tempo de execução.
A marcação segue as seguintes regras:
Tomemos o seguinte conjunto de regras como exemplo.
(1) pass in on $int_if tag INT_NET keep state
(2) pass in quick on $int_if proto tcp to port 80 tag \
INT_NET_HTTP keep state
(3) pass in quick on $int_if from 192.168.1.5 keep state
Além de aplicar etiquetas com regras de filtragem, as regras de nat, rdr e binat também podem aplicar etiquetas em pacotes utilizando a palavra-chave tag.
pass out on $ext_if tagged INT_NET keep state
Pacotes saindo pela interface $ext_if devem estar marcados com a etiqueta INT_NET para corresponder à regra acima. O inverso também pode ser feito utilizando o operador ! para corresponder a pacotes que não estiverem marcados.
pass out on $ext_if ! tagged WIFI_NET keep state
Regras de tradução (nat/rdr/binat) também podem usar a palavra-chave tagged para corresponder a pacotes.
Perceba a forma como a política cobre todo o tráfego que passa pelo firewall. A palavra entre parêntesis indica qual etiqueta será usada para cada item na política.
Agora devem ser definidas regras de filtragem e tradução para classificar os pacotes na política.
rdr on $ext_if proto tcp from <spamd> to port smtp \
tag SPAMD -> 127.0.0.1 port 8025
nat on $ext_if tag LAN_INET_NAT tagged LAN_INET -> ($ext_if)
block all
pass in on $int_if from $int_net tag LAN_INET keep state
pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ keep state
pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ keep state
Agora as regras que definem a política são configuradas.
pass in quick on $ext_if tagged SPAMD keep state
pass out quick on $ext_if tagged LAN_INET_NAT keep state
pass out quick on $dmz_if tagged LAN_DMZ keep state
pass out quick on $dmz_if tagged INET_DMZ keep state
Agora que todo o conjunto de regras está pronto, fazer alterações no firewall é uma questão de modificar as regras de classificação de pacotes. Por exemplo, se for adicionado um servidor POP3/SMTP na DMZ, será necessário adicionar regras de classificação para tráfego POP3 e SMTP, desta forma:
mail_server = "192.168.0.10"
...
pass in on $ext_if proto tcp to $mail_server port { smtp, pop3 } \
tag INET_DMZ keep state
Tráfego de correio eletrônico será aceito como parte da entrada de política INET_DMZ.
O conjunto de regras completo:
# Macros
int_if = "dc0"
dmz_if = "dc1"
ext_if = "ep0"
int_net = "10.0.0.0/24"
dmz_net = "192.168.0.0/24"
www_server = "192.168.0.5"
mail_server = "192.168.0.10"
table <spamd> persist file "/etc/spammers"
# Classificação -- classifica pacotes com base na política
# do firewall.
rdr on $ext_if proto tcp from <spamd> to port smtp \
tag SPAMD -> 127.0.0.1 port 8025
nat on $ext_if tag LAN_INET_NAT tagged LAN_INET -> ($ext_if)
block all
pass in on $int_if from $int_net tag LAN_INET keep state
pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ keep state
pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ keep state
pass in on $ext_if proto tcp to $mail_server port { smtp, pop3 } \
tag INET_DMZ keep state
# Aplicação da política -- permite/bloqueia com base na política
# do firewall.
pass in quick on $ext_if tagged SPAMD keep state
pass out quick on $ext_if tagged LAN_INET_NAT keep state
pass out quick on $dmz_if tagged LAN_DMZ keep state
pass out quick on $dmz_if tagged INET_DMZ keep state
|
# brconfig bridge0 rule pass in on fxp0 src 0:de:ad:be:ef:0 \
tag USER1
E então no pf.conf:
pass in on fxp0 tagged USER1
[Anterior: Grupos de Endereços e Balanceamento de Carga] [Conteúdo] [Próximo: Registro de Dados]