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.
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
:
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:
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
.
Ou stream
, dgram
, raw
, ou seqpacket
. Use stream
para conexões TCP e dgram
para serviços UDP.
Use um dos seguintes nomes de protocolo:
Protocol Name | Explicação |
---|---|
tcp ou tcp4 | TCP IPv4 |
udp ou udp4 | UDP IPv4 |
tcp6 | TCP IPv6 |
udp6 | UDP IPv6 |
tcp46 | Ambos TCP IPv4 e IPv6 |
udp46 | Ambos UDP IPv4 e IPv6 |
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
O nome de usuário que o daemon será executado como. Daemons geralmente são executados como root
, daemon
, ou nobody
.
O caminho completo para o daemon. Se o daemon for um serviço fornecido pelo inetd internamente, use internal
.
Usado para especificar qualquer argumento de comando a ser transmitido ao daemon na chamada. Se o daemon for um serviço interno, use internal
.
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:
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
.
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
.
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.
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.
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>.