[OpenBSD]

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

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


Conteúdo


Introdução

Authpf(8) é um shell de usuário para gateways de autenticação. Um gateway de autenticação é como um gateway de rede normal (também conhecido como um roteador), exceto pelo fato dos usuários precisarem primeiro se autenticar no gateway antes de poderem passar tráfego por ele. Quando um shell de usuário é definido como /usr/sbin/authpf (ou seja, em vez de definir o shell como ksh(1), csh(1), etc.), e esse usuário inicia sessão por SSH, o authpf faz as alterações necessárias no conjunto de regras ativas 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. Assim que o usuário encerrar a sessão ou sua sessão for desconectada, o authpf remove quaisquer regras carregadas para o usuário e derruba quaisquer conexões, com o estado mantido na tabela de estados, que o usuário possa ter aberto. Por isso a habilidade do usuário de passar tráfego através do gateway somente existe enquanto sua conexão SSH estiver ativa.

O authpf carrega as regras do usuários em uma única âncora. A âncora é nomeada combinando o nome de usuário UNIX e o ID de processo (PID - "Process ID") do authpf em um formato "nome_de_usuário(PID)". Cada âncora de usuário é guardada dentro da âncora authpf, a qual é ancorada no conjunto de regras principal. O "caminho da âncora totalmente qualificado" então torna-se:

conjunto_de_regras_principal/authpf/nome_de_usuário(PID)

As regras que o authpf carrega podem ser configuradas por usuário ou globalmente.

Exemplos de uso do authpf incluem:

O authpf registra o nome de usuário e endereço IP de cada usuário que se autentica, bem como o horário de início e fim de sua sessão, via syslogd(8). Utilizando essa informação, um administrador pode determinar quem estava em sessão e quando, e também pode calcular o tráfego utilizado por cada usuário, podendo fazer cobranças com base nesses dados.

Configuração

Os passos básicos necessários para configurar o 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.

Habilitação do Authpf

O authpf não é executado se o arquivo de configuração /etc/authpf/authpf.conf não estiver presente. O arquivo pode até estar vazio (com tamanho zero), mas deve existir para que o authpf termine sua execução imediatamente após o momento em que um usuário se autenticar com sucesso.

As seguintes diretivas de configuração podem ser colocadas no authpf.conf:

Ligando o Authpf ao Conjunto de Regras Principal

O authpf é ligado ao conjunto de regras principal utilizando-se de regras anchor:
anchor "authpf/*"

O lugar onde a regra anchor for especificada dentro do conjunto de regras é onde o PF sai do conjunto de regras principal para avaliar as regras do authpf.

Configuração de Regras Carregadas

O authpf carrega suas regras a partir 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) inicia sessão. 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 para quaisquer usuários que não possuam seu próprio arquivo authpf.rules. Se o arquivo específico do usuário existir, ele sobrescreve as regras do arquivo padrão. Pelo menos um dos arquivos deve existir, caso contrário o authpf não funciona.

Regras possuem a mesma sintaxe, como em qualquer outro conjunto de regras PF, com uma exceção: o authpf permite o uso de duas macros predefinidas:

É prática recomendada usar a macro $user_ip para permitir tráfego através do gateway vindo apenas do computador do usuário autenticado.

Em adição à macro $user_ip, o authpf faz uso da 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 usá-la:

table <authpf_users> persist
pass in on $ext_if proto tcp from <authpf_users> \
    to port smtp

Essa tabela somente deve ser usada em regras que se pretende aplicar a todos os usuários autenticados.

Listas de Controle de Acesso

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

De outro modo, é possível também permitir o acesso apenas a usuários específicos colocando seus nomes de usuário no arquivo /etc/authpf/authpf.allow. Se o arquivo /etc/authpf/authpf.allow não existe ou seu conteúdo for um "*", então o authpf permite o acesso a qualquer usuário que conseguir iniciar sessão via SSH, desde que não tenha sido explicitamente banido.

Caso o authpf não consiga determinar se um nome de usuário tem ou não permissão de acesso, ele mostra uma breve mensagem e então desconecta o usuário. Uma entrada em /etc/authpf/banned/ sempre sobrescreve uma entrada em /etc/authpf/authpf.allow.

Mostrando uma Mensagem de Início de Sessão

Sempre que um usuário se autentica com sucesso no authpf, uma saudação que indica que o usuário está autenticado é mostrada.

Hello charlie. You are authenticated from host "64.59.56.140"

Essa mensagem pode ser suplementada colocando-se uma mensagem personalizada no /etc/authpf/authpf.message. O conteúdo desse arquivo será mostrado depois da mensagem de bem-vindo padrão.

Definindo o Authpf como um Shell do Usuário

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

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

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

Criação de uma Classe de Início de Sessão authpf

Ao utilizar o authpf em um sistema que tem contas de usuários normais e contas de usuários authpf, pode ser útil usar uma classe de início de sessão separada para os usuários authpf. Isso permite que certas mudanças àquelas contas sejam feitas globalmente, e também permite que políticas diferentes sejam colocadas em contas normais e contas authpf. Alguns exemplos de quais políticas podem ser configuradas:

Classes de início de sessão são criadas no arquivo login.conf(5). O OpenBSD possui uma classe de início de sessão definida como:

authpf:\
    :welcome=/etc/motd.authpf:\
    :shell=/usr/sbin/authpf:\
    :tc=default:

Os usuários são designados para uma classe de início de sessão através da edição do campo class da entrada do usuário no banco de dados passwd(5). Uma maneira de se fazer isso é com o comando chsh(1).

Verificando Quem está em Sessão

Assim que um usuário inicia sessão e o authpf ajusta as regras PF, ele também altera o título do processo para mostrar o nome e o endereço IP do usuário em sessão:
    # ps -ax | grep authpf
    23664 p0  Is+     0:00.11 -authpf: charlie@192.168.1.3 (authpf)

Aqui o usuário charlie iniciou sessão a partir da máquina 192.168.1.3. Ao enviar um sinal SIGTERM ao processo authpf, o usuário pode ser forçado a encerrar sua sessão. O authpf remove quaisquer regras inseridas para o usuário e derruba todas conexões, com o estado mantido na tabela de estados, que esse usuário tiver aberto.

    # kill -TERM 23664

Exemplo

O authpf está sendo usado em um gateway OpenBSD para autenticar usuários em uma rede sem fio que é parte de uma grande rede em um campus. Assim que o usuário tiver se autenticado, assumindo que não esteja na lista de banidos, ele terá permissão de abrir conexões SSH e navegar na Web (incluindo sítios Web 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 }

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
pass in quick on $wifi_if \
   proto tcp from $user_ip to $pop3_server port pop3
pass in quick on $wifi_if \
   proto tcp from $user_ip to port { ssh, http, https }

O conjunto de regras principal -- localizado em /etc/pf.conf -- é configurado a seguir:

# Macros
wifi_if = "wi0"
ext_if  = "fxp0"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"

table <authpf_users> persist

# Filtros
block drop all

pass out quick on $ext_if inet proto { tcp, udp, icmp } \
   from { $wifi_if:network, $ext_if }

pass in quick on $wifi_if inet proto tcp \
   from $wifi_if:network to $wifi_if port ssh

pass in quick on $wifi_if inet proto { tcp, udp } \
   from <authpf_users> to $dns_servers port domain

anchor "authpf/*" in on $wifi_if

O conjunto de regras é bem simples e faz o seguinte:

A ideia por trás do conjunto de regras principal é bloquear tudo e permitir a passagem da menor quantidade possível de tráfego. O tráfego saindo pela interface externa é liberado, mas é bloqueada pela política negar por padrão a entrada na interface sem fio. Uma vez autenticado, é permitido ao tráfego do usuário atravessar a interface sem fio 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 conjunto de regras nomeado 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.16 2013/05/03 05:53:48 ajacoutot Exp $