Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

sexta-feira, 7 de janeiro de 2011

Servidor de rede local Ubuntu

Introdução

Hoje em dia, quase todo mundo que tem acessa via banda larga e tem mais do que um PC em casa, acaba de uma forma ou de outra configurando um deles para compartilhar recursos na rede, ou compartilhar a conexão. Conforme os upgrades e trocas acontecem, mais cedo ou mais tarde você acaba ficando com um micro disponível e acaba usando-o para configurar um servidor de arquivos, ou outro tipo de servidor dedicado para a rede, sem falar no casos em que você monta uma máquina especialmente para a tarefa.
Neste tutorial, aprenderemos como personalizar uma instalação padrão do Ubuntu, transformando-o em um servidor de rede local, com as seguintes funções:
  • Compartilhar arquivos e impressoras através do Samba, servindo como um servidor de arquivos para a rede local.
  • Rodar máquinas virtuais através do VMware Server, que ficarão acessíveis para toda a rede (você pode manter uma VM com o Windows caso precise rodar aplicativos para a plataforma, por exemplo e acessá-la de qualquer um dos micros da rede).
  • Servidor DHCP.
  • Compartilhamento da conexão e proxy transparente com o Squid.
  • Servidor SSH e NX Server, para que você possa acessar o servidor remotamente.
  • Domínio virtual no No-IP, para que o servidor tenha um endereço fixo, para acesso remoto.
O tutorial é destinado a configurar o servidor de uma forma simples, de forma que você possa colocá-lo no ar em poucos minutos, sem precisar de muito conhecimento técnico e sem complicações. A idéia é que o servidor fique aberto para a rede local, aceitando conexões dos outros micros sem frescuras, mas que ao mesmo tempo seja bem seguro contra conexões provenientes da Internet.
No tutorial, utilizarei a versão desktop do Ubuntu, o que permite que você também utilize o servidor localmente, como se fosse mais um PC da rede. Se você preferir montar um servidor dedicado, pode executar os mesmos passos utilizando a versão Server do Ubuntu, que é otimizada para uso em servidores sem interface gráfica.
Para a maioria dos casos, a versão de 32 bits (i386) é a recomendada, pois as versões de 64 bits ainda são menos usadas e por isso possuem mais problemas no geral, além de serem incompatíveis com muitos softwares de código fechado disponibilizados apenas em versão de 32 bits. Você só tem uma real necessidade de usar um sistema operacional de 64 bits se pretender utilizar mais do que 3 GB de memória RAM.
Caso esteja curioso, o servidor que montei para este tutorial é baseado em um Pentium E2180 (2.0 GHz), com 2 GB de RAM. Ou seja, é uma máquina relativamente modesta para os padrões atuais, mas que ao mesmo tempo possui um bom poder de processamento, que vou usar para disponibilizar máquinas virtuais para a rede com o VMware Server. Os três HDs são para aumentar o espaço de armazenamento, já que esta será a principal função do servidor:.
m137bae6a
Com o sistema instalado, o primeiro passo é ajustar a configuração de rede, de forma que o servidor passe a utilizar um endereço IP fixo. Para isso, clique sobre o ícone do Network Manager ao lado do relógio, acesse as propriedades da conexão e desmarque a opção "Modo Roaming", para ter acesso à configuração dos endereços:
m7b77ea08
Caso seu servidor tenha duas placas de rede, uma para a rede local e outra para a Internet, configure primeiro a interface de rede local, deixando para configurar a interface da Internet depois. Não se esqueça de verificar a configuração dos servidores DNS na aba "DNS", pois sem eles você não navega :)
No Ubuntu 8.04 existe um bug que faz com que as alterações não sejam aplicadas depois de salvas. Você pode contornar isso forçando uma atualização manual, reiniciando o serviço responsável pela configuração da rede:
$ sudo /etc/init.d/networking restart
Com a rede configurada, vamos à configuração dos serviços.
O primeiro passo é atualizar a lista de pacotes do apt-get, para ter certeza de que utilizaremos as versões mais atuais dos pacotes. Em versões anteriores do Ubuntu era necessário editar o arquivo "/etc/apt/sources.list", descomentando as linhas referentes aos repositórios universe e multiverse, mas nas versões atuais, incluindo o 8.04, os repositórios já vem ativados por padrão.
$ sudo apt-get update
Verifique em seguida se as partições que você deseja utilizar nos compartilhamentos de arquivos estão ativadas no arquivo "/etc/fstab" e configuradas para serem montadas automaticamente durante o boot. Se você configurou os pontos de montagem das partições durante a instalação, elas já estarão configuradas corretamente, caso contrário, você pode fazer com que o sistema passe a usá-las inserindo as linhas apropriadas no arquivo "/etc/fstab".
Se você acabou de particionar um novo HD em EXT3 e deseja que a partição "/dev/sdc1" criada seja montada na pasta "/mnt/sdc1", por exemplo, os passos seriam:
Criar a pasta onde a partição será montada:
$ sudo mkdir /mnt/sdc1
Testar a montagem da partição:
$ sudo mount /dev/sdc1 /mnt/sdc1
Adicionar a linha abaixo no final do arquivo "/etc/fstab", orientando o sistema a montá-la automaticamente durante o boot. Você pode abrir o arquivo no gedit, usando o comando "sudo gedit /etc/fstab":
/dev/sdc1 /mnt/sdc1 ext3 defaults 0 0
Examinando o arquivo /etc/fstab, você percebe que o Ubuntu não faz referência às partições dentro do fstab pelo dispositivo, mas sim pelo UUID, que é um identificador único. O uso dos UUIDs é um "xuncho" para solucionar o problema dos devices dos HDs mudarem a cada boot, fazendo com que as partições deixem de ser montadas.
Para seguir o padrão do sistema, identificando a partição através do UUID, você pode verificar qual é o UUID referente à sua partição usando o comando "blkid", como em:
# blkid /dev/sdc1
/dev/sdc1: UUID="5c5a3aff-d8a3-479e-9e54-c4956bd2b8fd" SEC_TYPE="ext2" TYPE="ext3"
Você pode então especificar o UUID na linha do fstab no lugar do device, como em:
UUID=5c5a3aff-d8a3-479e-9e54-c4956bd2b8fd /mnt/sdc1 ext3 defaults 0 0
Veja um exemplo:
21dc54fb
Com as partições montadas, podemos passar para a etapa seguinte, que é instalar o Samba e criar os compartilhamentos desejados.

Samba

Instalar o servidor Samba no Ubuntu é bastante simples, você precisa apenas instalar o pacote "samba" usando o apt-get:
# apt-get install samba
Como a idéia é fazer uma configuração simples, que permita que o servidor compartilhe as pastas desejadas com os demais micros da rede local, sem impor restrições de acesso, utilizaremos a opção "guest account" do Samba para mapear todos os acessos para uma conta criada previamente. Com isso, os os usuários poderão acessar os compartilhamentos diretamente, sem precisar fornecer usuário e senha, de forma similar ao que temos ao criar compartilhamentos no Windows XP.
O primeiro passo é criar uma conta de usuário para acesso aos compartilhamentos, como em:
# adduser gdh
Se preferir, você pode simplesmente usar o usuário que criou durante a instalação. O próximo passo é cadastrar o usuário no Samba, usando o comando "smbpasswd -a", fornecendo a mesma senha especificada ao criar o login:
# smbpasswd -a gdh
New SMB password:
Retype new SMB password:
Depois de cadastrar o usuário, falta configurar o Samba, o que é feito editando o arquivo "/etc/samba/smb.conf":
$ sudo gedit /etc/samba/smb.conf
Apague todo o conteúdo do arquivo original, deixando-o com o seguinte conteúdo:
[global]
netbios name = Ubuntu
server string = Servidor Samba
workgroup = Grupo
local master = yes
os level = 100
preferred master = yes
wins support = yes
printing = cups
load printers = yes

map to guest = bad user
guest account = gdh
[printers]
comment = Impressoras
print ok = yes
guest ok = yes
path = /var/spool/samba
[arquivos]
path = /mnt/sdc1
writable = yes
guest ok = yes
[videos]
path = /mnt/sdb1/videos
writable = yes
guest ok = yes

As opções em negrito no modelo de configuração são as opções que você deve alterar, indicando as configurações que se aplicam ao seu caso:
netbios name: Indica o nome do servidor, com o qual ele aparecerá no ambiente de rede.
workgroup: O grupo de trabalho, o mesmo especificado na configuração das outras máquinas da rede.
guest account: Aqui você especifica a conta que cadastramos anteriormente usando o comando "smbpasswd -a".
[arquivos] e [videos]: Estes são dois compartilhamentos de exemplo. Altere os nomes e as pastas compartilhadas conforme desejado.
Os compartilhamentos do Samba seguem uma estrutura muito simples, onde você indica o nome do compartilhamento (da forma como ele aparecerá no ambiente de rede) entre colchetes e indica a pasta a que ele dará acesso na opção "path". A opção "writable = yes" faz com que o compartilhamento seja para leitura e escrita e a "guest ok = yes" faz com que ele fique disponível para qualquer usuário da rede, já que qualquer tentativa de acesso com um login de usuário que não existe será mapeada para o usuário "gdh".
Para que a configuração entre em vigor, reinicie o Samba usando o comando:
$ sudo /etc/init.d/samba restart
A partir daí, o servidor aparecerá no ambiente de rede das máquinas Windows, compartilhando as pastas especificadas no arquivo. Devido ao uso do guest, os usuários poderão acessar os compartilhamentos diretamente, sem que você precise cadastrar cada usuário manualmente, como precisaria fazer em uma instalação tradicional do Samba:
172add21
Esta configuração também faz com que o servidor compartilhe automaticamente as impressoras instaladas. Configure a impressora no servidor através do "Sistema > Administração > Impressão" e ela ficará automaticamente disponível para os clientes.
Você pode criar mais compartilhamentos usando este mesmo modelo, mudando apenas o nome e a pasta a compartilhar. Com esta configuração, o servidor irá também automaticamente compartilhar as impressoras instaladas no servidor, você precisará apenas fornecer os drivers de impressão ao instalá-las nos clientes.
O único cuidado é que o usuário usado na opção "guest account" (o gdh no exemplo) precisa ter acesso completo ao conteúdo das pastas compartilhadas, já que todos os acessos serão feitos através dele. Caso necessário, altere as permissões de acesso às pastas, usando o comando "chown -R", como em:
# chown -R gdh.gdh /mnt/sdc1/
O "-R" no comando faz com que as alterações seja aplicadas de forma recursiva, atingindo todos os subdiretórios dentro da pasta, enquanto o "gdh.gdh" indica o usuário e o grupo que assumirá o controle.

VMware Server

Se, como no meu caso, você está usando uma máquina atual como servidor, uma boa forma de usar os ciclos de processamento disponíveis é fazer com que ele rode máquinas virtuais, que poderão ser acessadas através dos outros micros da rede. Dessa forma, você pode deixar várias máquinas virtuais instaladas no servidor e usá-las em qualquer micro da rede local conforme precisar.
Se você precisa acessar um determinado site que só abre no IE, ou se quer testar uma determinada configuração no Fedora 8, vai precisar apenas abrir a VM correspondente. Além da flexibilidade, outra grande vantagem é que todo o processamento é feito no servidor, de forma que você pode abrir as VMs de que precisar, sem se preocupar em deixar seu micro lento.
Vamos aproveitar para já instalar o VMware 2.0, que inclui uma interface de administração via web bastante prática, que permite acessar as VMs diretamente através do navegador:

m102d9a8
Antes de começar, é necessário instalar o pacote "build-essential e os headers do Kernel em uso, como em:
$ sudo apt-get install build-essential
$ sudo apt-get install linux-headers-2.6.24-16-generic
Os arquivos do VMware Server 2.0 Beta estão disponíveis no: http://www.vmware.com/beta/server/. Quando a versão final estiver disponível, a página será movida para o http://www.vmware.com/download/server/.
Ele é dividido em dois pacotes: o pacote "VMware-server", que é o componente principal e o "VMware-vix", que contém a engine da interface de administração. Baixe os dois arquivos para a mesma pasta e descompacte-os, como em:
# tar -zxvf VMware-server-e.x.p-84186.i386.tar.gz
# tar -zxvf VMware-vix-e.x.p-84186.i386.tar.gz

Diferente do VMware-Server 1.0.x, onde você precisa instalar o patch "vmware-any" para que ele possa ser instalado no Ubuntu (devido à versão do Kernel), o VMware 2.0 Beta 2 pode ser instalado diretamente.
Acesse a pasta "vmware-server-distrib/" e rode o script "vmware-install.pl". Desde que você tenha descompactado os dois arquivos no mesmo diretório, o script se encarregará de instalar também o VMware-vix automaticamente.
# vmware-server-distrib/
# ./vmware-install.pl
Perto do final da instalação, o instalador pergunta sobre as portas que serão usadas para o acesso web, via HTTP e HTTPS. A menos que você pretenda rodar um servidor web no servidor, pode simplesmente usar as portas padrão (80 e 443) para facilitar o acesso.
Please specify a port for standard http connections to use [80]:
Please specify a port for secure http (https) connections to use [443]:

Como de praxe, ao especificar portas diferentes do padrão, você deve incluir a porta no endereço de acesso ao servidor, como em "https://192.168.1.254:40433"
Uma observação é que as versões beta do VMware Server 2.0 vem com as extensões de debug ativadas. Elas permitem gerar relatórios detalhados sobre o status do software, que podem ser incluídos em bug reports, mas reduzem substancialmente o desempenho das máquinas virtuais (a perda chega a mais de 50% em diversas operações).
O debug pode ser desativado dentro das configurações de cada máquina virtual (você precisa desativá-lo uma por uma), desmarcando a opção "Record runtime information", dentro da seção "Summay > Commands > Configure VM > Advanced":
m5f875da3
Os betas possuem também um sistema de expiração, que bloqueia o uso das versões antigas conforme atualizações vão sendo disponibilizadas, de forma a evitar que os usuários continuem a utilizar versões beta antigas, cujos problemas já foram solucionados.
Quando ele perguntar "In which directory do you want to keep your virtual machine files?", especifique a pasta onde você quer salvar as máquinas virtuais. Como as pastas podem ser bem grandes, é interessante usar uma partição separada, que possua bastante espaço disponível. Você pode, por exemplo, criar uma pasta separada dentro da partição com os compartilhamentos do Samba e indicá-la na opção, como em:
In which directory do you want to keep your virtual machine files?
[/var/VMs] /mnt/sdc1/VMs
O beta 2 do VMware Server 2.0 ainda tem alguns bugs diversos e o desempenho da interface web ainda deixa bastante a desejar. Se você preferir continuar com a versão 1.0.5, que é a versão "tried and true", faça o download dos três pacotes no http://vmware.com/download/server/.
Para instalá-lo no Ubuntu, comece instalando pacote "xinetd" via apt-get:
$ sudo apt-get install xinetd
Em seguida, instale o pacote "vmware-server" baixando anteriormente, como em:
$ tar -zxvf VMware-server-1.0.5-80187.tar.gz
$ cd vmware-server-distrib
$ sudo ./vmware-install.pl
Em um certo ponto da instalação, o instalador vai abortar a instalação, reclamando de um erro relacionado à compilação do módulo vmmon. Este erro é decorrente do uso do Kernel 2.6.24-16 no Ubuntu, que é mais recente do que os suportados pelo instalador. Para continuar a instalação, baixe e instale o patch disponível no http://uruz.org/files/vmware-any-any-update-116.tgz:
$ wget -c http://uruz.org/files/vmware-any-any-update-116.tgz
$ tar -zxvf vmware-any-any-update-116.tgz
$ cd vmware-any-any-update116/
$ sudo ./runme.pl
O script faz as modificações necessárias no script de instalação e executa o instalador novamente. Dessa vez a instalação continua até o final. :)
Opcionalmente, você pode instalar também o pacote VMware-mui, que permite que você ative e desative as máquinas virtuais hospedadas no servidor usando o navegador.
O pacote vmware-server-client precisa ser instalado apenas nos clientes, de onde você for acessar as máquinas virtuais. Naturalmente, nada impede que você o instale também no servidor, principalmente se você for utilizá-lo como servidor não dedicado.
641dbb29
Você perceberá que o acesso aos dispositivos USB dentro das máquinas virtuais não funciona diretamente no Ubuntu 8.04. Para solucionar o problema, é necessário adicionar a linha abaixo no final do arquivo "/etc/fstab":
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0
Depois de salvar o arquivo, reinicie o servidor e o acesso passará a funcionar.

DHCP

Para que o servidor passe a fornecer a configuração de rede aos clientes, instale o pacote "dhcp3-server" usando o apt-get, como em:
$ sudo apt-get install dhcp3-server
Em seguida, edite o arquivo "/etc/dhcp3/dhcpd.conf", deixando-o com o seguinte conteúdo:
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.101 192.168.1.201;
option routers 192.168.1.1;
option domain-name-servers 208.67.222.222,208.67.220.220;
option netbios-name-servers 192.168.1.254;
option broadcast-address 192.168.1.255;
}
A opção "range" determina a faixa de endereços IP que será usada pelo servidor. Se você utiliza a faixa de endereços 192.168.1.1 até 192.168.1.254, por exemplo, pode reservar os endereços de 192.168.1.1 a 192.168.1.100 para estações configuradas com IP fixo e usar os demais para o DHCP, ou então reservar uma faixa específica para ele, de 192.168.1.101 a 192.168.1.201, por exemplo. O importante é usar faixas separadas para o DHCP e os micros configurados com IP fixo.
Na "option routers" vai o endereço do default gateway da rede, ou seja, o endereço do servidor que está compartilhando a conexão. Não é necessário que o mesmo micro que está compartilhando a conexão rode também o servidor DHCP. Pode ser, por exemplo, que na sua rede o gateway seja o próprio modem ADSL que está compartilhando a conexão e o DHCP seja um dos PCs.
A opção "option domain-name-servers" contém os servidores DNS que serão usados pelas estações. Ao usar dois ou mais endereços, eles devem ser separados por vírgula, sem espaços.
A opção "option netbios-name-servers" faz com que os clientes sejam orientados a utilizarem o endereço IP do servidor na rede local como servidor WINS, agilizando a navegação na rede. Naturalmente, o "192.168.1.254" deve ser substituído pelo endereço correto, caso diferente.
Depois de salvar o arquivo, não esqueça de reiniciar o serviço para que a configuração entre em vigor:
$ sudo /etc/init.d/dhcp3-server restart

Compartilhamento da conexão

Se você está usando um servidor com duas interfaces de rede, pode utilizá-lo também para compartilhar a conexão, adicionando também um proxy transparente com o Squid de forma a fazer cache dos arquivos e assim melhorar a velocidade da conexão.
Depois de configuradas as duas interfaces de rede, você pode ativar o compartilhamento com a rede local usando os comandos abaixo. O segundo (echo ...) só pode ser executado diretamente como root, já que o sudo não permite escrever diretamente em arquivos de configuração usando o comando echo, por isso começamos usando o comando "sudo su" para nos logar diretamente na conta de root:
$ sudo su
# modprobe iptable_nat
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
O "eth1" no terceiro comando indica a placa onde está a conexão com a Internet. Não se esqueça de indicar a interface apropriada ao executar o comando (na dúvida você pode checar a configuração da rede usando o ifconfig). Se você acessa via ADSL, usando o pppoeconf ou o adsl-setup (com o modem configurado como bridge) será criada a interface "ppp0".
A partir daí, todas as requisições recebidas na interface de rede local serão mascaradas e roteadas usando a interface especificada e as respostas serão devolvidas aos PCs da rede local.
Os três comandos devem ser colocados em algum dos arquivos de inicialização do sistema para que passem a ser executados automaticamente durante o boot. No caso do Ubuntu e outras distribuições derivadas do Debian, você pode utilizar o arquivo "/etc/rc.local", colocando as linhas desejadas antes do "exit 0".
Vamos aproveitar para incluir também regras para ativar um firewall simples, que bloqueie as portas de entrada na interface com a internet, deixando passar apenas pacotes de respostas e conexões em portas indicadas manualmente. Com isso, o firewall garante um bom nível de proteção, com um mínimo de efeitos colaterais.
Para isso, utilizaremos o próprio iptables, complementando os três comandos anteriores. Estes comandos podem ser incluídos no arquivo /etc/rc.local, logo abaixo dos comandos para compartilhar a conexão:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
O primeiro comando faz com que o seu servidor deixe de responder a pings. Muitos ataques casuais começam com uma varredura de diversas faixas de endereços de conexões domésticas, enviando um ping para todas as máquinas. Responder ao ping indica não apenas que a máquina está online, mas também que provavelmente ela está com o firewall desativado, o que estimula o atacante a continuar o ataque, lançando um portscan e iniciando o ataque propriamente dito. Deixando de responder aos pings, o volume de ataques ao servidor cai bastante.
Os dois comandos seguintes protegem contra IP spoofing (uma técnica usada em diversos tipos de ataques, onde o atacante envia pacotes usando um endereço IP falseado como remetente, tentando assim obter acesso a PCs da rede interna) e contra pacotes inválidos, que são comumente utilizados em ataques DoS e ataques de buffer overflow.
As três últimas linhas autorizam pacotes provenientes da interface de loopback (lo), juntamente com pacotes provenientes da rede local e descartam novas conexões na interface de Internet, deixando passar apenas pacotes de resposta. Não se esqueça de substituir o "eth0" pela interface de rede local correta, caso contrário você vai acabar fazendo o oposto, ou seja, bloqueando as conexões dos PCs da rede local e deixando passar as provenientes da Internet :).
Se você quiser abrir portas específicas adicione a regra "iptables -A INPUT -p tcp --dport 22 -j ACCEPT" (onde o "22" é a porta e o "tcp" é o protocolo) antes da regra que bloqueia as conexões. Você pode repetir a regra caso necessário, abrindo assim todas as portas desejadas.
No final, incluindo os comandos para compartilhar a conexão e regras para abrir a porta 22 (SSH), os comandos a adicionar no script de inicialização seriam:
#!/bin/sh
# Compartilha a conexão
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Bloqueia pings e protege contra IP spoofing e pacotes inválidos
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
# Abre para a interface de loopback e para a interface de rede local
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
# Abre para as portas especificadas
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Bloqueia as demais conexões, deixando passar apenas pacotes de resposta
iptables -A INPUT -p tcp --syn -j DROP

Adicionando um proxy transparente

Aproveitando o compartilhamento da conexão, você pode melhorar um pouco o acesso adicionando um proxy transparente com o Squid. A configuração é simples e você ganha um cache para as páginas e arquivos já acessados, otimizando a conexão.
O primeiro passo é configurar o servidor Linux com duas placas de rede para compartilhar a conexão, como vimos nos tópicos anteriores. O proxy transparente é apenas um add-on, que complementa o compartilhamento da conexão via NAT.
Com tudo funcionando, o próximo passo é instalar o Squid, o que é feito através da instalação do pacote "squid":
$ sudo apt-get install squid
Com o pacote instalado, o próximo passo é configurar o arquivo "/etc/squid/squid.conf". Apague (ou renomeie) o arquivo original e crie outro com o seguinte conteúdo:
http_port 3128 transparent
visible_hostname gdh
cache_mem 64 MB
maximum_object_size_in_memory 128 KB
maximum_object_size 512 MB
cache_dir ufs /var/spool/squid 4096 16 256
cache_access_log /var/log/squid/access.log
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 21 280 443 488 563 591 777 1025-65535
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
acl redelocal src 192.168.1.0/24http_access allow localhost
http_access allow redelocal
http_access deny all
A primeira linha indica a porta utilizada pelo Squid (3128) e que ele deve operar em modo transparente (transparent). A segunda indica o nome do servidor (gdh), que você deve substituir pelo nome do seu.
As quatro linhas seguintes indicam a configuração do cache. O Squid trabalha com dois caches distintos, um cache mais rápido, feito na memória RAM, e outro mais lento (porém maior) feito usando espaço do HD.
O "cache_mem 64 MB" indica o tamanho do cache na memória RAM (é recomendável que você utilize no máximo 1/3 da memória total instalada), enquanto o "4096" na linha "cache_dir ufs /var/spool/squid 4096 16 256" indica o tamanho do cache que será feito no HD, em megabytes.
A linha "acl redelocal src 192.168.1.0/24" indica a faixa de endereços e a máscara utilizada na sua rede local (o /24 equivale à mascara 255.255.255.0). Combinada com as regras "http_access allow redelocal" e "http_access deny all" ela faz com que apenas micros da rede local possam utilizar o proxy, afastando qualquer possibilidade de que ele fique aberto para a Internet, independentemente da configuração do firewall.
A linha maximum_object_size 512 MB indica o tamanho máximo de arquivo que será armazenado no cache (arquivos maiores do que isso serão ignorados), o que evita que arquivos muito grandes, (como imagens ISO) que você vai baixar apenas uma vez, desperdicem espaço no cache.
Depois de terminar, reinicie o Squid para que a configuração entre em vigor:
# /etc/init.d/squid restart
Com isso, a configuração do servidor proxy está pronta, mas falta um passo igualmente importante, que é ativar a regra de firewall que faz com que os acessos destinados à porta 80, provenientes da rede local sejam encaminhados para o Squid. Sem isso, as requisições continuam sendo roteadas diretamente, sem passarem pelo proxy:
$ sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Note que o "eth0" no comando especifica a interface de rede local, que deve ser alterada de acordo com a sua configuração. Este comando (sem o sudo deve ser colocado no final do arquivo "/etc/rc.local", logo depois dos comandos para compartilhar a conexão, como em:
#!/bin/sh
# Compartilha a conexão
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
# Bloqueia pings e protege contra IP spoofing e pacotes inválidos
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -m state --state INVALID -j DROP
# Abre para a interface de loopback e para a interface de rede local
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
# Abre para as portas especificadas
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Bloqueia as demais conexões, deixando passar apenas pacotes de resposta
iptables -A INPUT -p tcp --syn -j DROP
Depois de ativar a regra de firewall, você pode testar o proxy navegando em algum dos micros da rede local (que use o servidor como gateway) e verificar o conteúdo do arquivo "/var/log/squid/access.log" no servidor. Conforme as requisições passam pelo proxy, o arquivo é alimentado com um grande volume de informações sobre as conexões realizadas.

Domínio virtual

Um dos grandes problemas das conexões domésticas é que o IP é dinâmico, o que dificulta o acesso externo. Se você pretende acessar o servidor e/ou outras máquinas da rede remotamente, uma solução simples é configurar um domínio virtual, usando o no-ip.com ou outro serviço de DNS dinâmico.
Os serviços de DNS dinâmico trabalham de uma forma bastante simples, onde um cliente instalado no seu servidor (ou em qualquer outra máquina da rede, acessando através da conexão compartilhada por ele) envia informações sobre o endereço IP corrente para os servidores do serviço, o que permite a eles manterem um subdomínio no estilo "meu-nome.no-ip.org".

4e003034
Cadastro de um domínio virtual no no-ip.com
Para isso, basta fazer um cadastro gratuito para criar sua conta e poder cadastrar os domínios:
Fica faltando então a parte mais importante que é a instalação do cliente. Para o No-IP, você pode utilizar o próprio cliente Linux disponível no:
http://www.no-ip.com/downloads.php?page=linux
Comece descompactando o arquivo. Dentro dele, existe uma pasta chamada "binaries", com o arquivo "noip2-Linux". Este é o executável que faz a atualização do IP. Para usá-lo, copie-o para a pasta "/usr/local/bin", como em:
# tar -zxvf noip-duc-linux.tar.gz
# cd noip-2.1.1/binaries/
# cp -a noip2-Linux /usr/local/bin/

O próximo passo é executar o "noip2-Linux", usando a opção "-C -c" (create config), que cria o arquivo de configuração. Você pode indicar onde o arquivo será criado, basta indicá-lo no comando. Nesta etapa ele pedirá o login de usuário e o domínio registrado no site, como em:
# noip2-Linux -C -c /etc/noip.conf
Auto configuration for Linux client of no-ip.com.
Please enter the login/email string for no-ip.com : meu@email.com
Please enter the password for user 'meu@email.com ' ********
Only one host [meunome.no-ip.org] is registered to this account.
It will be used.
Please enter an update interval:[30]
Do you wish to run something at successful update?[N] (y/N) N
New configuration file '/etc/no-ip.conf' created.
Com o arquivo de configuração criado, inicie o noip2-Linux usando o comando abaixo. Inclua o comando em uma dos scripts de inicialização do sistema, como o "/etc/rc.d/rc.local", para que ele seja executado durante o boot. Não esqueça de adicionar o "&" no final do comando, ele faz o programa rodar em background. Sem ele, o comando bloqueia o terminal, paralisando a inicialização do sistema. Note que agora usamos apenas o segundo "c", que indica que ele deve usar o arquivo de configuração anteriormente criado:
# noip2-Linux -c /etc/noip.conf &
Nas distribuições derivadas do Debian, existe a opção de instalar o pacote disponível via apt-get:
# apt-get install no-ip
Ao ser instalado, ele cria automaticamente o script "/etc/init.d/no-ip", que se encarrega de ativar o programa durante o boot. Para que ele funcione, fica faltando apenas criar o arquivo de configuração, usando o comando:
# no-ip -C -c /etc/no-ip.conf
Para que a configuração entre o vigor, reinicie o serviço, usando:
# /etc/init.d/no-ip restart

SSH e NX Server

A forma mais simples de acessar seu servidor remotamente é usar o SSH. Através dele, você pode não apenas rodar comandos de terminal, mas também rodar programas gráficos e transferir arquivos. Para instalar o servidor SSH no Ubuntu, instale os pacotes "openssh-server" e "openssh-client":
# apt-get install openssh-server openssh-client
Com o SSH ativo, você pode acessar a máquina remotamente usando o cliente SSH, fornecendo o login e o endereço IP ou domínio da máquina, como em:
$ ssh -X gdh@192.168.1.254
No primeiro acesso o cliente confirma o fingerprint do servidor, uma identificação que permite ao cliente SSH detectar ataques man-in-the middle, onde o servidor é substituído por outra máquina, configurada para capturar as senhas. O "-X" permite que você rode aplicativos gráficos. Basta chamá-los pelo nome através do terminal, como se estivesse sentado na frente do servidor.
Para transferir arquivos, o comando básico é o sftp, que lhe dá um prompt de transferência de arquivos. O uso é similar ao do SSH, basta incluir o login de acesso e o endereço do servidor, como em:
# sftp gdh@192.168.1.254
Se você é das antigas, da época dos clientes de FTP para MS-DOS, vai se identificar com a interface :). Para baixar um arquivo use o comando "get" e para navegar entre os diretórios use o "cd" e o "ls ..", da mesma forma que em um prompt local.
No dia-a-dia, você dificilmente vai utilizar o SFTP em linha de comando, pois existem interfaces mais práticas. Nas distribuições baseadas no Gnome, você pode utilizar o módulo "ssh://" do Nautilus, digitando "ssh://usuario@servidor" diretamente na barra de endereços (clique no ícone com a folha de papel para liberar a edição), o que permite acessar os arquivos diretamente e inclusive copiar e colar arquivos entre diversas janelas do navegador:
dca9331
Nas distribuições baseadas no KDE, você obtém a mesma função através do módulo "fish://" do Konqueror. Basta digitar "fish://usuario@servidor" na barra de endereços.
Para complementar o SSH, você pode instalar o NX server, uma espécie de terminal server para Linux, que permite que você acesse o desktop do servidor remotamente e rode qualquer conjunto de aplicativos instalado nele. Não existe limite de conexões simultâneas, de forma que você pode inclusive acessar o servidor (usando logins diferentes) a partir de todas as máquinas da rede simultaneamente:
m1e4380d9
Assim como no VNC, o NX exibe uma janela contendo um desktop do servidor. O tamanho da janela é ajustável e cada sessão é independente, permitindo que dezenas de clientes (Linux ou Windows) se conectem ao mesmo servidor Linux. Ao encerrar a sessão, você tem a opção de suspendê-la, o que permite reconectar mais tarde (a partir do mesmo cliente), sem perder as janelas e trabalhos abertos.
Originalmente, o servidor era pago e o cliente ficava disponível para download gratuito. Mas, assim como o VMware, a partir de um certo ponto a NoMachine resolveu oferecer uma versão gratuita também do servidor, como uma forma de aumentar sua participação no mercado e assim ganhar espaço para vender suas soluções corporativas.
Para instalar a versão gratuita do NX Server, baixe os pacotes do "NX Free Edition for Linux", "NX Node" e "NX Client" nohttp://www.nomachine.com/download.php.
É necessário baixar os três pacotes, pois o servidor depende dos outros dois para funcionar. Estão disponíveis versões em .rpm, .deb e também um pacote genérico, em .tar.gz, que pode ser usado no Slackware e outras distribuições.
12c2ae65
Ao instalar, comece instalando o cliente, seguido pelo NX Node, deixando o servidor por último, como em:
$ sudo dpkg -i nxclient_3.2.0-9_i386.deb
$ sudo dpkg -i nxnode_3.2.0-5_i386.deb
$ sudo dpkg -i nxserver_3.2.0-7_i386.deb
Aproveite para rodar o comando "apt-get -f install" no final do processo para corrigir qualquer eventual problema relacionado a dependências dos pacotes:
$ sudo apt-get -f install
Nas estações, você precisa instalar apenas o pacote "nxclient", que possui versões para Linux, Windows, OSX e até Solaris.
O servidor NX utiliza o SSH como meio de transporte, por isso, para utilizá-lo é necessário que o servidor SSH esteja ativo. Uma vez instalado, o servidor NX permite que você se conecte usando qualquer login de usuário disponível no servidor (com exceção do root). Se você quer dar acesso a alguém, basta criar uma nova conta, usando o "adduser".
m22c7f2b7
Nos clientes, você precisa instalar apenas o pacote "nxclient", como em:
$ sudo dpkg -i nxclient_3.2.0-9_i386.deb
Como comentei, ele possui também uma versão Windows (que possui uma configuração exatamente igual à da versão Linux), que pode ser baixada na mesma página,
Na maioria das distribuições Linux, ao instalar o cliente NX, são criados ícones no "Iniciar > Internet". Da primeira vez, use o "NX Connection Wizard" para criar a conexão inicial. Se o ícone não tiver sido criado, use o comando "/usr/NX/bin/nxclient -wizard" (usando seu login de usuário, não o root):
m1c949193
Estão disponíveis ainda opções com o nível de compressão dos dados e do tamanho da janela. Usando a opção "LAN", que é destinada a conexões via rede local, não existe perda de qualidade de imagem, mas, ao usar as demais opções, destinadas a conexões mais lentas, as imagens são comprimidas via JPG, o que garante uma atualização mais rápida, porém com uma certa perda de qualidade.
Na segunda janela, temos outra opção importante, que é a seleção do ambiente gráfico usado. O cliente NX não é capaz de detectar automaticamente o ambiente gráfico usado no servidor, de forma que você precisa especificá-lo na criação da conexão. No caso do Ubuntu, que usa o Gnome por padrão, escolha "Unix > Gnome":
5f0af460
A opção "Select size of your remote desktop" permite especificar o tamanho da janela com a conexão remota. A opção "Available area" faz com que a janela ocupe todo o espaço útil do desktop, sem cobrir a barra de tarefas (o ideal na maioria das situações), mas você pode também especificar uma resolução qualquer, como "1000x700" ou "800x480". Não é necessário se prender às resoluções mais usadas, você pode utilizar qualquer valor.
O cliente NX se encarrega de criar ícones no desktop para as conexões criadas, o que facilita o acesso a elas:
1f11af9
Entretanto, para ter acesso ao botão "Configure...", que dá acesso ao painel de configurações, você precisa abrir a conexão usando o ícone "NX Client" no menu, ou o comando "/usr/NX/bin/nxclient -wizard".
Ao acessar o menu de configuração, você tem acesso a um conjunto extra de opções. A primeira dica é a opção "Remember my password" na aba "General", que permite memorizar a senha de acesso. Marcando a opção "Use custom settings" você tem acesso a um menu com opções adicionais relacionadas à compressão da imagem:

4e8cc44e
m49134060
Aqui você tem a opção de ajustar o nível de compressão do JPG (os níveis mais altos são úteis em conexões via modem), usar compressão via RGB (um formato sem perda) ou desabilitar completamente a compressão usando a opção "Use plain X bitmaps". Esta última opção consome mais banda da rede (o que não chega a ser um problema em uma rede de 100 megabits), mas em troca usa menos processamento, tanto no servidor quanto no cliente. Ela é uma boa opção para uso em rede local, onde temos bastante banda disponível.
Na aba "Advanced" temos a opção "Disable ZLIB stream compression", mais uma opção interessante para melhorar o desempenho das conexões via rede local em clientes com pouco processamento.