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
Ú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
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. 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. 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 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 } 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 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. 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.Serviços de rede com xinetd
Configurando o xinetd
Bloqueando
serviços xinetd
Utilizando o comentário para desabilitar o serviço
Testando as alterações
Bloqueando serviços autônomos
Observações