O TCP Wrapper é um sistema de controle de acesso baseado em host que estende as habilidades do Seção 29.2, “O super-servidor inetd”. Ele pode ser configurado para fornecer suporte de registro, mensagens de retorno e restrições de conexão para os daemons do servidor sob o controle do inetd. Consulte tcpd(8) para obter maiores informações sobre o TCP Wrapper e seus recursos.
O TCP Wrapper não deve ser considerado um substituto para um firewall configurado adequadamente. Em vez disso, TCP Wrapper deve ser usado em conjunto com um firewall e outros aprimoramentos de segurança para fornecer outra camada de proteção na implementação de uma política de segurança.
Para ativar o TCP Wrapper no FreeBSD, adicione as seguintes linhas ao arquivo /etc/rc.conf
:
inetd_enable="YES" inetd_flags="-Ww"
Então, configure corretamente o arquivo /etc/hosts.allow
.
Ao contrário de outras implementações do TCP Wrapper, o uso do arquivo hosts.deny
foi preterido no FreeBSD. Todas as opções de configuração devem ser colocadas no arquivo /etc/hosts.allow
.
Na configuração mais simples, as políticas de conexão do daemon são configuradas para permitir ou bloquear, dependendo das opções no arquivo /etc/hosts.allow
. A configuração padrão no FreeBSD é permitir todas as conexões para os daemons iniciados com o inetd.
A configuração básica geralmente assume a forma de daemon : address : action
, onde daemon
é o daemon que o inetd iniciou, address
é um nome de host válido ou um endereço IP ou um endereço IPv6 entre colchetes ([]) e action
é allow
ou deny
. O TCP Wrapper usa uma semântica de correspondência de primeira regra, o que significa que o arquivo de configuração é varrido desde o início para uma regra correspondente. Quando uma correspondência é encontrada, a regra é aplicada e o processo de pesquisa é interrompido.
Por exemplo, para permitir conexões POP3 através do daemon mail/qpopper, as seguintes linhas devem ser anexadas ao arquivo hosts.allow
:
# This line is required for POP3 connections: qpopper : ALL : allow
Sempre que este arquivo for editado, reinicie o inetd:
#
service inetd restart
O TCP Wrapper fornece opções avançadas para permitir mais controle sobre o modo como as conexões são tratadas. Em alguns casos, pode ser apropriado retornar um comentário para determinados hosts ou conexões de daemon. Em outros casos, uma entrada de log deve ser registrada ou um email enviado ao administrador. Outras situações podem exigir o uso de um serviço apenas para conexões locais. Isso tudo é possível através do uso de opções de configuração conhecidas como wildcards, caracteres de expansão e execução de comandos externos.
Suponha que uma situação ocorra onde uma conexão deva ser negada, mas uma razão deve ser enviada ao host que tentou estabelecer essa conexão. Essa ação é possível com a opção twist
. Quando uma tentativa de conexão é feita, o twist
executa um comando ou script shell. Existe um exemplo no arquivo hosts.allow
:
# The rest of the daemons are protected. ALL : ALL \ : severity auth.info \ : twist /bin/echo "You are not welcome to use %d from %h."
Neste exemplo, a mensagem “You are not allowed to use daemon name
from hostname
.” será retornada para qualquer daemon não configurado no hosts.allow
. Isso é útil para enviar uma resposta de volta ao inicializador de conexão logo após a conexão estabelecida ser descartada. Qualquer mensagem a ser retornada deve ser delimitada por caracteres de aspas duplas ("
).
Pode ser possível iniciar um ataque de negação de serviço no servidor se um invasor inunda esses daemons com solicitações de conexão.
Outra possibilidade é usar a opção spawn
. Como a opção twist
, a opçãospawn
implicitamente nega a conexão e pode ser usado para executar comandos ou scripts externos do shell. Ao contrário da twist
, a spawn
não enviará uma resposta ao host que estabeleceu a conexão. Por exemplo, considere a seguinte configuração:
# We do not allow connections from example.com: ALL : .example.com \ : spawn (/bin/echo %a from %h attempted to access %d >> \ /var/log/connections.log) \ : deny
Isso negará todas as tentativas de conexão de *.example.com
e registrará o nome do host, endereço IP e o daemon ao qual o acesso foi tentado no arquivo /var/log/connections.log
. Este exemplo usa os caracteres de substituição %a
e %h
. Consulte hosts_access(5) para a lista completa.
Para corresponder a cada instância de um daemon, domínio ou endereço IP, use ALL
. Outro wildcard é o PARANOID
, que pode ser usado para corresponder a qualquer host que forneça um endereço IP que possa ser forjado, porque o endereço IP difere do nome resolvido para o host. Neste exemplo, todas as solicitações de conexão para o Sendmail que possuem um endereço IP que varia de seu nome de host serão negadas:
# Block possibly spoofed requests to sendmail: sendmail : PARANOID : deny
Usar o wildcard PARANOID
resultará em conexões negadas se o cliente ou servidor tiver uma configuração de DNS incorreta.
Para saber mais sobre wildcards e sua funcionalidade associada, consulte hosts_access(5).
Ao adicionar novas linhas de configuração, certifique-se de que quaisquer entradas desnecessárias para esse daemon sejam comentadas no arquivo hosts.allow
.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.