29.2. O super-servidor inetd

O daemon inetd(8) é algumas vezes chamado de Super-Servidor porque gerencia conexões para muitos serviços. Em vez de iniciar vários aplicativos, apenas o serviço inetd precisa ser iniciado. Quando uma conexão é recebida para um serviço gerenciado pelo inetd, ele determina para qual programa a conexão está destinada, gera um processo para esse programa e delega ao programa um socket. O uso de inetd para serviços que não são muito usados ​​pode reduzir a carga do sistema, quando comparado à execução de cada daemon individualmente no modo independente.

Primeiramente, inetd é usado para gerar outros daemons, mas vários protocolos triviais são tratados internamente, como chargen, auth, time, echo, discard e daytime.

Esta seção aborda os conceitos básicos da configuração do inetd.

29.2.1. Arquivo de Configuração

A configuração do inetd é feita editando o /etc/inetd.conf. Cada linha deste arquivo de configuração representa um aplicativo que pode ser iniciado pelo inetd. Por padrão, cada linha começa com um comentário (#), o que significa que inetd não está atendendo a nenhum aplicativo. Para configurar o inetd para escutar as conexões de um aplicativo, remova o # no início da linha desse aplicativo.

Depois de salvar suas edições, configure o inetd para iniciar na inicialização do sistema editando o arquivo /etc/rc.conf:

inetd_enable="YES"

Para iniciar o inetd agora, para que ele ouça o serviço que você configurou, digite:

# service inetd start

Uma vez iniciado o inetd, ele precisa ser notificado sempre que uma modificação for feita no arquivo /etc/inetd.conf:

Exemplo 29.1. Recarregando o Arquivo de Configuração do inetd
# service inetd reload

Normalmente, a entrada padrão de um aplicativo não precisa ser editada além da remoção do #. Em algumas situações, pode ser apropriado editar a entrada padrão.

Como exemplo, esta é a entrada padrão para ftpd(8) sobre o IPv4:

ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l

As sete colunas em uma entrada são as seguintes:

service-name
socket-type
protocol
{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]
user[:group][/login-class]
server-program
server-program-arguments

Onde:

service-name

O nome do serviço do daemon para iniciar. Deve corresponder a um serviço listado no arquivo /etc/services. Isso determina qual porta inetd atende para conexões de entrada para esse serviço. Ao usar um serviço personalizado, ele deve primeiro ser adicionado ao arquivo /etc/services.

socket-type

Ou stream, dgram, raw, ou seqpacket. Use stream para conexões TCP e dgram para serviços UDP.

protocol

Use um dos seguintes nomes de protocolo:

Protocol NameExplicação
tcp ou tcp4TCP IPv4
udp ou udp4UDP IPv4
tcp6TCP IPv6
udp6UDP IPv6
tcp46Ambos TCP IPv4 e IPv6
udp46Ambos UDP IPv4 e IPv6
{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]

Neste campo, wait ou nowait deve ser especificado. max-child, max-connections-per-ip-por-minute e max-child-per-ip são opcionais.

wait|nowait indica se o serviço pode ou não manipular seu próprio socket. Os tipos de socket dgram devem usar wait enquanto os daemons stream, que geralmente são multi-threaded, devem usar nowait. wait geralmente passa vários sockets para um único daemon, enquanto nowait gera um daemon filho para cada novo socket.

O número máximo de daemons inetd que podem aparecer é definido por max-child. Por exemplo, para limitar dez instâncias do daemon, coloque um /10 após o nowait. Especificar /0 permite um número ilimitado de filhos.

max-connections-per-ip-per-minute limita o número de conexões de qualquer endereço específico de IP por minuto. Quando o limite for atingido, outras conexões desse endereço IP serão descartadas até o final do minuto. Por exemplo, um valor de /10 limitaria qualquer endereço IP específico a dez tentativas de conexão por minuto. max-child-per-ip limita o número de processos-filhos que podem ser iniciados em nome de um único endereço IP a qualquer momento. Essas opções podem limitar o consumo excessivo de recursos e ajudar a impedir ataques de negação de serviço (DoS (Denial Of Service)).

Um exemplo pode ser visto nas configurações padrão para fingerd(8):

finger stream  tcp     nowait/3/10 nobody /usr/libexec/fingerd fingerd -k -s
usuário

O nome de usuário que o daemon será executado como. Daemons geralmente são executados como root, daemon, ou nobody.

programa servidor

O caminho completo para o daemon. Se o daemon for um serviço fornecido pelo inetd internamente, use internal.

argumentos do programa servidor

Usado para especificar qualquer argumento de comando a ser transmitido ao daemon na chamada. Se o daemon for um serviço interno, use internal.

29.2.2. Opções de linha de comando

Como a maioria dos daemons de servidor, o inetd tem várias opções que podem ser usadas para modificar seu comportamento. Por padrão, inetd é iniciado com -wW -C 60. Essas opções ativam TCP wrappers para todos os serviços, incluindo serviços internos, e impedem que qualquer endereço de IP solicite qualquer serviço mais de 60 vezes por minuto.

Para alterar as opções padrão que são passadas para inetd, adicione uma entrada para inetd_flags no arquivo /etc/rc.conf. Se o inetd já estiver em execução, reinicie-o com service inetd restart.

As opções disponíveis de limitação de taxa são:

-c máximo

Especifique o número máximo padrão de chamadas simultâneas de cada serviço, em que o padrão é ilimitado. Pode ser sobrescrito com base no serviço usando max-child em /etc/inetd.conf.

-C taxa

Especifique o número máximo padrão de vezes por minuto que um serviço pode ser chamado a partir de um único endereço de IP. Pode ser substituído com base no serviço usando max-connections-per-ip-por-minute em /etc/inetd.conf.

-R taxa

Especifique o número máximo de vezes que um serviço pode ser chamado em um minuto, em que o padrão é 256. Uma taxa de 0 permite um número ilimitado.

-s máximo

Especifique o número máximo de vezes que um serviço pode ser chamado a partir de um único endereço IP a qualquer momento, em que o padrão é ilimitado. Pode ser sobrescrito com base no serviço usando max-child-per-ip no arquivo /etc/inetd.conf.

Opções adicionais estão disponíveis. Consulte inetd(8) para a lista completa de opções.

29.2.3. Considerações de segurança

Muitos dos daemons que podem ser gerenciados pelo inetd não são conscientes da segurança. Alguns daemons, como fingerd, podem fornecer informações que podem ser úteis para um invasor. Ative apenas os serviços necessários e monitore o sistema para tentativas excessivas de conexão. max-connections-per-ip-por-minute, max-child e max-child-per-ip podem ser usados para limitar tais ataques.

Por padrão, TCP wrappers estão ativados. Consulte hosts_access(5) para obter mais informações sobre como colocar restrições TCP em vários daemons chamados pelo inetd.

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