RSS

Artigos

quarta-feira, 12 de agosto de 2009

ROTEAMENTO - LOAD BALANCE

Nesta parte denominamos variáveis para as interfaces como segue.  Denominamos que o nome LAN seja referente à Interface ETH0 que no nosso script é a da rede interna. Verifique no seu Firewall qual é a interface correta.

IF_LAN='eth0'

Aqui denominamos as variáveis dos LINKS 1 e 2, e os chamamos de LINK1 e LINK2.  É claro que você poderá chamá-los do que quiser. Exemplo: ADSL1 e ADSL2, mas não esqueça de alterar as variáveis no restante do script.

IF_LINK1='eth1'
IF_LINK2='eth2'

Aqui colocamos os Gateways dos Links de Internet. Geralmente, os Default Gateways dos Links são os IP´S dos roteadores de Internet.

GW_LINK1='200.70.0.1'
GW_LINK2='200.80.0.1'

Nesta parte, utilizamos o comando IPTABLES para mascarar os IPs, ou seja,
fazemos um NAT (Network Address Translation) para que os pacotes que venham da Interface ETH0 com IPs da rede interna, ou mesmo pacotes gerados dentro do próprio Firewall, possam sair para a Internet com endereços trocados, usando os IPs das interfaces ligadas aos Links de Internet. O MASQUERADE ao final do comando faz exatamente isto. Caso contrário, utilizaria ACCEPT, mas aí os pacotes sairiam para a Internet com IPs da rede interna e jamais retornariam ao Firewall.

iptables -t nat -A POSTROUTING -o $IF_LINK1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $IF_LINK2 -j MASQUERADE


Aqui começamos a marcar os pacotes diferenciando-os pela porta utilizada.
Observe que escolhemos os pacotes com destino às portas 80 (HTTP) 443 (HTTPS) 25 (SMTP) 110 (POP). Todo pacote que passar pelo Firewall com estas particularidades receberão uma "marca", uma espécie de carimbo. Pacotes destinados à porta 80 recebem "carimbo" de número 2, pacotes com destino à porta 25 recebem "carimbo" número 3. Desta forma, podemos diferenciá-los para que mais à frente no script tenhamos controle do que saiu/entrou e por onde saiu/entrou.

iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 110 -j MARK --set-mark 3



A diferença entre o PREROUTING e o OUTPUT é que, PREROUTING abrange os  pacotes que foram originados fora do FIREWALL, por exemplo Interface ETH0  ($IF_LAN), enquanto OUTPUT são os pacotes originados no Firewall, ou seja, na própria console.

iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 3


Aqui montamos as tabelas dinâmicas a partir das marcas (carimbos) que fizemos
lá em cima no nosso script. Pacotes que foram marcados com 2 vão para a tabela "table 20" e os marcados com 3, vão para a tabela "table 21", com a mesma prioridade. Perceba o PRIO 20 após os comandos.

ip rule add fwmark 2 table 20 prio 20
ip rule add fwmark 3 table 21 prio 20


Se quisermos condicionar esta marcação de outra forma, podemos utilizar o  comando das seguintes formas:

Este condiciona que todos os pacotes que vierem da rede 192.160.0.0 vão para a tabela 20.

ip rule add from 192.160.0.0/24 table 20

Este outro condiciona os pacotes da rede 192.170.0.0 a irem para a tabela 21.

ip rule add from 192.170.0.0/24 table 21

Agora sim daremos rumo aos pacotes que foram marcados e cadastrados na tabela dinâmica.  Veja que os pacotes que foram enviados para a tabela 20 têm como DEFAULT GATEWAY o LINK1. Sendo assim, os pacotes serão enviados para o LINK1 na Interface ETH1 com o IP 200.70.0.1.  Já os pacotes da tabela 21 serão enviados para o LINK2 na Interface ETH1, com o IP 200.80.0.1

ip route add default via $GW_LINK1 dev $IF_LINK1 table 20
ip route add default via $GW_LINK2 dev $IF_LINK2 table 21


Este último comando limpa a tabela, caso ela já tenha sido utilizada  anteriormente, ou apenas para termos certeza de que quando você resetar as  regras todas, o Firewall não guarde nenhum tipo de informação na memória (cache). Daí o nome FLUSH CACHE.

ip route flush cache


  
-----------------------------------------------------------------------------------------------------------------------------
 
Captura o IP e grava em um arquivo texto.


Ethernet HWaddr 00:00:B4:8A:B1:C7
inet addr:192.168.0.254 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::200:b4ff:fe8a:b1c7/64 Scope:Link


Script:
#!/bin/sh ip=`ifconfig eth0|grep "inet addr:"|awk '{print $3}'|sed s/addr://` echo "$ip" > /home/usuario/ip.txt

Legenda:

* A única coisa que vc precisa mudar é a interface: eth0 / eth1 / ppp0 etc
* O caminho onde vai gravar o ip, foi: /home/usuario/ip.txt


SAMBA


O SAMBA é um servidor e conjunto de ferramentas que permite que máquinas Linux e Windows se comuniquem entre si, compartilhando serviços (arquivos, diretório, impressão) através do protocolo SMB (Server Message Block)/CIFS (Common Internet File System), equivalentes a implementação NetBEUI no Windows. O SAMBA é uma das soluções em ambiente UNIX capaz de interligar redes heterogênea.


Abaixo uma configuração do samba onde:

\\servidor
-programas (Acesso apenas a leitura)
-musicas (Acesso Liberado)
-documentos (Solicitado um usuário e senha)

[global]
workgroup = (seu_grupo_de_trabalho)
netbios name = servidor
security = user
smb passwd file = /etc/samba/smbpasswd
encrypt passwords = yes
log level = 3
syslog = 1
log file = /var/log/samba/log.%m
os level = 99

[programas]
comment = Troca de Arquivos
path = /home/programas
read only = yes
writable = no

[musicas]
comment = Musicas
path = /home/musicas
read only = no
writable = yes
guest ok = yes
browseable = yes
create mask = 0777


[documentos]
comment = Documentos
path = /home/documentos
read only = no
writable = yes
guest ok = yes
browseable = yes
create mask = 0777
valid users = user1,user2,user3 #usuários que podem gravar.

E se preciso verifique as permissões de cada diretório:

ls -ialh /home/convidados
ls -ialh /home/documentos

Caso necessário:

chmod a+wrtx /home/documentos

-----------------------------------------------------------------------------------------------------------------------------
Como recuperar o GRUB no Ubuntu

Inicialize algum LiveCD do Ubuntu.

Para listar todas as partições do disco rígido, digite o seguinte comando no terminal:

$ sudo fdisk -l

Localize a partição onde o Ubuntu está instalado e digite o comando:

$ sudo mount /dev/hdY /mnt

Onde /dev/hdY é a partição onde o Ubuntu está instalado.

Com a partição já montada, recupere o GRUB com o seguinte comando:

$ sudo grub-install --root-directory=/mnt /dev/hdY

Novamente substituindo o /dev/hdY pela sua partição raiz.

Reinicie o seu computador.
-----------------------------------------------------------------------------------------------------------------------------


VPN - Virtual Private Network (Rede Particular virtual)

Esse artigo tem como objetivo mostrar de forma rápida e simples a configuração de uma VPN baseada em Linux utilizando o OpenVPN como ferramenta, sendo que este é um software estável, simples de configurar, além de ser um projeto que está sempre em desenvolvimento.

Vamos considerar o caso de interligar as redes internas de uma empresa (matriz e filial), sendo que ambas se localizam em lugares diferentes e bem distantes. Que cada empresa possui uma conexão ADSL rodando Linux como servidor e suas respectivas redes internas conforme o exemplo hipotético abaixo:

Matriz

* ADSL com IP FIXO 200.200.200.200
* LAN com a classe 192.168.0.0/24

Filial

* ADSL com ip DINAMICO 189.189.189.189
* LAN com a classe 192.168.1.0/24


Em nossa VPN, teremos como principal objetivo fazer com que qualquer máquina da rede interna da Matriz se conecte diretamente com qualquer máquina da rede interna da Filial (ou vice versa), deixando a impressão de que ambas as redes estão no mesmo meio físico.

Antes de começar, devemos checar primeiramente se o driver TUN/TAP se encontra no kernel. Caso o mesmo não se encontre, precisaremos ativar esse driver dentro da opção "Network Device Support". No Slackware 9.1, 10.0, 10.1, 11 e 12 não foi preciso mexer no kernel. Já na Slackware 9.0 é preciso recompilar o kernel com suporte ao driver TUN/TAP.

Pacotes Necessários:

lzo-2.03.tar.gz (biblioteca de compressão de dados)
openvpn-1.5.0.tar.gz

Download:
http://www.oberhumer.com/opensource/lzo/download/
http://www.openvpn.net/index.php/downloads.html

---------------

Instalação

1º Passo

$ tar -xzvf lzo-2.03.tar.gz
$ cd lzo-2.03
$ ./configure
$ make
$ su
# make install

2º Passo

$ tar -xzvf openvpn-2.0.9.tar.gz
$ cd openvpn-2.0.9
$ ./configure
$ make
$ su
# make install

O OpenVPN já está instalado em nosso sistema com suporte a biblioteca de compressão de dados. Agora só resta a configuração da VPN.


Configurando a VPN na Matriz:


O OpenVPN pode operar com 3 tipos de criptografia. "Nenhuma criptografia (apenas o túnel)", "criptografia com chaves estáticas" e no modo "TLS", em que as chaves são trocadas periodicamente. No nosso exemplo, usaremos criptografia com chaves estáticas.

1 - Execute os seguintes comandos:

mkdir /etc/openvpn

Criamos o diretório onde estarão todos os arquivos de configuração.

openvpn --genkey --secret /etc/openvpn/chave.key

Foi gerada uma chave de criptografia com o nome de chave.key (pode ser qualquer nome de arquivo) dentro do diretório /etc/openvpn.

cat /etc/openvpn/chave.key
Só para visualizarmos o conteúdo da chave que geramos.

touch /etc/openvpn/matriz.conf
Crie esse arquivo com o seguinte conteúdo:

dev tun
ifconfig 10.0.0.1 10.0.0.2
route 192.168.1.0 255.255.255.0 #faixa de ip da rede interna da FILIAL
secret /etc/openvpn/chave.key
port 2294
comp-lzo
ping 15
persist-tun
verb 3
ping-restart 120
shaper 512000
mute-replay-warnings

Em seguida, vamos iniciar a conexão no servidor, faltando apenas configurar a filial.

Execute o seguinte comando no servidor da Matriz:

openvpn --config /etc/openvpn/matriz.conf -daemon

# ifconfig tun0

tun0 Link encap:Point-to-Point Protocol
inet addr:10.0.0.1 P-t-P:10.0.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1255 Metric:1
RX packets:1383257 errors:0 dropped:0 overruns:0 frame:0
TX packets:1144968 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:82865921 (79.0 Mb) TX bytes:383951667 (366.1 Mb)


Se aparecer algo assim ou parecido, o túnel na Matriz já está pronto e a espera da conexão da filial.


Configurando a VPN na Filial:
Criaremos o mesmo diretório de configuração na filial:

mkdir /etc/openvpn

Copie a chave gerada na matriz para a filial com o seguinte comando:

scp /etc/openvpn/chave.key ip_filial:/etc/openvpn

Em seguida crie o arquivo de configuração chamado filial.conf:

touch /etc/openvpn/filial.conf

Crie esse arquivo com o seguinte conteúdo:

dev tun
ifconfig 10.0.0.2 10.0.0.1
route 192.168.0.0 255.255.255.0 (faixa da rede interna da MATRIZ)
remote 200.200.200.200 (ip do servidor da MATRIZ)
secret /etc/openvpn/chave.key
port 2294
comp-lzo
ping 15
persist-tun
verb 3
ping-restart 120
shaper 512000
mute-replay-warnings


Inicie a conexão na filial com o seguinte comando:

openvpn --config /etc/openvpn/filial.conf -daemon

ifconfig tun0

tun0 Link encap:Point-to-Point Protocol
inet addr:10.0.0.2 P-t-P:10.0.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1255 Metric:1
RX packets:1383257 errors:0 dropped:0 overruns:0 frame:0
TX packets:1144968 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:82865921 (79.0 Mb) TX bytes:383951667 (366.1 Mb)



Ok! Se aparecer algo assim, sua VPN, está no ar!!! Teste pingando de uma ponta a outra:

# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=63 time=11.9 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=63 time=6.09 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=63 time=5.93 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=63 time=8.15 ms
64 bytes from 10.0.0.1: icmp_seq=5 ttl=63 time=6.19 ms


Informações sobre a VPN
Para montar a VPN, então utilizamos:

# Dois Servidores Linux ligados diretamente a Internet (ADSL)
# Matriz com ip FIXO e filial com ip dinâmico. (IP Privado e IP Público)
# Pacotes: OPENVPN e LZO

O importante é a matriz com um ip privado(fixo/válido). Se preciso, mas não é o aconselhavel pode-se ainda utilizar serviços gratuitos na internet como: http://www.no-ip.org para gerenciamento do ip entre os servidores.

Para levantarmos a VPN sempre que iniciarmos o servidor, adicionaremos no /etc/rc.d/rc.local o comando:

Para Matriz:
openvpn --config /etc/openvpn/matriz.conf -daemon

Para Filial:
openvpn --config /etc/openvpn/filial.conf -daemon
-----------------------------------------------------------------------------------------------------------------------------
.

0 Comentários: