Controlando acesso aos serviços com o Xinetd
postado por nightnux - comentários
0
Criaturas do Submundo Linux
Quando você aprende sobre controle de acessos em um sistema Linux, certamente você encontrará uma "criatura", o "superdaemon". Um superdaemon é um daemon que controla outros daemons, daemons são tipicamente programas que controlam serviços de network, que rodam a longo prazo nos bastidores do sistema à espera para entrar em ação.
No reino do Linux "o superdaemon" se refere tipicamente ao INETD, o qual manipula as solicitações de um grande número de daemons mesmo que eles não estejam sendo usados com frequência para justificar suas execuções em segundo plano durante todo o tempo. O problema com o INETD é que este superdaemon não da muita importância ao ítem segurança. Ele permite que você desabilite vários serviços, se você não quiser usá-los, mas não há um controle refinado disponível.
Verifique xinetd (http://www.xinetd.org). Este programa xinetd é o substituto "seguro" para o inetd, sendo que ele oferece mais recursos permitindo a você controlar quem poderá acessar algum tipo de serviço e de onde poderá acessar. Eu sempre tenho o Titanic na cabeça quando falo sobre segurança e proteção, quero dizer que nada é completamente seguro, portanto qualquer nível de controle de acesso nativo no superdaemon, certamente ajudará na proteção do nosso sistema.
Algumas distribuições (Mandrake e Red Hat) já possuem o xinetd instalado e habilitado por default. A sua pode incluir o xnietd mas não por default, ou você pode baixar a ferramenta do site.
XINETD x INETD Um Resumo
Vamos dar uma olhada nas reais diferenças entre o inetd e o xinetd anter de entrarmos no uso do xinetd. Qualquer um que afinidade com o superdaemon inetd está familiarizado com os seus arquivos de configurações, inetd.conf. Este arquivo contem uma lista de todos os serviços que o daemon controla, com os ítens comentados e que podem ser controlados se você desejar ativar estes serviços.
Você pode controlar estes serviços usando recursos adicionais do próprio Linux, tais como host.allow, host.deny, filtrar o tráfico, e assim por diante.
xinetd possui uma coleção de arquivos configuráveis. O arquivo base é o xinetd.conf, que permite uma configuração geral. Junto com o arquivo principal de configuração está o subdiretório xinetd.d, cujo conteúdo é uma série de arquivos individuais pertencentes a várias aplicações. Cada um destes arquivos é carregado pelo xinetd.conf quando xinetd carrega os dados da sua configuração para a memória.
Dentro de cada arquivo de configuração do xinetd você tem uma extensa variação de escolhas para controlar de onde as pessoas poderão ter acesso a um serviço, quais contas locais eles poderão usar para acessar o serviço, quais contas remotas poderão usar e muito mais.
INSTALADO O XINETD
Uma vez que muitas ditros não possuem o xinetd já instalado por default, vamos partir para o processo de instalação via internet através do site do xinetd.
Aponte seu browser para o site do xinetd http://www.xinetd.org - e baixe o arquivo fonte. Para compilar e instalar o programa faça o seguinte:
1 - Descompacte o arquivo digitando tar xzvf xinetd-versão. Se o arquivo estiver acompanhado com um .tar extra no final, você deve renomear o arquivo para que ele termine em .tar.gz, não .tar.gz.tar.
2 - Mude para o diretório criado durante este processo.
3 - Digite ./configure para executar a rotina de autoconfiguração. Se for necessário instalar qualquer outro pacote faça-o e retorne ao passo 3.
4 - Digite make para compilar o programa. A velocidade da sua máquina , sua quantidade de RAM são fatores que vão determinar o tempo de que este processo levará. No meu PIII 450 levou menos que cinco minutos.
5- Digite make install para colocar o pacote e seus arquivos no lugar. Este processo termina rapidamente.
6 - Se você quiser basear a configuração do seu xinetd na configração corrente do seu inetd, certifique-se de ter Perl intalado e digite o seguinte como sugerido pela equipe do xinetd:
xinetd/xconv.pl < /etc/inetd.conf > /tmp/xinetd.conf
Este é o primeiro estágio. Note que o seu novo arquivo de configuração foi copiado para /tmp. Não tente usar o arquivo default. Ele provavelmente não funcionaria.
ENTENDENDO OS ARQUIVOS DE CONFIGURAÇÃO DO XINETD
O programa xinetd possui duas grandes configurações. Primeiro existe a configuração default, que está no arquivo /etc/xinetd.confthough a sua distro pode ter colocado este arquivo em um local diferente. Então existe um grupo de arquivos normalmente no diretório /etc/xinetd.d onde cada um corresponde a um serviço diferente.
Uma configuração default para o xinetd.conf se parece com:
# Simple configuration file for xinetd
defaults { only_from = localhost instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30 }
includedir /etc/xinetd.d
Se você só tinha visto até agora uma configuração do inetd, é evidente a diferença que existe na cofiguração do xinetd. O conteúdo do xinetd.conf representa a sua configuração global defaultsthough você pode fazer configurações individuais aqui sem problemas. Os procedimentos default representam o global e o seu conteúdo está assinalado pelos colchetes. Vamos dar uma olhada nas opções.
only_from - Restringe o acesso a um serviço somente para máquinas externas especificadas.
instances - Restringe quantos acessos simultâneos para este serviço serão aceitos.
log_type - Cofigura regras de login para este serviço particular. As opções aqui são SYSLOG e FILE. SYSLOG informando ao xinetd para utilizar syslog, o daemon do sistema de log Linux "standard" e o termo que o segue informa ao syslogd qual facilidade e nível utilizar (ver man syslog).
log_on_success - Define regras de login para uma inicialização bem sucedida do servidor. Os valores permitidos são: DURATION, EXIT, HOST, PID, e USERID.
log_on_failure - Define regras de login quando uma solicitação do servidor não pode inicializar devido a algum bug ou a solicitação não está em conformidade com as regras definidas. Os valores permitidos são: ATTEMPT, HOST e USERID.
cps - Restringe a quantidade das conexões que chegam e com as quais o xinetd deverá se preucupar. O primeiro argumento diz respeito a quantas solicitações por segundo o servidor poderá suportar antes dele desabilitar completamente o serviço solicitado. O segundo argumento informa ao xinetd quantos segundos esperar antes de abrir a porta novamente.
A última linha (includedir /etc/xinetd.d) informa que o seu xinetd está configurado no diretório /etc/xinetd.d.
Vou especificar apenas um exemplo, você pode obter mais informações sobre qualquer opção no xinetd.conf man.
Vamos usar o arquivo de configuração vsftpd xinetd:
# default: off # description: The vsftpd FTP server serves FTP connections. It uses \ # normal, unencrypted usernames and passwords for authentication. service ftp { disable = no socket_type = stream wait = no user = root server = /usr/sbin/vsftpd nice = 10 }
Note que este arquivo, como todos os seus primos em /etc/xinetd.conf começa com uma linha no formato service . representando um dos ítens em /etc/services ou um dos arquivos mostrados neste tutorial, e se refere ao funcionamento básico fornecido por está ferramenta em particular. No caso do vsftpd não é difícil advinhar que é um serviço ftp.
Dentro das chaves estão as opções para este serviço erspecífico. Aqui eu só vou definir o que está configuração particular siginifica.
- A porta está aberta e o serviço está disponível - FTP está usando o TCP assim ele pode assegurar que todos os dados chegaram, no formato streaming socket. - Streaming sockets normalmente são configurados para não esperar. - Este servidor de FTP está rodando como root. - Este servidor de FTP está localizado em /usr/bin/vsftpd. - Este comando roda de acordo com seu nível de prioridade.
==============================================
CONFIGURANDO xinetd.conf E OS ARQUIVOS DO xinetd.d
Para configurar o seu superdaemon, você deve ser mais exigente em relação as configurações default. A primeira coisa a fazer é determinar quais serviços que você quer configurar, porque o que o serviço representa e executa vai dizer a você quais instruções você deve incluir e quais instruções não irão funcionar totalmente.
Uma vez que você tenha uma lista do que você quer configurar, decida se você deseja alterar o xinetd.conf, ou criar um arquivo separado no diretório xinetd.d. Eu recomendo que se a configuração não for global, usar um arquivo separado. Isto mantem as coisas mais claras.
Agora você tem que escolher o que você deseja configurar para este serviço. Existe quarenta e quatro parâmetros disponíveis, mas somente dois devem ser configurados para qualquer serviço. Estes dois são:
- socket_type: Esta entrada é determinada quando o protocólo usado é o TCP (socket tipo stream) ou UDP (socket tipo "dgram").
- wait: Esta entrada é também determinada quando você está usando TCP (not) ou UDP (yes).
Os outros parâmetros requeridos vão depender do tipo de serviço que você está configurando. Para os serviços que o xinetd não controla para você, tais como FTP e solicitações web, você deverá ter:
- server: O caminho para o programa que o xinetd necessita para iniciar. - server_args: Só é requerido se você precisa passar flags, opções, ou valores ao servidor na sua inicializaçõa. - user: O usuário deste programa frequentemente deve executar este programa como root.
Outra dupla de serviços são os serviços RCP, e serviços não incluídos na lista. Um serviço RCP (Remote Procedure Call) é uma bibliotéca progromada em C que suporta arquitetura cliente/servidor, permitindo uma máquina enviar comandos para uma outra máquina, a qual executa o comando e retorna o resultado. Um serviço que não está na lista é um que não está incluído no etc/services ou no arquivo etc/rpcthe cujo conteúdo é a lista de todos os serviços RCP.
Em relação aos serviços RCP e aos não listados, os procedimentos requeridos que restão são:
- port: A porta para aceitar as comunicações deste serviço. Somente requerido para os serviços não listados que não usam RCP.
- protocol: O protocolo em etc/protocols requerido por este serviço. Necessário para os serviços não listados e RCP.
- rcp_number: O número em /etc/rcp para este serviço. Necessário para os serviços não listados e RCP.
- rcp_version: O número da versão do RCP requerido por este serviço, ou um número singular ou um número separado por hífens. Somente requerido para os serviços RCP.
A partie de agora tudo é opcional. Vamos mostrar os ítens mais usados.
- banner_fail: Uma mensagem mostrada ao usuário que tenta acessar o serviço mas não tem permissão.
banner_success: Uma mensagem de sucesso mostrada ao usuário ao tentar acessar o serviço.
- bind: Acesso a este serviço somente através de um dispoditivo de rede particular .
- cps: Controla as conexões fazendo o xinetd suspender o serviço temporarimanete.
- disable: Cofigurar para "sim" ("yes") se você quer que o xinetd prenda o telefone quando alguem tentar acessar o serviço, caso contrário configure como "não" ("no"). É comum as distribuições que utilizam o xinetd instalarem programas como servidores FTP com o disable = no, assim eles não estarão disponíveis até que você tenha feito uma completa configuração do servidor para habilitá-lo.
- env: Certifica-se que as variáveis de ambiente especificadas estão no ambiente do serviço.
- group: O grupo em que este programa deverá ser executado.
- instances: O número de acessos simultâneos que o xinetd deve permitir para este serviço. UNLIMITED é o padrão.
- log_on_success: Qual informação do log quando o serviço inicializa e quando ele para.
- log_on _failure: Qual informação do log quando o serviço não é capaz de inicializar devido algum um erro ou alguém tentando o acesso sem a devida permissão.
- log_type: Ou o uso do daemon syslog ou um arquivo de log.
- max_load: O controle de um minuto fazendo com que o xinetd recuse as conexões para este serviço.
- nice: A prioridade que o serviço deve ter assumindo os ciclos da CPU. Veja a página do manual do nice para dettalhes.
- no_access: Proibe o acesso de uma localização específica para este serviço. Usa o mesmo formato do only_form.
- only_form: Quais computadores fora deste serviço têm permissão para acesso.
- per_source: Limita quantas vezes alguém pode acessar este serviço do mesmo lugar ao mesmo tempo.
- redirect: Quando alguém tenta acessar este serviço, redireciona a solicitação para uma outra localização.
A maioria destas entradas são usadas no seguinte formato:
statement = item1 item2 ...
Assim, uma vez que você saiba qual serviço deseja configurar, onde você quer configurá-lo (qual arquivo), e quais partes quer configurar, você cria uma entrada que se parece como esta, mesmo você fazendo isto no arquivo principal ou em um dos arquivos em separado.
servicename
statement1 = item1 item2 ... statement2 = item1 item2 ... ... }
Terminada as mudanças através das configurações, não esqueça de reinicializar o xinetd, assim ele poderá carregar as novas configurações. É uma boa idéia usar o controle de scripts se a sua distro possui este suporte. Por exemplo, no Red Hat você poderia digitar:
/etc/rc.d/init.d/xinetd restart
enviado por autor: Omar P.Stefani - www.linuxnarede.com.br
Sites of interest: http://www.faqs.org/rfcs/ http://www.networksorcery.com/enp/topic/ipsuite.htm Dee-Ann LeBlanc has written over 10 computer books, over sixty articles, taught classes, and more, mostly involving the Linux operating system and its programs. You can follow her work and share your input through her new mailing list at http://www.dee-annleblanc.com/mailman/listinfo/general, or find out more in general at http://www.Dee-AnnLeBlanc.com/.
|