Pesquisar neste blog

sexta-feira, 3 de setembro de 2010

INSTALANDO O MSN-PROXY v 0.8-1.1 NO OPENSUSE 11.2 x64 RODANDO COMO GUEST NA VMWARE 2.0.2 EM HOST WINDOWS SERVER 2008 X64

Após instalar o msn-proxy v0.7 no openSUSE 11.1 de 32 bits, resolvi migrar para msn-proxy 0.8, mesmo ainda estando em sua versão alpha (alguém tem que testar o sistema :)). O msn-proxy foi instalado no openSUSE 11.2 x64 rodando como guest sobre VmWare 2.0.2 em sistema host windows server 2008 x64. Durante as pesquisas, percebi que usuários tem enfrentado problemas para instalar essa nova versão do msn-proxy. Dessa forma resolvi contribuir para comunidade Linux com esse peque artigo. Já existem várias informações na net sobre como instalar o msn-proxy e essa é mais uma para minha distro preferida.
Essa também é uma forma de mostrar aos administradores de rede que é possível manter um servidor linux para aumentar a segurança sem custos adicionais com hardware. Não irei abordar aqui a instalação do VmWare e sua configuração, mas na net existe uma infinidade de materiais sobre o assunto, inclusive no site oficial do programa www.vmware.com.
Como ambiente de instalação usei o KDE 4.3.5 release 0, que vem por padrão da distribuição openSUSE 11.2 x64. Você pode optar por usar outro gerenciador de janelas, mas saiba que isso pode mudar a localização de alguns arquivos e pastas.




INSTALANDO O MSN-PROXY VIA 1-CLICK INSTALL


A princípio iniciei a instalação do msn-proxy pelo site opensuse.org, usando a opção 1-click install. Na data que baixei, o pacote era o 0.8-1.1. O mesmo tem sido empacotado por nosso colega aledr que faz parte da equipe de desenvolvimento. Isso facilita muito as coisas para os iniciantes, pois dessa forma as dependências são todas instaladas. O pacote melhorou muito desde a versão 0.7 no que tange a instalação automática dos pré-requisitos. Os requisitos são: (observar que meu sistema e 64 bits)

libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libevent-1.4.so.2()(64bit)
cron
logrotate
mysql
php5-mysql
php5-sockets
rpmlib(PayloadFilesHavePrefix) 4.0-1
rpmlib(CompressedFileNames) 3.0.4-1
rpmlib(PayloadIsLzma) 4.4.6-1

O pacote também disponibilizou para ativação pelo yast os complementos msn-proxy-backend-mysql para suporte ao MySql e msn-proxy-backend-pgsql para suporte ao PostgreSQL. No meu caso ativei o suporte a MySql.
Para instalar o msn-proxy, acesse http://software.opensuse.org/search. Selecione openSUSE 11.2 e digite msn-proxy e clique em search. Será exibido os pacotes disponíveis para instalação. Para instalar, basta dar um clique em 1-click install. Siga sempre em frente na tela de instalação.


INSTALANDO PERFUMARIAS PARA MYSQL


Para facilitar o uso do MySql, instalei também MySQL-administrator que instala algumas dependências como o navegador MySQL-query-browser. O MySQL é obrigatório, mas MySQL-administrator e o MySQL-query-browser são perfumarias para você trabalhar visualmente com a base de dados. Se você tem um bom conhecimento em linha de comando do MySQL pode dispensar essas duas últimas ferramentas. Após a instalação, faça logoff e logon no sistema de forma a atualizar o lançador de aplicativos para aparecer os atalhos dos programas.


CONFIGURANDO MYSQL E CRIANDO BANCO DE DADOS

Após logar novamente, acesse o Lançador de aplicativos\computador\ yast. Na tela que abrir localize no menu esquerdo sistemas, depois na direita Serviços de sistema (nível de execução), abra o mesmo e na lista encontre MySQL e clique em habilitar. Feche com ok. Isso vai iniciar o gerenciador de base MySQL.Agora no menu iniciar vá em Aplicativos\sistemas\Configuração de serviços\administração de banco de dados.
Irá abrir a tela para conexão com o banco de dados. Nos campos solicitados informe o seguinte:

Server Hostname: Localhost
Port: 3306
Username: root
Password: deixe em branco

Agora basta clicar em conectar. Se tudo correr bem você terá acesso ao administrador da base de dados que lhe possibilita entre outros, criar e alterar bases, usuários, e direitos de acesso.
Primeiramente vamos criar a base de dados indo na opção catalogs, clicando com o botão direito no mouse na área branca abaixo de Schemata onde pode ser visto "information_schema, mysql e test". Escolha a opção "Create schema" e na tela que abrir informe como nome de base o seguinte: `msn-proxy` (Não use apostrofe, mas crase). Pronto, se tudo correu bem a base foi criada.
Agora vamos criar o usuário que terá acesso a base de dados. Para isso escolha no menu a esquerda a opção "User Administration". Ao fazer isso uma nova tela se abre no centro para gerenciamento dos usuários. Clique em "New User" para criar o novo usuário e informe os seguintes parâmetros.

MySQL user = msn-proxy
newpassword = secret
confir password = secret

Clique em "Apply Changes" para criar o usuário.
Logo após criado o usuário tem que ser definido onde o mesmo terá acesso a base de dados. Isso é feito nessa mesma tela no campo ao lado esquerdo. Clique como o botão direito sobre o usuário msn-proxy e atribua os seguintes hosts:

msn-proxy
@localhost
@NomedasuaMaquina
@127.0.0.1

Clique em "Apply Changes" para salvar.
Na mesma opção "User Administration" clique na aba "schema privileges" e atribua todos ao usuário msn-proxy referente a base msn-proxy para os hosts @localhost, @NomeDasuaMaquina, @127.0.0.1. Clique em "Apply Changes". Fique atento; o usuário msn-proxy, a base msn-proxy e o local de acesso devem estar selecionados antes de você clicar na seta.
Para atribuir os privilégios, selecione @localhost dentro de msn-proxy, selecione todas as opções em "Avaliable Privileges" e clique na seta para a esquerda de forma a passar todos os privilégios para "Assigned Privileges". Faça isso para as três formas de acesso. Feito isso a base de dados está pronta para receber o msn-proxy. Uma dica, para selecionar os privilégios de uma só vez, clique sobre um deles e depois pressione "Ctrl+A".

EXECUTANDO MSN-PROXY PELA PRIMEIRA VEZ

Houve algumas mudanças em relação a versão anterior. Agora para chamar o programa o comando principal é msn_proxy. Aqui pode ser observado uma alteração em relação a versão 0.7. Na 0.7 o comando a ser executado era msn-proxy, com hífen, agora na 0.8 é msn_proxy com linha de baixo.
Vamos realizar algumas alterações nos arquivos de configuração do msn-proxy. Abra uma tela de terminal digite SU, caso esteja usando usuário com privilégios limitados e a senha de root.
Vamos acessar o arquivo de configuração para a base de dados e fazer as alterações necessárias:
Para acessar o arquivo de configuração pelo terminal com o" vi", digite o seguinte comando:

vi /etc/msn-proxy/mysql/conf

Para ativar o vi para inserção pressione a letra "i" no teclado. Na barra de status vai aparecer "INSERÇÃO". Você vai ver a seguinte linha de conexão da base:

/tmp/mysql.sock|0|msn-proxy|secret|msn-proxy

Altere a linha de configuração do bando de dados para ficar da seguinte forma:

localhost|3306|msn-proxy|secret|msn-proxy

Pressione "ESC" depois digite ":wq" para salvar e fechar o "vi". Você voltará para a tela do terminal.

Execute novamente o "vi", mas com a linha abaixo:

vi /etc/msn-proxy/msn-proxy.conf

Para ativar o vi para inserção pressione a letra "i" no teclado. Na barra de status vai aparecer "INSERÇÃO". Use as setas do teclado para ir até o final do arquivo. Você irá encontrar uma linha sem "#" no início. Altere a mesma para ficar da seguinte forma:

db_mod=/usr/lib64/msn-proxy/mysql.so

Pressione "ESC" depois digite ":wq" para salvar e fechar o "vi". Você voltará para a tela do terminal.

Agora vamos executar o msn-proxy. Aqui temos mais uma mudança em relação da versão 0.7. Vamos ter que chamar o programa e informar onde está o arquivo. Se for simplesmente executado o comando abaixo teremos o seguinte:

msn_proxy -v

info: reading config file [/usr/local/etc/msn-proxy.conf]
debug: cannot open config file [/usr/local/etc/msn-proxy.conf]
fail to parse config file
unloading db module...: [(null)]

Para que o programa funcione corretamente, o mesmo deve ser executado da seguinte forma:

msn_proxy -vf /etc/msn-proxy/msn-proxy.conf

Dessa vez a base de dados será criada mas receberemos o seguinte erro:

SQL: (SELECT connect, save_msg, save_contacts, commands, internal_host FROM defaults LIMIT 1)
debug: fail to read mysql config (check defaults table)
msn-proxy needs at least one kind of database storage. please configure and install one database module.
unloading db module...: [/usr/lib64/msn-proxy/mysql.so]
debug: module mysql unloading..

Esse erro é conhecido da versão 0.7. Isso quer dizer que o sistema já foi instalado mas precisamos popular a tabela defaults.
Vá no Lançador de Aplicativos\Aplicativos\Sistema\Configuração de Serviços\Ferramente para consulta ao banco de dados. Informe os parâmetros na tela de conexão como você já fez no administrador da base de dados e clique em conectar. Digite o seguinte comando e clique em conectar.
Em Schemata de dois cliques sobre o bando msn-proxy para seleciona-lo. Depois insira a seguinte linha no espaço em branco no topo da tela e clique em execute. Isso estará informando o IP da maquina onde você instalou o msn-proxy. Na opção values coloque o IP da sua máquina.

insert into defaults (internal_host) values ('IP da sua máquina')

Os outros dados da tabela defaults já vem pré-cadastrados e você pode alterar depois pela interface web.

Execute novamente o msn-proxy.

msn_proxy -vf /etc/msn-proxy/msn-proxy.conf

Se tudo correu bem a ultima linha será a seguinte:

listen on [0.0.0.0:1863]

INSTALANDO E CONFIGURANDO INTERFACE WEB PARA ADMINISTRAR O MSN-PROXY

Para rodar a interface web se faz necessário os seguintes pacotes:
apache2, apache2-mod_php5,php5-sockets e php5-MySQL, esses dois últimos já instalados juntos com o msn-proxy.
Ao instalar apache2 e apache2-mod_php5, automaticamente são instaladas as dependências libapr-util1, libmm14, apache2-prefork, apache2-utils e libapr1.
Desde o pacote 0.7.27.1 o php5-sockets e php5-MySQL, já tinham sido inseridos como dependência e já eram instalados automaticamente. Só referencio ela aqui pois tive muitos problemas até descobrir que eles eram dependências. O erros que ocorriam na falda deles eram os seguintes:
php5-sockets: Se ele não for instalado vai gerar a mensagem "there was a problem with the request" (Houve um problema com sua solicitação) quando você tentar bloquear ou liberar um contato de um usuário.
php5-MySQL:Se não instalado, vai ser exibida apenas uma pagina em branco quando você tentar carregar as paginas do msn-proxy pois existem códigos MySQL nas paginas php e sem esse pacote não é possível abri-las.
Após instalar todos os pacotes, abre o terminal em modo de Super Usuário faça o seguinte:
Para abrir o arquivo php.ini no" vi":

vi /etc/php5/apache2/php.ini

Pressione a tecla "i" para mudar para mo modo de inserção. Localize as linhas abaixo e altere para ficar dessa forma:

display_errors = On
display_startup_errors = On

Isso fará que os erros sejam exibidos na tela. Caso você queira, depois de instalado e testado você pode mudar para off novamente.
Pressione "ESC" depois digite ":wq" para salvar e fechar o "vi". Você voltará para a tela do terminal.
Vamos agora alterar o arquivo /etc/apache2/sysconfig.d/loadmodule.conf para que o php funcione no  apache. No terminal digite a seguinte linha de comando para abrir o arquivo com o "vi":

vi /etc/apache2/sysconfig.d/loadmodule.conf

Pressione "i" para passar para o modo de inserção, role até o final com a seta do teclado e adicione a seguinte linha:

LoadModule php5_module /usr/lib64/apache2/mod_php5.so

Pressione "ESC" depois digite ":wq" para salvar e fechar o "vi". Você voltará para a tela do terminal.
Para executar o Apache digite o seguinte comando no terminal:

apache2ctl start

Agora, com apache e php configurado, precisamos baixar a interface web, que no pacote 0.8-1.1 ainda não acompanhava. Acesse o seguinte endereço:
http://msn-proxy.svn.sourceforge.net/viewvc/msn-proxy/trunk/src/db_modules/mysql/php/

No final da página clique em "Downoad GNU tarball"

Salve o arquivo php.tar.gz em um diretório de sua preferencia. Nesse exemplo salvarei na pasta /home/

No terminal faça o seguinte comando para extrair o arquivo:

cd /home
tar -zxvf php.tar.gz

O arquivo será extraído para a uma pasta php. No terminal digite o seguinte comando para criar uma pasta como nome "msn-proxy" no diretório padrão do apache:

mkdir /srv/www/htdocs/msn-proxy

Depois digite o seguinte comando para copiar o conteúdo da pasta php para a nova pasta criada:

cp -rv /home/php/* /srv/www/htdocs/msn-proxy

Agora, com o "vi" acesse o arquivo /srv/www/htdocs/msn-proxy/mysql.inc.php e verifique os seguintes parâmetros:

vi /srv/www/htdocs/msn-proxy/mysql.inc.php

Duas configurações válidas podem ser:

$host = ":/var/lib/mysql/mysql.sock";
$user = "msn-proxy";
$pass = "secret";
$db = "msn-proxy";
$port = 3306;

ou

$host = "localhost";
$user = "msn-proxy";
$pass = "secret";
$db = "msn-proxy";
$port = 3306;

feito isso você já deve ser capaz de ver a tela de configuração do msn-proxy acessando:

http://localhost/msn-proxy/index.php

Com isso você já pode acessar a interface web do programa e alterar as configurações.




INSTALANDO E CONFIGURANDO O SQUID

Na mesma máquina virtual instalei o squid para funcionar como proxy transparente. Para isso, no terminal digite:

zypper install squid yast2-squid

Após instalado o squid você tem que configura-lo. Segue abaixo uma sugestão somente para iniciar os testes com o msn-proxy para o arquivo /etc/squid/squid.conf. Sugiro que renomeie o que esta na pasta para squid.comentado. Eu prefiro deixar somente as linhas de configuração do arquivo, assim fica mais fácil administrar, mas é bom manter o comentado, pois ele tem muitas dicas úteis.:

início do squid.conf

http_port 3128 transparent
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl SSL_ports port 443
acl Safe_ports port 80 21 443 70 210 1025-65535 280 488 591 777
acl CONNECT method CONNECT
acl DomBloq dstdomain -i "/etc/squid/DomBloq.txt"
acl DomLibe dstdomain -i "/etc/squid/DomLibe.txt"
acl ExtBloq url_regex -i "/etc/squid/ExtBloq.txt"
http_access allow DomLibe
http_access deny DomBloq
http_access deny ExtBloq
http_access allow manager localhost
http_access allow manager
http_access allow !Safe_ports
http_access allow CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access allow all
icp_access allow localnet
icp_access deny all
access_log /var/log/squid/access.log squid
cache_mem 64 MB
maximum_object_size_in_memory 8 KB
memory_replacement_policy lru
cache_replacement_policy lru
cache_dir ufs /var/cache/squid 100 16 256
minimum_object_size 0 KB
maximum_object_size 4096 KB
cache_swap_low 90
cache_swap_high 95
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
emulate_httpd_log off
ftp_passive on
refresh_pattern ^ftp: 1440 20 10080
refresh_pattern ^gopher: 1440 0 1440
refresh_pattern -i(/cgi-bin/|\?) 0 0 0
refresh_pattern . 0 20 4320
connect_timeout 2 minutes
client_lifetime 1 days
cache_mgr seuemail@seudominiol.com
mail_program mail
# cache_effective_user squid
visible_hostname SUSEx64
# umask 027
icon_directory /usr/share/squid/icons
error_directory /usr/share/squid/errors/Portuguese
coredump_dir /var/cache/squid
fim do squid.conf

Três arquivos adicionais são necessários. Neles estão a lista de Domínios liberados (DomLibe.txt), dos bloqueados (DomBloq.txt) e das extensões/expressões bloqueadas (ExtBloq.txt). Segue abaixo um exemplo do conteúdo de cada um:

Início de DomLibe.txt
.sourceforge.net
.gov.br
.live.com
.skype.com
.vmware.com
fim de DomLibe.txt

início de DomBloq.txt
.orkut.com
.orkut.com.br
fim de DomBloq.txt

início de ExtBloq.txt
\.exe$
\.cmd$
\.scr$
\.bat$
\.mp3$
\.zip$
\.rar$
\.wav$
gateway.dll
fim de ExtBloq.txt

Na verdade ExtBloq.txt serve para bloquear quaisquer expressões, mas o carácter "$" serve para especificar que é o final da url, ou seja, somente a extensão. No caso pode ser visto que também foi bloqueada a expressão "gateway.dll", usada pelo msn-messenger para tentar outras formas de logon. Também habilitei o squid como proxy transparente. Dessa forma, no computador cliente, nas configurações de rede, na opção gateway eu informo o ip do computador onde está instalado o SQUID, também informo na configuração do browser como proxy o IP do computador onde está instalado o SQUID e a porta 3128.


CRIANDO AS REGRAS IPTABLES


Vamos agora criar as regras de iptables. Antes disso acesse o yast e desative o firewall do openSUSE, apenas para teste, depois se quiser você pode ativa-lo novamente ou criar suas próprias regras iptables.
Agora abra um terminal como SU e digite as seguintes regra iptables caso você tenha uma interface de rede para internet e outra para rede local. As regras abaixo deve ser aplicada a interface de rede local.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1863 -j REDIRECT --to-port 1863

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to-port 3128

Para quem possui uma única interface para internet e rede local a regras devem ser as seguintes:

iptables -t nat -I PREROUTING -p tcp --dport 1863 -s 192.168.0.0/24 -j REDIRECT --to-port 1863

iptables -t nat -I PREROUTING -p tcp --dport 80 -s 192.168.0.0/24 -j REDIRECT --to-port 3128

O -s é de source (origem). Assim é especificado que quando a solicitação vier de uma maquina da rele local deve ser tratado pelo msn-poxy (regra 1) ou pelo Squid (regra 2).
O -I insere a regra no inicio da tabela. Ou seja, se as regras forem digitadas não ordem que estão a primeira regra da tabela nat será a regra 2.
O /24 é referente a mascara 255.255.255.0. Você também poderia usar 192.168.0.0/255.255.255.0.
A segunda regra, nos dois casos, é para o SQUID funcionar como proxy transparente.
Para verificar se as regras foram inseridas corretamente, digite o seguinte comando no terminal para listar as regras da tabela nat:

iptables -L -t nat

REALIZANDO OS PRIMEIROS TESTES COM MSN-PROXY

Agora o msn-proxy está pronto para ser testado. Caso você queira acompanhar as atividades do msn-proxy, feche pelo yast na opção Serviços de Sistema(nível de execução) e inicie o mesmo em um terminal com o comando:

msn_proxy -dipsf /etc/msn-proxy/msn-proxy.conf

Teste o mesmo alterando as configurações na maquina cliente. Serão geradas muitas informações na tela a cada conexão. Se isso não estiver acontecendo, revise a instalação pois algo deve ter saído errado.
Um problema que tive na versão 0.7, foi com o fato de estar com mais de um processo do msn-proxy aberto ao mesmo tempo. Quando isso acontecia, ao tentar bloquear ou liberar um contato de um usuário, recebia a seguinte mensagem:

"Falha ao gravar alteração!"


Para resolver o problema é só matar todos os processos existentes, inclusive pelo yast e iniciar o sistema novamente na opção do yast Serviços de Sistema(nível de execução). Para matar os serviços use o seguinte comando no terminal:

pkill -9 msn-proxy /dev/null

O comando pkill mata o processo indicado e todos os relacionados. A opção -9 informa ao sistema que o comando pkill tem prioridade e não deve ser ignorado, a diferença nesse caso é que ele envia o sinal SIGKILL ao processo, e nesse caso, o sistema mata o processo imediatamente sem se preocupar com o salvamento ou remoção de arquivos temporários criados durante a vida do processo.


CONSIDERAÇÕES FINAIS

Espero ter contribuído para os colegas do mundo Linux. Ressalto que todos os testes foram feitos em uma máquina virtual rodando sobre VmWare Server 2.0.2 em um sistema host windows server 2008 x64. No início tive alguns problemas com o squid, uma vez que as requisições não chegavam na máquina guest correta (openSUSE 11.2 x64), mesmo informando o IP da mesma como gateway na maquina cliente. Percebi então que era devido uma configuração de ponte na rede de uma outra máquina virtual com openSUSE 11.1 32 bits instalada no mesmo host. Com isso, ao remover a ponte de rede e configurar a placa no sistema guest openSUSE 11.1 32 bits as requisições passaram a ser recebidas na máquina guest openSUSE 11.2 x64.
Com a finalidade de facilitar para os iníciantes, foi abordado superfícialmente sobre todos os pontos necessários ao funcionamento do msn-proxy. Também foi mencionado sobre a possíbilidade do uso do Linux mesmo não havendo recursos físicos. Para maior conhecimento sobre o assunto, pode ser visitado o site www.vmware.com. Lá está disponível uma variedade muito grande de documentação sobre o sistema VmWare Server, uma solução totalmente gratuita que roda sobre plataforma windows. Mesmo sendo algo em voga no momento, a virtualização acaba passando desapercebida por muitos, por isso a menção no artigo.
Agradeço ao Alexandre Rogoski, responsável pelo empacotamento dos RPM's para o OpenSuse e aos desenvolvedores Luiz Otavio Oliveira Souza e Leonardo Rogoski pelo excelente sistema.
Postem suas duvidas sugestões, orientações, criticas e comentários.

Cordialmente;


Claudir Pereira dos Santos





Referências

https://sourceforge.net/projects/msn-proxy/forums/forum/702817

http://claupers.spaces.live.com/blog/cns!80F64739372147EE!508.entry

http://www.danbp.org/linuxcom.html



Um comentário:

  1. Ao abrir a interface web aparece somente uma tela em branco com a mensagem "erro no SQL", e já tenho outras aplicações rodando perfeitamente usando MySQL e PHP no mesmo servidor. pode me ajudar?

    ResponderExcluir