sábado, 5 de setembro de 2009

Conceitos de redes, TCP e Serviços de Rede

Neste artigo vamos ver as principais ferramentas de configuração de rede, como configurar hosts em uma rede, administrar e verificar o tráfego em um host com o netstat.

Para entender o contéudo é necessário ter um conhecimento sobre redes, aconselho ver esse artigo sobre números binários e máscara de sub-redes.

Se você já tem noções de rede como mascara de sub-rede, endereçamento então está apto.



Os serviços tipo [x]inet são aqueles que dependem do comumente chamado “super” daemon de rede inetd – InterNet daemon – sendo o xinetd – eXtended Internet daemon uma iplementação do inetd com alguns recursos a mais como controle de acesso, capacidade de fazer logs e determinar horários para que o serviço esteja disponivel.

Esse daemon fica escutando nas portas que os serviços controlados por ele trabalham e carregam o programa apropriado quando chega uma requisição na determinada porta. Exemplos de serviços tipo inetd são o telnet, ftp,pop3, et. Ao longo do tempo, alguns dos serviços que eram controlados por inetd passaram a operar como stand alone afim de contornar problemas associados ao inetd. Os serviços tipo portmap são aqueles que não possuem uma porta específica para operar, como por exemplo o NIS e o NFS. Estes serviços enviam uma chamada RPC – Remote Procedure Call – para a máquina servidora, causando a execução de uma determinada subrotina. Dessa forma, quando um cliente faz a requisição de NFS a um servidor, ele está enviando um RPC do tipo NFS e que quando chegar o servidor, será tratado como tal, carregando a rotina apropriada para enviar a resposta ao cliente.
Serviços tipo stand alone são aqueles em que cada tipo de servidor possui seu daemon especifico.
Esta forma de trabalho é preferida hoje em dia pois possibilita um maior controle sobre cada serviço em separado. Serviços que operam dessa forma são, ssh,httpd,ftp,pop3 dentre outros. Repare que atualmente os protocolos ftp e pop3 já possuem seus próprios daemons possibilitando sua utilização desvinculada do [x]inetd.

Telnet

Telnet é um protocolo que pode ser utilizado tanto localmente quanto na internet. Desenvolvido em 1969, é considerado inseguro e seu uso é altamente desencorajado. Quando nos referimos a telnet podemos estar falando tanto do protocolo e o servidor que o implementa quanto no programa cliente, utilizado para acessar esse tipo de servidor. Por ser um protocolo extremamente antigo, está disponivel em praticamente todos os sistemas operacionais. Inclui-se a esta lista muitos Sos de equipamentos de rede, como routers, utilizados como ferramentas para configuração dos mesmos. Atualmente o telnet ainda é bastante utilizado para realizar configurações em equipamentos de rede específico, mas também para testar o funcionamento de serviços como um servidor de pop3, eliminando a necessidade de programas cliente especializados.
O telnet é um protocolo cliente-servidor baseado em uma conexão orientada, utilizando tipicamente a porta 23/tcp.
As tres principais razões para a não utilização do telnet são:
ao longo dos anos tem sido descobertas diversas vunerabilidades em suas implementações e, provavelmente, há muitas outras que ainda não foram determinadas;
por padrão, os dados enviados são criptografados, incluindo usuários e senhas;
não possui esquema de autenticação que possibilite garantir que a comunicação está se dando entre as partes envolvidas, facilitando ataques do tipo man-in-the-middle.
Essas falhas tem feito cair a utilização do protocolo TELNET em favor do ssh, desde sua ciração em 1995.

Prática dirigida

netstat -
O comando netstat exibe o status das conexões, tabelas de rotas, estatísticas da interface, conexões mascaradas e participações em multicast.
Vamos ver alguns exemplos do comando.
O comando netstat sem parametros traduz op IP's para os nomes, por isso ele é demorado para resolvermos esse problema podemos usar o -n

# netstat -n

A opção -t e -l exibe as conexões TCP e as portas disponíveis respectivamente para conexão com a sua máquina.

# netstat -nlt

A opção -u exibe as conexões UDP.

# netstat -nlu

Para formar um comando completo para analise de conexões de rede, podemos usar um conjunto de parametros.

# netstat -nltup

Neste caso a opção -p nos mostrará o numero do processo e o nome do programa responsável.

ARP (Address Resolution Protocol)

O comando arp exibe a tabela de resolução de MAC das máquinas do segmento de rede.

# arp -n


Configurando o roteamento estático

1 – Configuração das duas interfaces do roteador:

# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.0.255

# ifconfig eth1 192.1.40 netmask 255.255.255.0 broadcast 192.168.0.255

2 – Caso tenha apenas uma interface, podemos usar o ip virtual e configurar dois endereços para essa interface, conforma exemplo abaixo:

# ifconfig eth0 192.168.0.1 netmask 255.255.255 broadcast 192.168.0.255

# ifconfig eth0:0 192.168.0.129 netmask 255.255.255 broadcat 192.168.0.255

3 – Consulte se seus sistema permite repasse entre as interfaces de rede. Para isso, o valor da diretriz ip_forward deve ser 1:

# sysctl -a |grep ip_forward

4 – E também ser aceito ping em broadcast.

Para nosso teste, o valor da diretriz icmp_echo_ignore_broadcast deve ser 0:

# sysctl -a |grep icmp_echo_ignore_broadcast
5 – Executa o comando ping para o endereço de broadcast:

# ping -b 192.168.0.255

6 – Use o comando arp para identificar o endereço mac dos hosts que estão ativos em sua rede:

# arp -an

7 – Podemos alterar em tempo de execução caso seja necessário:

# sysctl -w net.ipv4.ip_forward=1

# sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=0

8 – Habilitando o forward (repasse) de pacotes de forma que fique permanete:

# echo 1 > /proc/sys/net/ipv4/ip_forward

# echo 0 > /proc/sys/net/ipv4/icmp_ignore_broadcasts

9 – Outra forma interessante é inserir uma entrada no arquivo /etc/sysctl.conf:

# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf

# echo net.ipv4.icmp_echo_ignore_broadcasts=0 >> /etc/sysctl.conf

# sysctl -p /etc/sysctl.conf

# cat /proc/sys/net/ipv4/ip_forward

# cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

10 – Execute o comando ping para o endereço de broadcast:

# ping -b 192.168.0.255

11 – Use o comando arp para identificar o endereço mac dos hosts que estão ativos em sua rede:

# arp -an

12 – Podemos alterar em tempo de execução caso seja necessário:

# sysctl -w net.ipv4.ip_forward=1

# sysctl -w net.icmp_echo_ignore_broadcasts=0

13 – Habilitando o forward (repasse) de pacotes de forma que fique permanente:

# echo 1 > /proc/sys/net/ipv4/ip_forward

# echo 0 > /proc/sys/net/ipv4/ip_forward


# cat /proc/sys/net/ipv4/ip_forward

# cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

14 – Outra forma interessante é inserir entrada no arquivo /etc/sysctl.conf:

Configurando as estações nas sub-redes

1 – Configurando um host na sub-rede 192.168.0.0/25:

# ifconfig eth0 192.168.0.2 netmask 255.255.128 broadcast 192.168.0.127

2 – Para a rede 192.168.0.0/25, o gateway deve ser 192.168.0.1:

# route add default gw 192.168.0.1

# route -n

# netstat -puneta

0 comentários:

Postar um comentário