Infelizmente algumas aplicações comerciais AINDA rodam apenas em Windows. Outras ainda por cima EXIGEM que o usuário tenha permissões de administrador para que o sistema funcione. Na minha opinião trata-se de algo inaceitável quando se fala em segurança da informação. Porém deixemos esta questão para discussão futura.
Uma solução que ajuda um pouco na segurança, é colocar o executável do programa para ser inicializado ao login do usuário, de forma que o usuário fique preso somente à aplicação e não ao ambiente windows do servidor (como eu disse ajuda "um pouco" na segurança).
Caso seja necessário reiniciar o windows, o qual tem como "plugin" a necessidade de ser reinicializado por diversos motivos (algumas vezes inexplicáveis), sugiro a criação de um usuário qualquer, o qual tenha um script de execução para ser ativado ao se logar. Exemplo: crie um usuário chamado "reiniciar" e tenha como executável o script "reiniciar.bat".
O conteúdo do script deverá ser algo como:
@echo off
cls
echo ATENCAO: o servidor sera reiniciado dentro de 10 segundos,
pause
shutdown /r /t 10 /f
Onde as opções do comando shutdown são:
/r para reiniciar
/t 10 aguardar 10 segundos para executar
/f forçar a reinicialização (independente do que estiver rodando na máquina
quarta-feira, 31 de agosto de 2011
quarta-feira, 22 de junho de 2011
Habilitar o uso do TOR no PIDGIN
Ao editar uma conta já criada no pidgin, acesse a aba "proxy" e selecione o tipo de proxy "socks 5". Em seguida preencha o Host com "127.0.0.1" e Porta com 9050.
Considerando que o polipo já esteja configurado, agora é só navegar.
Considerando que o polipo já esteja configurado, agora é só navegar.
terça-feira, 1 de fevereiro de 2011
Copiar HD via rede usando dd e nc
A algum tempo me deparei com um problema típico: fazer a instalação idêntica de um sistema Linux (na época era um Slackware) em um laboratório com mais de 30 computadores. Como é sabido pelos que atuam na área, a clonagem usando o Ghost nem sempre funciona bem.
A solução viável então seria a utilização do comando "dd", porém ele sozinho ainda não seria viável. Imagine tirar mais de 30 HDs um a um das máquinas destino e colocá-los na máquina origem, dar o boot e executar o DD para copiar... Seria um trabalho muito cansativo e sinceramente não tão eficiente.
A solução que utilizei foi a seguinte:
1) Instalar o sistema e configurá-lo em apenas uma máquina (denominada origem).
2) Na máquina origem, após instalado e configurado o sistema, dar boot com um LiveCD Debian (para que o sistema não inicie do HD da própria máquina).
3) Na máquina destino também dar boot com um LiveCD Debian.
Obs.: Neste momento ambas as máquinas (origem e destino) inicializaram utilizando um Debian LiveCD (sistema independente do HD das máquinas).
4) Conecte uma máquina à outra utilizando um cabo CROSSOVER. É imprescindível esta forma de conexão, pois a possibilidade colisão pode-se dizer que é nula, uma vez que o tráfego será direto de uma placa a outra, sem intermediários e direção oposta de dados trafegando. A utilização de switch não foi satisfatória(obtive erro de cópia em 25% das máquinas).
5) No destino execute os seguintes comandos:
$ sudo su
# ifconfig eth0 10.0.0.2 netmask 255.255.255.0
# nc -l -p 9000 | dd of=/dev/hda
Obs.: Após o último comando, o prompt deverá ficar piscando sem nenhuma informação, aguardando o envio dos dados. Mantenha esta máquina inativa, até o término completo da operação. Só será exibida alguma mensagem ao término do processamento. A única característica de presença de funcionamento é o LED de indicação de leitura/escrita do HD funcionando freneticamente.
6) Na origem execute os seguintes comandos:
$ sudo su
# ifconfig eth0 10.0.0.1 netmask 255.255.255.0
# dd if=/dev/hda | nc 10.0.0.2 9000
Assim como na máquina destino, após o último comando, o prompt deverá ficar piscando sem nenhuma informação. Observe o LED de indicação de leitura/escrita do HD em funcionamento.
7) Após o término da operação, será exibido uma mensagem do comando dd indicando a quantidade de dados copiados e o prompt normal aparecerá novamente na tela de ambas as máquinas (origem e destino).
Neste momento a cópia está completa, bastando dar o boot normal na máquina destino e testar o sistema copiado.
Como no meu caso eram várias máquinas destino, o que fiz em seguida foi:
a) selecionar a nova máquina de destino
b) executar os passos 3, 4, 5 e 6
Esta solução possibilita mais agilidade e eficiência no procedimento uma vez que não é necessário abrir nenhuma máquina, sendo apenas necessário o manuseio de cabo, ligando-o às máquinas desejadas (origem e destino).
Finalizo dizendo que nada é perfeito. Fazendo a cópia desta forma, obtive erro em 2% das máquinas, o que melhorou muito em comparação ao uso do ghost.
Descrição dos comandos utilizados nos passos 5 e 6:
A última linha nos passos 5 e 6, é uma combinação dos comandos "dd" e "nc", que fazem a copia de origem e destino, considerando que ambos estão em pontos de rede diferentes.
Obrigado, até a próxima.
A solução viável então seria a utilização do comando "dd", porém ele sozinho ainda não seria viável. Imagine tirar mais de 30 HDs um a um das máquinas destino e colocá-los na máquina origem, dar o boot e executar o DD para copiar... Seria um trabalho muito cansativo e sinceramente não tão eficiente.
A solução que utilizei foi a seguinte:
1) Instalar o sistema e configurá-lo em apenas uma máquina (denominada origem).
2) Na máquina origem, após instalado e configurado o sistema, dar boot com um LiveCD Debian (para que o sistema não inicie do HD da própria máquina).
3) Na máquina destino também dar boot com um LiveCD Debian.
Obs.: Neste momento ambas as máquinas (origem e destino) inicializaram utilizando um Debian LiveCD (sistema independente do HD das máquinas).
4) Conecte uma máquina à outra utilizando um cabo CROSSOVER. É imprescindível esta forma de conexão, pois a possibilidade colisão pode-se dizer que é nula, uma vez que o tráfego será direto de uma placa a outra, sem intermediários e direção oposta de dados trafegando. A utilização de switch não foi satisfatória(obtive erro de cópia em 25% das máquinas).
5) No destino execute os seguintes comandos:
$ sudo su
# ifconfig eth0 10.0.0.2 netmask 255.255.255.0
# nc -l -p 9000 | dd of=/dev/hda
Obs.: Após o último comando, o prompt deverá ficar piscando sem nenhuma informação, aguardando o envio dos dados. Mantenha esta máquina inativa, até o término completo da operação. Só será exibida alguma mensagem ao término do processamento. A única característica de presença de funcionamento é o LED de indicação de leitura/escrita do HD funcionando freneticamente.
6) Na origem execute os seguintes comandos:
$ sudo su
# ifconfig eth0 10.0.0.1 netmask 255.255.255.0
# dd if=/dev/hda | nc 10.0.0.2 9000
Assim como na máquina destino, após o último comando, o prompt deverá ficar piscando sem nenhuma informação. Observe o LED de indicação de leitura/escrita do HD em funcionamento.
7) Após o término da operação, será exibido uma mensagem do comando dd indicando a quantidade de dados copiados e o prompt normal aparecerá novamente na tela de ambas as máquinas (origem e destino).
Neste momento a cópia está completa, bastando dar o boot normal na máquina destino e testar o sistema copiado.
Como no meu caso eram várias máquinas destino, o que fiz em seguida foi:
a) selecionar a nova máquina de destino
b) executar os passos 3, 4, 5 e 6
Esta solução possibilita mais agilidade e eficiência no procedimento uma vez que não é necessário abrir nenhuma máquina, sendo apenas necessário o manuseio de cabo, ligando-o às máquinas desejadas (origem e destino).
Finalizo dizendo que nada é perfeito. Fazendo a cópia desta forma, obtive erro em 2% das máquinas, o que melhorou muito em comparação ao uso do ghost.
Descrição dos comandos utilizados nos passos 5 e 6:
- sudo su -> mudança para usuário root no liveCD
- ifconfig -> configuração da placa de rede (no exemplo deve estar na mesma subrede)
- dd -> comando para cópia idêntica (bit a bit) de um arquivo ou partição. No caso utilizei para a cópia do HD inteiro.
- nc -> (netcat) comando que realiza leitura/escrita através de conexões de rede.
A última linha nos passos 5 e 6, é uma combinação dos comandos "dd" e "nc", que fazem a copia de origem e destino, considerando que ambos estão em pontos de rede diferentes.
Obrigado, até a próxima.
quinta-feira, 2 de setembro de 2010
LINUXCON 2010 BRAZIL - Eu estive lá e vi o Torvalds !!!!
![]() | |
Linus Torvalds e Dorival M Machado Junior |
![]() |
Dorival M Machado Junior e Andrew Morton |
Poisé pessoal, ocorreu nos dias 31 de agosto a 1º de setembro de 2010 a Conferência Internacional sobre Linux - LINUXCON 2010, a qual teve uma seleta grade de palestras e tutoriais, além de estarem presentes no evento, o criado do Linux, Sr. Linus Torvalds bem como o mantenedor do Kernel, Sr. Andrew Morton. Para quem ainda não é familiarizado no mundo Linux, estes dois cidadãos é quem dão a palavra final de aprovação a cada nova versão de kernel lançada.
Não poderia deixar de publicar estas fotos que foram tiradas com muito custo, afinal, Torvalds e Morton estavam como astros de rock no meio da galera!
sexta-feira, 6 de agosto de 2010
Bloqueio de ultrasurf usando apenas iptables
INTRODUÇÃO:
A porta 443 é normalmente liberada pelo firewall para repasse, pois caso contrário, os usuários não conseguiriam acessar sites com áreas seguras como um internet banking por exemplo. Assim o Ultrasurf se utiliza deste recurso essencial, estabelecendo várias conexões por esta porta, criando vários "tuneis" que saem da máquina do indivíduo até a máquina firewall (a qual mantém as regras de bloqueio). O firewall então achando que se trata de uma conexão https, permite o repasse do fluxo de dados. Dali pra frente a conexão sai para possíveis proxys anonimos espalhados na internet ou coisa do tipo, permitindo assim a conexão a qualquer endereço de destino, ou seja, o firewall não tem conhecimento real do que se passa naquele fluxo de dados. O retorno das informações ocorre da mesma forma: os pacotes de resposta chegam e entram pelos mesmos "tuneis" estabelecidos na porta 443 do firewall e chegam à máquina do usuário sem maiores complicações. Um fator interessante é que até a velocidade de conexão usando o ultrasurf é bem aceitável, tornando esta ferramenta muito popular entre universitários e usuários de redes com muitos bloqueios.
COMO BLOQUEAR O ULTRASURF:
A única forma de bloquear o ultrasurf é tratando diretamente a porta 443 do firewall da rede. Assim, apresento duas formas de fazer o bloqueio:
a) bloquear totalmente as conexões pela porta 443, porém esta forma bloqueará também o acesso a qualquer site https.
b) Com o auxilio do cron, fazer um monitoramento constante do nível de uso da porta 443, analisando quantas conexões cada máquina da rede utiliza pela porta 443. Mediante esta análise, executar o bloqueio apenas para o IP da rede interna que está solicitando muitas conexões pela porta 443, o que é um fator relevante de uso suspeito do ultrasurf, afinal ninguém acessa 5 ou mais bancos simultaneamente ou coisa do tipo! Inicialmente, um total de 8 conexoes https seriam aceitáveis, basta agora adequar esse número à realidade da sua rede, definindo qual o máximo de conexões https que cada maquina pode fazer simultaneamente.
DESCRICAO E UTILIZAÇÃO DO SCRIPT.
Apresentação do script:
Através do parâmetro "verifica", o script faz a verificação IP por IP, analisando quantas conexões pela por 443 cada um possui. Caso esteja acima do limite permitido, uma regra é aplicada especialmente para aquele IP e a porta 443. O desbloqueio é feito através do parámetro "libera" do sccript.
------inicio---------------------------
#!/bin/bash
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# arquivo : 443-control.sh
# objetivo: tratar o uso suspeito do ultrasurf na porta 443
# autor : Dorival M Machado Junior ( dorivaljunior at gmail.com )
# versao : 2.0
# data : 07-mai-2010
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
I="1" # contador para o while
MAX="8" # maximo de coneccoes permitidas com a porta 443
DATA=$(/bin/date) # pega a data do sistema
IPTABLES="/usr/local/sbin/iptables"
LOG_ULTRASURF="/var/log/log.ultrasurf"
GREP="/bin/grep"
ECHO="/bin/echo"
IPTSTATE="/usr/sbin/iptstate"
TAIL="/usr/bin/tail"
AWK="/usr/bin/awk"
SORT="/usr/bin/sort"
UNIQ="/usr/bin/uniq"
WC="/usr/bin/wc"
LIBERA_443() # libera possiveis bloqueios de repasse a porta 443
{
while [ $I -lt "255" ]; do # enquanto i for menor que 255 faca
IP=$( $ECHO "192.168.100.$I@" ) # ip da maquina atual (o @ evita insercao de outros IPs erroneamente)
RESULTADO_BLOQUEIO=$( $IPTABLES -n -L FORWARD | tr -s [:blank:] @ | $GREP $IP | $GREP 443 )
if [ ! -z "$RESULTADO_BLOQUEIO" ] # se nao estiver vazio a variavel de resultado de bloqueio
then
$IPTABLES -D FORWARD -s $IP -p tcp --dport 443 -j DROP
$ECHO "$DATA: IP $IP liberado para fazer conexoes 443 novamente." >> $LOG_ULTRASURF
fi
let I++ # incrementa contador
done
echo "$DATA: Verificacao de necessidade de liberacao de IPs internos bloqueados para porta 443 realizada." >>
$LOG_ULTRASURF
}
VERIFICA_443() # verifica uso abusivo da porta 443
{
while [ $I -lt "255" ]; do # enquanto i for menor que 255 faca
IP=$( $ECHO "192.168.100.$I" ) # ip da maquina atual
# vendo quantas conexoes com destino a porta 443 foram estabelecidas para o IP
RESULTADO_IP=$( $IPTSTATE -s 192.168.100.$I -D 443 -1 | $TAIL -n +4 | $AWK '{print $2}' | $SORT | $UNIQ | $WC
-l )
if [ $RESULTADO_IP -gt $MAX ] # se o resultado eh maior que MAX, entao
then
$IPTABLES -I FORWARD -s $IP -p tcp --dport 443 -j DROP # bloqueia repasse do IP para a porta 443
$ECHO "$DATA: IP $IP utilizando $RESULTADO_IP conexoes pela porta 443; bloqueando acesso a esta
porta." >> $LOG_ULTRASURF # gerando resultado no arquivo de log
fi
let I++ # incrementa contador
done
echo "$DATA: Verificacao de uso suspeito do ultrasurf realizada." >> $LOG_ULTRASURF
}
AJUDA()
{
echo "$0 - Tratamento de uso suspeito do ultrasurf"
echo ""
echo "Opcoes:"
echo " verifica - verifica o uso abusivo de forward para a porta 443"
echo " libera - libera possiveis bloqueios de forward para a porta 443"
echo " help - ajuda"
echo ""
}
case "$1" in
verifica)
VERIFICA_443
;;
libera)
LIBERA_443
;;
help)
AJUDA
;;
*)
echo "Uso: $0 {verifica|libera|help}"
;;
esac
------fim---------------------------
1. Primeiramente preencha-o adquando à sua realidade.
2. Crie as seguintes regras no cron:
# crontab -e
*/10 * * * * /root/443-control.sh verifica
35 11 * * * /root/443-control.sh libera
A primeira regra faz a verificação a cada 10 minutos.
A segunda regra, faz a liberacao dos bloqueios realizados. Assim, defina um horário diário em que as regras de bloqueio serão limpas.
Até a próxima
Dorival M Machado Junior
São Sebastião do Paraíso-MG
A porta 443 é normalmente liberada pelo firewall para repasse, pois caso contrário, os usuários não conseguiriam acessar sites com áreas seguras como um internet banking por exemplo. Assim o Ultrasurf se utiliza deste recurso essencial, estabelecendo várias conexões por esta porta, criando vários "tuneis" que saem da máquina do indivíduo até a máquina firewall (a qual mantém as regras de bloqueio). O firewall então achando que se trata de uma conexão https, permite o repasse do fluxo de dados. Dali pra frente a conexão sai para possíveis proxys anonimos espalhados na internet ou coisa do tipo, permitindo assim a conexão a qualquer endereço de destino, ou seja, o firewall não tem conhecimento real do que se passa naquele fluxo de dados. O retorno das informações ocorre da mesma forma: os pacotes de resposta chegam e entram pelos mesmos "tuneis" estabelecidos na porta 443 do firewall e chegam à máquina do usuário sem maiores complicações. Um fator interessante é que até a velocidade de conexão usando o ultrasurf é bem aceitável, tornando esta ferramenta muito popular entre universitários e usuários de redes com muitos bloqueios.
COMO BLOQUEAR O ULTRASURF:
A única forma de bloquear o ultrasurf é tratando diretamente a porta 443 do firewall da rede. Assim, apresento duas formas de fazer o bloqueio:
a) bloquear totalmente as conexões pela porta 443, porém esta forma bloqueará também o acesso a qualquer site https.
REDE="192.168.100.0/24" #informe a rede interna
iptables -I FORWARD -s $REDE -p tcp --dport 443 -j DROP
b) Com o auxilio do cron, fazer um monitoramento constante do nível de uso da porta 443, analisando quantas conexões cada máquina da rede utiliza pela porta 443. Mediante esta análise, executar o bloqueio apenas para o IP da rede interna que está solicitando muitas conexões pela porta 443, o que é um fator relevante de uso suspeito do ultrasurf, afinal ninguém acessa 5 ou mais bancos simultaneamente ou coisa do tipo! Inicialmente, um total de 8 conexoes https seriam aceitáveis, basta agora adequar esse número à realidade da sua rede, definindo qual o máximo de conexões https que cada maquina pode fazer simultaneamente.
DESCRICAO E UTILIZAÇÃO DO SCRIPT.
Apresentação do script:
Através do parâmetro "verifica", o script faz a verificação IP por IP, analisando quantas conexões pela por 443 cada um possui. Caso esteja acima do limite permitido, uma regra é aplicada especialmente para aquele IP e a porta 443. O desbloqueio é feito através do parámetro "libera" do sccript.
------inicio---------------------------
#!/bin/bash
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# arquivo : 443-control.sh
# objetivo: tratar o uso suspeito do ultrasurf na porta 443
# autor : Dorival M Machado Junior ( dorivaljunior at gmail.com )
# versao : 2.0
# data : 07-mai-2010
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
I="1" # contador para o while
MAX="8" # maximo de coneccoes permitidas com a porta 443
DATA=$(/bin/date) # pega a data do sistema
IPTABLES="/usr/local/sbin/iptables"
LOG_ULTRASURF="/var/log/log.ultrasurf"
GREP="/bin/grep"
ECHO="/bin/echo"
IPTSTATE="/usr/sbin/iptstate"
TAIL="/usr/bin/tail"
AWK="/usr/bin/awk"
SORT="/usr/bin/sort"
UNIQ="/usr/bin/uniq"
WC="/usr/bin/wc"
LIBERA_443() # libera possiveis bloqueios de repasse a porta 443
{
while [ $I -lt "255" ]; do # enquanto i for menor que 255 faca
IP=$( $ECHO "192.168.100.$I@" ) # ip da maquina atual (o @ evita insercao de outros IPs erroneamente)
RESULTADO_BLOQUEIO=$( $IPTABLES -n -L FORWARD | tr -s [:blank:] @ | $GREP $IP | $GREP 443 )
if [ ! -z "$RESULTADO_BLOQUEIO" ] # se nao estiver vazio a variavel de resultado de bloqueio
then
$IPTABLES -D FORWARD -s $IP -p tcp --dport 443 -j DROP
$ECHO "$DATA: IP $IP liberado para fazer conexoes 443 novamente." >> $LOG_ULTRASURF
fi
let I++ # incrementa contador
done
echo "$DATA: Verificacao de necessidade de liberacao de IPs internos bloqueados para porta 443 realizada." >>
$LOG_ULTRASURF
}
VERIFICA_443() # verifica uso abusivo da porta 443
{
while [ $I -lt "255" ]; do # enquanto i for menor que 255 faca
IP=$( $ECHO "192.168.100.$I" ) # ip da maquina atual
# vendo quantas conexoes com destino a porta 443 foram estabelecidas para o IP
RESULTADO_IP=$( $IPTSTATE -s 192.168.100.$I -D 443 -1 | $TAIL -n +4 | $AWK '{print $2}' | $SORT | $UNIQ | $WC
-l )
if [ $RESULTADO_IP -gt $MAX ] # se o resultado eh maior que MAX, entao
then
$IPTABLES -I FORWARD -s $IP -p tcp --dport 443 -j DROP # bloqueia repasse do IP para a porta 443
$ECHO "$DATA: IP $IP utilizando $RESULTADO_IP conexoes pela porta 443; bloqueando acesso a esta
porta." >> $LOG_ULTRASURF # gerando resultado no arquivo de log
fi
let I++ # incrementa contador
done
echo "$DATA: Verificacao de uso suspeito do ultrasurf realizada." >> $LOG_ULTRASURF
}
AJUDA()
{
echo "$0 - Tratamento de uso suspeito do ultrasurf"
echo ""
echo "Opcoes:"
echo " verifica - verifica o uso abusivo de forward para a porta 443"
echo " libera - libera possiveis bloqueios de forward para a porta 443"
echo " help - ajuda"
echo ""
}
case "$1" in
verifica)
VERIFICA_443
;;
libera)
LIBERA_443
;;
help)
AJUDA
;;
*)
echo "Uso: $0 {verifica|libera|help}"
;;
esac
------fim---------------------------
1. Primeiramente preencha-o adquando à sua realidade.
2. Crie as seguintes regras no cron:
# crontab -e
*/10 * * * * /root/443-control.sh verifica
35 11 * * * /root/443-control.sh libera
A primeira regra faz a verificação a cada 10 minutos.
A segunda regra, faz a liberacao dos bloqueios realizados. Assim, defina um horário diário em que as regras de bloqueio serão limpas.
Até a próxima
Dorival M Machado Junior
São Sebastião do Paraíso-MG
sexta-feira, 16 de julho de 2010
INSTALAÇÃO DO HAMACHI NO LINUX EM 3 PASSOS:
1. Baixar o pacote do Hamachi para Linux:
# wget -c http://files.hamachi.cc/linux/hamachi-0.9.9.9-20-lnx.tar.gz
2. Descompactar e instalar:
# tar zxvf hamachi-0.9.9.9-20-lnx.tar.gz
# cd hamachi-0.9.9.9-20-lnx
# make
# make install
3. Gerar par de chaves RSA:
# hamachi-init
Feitos estes procedimentos a instalação está concluida. O próximo passo é a conexão. Para isso criei um script que automatiza esta tarefa.
------início do script-----------
#!/bin/bash
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# objetivo: fazer a conexao do hamachi
# versao: 1.0
# autor: Dorival M Machado Junior ( dorivaljunior at gmail dot com )
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Variaveis utilizadas
TUNCFG="/sbin/tuncfg"
HAMACHI="/usr/bin/hamachi"
NICK="NOMEDOHOST"
GRUPO="NOME DO GRUPO QUE DESEJA ENTRAR"
SENHADOGRUPO="senhasupersecreta"
START()
{
echo "Iniciando $TUNCFG"
$TUNCFG
echo "Iniciando servico hamachi"
$HAMACHI start
echo "Definindo nick name para $NICK"
$HAMACHI set-nick $NICK
echo "Logando no HAMACHI"
$HAMACHI login
echo "Entrando no grupo $GRUPO"
$HAMACHI join $GRUPO $SENHADOGRUPO
echo "Ficando online para a rede"
$HAMACHI go-online $GRUPO
echo "Atualizando a lista de nome das maquinas do grupo"
$HAMACHI get-nicks
echo "Listando as maquinas do grupo"
$HAMACHI list
}
STOP()
{
$HAMACHI logout
$HAMACHI stop
}
case $1 in
start)
START
;;
stop)
STOP
;;
*)
echo "Sintaxe: $0 {start|stop}"
;;
esac
-------fim do script-------------
A sintaxe de utilização é simples:
hamachi-control.sh start para iniciar
hamachi-control.sh stop para finalizar
A saída do comando de incialização do script deverá ficar da seguinte forma:
root@djunior-laptop:~# ./hamachi-control.sh start
Iniciando /sbin/tuncfg
tuncfg: already running
Iniciando servico hamachi
Starting Hamachi hamachi-lnx-0.9.9.9-20 .. ok
Definindo nick name para NICKDOHOST
Setting nickname .. ok
Logando no HAMACHI
Already logged in.
Entrando no grupo NOMEDOGRUPO
Joining NOMEDOGRUPO .. ok
Ficando online para a rede
Going online in NOMEDOGRUPO .. ok
Atualizando a lista de nome das maquinas do grupo
Retrieving peers' nicknames ..
Listando as maquinas do grupo
* [NOMEDOGRUPO]
* X.XX.XXX.XXX
X.XX.XXX.XXX
X.XX.XXX.XXX
* X.XX.XXX.XXX
root@djunior-laptop:~#
obs.: todo o procedimento de instalação e login é feito como root, porém os usuários normais do sistema teem acesso por padrão a essa conexão VPN.
# wget -c http://files.hamachi.cc/linux/hamachi-0.9.9.9-20-lnx.tar.gz
2. Descompactar e instalar:
# tar zxvf hamachi-0.9.9.9-20-lnx.tar.gz
# cd hamachi-0.9.9.9-20-lnx
# make
# make install
3. Gerar par de chaves RSA:
# hamachi-init
Feitos estes procedimentos a instalação está concluida. O próximo passo é a conexão. Para isso criei um script que automatiza esta tarefa.
------início do script-----------
#!/bin/bash
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# objetivo: fazer a conexao do hamachi
# versao: 1.0
# autor: Dorival M Machado Junior ( dorivaljunior at gmail dot com )
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Variaveis utilizadas
TUNCFG="/sbin/tuncfg"
HAMACHI="/usr/bin/hamachi"
NICK="NOMEDOHOST"
GRUPO="NOME DO GRUPO QUE DESEJA ENTRAR"
SENHADOGRUPO="senhasupersecreta"
START()
{
echo "Iniciando $TUNCFG"
$TUNCFG
echo "Iniciando servico hamachi"
$HAMACHI start
echo "Definindo nick name para $NICK"
$HAMACHI set-nick $NICK
echo "Logando no HAMACHI"
$HAMACHI login
echo "Entrando no grupo $GRUPO"
$HAMACHI join $GRUPO $SENHADOGRUPO
echo "Ficando online para a rede"
$HAMACHI go-online $GRUPO
echo "Atualizando a lista de nome das maquinas do grupo"
$HAMACHI get-nicks
echo "Listando as maquinas do grupo"
$HAMACHI list
}
STOP()
{
$HAMACHI logout
$HAMACHI stop
}
case $1 in
start)
START
;;
stop)
STOP
;;
*)
echo "Sintaxe: $0 {start|stop}"
;;
esac
-------fim do script-------------
A sintaxe de utilização é simples:
hamachi-control.sh start para iniciar
hamachi-control.sh stop para finalizar
A saída do comando de incialização do script deverá ficar da seguinte forma:
root@djunior-laptop:~# ./hamachi-control.sh start
Iniciando /sbin/tuncfg
tuncfg: already running
Iniciando servico hamachi
Starting Hamachi hamachi-lnx-0.9.9.9-20 .. ok
Definindo nick name para NICKDOHOST
Setting nickname .. ok
Logando no HAMACHI
Already logged in.
Entrando no grupo NOMEDOGRUPO
Joining NOMEDOGRUPO .. ok
Ficando online para a rede
Going online in NOMEDOGRUPO .. ok
Atualizando a lista de nome das maquinas do grupo
Retrieving peers' nicknames ..
Listando as maquinas do grupo
* [NOMEDOGRUPO]
* X.XX.XXX.XXX
X.XX.XXX.XXX
X.XX.XXX.XXX
* X.XX.XXX.XXX
root@djunior-laptop:~#
obs.: todo o procedimento de instalação e login é feito como root, porém os usuários normais do sistema teem acesso por padrão a essa conexão VPN.
quarta-feira, 14 de julho de 2010
Revisão atualizada de instalação do Iptables + Layer7 no Debian
O projeto Layer7 é um patch que permite ao Netfilter tratar a camada de aplicação, logo poderá tratar os protocolos desta camada. No meu caso, instalei justamente para controlar MSN e transferência de arquivos pelo MSN. Porém ele trata muitos outros protocolos. Para conhecê-los, basta acessar o link http://l7-filter.sourceforge.net/protocols.
Kernel 2.6.25.2: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.2.tar.bz2
Protocolos do Layer7 atualizados até 28/05/2009: http://downloads.sourceforge.net/project/l7-filter/Protocol%20definitions/2009-05-28/l7-protocols-2009-05-28.tar.gz?use_mirror=ufpr&ts=1278938145
Existem diversos tutoriais na internet que tratam sobre esta instalação de layer7 com iptables, porém devido a atualização de versões, entre outros fatores, sempre é bom fazer uma revisão atualizando os dados e melhorando em alguns pontos. Este artigo tem por objetivo esta revisão.
Caso queira baixar todos os pacotes necessários antes de iniciar, segue os links diretos para download:
Layer 7 versão 2.21: http://downloads.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.21/netfilter-layer7-v2.21.tar.gz?use_mirror=ufpr&ts=1278937632
Kernel 2.6.25.2: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.2.tar.bz2
Protocolos do Layer7 atualizados até 28/05/2009: http://downloads.sourceforge.net/project/l7-filter/Protocol%20definitions/2009-05-28/l7-protocols-2009-05-28.tar.gz?use_mirror=ufpr&ts=1278938145
1. Instalar pacotes necessários (caso falte alguma dependência, basta instalar ou se preferir faça a instalação dos pacotes abaixo usando o aptitude):
# apt-get install libncurses5-dev kernel-package gcc
2. Criar diretório para armazenar pacotes
# mkdir /opt/layer7
# cd /opt/layer7
3. Baixar e descompactar o pacote do projeto Layer7 (utilizei a versão 2.21)
# tar zxvf netfilter-layer7-v2.21.tar.gz
4. Baixar e descompactar o fonte do Kernel (utilizei a versão 2.6.25.2)
# cd /root/
# cd /usr/src
# tar jxvf /root/linux-2.6.25.2.tar.bz2
5. Aplicar o patch do layer7 no novo kernel:
# cd /usr/src/linux-2.6.25.2
# patch -p1 < /opt/layer7/netfilter-layer7.v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch
6. Aproveitar configuração do kernel atual:
Caso queira usar as configurações do kernel atual no novo kernel, utilize os comandos abaixo. Provavelmente será necessário responder várias perguntas, referente a novos itens inclusos no novo kernel e que não existiam no atual. Para estas perguntas, Caso não saiba as respostas pressione então de fora a fora, pois depois você poderá rever as opções na próxima etapa).
# cp /boot/config-2.6[pressione o tab] /.config
# make oldconfig
7. Configurar o novo kernel:
# make menuconfig
Acesse os submenus como segue:
- Networking
- Networking options
- Network packet filtering framework (netfilter)
- Core Netfilter Configuration
Marque os módulos referente ao layer 7 (na dúvida marque todos os módulos)
volte 1 nível e entre no submenu:
- IP: Netfilter Configuration
marque o módulo “IPv4 connection tracking support (required for NAT)”
marque o módulo “Full NAT” e demais sub-ítens desse módulo
obs.: Em caso de instalar sem utilizar configuração de kernel anterior, convém dar uma passada em todo o submenu de Networking afim de verificar se opções referente a bridge, nat, e afins estejam selecionados.
Terminado, salve e saia.
8. Compilar o novo kernel e criar um pacote .deb do mesmo:
# make-kpkg –initrd kernel_image
obs.: Caso esteja fazendo a atualização de um servidor remoto, por questões de segurança convém deixar este processamento em segundo plano.
# make-kpkg –initrd kernel_image &
Saia para tomar um merecido café pois esta etapa demora um tempo considerável.
Obs.: A instalação manual também pode ser realizada, mas como se trata de debian, não precisamos ficar “reiventando a roda”, vamos gerar o pacote e deixar o dpkg fazer o resto. Mas caso queira fazer manualmente também funciona.
9. Instalar o novo kernel:
# dpkg -i ../linux-image-2.6.25[pressione TAB].deb
10. Reiniciar a máquina com o novo kernel:
# shutdown -r now
obs.: caso aconteça algum erro, dê boot com o kernel antigo e então remova este novo kernel para fazer melhorias:
# apt-get remove --purge linux-image-2.6.25.2
(para ver o nome correto do pacote faça: dpkg -l | grep linux-image)
11. Baixar o Iptables (utilizei a versão 1.4.0, pois as posteriores não obtive sucesso)
# cd /opt/layer7
12. Descompactar o fonte e aplicar o patch:
# cd /opt/layer7
# tar jxvf iptables-1.4.0.tar.bz2
# cd iptables-1.4.0
# patch -p1 < /opt/layer7/netfilter-layer7-v2.1/iptables-1.4-for-kernel-2.6.20forward-layer7-2.21.patch
# chmod 755 extension/.layer7-test
13. Remover o iptables antigo e instalar a nova versão:
# aptitude purge iptables
# make KERNEL_DIR=/usr/src/linux-2.6.25 BINDIR=/sbin LIBDIR=/lib
# make install KERNEL_DIR=/usr/src/linux-2.6.25 BINDIR=/sbin LIBDIR=/lib
Verificar se tudo correu bem:
# iptables -n -L
# iptables -n -L -t nat
# ls -l /lib/iptables/*layer7*
14. Baixar e instalar os pacotes de protocolos do Layer7:
# cd /opt/layer7
# tar zxvf l7-protocols-2009-05-28.tar.gz
# cd l7-protocols-2009-05-28
# make install
# ls /etc/l7-protocols/protocols
FIM.
DICAS IMPORTANTES A RESPEITO DO LAYER7
Dica 1: Se você já tem o layer7 funcionando, e queira apenas fazer atualizações nos protocolos suportados, basta fazer apenas o ítem 14, observando é claro o nome do novo arquivo de protocolos. O que acontece é apenas copiar os novos pacotes de protocolos em cima dos antigos. Então convém fazer um backup dos arquivos dos protocolos antigos.
Dica 2: nem sempre todos os pacotes mais recentes envolvidos funcionam plenamente em conjunto, então observe as versões de kernel, iptables e layer7 compatíveis antes fazer as compilações.
Assinar:
Postagens (Atom)