xinetd
O xinetd (eXtended inetd) é denominado super-servidor.
Este super-servidor está continuamente a correr e à escuta de
conexões com as portas TCP ou UDP associadas a cada serviço (estas portas estão
definidas em /etc/services). Sempre que um pedido de conexão ocorrer numa dessas
portas, o super-servidor lança o servidor respectivo (ex. rlogind é o servidor
do serviço rlogin) e o pedido é-lhe enviado para processamento.
Foi desenvolvido como um substituto seguro do inetd e tcp_wrappers.
tcp_wrapping é um mecanismo que possibilita alguma protecção ao servidor pois
antes do serviço do servidor ser lançado, quando um pedido chega a uma das
portas de rede "escutadas" pelo super-servidor, a mensagem é enviada para o tcpd,
que decide o que fazer com o pedido em função de restrições definidas em /etc/hosts.allow
e /etc/hosts.deny.
O xinetd pode ser combinado com tcp_wrapers tal como é representado na figura
seguinte:
No entanto o xinetd vai muito para além das potencialidades suportadas por
tcp_wrappers. Nomeadamente:
- controla o acesso a serviços baseados em TCP, UDP e RPC;
- controla o acesso a serviços segundo segmentos de tempo;
- controla o acesso a serviços segundo a quantidade de servidores:
- dum determinado tipo;
- totais;
- extensas capacidades de log:
- quando a conexão é aceite aceite/rejeitada;
- informação sobre data, utilizador, IP, etc.;
- controlo de acesso a serviços segundo a interface
(privada/interna/externa).
Para além do acréscimo de segurança que este mecanismo permite ao servidor, é
benéfico para a administração do sistema:
- Transparência, pois não exige qualquer alteração ao servidor ou clientes
para funcionar;
- Administração centralizada de serviços, pois pode-se definir restrições
independentemente do serviço.
A relação entre as portas e o servidor é configurado a partir de /etc/xinetd.conf,
que define também as restrições/atributos por omissão.
#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
includedir /etc/xinetd.d
É comum este ficheiro recorrer a ficheiros para a configuração individual
para cada serviço, localiazados num ou mais directórios (ex. includedir /etc/xinetd.d).
Seja através de ficheiros de configuração seja no próprio ficheiro xinetd.conf,
cada serviço é configurado através de da seguinte estrutura de informação:
service <service_name>
{
<attribute> <assign_op> <value> <value> ...
...
}
- <assign_op> pode ser um dos sinais "=", "+=" (adiciona um elementos da
lista) e "-=" (retira um elementos da lista);
- podem ocorrer múltiplas linhas de atributos.
Um exemplo deste tipo de configuração é apresentado a seguir, referente ao
serviço/servidor de rlogin.
service rlogin
{
socket_type = stream
wait = no
user = root
log_on_success += USERID
log_on_failure += USERID
server = /usr/sbin/in.rlogind
}
Alguns os atributos mais relevantes no que respeita às restrições de acesso
são:
- instances = NUM: define o número de pedidos que um determinado serviço
pode tratar simultaneamente;
- log_type = SYSLOG/FILE: define a forma com o log é realizado (se através
do syslog se directamente para um ficheiro):
- log_type = SYSLOG authpriv/auth/mail/ nível;
- log_type = FILE /var/log/messages_tcp_wrappers;
- log_on_sucesse/failure: define o tipo de informação que irá ser
reportada:
- ATTEMPT: reporta a falha num pedido de serviço (log_on_failure);
- DURATION: a duração da prestação de serviço (log_on_success);
- EXIT: "exit status" ou "termination signal" do service (log_on_success);
- HOST: IP do cliente (log_on_failure and log_on_success);
- PID: ID do processo do servidor (log_on_success);
- RECORD: informação acerca do sistema caso o serviço não arranque.
Apenas alguns serviços específicos podem usar esta opção: rlogin, login,
finger (log_on_failure);
- USERID: informação do utilizador segundo o RFC 1413 (log_on_failure
and log_on_success);
- per_source: define o número máximo de serviços disponibilizados a cada
cliente. Pode ser definido como UNLIMITED;
- only_from: define o conjunto de máquinas que não têm acesso ao serviços;
- no_access: define o conjunto de máquinas que não têm acesso aos
serviços;
- disabled: define o conjunto de serviços que não podem ser requisitados;
- enabled: define o conjunto de serviços que não podem ser requisitados;
- bind: define a interface em que determinado serviço é aceite (ex.
172.22.22.230);
- redirect: define qual o IP ou nome e em que porta será tratado este
pedido(ex. 192.168.0.3 23 999);
- server: define o executável do servidor (ex. /usr/bin/finger);
- user: define qual o utilizador que será usado para correr o servidor
(ex. root);
- server_args: permite definir argumentos de arranque do servidor;
- access_times: define os períodos em que o servidor pode ser requisitado
(ex. 08:00-17:00);
- max_load: define a carga máxima com que o sistema pode estar antes que
os pedidos sejam rejeitados.
Última actualização:
31 Outubro 2005