Configurando o xinetd

 

Este guia não pretende ser definitivo, ele somente é utilizado para fins de ensino. Qualquer configuração adicional é bom olhar no próprio manual que acompanha o software.

 

Criado por: Marcos Aurelio Pchek Laureano

marcos@laureano.eti.br

 

Última alteração: 29/10/2002

Visite a página principal www.laureano.eti.br.

Visite o fórum www.laureano.eti.br/forum para tirar dúvidas.


 

Considerações

 

 

Serviços de rede com xinetd

Uma rede de computadores serve basicamente, para possibilitar o compartilhamento de recursos, como arquivos e impressoras. É possível dizer que o compartilhamento de arquivos e impressoras é um Serviço de Rede.


Outros serviços de rede tornaram-se muito populares com a expansão da Internet nos últimos anos. Tais serviços, como o WWW e FTP, requerem que um computador execute algum processo que atenda pelas requisições dos clientes que desejam acessá-los. Isto implica em um modelo cliente-servidor, onde normalmente a máquina do usuário solicita alguma coisa, através de um programa cliente como o browser, por exemplo, e o processo servidor (que implementa o serviço da rede) responde.


O sistema operacional UNIX, e, portanto o Linux, sempre foi muito conhecido por oferecer diversos serviços de rede tradicionais. Tais serviços vão desde a possibilidade de saber quem está usando uma máquina, até o próprio serviço de transferência de arquivos.


Muitos serviços de rede são implementados através de processos dedicados que esperam por requisições que chegam da rede. Mas dada a razoável quantidade de serviços, um esquema interessante foi implantado. Neste esquema, um único processo, chamado xinetd (Extend Internet Super Server), rodando na máquina que está oferecendo os serviços de rede, é responsável por escutar as requisições que chegam, e conforme a porta por onde chega à requisição, disparar e executar o processo correspondente àquele serviço.


Assim, da mesma forma que um endereço IP identifica uma máquina em uma rede, uma porta identifica um serviço de rede rodando dentro de determinada máquina. Alguns serviços funcionam sobre o protocolo de transporte TCP, outros sobre o protocolo UDP, e ainda outros funcionam sobre os dois.


O xinetd é responsável por vários serviços básicos de um sistema disponibilizados em uma rede. Entre os serviços que ele gerencia estão os serviços Telnet e POP.


Esses serviços são executados por programas denominados servidores, que nada mais são do que programas que abrem uma determinada porta e ficam aguardando por solicitações de conexão.


Na maioria dos casos, quando uma solicitação é recebida o servidor cria um processo filho para tratar dessa conexão específica, enquanto o processo pai continua a escutar na porta aguardando novas solicitações. Desta forma existirão vários processos alocados na memória.


O xinetd carrega seu arquivo de configuração e passa a “ouvir” por conexões em portas específicas. Quando uma conexão é solicitada, o xinetd executa o programa servidor correspondente para manipular o serviço solicitado. Então, desta forma, existirá apenas um servidor em memória esperando por uma solicitação.


O superservidor ou xinetd é configurado para iniciar a sua execução quando o sistema é inicializado, recebendo a lista de serviços a serem monitorados a partir de um arquivo denominado /etc/xinetd.conf.


Configurando o xinetd

Toda a configuração do xinetd é feita através de um único arquivo, o /etc/xinetd.conf ou um arquivo por serviço. O segundo método é melhor em termos de organização. Para utilizá-lo, devemos declarar no arquivo xinetd.conf o diretório que conterá estes arquivos. Por exemplo:


includedir /etc/xinetd.d


Declarando assim que no diretório /etc/xinetd.d teremos os arquivos de configuração dos serviços. Neste diretório criamos um arquivo para cada serviço, o nome dos arquivos pode ser qualquer um, mas o ideal é colocar o mesmo nome do serviço.


Este é um pequeno exemplo de algumas configurações que poderão ser utilizadas pelo arquivo /etc/xinetd.conf:


As configurações inseridas dentro da sessão defaults serão aplicadas para todos os outros serviços configurados.


defaults

{

instances = 25

per_source = 10

log_type = SYSLOG authpriv

log_on_success = HOST PID USERID

log_on_failure = HOST RECORD USERID

}


instances: Esta opção controla o número de conexões simultâneas em um serviço e sua configuração pode acabar evitando um ataque do tipo DoS (Denial of Service) em seu servidor.


per_source: Controla o número máximo de conexões originadas de uma mesma máquina.


log_type: Indica como o xinetd irá logar as requisições.


log_on_success: Informa ao xinetd quais informações ele deverá capturar do usuário que conseguir logar.


log_on_failure: Indica quais informações deverão ser capturadas dos usuários que não conseguirem logar.


Caso o usuário queira configurar o serviço de telnet, ele poderá fazê-lo da seguinte maneira:


service telnet

{

flags = REUSE

log_type = FILE /var/log/telnet.log

socket_type = stream

protocol = tcp

wait = no

user = root

server = /usr/sbin/in.telnetd

bind = 200.1.1.20

redirect = 192.168.1.111 23

only_from = 192.168.1.0/24

}


onde:


flags: Recebe as opções passadas em linha de comando para o daemon.


socket_type: Especifica o tipo de socket usado, como: dgram, stream ou raw.


protocol: Indica o protocolo usado pelo serviço.


wait: Diz ao xinetd se ele deve chamar o serviço sobre demanda ou não.


user: Usuário que executará o serviço.


server: Localização do daemon do serviço.


bind: O IP ou host especificado aqui será origem quando um serviço for redirecionado com o uso da opção redirect.


redirect: Host ou IP da máquina que receberá a requisição do serviço.


only_from: Limita os endereços de IP que terão acesso a determinado serviço.


Para mais informações sobre a configuração do xinetd.conf e um arquivo exemplo consultem a página de manual do arquivo executando o comando:


# man xinetd.conf


Como desativar manualmente serviços e portas desnecessários

Para fortalecer um servidor, você deverá antes desativar quaisquer serviços e portas desnecessárias. Este processo envolve a remoção de todos os serviços desnecessários, tais como o serviço rlogin do Linux, e trancar as portas TCP/UDP desnecessárias. Uma vez que esses serviços e portas estiverem seguros, você deverá manter os sistemas regularmente.


O Linux, por natureza, é mais seguro do que a maioria dos sistemas operacionais. Independente disso há ainda incertezas a cada novo kernel disponibilizado, e muitas vulnerabilidades de segurança que ainda não foram descobertas. A maior parte dos serviços do Linux não é vulnerável a essas explorações. Contudo, o administrador pode reduzir o nível de risco através da remoção dos serviços desnecessários.


As redes TCP/IP atribuem uma porta para cada serviço, tais como HTTP, SMTP e POP3. Cada porta recebe um número, chamado de número de porta, que é usado para ligar os dados de entrada ao serviço atual.


Há dois tipos de portas usadas pelas redes TCP/IP: as portas conhecidas e as portas registradas. As portas conhecidas são os serviços de rede que receberam um número de porta específico (como definido no arquivo /etc/services). Os serviços ouvem os pedidos na rede através das portas conhecidas (por exemplo, HTTP na porta 80). As portas registradas são temporárias, geralmente utilizadas por clientes, e variam a cada vez que um serviço é utilizado. As portas registradas são também chamadas de portas efêmeras, pois duram por apenas um breve período. A porta então é abandonada e pode ser usada por outros serviços.


Conforme a RFC 1700, as portas conhecidas variam de 1 até 1023 e as registradas de 1024 até 65535.


Ao determinar quais portas deve ser bloqueada no seu servidor, você deve antes determinar de quais serviços você precisa. Na maioria dos casos, bloqueie todas as portas que não são requisitadas exclusivamente por esses serviços. Isto é perigoso, porque você pode facilmente bloquear a si mesmo dos serviços de que precisa, especialmente serviços que usam portas efêmeras.


Bloqueando serviços xinetd

Para bloquear serviços TCP/UDP no Linux, você deve desativar o serviço que usa a porta específica. Se a linha de um serviço for transformada em um comentário em seu arquivo de configuração, o serviço estará desativado. Existe uma outra forma de desativar o serviço, através da opção disable. Como o xinetd é muito poderoso, somente o super-usuário (root) deve ser capaz de configurar seus serviços.

 

Por exemplo, se quisermos desabilitar o serviço daytime (que mostra a data hora do servidor):

Para descobrir se o serviço está habilitado, você pode utilizar o comando telnet informando a porta, no nosso caso, a porta daytime é a 13.

Através do comando:

# telnet 167.10.18.185 13

 

Deverá surgir a informação parecida como abaixo, informando que a porta está aberta.

Trying 167.10.18.185...

Connected to 167.10.18.185.

Escape character is '^]'.

25 OCT 2002 09:53:58 BRST

Connection closed by foreign host.

 

Caso as informações sejam como abaixo, o serviço já está desabilitado.

Trying 167.10.18.185...

telnet: connect to address 167.10.18.185: Connection refused

 

 

Utilizando o comentário para desabilitar o serviço

O arquivo /etc/xinetd.d/daytime listado na seqüência, está com o serviço habitado.

 

# default: off

# description: A daytime server. This is the tcp \

# version.

service daytime

{

type = INTERNAL

id= daytime-stream

socket_type= stream

protocol= tcp

user= root

wait = no

}

 

Para desabilitar, basta colocar um # na linha do service, como indicado abaixo:

 

# default: off

# description: A daytime server. This is the tcp \

# version.

#service daytime

{

type = INTERNAL

id = daytime-stream

socket_type = stream

protocol = tcp

user = root

wait = no

disable = no

}

 

Utilizando o disable para desabilitar o serviço

Outra forma de desabilitar o serviço é através da opção disable.

No arquivo abaixo o serviço está habilitado:

# default: off

# description: A daytime server. This is the tcp \

# version.

service daytime

{

type = INTERNAL

id = daytime-stream

socket_type = stream

protocol = tcp

user = root

wait = no

disable = no

}

 

Para desabilitar, inclua uma linha com a opção disable = yes:

# default: off

# description: A daytime server. This is the tcp \

# version.

service daytime

{

type = INTERNAL

id = daytime-stream

socket_type = stream

protocol = tcp

user = root

wait = no

disable = yes

}

 

 

Testando as alterações

Após as mudanças, no arquivo, devemos re-iniciar o daemon xinetd para que as novas configurações tenham efeito.


Restart do servidor:

# service xinetd restart


# /etc/rc.d/init.d/xinetd restart


Deverá surgir a seguinte informação dizendo que o servidor está sendo paralisado e re-iniciado.


Stopping xinetd: [ OK ]

Starting xinetd: [ OK ]


Para testar, utilize o comando telnet informando o IP e a porta.

# telnet 167.10.18.185 13


Bloqueando serviços autônomos

Para desativar portas cujos serviços correspondentes não estão incluídos no arquivo /etc/xinet.d, você deverá matar o processo do serviço e, em seguida, garantir que o serviço não será reiniciado automaticamente junto com a máquina. Tais serviços são chamados de serviços autônomos.


Por exemplo, a porta 111 é atribuída ao serviço autônomo portmapper não necessário para a maioria dos servidores de e-mail. Para desativar este serviço, você faria:


1. Descobrir o número de identificação do processo (PID)

# ps aux | grep portmap


2. Matar o processo

# kill -9 <número do PID>


3. Garantir que o serviço não será reiniciado em um novo boot


3.1 - Red Hat Linux 8.0

Digite o comando:

# ntsysv

 

Navegue pela tela e desmarque o serviço.

 

 

3.2 - Suse Linux 8.0

Digite o comando:

# yast2

 

Irá surgir a tela abaixo:

 

Marque a opção "Sistema" e vá até o item "Editor de Runlevel"

Irá surgir a tela abaixo:

Navegue pela tela e desmarque o serviço.

 

Observações

Algumas portas, como a 80, não são ativadas a menos que o serviço esteja instalado. Por exemplo, se você não tiver instalado o servidor Apache, a porta 80 não será usada. Não há necessidade de bloquear a porta porque ela já está desativada.