FreeBSD Handbook/Redes/Servidores/inetd

29.2 O "Super-Servidor" inetd

editar

Contribuição de Chern Lee. Atualizado por The FreeBSD Documentation Project.

29.2.1 Visão Geral

editar

O inetd(8) algumas vezes é chamado de "Super-Servidor" pois gerencia conexões para diversos serviços. Quando uma conexão é atendida pelo inetd ele determina para que programa a conexão se destina, lança o processo específico e delega o socket ao mesmo (o programa é chamado com o socket do serviço como descritor de sua entrada padrão, saída padrão e saída de erro. Executar o inetd para serviços menos utilizados pode reduzir a carga total do sistema, comparando-se a executar cada serviço individualmente.

Primariamente, o inetd é usado para executar outros serviços, mas diversos protocolos simples são tratados diretamente, como chargen, auth e daytime.

Esta seção vai abordar as configurações básicas do inetd através de seus parâmetros de linha de comando e seu arquivo de configuração /etc/inetd.conf.

29.2.2 Configurações

editar

O inetd é inicializado através do sistema rc(8). A opção inetd_enable é ajustada para "NO", por padrão, mas é muitas vezes ativada pelo sysinstall, dependendo da configuração escolhida pelo usuário. Colocando:

inetd_enable="YES"

ou

 inetd_enable="NO"

no /etc/inetd.conf vai ativar ou desativar a execução do inetd na inicialização do sistema. O comando:

 # /etc/rc.d/inetd rcvar

pode ser executado para verificar a configuração atual.

Adicionalmente, parâmetros de linha de comando podem ser passados para o inetd através da opção inetd_flags.

29.2.3 Opções de Linha de Comando

editar

Como a maioria dos daemons, o inetd possui várias opções que podem modificar seu comportamento. A lista completa é a seguinte:

inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname] [-p filename] [-R rate] [-s maximum] [configuration file]

As opções podem ser passadas ao inetd usando o parâmetro inetd_flags no /etc/inetd.conf. Por padrão o inetd_flags é definido como "-wW -C 60", que liga o encapsulamento TCP e evita que qualquer IP único solicite qualquer serviço mais do que 60 vezes em um minuto qualquer.

Embora mencionemos opção de taxa limite a seguir, os usuários mais novos podem notar que esses parâmetros normalmente não precisam ser modificados. Essas opções podem ser úteis caso você descubra que está recebendo um número excessivo de conexões. A lista completa de opções pode ser encontrada no manual do inetd(8).

-c máximo
Especifica o número máximo padrão de invocações simultâneas de cada serviço. O padrão é ilimitado. Pode ser definido para cada serviço com o parâmetro max-child.
-C taxa
Especifica o número máximo de vezes que um serviço pode ser chamado de um mesmo IP num mesmo minuto. O padrão é ilimitado. Pode ser definido para cada serviço com o parâmetro max-connections-per-ip-per-minute.
-R taxa
Especifica o número de vezes que um serviço pode ser chamado por minuto. O padrão é 256. Uma taxa igual a 0 permite um número ilimitado de requisições.
-s máximo
Especifica o número máximo de vezes que um serviço pode ser requisitado simultaneamente a partir de um IP único. O valor padrão é ilimitado. Pode ser definido separadamente para cada serviço com o uso do parâmetro max-child-per-ip.

29.2.4 inetd.conf

editar

A configuração do inetd é feita no arquivo /etc/inetd.conf.

Quando uma modificação é feita no /etc/inetd.conf, o inetd pode reler sua configuração através do comando:

Exemplo 29.1- Recarregando o arquivo de configuração do inetd

editar
 # /etc/rc.d/inetd reload

Cada linha do arquivo de configuração especifica um serviço único. Os comentários no arquivo iniciam com um "#". O formato de cada entrada no /etc/inetd.conf é como mostrado a seguir:

 nome-do-serviço
 tipo-de-socket
 protocolo
 {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]
 usuário[:grupo][/classe-de-login]
 programa-servidor
 argumentos-do-programa-servidor

Uma linha de exemplo para o ftpd(8) usando IPv4 poderia ser assim:

 ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l
nome-do-serviço
Este é o nome do serviço em questão. Ele precisa corresponder ao serviço listado no /etc/services. Isto determina qual porta o inetd precisa escutar. Se um novo serviço está sendo criado, ele precisa primeiramente ser colocado no /etc/services.
tipo-de-socket
Pode ser stream, dgram, raw, ou seqpacket. stream precisa ser usado para daemons TCP baseados em conexão, enquanto dgram é usado para daemons usando o protocolo de transporte UDP.