[Anterior: Problemas com FTP] [Conteúdo] [Próximo: Redundância de Firewall com CARP e pfsync]
Authpf carrega regras de filtragem/NAT de usuários em uma única âncora. A âncora é nomeada combinando o nome de usuário UNIX e o identificador de processo do authpf em um formato "username(PID)". Cada âncora de usuário é guardada dentro da âncora authpf a qual é ancorada do conjunto de regras principal. O "caminho da âncora totalmente qualificado" então torna-se:
main_ruleset/authpf/username(PID)
As regras que o authpf carrega podem ser configuradas em uma base por usuário ou global.
Exemplos de uso de authpf incluem:
Authpf loga o nome de usuário e endereço IP de cada usuário que se autentica, bem como horário de início e fim de sua sessão de login via syslogd(8). Utilizando esta informação, um administrador pode determinar quem se logou e quando, e também pode calcular o tráfego utilizado por cada usuário podendo fazer cobrança com base nesses dados.
Authpf não rodará se o arquivo de configuração /etc/authpf/authpf.conf não estiver presente. Mesmo se o arquivo for vazio (tamanho zero), deve estar presente ou o authpf será encerrado imediatamente depois que um usuário se autenticar com sucesso.
As seguintes diretivas de configuração podem ser colocadas no authpf.conf:
nat-anchor "authpf/*"
rdr-anchor "authpf/*"
binat-anchor "authpf/*"
anchor "authpf/*"
Quando regras anchor são encontradas é onde PF sairá do conjunto principal de regras e avaliará as regras do authpf. Não é necessário que todas as quatro regras anchor estejam presentes; por exemplo, caso authpf não seja configurado para carregar regras nat, a regra nat-anchor pode ser omitida.
O primeiro arquivo contém regras que são carregadas apenas quando o usuário $USER (que é substituído pelo nome do usuário) se loga. A configuração de regras por usuário é utilizada quando um usuário em específico -- como um administrador -- exige um conjunto de regras diferente do padrão. O segundo arquivo contém as regras padrão que são carregadas por quaisquer usuários que não possuam seu próprio arquivo authpf.rules. Se o arquivo específico do usuário existir, sobrescreve as regras do arquivo padrão. Pelo menos um dos arquivos deve existir, caso contrário authpf não funcionará.
Regras de filtragem e tradução de endereço possuem a mesma sintaxe como em qualquer regra PF, com uma exceção: Authpf permite o uso de duas macros pré-definidas:
É prática recomendada o uso da macro $user_ip para permitir tráfego através do gateway vindo apenas do computador do usuário autenticado.
Em adição a macro $user_ip, o authpf fará uso ta tabela authpf_users (se existir) para armazenar o endereço IP de todos os usuários autenticados. Tenha certeza de definir a tabela antes de usa-lá:
table <authpf_users> persist
pass in on $ext_if proto tcp from <authpf_users> \
to port smtp flags S/SA keep state
Esta tabela somente deve ser usada em regras que se pretende aplicar a todos os usuários autenticados.
De outro modo, é possivel também permitir acesso apenas a usuários específicos colocando seus nomes no arquivo /etc/authpf/authpf.allow. Se o arquivo /etc/authpf/authpf.allow não existir ou seu conteúdo for um "*", então authpf dará acesso a qualquer usuário que conseguir se autenticar via SSH desde que não tenha sido banido explicitamente.
Caso authpf não consiga determinar se um usuário tem ou não permissão de acesso, mostrará uma breve mensagem e então desconectará o usuário. Uma entrada em /etc/authpf/banned/ sempre sobrescreve entradas em /etc/authpf/authpf.allow.
Sempre que um usuário se autentica com sucesso ao authpf, uma saudação é mostrada que indica que o usuário está autenticado.
Hello charlie. You are authenticated from host "64.59.56.140"
Esta mensagem pode ser acrescentada colocando uma mensagem customizada no /etc/authpf/authpf.message. O conteúdo deste arquivo será mostrado depois da mensagem de bem-vindo padrão.
Existem algumas formas de se definir authpf como shell de usuário:
Classes de login são criadas no arquivo login.conf(5). O OpenBSD possui uma classe de login definida como:
authpf:\
:welcome=/etc/motd.authpf:\
:shell=/usr/sbin/authpf:\
:tc=default:
Os usuários são designados para uma classe de login editando o campo class da base de dados passwd(5) do usuário. Uma maneira de se fazer isso é com o comando chsh(1).
# ps -ax | grep authpf
23664 p0 Is+ 0:00.11 -authpf: charlie@192.168.1.3 (authpf)
Aqui o usuário charlie se logou da máquina 192.168.1.3.
Enviando um sinal SIGTERM ao processo authpf, o usuário pode ser
forçado a sair. Authpf removerá quaisquer regras inseridas para
o usuário e derrubará todas conexões mantidas nas tabelas de estado
que este usuário tiver aberto.
# kill -TERM 23664
O arquivo /etc/authpf/authpf.rules contém as seguintes
regras:
wifi_if = "wi0"
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
https } flags S/SA keep state
|
O usuário administrativo charlie deve ter acesso aos
servidores SMTP e POP3, além de poder navegar na web e usar
SSH. As regras a seguir estão definidas no arquivo
/etc/authpf/users/charlie/authpf.rules:
wifi_if = "wi0"
smtp_server = "10.0.1.50"
pop3_server = "10.0.1.51"
pass in quick on $wifi_if proto tcp from $user_ip to $smtp_server \
port smtp flags S/SA keep state
pass in quick on $wifi_if proto tcp from $user_ip to $pop3_server \
port pop3 flags S/SA keep state
pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \
https } flags S/SA keep state
|
As regras principais -- localizadas em /etc/pf.conf --
são configuradas a seguir:
# macros
wifi_if = "wi0"
ext_if = "fxp0"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"
table <authpf_users> persist
scrub in all
# filter
block drop all
pass out quick on $ext_if inet proto tcp from \
{ $wifi_if:network, $ext_if } flags S/SA modulate state
pass out quick on $ext_if inet proto { udp, icmp } from \
{ $wifi_if:network, $ext_if } keep state
pass in quick on $wifi_if inet proto tcp from $wifi_if:network to $wifi_if \
port ssh flags S/SA keep state
pass in quick on $wifi_if inet proto { tcp, udp } from <authpf_users> \
to $dns_servers port domain keep state
anchor "authpf/*" in on $wifi_if
|
As regras são bem simples e sua função é:
A idéia por trás das regras principais é bloquear tudo e permitir a passagem de menos tráfego possível. O tráfego saindo pela interface externa é liberado, mas não é permitido entrar pela interface wireless através do política negar por padrão. Uma vez autenticado, o tráfego do usuário é permitido atravessar a interface wireless e seguir através do gateway para o resto da rede. A palavra-chave quick é usada de forma que o PF não precise avaliar cada regra quando uma nova conexão atravessa o gateway.
[Anterior: Problemas com FTP] [Conteúdo] [Próximo: Redundância de Firewall com CARP e pfsync]