Páginas

quinta-feira, 21 de fevereiro de 2013

IPSec

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!!!

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!!!

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!!!