domingo, dezembro 20, 2009

Atividades transferidas

Olá pessoal

As próximas atividades serão publicadas em www.tiagohpires.eti.br . Dominio próprio, servidor dedicado e muitdas novidades

Até a próxima

terça-feira, dezembro 23, 2008

Ativando o ipfw nat no Kernel do FreeBSD

O NAT já salvou muitos administradores pelo mundo a fora pela escassez do Endereço IP IPv4. Enquanto ainda não há adesão em massa do IPv6 vamos nos arrumando.

Compilando o kernel do FreeBSD para ativar o ipfw nat é simples:
Nas séries FreeBSD 6x siga http://markmail.org/message/duwvruotxds475w4 .

Agora se estiver usando FreeBSD 7x lá vai o procedimento.

Em seu arquivo de configuração do kernel adicione:

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=1000
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_FORWARD
options IPFIREWALL_NAT # Aqui é ativo o NAT no kernel
options LIBALIAS # Necessário para o NAT
options IPDIVERT
options DUMMYNET
options HZ=1000

# cd /usr/src
# make buildkernel KERNCONF=SEUKERNEL
# make installkernel KERNCONF=SEUKERNEL
# reboot

Após subir a máquina você pode realizar alguns testes :

# ipfw nat 1 config if re0

# ipfw nat show config

Agora a idéia é documentar e trazer ambientes como balanceamento de saída e até de entrada.

Tiago

NATD já era agora é ipfw nat no FreeBSD

Olá pessoal


O ipfw nat para quem não sabe é um módulo nativo, está no kernel, que faz o NAT do tráfego de saída e também redirecionamento de portas e conexões.
O interessante é que todo mundo usa o divert com ipfw, assim dependendo do natd rodando. Dizem que o ipfw nat é mais rápido por rodar direto sob o controle do kernel, por isso estou testando a parada de sucesso para ver onde vai dar.

Abaixo está as regras de ipfw nat que consegui testar:

#!/bin/sh

# Usando a funçao de NAT do ipfw disponivel no kernel
# Por Tiago Pires

# Liberando tráfego para o loopback

ipfw -q add pass all from any to any via lo0
ipfw -q add deny all from any to 127.0.0.0/8
ipfw -q add deny ip from 127.0.0.0/8 to any

# Criando uma instancia de Redirecionamento de portas ( Tudo que
# chega na porta 3389 pela
# interface externa vai para o host 192.168.0.2)

ipfw -q nat 1 config if le0 redirect_port tcp 192.168.0.2:3389 3389

# Criando uma instancia de NAT na interface de saida

ipfw -q nat 2 config if le0

# Relaciono a regra de NAT de redicionamento com ipfw , assim
# permitindo a conexão na porta

ipfw add nat 1 ip from any to any

# Relaciono a regra NAT criada com o ipfw, assim permitindo
# o trafego

ipfw add nat 2 log ip from any to any

# Libera o tráfego

ipfw add allow ip from any to any

Logo logo posto como está o andamento dos testes

sexta-feira, dezembro 12, 2008

Iproute avançado

route add default eeeeeee ????

Para o pessoal que tiver algum problema com meu artigo ( http://www.vivaolinux.com.br/artigo/Roteamento-de-entrada-saida-com-iproute-e-iptables/) de roteamento com 2 links de entrada, abaixo está uma dica valiosa:

Se você está marcando o pacote que entra, mas o danado não volta pelo link que entrou e sua estrutura está mais ou menos assim:

ip rule add prio 22 fwmark 4 from 192.168.1.3 table link2
ip rule add prio 23 fwmark 5 from 192.168.1.2 table link1


Faça dessa maneira:

ip rule add prio 22 fwmark 4 table link2
ip rule add prio 23 fwmark 5 table link1


Tire o from e seja feliz.

att

Tiago

Retorno dos Posts

Olá pessoal

Estarei com tempo até no fim de ano para escrever vários posts então aguardem.........

FreeBSD The Power To Serve .


att

Tiago

sábado, novembro 22, 2008

Certified LPIC-1





Pessoal é com grande satisfação que venho informar que sou agora Certified LPIC-1 .

Por muitos anos ouvi vários especilistas em Linux falando dessa Certificação, que é uma das principais e mais bem vista no mundo. É mas como está no site www.lpi.org só passa se você estiver preparado para responder as perguntas dos exames. Não adianta tentar decorar ( não dá é muita , muita teoria ).

Em primeira mão antes de tentar fazer esses exames da LPI, voltamos a 3 anos atráz. Eu tentei me certificar em Mandriva Linux e não deu fiquei por 3 perguntas ( caiu muito shell script ). Mas daquele dia para cá tentei me especializar em várias áreas que pequei naquele exame.

Como moro no interior de São Paulo marquei a prova na 4Linux na capital. Fiquei 2 semanas em casa me reciclando com o conteúdo que iria cair nos exames. Sim exames 101 e 102 ( é eu acho que deveria ter tentado um exame apenas , pois fiquei com algumas sequelas ) . Mas foram mais ou menos 12 horas por dia de estudo diário ( Domingo a Domingo sem parar), sem sair, sem olhar como o tempo estava, tinha certos momentos que eu parava e pensava " tem que ter uma certa opinião para fazer isso ", mas eu pensava que poderia terminar tudo isso com sucesso.

As fontes de estudo :

Certificação Linux LPI - 101 e 102 - O'Reilly
Certificação Linux - 101 e 102 - Uirá Ribeiro
Linux Pro LPI - 101 e 102 - Luciano Antonio Siqueira
O FocaLinux - Gleydson
Obs: Fonte mais importante - A experiência ( Não é só tentar decorar , você deve conhecer estar envolvido )

Como cada livro explica de uma maneira direfente de cada tópico exigido, estudei por todos eles para não ficar em dúvida.

Depois vieram os simulados que ajudaram muito:

PenguinBrain - É um software que simula o ambiente de cabine de exame.
testking - PDFs com perguntas e explicação de cada uma.

O resultado:

No exame 101 obtive 700 pontos de 800 .
No exame 102 obtive 760 pontos de 800.

Bom é isso pessoal, obrigado a todos que me ajudaram de alguma forma.

domingo, novembro 09, 2008

Roteamento de Entrada/SaÍda com iproute e iptables

Bom pessoal depois de muito estudo em cima do iproute e iptables para fazer funcionar o roteamento avançado de entrada e saída para redirecionamento de portas por mais de um link de internet resolvi postar a solução.

Na Internet tem muita documentação relacionada com o balanceamento de saída com 2 ou mais links de internet. Mas nenhuma documentação relacionada quando você quer ter seus servidores ( email, web, terminal service e etc) respondendo para a Internet por todos seus links disponíveis.

Essa solução resolve seu problema da seguinte maneira:

- Sua empresa tem 2 link de Internet ou mais
- Você tem servidores disponibilizando recursos para a Internet como (smtp,pop3,web, rdp e etc)
- Quer que seja transparente para todos quando um link de Internet parar de funcionar, você pode via dns round-robin fazer que um host responda por 2 IPs válidos ou mais. Isso seria ótimo para seu servidor de email. São 2 IPs respondendo por smtp e pop3 e caso um link caia o outro fica respondendo normalmente. O DNS é nosso amigo.

Veja a topologia abaixo que iremos nos basear para criar as regras de iptables e iproute:



Na topologia acima temos 3 servidores em nossa rede disponibilizando serviços web,pop3,smtp e terminal service a Internet.
Na configuração da zona de Dns do dominio utilizamos round-robin para todos os serviços. Cada serviço tem um nome e 2 IPs válidos respondendo por esse nome de Dns.

Abaixo está o script que usa iptables e iproute, qualquer problema encontrado com ele por favor relatem para ser corrigido. Estou trabalhando em uma outra versão desse script para ficar transparente até a navegação da rede interna caso o link principal de comunicação dela com a Internet sai do ar.

#!/bin/bash

# Por tiagonux
# Script que faz um servidor GNU/Linux com mais de um link de internet
# rotear os pacotes destinados a sua DMZ. Sua DMZ ficará respondendo
# a partir da Internet pela quantidade de links que tiver.
# Envolve os softwares iproute e iptables
# O script não cobre regras de mascaramento de pacotes e nem redirecionamento
# de portas.
# Esse script pode ser chamado pelo script de firewall atual do seu sistema, sendo
# que as regras da tabela mangle são resetadas.
# Variáveis
#
# Gateways de cada link
LINK1_GW="200.200.xx.1"
LINK2_GW="189.40.xx.1"
#
# Interface de rede ligada aos Links e Interface ligada a DMZ e Rede Interna
#
LINK_WAN1="eth1"
LINK_INT1="eth0"
#
# Ips de cada Link. Lembrando se estiver usando apenas uma placa de rede conectada
# em um switch que está os 2 links(ou mais) deve-se configurar os IPs válidos
# virtualmente na mesma placa de rede.
#
LINK1_IP="200.200.xx.2"
LINK2_IP="189.40.xx.2"
#
IPTABLES=`which iptables`
#
# Você pode chamar esse script de dentro do seu script de firewall atual, mas fazendo
# as devidas alterações de redirecioamento de portas.
# Regras de marcação de pacotes com iptables e seu módulo CONNMARK
#
# Reseto tudo da tabela Mangle
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -t mangle -Z
#
# Você deve ter um redirecionamento de portas para cada pacote entrando em cada link
# para seu servidor especifico.
# Aqui marco o pacote que entrar pelo link1 com o mark 1 com destino ao IP do LINK1_IP
# e a porta 25 .
$IPTABLES -t mangle -A PREROUTING -i $LINK_WAN1 -p tcp --dport 25 -d $LINK1_IP \
-m conntrack --ctorigdst $LINK1_IP -j MARK --set-mark 1 -m mark --mark 0
#
# Aqui marco o pacote que entrar pelo link2 com mark 2 com destino ao IP do LINK2_IP
# e a porta 25 .
$IPTABLES -t mangle -A PREROUTING -i $LINK_WAN2 -p tcp --dport 25 -d $LINK2_IP \
-m conntrack --ctorigdst $LINK2_IP -j MARK --set-mark 2 -m mark --mark 0
#
# Aqui marco o pacote que entrar pelo link1 com mark 3 com destino ao IP do LINK1_IP
# e a porta 110 .
$IPTABLES -t mangle -A PREROUTING -i $LINK_WAN1 -p tcp --dport 110 -d $LINK1_IP \
-m conntrack --ctorigdst $LINK1_IP -j MARK --set-mark 3 -m mark --mark 0
#
# Aqui marco o pacote que entrar pelo link2 com mark 4 com destino ao IP do LINK2_IP
# e a porta 110 .
$IPTABLES -t mangle -A PREROUTING -i $LINK_WAN1 -p tcp --dport 110 -d $LINK2_IP \
-m conntrack --ctorigdst $LINK2_IP -j MARK --set-mark 4 -m mark --mark
#
# Aqui marco o pacote que entrar pelo link1 com mark 5 com destino ao IP do LINK1_IP
# e a porta 80 .
$IPTABLES -t mangle -A PREROUTING -i $LINK_WAN1 -p tcp --dport 80 -d $LINK1_IP \
-m conntrack --ctorigdst $LINK1_IP -j MARK --set-mark 5 -m mark --mark 0
#
# Aqui marco o pacote que entrar pelo link2 com mark 6 com destino ao IP do LINK2_IP
# e a porta 80 .
$IPTABLES -t mangle -A PREROUTING -i $LINK_WAN1 -p tcp --dport 80 -d $LINK2_IP \
-m conntrack --ctorigdst $LINK2_IP -j MARK --set-mark 6 -m mark --mark 0
#
# Aqui marco o pacote que entrar pelo link1 com mark 7 com destino ao IP do LINK1_IP
# e a porta 3389 .
$IPTABLES -t mangle -A PREROUTING -i $LINK_WAN1 -p tcp --dport 3389 -d $LINK1_IP \
-m conntrack --ctorigdst $LINK1_IP -j MARK --set-mark 7 -m mark --mark 0
#
# Aqui marco o pacote que entrar pelo link2 com mark 8 com destino ao IP do LINK2_IP
# e a porta 3389 .
$IPTABLES -t mangle -A PREROUTING -i $LINK_WAN1 -p tcp --dport 3389 -d $LINK2_IP \
-m conntrack --ctorigdst $LINK2_IP -j MARK --set-mark 8 -m mark --mark 0
#

# Aqui é onde acontece a mágia. Quando simplesmente marcamos um pacote que entra
# por um link de Internet ele perde sua marca quando passa pela tabela NAT. É nesse
# ponto que todo mundo fica perdido, pois em todos os foruns que li a dúvida maior é
# essa, o porque do pacote não retorna pelo link que ele entrou se eu marquei ele na
# sua entrada.
# Acontece que ao passar de uma tabela (mangle) para outra (nat) ele perde a marca.
# Descobri isso lendo a documentação do iptables e com ajuda do tcpdump conclui isso.
# Mas sempre tem uma maneira de resolver esse problema.
# Simplesmente vamos dizer que queremos que seja lembrado a marca anterior do
# pacote.
# Como pode ser visto na regra abaixo, na chain PREROUTING da mangle salvo a marca
# do pacote jogando para o ALVO CONNMARK
#
$IPTABLES -t mangle -A PREROUTING -i $LINK_WAN1 -j CONNMARK --save-mark
#
# E quando o pacote retorna entrando pela interface interna é lembrado sua marca
# anterior.
# Isso tudo ocorre pela --save-mark da regra anterior e --restore-mark da regra abaixo.
#
$IPTABLES -t mangle -A PREROUTING -i $LINK_INT1 -p tcp -m state --state \
ESTABLISHED,RELATED -j CONNMARK --restore-mark
#
# Regras de roteamento com iproute
#
# Deletando as regras atuais de roteamento
#
ip route del default
ip rule del prio 10 table main
ip rule del prio 19 fwmark 1 from 192.168.1.3 table link1
ip rule del prio 20 fwmark 2 from 192.168.1.3 table link2
ip rule del prio 21 fwmark 3 from 192.168.1.3 table link1
ip rule del prio 22 fwmark 4 from 192.168.1.3 table link2
ip rule del prio 23 fwmark 5 from 192.168.1.2 table link1
ip rule del prio 24 fwmark 6 from 192.168.1.2 table link2
ip rule del prio 25 fwmark 7 from 192.168.1.4 table link1
ip rule del prio 26 fwmark 8 from 192.168.1.4 table link2
ip rule add prio 30 table link1
#
# Configurando se necessário o /etc/iproute2/rt_tables com as tabelas de cada link.
#
if ! cat /etc/iproute2/rt_tables | grep -q '^250'
then
echo "250 link1" >> /etc/iproute2/rt_tables
fi
#
if ! cat /etc/iproute2/rt_tables | grep -q '^251'
then
echo "251 link2" >> /etc/iproute2/rt_tables
fi
#
# Flush nas tabelas
ip route flush table link1
ip route flush table link2
#
# Falo que prioridade a tabela main tem.
ip rule add prio 10 table main
#
# Falo quem é o gateway da tabela link1
ip route add default proto static via $LINK1_GW src $LINK1_IP table link1
#
# Falo quem é o gateway da tabela link2
ip route add default proto static via $LINK2_GW src $LINK1_IP table link2
#
# Crio a regra de roteamento para cada tabela de acordo com a marcação do pacote
#
# pacotes smtp que entraram pela tabela link1
ip rule add fwmark 1 from 192.168.1.3 table link1 prio 19
#
# pacotes smtp que entraram pela tabela link2
ip rule add fwmark 2 from 192.168.1.3 table link2 prio 20
#
# pacotes pop3 que entraram pela tabela link1
ip rule add fwmark 3 from 192.168.1.3 table link1 prio 21
#
# pacotes pop3 que entraram pela tabela link2
ip rule add fwmark 4 from 192.168.1.3 table link2 prio 22
#
# pacotes web que entraram pela tabela link1
ip rule add fwmark 5 from 192.168.1.2 table link1 prio 23
#
# pacotes web que entraram pela tabela link2
ip rule add fwmark 6 from 192.168.1.2 table link2 prio 24
#
# pacotes rdp que entraram pela tabela link1
ip rule add fwmark 7 from 192.168.1.4 table link1 prio 25
#
# pacotes rdp que entraram pela tabela link2
ip rule add fwmark 8 from 192.168.1.4 table link2 prio 26
#
# Caso você queira que o resto da rede interna se comunique com a internet pela
# tabela link1
ip rule add prio 30 table link1
#
# Atualizando o cache de roteamento
ip route flush cache

domingo, junho 29, 2008

InSegurança no uso

Depois de um tempo sem tempo para escrever aqui no blog, voltei para alfinetar.
Eu publiquei uma enquete no blog que visava saber com qual usuário de sistema o utilizador costuma acessar internet, ler emails e etc em seu sistema operacional.

Bom houve poucos votos , pois o blog ainda não é visitado por muitas pessoas, mas já deu para ter uma idéia do que anda acontecendo.

A maioria dos utilizadores de computador, utilizam sua conta de administrador para acessar a internet, ler emails e etc achando pela facilidade que isto traz quando vão instalar um programa ou alterar a configuração de algo dentro do sistema de não precisar ficar alternando entre usuários.

Perigo, imaginem um mero utilizador de computador com seu acesso administrativo ao computador, receber um email e :
" Olhe essas fotos, tiramos faz algum tempo, ficaram ótimas... "
E logo no corpo da mensagem tem um link para visualizar as tais fotos. O utilizador de computador muitas vezes curioso (sempre), vai clicar no link, e automáticamente será realizado um download de um arquivo.

O utilizador ingênuo e curioso (sempre) para ver as fotos que " ficaram ótimas..." clica no arquivo para ser executado eeeeeeeeeeeeeeeeeeee.
Não acontece nada. O utilizador decepcionado apaga o arquivo e o email recebido.
Bom acham que não ocorreu nada ?

Para o mero utilizador do computador, não ocorreu nada, mas na verdade ele acaba de ter seu computador comprometido.

Comprometido sim, o arquivo executado estava programado para se auto copiar em executáveis em memória, e para descompactar de dentro de si mesmo um backdoor e coloca-lo em execução e ainda criar um serviço de sistema para enviar Spam, para lista de destinatários que estava dentro do arquivo executado.

Legal, mas poderia ter acontecido mais. Todos os arquivos de inicialização serem removidos ou corrompidos, ser um membro de uma botnet e dai vai da imaginação e propósito do atacante.

Mas porque tudo isso aconteceu e nem o anti-virus (rsrsrsrsr já sabem de qual sistema operacional estamos relatando aqui, mas poderia acontecer com qualquer outro sem exceção) conseguiu pegar as atividades maliciosas realizadas ?

Em primeiro lugar deve-se ter um firewall pessoal que cheque todas as portas abertas, e tráfego de saída e entrada para checagem de qualquer aplicativo que tente realizar algum download sem que o usuário tenha iniciado.

Segundo, um anti-virus sozinho não faz a segurança total, deve-se ter outras ferramentas como um firewall pessoal, anti-spyware e ai vai.

Terceiro, e mais importante, NUNCA faça login no seu sistema operacional como usuário administrativo, só o faça para tarefas em que só um usuário administrador possa realizar.

O ocorrido acima teve sucesso devido ao utilizador do computador estar logado como usuário administrativo, e o executável precisa realizar tarefas em que somente um usuário administrador do sistema operacional poderia realizar, como criar uma porta de serviço.

O ideal é ter uma conta limitada para realizarmos todas tarefas rotineiras para evitar o comprometimento do sistema operacional com códigos maliciosos.

Mas eu estou aqui falando isso, certo, blz. Mas dos que muitos que leêm o meu blog são administradores de rede, analistas de suporte, técnicos em manutenção que não passam isso ao usuário final.

É responsabilidade nossa informar ao usuário o que ele pode estar realizando para evitar que seu computador pare na manutenção todo mês. Lógico não são todos os problemas relacionados com códigos maliciosos que fazem um computador parar na manutenção. Mas deveriamos passar isso ao usuário final que é ingênuo(sempre).

Bom até o próximo post.

domingo, junho 15, 2008

Segurança no Terminal - 2

Bloquear o terminal com a variável TMOUT

No sistema Linux, temos uma variável que não vem setada por padrão. Essa variável é a TMOUT que controla em quanto tempo o terminal será deslogado.
Podemos seta-la manualmente com um tempo pequeno para testarmos:

TMOUT=10

Estamos setando o valor da variável para 10 segundos. Logo, se o terminal não for utilizado durante 10 segundos, ele será deslogado e o usuário será obrigado a logar-se novamente.
Para melhorar podemos colocar essa variável dentro do arquivo global de variáveis para que ela seja fixa toda vez que o sistema for iniciado.

# vim /etc/profile

TMOUT=360

360s – 6 minutos

até o próximo post.