quinta-feira, 27 de maio de 2010

VPN IPSec com o Banco do Brasil no Centos 5.4

Recentemente fui incubido da tarefa de criar uma VPN utilizando IPSec entre minha empresa e o Banco do Brasil. Como não encontrei muita documentação disponível escrevo este artigo para facilitar a vida de nossos amigos da comunidade.

Decidi utilizar o Centos pois o mesmo possui uma documentação mais clara a respeito do funcionamento do IPSec em sua distribuição. O único pacote necessário para a configuração da vpn é o ipsec-tools.i386 que já vem instalado por padrão.

Para configurar o túnel IPSec entre minha empresa e o BB realizei as configurações abaixo:

01 - Inicialmente devemos criar o arquivo ifcfg-ipsec0 em /etc/sysconfig/network-scripts/ com a seguinte configuração:

TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=xxx.xxx.xxx.xxx
DSTGW=170.66.6.34
SRCNET=xxx.xxx.xxx.xxx/xx
DSTNET=170.66.50.0/24
DST=170.66.6.34

As configurações de SRCGW (Source Gateway) e SRCNET (Source Network) devem corresponder as suas informações.

02 - A conexão com o BB utiliza Pre-shared key para a autenticação, por isso devemos criar também em /etc/sysconfig/network-scripts o arquivo keys-ipsec0 que deve conter a chave utilizada para a conexão entre o BB e sua empresa conforme abaixo:

IKE_PSK=xxxxxxxxx

03 - Devemos configurar o Racoon que é o responsável pela troca de chaves através do arquivo /etc/racoon/racoon.conf conforme abaixo:

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
pfs_group 2 ;
lifetime time 1 hour ;
encryption_algorithm 3des ;
authentication_algorithm hmac_md5 ;
compression_algorithm deflate ;
}
include "/etc/racoon/170.66.6.34.conf";

Observe que ao se editar o arquivo racoon.conf pela primeira vez a entrada

include "/etc/racoon/170.66.6.34.conf";

ainda não existe uma vez que a mesma é criada automaticamente juntamente com o arquivo e é baseada no DSTGW citado anteriormente no arquivo ifcfg-ipsec0.

04 - Para criar o arquivo automaticamente deve-se iniciar o túnel com o comando ifup ipsec0
para desativá-lo digite ifdown ipsec0. Agora edite o arquivo 170.66.6.34.conf criado em /etc/racoon/ conforme abaixo:

remote 170.66.6.34
{
exchange_mode main;
my_identifier address;
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method pre_shared_key;
dh_group 2;
}
}

Note que a documentaçao oficial do Centos informa que não devemos alterar este arquivo diretamente porém, o arquivo criado automaticamente não corresponde as informações solicitadas pelo BB.

05 - Lembre de ativar o roteamento em seu servidor no arquivo /etc/sysctl.conf alterando a variável net.ipv4.ip_forward para 1

Para habilitar o roteamento use o comando

sysctl -p /etc/sysctl.conf

06 - Mais um passo é necessário para realizar a conexão. As configurações de setkey realizadas por padrão não atendem ao necessário para a conexão, por isso alterei as configurações através de um script iniciado automaticamente através do arquivo /etc/rc.local. O script deve conter os dados abaixo:

#!/sbin/setkey -f

flush;
spdflush;

spdadd 170.66.50.0/24 xxx.xxx.xxx.xxx/xx any -P in ipsec
esp/tunnel/170.66.6.34-xxx.xxx.xxx.xxx/require;
spdadd xxx.xxx.xxx.xxx/xx 170.66.50.0/24 any -P out ipsec
esp/tunnel/xxx.xxx.xxx.xxx-170.66.6.34/require;


07 - Feito isso podemos testar nossa conexão com o comando ifup ipsec0

Note que o IPSec não cria interfaces no sistema como o PPTPD ou o Openvpn, por isso deve-se utilizar o tcpdump para verificar a troca de pacotes com o comando:

tcpdump -ni eth0

Com o tcpdump é possível ver a negociação na primeira e na segunda fase do IPSec e logo após os pacotes criptografados.

EX:

1:41:14.935774 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 1 I ident
11:41:14.935792 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 1 I ident
11:41:15.009578 IP 170.66.6.34.500 > xxx.xxx.xxx.xxx.500: isakmp: phase 1 R ident
11:41:15.009590 IP 170.66.6.34.500 > xxx.xxx.xxx.xxx.500: isakmp: phase 1 R ident
11:41:15.015531 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 1 I ident
11:41:15.015542 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 1 I ident
11:41:15.090087 IP 170.66.6.34.500 > xxx.xxx.xxx.xxx.500: isakmp: phase 1 R ident
11:41:15.090097 IP 170.66.6.34.500 > xxx.xxx.xxx.xxx.500: isakmp: phase 1 R ident
11:41:15.095737 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 1 I ident[E]
11:41:15.095748 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 1 I ident[E]
11:41:15.169339 IP 170.66.6.34.500 > xxx.xxx.xxx.xxx.500: isakmp: phase 1 R ident[E]
11:41:15.169350 IP 170.66.6.34.500 > xxx.xxx.xxx.xxx.500: isakmp: phase 1 R ident[E]
11:41:15.169544 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 2/others I inf[E]
11:41:15.169553 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 2/others I inf[E]
11:41:16.175291 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 2/others I oakley-quick[E]
11:41:16.175303 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 2/others I oakley-quick[E]
11:41:16.250253 IP 170.66.6.34.500 > xxx.xxx.xxx.xxx.500: isakmp: phase 2/others R oakley-quick[E]
11:41:16.250264 IP 170.66.6.34.500 > xxx.xxx.xxx.xxx.500: isakmp: phase 2/others R oakley-quick[E]
11:41:16.250530 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 2/others I oakley-quick[E]
11:41:16.250540 IP xxx.xxx.xxx.xxx.500 > 170.66.6.34.500: isakmp: phase 2/others I oakley-quick[E]
11:41:16.493689 IP 170.66.6.34 > xxx.xxx.xxx.xxx: ESP(spi=0x0e1e7ad2,seq=0x1), length 76
11:41:16.493702 IP 170.66.6.34 > xxx.xxx.xxx.xxx: ESP(spi=0x0e1e7ad2,seq=0x1), length 76
11:41:16.949526 IP xxx.xxx.xxx.xxx > 170.66.6.34: ESP(spi=0x3bbaa20b,seq=0x1), length 116
11:41:16.949538 IP xxx.xxx.xxx.xxx > 170.66.6.34: ESP(spi=0x3bbaa20b,seq=0x1), length 116
11:41:17.027200 IP 170.66.6.34 > xxx.xxx.xxx.xxx: ESP(spi=0x0e1e7ad2,seq=0x2), length 116
11:41:17.027212 IP 170.66.6.34 > xxx.xxx.xxx.xxx: ESP(spi=0x0e1e7ad2,seq=0x2), length 116
11:41:17.950707 IP xxx.xxx.xxx.xxx > 170.66.6.34: ESP(spi=0x3bbaa20b,seq=0x2), length 116
11:41:17.950720 IP xxx.xxx.xxx.xxx > 170.66.6.34: ESP(spi=0x3bbaa20b,seq=0x2), length 116
11:41:18.025367 IP 170.66.6.34 > xxx.xxx.xxx.xxx: ESP(spi=0x0e1e7ad2,seq=0x3), length 116
11:41:18.025377 IP 170.66.6.34 > xxx.xxx.xxx.xxx: ESP(spi=0x0e1e7ad2,seq=0x3), length 116
11:41:18.952179 IP xxx.xxx.xxx.xxx > 170.66.6.34: ESP(spi=0x3bbaa20b,seq=0x3), length 116

Caso haja algum erro com sua conexão um comando muito útil para verificar as possíveis causas é o racoon -Fd que inicia o racoon em modo debug.
OBS: Para iniciar o racoon em mode debug o instância que está rodando deve ser fechada.

É isso galera para a realização deste artigo utilizei como base a documentação de VPN do Centos que pode ser encontrada em:
http://www.linuxtopia.org/online_books/centos_linux_guides/centos_linux_security_guide/s1-ipsec-net2net.html
http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-vpn.html

Quaisquer dúvidas ou sugestões estou a disposição.
Um grande abraço a todos.

segunda-feira, 26 de abril de 2010

commandlinefu.com

Olá comunidade,

Todos nós sabemos do poder da linha de comando do linux, é como ter o "universo" ao alcance das mãos. Exageros a parte a dica de hoje é voltada para nós que nunca nos cansamos de utilizar a linha de comando. No site www.linuxcommandfu.com encontramos uma coletânea de informações sobre as ferramentas de linhas de comando e de como elas são utilizadas para resolver determinados problemas comuns a usuários ou administradores.
É uma excelente maneira de aprender novas formas de utilizar nossos velhos amigos do bash e de contribuir com a comunidade.

Um grande abraço a todos.

quinta-feira, 18 de fevereiro de 2010

Aumentar a memória do java para o Openfire

Olá amigos,

Hoje vou mostrar como aumentar a memória disponível para o java no Openfire no Ubuntu server 9.10.

Entre no arquivo /etc/default/openfire e altere a opção:

DAEMON_OPTS=""

para

DAEMON_OPTS="-Xms128m -Xmx256m"

Onde -Xms128m significa o mínimo de memória reservada, já o -Xmx256m indica o máximo de memória disponível para o java.

De acordo com alguns fóruns a configuração padrão atende bem a até umas 500 conexões, mas como em meu servidor eu também possuo alguns plugins notei que a memória utilizada estava rapidamente sendo consumida.
Portanto avalie seu servidor e altere a quantidade de memória alocada de acordo com sua realidade.

Um grande abraço a todos.

quarta-feira, 27 de janeiro de 2010

"gave up waiting for root device" while booting

Salve salve galera...

Hoje vou postar uma dica referente a um erro de boot no Servidor Ubuntu 9.10 e versões anteriores.

O erro ocorre durante a inicialização do ubuntu em certas placas mãe. A mensagem "gave up waiting for root device" while booting é exibida e logo após o administrador é enviado a um shell de raparo. Neste caso, após algum tempo ao se digitar exit neste shell o sistema inicia normalmente. Mas esse erro impede o servidor de reinicializar sem intervenção manual.

Para sanar este problema, ao se deparar com a mensagem de erro aguarde alguns minutos e entre com o comando exit no terminal de reparo.

Após a inicialização do sistema entre no arquivo /boot/grup/grub.cfg (No ubuntu 9.10 nas versões anteriores o arquivo a ser editado é o /boot/grub/menu.lst)

No arquivo de configuração edite a linha abaixo na menuentry referente a inicialização padrão de seu servidor.

De:
linux /vmlinuz-2.6.31-14-generic-pae root=UUID=064dda95-a53c-4aff-aba7-ec38ea5dd779 ro quiet splash

Para:
linux /vmlinuz-2.6.31-14-generic-pae root=UUID=064dda95-a53c-4aff-aba7-ec38ea5dd779 ro quiet splash rootdelay=90

O parâmetro adicional dá mais tempo para reconhecimento do dispositivo que possui a raíz do sistema e dessa maneira o sistema realiza login sem problemas.

Mais informações referentes as placas mãe e ao bug podem ser encontradas aqui.

Um grande abraço a todos.

segunda-feira, 4 de janeiro de 2010

Feliz 2010!!!

Salve galera.

Desejo um feliz 2010 para todos com muito Software Livre pra dar e vender.

Sei que não venho postando como gostaria mas em breve estarei de volta com novos posts.

Um grande abraço a todos.

quarta-feira, 11 de novembro de 2009

Extraindo áudio de arquivos .flv

Salve Salve galera do Software Livre.

Hoje vou mostrar como extrair o áudio dos arquivos .flv, uma mão na roda quando se quer extrair áudio de clipes no youtube.
Existem diversas maneiras de se baixar os arquivos do youtube, plugins para seu navegador ou sites externos, uma boa pesquisada no google vai lhe mostar o caminho.
Uma vez com o .flv em mãos precisamos baixar o aplicativo ffmpeg que é o responsável pela conversão.
O ffmpeg é uma ferramenta bastante poderosa, capaz de converter os mais variados formatos de vídeo e áudio possibilitando também alterações avançadas como redimencionamento de vídeo, alterações no frame rate, bitrate, etc.
Para instalar a ferramenta no ubuntu karmic entre com o comando abaixo:

apt-get install ffmpeg

Após a instalação do aplicativo e suas dependências faz-se necessária a instalação dos pacotes lame e libavcodec-unstripped-52 que realizam a conversão para o formato mp3.

Para a instalação dos pacotes acima é necessário se habilitar os repositórios multiverse em seu arquivo /etc/apt/sources.list

Agora que estamos com todos os pacotes podemos realizar a conversão conforme os exemplos abaixo:

ffmpeg -i arquivo.flv arquivo.mp3

Podemos utilizar mais opções para customizar o arquivo gerado.

ffmpeg -i arquivo.flv -ar 44100 -ab 192k -ac 2 arquivo.mp3

Onde:

-ar Define a frequência do áudio.
-ab Define o bitrate do áudio.
-ac Define o número de canais de áudio.

Para mais opções verifique man do ffmpeg.

Um grande abraço a todos.

terça-feira, 27 de outubro de 2009

Análise de Performance no linux

Olá amigos da comunidade.

Hoje vou tratar de um assunto que considero importante, Análise de Performance. Esse tópico torna-se importante especialmente quando precisamos de dados para convencer um gerente ou chefe que entende muito pouco de TI a atualizar ou comprar um novo servidor.

O linux possui diversas ferramentas para que vc possa acompanhar de perto como anda o fôlego do seu servidor.

O desempenho de um sistema é verificado de acordo com a maneira com que seus recursos são alocados e compartilhados.

Os recursos que têm impacto direto no desempenho são:

Memória
CPU
E/S do HD
E/S da placa de rede.

Existem diversas ferramentas para verificação de seu servidor. As ferramentas que mais utilizo são as seguintes:

htop
vmstat
procinfo
iotop
iftop

htop --> Similar ao top essa ferramenta de linha de comando permite a visualização dos processos e qual o consumo de recurso dos mesmos.
Para acioná-la basta digitar htop no terminal.

No canto superior da tela é possível ver informações de uso de memória, CPU e swap. As informações exbidas podem ser customizadas através do F2.

vmstat --> Essa ferramenta é bastante útil na verificação de uso de swap. Para visualizar as informações basta digitar o comando seguido das opções.
Para maiores informações quanto as opções do vmstat verifique a documentação da ferramenta.

EX:

user@destroyer:~$ vmstat -S k 5
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 348409 28598 12300 144695 1 9 35 26 230 546 12 2 84 2
0 0 348409 28581 12312 144814 0 0 26 38 697 1617 21 3 76 0
2 0 348409 27947 12312 144945 0 0 23 16 787 1640 19 4 77 0
1 0 348409 22237 12320 144945 0 0 0 16 665 1955 18 4 79 0
1 0 348409 27938 12320 144945 0 0 0 0 681 1487 16 4 80 0
0 0 348409 27938 12341 145252 0 0 66 6 804 2019 26 4 69 0


O comando acima vai gerar informações a cada 5 segundos sobre os recursos do sistema. A parte importante a ser verificada é a coluna swap que possui as opções si e so que correspondem a swap in e swap out.
swap in - Quantidade de memória virtual vinda do disco.
swap out - Quantidade de memória virtual indo para o disco.

O ideal seria manter os valores de si e so sendo zero, caso isso não seja possível a máquina deve funcionar bem com o valor de si e so na casa dos 30. Acima desse valor o desempenho já será bastante prejudicado.

procinfo --> Permite visualizar os recursos do sistema em tempo real com dados colhidos do diretório /proc cujo conteúde deve ser bem conhecido de todos os administradores linux. Através desse comando podemos verificar as irqs, memória, dispositivos, etc.
Para ter acesso as informações basta digitar o comando procinfo diretamente na linha de comando.

EX:

Memory: Total Used Free Buffers
RAM: 993960 975556 18404 8660
Swap: 2931820 355180 2576640

Bootup: Tue Oct 27 07:17:20 2009 Load average: 0.33 0.53 0.63 3/305 16561

user : 01:22:56.09 12.5% page in : 1386665
nice : 00:01:08.40 0.2% page out: 1002060
system: 00:16:10.55 2.4% page act: 289409
IOwait: 00:09:36.47 1.4% page dea: 414192
hw irq: 00:00:27.28 0.1% page flt: 26090361
sw irq: 00:00:11.39 0.0% swap in : 15268
idle : 09:13:21.58 83.4% swap out: 88738
uptime: 05:31:24.90 context : 23071141

irq 0: 2203479 timer irq 16: 534369 ohci_hcd:usb3, oh
irq 1: 27854 i8042 irq 17: 0 ehci_hcd:usb1
irq 4: 4 irq 18: 0 ohci_hcd:usb5, oh
irq 6: 3 floppy irq 19: 494493 ehci_hcd:usb2
irq 7: 0 parport0 irq 22: 254602 ahci
irq 8: 1 rtc0 irq 2300: 206016 eth0
irq 9: 0 acpi irq 2301: 0 fglrx[0]@PCI:1:5:
irq 12: 526037 i8042 irq 2303: 2725465 hpet2

sda 97858r 50504w sdb 0r 0w
sda1 33r 0w sdc 0r 0w
sda2 30r 0w sdd 0r 0w
sda3 3r 0w sde 0r 0w
sda5 95408r 48239w sdf 0r 0w
sda6 2363r 2265w

lo TX 1.41KiB RX 1.41KiB pan0 TX 0.00B RX 0.00B
eth0 TX 37.42MiB RX 63.99MiB



iotop --> Ferramenta bastante interessante utilizada para quantificar a E/S de aplicativos e dispositivos. A ferramenta só pode ser utilizada em kernels 2.6.20 ou mais recentes. Podemos verificar que processos estão tomando mais tempo de encrita nos dispositivos físicos, o que é muito importante para se descobrir quais aplicações estão sendo gargalos no sistema.

Ex:

iotop -o

Total DISK READ: 0 B/s | Total DISK WRITE: 60.24 K/s
PID USER DISK READ DISK WRITE SWAPIN IO> COMMAND
4685 user 0 B/s 0 B/s 0.00 % 0.00 % firefox



iftop --> O iftop é utilizado para medir a quantidade de banda consumida por determinada interface. Podemos fazer a verificação de todo o tráfego ou apenas de sub-redes ou hosts o que é importante em firewalls e roteadores linux por exemplo para verificar o quanto de banda determinado host está utilizando.
As opções da ferramenta podem ser verificadas na documentação da mesma.

EX:

iftop -npP -i eth0

iftop -npP -F 10.10.255.0/34 -i eth0 (rede)

iftop -npP -F 10.10.255.10/32 -i eth0 (host)



É isso ai galera, quaisquer dúvidas ou sugestões estou a disposição.
Grande abraço.