DickRips – Informatica e Atualidade

Pagina dedicada ao Linux, Tecnologias e diversidades

Arquivo da categoria ‘Tecnico’

Apache PHP Postgresql no CentOS e Fedora

Publicado por Daniel Carraro Tomasini em Janeiro 16, 2009

Nesse pequeno tutorial vamos aprender a instalar e configurar de maneira básica um servidor Web na plataforma Linux (baseado no CentOS 5). Note que trata-se de material inédito, que será de grande valia para muitos que, como eu, precisam fazer isso e não encontram materiais disponíveis na web. Mãos à obra!

1) Abra o shell e logue como root:
No CentOS e Fedora o pacote chama-se httpd;

2) Instalando o Apache:
# yum install httpd

Após a instalação, é necessário rodar o comando chkconfig para que ele seja ativado no boot:
# chkconfig httpd on

3) Para iniciar o serviço temos duas opções de comandos:
# service httpd start
OU
# /etc/init.d/httpd start

start: Inicia o serviço
stop: Para o serviço
restart: Para e inicia o serviço
reload: Apenas atualiza a configuração, sem para o serviço.

Após iniciar o serviço, abra o navegador e digite, para testar o serviço:
http://127.0.0.1
Se for carregada a página inicial do APACHE, significa que a instalação foi concluída com sucesso!

Todas as configurações do Apache no CentOS e Fedora ficam no arquivo:
/etc/httpd/conf/httpd.conf

Os sites ficam concentrados dentro do diretório:
/var/www/html/

4) Instalando o suporte a PHP:
# yum install php

5) Instalando o módulo PHP para fazer a junção com Postgresql:
# yum install php-pgsql

Para que as alterações entrem em vigor, reinicie o Apache:
# service httpd restart

Para verificar se o suporte a PHP esta ativo, crie um arquivo com o nome teste.php dentro da pasta /var/www/html/
que contenha a seguinte linha:
<?php phpinfo( ); ?>

Abra o seu navegador e digite o endereço:
http://127.0.0.1/teste.php

6) Instalando o Postgresql com todas as suas dependências:
# yum install postgresql*.*

Iniciando o serviço e ativando-o no boot:
# service postgresql start
# chkconfig postgresql on

Os arquivos de configuração do Postgresql se encontram dentro da pasta:
/var/lib/pgsql/data/

Acesse esse diretório e vamos editar os arquivos de configuração:
# cd /var/lib/pgsql/data
# vi pg_hba.conf

No final do arquivo deixe as linhas conforme o exemplo abaixo:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:

Libera o acesso para a máquina local sem senha:
host all all 127.0.0.1/32 trust

Libera o acesso para a rede local sem senha:
host all all 192.168.0.0/24 trust

# Libera o acesso externo sem senha
host all all 0,0,0,0 0,0,0,0 trust

# IPv6 local connections:

#host all all ::1/128 ident sameuser

Para que as alterações entrem em vigor reinicie o serviço:
# service postgresql restart

Agora vamos editar o arquivo postgresql.conf:
# vi postgresql.conf

Descomente e modifique as linhas abaixo conforme o exemplo:

#—————————————————————————
# CONNECTIONS AND AUTHENTICATION #—————————————————————————

# – Connection Settings -

# Descomente, essa linha faz com que o Postgresql aceite conexões de qualquer ip.
listen_addresses = ‘*’ # what IP address(es) to listen on;

# comma-separated list of addresses;

# defaults to ‘localhost’, ‘*’ = all

# Descomente as linha abaixo,
port = 5432
max_connections = 500

Para que as alterações entrem em vigor reinicie o serviço:
# service postgresql restart

Alguns comandos básicos de Postgresql:

Criando uma base de dados chamada microcamp
# createdb -U postgres microcamp

Listando as bases de dados dentro do banco:
# psql -U postgres -l

Entrando dentro da base de dados microcamp
# psql -U postgres microcamp

# Listando o conteúdo da base de dados:
frigo2=# \d

# Atribuindo uma senha para a base de dados
frigo2=# alter user postgres with encrypted password ’senha’;

Para sair da base de dados use as teclas CTRL + D simultaneamente.

Após atribuido a senha a base de dados é necessário editar novamente o arquivo pg_hba.conf, trocando os métodos trust por md5 para que a senha seja requisitada ao tentar a conexão, lembrando que o arquivo se encontra dentro do diretório /var/lib/pgsql/data.
# cd /var/lib/pgsql/data
# vi pg_hba.conf

# TYPE DATABASE USER CIDR-ADDRESS METHOD

# “local” is for Unix domain socket connections only

local all all md5

# IPv4 local connections:

# Libera o acesso para a máquina local sem senha
host all all 127.0.0.1/32 md5

# Libera o acesso para a rede local sem senha
host all all 192.168.0.0/24 md5

# Libera o acesso externo sem senha
host all all 0,0,0,0 0,0,0,0 md5

# IPv6 local connections:

#host all all ::1/128 ident sameuser

Para que as alterações entrem em vigor reinicie o serviço:
# service postgresql restart

Agora vamos testar a conexão com o Postgresql, crie um arquivo chamado conexao.inc.php dentro do diretório /var/www/html e adicione as linhas abaixo:

<?php

$strConexao=”host=localhost user=postgres dbname=frigo2 password=frigo13579 port=5432″;

$conexao=pg_connect($strConexao);

if(!$conexao){

echo “Erro na conexcao: ” . pg_last_error($conexao);

}

?>

Agora crie um arquivo chamado consultar_todos.php e adicione as linhas abaixo:

<?php

$strConexao=”host=localhost user=postgres dbname=frigo2 password=frigo13579 port=5432″;

$conexao=pg_connect($strConexao);

if(!$conexao){

echo “Erro na conexcao: ” . pg_last_error($conexao);

}

?>

Agora uma dica muito importante, para que a conexão possa ser estabelecida no CentOS é necessário desativar o SELinux, que por padrão na instalação fica ativado, para desativa-lo vá na área de trabalho e no menu Sistema -> Administração -> Nível de Segurança e Firewall e selecione Desativado

Pronto sua configuração básica já vai estar funcionando.

Fonte: www.microcampnews.com.br

Enviado em Linux, Programação, Redes, Servidores, Tecnico | Deixar um comentário »

Burlando a Segurança em uma Rede Wireless

Publicado por Daniel Carraro Tomasini em Novembro 20, 2008

Atualmente com a grande venda de notebooks as redes sem fio estão se popularizando rapidamente e não é difícil encontrá-las em empresas e residências. Apesar de práticas são as mais insegura e mesmo aqueles que  as protegem com senhas criptografadas não estão livres de invasões.

Nenhuma rede é 100% segura e quem estiver mal intencionado pode com as ferramentas certas invadir computadores e roubar infomações, causando problemas.

Nos parágrafos abaixo você conhecerá vários softwares que são utilizados por pessoas que querem invadir redes sem fio burlando os sistemas de segurança. Conheça esses softwares para que vocë possa se protejer fazendo uma correta e segura configuração de sua rede sem fio.

Introdução

Felizmente ou infelizmente a Internet é um berço para estas ferramentas gratuita, ferramentas que nos fornecem dados importantes sobre redes Wireless, neste caso deveremos usar este conjunto de ferramentas para testar a nossa própria segurança.

Descobrindo RedesSem fio

Localizar a rede Wireless é o primeiro passo para explorar, existem para esse fim duas ferramentas:

Network Stumbler – Esta ferramenta para o Windows facilmente encontra o sinal Wireless difundido das redondezas, é uma fantástica aplicação. Uso-a para em casos de dificuldade de captação de sinal determinar a força e o ruído existente no sinal enviado. Existem empresas que para instalar os seus hotspots recorrem a esta aplicação determinando com mais exatidão as características do terreno tendo em conta a qualidade do sinal difundido.

Obs.: Depois de alguns testes, verifiquei que o Network Stumbler não funciona bem no Windows Vista e porisso encontrei um programa similar chamado Vista Stumbler e que pelo menos nos meus testes funcionou muito bem no Vista.

Na verdade a grande maioria dos programas para burlar redes Wireless são para Linux e os que existem para Windows as vezes não funcionam devido a problemas com drivers das placas de rede e problemas de compatibilidade entre as versões do Windows.

Net Stumbler

  1. Faça o Download do Programa (Windows)
  2. Link Oficial

Vista Stumbler

  1. Faça o Download do Programa (Windows)

Vídeo de Demostração

Kismet – Esta ferramenta completa a ferramenta apresentada anteriormente o NetStumbler, pois este não consegue detectar as redes Wireless que escondem o SSID. Portanto esta ferramenta além de detectar as redes difundidas de forma visível, consegue identificar quais as que estão camufladas, podendo mesmo identificar tentativas de acesso ao seu ponto Wireless.

Obs.: Para que você consiga instalar o Kismet, antes instale os programas:

  1. Winpcap - Programa para análise de rede e captura de pacotes para plataformas Win32, baseado no modelo do BPF e libpcap para UNIX. Esta versão funciona em qualquer versão do Windows, reconhecendo automaticamente qual sistema está sendo utilizado. Captura pacotes de maneira muito similar ao Berkeley Packet Filter do UNIX. Packet.dll é uma API que pode ser utilizada para acessar diretamente as funções do driver BPF. Oferece funções de alto nível para capturar pacotes independentemente da arquitetura da rede ou dos sistemas operacionais utilizados.
  2. Airpcap – A Família AirPcap de produtos de captura para redes sem fio fornece uma ampla gama de opções de reparação de avarias 802,11 em redes sem fio.

  1. Faça o Download do Programa Kismet (Windows)
  2. Faça o Download do Programa WinpCap (Windows)
  3. Faça o Download do Programa AirpCap (Windows)
  4. Link Oficial
  5. Link de Apoio

Anexar ligação às redes descobertas

Agora que descobriu as redes Wireless passe para o nível seguinte, ligar-se a essas redes.

Se a rede não está usando qualquer tipo de autenticação ou encriptação de segurança então pode simplesmente ligar-se ao SSID. Se o SSID não está a ser difundido o utilizador pode criar um perfil com o nome do SSID pois esse nome não estará sendo difundido, mas claro que o utilizador já o conhece pois usou o Kismet, certo? Mas e se a rede wireless solicitar autenticação? Bem nesse caso teremos que passar para um nível superior nesta pirâmide de recursos.

Airsnort – Bem esta é a ferramenta que irá procurar e quebrar a protecção das chaves WEP que normalmente usamos para “proteger” as nossas ligações. É muito simples de usar. A chave WEP é muito fraca, com este tipo de aplicações usar uma chave WEP é o mesmo que não usar nada.

Ao usar esta ferramenta descobrirá formas e estratégias para mais rapidamente descobrir as chaves WEP, ferramentas adicionais podem melhorar a técnica e simplificar o processo, essas ferramentas não estão anexas ao Airsnort. O processo não é rápido, serão necessárias várias tentativas para pesquisar os pacotes de chaves para “crackear” as chave WEP.

Obs.: Verifique no Link de Apoio 1 os requisitos para que o software funcione corretamente. Ele também está disponível para Linux no mesmo link.

Obs. 2: Pelas pesquisas, verifiquei que normalmente ele funciona melhor em Linux.

  1. Faça o Download do Programa (Windows)
  2. Link de Apoio 1
  3. Link de Apoio 2

CowPatty – Pois é, mas a rede descoberta utiliza a proteção WPA e agora? Agora pode usar o CowPatty, esta aplicação é usada para destruir ações de arrombamento chamadas “brute force” para crackear WPA-PSK. Esta chave tem sido incentivada aos utilizadores como sendo a nova segurança WEP para segurança Wireless caseiras. O que faz esta aplicação? Simplesmente descarrega milhares de combinações alfanuméricas de um arquivo dicionário tentando que algumas coincidam e permitam a autenticação

  1. Faça o Download do Programa (Windows)
  2. Faça o Download do Programa (Linux)
  3. Link de Apoio

Sniffing de dados da rede Wireless

Quer esteja diretamente ligado a uma rede Wireless ou não existindo num raio de captação de pacotes de dados de um lado para o outro, o utilizador poderá “vê-los” e para isso precisa de uma ferramenta.

Wireshark (formerly Ethereal) – Com um sniffer, podemos monitorizar o acesso a determinados serviços de rede como por exemplo e-mail, acesso remoto (telnet, rlogin), transferência de arquivos (FTP), etc. Permite-nos ainda identificar a existência de tráfego anormal na nossa rede. Um exemplo simples é alguém mal intencionado andar pela nossa rede à procura de dados, como por exemplo passwords, para mais tarde poder usar. Imaginem que os dados que passam na nossa rede não estão encriptados? Ótimo para o hacker !!!

Os mais conhecidos para sistemas Linux são o tcpdump, ethereal. Para Windows também existe o ethereal, ou winshark que foi concebido pelos mesmos autores do ethereal. Se fizerem uma pesquisa no Google irão encontrar muitas referências a sniffers. Aqui têm uma lista com alguns deles. O processo de “sniffing” está associado a uma ou mais interfaces de rede de um determinado computador.

  1. Faça o Download do Programa (Windows)
  2. Link Oficial
  3. Link de Apoio

Vídeo de Demostração

Wireless Toolz Hack (2008) – Pacote de ferramentas para invasão de redes Wireless.

Ferramentas inclusas:

  • NetStumbler-0.4.0
  • Kismet-2005-08-R
  • Wellenreiter-v1.9
  • WEPcrack-0.1.0
  • Airsnort-0.2.7e:
  • Wepwedgie-0.1.0-alpha:
  • Hotspotter-0,4
  1. Faça o Download do Programa Wireless Toolz Hack (2008) (Windows)

Como podemos nos defender?

É importante saber para que servem e como se usam estas ferramentas, este pequeno guia apenas tem como objetivo alertar para o que podem encontrar à disposição de pessoas mal intencionadas.

NetStumbler – Nunca permita que o seu router difunda o seu SSID. Assegure-se que a sua rede está protegida usando autenticações e encriptações avançadas.

Kismet – Aqui realmente não há muito a fazer, ele descobrirá a sua rede, no entanto esta deverá estar protegida por autenticações seguras.

Airsnort – Usem uma chave de encriptação a 128-bit, pois se usarem a mais baixa a 40-bit WEP nada poderá fazer contra esta ferramenta. Não quer dizer que a chave a 128 bits não possa ser quebrada, é mais demorada para quebrar, dificultando a vida do hacker. Para estar seguro use chaves de encriptação WPA ou WPA2.

Cowpatty – Conta esta ferramenta é mais difícil de se proteger, use chaves longas e complexas. Quanto mais complexa for mais dificuldade é criada a quem usa esta ferramenta para invadir a sua rede.

Winshark – Use encriptação, assim quem “invadir” a sua rede terá de enfrentar uma grandes dificuldades para conseguir recuperar quaisquer dados.

WPA2 usa encriptação de dados AES, podemos dizer que é irrisória a possibilidade de um hacker quebrar esta cifra. Mesmo o protocolo WEP poderá encriptar os dados. Quando se encontrar num hotspot público que geralmente não oferecem proteção para dados use aplicações de terceiros para encriptar os seus dados, mesmo se usar o messenger e derivados. Para empresas a solução é usar VPN e aplicações de terceiros para proteger os dados encriptando-os.

Dicas Gerais de Proteção

  1. Altere a senha padrão que vem no ponto de acesso
  2. Ocultar ou alterar o SSID
  3. Utilize criptografia WPA/WPA2
  4. Desativar propagação SSID
  5. Desligue DHCP
  6. Ativar a filtragem de endereços MAC
  7. Limitar o número de equipamentos para se conecta
  8. Ativar o firewall
  9. Desabilite o ponto de acesso quando não tiver em uso
  10. Monitorar computadores que estão autorizados para a AP

Conclusão

Mesmo que você tome todas as precauções possíveis para proteger a sua rede sem fio, nada impedirá que alguém monitore o sinal que trafega por ela, utilizando programas específicos como vimos anteriormente. Para evitar ou dificultar isso, as poucas alternativas que sobram são o controle de intensidade do sinal (tanto do roteador, quanto dos clientes de rede) e a utilização de encriptação avançada, já que chaves do tipo WEP podem ser facilmente quebradas por quem realmente sabe onde quer chegar.

Caso a sua rede Wireless precise de um nível de segurança maior que a alcançada através das medidas acima, isso indica que ela precisa ser projetada e implementada por profissionais capacitados.

Não se esqueça que as informações digitais são atualmente o bem mais importante de uma empresa ou de um indivíduo, portanto, segurança nunca é demais.

Fonte: professorhugo.com.br

Enviado em Redes, Segurança, Tecnico | 6 Comentários »

Shorewall, uma excelente opção para firewall Linux

Publicado por Daniel Carraro Tomasini em Novembro 4, 2008

Este artigo é direcionado àqueles que desejam implementar o Shorewall como interface de configuração de regras de Iptables. O Shoreline, mais conhecido como Shorewall, possibilita uma configuração mais organizada e rápida do seu firewall. O servidor utilizado neste artigo é um Debian Etch 4.

Vamos ao que interessa!

Instalar os pacotes

# apt-get install shorewall shorewall-doc

Copiar os arquivos de exemplo para o diretório de configuração do shorewall

# cp /usr/share/doc/shorewall/examples/two-interfaces/* /etc/shorewall/.

Uma rápida explicação de cada arquivo de configuração, para uma implementação simples de firewall.

Zones

Neste arquivo é definido os tipos de zonas de sua rede. Os três tipos de zonas mais utilizados são:

loc – Define a zona local. Será utilizado para definir regras para a rede local.

net – Define a zona de Internet. Será utilizado para definir regras para o link de dados.

dmz – Define a zona delimitada.

A variável FW já é uma zona declarada implicitamente. Essa zona corresponde-se ao firewall e é utilizado para definir regras para o mesmo.

Editar o arquivo /etc/shorewall/zones e inserir a seguinte configuração:

################################################################
#ZONE TYPE OPTIONS IN OUT
################################################################
net ipv4
loc ipv4

# NUNCA REMOVER ESTA LINHA

Obs.: A zona FW não precisa ser definida, pois como já disse é implicitamente definida.

Interfaces

Neste arquivo são atribuídas zonas às interfaces de rede. Antes de tudo deverá existir uma estrutura de rede. Neste artigo estou utilizando eth0 para Internet (DHCP) e eth1 para rede local (IP STATIC).

Editar o arquivo /etc/shorewall/interfaces e inserir:

#########################################################
#ZONE INTERFACE BROADCAST OPTIONS
#########################################################
net eth0 detect dhcp,tcpflags
loc eth1 detect tcpflags,detectnets,nosmurfs

# NUNCA REMOVA ESTA LINHA

Masq

Mais conhecido como masquerade (mascaramento de rede) o masq define as máscaras de rede e ordem que elas serão apresentadas. Usado por servidores que servem como gateway para rede local.

Editar o arquivo /etc/shorewall/masq e inserir:

##################################################################
#INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC
##################################################################
eth0 eth1

# NUNCA REMOVER ESTA LINHA

Policy

Toda política da rede é definida nesta zona. Antes de executar qualquer regra de excessão definida na zona rules (próximo tópico), o Shorewall utiliza as regras globais definidas nesta zona para só então dar prosseguimento às excessões.

Editar o arquivo /etc/shorewall/policy e inserir:

#
# Policies for traffic originating from the firewall ($FW)
#
# If you want open access to the Internet from your firewall, change the
# $FW to net policy to ACCEPT and remove the ‘info’ LOG LEVEL.
# This may be useful if you run a proxy server on the firewall.
$FW net ACCEPT # LINHA 1
$FW loc ACCEPT # LINHA 2
$FW all REJECT info # LINHA 3

# Policies for traffic originating from the local LAN (loc)
#
# If you want to force clients to access the Internet via a proxy server
# on your firewall, change the loc to net policy to REJECT info.
loc net REJECT info
loc $FW REJECT info
loc ipsec ACCEPT
loc all DROP info

#
# Policies for traffic originating from the Internet zone (net)
#
net $FW DROP info
net loc DROP info
net all DROP info

# THE FOLLOWING POLICY MUST BE LAST
all all REJECT info

# ULTIMA LINHA – NUNCA REMOVA

Uma breve explicação de algumas linhas do conf policy:

LINHA 1 – Todas as requisições do firewall para a internet serão aceitas.
LINHA 2 – Todas as requisições do firewall para a rede local serão aceitas.
LINHA 3 – Todas as requisições do firewall para todos os outros lugares serão rejeitados e devidamente catalogado em log. Por isso o “info” ao final da linha.

As opções de ações usadas nas zonas policy e rules são:

ACCEPT – Aceita pacotes/requisições
REJECT – Rejeita pacotes/requisições e retorna mensagem de rejeição
DROP – Elimina pacotes/requisições e não retorna mensagem alguma

Rules

Nesta zona são definidas as regras finais para o destino e origem de cada pacote/requisição. Após terem passados pelas regras da zona policy, o firewall trata os pacotes com essas excessões e direciona-os para o seu destino/origem finais.

Editar o arquivo /etc/shorewall/rules e inserir:

##################################################################
#ACAO ORIGEM DESTINO PROTO DESTINO ORIGEM
#SOLICITANTE TAXA USUARIO
# ZONA ZONA PORTA PORTA(S)
##################################################################

# Aceita conexoes DNS vindas do firewall para a rede
#
DNS/ACCEPT $FW net

# Permite Ping vindos da “zone loc” para rede
#
Ping/ACCEPT loc $FW
Ping/ACCEPT loc loc

# Rejeita ping vindo da “zone net” batizados como “maus”…
#
Ping/ACCEPT net:200.200.200.00 $FW
Ping/DROP net $FW

ACCEPT $FW loc icmp
ACCEPT $FW net icmp

# Abrindo portas
#
ACCEPT net $FW tcp 22 # SSH
ACCEPT net $FW tcp 9000 # SSH
ACCEPT net $FW tcp 8080 # Tomcat6
ACCEPT net $FW tcp 9100 # Apache2
ACCEPT net $FW tcp 80 # Apache2
ACCEPT net $FW tcp 1521 # Oracle_Listener
ACCEPT net $FW tcp 10000 # Webmin
ACCEPT net $FW tcp 1158 # OEM

# Redirecionando conexões
# Neste exemplo estou direcionando uma requisição vinda da internet
# e direcionando-a para a rede local no IP 192.168.27.2 na porta 4899
#
DNAT $FW loc:192.168.27.2:4899 tcp 1158

# ULTIMA LINHA – NUNCA REMOVA

Esta foi uma breve explicação de como utilizar o Shorewall como firewall. Para quem deseja aprofundar-se neste software e implementar as outras diversas funcionalidades dele, o site oficial é http://www.shorewall.net

Fonte: andradeti.blogspot.com

Enviado em Linux, Segurança, Tecnico | Deixar um comentário »

Aplicativos em modo texto

Publicado por Daniel Carraro Tomasini em Outubro 13, 2008

Nem só de cat e ls vive o terminal. Por estranho que possa parecer, existem diversos aplicativos elaborados para o modo texto, que cobrem quase todas as principais áreas. Você poderia questionar a utilidade destes aplicativos, já que, afinal, existem aplicativos gráficos muito mais elaborados. Apesar disso, os aplicativos em modo texto conservam algumas vantagens importantes. Eles são mais leves, o que permite que sejam usados até mesmo em máquinas muito antigas, podem ser usados remotamente (via SSH ou outros meios) mesmo através de conexões lentas e podem também serem usados dentro de shell scripts, onde é possível combinar o trabalho de diversos comandos para realizar tarefas complexas.

Um gerenciador de arquivos completo como o mc consome apenas 2 MB de memória RAM, enquanto o centericq (cliente ICQ, AIM, etc.) consome pouco mais de 500 KB. Graças ao GPM, é possível utilizar o mouse na maior parte dos aplicativos de modo texto e muitos são baseados na biblioteca ncurses, o que permite incluir janelas, menus, etc., o que torna seu uso muito similar ao dos programas gráficos. Ao contrário da crença popular, pouca gente ainda roda aplicativos em terminais de texto puro, quase sempre eles são utilizados dentro de um terminal gráfico, lado a lado com outros aplicativos.

Vamos a alguns exemplos:

Navegadores: Entre os navegadores em modo texto, as atenções se dividem entre o Links e o Lynx, que apesar do nove parecido, são dois softwares bastante diferentes. Além de serem uma opção para casos em que você precise pesquisar alguma coisa em uma máquina onde o ambiente gráfico não está funcionando, eles servem também como opções de navegadores leves, que você pode usar em situações diversas. Por não carregarem imagens, arquivos em Flash ou perfumarias diversas, eles são uma opção para momentos em que a conexão está lenta. Para usá-los, basta chamá-los no terminal, seguido pela página desejada, como em:

$ links gdhpress.com.br

ou

$ lynx guiadohardware.net

A grande diferença entre os dois é que o Lynx reformata as páginas em uma única coluna (assim como fazem muitos navegadores para celular), enquanto o Links se esforça para manter a formatação original. De uma forma geral, o Lynx se sai melhor quando você está em um terminal de texto puro, com uma resolução de tela baixa e sem mouse, enquanto o Links é mais agradável de usar quando você está usando o navegador dentro de um terminal gráfico. Apesar de rodar no terminal, o Links suporta o uso do mouse, de forma que você pode navegar clicando nos links, como faria em qualquer navegador gráfico:

O Lynx oferece a vantagem de incluir um melhor suporte a Javascript, permitindo acessar um volume muito maior de páginas que exigem login ou usam recursos mais específicos. Ele é também capaz de utilizar as cores para diferenciar os elementos do texto, enquanto o Links é basicamente monocromático.

No Links, pressione F10 para abrir o menu de funções. Para que ele exiba os caracteres acentuados, mude o charset para “ISO 8859-1″ no “Setup > Character Set”. No mesmo menu está disponível também a opção de mudar a linguagem para Português do Brasil.

Em ambos, você pode usar as setas para a esquerda e direita para voltar e avançar e a tecla “q” para sair. Para abrir uma nova página, pressione a tecla “g”; para rolar a página use “Page Up” e “Page Down” e, para navegar entre os links, use os direcionais para cima e para baixo ou a tecla Tab.

Algo que pouca gente sabe é que o links pode ser utilizado também como um navegador gráfico (mesmo em um terminal de texto puro), tirando proveito do uso do frame-buffer. Para isto, basta chama-lo com o comando “links -g”.

Na maioria das distribuições, o pacote é compilado sem suporte a gráficos, por isso a opção não funciona (seria necessário baixar o código fonte e recompilar usando a opção “–enable-graphics” ao rodar o ./configure), mas no caso do Slackware é necessário apenas que o frame-buffer esteja ativado.

Outra dica, desta vez sobre o lynx é que ele pode ser usado como uma forma simples de converter páginas Web para arquivos de texto, que podem ser lidos no seu smartphone ou mp3player ou transportadas mais facilmente. Para isso, use o comando:

$ lynx -dump gdhpress.com.br > gdh.txt

Isto salvará a página index do site no arquivo texto.txt. Basta substituir o link pelo da página desejada. O arquivo de texto fica com a mesma formatação que você veria ao visualizá-lo em um terminal com o lynx. Os links no meio do texto são substituídos por números de referência ([01], [02], etc.) e as url’s aparecem no final do texto. Esse tipo de flexibilidade faz com que o lynx seja muito usado em shell scripts, sempre que é necessário extrair alguma informação de uma página web.

Outra dica é que você pode visualizar arquivos de imagem no terminal usando o comando fbi, como em:

$ fbi imagem.jpg

Ele exibe a imagem no terminal usando o frame buffer, assim como ao usar o “links -g”. Para voltar ao terminal, pressione Esc.

Download de arquivos: O wget é um gerenciador de downloads bastante competente, que oferece um grande volume de opções, todas usadas via linha de comando. Isso faz com que ele seja uma opção muito prática para download de arquivos em geral, já que você pode copiar a URL

O uso mais básico é usar o wget seguido da opção “-c”, que faz com que ele continue o download caso interrompido, como em:

$ wget -c link

Se precisar interromper o download, pressione Ctrl+C para parar e em seguida use o histórico (seta para cima) para executar novamente o comando e continuar de onde parou. Caso o arquivo já esteja completo, ele exibe um aviso e não faz nada.

Se você precisar baixar vários arquivos em sequência, como em casos em que você precisa baixar os vários CDs de uma distribuição, use o ponto e vírgula para separar vários comandos do wget, como em:

$ wget -c url1; wget -c url2; wget -c url3; wget -c url4

Isso faz com que os 4 arquivos sejam baixados em sequência, um de cada vez. Se quiser falar difícil, você pode fazer a mesma coisa usando:

$ for i in url1 url2 url3 url4; do wget -c $i; done

Este é na verdade um mini shell script, que faz com que ele execute o comando “wget -c” para cada uma das urls especificadas, armazenando o valor de cada uma na variável “$i”. Esta é uma função simples, que é muito usada em situações que você precisa rodar o mesmo comando repetidamente.

Continuando, caso a conexão esteja ruim e a transferência esteja parando freqüentemente, você pode especificar um timeout usando a opção “-T”, ela faz com que o wget reinicie a transferência caso não receba dados dentro do tempo especificando (em segundos), repetindo o processo até conseguir baixar o arquivo, como em:

$ wget -c -T 30 link

Uma dica é que você pode selecionar a URL do arquivo a ser baixado na janela do navegador e colar o texto no terminal usando o botão central do mouse. Se você estiver usando o konsole ou o gnome-terminal, você pode também colar o texto da área de transferência clicando com o botão direito sobre o terminal e usando a opção “colar”.

Mensagem: Por estranho que possa parecer, você pode usar o MSN, ICQ e até mesmo o Gtalk (que na verdade utiliza o protocolo Jabber) em modo texto, graças ao CenterICQ, disponível no: http://thekonst.net/centericq/

Embora a interface não seja exatamente simples de usar, ele é surpreendentemente completo do ponto de vista dos protocolos suportados, oferecendo suporte a todas as principais redes. Você encontra o pacote para o Slackware no http://www.slacky.eu.

Outro exemplo de cliente multiprotocolo é o Pebrot, disponível no: http://pebrot.sourceforge.net/. A interface é muito mais simples, mas ele oferece como ponto forte a possibilidade de ser controlado através de comandos, o que permite usá-lo dentro de shell scripts. Com isso, você pode criar bots simples para monitorar o status dos contatos, mandar mensagens automáticas e assim por diante.

MP3 e CD: O utilitário mais simples para tocar arquivos de áudio via terminal é o mpg123, que pode ser chamado diretamente no terminal, seguido do nome do arquivo a tocar, como em:

$ mpg123 arquivo.mp3

Você também pode tocar uma playlist através do comando “mpg123 -@ arquivo”. A playlist pode ser gerada através de vários programas tocadores de mp3. No XMMS, por exemplo, você precisa apenas clicar com o botão direito sobre a janela do editor de playlists e em “salvar lista” para gerar a playlist da lista de faixas atual. Se por acaso o comando não estiver disponível, procure pelo pacote “mpg123″.

Uma opção mais elaborada é o Orpheus (do mesmo criador do CenterICQ) que pode ser baixado no http://konst.org.ua/orpheus. Ele é capaz de tocar tanto MP3 quanto CDs de áudio e oferece uma interface pseudo-gráfica, baseada no ncurses, com menus e tudo mais.

Gerenciamento de arquivos: Em termos de gerenciamento de arquivos, o mc é sem dúvidas a melhor opção. Ele é também baseado no ncurses e suporta o uso do mouse. A interface é baseada em teclas de atalho e é um pouco complicada de usar no início, mas o volume de opções disponíveis permite executar muitas operações que não são possíveis ou não são práticas mesmo em gerenciadores gráficos, como o Konqueror e o Nautilus. Essa combinação de funções e leveza faz com que ele ainda seja bastante utilizado:

O mcedit (o editor de textos) surgiu originalmente como um módulo do mc, destinado a visualizar aquivos de texto, mas eventualmente acabou ganhando vida própria, passando a ser usado separadamente. De qualquer forma, os dois continuam ligados: para instalar o mcedit, você precisa instalar o pacote “mc”, que inclui também o gerenciador de arquivos.

Screenshots: Você pode tirar screenshots via linha de comando usando o import, utilitário incluído na maioria das distribuições. Naturalmente ele se aplica apenas quando você estiver usando um terminal dentro do modo gráfico. A sintaxe básica é:

$ import tela.png

Ao executar o comando, o botão do mouse virará um cursor. Desenhe um retângulo na parte da tela que você deseja capturar e ela será automaticamente capturada e salva no arquivo “tela.png” no diretório corrente. Se você preferir capturar o conteúdo de uma janela, basta clicar sobre a barra de título. Se por outro lado você quiser um screenshot da tela toda, não apenas de uma janela, adicione a opção “-windows root”, como em:

$ import -window root tela.png

O formato de compressão das imagens é especificado diretamente no nome do arquivo. Nos exemplos salvei as imagens em .png, mas para salvá-las em .jpg basta alterar a extensão do arquivo gerado, “import imagem.jpg” por exemplo.

A principal vantagem do import é que ele pode ser chamado a partir de scripts. Você pode por exemplo agendar um trabalho no cron para tirar um screenshot a cada minuto por exemplo e assim poder monitorar o que está sendo feito no PC.

Bittorrent: Você pode baixar arquivos via bittorrent em modo texto usando o btdownloadcurses e o btlaunchmanycurses, que são destinados a, respectivamente, baixar apenas um arquivo e baixar diversos arquivos .torrent dentro de uma pasta. A sintaxe para especificar opções adicionais é um pouco complicada e você vai sentir falta de algumas funções especiais disponíveis nos clientes gráficos mais elaborados, como a possibilidade de encriptar a transmissão, mas eles atendem bem à função básica, que é baixar os arquivos. Ambos fazem parte do pacote “bittornado”, que no Slackware está disponível dentro da pasta “/extra/bittornado”.

O uso básico é usar o btdownloadcurses seguido pelo arquivo a ser baixado, como em:

$ btdownloadcurses openSUSE-11.0-DVD-i386.torrent

Como de praxe, você não precisa necessariamente digitar o nome do arquivo, pode usar um “ls” e em seguida copiar e colar usando o botão central do mouse, ou simplesmente usar a tecla TAB para completar o nome do arquivo. Caso precise baixar arquivos com caracteres especiais, coloque o nome entre aspas simples (’), isso faz com que o shell deixe de interpretar os caracteres especiais. Para encerrar o download, pressione Ctrl+C.

Caso precise baixar vários arquivos de uma vez, coloque todos dentro de uma pasta e, dentro dela, use:

$ btlaunchmanycurses ./

Ele monitora o conteúdo da pasta, ativando novos arquivos que forem copiados para dentro dela e desativando o compartilhamento de arquivos removidos. Isso permite que você deixe um terminal aberto, rodando o btlaunchmanycurses e vá simplesmente copiando novos arquivos .torrent que quiser baixar para dentro delas, sem precisar fechar e abrir novamente o btlaunchmanycurses para cada alteração.

Para limitar a taxa de upload, adicione a opção “–max_upload_rate”, seguida pela taxa máxima desejada (em kbytes), como em:

$ btdownloadcurses –max_upload_rate 32 openSUSE-11.0-DVD-i386.torrent

ou:

$ btlaunchmanycurses ./ –max_upload_rate 16

Como pode ver, no caso do btdownloadcurses, o parâmetro vem antes do nome do arquivo e no caso do btlaunchmanycurses vem depois. O bittornado é uma versão aprimorada dos clientes bittorrent originais, que fazem parte do pacote “bittorrent”. O pacote inclui também outros utilitários relacionados, como o “bt-t-make” (usado para criar torrents) e o “bttrack” (que permite compartilhá-los, usando seu PC como tracker), além do “btdownloadgui”, que é um cliente gráfico.

Vídeo: O Mplayer é um dos players de mídia mais usados no Linux. Existem diversas interfaces para ele, tais como o Gmplayer e o Kmplayer, mas na verdade o Mplayer pode ser usado diretamente via linha de comando, basta usar o comando “mplayer”, seguido do arquivo a exibir, como em:

$ mplayer video.avi

Para exibir um DVD (para assistir DVDs protegidos, é necessário que o pacote libdvdcss esteja instalado), o comando básico é:

$ mplayer dvd://1

A página de manual do mplayer (man mplayer) inclui um volume absurdo de parâmetros e opções que podem ser adicionados. Para assistir o DVD com o áudio em Inglês e as legendas em Português, abrindo o filme diretamente, sem passar pelo menu inicial, o comando seria:

$ mplayer dvd://1 -alang en -slang pt

Originalmente, executar estes comandos faz com que ele abra uma nova janela e passe a exibir o filme, como qualquer outro aplicativo gráfico. A linha de comando no caso serve apenas para controlar o aplicativo.

A parte engraçada começa quando você começa a brincar com as opções de saída do Mplayer, que permitem que ele seja usado mesmo em um terminal de texto puro. Algumas mini-distribuições, como, por exemplo, o emovix, utilizam estas opções para exibirem vídeos mesmo sem ter o X instalado. Alguns exemplos de comandos para assistir aos vídeos a partir do modo texto são:

$ mplayer -vo svga filme.avi

Este comando usa o driver SVGA, que funciona na maioria das placas, exibindo o filme em tela cheia. Para usá-lo, é necessário que os módulos “svgalib” e “svgalib_helper” estejam carregados. Caso o mplayer reclame que não consegue abrir o device “/dev/svga”, experimente carregá-los usando o comando “modprobe”.

$ mplayer -vo vesa filme.avi

Este segundo comando usa o driver VESA, que funciona em algumas placas que não são compatíveis com o driver SVGA.

$ mplayer -vo fbdev filme.avi

Esta terceira opção é baseada no uso do frame-buffer, o mesmo recurso que é usado para exibir imagens no terminal. O uso de processamento é maior que no VESA e no SVGA, mas isso não é problema para as máquinas atuais. A principal dica é que para usar a opção “-vo fbdev”, o lilo ou grub deve ter sido configurado para usar 16 bits de cor (os valores “785″, “788″ ou “791″). O Slackware usa 256 bits por padrão, o que faz com que o Mplayer exiba um erro e aborte a exibição.

$ mplayer -vo aa filme.avi

Se você estava achando estranho assistir vídeos diretamente no terminal, se prepare para o driver mais curioso. A opção “-vo aa” faz com que o vídeo seja exibido usando caracteres de texto, transformando o vídeo em uma espécie de ASCII art anabolizado. Ela na verdade não tem muito uso prático, já que a qualidade é muito ruim, mas não deixa de ser um truque interessante:

Fonte: www.gdhpress.com.br

Enviado em Linux, Tecnico | Deixar um comentário »

Entendendo Ameaças Ocultas: Rootkits e Botnets

Publicado por Daniel Carraro Tomasini em Outubro 8, 2008

O US-CERT publicou uma artigo, entitulado “Cyber Security Tip ST06-001 – Understanding Hidden Threats: Rootkits and Botnets”, muito importante para internautas e profissionais ligados a tecnologia da informação, que busca melhor orientar usuários de computadores e da Internet quanto aos efeitos e as boas práticas no combate e prevenção de Rootkits e Botnets.

Por Mindi McDowell, Tradução Julio Dutra.

Atacantes continuam procurando por novos caminhos para acessar sistemas computadorizados. O uso de métodos ocultos como rootkits e botnets está aumentando, e Você pode ser uma vítima mesmo sem imaginar.

Um rootkit é um pequeno software/programa que pode ser instalado e ocultado em seu computador sem seu conhecimento. Ele pode ser imbutido em um pacote maior de software ou instalado em seu computador através de uma vulnerabilidade em seu computador, talvêz convencendo Você a baixá-lo e instalá-lo (engenharia social). Rootkits não são necessariamente maliciosos, mas podem ocultar atividades maliciosas. Atacantes podem estar roubando informações, monitorando suas ações, modificando programas, ou realizando ações em seu computador, tudo isso sem ser detectado.

Botnet é um termo derivado da idéia de redes de robôs. Em sua forma mais básica um bot é simplesmente um programa de computador autônomo, ou robô. No contexto de botnets, bots se referem a computadores que possam ser controlados por uma ou mais fontes externas. Um atacante usualmente ganha o controle infectando o computador com um vírus ou outro código malicioso que lhe dá acesso. Seu computador poderá fazer parte de uma rede de bots mas aparentemente parecerá normal. Botnets são utilizadas para uma gama bastante abrangente de atividades, do envio de spam e distribuição de vírus, à ataques de negação de serviço.

Botnets e Rootkits são considerados ameaças principalmente por serem ocultos. Apesar de Botnets não serem ocultos da mesma forma que Rootkits, são também indetectáveis. Se um Rootkit está instalado em seu computador, Você provavelmente não está a par disto, inclusive anti-vírus convencionais também não estão preparados para estas formas de código maliciosos. O que torna mais difícil a detecção destes programas é que eles ainda estão sendo criados para atualizar a sí próprios.

Atacantes podem utilizar Rootkits e Botnets para acessar e modificar informações pessoais, atacar outros computadores, e cometer outros crimes, todos enquanto estão indetectáveis. Utilizando múltiplos computadores, atacantes aumentam o impacto de seus crimes. Pelo fato de uma Botnet possuir diversos computadores executando o mesmo comando, um atacante pode ter cada bot escaneando múltiplos computadores por vulnerabilidades, monitorando atividade online, ou coletando informações digitadas em formulários online.

Não é difícil se precaver dessas ameaças. Se Você já pratica boas medidas de segurança reduz em muito o risco de ter seu computador comprometido:

* Utilize e mantenha um antivírus que reconheça e proteja o computar contra os vírus mais conhecidos, assim Você tem a chance de detectar e remover programas maliciosos antes de causar algum dano. Pelo fato de os criadores de vírus estarem continuamente criando novas versões de seus vírus, é importante manter a biblioteca do antivírus sempre atualizada. Algumas empresas fornecedoras de antivírus ainda disponibilizam ferramentas exclusivas ao combate de rootkits, vale conferir;

* Alguns Firewalls são capazes de prevenir alguns tipos de tráfego malicioso e bloquear infecções antes que entrem no computador, limitando também o tráfego enviado pelo seu computador, caso este já esteja comprometido. O sistema operacional Windows já possue Firewall. Certifique de estar habilitado e corretamente configurado;

* Selecione senhas que sejam difíceis de serem descobertas por atacantes, e utilize senhas diferentes para serviços e equipamentos diferentes. NUNCA escolha “salvar senha neste computador”.

* Instale patches corretivos, então atacantes não poderão tomar vantagem de problemas conhecidos ou vulnerabilidades. Muitos sistemas operacionais oferecem atualizações automáticas, se esta opção estiver disponível, habilite.

* Siga as boas práticas de segurança. Tome as precauções apropriadas quando utilizar e-mail e navegadores, para reduzir o risco de suas ações iniciarem uma infecção.

Se Você tiver um Rootkit em seu computador, ou um atacante estiver utilizando seu computador em uma Botnet, Você pode não saber. Mesmo se Você descobrir que é uma vítima, é muito difícil para a maioria. O atacante pode modificar arquivos em seu computador, e a simples remoção do programa malicioso pode não remover o rootkit por completo, e não resolverá o problema. Se Você suspeita ser uma vítima, procure ajuda com um profissional.

Uma alternativa é utilizar software desenvolvidos por fabricantes de antivírus específicos para remover Rootkits. Se isto não resolver, Você vai precisar formatar e reinstalar o sistema operacional. Só uma formatação pode remover todos os arquivos do sistema, inclusive os infectados. Portanto, não basta fazer uma recuperação do sistema através de “Discos de Recuperação”.

Link para o artigo original.

Enviado em Linux, Segurança, Tecnico | Deixar um comentário »

Teste de Invasão em Redes Wireless

Publicado por Daniel Carraro Tomasini em Setembro 17, 2008

Este artigo fornece uma visão geral sobre o teste de invasão em redes wireless com base nas experiências práticas do autor. O leitor irá conhecer as vulnerabilidades das redes wireless, a metodologia para realizar o teste de invasão e as técnicas de ataque. Com as informações deste artigo, o leitor poderá realizar uma auditoria em sua rede wireless e criar regras de segurança no seu ambiente computacional sem fio.

Este documento também fornece a relação de antenas e softwares necessários para a realização da auditoria e do teste de invasão.

Introdução

Instalar redes wireless nos dias atuais tornou-se relativamente simples. Na realidade, quando a tecnologia das redes sem fio estava sendo desenvolvida, os principais objetivos sempre foram conectividade e acessibilidade de forma fácil. A segurança da informação não era um dos principais objetivos das redes sem fio. Podemos perceber isso claramente porque os mecanismos de segurança não oferecem uma solução robusta.

Realizar o teste de invasão na rede wireless da sua empresa, ajudará a minimizar os riscos e a entender, por exemplo, que filtros por Media Access Control (MAC) podem ser insuficientes contra um ataque de um hacker.

O teste de invasão na rede wireless é essencial para que sua empresa esteja em conformidade com o Sarbanes-Oxley, California Senate Bill 1386 (SB 1386) e HIPAA (Health Insurance Portability and Accountability Act). Estes regulamentos exigem que as empresas protejam informações de identificação pessoal. Sendo assim, as organizações devem considerar o teste de invasão em sua rede wireless para aumentar a segurança da informação.

Vulnerabilidades em Redes Wireless

Basicamente, existem dois tipos de vulnerabilidades em redes wireless. A primeira e a mais comum é a instalação/configuração padrão da rede wireless. A segunda vulnerabilidade está na criptografia utilizada para proteger as informações.

a) Problemas de configuração

A configuração padrão de uma rede sem fio é insegura. Este tipo de configuração facilita o acesso indevido à rede sem fio. O atacante precisa apenas configurar sua placa de rede wireless para acessar a rede.

b) Auditoria no WEP, WAP e LEAP

O administrador de rede pode determinar o tipo de criptografia que será utilizada na rede wireless. O Wired Equivalent Privacy (WEP) foi o primeiro recurso de segurança disponibilizado para redes wireless. Existem diversas ferramentas gratuitas que “quebram” a criptografia do WEP. O Aircrack (http://www.wirelessdefence.org/Contents/Aircrack_aircrack.htm) é uma suíte de ferramentas que consegue descobrir a chave do WEP, permitindo que o teste de invasão seja realizado com sucesso.

O WiFi Protected Access (WPA) e a solução proprietária da CISCO (LEAP) também estão vulneráveis. É possível durante o teste de invasão, realizar um ataque de dicionário para descobrir a chave utilizada para acesso à rede wireless. Caso a sua rede wireless utilize o WPA, o CoWPAtty(http://sourceforge.net/projects/cowpatty) realizará um ataque offline de dicionário para descobrir a chave compartilhada. É possível conseguir através da própria internet, uma lista de palavras em vários idiomas para o ataque de dicionário. Para download, acesse http://ftp.se.kde.org/pub/security/tools/net/Openwall/wordlists/.

Caso a sua rede utilize o Cisco’s Lightweight Extensible Authentication Protocol (LEAP) é possível realizar um ataque offline de dicionário. Isso ocorre devido ao LEAP trabalhar de forma semelhante ao Microsoft Challenge Handshake Protocol version 2 (MS-CHAPv2). Ou seja, assim como no MS-CHAPv2, o LEAP trabalha no esquema de pergunta e resposta, passando o usuário em texto claro pela rede. A vulnerabilidade foi descoberta em março de 2003. O engenheiro de redes, Joshua Wright (http://home.jwu.edu/jwright/), desenvolveu a ferramenta batizada de Asleap para realizar o ataque de dicionário sobre o LEAP.

Localizando sua Rede Wireless

Agora que você já conhece algumas vulnerabilidades das redes wireless é necessário escolher a antena correta para iniciar o teste de invasão.

Fundamentalmente, existem dois tipos de antenas que você pode utilizar durante o teste de invasão: omnidirecional e direcional. As antenas omnidirecional cobrem 360º no plano horizontal. Utilize este tipo de antena quando o teste de invasão for realizado em áreas amplas.

As antenas direcionais concentram o sinal em uma única direção. Este tipo de antena é utilizado quando você já identificou a rede wireless da sua empresa e precisa direcionar o sinal para esta rede. Ou seja, quando você executar os ataques para auditar a rede da sua empresa, todas as técnicas serão aplicadas na rede wireless correta. Utilize uma antena Yagi para o teste de invasão.

O próximo passo é interligar a antena ao seu laptop. Para mais informações, acesse http://www.warchalking.com.br/cgi-bin/base/tutoriais2.444?40.

Observação: O autor deste artigo utiliza um cartão PCMCIA Orinoco com um conector externo para a antena. A antena utilizada pelo autor deste artigo é uma direcional Corneta de polarização horizontal ou vertical para trabalhar na frequência de 2.4-2.48Ghz. O custo do cartão PCMCIA com a antena é de aproximadamente R$ 360,00 ou US$ 171,43. A antena tem aproximadamente 30cm e pesa 760g, excelente para levar dentro do carro ou mochila.

É importante observarmos a partir deste ponto, que existem diversas ferramentas para localizar uma rede wireless. Cada profissional deverá escolher a ferramenta que mais se identifica com o seu perfil técnico.

Wellenreiter

O Wellenreiter é uma excelente ferramenta, com interface gráfica, para localizar e monitorar redes wireless. Através do Wellenreiter é possível identificar diversas informações da rede wireless que está sendo monitorada, tais como: Canal de comunicação, o ESSID, MAC Address, se a rede utiliza ou não algum recurso de criptografia, o fabricante do Access Point, entre outras informações.

A ferramenta também registra todo o tráfego da rede wireless. Sendo assim, você poderá utilizar o Ethereal para abrir o arquivo que foi registrado todo o tráfego, para uma análise mais detalhada das informações.

“Diz a lenda” que as ferramentas disponíveis para monitoramento de redes wireless, não conseguem identificar se a rede está utilizando o WEP ou o WPA. As ferramentas apresentam a informação que a rede está utilizando o WEP. Isso obriga o profissional que está realizando a auditoria na rede wireless, a procurar (utilizando o Ethereal) o frame que contem “.P….”. Para facilitar o diagnóstico, o profissional poderá procurar nos “Tag information” por “WPA IE, type 1, version 1″.

Airodump

O Airodump (parte da suíte do Aircrack) é a ferramenta que ajudará o profissional a capturar o tráfego da rede wireless. O profissional deve utilizar esta ferramenta para capturar o tráfego porque é possível determinar qual será a rede monitorada. Ou seja, caso existam redes wireless de outras empresas próximas a rede wireless da sua empresa, você irá utilizar o Airodump para monitorar apenas o tráfego da rede wireless da sua empresa.

O Airodump também consegue identificar se a rede está utilizando o WEP ou o WPA, facilitando muito as técnicas de ataque para descobrir a chave utilizada na rede.

Observação: Utilize o tráfego capturado pelo Airodump em conjunto com as ferramentas que descobrem a chave utilizada em redes wireless com o WEP ou WPA. Antes de executar o Airodump, execute o Wellenreiter e deixe-o funcionando no seu laptop. Os dois programas irão trabalhar em conjunto.

Ferramentas e Procedimentos

Hardware para o teste de invasão (http://www.amazon.com/gp/product/B0009UC2A2/sr=8-6/qid=1142777224/ref=pd_bbs_6/002-5332413-6799242?%5Fencoding=UTF8)

Wellenreiter (http://www.wellenreiter.net/)

WAP Cracking (http://www.crimemachine.com/Tuts/Flash/WPA.html)

Aircrack para Linux ou Windows (http://tinyshell.be/aircrackng/wiki/index.php?title=Downloads).

Asleap (http://asleap.sourceforge.net/).

Procedimento de ataque ao WEP e ao WPA (http://www.grape-info.com/doc/linux/config/aircrack-2.3.html).

Apresentação de Joshua Wright para o Defcon 2003 (http://home.jwu.edu/jwright/presentations/asleap-defcon.pdf).

Mais informações sobre a vulnerabilidade no LEAP da CISCO (http://www.cisco.com/warp/public/707/cisco-sn-20030802-leap.shtml).

Observações Finais

a) Ataques por dicionário: A lista de palavras disponíveis no site http://ftp.se.kde.org/pub/security/tools/net/Openwall/wordlists/ é excelente para ataques de dicionário. O ponto positivo da utilização desta lista é que não existem palavras repetidas no arquivo. O ponto negativo é que não existe um dicionário para o idioma Português.

b) WEP: É necessário capturar um número grande de pacotes quando a rede wireless está sendo protegida pelo WEP. Durante os testes de invasão realizados pelo autor deste artigo, foi necessário a captura de um número superior a 300.000 IVs (Initialization Vectors). Para capturar um número tão grande de pacotes contendo IVs, podem ser necessárias várias horas de monitoramento da rede alvo. Existem técnicas intrusivas (capturar e re-injetar pacotes ARP, desconectar as estações de trabalho do Access Point, etc) que forçam o tráfego de pacotes contendo IVs que não foram apresentadas ou discutidas neste artigo.

c) WPA: Não é necessário um número grande de pacotes. Porém, é necessário capturar o tráfego de pacotes TKIP (Temporal Key Integrity Protocol) para que as ferramentas consigam descobrir a chave utilizada na rede wireless.

d) WPA2: O autor deste artigo não conhece vulnerabilidades no WPA2. As técnicas e ferramentas descritas no artigo não funcionam em redes wireless que utilizam o WPA2.

e) Pacotes mal formatados: durante o monitoramento da rede serão capturados diversos pacotes mal formatados. As ferramentas utilizadas durante o teste de invasão não funcionaram corretamente com pacotes mal formatados. Utilizando o Ethereal você poderá identificar quais são os pacotes mal formatados.

f) KNOPPIX: para não prejudicar o HD do seu laptop, utilize o Knoppix (http://www.knoppix.org/).

g) Modelos de placas PCMCIA:

http://www.radiolabs.com/products/wireless/networking/buffalo-wireless-notebook-card.php?PHPSESSID=1ad36f381c77246796ae012f035955e6

http://store.microcom.us/nl2511cdplusx2.html

http://www.seattlewireless.net/HardwareComparison

g) Antena utilizada pelo autor do artigo: http://www.pluton.com.br/Site_Portugues/antenas/ptx18.htm.

Escrito por: Denny Roger é especialista nas áreas de projeto de rede segura e intrusão de rede, liderando regularmente os esforços de teste de penetração na Batori Software & Security, onde pode demonstrar, em primeira mão, sobre o impacto das vulnerabilidades da rede no dia-a-dia. Atualmente é diretor de negócios de segurança da Batori Software & Security.

Enviado em Redes, Segurança, Tecnico | 2 Comentários »

Firewall

Publicado por Daniel Carraro Tomasini em Agosto 27, 2008

O Linux, de uma forma geral, é relativamente imune a vírus, worms e trojans, que são a principal causa de invasões e dores de cabeça em geral no Windows. Isso não ocorre apenas porque o Windows é usado em mais máquinas e por isso um alvo maior, mas também porque os aplicativos disponíveis no Linux são, pela média, bem mais seguros.

Veja o caso do Apache, por exemplo. Ele é usado em uma percentagem muito maior de servidores que o IIS. Mesmo assim, o número de falhas críticas de segurança e invasões bem-sucedidas registradas contra servidores web rodando o IIS é bem maior do que nos mais numerosos servidores Apache.

Mesmo assim, brechas de segurança podem surgir onde menos se espera. Por exemplo, em 2004 foi descoberto um buffer overflow no servidor SSH, que poderia ser usado para desenvolver um exploit. Esta brecha não chegou a ser explorada, pois, assim que a possível vulnerabilidade foi descoberta, uma correção foi rapidamente disponibilizada e a notícia se espalhou pela web. Antes que alguém tivesse tempo de escrever um exploit, a maior parte dos servidores do mundo já estavam seguros.

A moral da história: é sempre muito melhor prevenir do que remediar, e a melhor forma de se proteger contra brechas deste tipo é manter um firewall ativo, permitindo apenas acesso aos serviços que você realmente deseja disponibilizar. Reduzindo os pontos vulneráveis, fica mais fácil cuidar da atualização dos serviços expostos e, assim, manter seu servidor seguro.

Imagine o firewall como a muralha que cercava muitas cidades na idade média. Mesmo que as casas não sejam muito seguras, uma muralha forte em torno da cidade garante a segurança. Se ninguém consegue passar pela muralha, não é possível chegar até as casas vulneráveis. Se, por acaso, as casas já são seguras, então a muralha aumenta ainda mais a segurança.

A idéia mais comum de firewall é como um dispositivo que fica entre o switch (ou hub) em que estão ligados os micros da rede e a internet. Nesta posição é usado um PC com duas placas de rede (eth0 e eth1, por exemplo), onde uma é ligada à internet e outra à rede local.

O firewall aceita as conexões vindas dos micros da rede local e roteia os acessos à internet. De dentro da rede você consegue acessar quase tudo, mas todas as tentativas de conexão vindas de fora são bloqueadas antes de chegarem aos clientes.

Imagine um micro com o Windows XP, onde o sistema acabou de ser instalado, sem nenhuma atualização de segurança e com o firewall inativo. Conectando este micro na internet diretamente, será questão de minutos até que ele comece a ser infectado por worms e se transforme em um zumbi a atacar outras máquinas ligadas a ele.

Entretanto, se houver um firewall no caminho, os pacotes nocivos não chegam até ele, de forma que ele fica em uma posição relativamente segura. Ele ainda pode ser infectado de formas indiretas, como ao acessar uma página que explore uma vulnerabilidade do IE ou ao receber um e-mail infectado através do Outlook, mas não mais diretamente, simplesmente por estar conectado à internet.

Opcionalmente, o servidor rodando o firewall pode ser equipado com um servidor Squid configurado para remover arquivos executáveis das páginas acessadas e um servidor Postfix, encarregado de bloquear mensagens infectadas, o que adiciona mais um nível de proteção.

Note que o firewall em si não protege contra vírus e trojans, mas apenas contra tentativas diretas de conexão. Ele cria uma barreira entre os micros da rede local e a internet, fazendo com que os recursos compartilhados na rede não sejam acessíveis de fora. No Linux, o firewall é incluído no próprio Kernel do sistema, na forma do Iptables, encontrado no Kernel 2.4 em diante. Isso garante um excelente desempenho e segurança em relação à maioria dos firewalls for Windows, que rodam em nível de aplicação.

Embora seja sempre mais seguro ter um servidor dedicado, você pode ter um nível de segurança muito bom simplesmente habilitando o firewall localmente. Todos os pacotes provenientes da internet passam primeiro pelo Iptables antes de serem encaminhados para os aplicativos. Por isso, um firewall local, bem configurado, garante uma segurança muito próxima à de um firewall dedicado.

Escrevendo um Script de Firewall

Existem muitos firewalls gráficos for Linux, como o GuardDog, o Shorewall e o Firestarter (que comento adiante). Eles variam em nível de facilidade e recursos, oferecendo uma interface amigável e gerando as regras do Iptables de acordo com a configuração feita. Você pode escolher entre usar o programa que melhor atenda suas necessidades ou configurar diretamente o Iptables com as regras desejadas. Neste caso, você pode formular as regras diretamente, definindo condições onde os pacotes serão aceitos ou recusados, como em:

# iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT

Estes comandos seguem uma sintaxe comum: tudo começa com o comando “iptables“, que é quem executará as opções incluídas no comando. Em seguida vem uma condição, indicada pela opção “-A”. Neste exemplo usei “INPUT -p tcp -s 192.168.0.0/255.255.255.0″, que se aplica a qualquer pacote de entrada (INPUT), utilizando o protocolo TCP (-p tcp), proveniente dos micros da rede local (192.168.0.0/255.255.255.0). Note que aqui estou especificando uma faixa de endereços e a máscara de sub-rede. No final, é preciso dizer o que fazer com os pacotes que se enquadrarem nesta situação, indicando uma ação. O “-j ACCEPT” diz que estes pacotes devem ser aceitos.

À primeira vista, isso parece bem complicado, assim como o arquivo de configuração original do Squid, com suas 3.000 e tantas linhas. Mas, as coisas ficam bem mais simples se começarmos com um script simples e formos incluindo novas regras aos poucos.

Este é um exemplo de script que pode ser usado em um desktop que simplesmente acessa a internet como cliente, sem rodar nenhum servidor, nem compartilhar a conexão com outros micros:

# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -p tcp –syn -j DROP

A idéia aqui é que o micro possa acessar a internet sem que ninguém de fora possa invadi-lo de forma alguma. Esses dois comandos fazem isso da forma mais simples possível.

A primeira linha orienta o firewall a deixar passar os pacotes enviados através da interface de loopback (-i lo -j ACCEPT). É importante que esta linha (ou outra com o mesmo efeito) sempre seja usada, em qualquer script de firewall que termine bloqueando todas as conexões, pois no Linux a interface de loopback é usada para comunicação entre diversos programas. Para ter uma idéia, todos os programas gráficos a utilizam para se comunicarem com o X, os programas do KDE a utilizam para trocar mensagens entre si. Sem esta regra, muita coisa deixa de funcionar corretamente.

Depois de abrir o firewall para as mensagens locais, usamos a segunda regra para bloquear todas as novas conexões vindas de fora. O “–syn” faz com que o firewall aplique a regra apenas para tentativas de abrir novas conexões (alguém tentando acessar o servidor SSH que você esqueceu aberto, por exemplo), mas sem impedir que servidores remotos respondam a conexões iniciadas por você. Isso permite que você continue navegando e acessando compartilhamentos em outros micros da rede local, com poucas limitações.

Para não precisar ficar digitando os comandos cada vez que precisar reiniciar o micro, você pode incluí-los em um dos arquivos de inicialização do sistema. Nas distribuições derivadas do Debian, você pode colocá-los no final do arquivo “/etc/init.d/bootmisc.sh” e, nas derivadas do Red Hat, no arquivo “/etc/rc.d/rc.local“.

Essas duas regras podem ser usadas como base para criar o que chamo de firewall de bloqueio. Ele segue uma idéia bastante simples: você diz as portas que gostaria de abrir e ele fecha todas as demais. Ou seja, o firewall fecha por padrão todas as portas, com exceção das que você disser explicitamente que deseja manter abertas. Isso garante uma configuração de firewall bastante segura com um mínimo de dor de cabeça.

Você pode adicionar novas regras, abrindo portas, direcionando faixas de portas para micros da rede interna, fechando portas de saída, de forma a bloquear o uso de programas como o ICQ e o MSN e assim por diante.

Imagine que você está configurando o firewall do servidor da rede. Ele tem duas placas de rede, uma para a rede local e outra para a internet. Você precisa que ele fique acessível sem limitações dentro da rede local, mas quer manter tudo fechado para quem vem da internet.

Nesse caso, você poderia usar a regra que mostrei há pouco no seu script de firewall:

# Abre para uma faixa de endereços da rede local
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT

O “192.168.0.0″ indica a faixa de endereços da rede local. A máscara “255.255.255.0″ indica que a última parte do endereço muda, ou seja, os micros da rede local usam endereços entre 192.168.0.1 e 192.168.0.254. Tudo o que vier deles (tanto TCP, quanto UDP, já que não indicamos o protocolo) é aceito.

Note que esta faixa de endereços não é roteável, ela simplesmente não existe na internet. Não existe a possibilidade de algum engraçadinho de outro estado tentar configurar seu micro para usar esta faixa de endereços e enganar a regra do firewall.

Como uma proteção adicional, as versões recentes do Iptables são capazes de ignorar pacotes aparentemente destinados a uma interface quando eles chegam em outra. Com duas placas, onde uma está ligada à rede local (usando a faixa 192.168.0.x) e outra à Internet, o firewall não aceitará que um pacote falseado, proveniente da Internet, com endereço de emissor “192.168.0.3″ (por exemplo), seja encaminhado a um micro da rede local, pois ele sabe que pacotes com este endereço de emissor devem chegar apenas pela placa ligada à rede local.

Essa mesma regra pode ser usada também para abrir o firewall para endereços ou faixas de endereços da internet. Imagine que você queira dar acesso aos micros da filial da sua empresa em Macapá, onde usam um link com o IP fixo 200.220.234.12. Você poderia abrir a faixa 200.220.234.0 ou apenas o IP 200.220.234.12, de forma que o firewall permitisse acessos vindos de lá, mas continuasse bloqueando o restante. Você pode abrir para várias faixas de endereços distintas, basta repetir a linha adicionando cada uma das faixas desejadas.

Imagine agora que este servidor foi instalado na sede de uma empresa para a qual você presta serviços. Você precisa acessá-lo de vez em quando para corrigir problemas, mas naturalmente quer fazer isso via internet, sem precisar se deslocar até lá. Você pode configurar o firewall para abrir a porta 22 usada pelo SSH adicionando a regra:

# Abre uma porta (inclusive para a internet)
iptables -A INPUT -p tcp –dport 22 -j ACCEPT

Note que esta regra abre a porta 22 para todo mundo. Lembre-se do exemplo do SSH: todo servidor disponível para a internet é um risco potencial de segurança, por isso só abra as portas para os servidores que você realmente for utilizar. O ideal seria usar um par de chaves, protegidas por uma passphrase para acessar o servidor e configurá-lo para não aceitar logins com senha (apenas com chaves), como vimos no capítulo sobre SSH.

Ao abrir várias portas, você pode utilizar o parâmetro “-m multiport” para especificar todas de uma vez, separadas por vírgula, sem precisar colocar uma em cada linha. Para abrir as portas 21, 22 e 6881 (bittorrent), por exemplo, você usaria a regra abaixo:

# Abre um conjunto de portas
iptables -A INPUT -m multiport -p tcp –dport 21,22,6881 -j ACCEPT

Se você presta suporte a partir de uma empresa que possui um link dedicado, com IP fixo, você pode tornar a regra mais específica, permitindo apenas o IP de onde você acessa:

# Abre uma porta para um IP específico
iptables -A INPUT -p tcp -s 200.231.14.16 –dport 22 -j ACCEPT

Em um micro doméstico, você pode abrir também as portas usadas pelo bittorrent (6881 a 6889) ou portas usadas por jogos multiplayer, por exemplo. Para abrir um intervalo de portas, use a regra:

# Abre um intervalo de portas
iptables -A INPUT -p tcp –dport 6881:6889 -j ACCEPT

Além de trabalhar com endereços IP, é possível criar regras baseadas também em endereços MAC. Isso permite adicionar uma camada extra de proteção ao criar regras para a rede local. Para isso, usamos o parâmetro “-m mac –mac-source”, seguido pelo endereço MAC da placa do host desejado. Para permitir que o host “192.168.1.100″ tenha acesso ao servidor, mas apenas se o endereço MAC da interface bater, você usaria uma regra como:

iptables -A INPUT -s 192.168.1.100 -m mac –mac-source 00:11:D8:76:59:2E -j ACCEPT

Note que agora, além do IP, especificamos o endereço MAC da placa. As duas regras são usadas em conjunto, de forma que o acesso é permitido apenas caso as duas informações estejam corretas. Isso dificulta as coisas para alguém que queira acessar o servidor trocando o IP de sua máquina. Você pode descobrir o MAC das máquinas da rede usando o próprio ifconfig ou o comando “arp -a”.

Note que limitar o acesso com base no endereço MAC adiciona uma camada extra de proteção, mas não é infalível. O endereço MAC pode ser trocado de forma quase tão simples quanto o endereço IP e, sniffando a rede, é possível descobrir os endereços IP e MAC dos micros com uma certa facilidade.

No Linux, você pode trocar o endereço MAC da placa de rede usando os comandos:

# ifconfig eth0 down
# ifconfig eth0 hw ether 00:11:D8:76:59:2E
# ifconfig eth0 up

Como vê, basta especificar o endereço desejado. O Iptables não é capaz de diferenciar máquinas com os endereços MAC falseados das reais, pois, se alguém desconectasse o micro 192.168.1.100 da rede e configurasse o seu para usar o mesmo IP e MAC, poderia acessar o servidor bipassando a regra de firewall. A única forma de ter uma segurança completa seria utilizar o SSH ou outro protocolo que utilize um algoritmo robusto de encriptação para o login e a transmissão dos dados.

Lembre-se de que o firewall é uma primeira barreira de proteção, mas não é uma garantia por sí só. É preciso combiná-lo com outras camadas de segurança para ter um servidor completamente seguro.

Outra limitação é que as regras baseadas em endereços MAC podem ser usadas apenas dentro da rede local. O endereço MAC é descartado do pacote quando ele é roteado para a Internet, ficando apenas o endereço IP. Ao acessar através de uma conexão compartilhada, todos os pacotes provenientes da Internet chegam com o endereço MAC do gateway da rede.

Este é um exemplo de script completo, incluindo algumas regras adicionais para evitar ataques comuns:

#!/bin/bash

iniciar(){

# Abre para uma faixa de endereços da rede local
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT

# Abre uma porta (inclusive para a internet)
iptables -A INPUT -p tcp –dport 22 -j ACCEPT

# Ignora pings
iptables -A INPUT -p icmp –icmp-type echo-request -j DROP

# Protege contra IP spoofing (esta opção já vem ativada por padrão na
# maioria das distribuições atuais, mas não custa ter certeza)
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter

# Descarta pacotes malformados, protegendo contra ataques diversos
iptables -A INPUT -m state –state INVALID -j DROP

# Abre para a interface de loopback. Esta regra é essencial para que
# o KDE e outros programas gráficos funcionem adequadamente.
iptables -A INPUT -i lo -j ACCEPT

# Impede a abertura de novas conexões, efetivamente bloqueando o acesso
# externo ao seu servidor, com exceção das portas e faixas de endereços
# manualmente especificadas anteriormente. Bloqueia tudo.
iptables -A INPUT -p tcp –syn -j DROP

}

parar(){
iptables -F
echo “Regras de firewall desativadas”
}

case “$1″ in
“start”) iniciar ;;
“stop”) parar ;;
“restart”) parar; iniciar ;;
*) echo “Use os parâmetros start ou stop”
esac

A receber qualquer conexão, vinda de qualquer endereço, o firewall primeiro verifica todas estas regras, seqüencialmente, para decidir se o pacote passa ou não. Usando esse script de exemplo, teríamos o seguinte:

- Se o pacote vier da rede local, ele é aceito.
- Se o pacote for para porta 22 (do SSH), ele é aceito.
- Se for um ping, ele é recusado (de forma a dificultar um pouco para outros descobrirem que você está online).
- Pacotes danificados ou forjados (unclean) são recusados, protegendo os micros da rede interna.
- Se o pacote vier da sua própria máquina (um programa tentando mostrar alguma coisa na tela, por exemplo), ele é aceito.
- Se o pacote for uma resposta a uma conexão que você iniciou, como, por exemplo, o servidor do guiadohardware.net enviando a página do site que você está acessando, ele é aceito.
- Tentativas de conexão (toda conexão TCP é iniciada por um pacote syn) fora das condições especificadas acima são descartadas pelo firewall. A conexão nem sequer chega a ser estabelecida e o emissor não recebe qualquer resposta (DROP). Ele não sabe se o pacote foi recebido ou não, fica no vácuo, o que dá a impressão de que o seu micro nem está online.

Da forma como escrevi, o script suporta as funções “start”, “stop” e “restart”, e pode ser usado como um serviço de sistema. Salve-o dentro da pasta “/etc/init.d”, como em “/etc/init.d/firewall”, e marque a permissão de execução:

# chmod +x /etc/init.d/firewall

A partir daí, você pode ativar as regras usando o comando “/etc/init.d/firewall start” e fazer com que alterações dentro do script entrem em vigor com um “/etc/init.d/firewall restart”.

Se você está configurando um servidor dedicado remotamente, é importante que você teste o script antes de configurar o sistema para executá-lo automaticamente durante o boot. O motivo é simples: se houver alguma regra incorreta no script, que bloqueie seu acesso ao servidor, você poderá solicitar um reboot do servidor para que a configuração seja removida e você recupere o acesso. Entretanto, se o sistema for configurado para carregar o script durante o boot, o reboot não resolverá e você precisará abrir uma chamada de suporte, solicitando que um técnico se logue localmente no servidor e desative seu script (o que provavelmente resultará em uma taxa adicional).

Uma opção mais relaxada seria simplesmente colocar os comandos com as regras desejadas no final do arquivo “/etc/init.d/bootmisc.sh” ou “/etc/rc.d/rc.local”, mas isso não é tão recomendável, pois você perde a possibilidade de reiniciar o firewall rapidamente depois de alterar as regras.

Assim como nas regras do Squid, cada pacote que chega pela rede precisa passar por todas as regras, para que o firewall possa decidir o que fazer com ele. Quando aceito por uma das regras, ele é imediatamente encaminhado ao aplicativo, sem passar pelas demais. Por isso é necessário sempre colocar as regras mais restritivas por último, de preferência concluindo o script com uma regra que bloqueia todos os pacotes de entrada.

Outra dica é que você pode incluir os comandos para compartilhar a conexão e ativar o proxy transparente (que também são regras de firewall) no script, fazendo que ele desempenhe simultaneamente as duas funções. Nesse caso, tome o cuidado de sempre colocar as regras que compartilham a conexão e ativam o proxy transparente antes das regras que bloqueiam conexões.

Este é um exemplo de script de firewall que inclui as regras para compartilhar a conexão e ativar o proxy transparente. Ao usá-lo, comente as linhas que não se aplicam à sua instalação:

#!/bin/bash

iniciar(){

# Compartilha a conexão
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp –tcp-flags SYN,RST SYN -m tcpmss –mss 1400:1536 \
-j TCPMSS –clamp-mss-to-pmtu
echo “Compartilhamento ativado”

# Proxy transparente
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT –to-port 3128
echo “Proxy transparente ativado”

# As regras de firewall que vimos há pouco:
iptables -A INPUT -s 192.168.0.0/255.255.255.0 -j ACCEPT
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -p icmp –icmp-type echo-request -j DROP
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp –syn -j DROP

}

parar(){
iptables -F
iptables -t nat -F
echo “Regras de firewall e compartilhamento desativados”
}

case “$1″ in
“start”) iniciar ;;
“stop”) parar ;;
“restart”) parar; iniciar ;;
*) echo “Use os parâmetros start ou stop”
esac

Outra dica importante são os comandos usados para limpar as regras do Iptables. É necessário executá-los sempre que você fizer alterações no seu script de firewall e quiser executá-lo novamente para que as novas regras entrem em vigor. No primeiro script de exemplo, por exemplo, uso o comando “iptables -F” como parte da função “stop”, que desativa o firewall. No segundo script, incluí também o “iptables -t nat -F”.

iptables -F: Limpa a tabela principal do iptables, onde vão os comandos para abrir e fechar portas, que vimos até aqui.

iptables -t nat -F: Limpa a tabela nat, que é usada por regras que compartilham a conexão e fazem forwarding de portas, como por exemplo:

iptables -t nat -A PREROUTING -i eth0 –dport 22 -j DNAT –to-dest 192.168.1.2

Todas as regras do Iptables que levam “-t nat” são armazenadas nesta segunda tabela, que precisa ser zerada separadamente. A idéia é que você pode limpar as regras principais do firewall sem desabilitar o compartilhamento da conexão e vice-versa.

iptables -L: Este comando lista a configuração atual, sem alterar nada. É interessante executá-lo depois de fazer alterações na configuração do firewall, para ter certeza que as regras surtiram o efeito esperado. Para ver as regras de forwarding e compartilhamento, use também o “iptables -t nat -L

Forwarding de Portas

Você deve lembrar que, ao compartilhar uma conexão entre vários micros, apenas o servidor que está com a conexão recebe conexões vindas da internet. Os micros da rede local acessam via NAT e apenas recebem respostas para conexões iniciadas por eles.

Mas, imagine que você queira que um servidor web, escutando na porta 80 do micro 192.168.0.3 da rede local, fique disponível para a internet. Como o servidor é o único com um IP válido na internet, a única forma de fazer com que o 192.168.0.3 fique acessível é fazer com que o servidor “passe a bola” para ele ao receber conexões na porta 80. É justamente isso que fazemos ao configurar o forwarding de portas.

Uma vez feita a configuração, sempre que o servidor receber uma conexão qualquer na porta 80 (ou qualquer outra definida por você), ele a repassará para o micro 192.168.0.3. Isso é feito de forma completamente transparente, forma que o emissor nem percebe que quem respondeu à solicitação foi outro servidor.

Essa opção pode ser usada também para permitir que os micros da rede local fiquem com as portas do bittorrent abertas (de forma a baixar arquivos com um melhor desempenho), rodem servidores de games online ou qualquer outra tarefa onde seja necessária manter determinadas portas TCP ou UDP abertas. A limitação é que continua existindo uma única porta 80, uma única porta 21, etc. de forma que apenas um micro da rede interna pode receber cada porta de cada vez.

Veja um exemplo de como redirecionar as portas 6881 a 6889 usadas pelo Bittorrent para o micro 192.168.0.10 da rede local:

# Redireciona uma faixa de portas para um micro da rede local.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -i eth0 –dport 6881:6889 -j DNAT \
–to 192.168.0.10
iptables -t nat -A POSTROUTING -d 192.168.0.10 -j SNAT –to 192.168.0.1

Esta regra é um pouco mais complexa, pois trabalha em duas fases. A primeira faz com que o servidor encaminhe todas as conexões que receber na interface e porta especificada para o micro da rede local e a segunda faz com que os pacotes de resposta enviados por ele posam ser encaminhados de volta. Para que ambas funcionem, é necessário usar o comando “echo 1 > /proc/sys/net/ipv4/ip_forward”, que ativa o forwarding de portas. É o mesmo comando que usamos ao compartilhar a conexão.

Nos parâmetros que coloquei em negrito, a “eth0″ é a placa de internet, onde chegam os pacotes, a “6881:6889″ é a faixa de portas que estão sendo redirecionadas e o “192.168.0.10″ é o IP do micro dentro da rede local que passa a receber as conexões destinadas a ela. Na segunda regra, temos repetido o IP do micro na rede local e, em seguida, o “192.168.0.1″ que indica o IP do servidor, dentro da rede local.

Para redirecionar uma única porta, ao invés de uma faixa, basta citar a porta sem usar os “:”, como em:

# Redireciona uma única porta para um micro da rede local.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -i eth0 –dport 22 -j DNAT –to 192.168.0.10
iptables -t nat -A POSTROUTING -d 192.168.0.10 -j SNAT –to 192.168.0.1

É possível ainda indicar uma lista de portas (usando a opção -m multiport), como em:

# Redireciona um conjunto de portas
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -i eth0 -m multiport –dport 21,22,80 -j DNAT \
–to-dest 192.168.0.10
iptables -t nat -A POSTROUTING -d 192.168.0.10 -j SNAT –to 192.168.0.1

Note que nos três exemplos usei o parâmetro “-p tcp”. Ele é necessário, mas faz com que a regra se aplique apenas a portas TCP. Caso você precise fazer forwarding de portas UDP, deve alterar o protocolo dentro da regra, como em:

# Redireciona uma porta UDP
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p udp -i eth0 –dport 53 -j DNAT –to 192.168.0.10
iptables -t nat -A POSTROUTING -d 192.168.0.10 -j SNAT –to 192.168.0.1

Bloquiando Portas de Saída

Mais um uso importante para o firewall é bloquear portas de saída, ou seja, bloquear portas no sentido rede local > internet. Isso permite bloquear o uso de determinados programas que utilizem estas portas.

O MSN, por exemplo, utiliza originalmente a porta 1863. Nas versões recentes ele é capaz de se conectar também através da porta 80 (ou através de sites como o meebo.com, que permitem acessar o MSN diretamente através do navegador). Por isso, ao bloquear a porta 1863, os clientes podem continuar conseguindo se conectar, porém, você obriga o tráfego a passar pela porta 80, onde tem a chance de fazê-lo passar por um servidor Squid, configurado como proxy transparente. Isso permite logar os acessos ou sabotar o sistema de autenticação do MSN, bloqueando os domínios “messenger.hotmail.com” e “webmessenger.msn.com”, além de outros sites que ofereçam clientes via web.

Hoje em dia, cada vez mais programas são capazes de acessar a Web através da porta 80, 443 (https) ou via proxy, o que torna difícil bloqueá-los. Em muitos casos, é preciso usar uma combinação de portas fechadas no firewall, bloqueio a endereços IPs específicos e bloqueio de determinados domínios no Squid.

Ao criar as regras do Iptables, existem duas opções. Bloqueando a porta para “FORWARD”, você impede o acesso a partir dos micros da rede local, que acessam através da conexão compartilhada pelo servidor. Bloqueando para “OUTPUT”, a porta é bloqueada no próprio micro onde o firewall está ativo. Você pode bloquear as duas situações, duplicando a regra:

iptables -A OUTPUT -p tcp –dport 1863 -j REJECT
iptables -A FORWARD -p tcp –dport 1863 -j REJECT

Você pode ainda bloquear intervalos de portas, separando-as por “:”, como em:

iptables -A FORWARD -p tcp –dport 1025:65536 -j REJECT

Como estamos criando regras para os micros da rede local e não para possíveis invasores provenientes da Internet, é aconselhável usar a regra “REJECT” ao invés de “DROP”. Caso contrário, os programas nos clientes sempre ficarão muito tempo parados ao tentar acessar portas bloqueadas, o que vai gerar reclamações e um certo overhead de suporte.

Você pode descobrir facilmente quais portas de saída são utilizados por cada programa fazendo buscas no Google, mas tentar bloquear um a um todos os programas indesejados acaba sendo tedioso. Ao invés disso, você pode experimentar um solução mais radical: inverter a lógica da regra, bloqueando todas as portas de saída e abrindo apenas algumas portas “permitidas”.

O mínimo que você precisa abrir neste caso são as portas 80 e 53 (dns). A partir daí, você pode abrir mais portas, como a 21 (ftp), 25 (smtp), 110 (pop3) e assim por diante. Um exemplo de configuração neste caso seria:

iptables -A FORWARD -p udp -i eth1 –dport 53 -j ACCEPT
iptables -A FORWARD -p tcp -i eth1 –dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -i eth1 –dport 21 -j ACCEPT
iptables -A FORWARD -p tcp -i eth1 -j LOG
iptables -A FORWARD -p tcp -i eth1 -j REJECT

Veja que todas as regras especificam a interface da rede local (eth1 no exemplo), de onde serão recebidas as conexões dos clientes. Note que não incluí nenhum bloqueio para forwarding de pacotes provenientes da interface eth0 (da internet), pois a idéia é bloquear diretamente as requisições dos clientes e não as respostas. Em uma conexão TCP típica, o cliente envia a requisição na porta TCP usada pelo serviço, mas recebe a resposta em uma porta aleatória. Este é um exemplo de entrada no log do Iptables que mostra a resposta a uma conexão http normal. Veja que ela está endereçada à porta 45159 do cliente:

IN=eth0 OUT=eth1 SRC=64.233.169.99 DST=192.168.0.10 LEN=40 TOS=0×00 PREC=0×00 TTL=239 ID=36813 PROTO=TCP SPT=80 DPT=45159 WINDOW=8190 RES=0×00 ACK FIN URGP=0

No caso da porta 53 (DNS) estou especificando o protocolo UDP, ao invés de TCP, pois as requisições são feitas usando portas UDP para ganhar tempo. Embora os servidores DNS escutem tanto na porta 53 TCP, quanto UDP, na prática quase sempre é usada a porta 53 UDP, pois o tempo de resposta é menor. No UDP a requisição é simplesmente respondida da forma mais rápida possível, enquanto que no TCP é necessário abrir e encerrar a conexão.

A regra “iptables -A FORWARD -j LOG” é uma boa opção durante a fase de testes, pois ela faz com que o Iptables logue todos os pacotes que forem encaminhados (tanto envio, quanto resposta), permitindo que você verifique o que está ocorrendo quando algo não estiver funcionando. Você pode acompanhar o log usando o comando “dmesg”.

Colocado nesta posição (depois das regras que autorizam as conexões nas portas 53 e 80), ele vai mostrar apenas as requisições bloqueadas pelo firewall, dando-lhe a chance de acompanhar os acessos dos clientes e permitir portas adicionais sempre que necessário.

Por exemplo, esta estrada (no log) mostra uma tentativa de conexão de um cliente MSN rodando no micro “192.168.0.10″ que foi bloqueada pelo firewall:

IN=eth1 OUT=eth0 SRC=192.168.0.10 DST=207.46.28.77 LEN=60 TOS=0×00 PREC=0×00 TTL=63 ID=21328 DF PROTO=TCP SPT=38119 DPT=1863 WINDOW=5840 RES=0×00 SYN URGP=0

A opção “DTP” indica a porta usada. Se quisesse autorizar o uso do programa, você adicionaria a regra “iptables -A FORWARD -p tcp -i eth1 –dport 1863 -j ACCEPT” em seu script.

Outra opção, para não precisar abrir tantas portas e ter um melhor controle sobre o tráfego de saída é usar um servidor Squid configurado como proxy transparente (interceptando o tráfego da porta 80) e rodar servidores locais para DNS e e-mail (você pode configurar um servidor Postfix como sistema satélite, de forma que ele envie os e-mails dos usuários da rede usando o SMTP do provedor), de forma que qualquer acesso precise necessariamente passar por algum dos serviços ativos no servidor, sujeito a log e aos bloqueios que configurar.

Neste caso, desabilite o compartilhamento da conexão (ou bloqueie o forward de todas as portas) e configure os clientes para utilizarem o IP do servidor como DNS, servidor SMTP, POP e outros serviços que tenha ativado. Mesmo ao ser configurado como proxy transparente, o Squid continua funcionando como um proxy tradicional, através da porta 3128. Você pode configurar clientes de FTP e outros programas com suporte a proxy para acessarem através dele. A vantagem sobre o acesso direto é que ao passar pelo proxy, tudo fica registrado e todo acesso precisa passar pelos filtros de domínios, formatos de arquivos, limitação de banda, etc. definidos por você.

Complementando o bloqueio de portas, você pode também bloquear o acesso de determinados endereços IP, como em:

# Bloqueia o acesso à web a partir de um determinado IP
iptables -A FORWARD -p tcp -s 192.168.0.67 -j REJECT

Esta regra deve ir logo no início do script, antes das regras que abrem portas de saída, caso contrário não surtirá efeito. Lembre-se de que o Iptables processa as regras seqüencialmente: se uma compartilha a conexão com todos os micros da rede, não adianta tentar bloquear para determinados endereços depois. As regras com as exceções devem sempre vir antes da regra mais geral.

Bloquiando Domínios

É possível ainda bloquear ou permitir com base no domínio, tanto para entrada quanto saída. Isso permite bloquear sites e programas diretamente a partir do firewall, sem precisar instalar um servidor Squid e configurá-lo como proxy transparente. Nesse caso, usamos o parâmetro “-d” (destiny) do Iptables, seguido do domínio desejado.

Para bloquear os acessos ao Orkut, por exemplo, você usaria as regras:

iptables -A OUTPUT -d orkut.com -j DROP
iptables -A FORWARD -d orkut.com -j DROP

A primeira linha bloqueia pacotes de saída destinados ao domínio, ou seja, impede que ele seja acessado a partir da própria máquina local. A segunda linha bloqueia o forward de pacotes destinados a ele (domínio), ou seja, impede que outras máquinas da rede local, que acessam através de uma conexão compartilhada acessem-no.

Se for paranóico, você pode usar também a regra:

iptables -A INPUT -s orkut.com -j DROP

Esta regra impede também que qualquer pacote proveniente do orkut.com chegue até a sua máquina. Como disse, é apenas para paranóicos ;) .

Originalmente, o Iptables sabia trabalhar apenas com endereços IP. A possibilidade de criar regras baseadas em domínios são um recurso um pouco mais recente, onde o firewall faz um lookup do domínio, para descobrir qual é o IP atual e assim poder bloqueá-lo. Você pode verificar o IP usado pelo servidor de um determinado domínio usando o comando “dig” (que no Debian faz parte do pacote “dnsutiuls”), como em:

$ dig orkut.com

A vantagem de criar as regras do firewall baseado em domínios é que a regras são automaticamente atualizadas caso o servidor do site mude de endereço.

Ao bloquear o “orkut.com” no Iptables, você automaticamente bloqueia o “www.orkut.com” ou qualquer outra variante ou outros domínios que levem ao mesmo servidor. A principal limitação é que a regra não se aplica a subdomínios hospedados em diferentes servidores. Por exemplo, você pode bloquear o domínio “uol.com.br”, mas isso não bloqueará o “tvuol.uol.com.br”, que é hospedado em um servidor separado. Em casos como este, a única solução é bloquear ambos.

Resumo das Regras de Iptables

Depois desta rodada inicial de exemplos, nada melhor do que um guia mais detalhado dos parâmetros suportados pelo Iptables. Escrever regras de firewall é quase como aprender um novo dialeto. Existem muitas combinações possíveis entre os parâmetros disponíveis e “regras de concordância” que determinam o que funciona e o que não. Imagine que ao escrever uma nova regra, você está explicando uma idéia. Tente ser claro para que seja entendido ;) .

Parâmetros do Iptables:

-A INPUT: Especifica que a regra se aplica a pacotes de entrada, ou seja, pacotes recebidos pelo servidor, em qualquer interface.

-A OUTPUT: A regra se aplica a pacotes de saída, transmitidos pelo próprio servidor.

-A FORWARD: Este parâmetro é usado ao compartilhar a conexão com a internet, permitindo que os micros da rede local acessem através do servidor. Os pacotes de outros micros, encaminhados pelo servidor, são tratados como “FORWARD”, diferentemente dos pacotes transmitidos pelo próprio servidor, que são tratados como “OUTPUT”. Você pode definir regras diferentes para cada situação.

-p tcp: Especifica que a regra se aplica a pacotes TCP, o que é o mais comum.

-p udp: Alguns serviços usam também portas UDP. Um bom exemplo são os servidores DNS, que escutam tanto na porta 53 TCP, quanto na 53 UDP. Este parâmetro permite definir regras que se aplicam a estes casos, abrindo ou fechando as portas UDP, como em:

iptables -A INPUT -p udp –dport 53 -j ACCEPT

A maioria das regras do Iptables exigem que você especifique o protocolo, fazendo com que você tenha que repetir a regra caso queira abrir uma porta simultaneamente para TCP e UDP. Ao executar algo como “iptables -A INPUT –dport 53 -j ACCEPT” (sem especificar o protocolo), você receberá um erro como:

iptables v1.3.3: Unknown arg `–dport’
Try `iptables -h’ or ‘iptables –help’ for more information.

Como as portas UDP também são usadas por alguns serviços, é muito comum bloquear as portas de 1 a 1024 UDP, autorizando apenas as portas que realmente devem ficar abertas, como em:

iptables -A INPUT -p udp –dport 53 -j ACCEPT
iptables -A INPUT -p udp –dport 1:1024 -j DROP

Note que você nunca deve fechar todas as portas UDP, pois as portas altas são usadas aleatoriamente para pacotes de resposta para DNS e diversos outros protocolos. Você pode fazer o teste: use a regra “iptables -A INPUT -p udp -j DROP” e você não conseguirá mais navegar até desativar o firewall usando o comando “iptables -F”.

Alguns administradores mais paranóicos fecham todas as portas UDP até a 32000, por exemplo. Não existem muitos problemas em fechar uma faixa maior de portas, desde que você sempre deixe uma larga faixa de portas altas abertas, de forma a receber os pacotes de resposta.

Ao contrário do TCP, não é possível criar uma regra genérica para permitir todos os pacotes de resposta UDP (como a “iptables -A INPUT -p tcp –syn -j DROP”), pois no UDP não são abertas conexões. Os pacotes são simplesmente transmitidos diretamente, sem aviso prévio.

-p icmp: Além do TCP e UDP, existe o protocolo ICMP, usado para pacotes de controle, pings e envio de mensagens. Um exemplo de uso é a regra para desativar a resposta a pings que vimos há pouco. Na verdade ela atua bloqueando o pedido de ping antes que ele seja repassado ao sistema:

iptables -A INPUT -p icmp –icmp-type echo-request -j DROP

-i eth0: A opção “-i” permite definir a interface onde os pacotes devem ser recebidos ou enviados. Por exemplo, usar uma regra como:

iptables -A INPUT -p tcp -j REJECT

… simplesmente desconectaria seu micro da rede, pois bloquearia comunicações em qualquer interface. Porém, se você especificasse a interface, ele bloquearia apenas pacotes recebidos através dela, como em:

iptables -A INPUT -i eth2 -p tcp -j REJECT

O mesmo se aplica quando você quer permitir conexões em determinadas portas, mas apenas a partir da placa de rede local. Para permitir conexões via SSH apenas a partir da placa eth1, você poderia usar:

iptables -A INPUT -i eth1 -p tcp –dport 22 -j ACCEPT

-o eth0: É similar ao parâmetro “-i”, mas especifica uma interface de saída. Este parâmetro é menos usado, pois normalmente nos preocupamos em impedir que o firewall aceite conexões em determinadas portas, ao invés de tentar interceptar as respostas. Mas esta opção pode ser útil em casos em que você precisa fechar uma porta de saída apenas para determinada interface. Este é um exemplo de uso, onde bloqueio pacotes de saída na porta 1863 apenas para a placa eth1:

iptables -A OUTPUT -p tcp -o eth1 –dport 1863 -j DROP

–dport ou –destination-port: Especifica uma porta. O uso mais comum para esta opção é para abrir portas de entrada (e depois aplicar uma regra que fecha as demais), como na regra que abre para conexões na porta 22, que mostrei no exemplo anterior.

-s (source): O parâmetro “-s” permite especificar um endereço IP ou domínio de origem, de forma a aceitar ou recusar as conexões. Embora seja muito fácil forjar endereços IP dentro da rede local, as coisas são muito mais complicadas na Internet. Permitir o acesso a determinadas portas (como a do SSH) apenas para determinados endereços, ou faixas de endereços, é uma medida de segurança interessante em muitas situações.

Este é um exemplo de regra, que abre a porta 631 apenas para hosts dentro da faixa e máscara especificada:

iptables -A INPUT -p tcp -s 72.232.35.0/255.255.255.248 -j ACCEPT

-d (destiny): Destinado ao endereço IP ou domínio citado. É muito usado ao bloquear o acesso a determinados sites a partir dos micros da rede local, como, por exemplo:

iptables -A FORWARD -d torrentreactor.net -j REJECT

-m mac –mac-source 00:11:D8:76:59:2E: Esta é a regra que permite especificar endereços MAC dentro de regras do Iptables que vimos há pouco. Ela é uma forma de dificultar o uso de endereços IP falseados para ganhar acesso ao servidor, pois permite relacionar o IP ao endereço MAC da placa instalada. Lembre-se, porém, que ela só pode ser usada em rede local e que os endereços MAC são quase tão fáceis de falsear quanto os endereços IP. Um exemplo de uso seria:

iptables -A INPUT –dport 22 -m mac –mac-source 00:11:D8:76:59:2E -j ACCEPT

–syn: Cria uma regra válida apenas para novas conexões, não impedindo que o outro micro responda a conexões iniciadas pelo servidor, como em:

iptables -A INPUT -p tcp –syn -j DROP

-j: É usado no final de cada regra, especificando uma ação, que pode ser:

-j ACCEPT : Aceita o pacote. Ele é encaminhado ao destino sem passar pelas demais regras.

-j REJECT : Rejeita educadamente o pacote, enviando um pacote de resposta ao emissor. Quando uma porta está fechada em modo reject, o emissor recebe rapidamente uma resposta como “connect to host 192.168.1.1 port 22: Connection refused”.

-j DROP: O DROP é mais enfático. O pacote é simplesmente descartado, sem aviso. O emissor fica um longo tempo esperando, até que eventualmente recebe um erro de time-out.

-j LOG: Este último parâmetro permite logar conexões. É interessante usar esta regra principalmente em portas muito visadas, como a do SSH, pois assim você tem uma lista de todos os endereços que acessaram seu servidor na porta especificada. Para ativar o log, você deve duplicar a regra que abre a porta, usando a opção “-j LOG” na primeira e “-j ACCEPT” na segunda, como em:

iptables -A INPUT -p tcp –dport 22 -j LOG
iptables -A INPUT -p tcp –dport 22 -j ACCEPT

As mensagens são gravadas no arquivo “/var/log/messages” de forma bastante detalhada, incluindo a data e hora da conexão, o IP e MAC do micro que fez a conexão (SRC), além da porta (DPT). Você pode ver o mesmo log, porém com as entradas escritas de forma resumida, usando o comando “dmesg”.

Jun 29 15:49:46 spartacus kernel: IN=eth0 OUT= MAC=00:e0:7d:9b:f8:01:00:15:00:4b:68:db:08:00 SRC=192.168.0.2 DST=192.168.0.1 LEN=52 TOS=0×00 PREC=0×00 TTL=64 ID=32704 DF PROTO=TCP SPT=56848 DPT=22 WINDOW=2164 RES=0×00 ACK URGP=0

Não se assuste com o volume, pois o log inclui todas as tentativas de conexão. O fato de um determinado IP ter aberto uma conexão com a porta 22 do seu servidor, não significa que o usuário realmente obteve acesso ao SSH. Ele pode ter recebido o prompt para digitar a senha, mas isso não significa que ele realmente conseguiu fazer login.

Note que alterar a ordem das regras altera o resultado. Em caso de duas regras conflitantes, vale a que vem primeiro. Por exemplo, ao usar:

iptables -A INPUT -p tcp -j REJECT
iptables -A INPUT -p tcp –dport 22 -j ACCEPT

… a porta 22 permanecerá fechada, pois os pacotes serão descartados pela primeira regra, sem terem chance de serem autorizados pela segunda. É justamente por isso que é sempre necessário colocar as regras menos restritivas primeiro, declarando as portas autorizadas, para só então fechar as demais.

O mesmo se aplica ao logar transmissões. Se você usar algo como:

iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -p tcp –dport 22 -j LOG

… o log não funcionará, pois os pacotes destinados à porta 22 serão aceitos pela primeira regra e não passarão pela segunda, que faz o log. As regras que fazem log devem sempre vir antes das regras que autorizam as conexões.

Testando com o Nmap

Depois de terminar, você pode testar o firewall usando o Nmap, a partir de outro micro da rede local ou da internet, para procurar vulnerabilidades. O Nmap é um pacote bastante popular. No Debian você pode instalá-lo pelo apt-get.

Caso a regra que bloqueia tudo esteja ativa, você vai ter o seguinte como resultado:

# nmap -sS -v 192.168.0.33

Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2004-04-03 10:12 BRT
Host 192.168.0.33 appears to be down, skipping it.
Note: Host seems down. If it is really up, but blocking our ping probes, try -P0
Nmap run completed — 1 IP address (0 hosts up) scanned in 12.053 seconds

Ou seja, o Nmap não consegue sequer perceber que o PC está realmente lá, e avisa: “Se você realmente tem certeza que ele está online, experimente usar a opção -P0″, o que não vai mudar muita coisa:

# nmap -P0 -v 192.168.0.33

Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2004-04-03 10:14 BRT
Host 192.168.0.33 appears to be up … good.
Initiating SYN Stealth Scan against 192.168.0.33 at 10:14
The SYN Stealth Scan took 1361 seconds to scan 1659 ports.
All 1659 scanned ports on 192.168.0.33 are: filtered
Nmap run completed — 1 IP address (1 host up) scanned in 1360.579 seconds

Como todas as portas estão em modo drop, onde o firewall simplesmente descarta os pacotes sem confirmar o recebimento, o teste demora muito tempo, quase 27 minutos para escanear apenas as primeiras 1659 portas. Uma varredura completa, em todas as 65 mil portas, levaria 17 horas e meia, isso executando o teste via rede local. Via internet, a varredura levaria vários dias e, mesmo assim, só apareceriam as portas manualmente abertas no seu script.

Fonte: Livro Redes e Servidores Linux do Carlos Morimoto

Enviado em Segurança, Servidores, Tecnico | Deixar um comentário »

Introdução à Administração de Sistemas

Publicado por Daniel Carraro Tomasini em Agosto 1, 2008

Pesquisando por informações diversas por ai achei uma documentação muito boa da Red Hat para quem é aspirante a administrador de sistemas Linux.

O Introdução à Administração de Sistemas Red Hat Enterprise Linux contém informações introdutórias para novos administradores de sistemas Red Hat Enterprise Linux. Este manual não ensina a executar uma tarefa específica sob o Red Hat Enterprise Linux. Ao invés disso, traz o conhecimento acumulado ao longo dos anos por diversos administradores de sistemas experientes.

Este manual assume que você tem uma experiência limitada como usuário do Linux, mas nenhuma experiência como administrador de sistemas Linux. Se o Linux for completamente novo para você (e o Red Hat Enterprise Linux especificamente), deve começar adquirindo um livro introdutório sobre o Linux.

Leia mais…

Enviado em Carreira, Linux, Tecnico | 1 Comentário »

Entendendo (e quebrando) a segurança em redes Wireless

Publicado por Daniel Carraro Tomasini em Julho 31, 2008

Um dos grandes problemas em uma redes wireless é que os sinais são transmitidos pelo ar. Os pontos de acesso e placas utilizam por padrão antenas baratas, que proporcionam um alcance reduzido, fazendo com que o sinal da sua rede possa ser capturado de muito mais longe por alguém com uma antena de alto ganho.

Não existe como impedir que o sinal se propague livremente pelas redondezas (a menos que você pretenda ir morar em um bunker, com paredes reforçadas com placas de aço), de forma que a única forma eficaz de proteção é encriptar toda a transmissão, fazendo com que as informações capturadas não tenham serventia.

Como esta questão da segurança em redes wireless é muito divulgada, a maior parte das redes já utiliza algum tipo de proteção, seja ativando o WEP ou WPA, seja bloqueando os micros que podem se conectar ao ponto de acesso com base no endereço MAC.

Este tópico se destina a mostrar como é fácil burlar a maioria destas proteções e quebrar a encriptação do WEP (inclusive do WEP de 128 bits), usando ferramentas simples.

É melhor que você conheça os ataques mais usados e veja você mesmo como é possível derrubar cada uma das proteções que utilizamos em uma rede típica, do que ficar com um falso senso de segurança, achando que o WEP de 128 é inquebrável, que não é possível detectar um ponto de acesso com o SSID broadcast desativado, ou que não é possível burlar a restrição de acesso baseada no endereço MAC usada em muitas redes.

Usando o Kismet

O Kismet é uma ferramenta poderosa, que pode ser usada tanto para checar a segurança de sua própria rede wireless, quanto para checar a presença de outras redes próximas e assim descobrir os canais que estão mais congestionados (e assim configurar sua rede para usar um que esteja livre) ou, até mesmo, invadir redes. O Kismet em sí não impõe restrições ao que você pode fazer. Assim como qualquer outra ferramenta, ele pode ser usado de forma produtiva ou destrutiva, de acordo com a índole de quem usa. A página do projeto é a: http://www.kismetwireless.net/.

A principal característica do Kismet é que ele é uma ferramenta passiva. Ao ser ativado, ele coloca a placa wireless em modo de monitoramento (rfmon) e passa a escutar todos os sinais que cheguem até sua antena. Mesmo pontos de acesso configurados para não divulgar o ESSID ou com a encriptação ativa são detectados.

Como ele não transmite pacotes, apenas escuta as transmissões, todo o processo é feito sem prejudicar as redes vizinhas, de forma praticamente indetectável. A principal limitação é que, enquanto está em modo de monitoramento, a placa não pode ser usada para outros fins. Para conectar-se a uma rede, você precisa primeiro parar a varredura.

Esta questão da detecção dos pontos de acesso com o ESSID desativado é interessante. Não é possível detectá-los diretamente, pois eles não respondem a pacotes de broadcast (por isso eles não são detectados por programas como o Netstumbler), mas o Kismet é capaz de detectá-los quando um cliente qualquer se associa a eles, pois o ESSID da rede é transmitido de forma não encriptada durante o processo de associação do cliente.

A partir daí, o Kismet passa a capturar todos os pacotes transmitidos. Caso a rede esteja encriptada, é possível descobrir a chave de encriptação usando o aircrack (que veremos a seguir), permitindo tanto escutar as conexões, quanto ingressar na rede.

Como o Kismet é uma das ferramentas mais usadas pelos crackers, é sempre interessante usá-lo para verificar a segurança da sua própria rede. Tente agir como algum vizinho obstinado agiria, capturando os pacotes ao longo de alguns dias. Verifique a distância de onde consegue pegar o sinal de sua rede e quais informações consegue descobrir. Depois, procure meios de reforçar a segurança da rede e anular o ataque.

Por ser uma ferramenta popular, ele está disponível na maioria as distribuições. Algumas, como o Knoppix (a partir da versão 3.7), já o trazem instalado por padrão.

Nas distribuições derivadas do Debian, você pode instalá-lo via apt-get:

# apt-get install kismet

Antes de ser usar, é preciso configurar o arquivo “/etc/kismet/kismet.conf“, especificando a placa wireless e o driver usado por ela, substituindo a linha:

source=none,none,addme

Por algo como:

source=madwifi_ag,ath0,atheros

… onde o “madwifi_ag” é o driver usado pela placa (você pode verificar o chipset da placa instada usando o comando lspci). Na documentação do Kismet, o driver é chamado de “capture source”, pois é a partir dele que o Kismet obtém os pacotes recebidos.

o “ath0″ é a interface (que você vê através do comando ifconfig) e o “atheros” é um apelido para a placa (que você escolhe), com o qual ela será identificada dentro da tela de varredura.

Isso é necessário, pois o Kismet precisa de acesso de baixo nível ao hardware, mas, por outro lado, faz com que a compatibilidade esteja longe de ser perfeita. Diversas placas não funcionam em conjunto com o Kismet, com destaque para as placas que não possuem drivers nativos e precisam ser configurados através do ndiswrapper. Se você pretende usar o Kismet, o ideal é pesquisar antes de comprar a placa.

Naturalmente, para que possa ser usada no Kismet, a placa precisa ter sido detectada pelo sistema, com a ativação dos módulos de Kernel necessários. Por isso, prefira sempre usar uma distribuição recente, que traga um conjunto atualizado de drivers. O Kurumin e o Kanotix estão entre os melhores neste caso, pois trazem muitos drivers que não vem pré instalados em muitas distribuições.

Você pode ver uma lista detalhada dos drivers de placas wireless disponíveis e como instalar manualmente cada um deles no meu livro Linux Ferramentas Técnicas.

Veja uma pequena lista dos drivers e placas suportados no Kismet 2006-04-R1:

acx100: O chipset ACX100 foi utilizado em placas de diversos fabricantes, entre eles a DLink, sendo depois substituído pelo ACX111. O ACX100 original é bem suportado pelo Kismet, o problema é que ele trabalha a 11 megabits, de forma que não é possível testar redes 802.11g.

admtek: O ADM8211 é um chipset de baixo custo, encontrado em muitas placas baratas. Ele é suportado no Kismet, mas possui alguns problemas. O principal é que ele envia pacotes de broadcast quando em modo monitor, fazendo com que sua varredura seja detectável em toda a área de alcance do sinal. Qualquer administrador esperto vai perceber que você está capturando pacotes.

bcm43xx: As placas com chipset Broadcom podiam até recentemente ser usadas apenas no ndiswrapper. Recentemente, surgiu um driver nativo (http://bcm43xx.berlios.de) que passou a ser suportado no Kismet. O driver vem incluído por padrão a partir do Kernel 2.6.17, mas a compatibilidade no Kismet ainda está em estágio experimental.

ipw2100, ipw2200, ipw2915 e ipw3945: Estes são os drivers para as placas Intel, encontrados nos notebooks Intel Centrino. O Kismet suporta toda a turma, mas você precisa indicar o driver correto para a sua placa, entre os quatro.
O ipw2100 é o chipset mais antigo, que opera a 11 megabits; o ipw2200 é a segunda versão, que suporta tanto o 802.11b, quanto o 802.11g; o ipw2915 é quase idêntico ao ipw2200, mas suporta também o 802.11a, enquanto o ipw3945 é uma versão atualizada, que é encontrada nos notebooks com processadores Core Duo.

madwifi_a, madwifi_b, madwifi_g, madwifi_ab e madwifi_ag: Estes drivers representam diferentes modos de operação suportados pelo driver madwifi (http://sourceforge.net/projects/madwifi/), usado nas placas com chipset Atheros. Suportam tanto o driver madwifi antigo, quanto o madwifi-ng.
Usando os drivers madwifi_a, madwifi_b ou madwifi_g, a placa captura pacotes apenas dentro do padrão selecionado (o madwifi_a captura apenas pacotes de redes 802.11a, por exemplo). O madwifi_g é o mais usado, pois captura simultaneamente os pacotes de redes 802.11b e 802.11g. O madwifi_ag, por sua vez, chaveia entre os modos “a” e “g”, permitido capturar pacotes de redes que operam em qualquer um dos três padrões, apesar de em um ritmo mais lento, devido ao chaveamento.

rt2400 e rt2500: Estes dois drivers dão suporte às placas com chipset Ralink, outro exemplo de chipset de baixo custo que está se tornando bastante comum. Apesar de não serem exatamente “placas de alta qualidade”, as Ralink possuem um bom suporte no Linux, graças em parte aos esforços do próprio fabricante, que abriu as especificações e fornece placas de teste para os desenvolvedores. Isto contrasta com a atitude hostil de alguns fabricantes, como a Broadcom e a Texas (que fabrica os chipsets ACX).

rt8180: Este é o driver que oferece suporte às placas Realtek 8180. Muita gente usa estas placas em conjunto com o ndiswrapper, mas elas possuem um driver nativo, disponível no http://rtl8180-sa2400.sourceforge.net/. Naturalmente, o Kismet só funciona caso seja usado o driver nativo.

prism54g: Este driver dá suporte às placas com o chipset Prism54, encontradas tanto em versão PCI ou PCMCIA, quanto em versão USB. Estas placas são caras e por isso relativamente incomuns no Brasil, mas são muito procuradas entre os grupos que fazem wardriving, pois as placas PCMCIA são geralmente de boa qualidade e quase sempre possuem conectores para antenas externas, um pré-requisito para usar uma antena de alto ganho e assim conseguir detectar redes distantes.

orinoco: Os drivers para as placas com chipset Orinoco (como as antigas Orinoco Gold e Orinoco Silver) precisam de um conjunto de patches para funcionar em conjunto com o Kismet, por isso acabam não sendo placas recomendáveis. Você pode ver detalhes sobre a instalação dos patches no http://www.kismetwireless.net/HOWTO-26_Orinoco_Rfmon.txt.

Depois de definir o driver, a interface e o nome no “/etc/kismet/kismet.conf“, você pode abrir o Kismet chamando-o como root:

# kismet

Inicialmente, o Kismet mostra as redes sem uma ordem definida, atualizando a lista conforme vai descobrindo novas informações. Pressione a tecla “s” para abrir o menu de organização, onde você pode definir a forma como a lista é organizada, de acordo com a qualidade do canal, volume de dados capturados, nome, etc. Uma opção comum (dentro do menu sort) é a “c”, que organiza a lista baseado no canal usado por cada rede.

Por padrão, o Kismet chaveia entre todos os canais, tentando detectar todas as redes disponíveis. Neste modo, ele captura apenas uma pequena parte do tráfego de cada rede, assim como você só assiste parte de cada programa ao ficar zapiando entre vários canais da TV.

Selecione a rede que quer testar usando as setas e pressione “shift + L” (L maiúsculo) para travá-lo no canal da rede especificada. A partir daí, ele passa a concentrar a atenção em uma única rede, capturando todos os pacotes transmitidos:

Você pode também ver informações detalhadas sobre cada rede selecionando-a na lista e pressionando enter. Pressione “q” para sair do menu de detalhes e voltar à tela principal.

Outro recurso interessante é que o Kismet avisa sobre “clientes suspeitos”, micros que enviam pacotes de conexão para os pontos de acesso, mas nunca se conectam a nenhuma rede, indício de que provavelmente são pessoas fazendo wardriving ou tentando invadir redes. Este é o comportamento de programas como o Netstumbler (do Windows). Micros rodando o Kismet não disparam este alerta, pois fazem o scan de forma passiva:

ALERT: Suspicious client 00:12:F0:99:71:D1 – probing networks but never participating.

O Kismet gera um dump contendo todos os pacotes capturados, que vai por padrão para a pasta “/var/log/kismet/“. A idéia é que você possa examinar o tráfego capturado posteriormente usando o Wireshark (Ethereal), que permite abrir o arquivo e examinar os dados capturados. O problema é que, ao sniffar uma rede movimentada, o dump pode se transformar rapidamente em um arquivo com vários GB, exigindo que você reserve bastante espaço no HD.

Um dos maiores perigos em uma rede wireless é que qualquer pessoa pode capturar o tráfego da sua rede e depois examiná-lo calmamente em busca de senhas e outros dados confidenciais transmitidos de forma não encriptada. O uso do WEP ou outro sistema de encriptação minimiza este risco, pois antes de chegar aos dados, é necessário quebrar a encriptação.

Evite usar chaves WEP de 64 bits, pois ele pode ser quebrado via força bruta caso seja possível capturar uma quantidade razoável de pacotes da rede. As chaves de 128 bits são um pouco mais seguras, embora também estejam longe de ser inquebráveis. Em termos se segurança, o WPA está bem à frente, mas usá-lo traz problemas de compatibilidade com algumas placas e drivers.

Sempre que possível, use o SSH, SSL ou outro sistema de encriptação na hora de acessar outras máquinas da rede ou baixar seus e-mails. No capítulo sobre acesso remoto, veremos como é possível criar um túnel seguro entre seu micro e o gateway da rede (usando o SSH), permitindo assim encriptar todo o tráfego.

Quebrando Chaves WEP

Para você entender a importância de usar o SSH o outros protocolos seguros ao usar uma rede wireless, vou falar um pouco mais sobre como quebrar chaves de encriptação, para que você possa entender os ataques usados pelos que estão do outro lado.

Alguns pontos de acesso utilizam versões vulneráveis do WEP, que são muito rápidas de quebrar (em muitos casos você pode corrigir através de uma atualização de firmware) mas, mesmo as versões “não vulneráveis” do WEP podem ser quebradas via força bruta, sempre que seja possível capturar um volume suficiente de tráfego da rede.

Você pode simular uma invasão na sua própria rede, para verificar qual seria o volume de trabalho necessário para invadi-la. Para isso, você vai precisar de pelo menos dois micros ou notebooks. Um deles vai ser usado como um cliente de rede normal e pode usar qualquer placa de rede, enquanto o segundo (que usaremos para simular o ataque) precisa ter uma placa compatível com o Kismet.

Configure o seu ponto de acesso ativando o WEP e desativando o Broadcast do SSID. Ou seja, faça uma configuração relativamente segura, mas depois faça de conta que esqueceu tudo :) .

Comece abrindo o Kismet no notebook “invasor”. Deixe que ele detecte as redes próximas, pressione “s” para ajustar a ordem dos nomes na lista, selecione sua rede e pressione “shift + L” para que ele trave a varredura na sua rede e deixe de bisbilhotar nas redes dos vizinhos.

Inicialmente, sua rede será detectada como “no ssid”, já que o broadcast do SSID foi desativado no ponto de acesso. Mas, assim que qualquer micro se conecta ao ponto de acesso, o Kismet descobre o SSID correto. Pressione “i” para ver os detalhes da rede e anote o endereço MAC do ponto de acesso (BSSID), que precisaremos para iniciar o passo seguinte.

Agora que já sabemos o SSID e o MAC do ponto de acesso, falta quebrar o WEP. Para isso precisaremos do Aircrack, uma suíte de aplicativos para verificação de redes wireless, que pode ser encontrada no http://freshmeat.net/projects/aircrack/. Nos derivados do Debian, ele pode ser instalado via apt-get:

# apt-get install aircrack

Outra opção é baixar o Back Track, um Live-CD baseado no Slax, que já vem com o Aircrack, Kismet e outras ferramentas úteis pré-instaladas.

O primeiro passo é capturar pacotes da rede usando o airodump (que faz parte da suíte aircrack). A sintaxe do comando é “airodump interface arquivo-de-log mac-do-ponto-de-acesso”, como em:

# airodump ath0 logrede 00:50:50:81:41:56

Você pode também indicar um canal (neste caso, ele escuta todas as redes que estejam transmitindo no canal indicado), como em:

# airodump ath0 logrede 14

Isto gerará o arquivo “logrede.cap”, que contém um dump de todos os pacotes capturados. Neste ponto você precisa esperar algum tempo até conseguir um volume razoável de pacotes. Para acelerar isso, faca com que o micro isca baixe alguns arquivos grandes a partir de outro micro da rede.

Abra outro terminal e use o aircrack para tentar quebrar a chave de encriptação. Você pode fazer isso sem interromper a captura do airodump, daí a idéia de usar dois terminais separados.

Ao usar o aircrack, é preciso especificar o comprimento da chave WEP (64 ou 128 bits) e o arquivo gerado pelo airodump, como em:

# aircrack-n 64 logrede.cap
ou:
# aircrack -n 128 logrede.cap

Caso o arquivo contenha pacotes destinados a mais de um ponto de acesso, ele pergunta qual verificar. No caso, indique sua rede.

O aircrack usa um ataque de força bruta para tentar descobrir a chave de encriptação da rede. A base do ataque são os IV’s (vetores de inicialização), a parte de 24 bits da chave de encriptação, que é trocada periodicamente. O volume de IV’s gerados varia de acordo com a rede (por isso existem redes mais vulneráveis que outras) mas, em teoria, é possível quebrar a encriptação de uma rede de 128 bits caso você consiga capturar de 500 mil a um milhão de IV’s, enquanto uma chave de 64 bits pode ser quebrada com pouco mais de 200 mil. Caso seja usada uma chave fácil de adivinhar, os números são drasticamente reduzidos, permitindo em muitos casos que a chave seja quebrada com a captura de alguns poucos milhares de IV’s.

Como todo processo de força bruta, o tempo necessário é aleatório. O aircrack pode descobrir a chave correta tanto logo no início da captura, quanto só depois de capturar mais de um milhão de IV’s. Por isso é interessante deixar o terminal de captura do airodump aberto e ir executando o aircrack periodicamente, até que ele descubra a chave. Quanto maior o volume de dados capturados, maior a possibilidade dele descobrir a chave.

Uma forma de aumentar a eficiência do ataque, ou seja, aumentar a chance de descobrir a chave, usando o mesmo número de IV’s, é aumentar o “fudge factor”, o que faz com que o aircrack teste um número maior de combinações. Isso, naturalmente, aumenta proporcionalmente o tempo necessário para o teste.

O default do aircrack é um fudge factor 2. Você pode alterar o valor usando a opção “-f”, como em:

# aircrack -f 4 -n 128 logrede.cap

É comum começar fazendo um teste com o valor default, depois com fudge 4 (como no exemplo) e a partir daí ir dobrando até descobrir a chave, ou a demora se tornar inviável.

Com um grande volume de IV’s, uma chave WEP de 64 bits é um alvo fácil. Neste caso a quebra demorou apenas 21 segundos:

Como é necessário capturar um grande volume de dados e muitas redes são usadas apenas para acessar a Internet e outras tarefas leves, capturar o volume de pacotes necessário poderia demorar dias.

Um invasor com um nível mediano de conhecimento, provavelmente não se contentaria em esperar tanto tempo. Ao invés disso, ele poderia usar um ataque de flood para induzir tráfego na sua rede, de forma a acelerar o processo, transformando os muitos dias em apenas alguns minutos.

Um exemplo de ferramenta usada para este tipo de ataque é o aireplay, mais um integrante da equipe do aircrack. O comando abaixo lança um “chopchop atack” (o tipo de ataque mais eficiente para quebrar chaves WEP) contra o ponto de acesso referente ao endereço MAC especificado, através da interface ath0:

# aireplay -b 00:50:50:81:81:01 -x 512 ath0 -4

Neste ataque, o aireplay captura um weak packet emitido por algum dos outros micros conectados ao ponto de acesso e o repete indefinidamente, obrigando o ponto de acesso a responder e assim aumentar rapidamente a contagem de IV’s, permitindo quebrar a chave WEP muito mais rapidamente. Este é o tipo de ataque mais efetivo, pois derruba a última grande barreira contra a quebra do WEP, que era justamente a demora em capturar um grande volume de pacotes.

O “-x 512″ especifica o número de pacotes que serão enviados por segundo. Aumentar o número permite quebrar a chave mais rapidamente, mas, por outro lado, vai reduzir o desempenho da rede, o que pode levar o administrador a perceber o ataque (a menos que ele seja feito em um momento de ociosidade da rede).

Como pode ver, o WEP dificulta o acesso à rede, mas quebrá-lo é apenas questão de tempo. Para melhorar a segurança da sua rede, o ideal é combinar várias camadas de segurança e monitorar os acessos, fazendo com que o tempo e trabalho necessário para invadir a rede seja maior (o que vai afastar os curiosos e invasores casuais) e vai lhe dar tempo para detectar e investigar casos mais graves.

Ao usar o WEP, o ideal é trocar a chave de encriptação regularmente, de forma que, mesmo que alguém consiga descobrir a chave, não consiga usar a rede por muito tempo antes que ela seja trocada. Se possível, utilize o WPA, que, apesar dos problemas de compatibilidade, é muito mais seguro.

O WPA também usa 128 bits de encriptação. A principal diferença é que ele usa vetores de inicialização de 48 bits (o WEP usa vetores de 24 bits), juntamente com um conjunto de proteções contra possíveis ataques. É possível descobrir a chave de encriptação em uma rede WPA-PSK via força bruta, depois de capturar uma pequena quantidade de dados da rede, mas isso só é viável para chaves com poucos caracteres, ou que são baseadas em palavras encontradas no dicionário.

Por exemplo, uma chave como “supercampeao” pode ser descoberta rapidamente, enquanto outra baseada em caracteres aleatórios, como “ErGCDtv8i9S3″ demoraria muito tempo para ser quebrada, fazendo com que o invasor desistisse. A dica geral ao usar WPA é escolher uma senha de pelo menos 12 caracteres, misturando letras, números, e caracteres maiúsculos e minúsculos.

Caso a rede seja usada apenas dentro de um pequeno espaço, como uma única sala, apartamento ou escritório, você pode também reduzir a potência do transmissor no ponto de acesso, o que acaba sendo uma medida muito efetiva, pois realmente impede que o sinal da rede seja captado de longe.

Procure pela opção “Antenna transmit power” ou similar (dentro da configuração do ponto de acesso) e veja qual é o menor valor com que a rede funciona corretamente dentro da área necessária:

Outra dica que dificulta, é habilitar a restrição de acesso à rede com base no endereço MAC, geralmente disponível através da opção “Access Control” do ponto de acesso. Ao ativar esta opção, você cria uma lista com os endereços MAC das placas autorizadas e o ponto de acesso restringe o acesso de qualquer outra.

Programas como o airodump e o próprio Kismet permitem descobrir o endereço MAC dos micros que estão acessando determinada rede muito facilmente, e o endereço MAC da placa de rede pode ser forjado (no Linux, por exemplo, você pode falsear usando o comando “ifconfig wlan0 hw ether 00:11:D8:76:59:2E”, onde você substitui o “wlan0″ pela interface e o “00:11:D8:76:59:2E” pelo endereço MAC desejado). A questão é que, ao forjar o endereço, o invasor vai derrubar o micro com a placa que foi clonada, de forma que você perceba que algo está errado.

O próximo passo seria isolar sua rede wireless do restante da rede, fazendo com que o invasor possa acessar a Internet, mas não tenha como acessar compartilhamentos e outros recursos da rede.

O mais simples neste caso é instalar uma placa de rede adicional no servidor da rede (ou em qualquer outro micro na ausência dele), onde é conectado o ponto de acesso. Compartilhe a conexão com a placa do AP, mas utilize duas faixas de IP’s separados, com um firewall ativo, configurado para bloquear tentativas de conexão provenientes dos micros dentro da rede wireless.

Usando o HFNetChk

Embora muitos torçam o nariz para os Service Packs e outras atualizações, que por vezes causam problemas diversos ao serem instalados, no mundo Windows as atualizações de segurança para as máquinas Windows da rede são um remédio inevitável. Uma instalação limpa do Windows XP, sem atualizações, conectada à Internet é infectada em questão de minutos, primeiro por worms diversos e depois por crackers.

Mesmo dentro da rede local, estas máquinas sem atualizações são um risco, pois uma máquina infectada indiretamente (infectada ao acessar uma página maliciosa através do IE, ou ao executar um arquivo recebido por e-mail, por exemplo) pode infectar rapidamente todas as demais, fazendo com que você perca o dia atualizando os antivírus e reinstalando o sistema.

Apesar disso, manter todas as máquinas da rede atualizadas pode não ser uma tarefa simples. O Windows não dispõe de uma interface robusta de linha de comando, ou outra ferramenta que permita automatizar tarefas de forma eficiente. Devido a isso, mesmo os administradores mais experientes acabam perdendo suas tardes atualizando cada máquina individualmente. Outro problema que surge com o tempo é saber quais atualizações cada máquina já recebeu, a fim de não precisar ficar repetindo o trabalho.

Uma ferramenta que pode ajudar no segundo problema é o HFNetChk. Para baixa-lo, faça uma busca por “HFNetChkno http://download.microsoft.com/. Você baixará o arquivo “mbsasetup.msi”.

O mais interessante nesta ferramenta é que ele não se limita a escanear apenas a sua máquina local, ele pode escanear toda a rede local, dando o status de atualização de todas as máquinas Windows na rede. Este report remoto funciona apenas em máquinas que não estão protegidas por firewall. O report gerado por ele inclui também informações sobre os compartilhamentos e serviços ativos em cada máquina, o que o torna útil também como uma ferramenta preventiva.

A função dele é apenas avisar das atualizações que precisam ser aplicadas em cada máquina, as atualizações propriamente ditas precisam ser aplicadas manualmente por você. Para funcionar, ele precisa que você tenha privilégios de administrador, tanto localmente, quanto nas outras máquinas da rede que forem ser escaneadas.

Note que na terceira coluna de cada report consta um link para o artigo correspondente dentro da Knowledge Base da Microsoft, que permite ver mais detalhes sobre o problema.

Fonte: Livro Redes e Servidores Linux – C. E. Morimoto

Enviado em Redes, Segurança, Tecnico | 2 Comentários »

Usando o VMware Server

Publicado por Daniel Carraro Tomasini em Julho 16, 2008

Em versões anteriores, o VMware era um produto caro. Com a concorrência de outros produtos, a VMware passou a disponibilizar gratuitamente o VMware Player, seguido do VMware Server. O VMware Server é tão completo e flexível que atende não apenas a quem quer usá-lo em um servidor, mas também aos usuários normais, que querem rodar diversos sistemas operacionais no mesmo micro. Se você já é usuário do VMware Workstion, ou do VMware Player, pode muito bem migrar para ele.

Com o lançamento de processadores cada vez mais rápidos e o uso de volumes cada vez maiores de memória RAM, passou a fazer cada vez mais sentido agrupar diversos servidores em uma única máquina, utilizando algum sistema de virtualização.

A virtualização é obtida inserindo uma camada intermediária entre o sistema rodando dentro da máquina virtual e o hardware da máquina, simulando uma máquina completa. O software de virtualização fica então responsável por gerenciar todos os recursos do hardware, incluindo interrupções e endereços de memória, de forma que os sistemas dentro das máquinas virtuais possam trabalhar como se cada um tivesse uma máquina inteira reservada para si.

O sistema principal neste caso passa a ser chamado de host (hospedeiro) e os sistemas que estão rodando dentro da máquina virtual são chamados de “guests” (convidados). Cada um deles acha que tem um PC completo para si, enquanto na verdade está rodando dentro de uma “matrix”, na máquina virtual:

m4da9491b

Um sistema de virtualização permite dividir um único PC em diversas máquinas virtuais independentes, sendo que cada uma pode rodar um sistema operacional diferente. As máquinas virtuais compartilham os recursos da máquina real, dentro dos limites de uso de memória e de espaço em disco estabelecidos por você.

Em versões anteriores, o VMware era um produto caro. A versão destinada a estações de trabalho (o VMware Workstation) custava US$ 79 e o VMware GSX (a versão para servidores) custava algumas centenas de dólares.

Com a concorrência de outros produtos, a VMware passou a disponibilizar gratuitamente o VMware Player, uma versão reduzida do VMware Workstation. Em 2006 foi disponibilizado o VMware Server, uma versão surpreendentemente completa, que permite não apenas executar as máquinas virtuais, mas também criá-las, configurá-las e fazer toda a administração, sem limitações.

O VMware Server é tão completo e flexível que atende não apenas a quem quer usá-lo em um servidor, mas também aos usuários normais, que querem rodar diversos sistemas operacionais no mesmo micro. Se você já é usuário do VMware Workstion, ou do VMware Player, pode muito bem migrar para ele.

Você pode encontrar as dicas gerais de como instalá-lo e criar as máquinas virtuais no meu tutorial anterior: http://www.guiadohardware.net/tutoriais/vmware-server/

A dica de hoje é sobre o VMware Server 2.0, que já está na versão Beta 2. Embora ainda esteja em desenvolvimento, ele já é bastante estável.

A principal novidade é uma nova interface de administração, batizada de VMware Infrastructure (VI). Ela permite que todas as funções das máquinas virtuais, incluindo a configuração das máquinas virtuais e o acesso ao console sejam acessadas através do próprio navegador, combinando as funções do VMware Mui e do VMware Server Console, usados nas versões anteriores:

m27bc1276

A interface pode ser tanto acessada via HTTP quanto via HTTPS, usando o próprio navegador. Se você está usando o VMware Server em sua máquina local, acesse através do “http://127.0.0.1“, caso contrário use o HTTPS para ativar o uso da encriptação, como em “https://gdhn.com.br“. Assim como na versão 1.4, o login pode ser feito usando qualquer conta no servidor que tenha acesso às máquinas virtuais. Para ter acesso irrestrito, use o root:

7bd0164d

Para acessar o console usando o navegador é necessário instalar um plugin, que é oferecido da primeira vez que você tenta acessá-lo. Diferente dos antigos plug-ins em Active-X, que foram tão usados na época do IE 6, o plug-in do VMware está disponível também na forma de uma extensão para o Firefox, que pode ser usada também em clientes Linux.

6099f7b2

O plug-in é na verdade uma versão completa do Server Console, modificada de forma a facilitar a instalação. Clicando sobre a janela dentro da interface de gerenciamento, o console é aberto em uma nova janela. Como ele continua utilizando a mesma interface de acesso a vídeo do VMware Server Console, o desempenho é similar:

m102d9a8

O acesso via navegador pode não fazer muito sentido se você usa o VMware Server localmente, mas é uma grande melhoria para quem o instala em um servidor central e acessa as máquinas virtuais remotamente. Em vez de precisar instalar o VMware Server Console em cada máquina de onde for acessar o servidor, você precisa apenas instalar o plug-in.

Como de praxe, você pode utilizar diversas máquinas virtuais simultaneamente, limitado apenas aos recursos da máquina e ao limite “físico” de 64 VMs simultâneas do VMware Server.

Se você está utilizando o VMware Server 1.4, pode remover a versão antiga usando o comado “vmware-uninstall.pl”, que se encarrega de parar o serviço e remover os componentes:

# vmware-uninstall.pl

Os arquivos do VMware Server 2.0 Beta estão disponíveis no: http://www.vmware.com/beta/server/. Quando a versão final estiver disponível, a página será movida para o http://www.vmware.com/download/server/. Na página estão disponíveis tanto a versão para sistemas de 32 bits quanto a de 64 bits:

6d2da5b8

Em vez de três pacotes separados, temos agora apenas dois componentes. O pacote “VMware-server”, que é o componente principal e o “VMware-vix”, que contém a engine da interface de administração.

Estão disponíveis também versões para o Windows quanto para Linux, atendendo a usuários de ambos os sistemas. A versão Windows é instalada da forma tradicional, no estilo “next, next, finish”, mas a versão Linux exige alguns passos adicionais, já que é desenvolvida de forma a ser instalável em qualquer distribuição e para permitir o uso em servidores sem interface gráfica instalada, daí o instalador em modo texto e o processo de instalação relativamente manual.

Baixe os dois arquivos para a mesma pasta e descompacte-os, como em:

# tar -zxvf VMware-server-e.x.p-84186.i386.tar.gz
# tar -zxvf VMware-vix-e.x.p-84186.i386.tar.gz

Acesse a pasta “vmware-server-distrib/” e rode o script “vmware-install.pl”. Desde que você tenha descompactado os dois arquivos no mesmo diretório, o script de encarregará de instalar também o VMware-vix automaticamente.

# vmware-server-distrib/
# ./vmware-install.pl

Uma das preocupações dos desenvolvedores foi ampliar o volume de módulos pré-compilados incluídos no pacotes principal, que correspondem à maior parte dos 400 MB do download. Mesmo assim, ainda é necessário ter os headers do Kernel e os compiladores para conseguir instalá-lo nas distribuições não atendidas pelos módulos pré-compilados. Além do vmmon, o instalador agora gera dois novos módulos, o vmci e o vsock.

Perto do final da instalação, o instalador pergunta sobre as portas que serão usadas para o acesso web, via HTTP e HTTPS. Se você está instalando o VMware Server em sua máquina de trabalho, pode simplesmente usar as portas padrão (80 e 443) para facilitar o acesso, mas se você o está instalando em um servidor dedicado, que já possui um servidor web ativo, é importante alterar as portas usadas, caso contrário o servidor web usado pelo VMware irá conflitar com o servidor web já existente, com resultados variados:

Please specify a port for standard http connections to use [80]: 8080
Please specify a port for secure http (https) connections to use [443]: 40443

Como de praxe, ao especificar portas diferentes do padrão, você deve incluir a porta no endereço de acesso ao servidor, como em “https://gdhn.com.br:404433

Uma observação é que as versões beta do VMware Server 2.0 vem com as extensões de debug ativadas. Elas permitem gerar relatórios detalhados sobre o status do software, que podem ser incluídos em bug reports, mas reduzem substancialmente o desempenho das máquinas virtuais (a perda chega a mais de 50% em diversas operações).

O debug pode ser desativado dentro das configurações de cada máquina virtual (você precisa desativá-lo uma por uma), desmarcando a opção “Record runtime information”, dentro da seção “Summay > Commands > Configure VM > Advanced”:

vm1

Os betas possuem também um sistema de expiração, que bloqueia o uso das versões antigas conforme atualizações vão sendo disponibilizadas, de forma a evitar que os usuários continuem a utilizar versões beta antigas, cujos problemas já foram solucionados.

Concluindo, temos a questão da compatibilidade entre as máquinas virtuais criadas em outras versões do VMware. Por ser a versão mais recente, o VMware Server é compatível com máquinas virtuais criadas em qualquer versão anterior. Entretanto, elas não se beneficiam das melhorias introduzidas na nova versão, como o suporte a mais memória RAM e suporte a dispositivos USB 2.0. Para tirar proveito das melhorias, você tem a opção de atualizar as máquinas virtuais, usando a opção “Upgrade Virtual Machine”, disponível na aba “Summary”:

m2fdd122b

Note que ao fazer isso a máquina virtual deixa de ser compatível com as versões anteriores (o upgrade é de mão única), mas nada impede que você mantenha uma cópia de backup da máquina virtual original, antes de atualização.

Ao atualizar uma máquina virtual com o Windows, use também a opção “Upgrade VMware Tools”. Os novos drivers virtuais oferecem pequenos ganhos de desempenho em diversas áreas, além de serem necessários para que o sistema guest tenha acesso aos novos recursos.

Fonte: www.guiadohardware.net

Enviado em Servidores, Tecnico, Virtual Machine | 2 Comentários »