Ferramentas do usuário

Ferramentas do site


espec:internet_daemon

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
espec:internet_daemon [2008/12/13 06:51]
maziero
espec:internet_daemon [2011/09/06 15:27] (atual)
maziero
Linha 1: Linha 1:
 +====== Inetd - Internet Daemon ======
 +
 +O número de serviços oferecido por um servidor pode ser grande, mas muitos serviços são solicitados de forma esporádica. Se todos os //daemons// responsáveis por serviços fossem lançados automaticamente na inicialização (//boot//), eles ficariam usando memória e CPU desnecessariamente. Para evitar esse problema, muitos serviços ficam a cargo de um processo especial chamado //Internet Daemon//, ou ''​inetd''​.
 +
 +===== Configuração =====
 +
 +Tradicionalmente,​ o arquivo de configuração ''/​etc/​inetd.conf''​ indica quais os serviços sob a responsabilidade do //Internet Daemon//. Esse //daemon// "​ouve"​ as portas dos serviços que gerencia e, no caso de uma chamada, lança o processo servidor necessário para atendê-la. O arquivo de configuração básico do //Internet Daemon// tem a seguinte forma:
 +
 +<​code>​
 +# service type    proto           ​user ​   program to launch
 +
 +ftp       ​stream ​ tcp     ​nowait ​ root    /​usr/​sbin/​in.ftpd -l -a
 +telnet ​   stream ​ tcp     ​nowait ​ root    /​usr/​sbin/​in.telnetd
 +gopher ​   stream ​ tcp     ​nowait ​ root    /​usr/​sbin/​gn
 +shell     ​stream ​ tcp     ​nowait ​ root    /​usr/​sbin/​in.rshd
 +login     ​stream ​ tcp     ​nowait ​ root    /​usr/​sbin/​in.rlogind
 +talk      dgram   ​udp ​    ​wait ​   root    /​usr/​sbin/​in.talkd
 +</​code>​
 +
 +===== TCP-Wrappers =====
 +
 +Um grande problema em relação aos serviços providos à Internet é que qualquer host externo pode acessar um serviço, se este estiver disponível,​ e o controle de acesso ao serviço fica sob a responsabilidade do próprio daemon que responde por ele. Isso põe em risco a segurança do sistema.
 +
 +Para resolver esse problema, o //Internet Daemon// geralmente é usado em conjunto com o sistema chamado //​TCP-Wrappers//,​ permitindo a definição de políticas de acesso de forma integrada para todos os serviços oferecidos através do ''​inetd''​. Quando o ''​inetd''​ está sendo usado com //​TCP-Wrappers//,​ seu arquivo de configuração assume uma forma um pouco diferente:
 +
 +<​code>​
 +#service type    proto           ​user ​   program to launch
 +
 +ftp      stream ​ tcp     ​nowait ​ root    /​usr/​sbin/​tcpd in.ftpd -l -a
 +telnet ​  ​stream ​ tcp     ​nowait ​ root    /​usr/​sbin/​tcpd in.telnetd
 +gopher ​  ​stream ​ tcp     ​nowait ​ root    /​usr/​sbin/​tcpd gn
 +shell    stream ​ tcp     ​nowait ​ root    /​usr/​sbin/​tcpd in.rshd
 +login    stream ​ tcp     ​nowait ​ root    /​usr/​sbin/​tcpd in.rlogind
 +talk     ​dgram ​  ​udp ​    ​wait ​   root    /​usr/​sbin/​tcpd in.talkd
 +</​code>​
 +
 +Como podemos ver, todas as chamadas são interceptadas pelo programa ''​tcpd''​. Este programa verifica as permissões de acesso descritas nos arquivos ''/​etc/​hosts.allow''​ e ''/​etc/​hosts.deny''​ (localizados no mesmo computador que está executando o //daemon// ''​inetd''​),​ para autorizar ou recusar o acesso a cada serviço. A estrutura de um arquivo ''/​etc/​hosts.allow''​ típico é a seguinte:
 +
 +<​code>​
 +# daemons ​   hosts
 +
 +in.fingerd : localhost
 +in.telnetd : ALL
 +in.ftpd ​   : *.pucpr.br
 +</​code>​
 +
 +O procedimento de consulta desses arquivos para cada pedido de conexão é o seguinte:
 +
 +  se o pedido de conexão constar em /​etc/​hosts.allow então
 +    autorizar o acesso
 +  senão
 +    se o pedido de conexão constar em /​etc/​hosts.deny então
 +      negar o acesso
 +    senão
 +      autorizar o acesso
 +    fim se
 +  fim se
 +
 +Esse procedimento de avaliação de regras permite definir dois grandes tipos de políticas:
 +
 +  * **Mostly Open**:
 +    * ''​hosts.allow'':​ fica vazio.
 +    * ''​hosts.deny''​ : contém regras de bloqueio específicas.
 +  * **Mostly Closed**:
 +    * ''​hosts.deny''​ : bloqueia todos os serviços (regra ''​ALL:​ALL''​).
 +    * ''​hosts.allow'':​ contém regras de autorização específicas.
 +
 +As possibilidades de regras de acesso oferecidas pelo sistema //​TCP-Wrappers//​ são muitas. Para maiores detalhes consulte a [[man-host-access|página de manual]].
 +
 +===== XInetd - Extended Internet Daemon =====
 +
 +Versões mais recentes de UNIX substituem o inetd pelo xinetd ([[http://​www.xinetd.org|Extended Internet Daemon]]), que dispensa o uso de //​TCP-Wrappers//​ e traz diversas vantagens:
 +
 +  * Limitação de conexões:
 +    * taxa de conexões recebidas por intervalo de tempo
 +    * número de conexões por host
 +    * número de conexões por serviço
 +  * Controle de acesso mais sofisticado:​
 +    * Feito pelo próprio daemon, dispensando o TCPWrappers
 +    * Por host, IP, domínio ou sub-rede
 +    * por horário
 +  * Controle de logs:
 +    * limitação do tamanho de cada arquivo de log
 +    * Nível de logging de cada serviço pode ser configurado de forma independente
 +  * Desvio de conexões
 +    * Um fluxo TCP pode ser redirecionado para outro host e/ou porta de forma transparente.
 +  * Suporte a IPv6
 +
 +O daemon ''​xinetd''​ usa os arquivos de configuração ''/​etc/​xinetd.conf''​ (configuração geral) e ''/​etc/​xinetd.d/​*''​ (um arquivo para cada serviço). As entradas nos arquivos de configuração possuem o seguinte formato genérico:
 +
 +<​code>​
 +service <​service_name>​
 +{
 +   <​attribute>​ < = | += | -= > <​value>​ <​value>​ ...
 +   ...
 +}
 +</​code>​
 +
 +Um exemplo de entrada para o serviço VNC (conexão remota gráfica) com resolução 800x600 (arquivo ''/​etc/​xinetd.d/​vnc-800''​):​
 +
 +<​code>​
 +service vnc
 +{
 +   ​disable = no
 +   ​socket_type = stream
 +   wait = no
 +   user = nobody
 +   ​server = /​usr/​bin/​Xvnc
 +   ​server_args = -inetd -query localhost -once -geometry 800x600 -depth 16
 +   nice = 5
 +}
 +</​code>​
 +
 +Os principais atributos gerais associados a cada serviço são (uma lista completa está disponível na [[man-xinetd.conf|página de manual]]):
 +
 +^ parâmetro ^ exemplo ^ Significado ^
 +| ''​disable''​ | ''​no''​ | habilita o serviço |
 +| | ''​yes''​ | desabilita o serviço |
 +| ''​socket_type''​ | ''​stream''​ | socket TCP |
 +| | ''​dgram''​ | socket UDP |
 +| | ''​raw''​ | socket IP (baixo nível) |
 +| ''​wait''​ | ''​yes''​ | espera conclusão da conexão para aceitar novas conexões |
 +| | ''​no''​ | não espera conclusão da conexão para aceitar novas conexões |
 +| ''​port''​ | ''​5900''​ | porta a usar (caso o nome do serviço não esteja definido em /​etc/​services ou uma porta não-default deva ser usada) |
 +| ''​user''​ | ''​nobody''​ | usuário que executa o serviço |
 +| ''​group''​ | ''​somegroup''​ | grupo que executa o serviço |
 +| ''​server''​ | ''/​usr/​bin/​Xvnc''​ | processo que executa o serviço |
 +| ''​server_args''​ | ''​-inetd -query localhost -once -geometry 800x600 -depth 16''​ | parâmetros do processo servidor |
 +| ''​log_type''​ | ''​SYSLOG''​ | daemon info |
 +| ''​FILE''​ | ''/​var/​log/​vnc''​ | onde armazenar os logs do serviço |
 +| ''​log_on_success''​ | ''​PID HOST DURATION''​ | informação a logar caso a conexão seja aceita |
 +| ''​log_on_failure''​ | ''​HOST''​ | informação a logar caso a conexão seja recusada |
 +| ''​redirect''​ | ''​server-b.domain.com 5901''​ | redireciona os pacotes enviados a este serviço para o host e porta indicados, de forma transparente para o cliente |
 +
 +Atributos específicos de controle de acesso:
 +
 +^ parâmetro ^ exemplo ^ Significado ^
 +| ''​only_from''​ | ''​20.0.0.17''​\\ ''​200.10.0.0''​\\ ''​20.10/​16''​\\ ''​server1.domain.com''​\\ ''​.domain.com''​ | indica hosts dos quais conexões são aceitas |
 +| ''​no_access''​ | idem | indica hosts dos quais conexões são negadas |
 +
 +Atributos específicos de limitação de uso de recursos (importantes para suportar ataques de negação de serviço):
 +
 +^ parâmetro ^ exemplo ^ Significado ^
 +| ''​instances''​ | 10 | número máximo de instâncias simultâneas do serviço |
 +| ''​per_source''​ | 3 | número máximo de instâncias por host de origem |
 +| ''​nice''​ | 15 | prioridade do processo do serviço |
 +| ''​access_times''​ | 02:00-06:00 18:00-22:00 | horários em que o serviço está disponível |
 +| ''​cps''​ | 10 30 | número máximo de conexões por segundo (10) e período de suspensão do serviço (30 segundos) caso o limite seja alcançado |
 +| ''​max_load''​ | 2 | carga máxima do sistema operacional para aceitar novas conexões |
 +| ''​rlimit_as''​ | 5M | limite de memória a ser usado pelo processo servidor |
 +| ''​rlimit_cpu''​ | 30 | limite de tempo de CPU do processo servidor, em segundos |
 +
  
espec/internet_daemon.txt · Última modificação: 2011/09/06 15:27 por maziero