Olá a todos,
Meu último desafio (nem foi tão grande assim) foi conectar uma unidade do litoral à nossa sede. Os usuários se conectavam via PPTP, mas não estava muito legal dessa forma. A solução encontrada por mim era criar um tunel site-to-site através de IPSec.
Para a unidade, foi utilizado um roteador Cisco RV042 pelo fato de ser uma unidade bem pequena não tendo muito espaço para comportar equipamentos maiores (como é de minha preferência). Na sede eu utilizei uma máquina com Ubuntu Server.
Na ponta da sede o que eu fiz foi instalar o pacote "OpenSwan":
apt-get install openswan
E editar os seguintes arquivos:
/etc/ipsec.conf
config setup
plutodebug=all
#nat_traversal=on # Caso a máquina que conectará esteja atrás de um firewall
oe=off
protostack=netkey
interfaces=%none
conn Unidade # Trocar o nome "Unidade" para qualquer outro que desejar
left=0.0.0.0 # IP público local
leftsourceip=1.1.1.1 # IP da máquina que fará a conexão
leftsubnet=1.1.1.0/24 # IP da rede que a outra ponta deverá enxergar
leftnexthop=0.0.0.1 # gateway do IP público local
right=2.2.2.2 # IP público da unidade
rightsourceip=3.3.3.3 # IP da máquina da unidade que fará a conexão
rightsubnet=3.3.3.0/24 # IP da rede da unidade
rightnexthop=2.2.2.1 # Gateway do IP público da unidade
authby=secret
auto=start
auth=esp
rekey=yes
keyingtries=0
keyexchange=ike
ike=3des-md5;modp1024
ikelifetime=3600s
esp=3des-md5;modp1024
keylife=28800s
pfs=no
Em seguida devemos configurar o arquivo /etc/ipsec.secrets (no ubuntu, o arquivo é /var/lib/openswan/ipsec.secrets.inc)
0.0.0.0 %any : PSK "chavequevocequiser"
A configuração acima permite que qualquer máquina que tenha as configurações adequadas e a mesma chave configurada acima se conecte no tunel. Caso não queira essa configuração basta alterar "%any" para o IP público da outra ponta.
Caso o tunel esteja configurado no firewall, é necessário adicionar a seguinte regra:
iptables -A INPUT -p udp --dport 500 -j accept
Caso esteja em uma máquina atrás do firewall, a regra muda para:
iptables -t nat -A PREROUTING -p udp -d ip_publico --dport 500 -j DNAT --to ip_da_máquina
E também essa:
iptables -t nat -A PREROUTING -p udp -d ip_publico --dport 4500 -j DNAT --to ip_da_máquina
Agora é só configurar a outra ponta que pode ser outra máquina linux ou um equipamento como o Cisco RV042, utilizando as mesmas configurações porém não esquecendo de fazer as devidas alterações de IPs.
Lembrando que essa é uma VPN básica, existem muito mais recursos de segurança a serem explorados, e cabe a cada um decidir o que é necessário para cada caso.
Espero que tenha sido útil,
Até a próxima!!!
quinta-feira, 21 de fevereiro de 2013
quarta-feira, 9 de janeiro de 2013
Script Para Redundancia Atualizado
Olá a todos!!!
Criei uma versão melhor do script de redundância de links dedicados, e a diferença agora é que ele testa apenas o link principal e caso esteja offline, ele muda para o link secundário. Quando o link principal volta, o script retorna para ele.
#!/bin/bash
# Script de redundancia de links dedicados
# Desenvolvido por Rodrigo Manzzato Alves Garcia em 08/10/2012
# Atualizado em 20/12/2012
PATH=/sbin:/usr/sbin:/bin:/usr/bin
# Informe abaixo o gateway principal
GW_PRIMARIO=""
# Informe abaixo os IPs primários de teste
IP_TESTE_PRIMARIO1=""
IP_TESTE_PRIMARIO2=""
# Informe abaixo o IP do link primario
IP_PRIMARIO_ROUTER=""
# Informe abaixo o gateway do link secundario
GW_SECUNDARIO=""
# Informe abaixo o IP do link secundario
IP_SECUNDARIO_ROUTER=""
# Armazenar gateway padrao na variavel GW_ATUAL
GW_ATUAL=`netstat -nr | awk '$1 ~ /^[0.0.0.0]/ {print $2}'`
# ATENCAO!!! A secao abaixo so deve ser alterada com absoluta certeza de que sabe o que esta fazendo!!!
# Funcao para troca do gateway
function GATEWAY()
{
netstat -nr | awk -v gw2="$GW2" -v gw="$GW" 'NR > 1 {if ($2 == gw2) print "route add -net " $1 FS "netmask " $3 " gw " gw > "/etc/network/gateway";}'
netstat -nr | awk -v gw2="$GW2" 'NR > 2 {if ($2 == gw2) print "route del -net " $1 FS "netmask " $3 " gw " gw2 > "/etc/network/gateway_del";}'
while read ROTA2
do
echo -e "`$ROTA2`"
done < /etc/network/gateway_del
while read ROTA
do
echo -e "`$ROTA`"
done < /etc/network/gateway
}
# Backup das rotas existentes
echo "#!/bin/bash" > /etc/network/rotas.sh
netstat -nr | awk 'length($2) > 7' | awk 'NR > 1 {print "route add -net " $1 FS "netmask " $3 " gw " $2}' >> /etc/network/rotas.sh
# Teste das redes
ping -c4 $IP_TESTE_PRIMARIO1 -I $IP_PRIMARIO_ROUTER >> /dev/null
if [ $? = "0" ]
then
if [ $GW_ATUAL = "$GW_PRINCIPAL" ]
then
exit
else # Troca de Gateway caso o link atual não for o principal
GW=$GW_PRIMARIO
GW2=$GW_SECUNDARIO
GATEWAY
echo `date` "Rede Principal Ativada" >> /etc/network/gateway.log
exit
fi
else
ping -c4 $IP_TESTE_PRIMARIO2 -I $IP_PRIMARIO_ROUTER >> /dev/null
if [ $? = "0" ]
then
exit
else # Troca de Gateway caso o link atual não estiver respondendo
GW=$GW_SECUNDARIO
GW2=$GW_PRIMARIO
GATEWAY
echo `date` "Rede Secundaria Ativada" >> /etc/network/gateway.log
exit
fi
fi
Espero que seja útil!!!
Até a próxima!!!
Criei uma versão melhor do script de redundância de links dedicados, e a diferença agora é que ele testa apenas o link principal e caso esteja offline, ele muda para o link secundário. Quando o link principal volta, o script retorna para ele.
#!/bin/bash
# Script de redundancia de links dedicados
# Desenvolvido por Rodrigo Manzzato Alves Garcia em 08/10/2012
# Atualizado em 20/12/2012
PATH=/sbin:/usr/sbin:/bin:/usr/bin
# Informe abaixo o gateway principal
GW_PRIMARIO=""
# Informe abaixo os IPs primários de teste
IP_TESTE_PRIMARIO1=""
IP_TESTE_PRIMARIO2=""
# Informe abaixo o IP do link primario
IP_PRIMARIO_ROUTER=""
# Informe abaixo o gateway do link secundario
GW_SECUNDARIO=""
# Informe abaixo o IP do link secundario
IP_SECUNDARIO_ROUTER=""
# Armazenar gateway padrao na variavel GW_ATUAL
GW_ATUAL=`netstat -nr | awk '$1 ~ /^[0.0.0.0]/ {print $2}'`
# ATENCAO!!! A secao abaixo so deve ser alterada com absoluta certeza de que sabe o que esta fazendo!!!
# Funcao para troca do gateway
function GATEWAY()
{
netstat -nr | awk -v gw2="$GW2" -v gw="$GW" 'NR > 1 {if ($2 == gw2) print "route add -net " $1 FS "netmask " $3 " gw " gw > "/etc/network/gateway";}'
netstat -nr | awk -v gw2="$GW2" 'NR > 2 {if ($2 == gw2) print "route del -net " $1 FS "netmask " $3 " gw " gw2 > "/etc/network/gateway_del";}'
while read ROTA2
do
echo -e "`$ROTA2`"
done < /etc/network/gateway_del
while read ROTA
do
echo -e "`$ROTA`"
done < /etc/network/gateway
}
# Backup das rotas existentes
echo "#!/bin/bash" > /etc/network/rotas.sh
netstat -nr | awk 'length($2) > 7' | awk 'NR > 1 {print "route add -net " $1 FS "netmask " $3 " gw " $2}' >> /etc/network/rotas.sh
# Teste das redes
ping -c4 $IP_TESTE_PRIMARIO1 -I $IP_PRIMARIO_ROUTER >> /dev/null
if [ $? = "0" ]
then
if [ $GW_ATUAL = "$GW_PRINCIPAL" ]
then
exit
else # Troca de Gateway caso o link atual não for o principal
GW=$GW_PRIMARIO
GW2=$GW_SECUNDARIO
GATEWAY
echo `date` "Rede Principal Ativada" >> /etc/network/gateway.log
exit
fi
else
ping -c4 $IP_TESTE_PRIMARIO2 -I $IP_PRIMARIO_ROUTER >> /dev/null
if [ $? = "0" ]
then
exit
else # Troca de Gateway caso o link atual não estiver respondendo
GW=$GW_SECUNDARIO
GW2=$GW_PRIMARIO
GATEWAY
echo `date` "Rede Secundaria Ativada" >> /etc/network/gateway.log
exit
fi
fi
Espero que seja útil!!!
Até a próxima!!!
quarta-feira, 2 de janeiro de 2013
Plugin para Nagios
Olá a Todos!!!
Recentemente instalei o Nagios a fim de monitorar meus servidores e roteadores. Senti falta porém de um plugin que checasse a memória ram. Desenvolvi então um plugin em shell script chamado "check_ram":
#!/bin/bash
# Desenvolvido por Rodrigo Garcia em 16/01/2013
# Sobrevivi ao fim do mundo!!!
PATH=/sbin:/usr/sbin:/bin:/usr/bin
TMEM=`free -m | awk 'NR == 2 {print $2}'`
UMEM=`free -m | awk 'NR == 3 {print $3}'`
FMEM=`free -m | awk 'NR == 3 {print $4}'`
PMEM=`echo $((UMEM * 100 / $TMEM))`
if [ $PMEM -lt $1 ]
then
echo "Total(MB)= $TMEM, Uso(MB)= $PMEM%, Livre(MB)= $FMEM OK"
exit 0
elif [ $PMEM -ge $1 ] && [ $PMEM -lt $2 ]
then
echo "Total(MB)= $TMEM, Uso= $PMEM% , Livre(MB)= $FMEM Atencao!!!"
exit 1
elif [ $PMEM -ge $1 ]
then
echo "Total(MB)= $TMEM, Uso(MB)= $PMEM%, Livre(MB)= $FMEM Critico!!!"
exit 2
fi
Sua execução deve conter como parâmetro os níveis de warning e critical pelo valor da porcentagem, por exemplo:
./check_ram 80 90
É isso aí, espero que seja útil!!!
Até a próxima!!!
Recentemente instalei o Nagios a fim de monitorar meus servidores e roteadores. Senti falta porém de um plugin que checasse a memória ram. Desenvolvi então um plugin em shell script chamado "check_ram":
#!/bin/bash
# Desenvolvido por Rodrigo Garcia em 16/01/2013
# Sobrevivi ao fim do mundo!!!
PATH=/sbin:/usr/sbin:/bin:/usr/bin
TMEM=`free -m | awk 'NR == 2 {print $2}'`
UMEM=`free -m | awk 'NR == 3 {print $3}'`
FMEM=`free -m | awk 'NR == 3 {print $4}'`
PMEM=`echo $((UMEM * 100 / $TMEM))`
if [ $PMEM -lt $1 ]
then
echo "Total(MB)= $TMEM, Uso(MB)= $PMEM%, Livre(MB)= $FMEM OK"
exit 0
elif [ $PMEM -ge $1 ] && [ $PMEM -lt $2 ]
then
echo "Total(MB)= $TMEM, Uso= $PMEM% , Livre(MB)= $FMEM Atencao!!!"
exit 1
elif [ $PMEM -ge $1 ]
then
echo "Total(MB)= $TMEM, Uso(MB)= $PMEM%, Livre(MB)= $FMEM Critico!!!"
exit 2
fi
Sua execução deve conter como parâmetro os níveis de warning e critical pelo valor da porcentagem, por exemplo:
./check_ram 80 90
É isso aí, espero que seja útil!!!
Até a próxima!!!
Assinar:
Postagens (Atom)