27
Camada de Aplicação A camada de Aplicação contém todos os protocolos de nível mais alto do modelo TCP/IP . Alguns dos protocolos de aplicação são: DNS (Domain Name System): Usado para identificar máquinas através de nomes em vez de endereços IP; Telnet: Protocolo de terminal virtual, usado para controlar remotamente uma máquina; FTP (File Transfer Protocol): Usado na transferência de arquivos pela rede; HTTP (Hyper Text Transfer Protocol): Usado na transferência de documentos hipermídia. Os serviços (aplicações) de rede são iniciados de duas maneiras: Pomo programas independentes que permanecem na memória o tempo todo. Por demanda, isto é, conforme são necessários (ocupando espaço na memória somente quanto estão sendo utilizados). 1

Redes prática - Inetd

Embed Size (px)

DESCRIPTION

Slides de suporte da aula de Redes de Computadores - Continuar pesquisas nas bibliografias: HUNT, Craig. Linux Servidores de rede. Editora Ciência Moderna. Rio de Janeiro. 2004.TANENBAUM, Andrew S. Redes de Computadores. Editora Campus, 4 Edição. 2003.COMER, Douglas E. Interligação de Redes com TCP/IP, volume 1. Editora Campus, 5 Edição. 2006.

Citation preview

Page 1: Redes prática - Inetd

Camada de Aplicação

A camada de Aplicação contém todos os protocolos de nível mais alto do modelo TCP/IP .

Alguns dos protocolos de aplicação são:

DNS (Domain Name System): Usado para identificar máquinas através de nomes em vez de endereços IP;Telnet: Protocolo de terminal virtual, usado para controlar remotamente uma máquina;FTP (File Transfer Protocol): Usado na transferência de arquivos pela rede;HTTP (Hyper Text Transfer Protocol): Usado na transferência de documentos hipermídia.

Os serviços (aplicações) de rede são iniciados de duas maneiras:

●Pomo programas independentes que permanecem na memória o tempo todo. ●Por demanda, isto é, conforme são necessários (ocupando espaço na memória somente quanto estão sendo utilizados).

1

Page 2: Redes prática - Inetd

inetd - O Super-Servidor de Internet

Serviços de redes são executados por programas denominados servidores de rede, um programa servidor de rede é chamado em inglês de daemon.

Servidores de rede são programas que abrem portas de rede (referente ao modelo TCP/IP) e tais portas ficam aguardando por solicitações de clientes.

Quando uma solicitação de cliente é recebida, o servidor de rede cria um processo filho, o qual trata aquela conexão específica, enquanto o processo pai continua à escutar na porta, aguardando novas solicitações de clientes da rede.

É claro que um serviço de rede consome recursos do computador onde está sendo executado, tal como memória, espaço de processamento, recursos de rede, etc.

2

Page 3: Redes prática - Inetd

Porém, praticamente todo sistema Like-UNIX executa uma espécie de Super-servidor, que pode ser visto como um servidor de servidores.

O Super-servidor é capaz de criar conectores para uma série de serviços de rede e ouvir todas as portas de rede simultaneamente e quando uma máquina remota solicita algum de seus serviços, o Super- servidor percebe o fato e aciona o servidor específico da porta envolvida.

Por exemplo, imagine que você tenha uma máquina servindo de Firewall/Roteador e está é uma máquina que não possui monitor, teclado e mouse (já que um Firewall não deve ser utilizado diretamente). Assim, você provavelmente irá precisar de um serviço como Telnet para gerenciar a máquina remotamente, mas você não quer que o Telnet ocupe recursos do computador enquanto o Telnet não está sendo utilizado, você então irá utilizar o inetd (Super-Servidor de Internet). O inetd irá ficar responsável por abrir a porta de rede referente ao Telnet e ficar monitorando pedidos a este serviço, tão logo alguém solicite o Telnet o inetd irá carregar o Telnet na memória, o usuário remoto irá usar o Telnet normalmente a conexão for finalizada o inetd irá retirar o serviço da memória e continua a “ouvir” a porta.

3

Page 4: Redes prática - Inetd

Portanto, o Super-servidor conhecido por inetd (Internet Daemon) é um servidor de servidores que é utilizado dentro outros, para poupar recursos da máquina servidora, centralizar a ativação de serviços, etc.

O inetd é normalmente inicializado quando o sistema é inicializado. O inetd recebe uma lista de serviços a serem monitorados a partir de um arquivo de configuração denominado /etc/inetd.conf.

O arquivo /etc/inetd.conf é um arquivo texto e contém como informação como e quais são os serviços de rede fornecidos pelo inetd.Uma linha típica do arquivo /etc/inetd.conf é composta pelos seguintes campos:

<serviço> <tipo> <protocolo> <espera> <usuário> <servidor> <linha_de_comando>

finger stream tcp nowait nobody /usr/libexec/fingerd fingerd -s

O significado de cada campo do /etc/inetd.conf é o seguinte:

Serviço ou Name - Este campo é o nome do serviço a ser disponibilizado. Os nomes do serviço podem ser vistos no arquivo /etc/services. Este nome mapeia o número de porta ao serviço.

4

Page 5: Redes prática - Inetd

Tipo ou Type - Este é o tipo de soquete (socket-type) oferecido ao serviço para a entrega de dados. Os dois tipos de soquetes para entrega de dados mais utilizados são: dgram para o serviço de datagramas (sem conexão) e stream para o serviço de fluxo de dados orientado a conexão.

Protocolo ou Protocol - É o nome do protocolo usado pelo serviço, é definido no arquivo /etc/protocols. O nome mapeia um número de protocolo. São na maioria tcp e udp.

Espera ou Wait-status - indica se o daemon invocado pelo inetd é capaz de lidar com seu próprio socket ou não. Sockets do tipo dgramprecisam usar a opção wait, enquanto daemons de sockets tipo stream, os quais geralmente são multi-threaded, devem usar a opção nowait. O tipo wait geralmente repassa múltiplos sockets para um único daemon, enquanto nowait dispara um daemon filho para cada novo socket.

5

Page 6: Redes prática - Inetd

O número máximo de daemons filho (de conexões abertas para um serviço de rede) que o inetd pode disparar pode ser ajustado usando a opção usando-se uma barra (/) após as opções nowait. Se um limite de dez instâncias de um daemon em particular é necessária, um /10 deve ser colocado após a opção nowait.

Outra opção pode ser ativada para limitar o número máximo de conexões a partir de um único lugar (host) para um daemon em particular. Assim, um valor de dez nesta opção limitaria qualquer endereço IP a se conectar a determinado serviço a dez tentativas por minuto. Isto é útil para evitar consumo de recursos intencional ou não e ataques de Negação de Serviço (Denial of service - DoS) para a máquina.

Neste campo, wait ou o máximo de filhos e máximo conexões por host são opcionais.

Estas opções são todas utilizadas pela configuração padrão do daemon fingerd, como visto aqui:

finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s

6

Page 7: Redes prática - Inetd

Usuário ou UID - Nome de usuário sob o qual o serviço é executado. Normalmente este é root, mas por razoes de segurança, alguns processos executam sob o ID do usuário nobody.

Servidor ou Server - Caminho do programa de servidor a ser executado. As entradas compartilham o mesmo caminho /usr/sbin/tcp, mas este realmente não é o caminho para o servidor ftp, telnet ou qualquer outro servidor. Na realidade, o tcpd é um recurso de segurança usado pelo Linux, sendo que o tcpd chamado de TCP Wrapper (invólucro de TCP), é usado para prover segurança veremos mais este serviço posteriormente.

Linha de comando ou Arguments - São argumentos de linha de comando que são passados ao programa de servidor. O primeiro argumento sempre é o nome do programa de servidor executado. A lista de argumentos parece exatamente com o comando se estivesse sendo digitado em um prompt shell.

Atenção, dentro do arquivo /etc/inetd.conf (tal como, a maioria dos arquivos de configuração do Linux), tudo que preceder um # é um comentário e será ignorado pelo script de inicialização do indetd

7

Page 8: Redes prática - Inetd

Exemplo do arquivo /etc/inetd.conf:

# daytime stream tcp nowait root internal# daytime dgram udp wait root internaltime stream tcp nowait root internaltime dgram udp wait root internal# These are standard services:# Very Secure File Transfer Protocol (FTP) server.#ftp stream tcp nowait root /usr/sbin/tcpd vsftpd# Professional File Transfer Protocol (FTP) server.

ftp stream tcp nowait root /usr/sbin/tcpd proftpd# Telnet server:telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

# The comsat daemon notifies the user of new mail when biff is set to y:comsat dgram udp wait root /usr/sbin/tcpd in.comsat# Shell, login, exec and talk are BSD protocols#shell stream tcp nowait root /usr/sbin/tcpd in.rshd -L#login stream tcp nowait root /usr/sbin/tcpd in.rlogind# exec stream tcp nowait root /usr/sbin/tcpd in.rexecd# talk dgram udp wait root /usr/sbin/tcpd in.talkd#ntalk dgram udp wait root /usr/sbin/tcpd in.talkd

8

Page 9: Redes prática - Inetd

Habilitando ou Desabilitando um serviço no inetd

Para habilitar um serviço de rede pelo inetd, basta editar o arquivo /etc/inetd.conf e descomentar (retirar o #) da linha referente ao serviço desejado, ou ainda, caso a linha não exista acrescentar uma linha passando os parâmetros para iniciar o serviço via inetd.

Por exemplo, caso queira-se iniciar o Telnet com o Super-servidor inetd, basta procurar a seguinte linha do Telnet no arquivo /etc/inetd.conf e descomenta-la, tal como:

Antes de editar:# Telnet server:

#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

Depois de editar:# Telnet server:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

9

Page 10: Redes prática - Inetd

Habilitando ou Desabilitando um serviço no inetd

Após, descomentar ou acrescentar o serviço desejado faz se necessário reiniciar o servidor inetd, isto é possível através da execução do script de inicialização /etc/rc.d/rc.inedt. O diretório /etc/rc.d/ contém a grande maioria dos scripts de inicialização de serviços da rede.

Assim, para re-iniciar o inetd execute:

#/etc/rc.d/rc.inedt restart

ou

#/etc/rc.d/rc.inedt stop

#/etc/rc.d/rc.inedt start

Tão logo o servidor seja reiniciado o serviço estará pronto para ser utilizado. Lembre-se sempre que você alterar o arquivo/etc/inetd.conf é obrigatório que o servidor seja reiniciado para a alteração ser valida, caso contrário, a alteração será válida somente quando o sistema for reinicializado.

10

Page 11: Redes prática - Inetd

Habilitando ou Desabilitando um serviço no inetd

Para desabilitar um serviço de rede pelo inetd, basta editar o arquivo /etc/inetd.conf e comentar (adicionar no inicio da linha um #) na linha referente ao serviço, não recomenda-se a exclusão da linha, pois quando for necessário ativar o serviço o usuário terá que refazer a linha novamente, o que pode ser muito trabalhosol

Por exemplo, caso queira-se desativar o Telnet com o Super-servidor inetd, basta procurar a linha do Telnet no arquivo /etc/inetd.conf e comenta-la, tal como:

Antes de editar:# Telnet server:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

Depois de editar:# Telnet server:

# telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

Reinicie o servidor após a alteração, para que o processo torne-se válido.

11

Page 12: Redes prática - Inetd

Servidores de rede independentes

Executar um servidor via Super-servidores é uma forma de se iniciar um serviço de rede, porém outro tipo muito utilizado é executar o programa de forma independente (não via inetd ou xinetd).

Serviços de rede que são iniciados de forma independente ocupam recursos da máquina estando o serviço sendo usados ou não, o que é o contrário dos serviços executados pelo inetd e xinetd.

Cada técnica de inicialização de serviços de rede tem suas próprias vantagens e desvantagens:

• No caso do Super-servidor os serviços só serão carregados na memória quando o serviço estiver sendo realmente utilizado, isto poupa recursos da máquina, entretanto um serviço executado pelo inetd provavelmente terá um tempo de resposta mais lento do que serviços executados independentes, pois o processo não estar na memória e terá de ser carregado para à memória para sua execução;

• Já um serviço de rede executado de forma independente tem um tempo de resposta mais rápida aos pedidos de conexões de rede, pois estes serviços já estão na memória e prontos para uso, porém caso não estejam sendo utilizados estes serviços continuarão na memória ocupando um espaço de memória que poderia ser útil para outras tarefas.

12

Page 13: Redes prática - Inetd

Iniciando um servidor FTP de forma independente (standalone)

Quando um serviço é muito requisitado, talvez não seja uma boa escolha iniciá-lo com o Super-servidor, mas sim de forma independente (em inglês, standalone).

Pois, iniciando um serviço em standalone o serviço estará sempre pronto para responder os pedidos dos usuários.

O Very Secure FTP Daemon ou simplemente vsftpd, é um bom servidor de FTP e funciona tanto em modo Super-servidor quanto standalone.

Para a configuração do vsftpd, é necessário editar o arquivo /etc/vsftpd.conf. Para colocar o vsftpd de forma que este funcione em standalone, é necessário apenas descomentar (retirar o #) da seguinte linha: listen=YES.

13

Page 14: Redes prática - Inetd

Iniciando um servidor FTP de forma independente (standalone)

Para que o vsftpd funcione em standalone o este serviço não pode estar sendo executado com o inetd ou xinetd.

Após, editar o arquivo /etc/vsftpd.conf e colocá-lo em standalone, faz-se necessário iniciar o servidor chamando o comando vsftpd.

Iniciando em standalone, é possível executar o comando ps -ax e verificar que vsftpd está direto na memória.

Para desligar o servidor FTP agora é necessário “matar” o processo vsftpd. Isso pode ser feito com o comando killall vsftpd.

14

Page 15: Redes prática - Inetd

A funcionalidade do tcpd para Controle de Acesso

Habilita um computador para acesso pela rede envolve muitos riscos de segurança.

Uma ferramenta útil nestes casos é o servidor tcpd, que é um servidor de observação. Para os serviços TCP que se deseje monitorar ou protegendo, o tcpd poderá ser acionado ao invés do programa servidor.

O programa tcpd registra todas as requisições através do servidor de mensagens do sistema denominado syslog, verificando se a máquina remota tem permissão ou não de usar o serviço solicitado por ela e somente se a resposta for positiva executará o real servidor do serviço.

15

Page 16: Redes prática - Inetd

Cabe ressaltar que a funcionalidade do tcpd não está disponível para serviços baseados em UDP, já que estes não possuem um controle adequado para isto.

Um exemplo de um servidor executado via tcpd, no arquivo /etc/inetd.conf:

#servidor observado pelo tcpd

finger stream tcp nowait root /usr/sbin/tcpd in.fingerd

Sem a adição de qualquer controle de acesso, o cliente não perceberá qualquer diferença de um serviço finger usual e um servidor fingerutilizando tcpd, exceto pelo fato de que todas as requisições serão registradas pelo syslog.

O controle de acesso é implementado através de dois arquivos denominados /etc/hosts.allow e /etc/hosts.deny.

16

Page 17: Redes prática - Inetd

Números de porta e protocolo

Dados viajam por uma rede TCP/IP em pacotes chamados datagramas.

Cada datagrama é endereçado individualmente com o seguinte formato:

➢Endereço IP do host de origem e destino, para o qual deve ser entregue;

➢Número de protocolo do protocolo de transporte que deve controlar o pacote depois de serem entregues ao host;

➢E número de porta do serviço ao qual os dados no pacote são destinados.

No Linux os protocolos e os números de portas podem ser predefinidos em dois arquivos, /etc/protocols para os protocolos e /etc/servicespara o número de portas.

17

Page 18: Redes prática - Inetd

Protocolos no arquivo /etc/protocolsip 0 IP # internet protocol, pseudo protocol number#hopopt 0 HOPOPT # hop-by-hop options for ipv6icmp 1 ICMP # internet control message protocoligmp 2 IGMP # internet group management protocolggp 3 GGP # gateway-gateway protocolipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP'')st2 5 ST2 # ST2 datagram mode (RFC 1819)tcp 6 TCP # transmission control protocolcbt 7 CBT # CBT, Tony Ballardie <[email protected]>egp 8 EGP # exterior gateway protocoligp 9 IGP # any private interior gateway (Cisco: for IGRP)bbn-rcc 10 BBN-RCC-MON # BBN RCC Monitoringnvp 11 NVP-II # Network Voice Protocolpup 12 PUP # PARC universal packet protocolargus 13 ARGUS # ARGUSemcon 14 EMCON # EMCONxnet 15 XNET # Cross Net Debuggerchaos 16 CHAOS # Chaosudp 17 UDP # user datagram protocol

18

Page 19: Redes prática - Inetd

O arquivo /etc/protocols

O arquivo /etc/protocols identifica o número de cada protocolo. De forma que, o protocolos possam se comunicar.

Apesar do tamanho do arquivo, só duas entradas são realmente significantes, que são as entradas tcp e udp.

A tcp, define o número de protocolo para o protocolo de transporte TCP, e seu número de identificação é o 6.

O udp, define o número de protocolo para o protocolo de transmissão UDP como 17.

As inúmeros outras entradas neste arquivo definem números de protocolos de roteamento e protocolos experimentais que não são usados com freqüência.

19

Page 20: Redes prática - Inetd

O arquivo /etc/services de mapeamento de serviços:

echo 7/tcpecho 7/udpdaytime 13/tcpdaytime 13/udpqotd 17/tcp quote #Quote of the Dayqotd 17/udp quote #Quote of the Daymsp 18/tcp #Message Send Protocolmsp 18/udp #Message Send Protocolchargen 19/tcp ttytst source #Character Generatorchargen 19/udp ttytst source #Character Generatorftp-data 20/tcp #File Transfer [Default Data]ftp-data 20/udp #File Transfer [Default Data]ftp 21/tcp #File Transfer [Control]ftp 21/udp #File Transfer [Control]ssh 22/tcp #Secure Shell Loginssh 22/udp #Secure Shell Logintelnet 23/tcptelnet 23/udp# 24/tcp any private mail system# 24/udp any private mail systemsmtp 25/tcp mail #Simple Mail Transfersmtp 25/udp mail #Simple Mail Transfer

20

Page 21: Redes prática - Inetd

O arquivo /etc/services

O arquivo /etc/services identifica o número de porta de rede padrão para que a camada de transporte possa entregar seus dados a camada de aplicação.

Os números de porta para serviços bem conhecidos são padrões na Internet, assim você não deve mudar o número de porta de um serviço existente.

Existem inúmeros serviços de rede, para citar apenas duas, o telnetusa a porta 23 e executa sobre o protocolo de transporte TCP. O DNS, usa a porta 53 e TCP e UDP.

Existe um número de porta para o UDP assim como existe um mesmo número de porta para o TCP.

O inetd e o xinetd podem monitorar qualquer porta listada no arquivo /etc/services. Qual protocolo e números de portas são monitorados por estes daemons está definido no arquivo /etc/inetd.conf para inetd ou no arquivo /etc/xinetd.conf para xinetd. Estes arquivos, por sua vez definem quais serviços são inicializados por estes daemons.

21

Page 22: Redes prática - Inetd

O xinetd

Uma alternativa ao inetd é o Extended Internet Services Daemon (xinetd). O xinetd é configurado no arquivo /etc/xinetd.conf.

O arquivo xinetd.conf define valores padrões para cinco atributos diferentes:

instances – Especifica o número máximo de daemons (serviços) que podem estar sendo executados simultaneamente, para qualquer tipo de serviço. Se este número for 2 significara que não mais de dois serviços telnetd serão executados simultaneamente. O valor pode ser definido como ilimitado através de UNLIMITED.

log_type – Define onde as mensagens de log serão registradas. FILE teste, informa para registrar a atividade no arquivo /var/log/teste. Já com a configuração em SYSLOG informa para informar na saída padrão /var/log/messagen.

log_on_success – Define a informação que deve ser registrada quando uma conexão bem –sucedida é feita a um serviço xinetd. Neste caso estamos registrando o endereço da máquina (HOTS) e o número de processo associado a este (PID).

log_on_failure – Define a informação que é registrada quando uma tentativa para conectar a um serviço for malsucedida.

22

Page 23: Redes prática - Inetd

Configurando o xinetd

Cps – ajusta os limites de conexão, por segundo, de cada serviço. O primeiro valor é o valor para o número de conexões aceitas em um único segundo. O segundo valor indica quantos segundos deve-se esperar antes de vazer qualquer conexão nova, caso o primeiro valor for excedido. O cps impede que um serviço possa monopolizar os recursos, é muito útil em ataques de negação de serviço.

A opção includedir, indica o diretório que contem os arquivos de configuração de cada serviço, ter arquivos separados para cada serviço melhora o gerenciamento dos serviços.

Os arquivos contidos em /etc/xinetd.d representam todos os serviço que podem ser iniciados através de xinetd neste sistema.

Outros serviços de rede estão disponíveis neste servidor por que são iniciados através de scripts de inicialização, mas o xinetd só pode começar um serviço para o qual tenha um arquivo de configuração.

O nome de cada arquivo normalmente representa claramente o nome do serviço exemplo telnetd para o serviço TELNET.

23

Page 24: Redes prática - Inetd

Configurando o xinetd

# Some defaults, and include /etc/xinetd.d/

defaults

{

instances = 25

per_source = 10

log_type = SYSLOG authpriv

log_on_success = HOST PID USERID

log_on_failure = HOST USERID

}

includedir /etc/xinetd.d

24

Page 25: Redes prática - Inetd

Configurando o Telnet com o xinetd

Service é o nome oficial do serviço do arquivo /etc/services

socket_type - especifica o tipo de socket usado para este serviço, normalmente dgram para UDP e stream para TCP.

wait – informa ao xinetd se deve esperar pelo serviço para liberar a porá antes de escutar por mais conexões daquele serviço. Yes significa esperar (normalmente para dgram), e no não esperar (para stream).

user – Define o nome do usuário que deverá executar o serviço.

server – Caminho que indica o programa a ser executado em caso de atividade na porta.

server_args - Argumentos passados ao programa.

log_on_success e log_on_failure – funciona da mesma maneira que inetd.

nice – Define o valor nice que xinetd usa quando lança o programa de servidor.

disable – Informa ao xinetd se este serviço foi desabilidado (yes) ou habilitado (no).

25

Page 26: Redes prática - Inetd

Configurando o Telnet com o xinetd

service telnet

{

disable = no // no para ativado e yes para desativado

flags = REUSE

socket_type = stream

protocol = tcp

wait = no

user = root

server = /usr/sbin/in.telnetd

log_on_failure += USERID

}

26

Page 27: Redes prática - Inetd

Configurando o ftpd com o xinetd

service ftp

{

disable = yes

flags = REUSE

socket_type = stream

instances = 50

wait = no

user = root

server = /usr/sbin/proftpd

log_on_success = HOST PID

log_on_failure = HOST

}

27