[OpenBSD]

[Anterior: Problemas com FTP] [Conteúdo] [Próximo: Redundância de Firewall com CARP e pfsync]

PF: Authpf: Shell de Usuário para Autenticação em Gateways


Conteúdo


Introdução

Authpf(8) é um shell para autenticação em gateways. Um gateway de autenticação é como um gateway de rede normal (um roteador) exceto pelo fato dos usuários precisarem primeiro se autenticar no gateway antes de poderem passar por ele. Quando um shell de usuário é definido como /usr/sbin/authpf (ex: ao invés de definir o shell como ksh(1), csh(1), etc) e esse usuário loga por SSH, o authpf fará as alteraçoes necessárias nas regras do pf(4) para permitir que o tráfego do usuário passe pelas regras de filtragem e/ou seja alterado usando Tradução do Endereço de Rede (NAT) ou Redirecionamento. Uma vez que o usuário fizer logout ou sua sessão for desconectada, o authpf removerá quaisquer regras carregadas para o usuário e derrubará quaisquer conexões mantidas pelas tabela de estado que o usuário possa ter aberto. Por isso a possibilidade do usuário passar tráfego através do gateway somente existe enquanto sua conexão SSH estiver ativa.

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.

Configuração

Os passos básicos necessários para configurar authpf são descritos aqui. Para uma descrição completa da configuração do authpf, por favor consulte a página de manual do authpf.

Habilitando o Authpf

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:

Linkando Authpf nas Regras Principais

Authpf é linkado no conjunto de regras principais utilizando-se de regras anchor:
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.

Configurando as Regras a Carregar

Authpf carrega suas regras de um destes arquivos:

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.

Listas de Controle de Acesso (ACL)

Usuários podem ser impedidos de usar authpf criando-se um arquivo no diretório /etc/authpf/banned/ e nomeando-o com o nome do usuário que deve ter o acesso negado. O conteúdo deste arquivo será mostrado ao usuário antes que authpf o desconecte. Isso fornece uma maneira simples de notificar o usuário do porquê seu acesso não é permitido e a quem contactar para ter o acesso liberado novamente.

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.

Mostrando uma Mensagem de Login

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.

Definindo Authpf como um Shell de usuário

Para authpf funcionar ele deve ser definido como shell de login do usuário. Quando o usuário se autenticar ao sshd(8), authpf será executado como o shell do usuário. Ele então verifica se o usuário tem permissão de usar authpf, carrega as regras do arquivo apropriado, etc.

Existem algumas formas de se definir authpf como shell de usuário:

  1. Manualmente para cada usuário usando chsh(1), vipw(8), useradd(8), usermod(8), etc.
  2. Colocando usuários numa classe de login e alterando a opção shell da classe em /etc/login.conf.

Criando uma Classe de Login authpf

Quanto estiver usando o authpf em um sistema que tiver contas de usuários regulares e contas de usuários authpf, pode ser útil usar uma classe de login separado para os usuários authpf. Isto permite certas mudanças, para aquelas contas, serem feitas em uma base global e também permite políticas difirentes serem colocadas em contas regulares e contas authpf. Alguns exemplos de como as políticas podem ser configuradas:

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).

Verificando quem está Logado

Assim que um usuário se loga e o authpf ajusta as regras PF, ele também altera o título do processo para mostrar o nome e endereço IP do usuário logado: # 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

Exemplo

O authpf está sendo usado num gateway OpenBSD para autenticar usuários numa rede wireless que é parte de uma grande rede num campus. Uma vez autenticado o usuário, assumindo que não esteja na lista de banidos, terá permissão de abrir conexões SSH e navegar na web (incluindo web sites seguros), além de poder acessar os servidores DNS do campus.

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]


[voltar] www@openbsd.org
$OpenBSD: authpf.html,v 1.10 2007/12/16 17:18:35 tobias Exp $