Serviços de rede e daemons

Serviços de rede

A Internet oferece uma grande quantidade de recursos que vão do email ao compartilhamento de arquivos em rede; esses recursos são disponibilizados a partir de um serviço de rede, composto basicamente por 3 elementos:

Servidor – Máquina que disponibiliza seus recursos locais e/ou outros serviços.

Cliente – Máquina que solicita o serviço através da rede.

Protocolo – Regras de comunicação que envolve o conjunto de mensagens e os formatos de dados que permitem duas ou mais máquinas se comunicar.

Existem muitos serviços de rede, para diversas finalidades. Alguns exemplos são:

Recuperação de conteúdo

HTTPHyperText Transfer Protocol – Visualização e busca de páginas Web, para busca de páginas Web
FTPFile Transfer Protocol – Transferência de arquivos

Acesso remoto

Telnet – acesso à terminais remotos em modo texto
SSHSecure Shell – acesso à terminais remotos em modo texto

Configuração

DHCPDynamic Host Configuration Protocol – Distribui configurações de rede
DNSDomain Name System – Resolução de nomes e IP’s

Monitoração

SNMPSimple Network Management Protocol – Utilizado para monitorar hosts e dispositivos de rede como roteadores, switches

Compartilhamento de recursos

NFSNetwork File System – Utilizado para compartilhar arquivos em redes UNIX
SMBServer Message Block – Utilizado para compartilhar arquivos/impressoras em ambientes Windows

Comunicação entre usuários

SMTPSimple Mail Transfer Protocol – Envio e transferência de e-mails entre servidores
POP3Post Office Protocol v3 – Acesso a caixas de e-mail

Cada um dos serviços listados acima, trabalha em uma porta padrão, definidas pelo IANA –  Internet Assigned Numbers Authority, que padroniza números de portas para as aplicações. Abaixo a lista de portas para os serviços mencionados nos exemplos:

O que coloquei acima, é uma pequena amostra da lista de portas padrão que o IANA definiu. O número de portas vai de 1 a 65535 e dentro desse range, foi estabelecido que portas de 1 a 1024 são as portas reservadas (well-known ports). A lista completa e atualizada de portas pode ser consultada no site do IANA ou, se você utiliza sistemas Unix, basta acessar o arquivo /etc/services. O Windows também traz essa lista, que fica em Systemroot\System32\Drivers\Etc\services.

Daemon

Em serviços de rede, vamos ver muito a palavra daemon, que é um processo que roda em background e realiza uma função específica ou uma tarefa relacionada ao sistema. Os daemons podem ser inicializados após o boot e continuar a serem executados enquanto a máquina estiver ligada ou podem ser iniciados e executados quando necessários. Geralmente daemons trazem no final do seu nome a letra ‘d’. Por exemplo, sshd é daemon que gerencia o serviço de acesso remoto SSH (Secure SHell).

Os daemons podem rodar via inetd ou standalone. Quando rodam via inetd, dependem do daemon inetd – INternET Daemon. O inetd é chamado de “super daemon” por gerenciar conexões para diversos daemons. Quando uma conexão é recebida pelo inetd, ele determina para qual daemon a conexão é destinada e executa o daemon correspondente. Exemplos de daemons inetd são telnet, ftp, entre outros.

Existe também a versão xinetd, que é o inetd melhorado e com recursos como controle de acesso, registro de logs, etc. Por padrão, sistemas Debian e suas variantes trazem o inetd como padrão enquanto Red Hat e suas variantes utilizam o xinetd como padrão.

Outro exemplo de daemon que gerencia conexões é o portmap, responsável por serviços que não possuem uma porta específica para operar. O portmap faz uma associação de números de serviço RPC a portas TCP/IP que seus servidores estão executando. O RPC Remote Procedure Call – é um protocolo que permite a um host utilizar uma função localizada em um outro host remoto; ele permite a troca de mensagens, na qual a origem (cliente) envia parâmetros a um servidor e fica esperando um retorno, que fornecerá o resultado da função remota. O arquivo /etc/rpc armazena a lista de números de ID para serviços RPC.

O NFS é um exemplo de serviço que utiliza o daemon portmap. Quando um cliente faz uma requisição de NFS para o servidor, ele envia uma chamada RPC para o servidor, que irá carregar a rotina apropriada para enviar a resposta ao cliente.

Quando um daemon roda standalone, significa que não precisa de outro programa para iniciar, permitindo que o administrador tenha um maior controle sobre o serviço individualmente. sshd e httpd são exemplos de daemons que rodam standalone.

Referências:
Introdução aos serviços de Rede – Prof. Carlos Maziero

Manual Completo do Linux – Guia do Administrador
Evi Nemeth et al – Editora: Pearson Books

Anúncios

Configurando rede no GNU/Linux

Desde que foi criado, o Linux é um sistema de rede… E mesmo que na sua casa tenha somente seu computador e você não esteja conectado à Internet, seu Linux continua sendo um sistema de rede.

Atualmente as distros trazem o Network Manager, que já ajuda o usuário a configurar a rede rapidamente. Mas, se você é um administrador de sistemas, não irá trabalhar com uma interface gráfica o tempo todo; assim, é importante conhecer os comandos e arquivos de configuração de rede.

Antes de falar sobre os arquivos de configuração, vou falar sobre as interfaces de rede, que são os dispositivos que irão formatar os pacotes e repassá-los através de cabo de rede, wireless, fibra ótica, etc.

Todos computadores que utilizam o protocolo TCP/IP, possuem uma interface de rede lógica, chamada loopback que responde no endereço 127.0.0.1. A interface loopback (lo), faz com que o sistema converse com ele mesmo. É o que chamo de “máquina bater papo com seu eu interior”.

Isso é bacana porque, se você quer criar um servidor DNS (servidor de resolução de nomes), um servidor de e-mail ou de FTP, poderá fazê-lo mesmo que não esteja em uma rede com muitos computadores; ou, caso esteja em uma rede, pode testar os serviços localmente.

Além da interface de loopback, também configuramos a placa de rede – no linux ela é identificada pelo dispositivo ethX, onde X é o número do dispositivo. Por exemplo, eth0 é o primeiro dispositivo de rede existente no computador.

Para configurar a placa de rede, é necessário que o módulo esteja no ar. Eu já falei em outro post, como configurar o módulo da placa de rede… para relembrar, clique aqui. Com o módulo no ar, podemos designar um IP para a placa; para isso usamos o comando ifconfig. Por exemplo:

#ifconfig eth0 192.168.0.10

Onde:

eth0 – Device da placa de rede, ou seja a interface de rede.

192.168.0.10 – É o endereço que estou designando para essa interface.

Essa forma de configuração de rede é temporária; caso reinicie a máquina, a configuração será perdida… é uma configuração básica quando você precisa testar por exemplo, saber se a placa está OK, se designar um IP ela vai conseguir conexão na rede, etc.

Para a configuração da rede ficar definitiva no sistema, devemos editar os seguintes arquivos:

/etc/hostname – Nome da máquina
/etc/hosts – Resolução de nomes locais
/etc/network/interfaces – Informação sobre IP

Os arquivos acima, são para configuração em distribuições Debian e suas variantes! Em sistemas Red Hat e suas variantes, os arquivos são:

/etc/sysconfig/network – Nome da máquina e informações da rede
/etc/hosts – Resolução de nomes
/etc/syscofig/network-scripts/ifcfg-ethX – Informação sobre IP

No caso de Red Hat e suas variantes, para cada placa instalada no computador, existe um arquivo de configuração… por isso o “X” na linha /etc/syscofig/network-scripts/ifcfg-ethX.

E no Slackware:

/etc/HOSTNAME – Nome da máquina e informações da rede
/etc/hosts – Resolução de nomes
/etc/networks/etc/rc.d/rc.inet1 – Informação sobre IP

Bem, nos meus posts, sempre falo em Debian, que é a distribuição que uso… então, aqui vou falar sobre a configuração em ambientes Debian.

O primeiro arquivo que editamos é o /etc/hostname. Esse arquivo é utilizado para definir o nome da nossa máquina:

# echo “nixi” > /etc/hostname

Acima, apenas inseri o nome da minha máquina (nixi) no arquivo hostname. Só que as configurações do nome, só estarão disponíveis quando eu reiniciar a máquina. Para usar o nome sem a necessidade de reiniciar, basta fazer:

# hostname nixi

E aí já estarei usando o novo nome. Ahn, o comando acima, além de definir um nome prá máquina, também pode ser usado para mostrar o nome da máquina… para isso, basta digitar:

# hostname
nixi

O segundo arquivo, é o /etc/hosts… ele serve para resolver o nome da máquina pelo IP dela. É como se fosse um servidor DNS, só que é local, isto é, somente para a minha máquina! Esse arquivo tem a seguinte estrutura:

# cat /etc/hosts
127.0.0.1       localhost.localdomain   localhost

Onde:
127.0.0.1 – IP da máquina

localhost.localdomainFQDNFully Qualified Domain Name – é o nome completo da máquina; isto é, o nome (localhost) e o domínio (localdomain)

localhost – nome da máquina

A utilidade desse arquivo? Bem, imagine que você queira acessar algumas máquinas e não quer ficar digitando o IP delas! Se você não tem DNS, pode colocar o nome e o IP das máquinas que deseja acessar nesse arquivo. Por exemplo, se quiser fazer ping para a máquina asmith, ao invés de digitar o IP dela, poderia incluir a seguinte linha no arquivo /etc/hosts:

192.168.0.150    asmith.nixi.com.br    asmith

Quando for fazer o ping, ao invés de digitar o IP, posso fazer:

# ping asmith
PING asmith.nixi.com.br (192.168.0.150) 56(84) bytes of data.
64 bytes from asmith.nixi.com.br (192.168.0.150): icmp_seq=1 ttl=64 time=0.156 ms
64 bytes from asmith.nixi.com.br (192.168.0.150): icmp_seq=2 ttl=64 time=0.122 ms
64 bytes from asmith.nixi.com.br (192.168.0.150): icmp_seq=3 ttl=64 time=0.044 ms

Lembrando que essa é uma configuração local! Então, se quiser que outras máquinas resolvam os nomes, tem que configurar nelas também… mas se for pensar em configurar muuuuuitas máquinas, é melhor ter um DNS (assunto para um futuro post!) e deixar o /etc/hosts resolver somente o nome da nossa máquina. No caso, da minha máquina local, o arquivo ficou assim:

# cat /etc/hosts
127.0.0.1       localhost.localdomain   localhost
192.168.0.100   nixi.org.br        nixi

O próximo arquivo a ser configurado é o /etc/network/interfaces, responsável por armazenar as configurações de IP de todas as placas de rede. Em distribuições Red Hat e variantes, cada placa tem seu arquivo específico; no Debian, as configurações de todas interfaces são feitas em um único arquivo. Abaixo, exemplo de configuração para IP fixo; isto é, toda vez que a máquina iniciar, sempre irá usar esse IP:

auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1

Onde:
auto eth0 – Indica que a interface será inicializada no boot. Caso não defina essa linha, mesmo que o serviço de rede esteja iniciado, as configurações dessa interface não serão carregadas.

iface eth0 inet static – Indica se a interface terá IP fixo ou não. Aqui, estamos falando que a interface eth0 terá IP fixo.

address– Endereço IP

netmask – Máscara de rede

network – Endereço da rede

broadcast – IP que varre a rede inteira para determinar quais IP’s estão ativos

gateway – IP da máquina que fará a saída dos pacotes para Internet

Essa configuração é usada quando a máquina tem um IP fixo! Caso a máquina seja um cliente de DHCP; isto é, quando existe um servidor que distribui os IP’s para as máquinas que estão na rede, a configuração desse arquivo fica assim:

auto eth0
iface eth0 inet dhcp

Fica uma configuração simples… porque o servidor DHCP será o responsável por configurar o IP, máscara, rede, broadcast, gateway e resolução DNS para o cliente!

Após configurar o arquivo, para que as alterações sejam realizadas, devemos parar e iniciar o serviço de rede:

# /etc/init.d/networking stop
# /etc/init.d/networking start

Para checar as novas configurações da placa de rede:

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:47:ba:19
inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe47:ba19/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:47639 errors:0 dropped:0 overruns:0 frame:0
TX packets:33167 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:65097967 (62.0 MiB)  TX bytes:2828496 (2.6 MiB)
Interrupt:19 Base address:0x2000

Ainda falando sobre o arquivo /etc/network/interfaces, lá existe a linha gateway. Para uma máquina ser capaz de encontrar outra através de uma rede, é necessário que ela saiba como ir de uma rede para outra. O ‘caminho’ que permite uma máquina de uma rede se comunicar com outra de rede diferente, se chama roteamento.

Uma rota, é um par de endereços composto por destino e gateway e indica que, se você estiver tentando alcançar este destino, deve se comunicar através desse gateway. A famosa ‘rota default’, é a rota utilizada por um roteador quando não há nenhuma outra rota conhecida existente para o endereço de destino de um pacote. E todos os pacotes para destinos desconhecidos pela tabela do roteador são enviados para o endereço de rota padrão.

O comando para visualizar a tabela de rotas é o route:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0

Vejam que a última linha indica o IP 192.168.0.1, que é justamente o IP que foi configurado na linha gateway do arquivo /etc/network/interfaces. A opção -n no comando, é para mostrar em formato numérico, isto é, o comando não tentará resolver os IP’s para nomes.

O comando route também é usado para criar uma rota manualmente, seja por motivo de não ter adicionado a linha gateway no arquivo, ou até mesmo por querer utilizar uma outra rota. Para isso, executa-se o comando abaixo:

# route add default gw 192.168.0.1

Onde:

add – para adicionar a rota

default gw 192.168.0.1 – indica que está configurando a rota default com o IP 192.168.0.1

Esse comando faz a mesma coisa que a linha gateway indicada no arquivo /etc/network/interfaces. A diferença é que essa configuração é perdida caso a máquina reinicie, enquanto no arquivo é uma configuração definitiva.

Outras formas ver a tabela de rotas:

# cat /proc/net/route

# netstat -nr

E, para finalizar essa parte da configuração de rede, tem mais um arquivo que editamos quando configuramos rede no Linux. É o arquivo /etc/resolv.conf; responsável por buscar o servidor DNS para resolver nomes na rede.

O DNS foi criado com o objetivo de tornar as coisas mais fáceis para o usuário, permitindo assim, a identificação de computadores na Internet ou redes locais através de nomes (é como se tivéssemos apenas que decorar o nome da pessoa ao invés de um número de telefone). A parte responsável por traduzir os nomes como http://www.wordpress.com em um endereço IP é chamada de resolvedor de nomes.

Então, é no arquivo /etc/resolv.conf que indicamos o nome de domínio DNS da nossa rede, e qual o servidor DNS irá resolver as consultas de nomes.

Exemplo de um arquivo resolv.conf:

search nixi.org.br
nameserver 4.2.2.2

Onde:

search – Lista de pesquisa para a procura do nome de servidor; normalmente é determinado pelo domínio do servidor local.

nameserver – Endereço IP do servidor de nomes que o resolvedor deve pesquisar; são utilizados na ordem em que estão listados.

É importante observar que, se for um cliente dhcp, o resolv.conf será sobrescrito com a informação recebida do servidor DHCP.

Abordei no post a configuração em sistemas Debian; apesar de não utilizar sistemas Slackware ou Red Hat, segue links que irão ajudar na configuração de rede nessas duas distros:

SlackwareConfiguration Help

Red Hat e derivadosHowto Red hat enterprise Linux 5 configure the network card

Referências:
Manual Completo do Linux – Guia do Administrador
Evi Nemeth et al, Pearson Books

Capítulo 15 – Rede

Bem, é isso… até o próximo post! 🙂

Redes: como tudo começou…

Nesse post, vou falar sobre o início das Redes de Computadores; não vou me aprofundar no assunto, so passar uma visão geral de como tudo começou.

Antes de tudo, o que e rede?

Rede nada mais é do compartilhar informações e serviços. As redes de computadores fornecem ferramentas de comunicação necessárias para permiter que computadores compartilhem informações e recursos, como por exemplo:

✔ Compartilhar o conteúdo do HD ou de uma pasta com outros usuários.

✔ Compartilhar uma impressora para todas as máquinas da empresa.

✔ Compartilhar a conexão da internet para todas as máquinas que estão ligadas na rede.

Quando tudo começou…

Desde sempre houve a necessidade de comunicação. Soluções como sinais de fumaça, tambores, pombo-correio, código Morse, rádio, televisão… tudo isso contribuiu para a evolução da comunicação.

Com a chegada dos computadores, também veio a idéia da construção de uma rede de computadores que pudessem trocar informações. Essa idéia surgiu no Departamento de Defesa dos EUA, o ARPA (Advanced Research Projects Agency) e ficou conhecida como ARPANET.

O principal objetivo era interligar diferentes computadores, tanto para aumentar o poder geral do computador quanto para descentralizar o armazenamento de informações. O governo americano queria encontrar uma forma para acessar e distribuir informação no caso de um evento catastrófico, como um ataque nuclear. Se uma bomba atingisse uma linha de computador importante, a transferência de informação pararia imediatamente. Mas se houvesse um meio de formar uma rede de computadores, outras partes do sistema poderiam continuar funcionando mesmo se um elo fosse destruído.

Entre 1969 e 1977, a ARPANET evoluiu de uma rede de quatro computadores para uma com 111 computadores pertencente a universidades, entidades militares e de pesquisa. Usando conexões via satélite, a ARPANET conectou sistemas de computador nos Estados Unidos a computadores no Havaí e Europa.

Durante a década de 80, outras redes surgiram: CSNet, DECNet, Usenet, entre outras. Essas redes tinham o objetivo de interligar laboratórios e universidades nos EUA e em outros países.

No fim dos anos 80, a infraestrutura da ARPANET começou a ficar obsoleta e as as organizações na ARPANET começaram a fazer a transição para outras redes, principalmente a NSFNET. Em 1990, o projeto ARPANET foi finalizado, mas seus objetivos foram alcançados. Os EUA possuíam uma rede de computadores que conectava recursos poderosos e que podia continuar operando mesmo se uma parte da rede parasse de funcionar; além disso, essa rede também podia atravessar o mundo conectando computadores de um lado ao outro no globo.

Contribuições da ARPANET

A criação de um software ou serviço, sempre depende uma motivação especial ou deficiência de alguma ferramenta. No caso da ARPANET, a motivação foi criar uma rede que pudesse continuar trocando informações mesmo que algum ponto falhasse. E essa motivação, gerou ferramentas importantes:

Logins Remotos – possibilitou pessoas usarem um sistema de computador para logar em outro a quilômetros de distância.

Transferência de arquivos – usuários puderam acessar informações em outro computador, além de copiar, salvar dados ou enviar arquivos através da rede.

Correio Eletrônico – usuários puderam enviar mensagens eletrônicas através da rede.

E além disso, da ARPANET nasceu a Internet, ou World Wide Web (WWW), que nada mais é do que um conjunto de informações que são públicas e disponibilizadas em um servidor e que podem ser visualizadas através de um navegador web.

O primeiro navegador para a Web foi criado em abril de 1993 e teve o nome Mosaic; apesar de não existir mais, foi considerado uma revolução tecnológica. E olha que legal… hoje em dia podemos escolher entre vários navegadores: Firefox, Chrome, Lynx (para quem precisa ou gosta de navegar em modo texto), Opera, entre outros.

No axis.org, tem um gráfico da evolução dos navegadores utilizados… quando eu olhei, estava atualizado até agosto/2009. E, se quiser ver o timeline da Internet, pode conferir aqui. Vale a pena!

E isso aí, ate o próximo post 😉 !

Leia mais:

Redes de Computadores

História da Internet

Arpanet

Aspectos Históricos Redes de Computadores