quinta-feira, 19 de dezembro de 2013

Routing on a stick com Linux


Router on a stick é a técnica usada para encaminhar o tráfego de diferentes VLAN's usando um único roteador conectado a uma única porta de transporte (porta trunk ou VLAN tagged). Um roteador deve ter uma interface conectada em cada rede que ele encaminha o tráfego, mas se você não tem o switch layer 3, ou um roteador que tenha suporte à VLAN, você pode usar o Linux. Com uma única porta de rede é possível criar interfaces virtuais e atribuir uma VLAN a cada uma usando o encapsulamento 802.1q. Este pode ser, é claro, um pc modesto com uma distro Linux qualquer instalada. Primeiro basta que a porta do switch esteja configurada como trunk, usando o encapsulamento 802.1q, marcando os frames de saída com o ID da VLAN de origem. A interface do roteador recebe os frames em cada interface virtual segundo a respectiva VLAN. Veja a imagem abaixo:
Existem 3 VLAN's no switch acima, 10, 20 e 30. O servidor, que fará o papel de roteador, está conectado em uma única porta onde tem acesso as 3 VLAN's. O tráfego de uma ou de outra é diferenciado pelo protocolo 802.1q.
Se quiser entender mais sobre VLAN's consulte este artigo.

Em seguida vou criar 3 VLAN interfaces sobre a interface eth0. Com as interfaces criadas você pode referenciá-las para manipular qualquer configuração no sistema, como regras de firewall, roteamento, etc... 


Antes de tudo instale o pacote "vlan". No Debian e derivados seria:
# apt-get install vlan

Em seguida carregue o módulo "8021q", e coloque uma linha para ele no arquivo "/etc/modules", para que seja carregado sempre:

# modprobe 8021q
# echo 8021q >> /etc/modules

Com o módulo carregado pelo kernel você pode exibir as configurações das VLAN interfaces no arquivo "/proc/net/vlan/config". E o comando para manipular as interfaces é o "vconfig":

# cat /proc/net/vlan/config
# vconfig --help

Existem algumas opões quanto à nomenclatura das interfaces, mas você pode alterar usando o "vconfig set_name_type". Por exemplo, as interfaces da vlan 3 podem ser nomeadas como vlan0030 ou vlan30 ou eth0.30. Consulte o help e veja a nomenclatura atual no arquivo "/proc/net/vlan/config":
# cat /proc/net/vlan

Para adicionar uma VLAN interface com VLAN ID 10 na interface eth0 seria:

# vconfig add eth0 10

Veja se a interface foi criada verificando o arquivo "/proc/net/vlan/config". Uma interface será criada com o nome eth0.10 ou vlan10, dependendo do "name-type" definido.
Para remover uma VLAN interface:

# vconfig rem  eth0.10

Você deve declarar as configurações da interface normalmente, exatamente como as interfaces reais, mas com apenas um parâmetro a mais, o que identifica a interface física associada à vlan. No caso do Debian o arquivo é o "/etc/network/interfaces":

auto eth0.10
    iface eth0.10
    inet static address 192.168.10.1
    netmask 255.255.255.0
    network 192.168.10.0
    broadcast 192.168.10.255
    vlan_raw_device eth0

auto eth0.20
    iface eth0.20
    inet static address 192.168.20.1
    netmask 255.255.255.0
    network 192.168.20.0
    broadcast 192.168.20.255
    vlan_raw_device eth0

auto eth0.30
    iface eth0.30
    inet static address 192.168.30.1
    netmask 255.255.255.0
    network 192.168.30.0
    broadcast 192.168.30.255
    vlan_raw_device eth0


Veja que no exemplo defini 3 VLANs na interface eth0, a 10 , a 20 e a 30. Agora você pode montar as configurações da máquina baseadas nas interfaces das VLANs.
Por exemplo, impedir que o tráfego de uma VLAN seja encaminhado para outra:

# iptables -A FORWARD -i eth0.20 -o eth0.30 -j REJECT
# iptables -A FORWARD -i eth0.30 -o eth0.20 -j REJECT
 

Ou definir regras diferentes para uma VLAN no squid:
acl vlan30 src 192.168.30.0/24
acl vlan20 src 192.168.20.0/24
acl youtube dstdomain youtube.com
http_access deny vlan20 youtube


Configuração do Switch

Para que o tráfego chegue na interface da VLAN correta, os frames devem vir com a marcação 802.1q. Para isso a porta do switch deve estar configurada corretamente como trunk e permitindo tráfego das VLAN's desejadas.
Em um switch Cisco a configuração seria:
# switch(config-if) switchport mode trunk
# switch(config-if) switchport trunk allow vlan all


Ou em um switch HP/3com:
# port link-type trunk
# port trunk permit vlan all


Se você usa o Mikrotik RouterOS a coisa pode ser um pouco mais confusa, confira aqui.

sexta-feira, 29 de novembro de 2013

Configurando portas VLAN access no Mikrotik RouterOS

Existe muita documentação explicando como "criar" VLAN's no Mikrotik, mas sempre explicando como criar interfaces VLAN e não a VLAN de verdade, ainda sem diferenciar portas de acesso de portas de transporte (trunk). Uma interface VLAN (vlan interface) atrelada à uma interface física está mais próximo de uma porta de transporte que de uma uma VLAN como um todo.
Um porta de acesso é uma porta membro de uma VLAN (domínio de broadcast) onde os pacotes não saem com a marcação 802.1q, já os pacotes em portas de transporte recebem a marcação na saída, que é o caso das "VLAN interfaces" no RouterOS.

Falando em domínios de broadcast, no RouterOS você deve criar "bridges", onde cada porta de acesso da VLAN será inserida. As interfaces VLAN (Vlan interface) serão criadas sobre as portas de transporte, de onde os pacotes vão sair com a marcação (802.1q) da VLAN de origem, em seguida as interfaces VLAN são inseridas na bridge da sua VLAN.

Se quer saber um pouco mais sobre VLAN's acesse este artigo AQUI.

Neste exemplo estou usando um RB2011 UAS 2Hnd, onde eu tenho 10 portas e pretendo criar 2 Vlan's. A VLAN 10 com as portas ether7 e ether8, e a VLAN 20 com as portas ether9 e ether10.
A porta ether6 será a porta de transporte.



Primeiro criamos as 2 bridges, uma para cada VLAN (br-vlan10 e br-vlan20):






Em seguida adicione as portas ether7 e ether8 à br-vlan10 e as portas ether9 e ether10 à br-vlan20.


 Desta maneira já temos 2 VLANS de verdade, Basta agora criar as interfaces VLAN na porta de transporte e depois inseri-las na suas respectiva bridge.

Criando 2 interfaces VLAN na porta ehter6:





Coloque cada interface vlan dentro da sua bridge. A coisa fica mais ou menos assim:



Veja que as VLANS são definidas pelas portas dentro de uma bridge, e os pacotes egressos das "vlan interfaces" serão marcados com o TAG da VLAN e sairão pela ether6, que é a porta de transporte, onde você provavelmente terá um switch plugado.

Quem vem do mundo Cisco e cia, pode ficar confuso já que no IOS você define qual porta é membro de qual VLAN na configuração da própria porta. A configuração é muito mais simples, mas lembre-se que o RouterOS é basicamente o Linux, e que a RouterBoard não é exatamente um switch, o que lhe dá muito mais flexibilidade.

Problema

Nesta Routerboard que uso as portas 6 a 10 vem com uma configuração ainda mais estranha. Ao inserir as portas nas bridges das VLAN's você por se deparar com o seguinte erro:


Acontece que as portas ether7 em diante vem configuradas como "Slave" da porta ether6, que na prática é o mesmo que dizer que a porta ether6 e todas as suas "escravas" são um switch (uma bridge). Você deve primeiramente remover a configuração "Master Port" dessas portas, para que fiquem "livres", usando a opção "none":


A explicação para isso pode deixar as coisas ainda mais confusas, e fica para outro post. Na documentação da Mikrotik, esta configuração usa recursos diretos da CPU do switch - ASIC (application specific integrated circuit) - e oferece um desempenho maior na camada2, poupando processamento da CPU principal.


O RouterOS é um sistema completo e poderoso, mas se você não pisa firme nos conceitos de redes e camada 2 pode tropeçar bastante até entender a coisa.




sexta-feira, 22 de novembro de 2013

Sudo no Windows

O bom entendedor usuário de Linux já percebeu a ideia do post. Um comando para executar tarefas como administrador.

Mas para que isso? Para evitar a fadiga...

Primeiro, eu uso conta de usuário limitada, então é comum ter que executar alguma coisa com privilégios.
Segundo, eu odeio mouse. Só de ter que achar a coisa no explorer, depois clicar com o botão direito e em "Executar como Administrador", já é muito trabalho para mim. Faço praticamente tudo pelo Executar ou pelo cmd. A medida que uso a janela do Executar a lista fica mais completa e rápido para eu achar o que quero no histórico. Basta um "Windows +R" e mais uma ou 2 teclas e ENTER!

Tudo bem, poderia abrir o executar o digitar "runas /User:Administrador <COMANDO>" e pronto, basta então colocar a senha. Só que Não! Comando muito longo, e seria sempre repetido. Por que não apenas "sudo <comando>" ? Mais rápido.

Para isso crie um arquivo "sudo.cmd" e salve na pasta system32 com o seguinte conteúdo:

@echo off
rem --- Script para tarefas como usuário Administrador
runas /user:%computername%\Administrador %1

Substitua o nome do administrador caso o seu seja diferente, ou coloque antes o nome do domínio se for uma rede com domínio.

Exemplo: Surge um problema e você quer executar o gerenciador de tarefas para ver todos os processos sem restrições:

sudo taskmgr

Simples assim.

Bloqueando sites indesejados - na gambiarra

O truque do arquivo hosts é bem velho. Você pode relacionar endereços IP com nomes fixos no arquivo, ou mesmo indicar um IP falso para um determinado nome ( por exemplo facebook.com ).
A ideia de usar este método, muito deselegante por sinal, é que em alguns casos você tem redes onde não há um servidor proxy ou algo do tipo, o o pessoal quer bloquear alguns sites para que os usuários não desviem do trabalho, mas apenas em algumas máquinas. Pequenos escritórios ou escolas são bons exemplos. Acaba sendo uma solução rápida e eficaz.

O arquivo deve indicar o endereço IP e o nome DNS da maquina linha por linha. Para cada nome DNS usado o sistema consulta o arquivo hosts antes do servidor DNS, então você pode envenenar o arquivo com entradas falsas. Provavelmente o seu Anti vírus vai reclamar, por isso preste atenção nele durante o procedimento.

O endereço do arquivo é o "C:\Windows\System32\drivers\etc\hosts". Abra o arquivo no bloco de notas e comece a escrever. Veja abaixo como bloquear o fcebook:

127.0.0.1     fb.com
127.0.0.1     www.fb.com
127.0.0.1     facebook.com
127.0.0.1     www.facebook.com
127.0.0.1     pt-br.facebook.com
127.0.0.1     facebook.com.br
127.0.0.1     www.facebook.com.br
127.0.0.1     pt-br.facebook.com

Salve e pronto. Veja que devem ser colocadas entradas com variações do domínio do site.

Você pode fazer um script se você usar isso em vários locais ou em várias máquinas. Fiz um exemplo de um onde é aberto um arquivo no qual você pode digitar os domínios sem se preocupar em digitar os endereços. Em seguida ele gera as entradas corretamente e salva no arquivo hosts:

@echo off
echo.
if not exist "%Userprofile%\Bloqueados.txt" echo. > "%Userprofile%\Bloqueados.txt"

echo  Digite em linha por linha neste arquivo os endereços que deseja bloquear.
echo Salve e feixe o bloco de notas.
echo.
echo.
set /p R=         Tecle para abrir...

notepad "%Userprofile%\Bloqueados.txt"

echo.
echo.
echo  Salvando relacao anterior....
type %Systemroot%\System32\Drivers\etc\hosts > %Systemroot%\System32\Drivers\etc\hosts.old
echo.
echo         Carregando dominios bloqueados....
echo. > %Systemroot%\System32\Drivers\etc\hosts
echo 127.0.0.1    localhost >> %Systemroot%\System32\Drivers\etc\hosts

for /f %%B IN ( ' type "%Userprofile%\Bloqueados.txt" ' ) DO ( echo 127.0.0.1    %%B >> %Systemroot%\System32\Drivers\etc\hosts )
 

type %Systemroot%\System32\Drivers\etc\hosts

echo.
echo.
pause


Assim que executado ele verifica a existência de um arquivo "Bloqueados.txt" no perfil do usuário, que pode ser copiado previamente, em seguida abre no bloco de notas para edição. Assim que salvo, ele carrega as entradas no arquivo hosts. Eu chamei o script de Bloq.cmd, e sempre copio para a pasta system32, é claro.

Script para configurar Proxy.


É comum em uma rede grande, onde cada usuário tem a sua conta, ter que configurar o proxy de um por um. Você simplesmente tem que fazer isso de máquina em máquina e para cada conta de usuário. É um trabalho ingrato, mas você pode simplesmente orientar o usuário, por telefone, de como fazer a configuração caso precise. Mas por que não automatizar?
Faça um pequeno script com a sua configuração e poupe alguns instantes de trabalho. Vamos criar um script (BAT) para ser usado como um comando qualquer e um script em VB caso precise de interação com o usuário. Você pode colocar um atalho para os scripts em um local fácil para o usuário, e uma cópia no path para que seja executado como um comando normal. Por fim você pode colocá-lo para ser executado no logon do usuário ou nos scripts do domínio via GPO.

Abra o bloco de notas e copie o seguinte conteúdo:

@echo off
rem Configurar proxy

reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d 192.0.2.1:3128 /f
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /d 1 /f
reg add "
hkey_current_user\Software\Microsoft\Windows\currentVersion\Internet Settings" /v ProxyOverride /d "*intranet.exp.br;192.168.0.1;www.caixa.gov.br;<local>" /f

echo.
echo Servidor Proxy Padrão definido

E salve o arquivo como o nome "SetProxy.cmd". Copie o arquivo para a pasta System32 para que possa ser executado como um comando qualquer. Lembre-se de substituir o endereço pelo endereço do seu servidor proxy com a porta e as exceções de acordo a sua necessidade. Caso não use nenhuma exceção deixe apenas o valor "<local>" que é bem comum ser usado. 

Você pode criar um atalho para o script em um lugar fácil de os usuários encontrarem, ou mesmo pedir para executar procurando na pesquisa do Windows.

Em alguns casos os usuários de notebook podem sair da sua rede para locais onde não há servidor proxy, e fica meio complicado explicar todo o caminho para que ele saiba desabilitar a configuração. Com um script em VB você pode fazer aparecer uma caixinha de diálogo "SIM ou NÃO" para ele usar sempre que quiser.

Crie um segundo arquivo no bloco de notas e valve com o nome "ConfProxy.VBS":

dim ConfProxy
set ConfProxy = Wscript.CreateObject("Wscript.Shell")

if msgbox("Habilitar Proxy?", vbQuestion or vbYesNo) = vbYes then
ConfProxy.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", 1, "REG_DWORD" 
ConfProxy.RegWrite "HKCU\Software\Microsoft\Windows\currentVersion\Internet Settings\ProxyServer", "192.0.2.1:3128", "REG_SZ" 
ConfProxy.RegWrite "HKCU\Software\Microsoft\Windows\currentVersion\Internet Settings\ProxyOverride", "*intranet.exp.br;192.168.0.1;www.caixa.gov.br;<local>", "REG_SZ"
else 

ConfProxy.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable", 0, "REG_DWORD" 
End if 
Set ConfProxy = Nothing

Clicando no script o usuário pode selecionar sim ou não. Você pode salvar na área de trabalho ou fazer um atalho.

Deixando o script mais robusto

Se você odeia fazer configurações manualmente, e precisa alterar essas configurações frequentemente, você pode aprimorar o script para que ele defina o endereço do servidor com um argumento, ou mesmo que habilite ou não a configuração. Veja o código abaixo:

@echo off
rem Configurar proxy

set Arg1=%1
set Arg2=%2
if defined Arg1 goto %Arg1%

rem ---- Define a configuração padrão
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d 192.0.2.1:3128 /f
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /d 1 /f

reg add "hkey_current_user\Software\Microsoft\Windows\currentVersion\Internet Settings" /v ProxyOverride /d "*intranet.exp.br;192.168.0.1;www.caixa.gov.br;<local>" /f
echo.
echo Servidor Proxy Padrão definido
goto fim

rem  ----- Define segundo o IP informado no argumento IP
:/IP
:IP
if not defined Arg2 goto ERRO
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /d %Arg2% /f
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /d 1 /f
echo.
goto fim

rem ----- Desativa o uso do proxy
:/disable
:disable
:/off
:off
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /d 0 /f
echo.
echo Uso de servidor Proxy desabilitado
goto fim

rem ----- Ativa o uso do proxy
:/enable
:enable
:/on
:on
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /d 1 /f
echo.
echo Uso de servidor Proxy habilitado
goto fim

:--help
:--?
:help
:/h
:/help
:?
:-?
echo.
echo  Uso do SetProxy
echo          Setproxy - Definie o servidor padrão
echo         "SetProxy IP <IP do servidor>:<porta> " - Define o IP e porta do proxy
echo          SetProxy off - Desabilita o proxy
echo.
echo Exemplo: SetProxy IP 192.168.88.1:8080
echo.
goto fim

:ERRO
echo.
echo    Você deve especificar o endereço do servidor para a opção IP
echo "SetProxy IP <IP do servidor>:<porta>" - Define o IP e porta do proxy
echo.
echo Exemplo: SetProxy IP 192.0.2.1:3128
echo.
goto fim

:fim


Veja que agora você pode executar o script usando o argumento IP <IP do servidor>:<porta>, ou os argumentos "on" ou "off" para habilitar ou desabilitar. Qualquer argumento inválido o o programa é encerrado sem qualquer alteração, e se usado sem argumentos a configuração padrão é carregada.

SetProxy ?   ---- Exibe o help
SetProxy IP 10.0.0.250:8080 ---- Configura o proxy com o endereço fornecido.
SetProxy ON    -----  Habilita o uso do proxy
SetProxy OFF    -----  Desabilita o uso do proxy

Para multiplicar este arquivo em toda rede você pode fazer uma GPO ou deixar uma cópia em uma pasta compartilhada facilmente acessível. Ou até mesmo copiá-lo para todos os PCs. Outro recurso interessante é colocar uma entrada autorun para ele no registro. Veja os comandos abaixo:

# Coloca uma entrada para o perfil do usuário atual:
reg add "hkey_current_user\Software\Microsoft\Windows\CurrentVersion\Run" /v ConfProxy /d "<CaminhoDoScript>" /f

# Coloca uma entrada para ser executado no logon de todos usuários:
reg add "hkey_local_machine\Software\Microsoft\Windows\CurrentVersion\Run" /v ConfProxy /d "<CaminhoDoScript>" /f

domingo, 10 de novembro de 2013

Dica rápida - Renomear interfaces de rede

Se por um motivo qualquer você não gostou dos nomes que o sistema atribuiu às interfaces de rede no Linux você pode rapidamente alterar os nomes editando um arquivo do udev.

Por exemplo, você trocou uma placa de rede na máquina e o nome veio como eth2, ou eth3, e você quer que fique eth0.

Antes de tudo identifique o endereço MAC das placas de rede com o ifconfig:

#  ifconfig ethX | grep HW

 Lembre-se de substituir o X pelo número da sua interface.
Edite o arquivo "/etc/udev/rules.d/70-persistent-net.rules".

#  nano /etc/udev/rules.d/70-persistent-net.rules

Lá estão os nomes da interfaces uma em cada linha, com o endereço MAC de cada placa no "ATTR{address}=="ab:cd:ef:gh:ij:kl"". Procure pelo parâmetro "NAME="ethX", você deve comentar linhas de interfaces antigas caso encontre alguma.

Reinicie o sistema:

#  init 6

E pronto!

sábado, 9 de novembro de 2013

Ajustes no terminal do Debian.

Não me perguntem por que, mas no Debian algumas funcionalidades são desabilitadas por padrão na linha de comando. Uma espiada nos scripts de configuração do bash e verá que pode deixar o ambiente um pouco mais agradável.

O bash tem alguns scripts que são executados imediatamente no login do usuário, que são:


/etc/profile
/etc/bash.bashrc

E o perfil do usário que é armazenado na sua pasta home:
~/profile
~/.bashrc

Os 2 primeiros são os arquivos principais, valem para todos os usuários. O arquivo /etc/profile estabelece algumas configurações e em seguida "invoca" o /etc/bash.bashrc. Repare, por exemplo que nas primeiras linhas do /etc/profile é estabelecido o path do sistema, se o UID do usuário for 0 (root) ele tem umas pastas a mais.

if [ "`id -u`" -eq 0 ]; then
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
    PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi

export PATH

 Em seguida ele invoca o arquivo "/etc/bash.bashrc", e todos os arquivo terminados com sh dentro da pasta "/etc/profile.d/", onde você pode criar arquivos de configuração a vontade.

No arquivo "/etc/bash.bashrc" você deve habilitar o bash completion, descomentando as linhas referentes à ele. Estranhamente o Debian é instalado com ele desabilitado. O bash completion é talvez o melhor recurso do shell. Ele faz a mágica da tecla TAB. Por exemplo, não é necessário digitar
"apt-get install isc-dhcp-server", pressionando o TAB ele completa os comandos e mostra os pacotes possiveis. Então é algo como "apt-g<TAB> i<TAB> isc<TAB>s<TAB>".

 Bom, acho que todos conhecem e abusam da funcionalidade, mas esta é uma daquelas coisas que é muito mais complicado explicar do que fazer, então mãos à obra.

Procure pelas seguintes linhas no arquivo e remova as "#":

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
         . /etc/bash_completion
fi

Com isso o bash completion estará habilitado para todos os usuários, para que a alteração tenha efeito é necessário fazer logout e login novamente.

Repare que o bash completion é tão "inteligente" que ele ele analisa o contexto do sistema para mostrar as possibilidades de complementação dos comandos. Por exemplo, se você não tem o pacote htop instalado e digitar "apt-get remove h<TAB><TAB>" ele não colocará o htop na lista pelo simples fato de ser um pacote que comece com H. Outro exemplo são os módulos. Ao digitar "modprobe <TAB><TAB>" ele mostrará todos os módulos disponíveis, mas se for para remover, "modprobe -r <TAB><TAB>" ele mostra apenas os módulos carregados.

Após executar o perfil global, bash executa o arquivo na sua pasta home, o "~/.profile", que executa o "~/.bashrc" em seguida. Outra coisa estranha é que o arquivo "~/.bashrc" do root é muito mais simples que o dos outros usuários. Como root abra os arquivos "~/.bashrc" e o arquivo "/etc/skell/.bashrc" e verá que o segundo ( que é a matriz para os usuários quando criados ) é bem diferente.
Eu gosto de renomear o arquivo original do root e copiar o segundo:

# mv ~/.bashrc ~/.bashrc.OLD
# cp /etc/skell/.bashrc ~/.bashrc

Dando uma olhada no "/etc/skell/.bashrc" você encontra algumas coisas interessantes, como alguns aliases úteis, prompt colorido e forçar alguns outros comandos a usarem cores também, o que é muito útil. É o caso do grep por exemplo, os termos ficam em destaque na saída do comando.
Voltando ao aquivo descomente as seguintes linhas:

...
#force_color_prompt=yes
...
if [ -x /usr/bin/dircolors ]; then
       test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
       alias ls='ls --color=auto'
       #alias dir='dir --color=auto'
       #alias vdir='vdir --color=auto'

        #alias grep='grep --color=auto'
       #alias fgrep='fgrep --color=auto'
       #alias egrep='egrep --color=auto'
fi

# some more aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

Você pode adicionar mais alguma coisa que goste. Eu particularmente sempre ponho:

alias cls=clear
alias df='df -h'
alias du='du -h'
alias free='free -m'

Desta forma, todo usuário criado a partir de então vai copiar o arquivo pronto na pasta "/etc/skell/" para o seu perfil. Para usuários já existentes, você pode abrir o arquivo "~/.bashrc" de cada um e editar, ou mesmo copiar a matriz para todos.

Repare que agora o shell fica mais agradável à cores, e você ficará até mesmo mal acostumado com o bash completion.

quinta-feira, 7 de novembro de 2013

Vírus no pendrive. Matando a cobra e mostrando o pau.

Em 2009 eu trabalhava em uma escola com 12 computadores, na época vírus provenientes de pendrive eram um problema sério. Tudo graças ao recurso de autorun do Windows XP, que de maneira muito ingênua executava qualquer programa indicado no arquivo autorun.inf de unidades removíveis. Em pouco tempo infecções por pendrives se tornaram um caos. O pendrive se tornou o simbolo de promiscuidade no mundo da informática.

Logo os mais preocupados com a questão descobriram a maneira correta de cortar o mal pela raiz desativando a funcionalidade de autorun no Windows XP via GPO. Qualquer unidade removível montada no sistema, antes que alguém pudesse impedir, o Windows fazia-lhe o favor de verificar a existência do famigerado arquivo autorun.inf, onde era indicado o programa (vírus) a ser executado imediatamente, o que não dava qualquer chance para o usuário.

Um arquivo autorun.inf geralmente tem um conteúdo como este:

[autorun] 
open=virus.exe 
icon=virus.exe,0
label=Run Virus

Por uma causa nobre o Windows criou todos estes problemas. Mas a funcionalidade foi aprimorada no Windows 7, e funciona de modo muito mais seguro. Neste artigo a Microsoft explica todos os recursos disponíveis usando os arquivos autorun.inf em unidades removíveis, caso você tenha interesse em entender ou mesmo em utilizar em algum software seu.

No Windows 7 você pode configurar facilmente várias opções de autorun no painel de controle acessando o item  "Reprodução automática", mas o bom mesmo é desmarcar a primeira opção "Usar Reprodução automática em todas as mídias e dispositivos".


Ele tem muito mais opções relacionadas à música e vídeos, e para executar um programa indicado pelo arquivo o usuário deve selecionar em um menu que aparece assim que o dispositivo é plugado. O padrão é "Abrir pasta para exibir arquivos":




Prevenindo no Windows XP

Para desativar a funcionalidade do autorun no Windows XP, vá em "Executar, digite gpedit.msc, e Enter". No console da GPO você pode procurar por "Modelos administrativos > Sistema > Desativar autoexecutar", marque a opção habilitado e em "Todas as unidades". Com isto o usuário tem uma chance de caçar o vírus antes que o próprio Windows abra as portas para ele. Veja a descrição completa da função no site oficial AQUI.

Assim o usuário ganha tempo, mas não resolve o problema. Se o pendrive estiver com o arquivo autorun.inf indicando o executável do vírus, ao clicar duas vezes no seu ícone em "Meu Computador" o sistema age da mesma maneira, executando o vírus. É preciso então fazer uma varredura cuidadosa na unidade antes de abri-la. Alguns antivírus o fazem bem, ou mesmo ferramentas de segurança próprias para pendrive. No entanto é bom entender como o problema funciona e fazer alguns procedimentos para evitar infecções futuras.

Por isso comecei e desenvolver o Pendrive Limpeitor Tabajara com a ideia de que se você tiver um bom script em mãos que faça o trabalho rápido e eficiente, pode poupar o processamento do seu antivírus e evitar problemas futuros.

Problemas comuns 


Com alguma experiência pude observar os seguintes sintomas das infecções e o que o script deve fazer par solucionar.

 - Criação do arquivo "autorun.inf" na unidade onde é indicado o executável do vírus. O script deve remover o arquivo e criar uma pasta autorun.inf com atributos S, H e R, para evitar que um novo arquivo seja criado no lugar futuramente.

 - Procurar arquivos executáveis no raiz da unidade e oferecer para excluir.

 - Varrer a unidade em busca de pastas ocultas onde pode estar o programa malicioso. É comum eles usarem do truque da lixeira para dificultar as coisas. Uma pasta oculta é criada, e dentro dela outra pasta com um arquivo "Desktop.ini" com um conteúdo que faz o sistema pensar que aquela é uma pasta de lixeira. O script tenta identificar estas pastas e excluir.


 - Resolver o problema dos atalhos e revelar as pastas ocultas

 O problema do atalhos

A moda hoje é o vírus ocultar todas as suas pastas e criar atalhos para ele, sem que você perceba  ao clicar no atalho o programa é executado e logo em seguida ele abre a pasta desejada. É importante fazer uma varredura por atalhos e "desocultar" (retirar os atributos H e S) todas as pastas no raiz da unidade.
Se você tem este problema dos atalhos com algum pendrive, pode revolver com 2 comandos:

 attrib -r -h -s /d /S X:\
del /f X:\*.lnk

Onde X: é a letra da unidade do seu pendrive ou disco. Tome muito cuidado para não fazer isso em unidades do sistema, então tenha certeza da letra da unidade. O problema de usar desse método é que pode demorar muito já que ele vai ser processado em todos os arquivos da unidade. Além de muito dispendioso, apenas revela as pastas e arquivos ocultos, para que sejam removidos manualmente.

 Você pode usar os seguintes comandos para revelar pastas e processar atalhos apenas no raiz da unidade poupando tempo. Lembre-se de substituir H: pela letra da sua unidade:

for /F "delims==" %X IN ('dir /b /a H:\') DO ( attrib -H -S -R "H:\%X" )

O comando acima revela todas as pastas e arquivos ocultos apenas no raiz, em seguida você pode analisar a unidade e apagar coisas suspeitas manualmente.

Outra opção é o comando abaixo. Ele relaciona todas as pastas e arquivos que tenham um atalho de mesmo nome, remove os atributos e apaga o atalho:

for /F "delims=." %X IN ('dir /b /a H:\*.lnk') DO ( if exist H:\%X ( attrib -H -S -R "H:\%X" & del /f /a /p H:\%X.lnk ))

Este recupera suas pastas de acordo com os nomes dos atalhos, mas outras pastas ocultas permanecem ocultas.

Um amigo meu desenvolveu um software similar que revela as pastas ocultas em apenas um clique!
Por ser um programa gráfico é muito mais amigável para leigos, ele ainda tem um vídeo explicando como fazer o procedimento. É o Folder Recovery. Você pode conferir nos links abaixo:

Video: http://www.youtube.com/watch?v=zXnOcfn1Zhs
Versão simplificada.(Vista/7) http://www.mediafire.com/?axu4524wncogs77 
Versão de tirar o vírus.(XP/Vista/7) http://www.mediafire.com/?8o6j9l68s2ed598

Entendendo os atributos

Atributos são recursos do sistema de arquivos (FAT ou NTFS), os arquivos podem ser facilmente marcados com atributos para implementar funcionalidades diversas no sistema operacional. Os atributos no Windows são:

H - Hide, arquivo ou pasta oculta
R - Read only. Somente Leitura
S - System, arquivo ou pasta do sistema
A - Atributo de arquivamento. Serve para operações de backup. (irrelevante neste caso)
I - Índice de pesquisa. Arquivos com este atributo não são indexados. (irrelevante neste caso)

Arquivos ou pastas com atributo de sistema também ficam ocultos, e para vê-los você deve desmarcar a opção  "Ocultar arquivos protegidos do sistema operacional" no menu de "Opções de pasta" no Painel de controle:


Você pode manipular os atributos de arquivos e pastas clicando com o botão direito e em propriedades. Em relação aos atributos I, e A clicando no botão "Avançado":


Outra alternativa é usar a linha de comando com o attrib. A sintaxe é bem simples:

attrib arquivo.txt                      # Exibe os atributos do arquivo
attrib +S arquivo.txt                 # Adiciona o atributo S no arquivo
attrib -H arquivo.txt                 # Remove o atributo H do arquivo
attrib +H +S +R arquivo.txt    # Adiciona os 3 atributos no arquivo

Toda pasta ou arquivo que um malware deseja esconder, invariavelmente serão aplicados os atributos H, R e S. O atributo S não pode ser manipulado diretamente pelo Explorer nas propriedades do arquivo, então você deve usar o comando attrib para adicionar ou remover o atributo:

attrib -S arquivo.txt


Métodos preventivos

Tendo o pendrive limpo você pode usar de alguns artifícios para prevenir infecções posteriores. Uma delas é criar uma pasta de nome AUTORUN.INF e aplicar os atributos nela para que não seja substituída por um vírus.

md autorun.inf & attrib +H +S +R autorun,inf

Se a unidade é formatada em NTFS, você pode remover as permissões da pasta para dificultar ainda mais a sua alteração.

Outro método mais radical é formatar a unidade em NTFS, criar uma pasta no raiz onde serão armazenados os seus arquivos legítimos e remover todas as permissões de alteração no raiz. Para isso o mecanismo de herança deve ser desabilitado na pasta criada, onde você poderá delegar permissões a vontade.

O "Pendrive Limpeitor Tabajara"

Com a ideia de fazer todo o processo automaticamente comecei a desenvolver um script que chamei de "Pendrive Limpeitor Tabajara", para agilizar na limpeza de pendrives de alunos e outras pessoas que eram espetados nas máquinas todos os dias. Ele tem evoluído bastante, tenta identificar atalhos com nomes de pastas na unidade, recuperar as pastas de mesmo nome dos atalhos que estiverem ocultas, remover o arquivo autorun.inf, detectar executáveis ocultos na unidade e por fim cria a pasta AUTORUN.INF que funciona como uma espécie de vacina.
Basta executar e digitar a letra da unidade selecionada, em seguida a varredura é feita e cada arquivo ou pasta detectado só é excluído com a confirmação do usuário.








No final, o máximo que pode sobrar são pastas que podem conter vírus, mas todas elas reveladas, e o usuário poderá excluir facilmente sabendo que não é uma pasta dele.
Tem sido muito eficiente, mas estou aberto a sugestões para melhorar, ou até mesmo migrar para uma linguagem compilada.

Veja o vídeo de demonstração aqui: http://goo.gl/BXysfg

Aparando as arestas com o Autoruns e Process Explorer

Se o usuário teve o pendrive infectado ou mesmo plugou o pendrive infectado na sua máquina é importante saber se o sistema não foi comprometido.
Para isso sempre uso estas duas ferramenta do Sysinternals Suite. Leia um artigo mais detalhado aqui.
É importante executar primeiro o "procexp" para ver se não há nenhum processo suspeito em execução, depois o "autoruns" lhe mostrará se não foi criada nenhuma entrada para que o vírus seja novamente executado na inicialização dos sistema. Ultimamente o vírus mais comum aparece como um JScript (extensão .js) que é executado pelo interpretador do Windows, o "wscript.exe". Veja o processo no Process Explorer:






Quanto a entrada de autorun gerada, tome cuidado, por ela pode ser criada apenas no perfil do usuário que foi infectado, principalmente se você usa várias contas de usuário. Este é mais um caso onde usar uma conta sem privilégio de administrador pode prevenir que o sistema todo seja comprometido, já que removendo o perfil do usuário infectado resolveria o problema posteriormente. Veja as dicas de segurança AQUI.


Conclusão

Assim que plugar pendrives ou unidades removíveis no seu PC, use imediatamente uma ferramenta como esta. É muito mais seguro que deixar o Anti vírus cuidar do serviço. Se você quer uma cópia do Tabajara, por favor mande um email para joaolucasmacedo AT gmail.com :-)


sábado, 2 de novembro de 2013

Removendo arquivos com segurança

Um arquivo nada mais é do que uma sequência de dados distribuída no disco. Para resolver a bagunça os arquivos são relacionados em uma tabela, este é o trabalho fundamental do sistema de arquivos. Quando você manda um arquivo para a lixeira ele é simplesmente movido da pasta de origem para uma pasta chamada lixeira. Quando excluímos um arquivo a sua referência na tabela é eliminada, deixando os blocos que ele ocupa "órfãos", prontos para serem preenchidos com qualquer outro conteúdo assim que possível. Imagine um livro que é removido do índice da biblioteca, mas continua na estante, mesmo que ninguém a princípio vá localizá-lo.
Por isso é relativamente simples recuperar um arquivo. Um software especial varre todo o disco procurando por sequências que façam sentido, revelando qualquer informação solta por ali. Quanto mais tempo decorrido após a exclusão, mais provável é que o sistema tenha reutilizado o espaço e "passado por cima" do conteúdo anterior. Uma boa ferramenta livre para o trabalho é o TestDisk.

Se você tem algum arquivo que não deseja que seja recuperado tão facilmente, você deve apagar este arquivo com segurança. A técnica é simples. Antes de apagar o arquivo (remover da tabela de alocação do sistema de arquivos) o documento é sobrescrito várias vezes com dados aleatórios, e em seguida removido.

 No Windows não há ferramenta nativa para isso. Você pode baixar o pacote do SysInternals Suite e usar o utilitário Sdelete. Se você não conhece o SysInternals leia este artigo. Copie o executável do Sdelete para a pasta "C:\Windows\system32" e você já pode usá-lo como um comando qualquer. Para apagar um arquivo use:

sdelete -p 5 arquivo.txt

Consulte opções adicionais com o parâmetro "/?".

sdelete /?



 O AVG Anti Vírus 2014 veio com a opção de "triturar" arquivos integrada no menu de contexto. Se você usa o AVG, mesmo o Free, você pode simplesmente clicar com o botão direito no arquivo e triturá-lo.



Resolvendo o problema no Linux ou um LiveCD

O Linux tem uma ferramenta nativa para o serviço, o shred. O uso é bem simples:

shred -n 5 arquivo.txt

Você pode comprovar a ação exibindo o conteúdo do arquivo logo em seguida. Verá que o conteúdo foi sobrescrito por dados ininteligíveis. A opção "-n 5" especifica a quantidade de vezes que o arquivo será sobrescrito.
Existe ainda a opção "-u" que remove o arquivo em seguida. O padrão é apenas "picotar" o arquivo sem apagá-lo, já que você poderia estar usando o mesmo comando em arquivos especiais como partições, que não podem ser apagados. Então para picotar e apagar o arquivo seria:

shred -u -n 5 arquivo.txt

Outro método interessante é dar boot no sistema com um live CD e apagar partições ou mesmo discos inteiros usando o shred. Imagine que você tem um HD com infirmações sigilosas da empresa que não será mais utilizado.

shred -n 5 /dev/sda

Lembre que ele percorrerá todo o disco, então se você definir um número muito alto de escritas pode levar muito tempo. Usando um live CD também é válido usar do dd para realizar a tarefa, e destruir o conteúdo de um disco. Por exemplo:

dd if=/dev/zero of=/dev/sda            # Preenche o disco com Zeros
dd if=/dev/random of=/dev/sda      # Preenche o disco com dados aleatórios

Outra opção interessante é usar os atributos para definir aquivos que devem ser apagados com segurança. Os atributos oferecem uma série de funcionalidade no sistema de arquivos, um dele é o atributo "s" (minúsculo) que informa que os blocos devem ser preenchidos com zeros antes que o arquivo seja apagado. Para definir o atributo "s" em um arquivo use o comando chattr. Alguns atributos só podem ser definidos pelo root, então considere dar uma lida na documentação antes de usar os recursos:

# chattr +s arquivo.txt        # Adiciona o atributo "s" ao arquivo
$ lsattr arquivo.txt              # exibe os atributos do arquivo


Por fim você deve lembrar que os sistemas de arquivos modernos podem possuir cópias dos dados temporariamente devido ao uso do journaling. Ou mesmo em locais onde há snapshots das alterações das pastas, backups automáticos, shadow copies, etc. Você pode consultar a documentação e este artigo AQUI para se orientar. O mais indicado mesmo é executar a limpeza em todo o HD (ou pendrive) no caso de prevenção de vazamento de informações. Mas se você está realmente preocupado com o conteúdo deste arquivo nunca pare de alimentar a sua paranoia.

terça-feira, 22 de outubro de 2013

Ambiente de testes com Vbox. Easy way

Se você é administrador de Redes, ou mesmo precisa de uma máquina para fazer um teste qualquer, certamente o Virtual Box é o melhor opção. Em um passe de mágica você tem uma ou mais máquinas à mão e pode começar o trabalho. Se você está estudando redes e servidores sempre terá uma máquina como cliente e outra como servidor, agora duas máquina virtuais. Um exemplo de rede bem simples, e extremamente comum é a rede interna do local e uma máquina com 2 placas de rede atuando como servidor de alguma coisa e compartilhando a conexão com a internet. Este cenário é facilmente simulado no Virtual Box. Basicamente o que precisamos fazer é criar 2 máquinas e uma delas com 2 placas de rede, mais alguns ajustes e temos o cenário pronto.

Se você ainda não tem o "Vbox" instalado na  sua máquina você pode baixar aqui. É importante lembrar que cada máquina virtual em funcionamento irá consumir a quantidade de memória que lhe foi dada do seu sistema, então se você tem uma máquina com 2GB de RAM por exemplo, considerando que o sistema operacional hospedeiro consuma 1GB, você pode criar 2 máquinas com 256MB de memória ou mesmo uma delas com 512MB. Você pode fazer os testes e pode depois aumentar ou diminuir a memória de cada máquina virtual conforme necessário, deixe sempre um "folga" para o sistema hospedeiro (máquina real).

Vamos supor que eu queria treinar a configuração de um servidor Proxy com Debian que compartilhe internet para uma máquina com Windows. Primeiro crie 2 máquinas virtuais:

Feitos os ajustes nas máquinas como desejado, o truque para simular uma pequena rede com saída para internet é a configuração das placas de rede das máquinas virtuais. A ideia é rede da seguinte maneira:



Uma rede virtual entre as máquinas virtuais, como em uma rede doméstica, e uma das máquinas com 2 placas de rede, sendo uma conectada à rede externa com acesso a internet. Por padrão o Vbox deixa as placas de rede configuradas no que eles chamam de NAT. A placa de rede virtual usa serviços do próprio Vbox, recebe IP via DHCP, e o Vbox utiliza de NAT para intermediar as conexões da máquina virtual com o "lado de fora". É uma técnica muito boa e deixa tudo transparente, no entanto para quem quer um ambiente o mais próximo do real possível pode deixar as coisas confusas.

Para configurar basta clicar com o botão direito na máquina virtual ir em configurações e no menu de Rede. Na máquina que atuará como cliente deixe apenas uma placa de rede e será configurada como "Rede interna" e na máquina que atuará como servidor, a primeira placa de rede estará no mesmo modo (Rede interna). Com isso já temos uma pequena rede isolada que funciona apenas entre as maquinas virtuais. Agora basta adicionar uma segunda placa de rede no servidor e configurá-la em modo Bridge com a sua placa de rede real.

Segunda placa de rede em "modo bridge"


Neste modo de operação a interface virtual é tão cliente da sua rede (real) como o seu PC hospedeiro. Ela receberá IP da sua rede e será como qualquer outra máquina nela. A sua interface real (eth0 no exemplo) está ligada em camada 2 com a interface da máquina virtual.

Você pode ainda adicionar outras máquinas dentro da sua rede virtual apenas configurando a interface em modo "Rede interna".

Agora basta instalar os sistemas operacionais e lembrar que as interfaces na rede interna estão isoladas como se houvesse um switch só entre elas. A máquina servidor tem uma outra interface como se conectada diretamente na sua rede simulando a conexão com o que seria o seu provedor de internet.
Mãos à obra. Você tem 2 computadores prontos para receberem as configurações de serviços de rede e uma servidor para compartilhar internet ou oferecer outros serviços à sua rede interna (virtual).

terça-feira, 17 de setembro de 2013

Entendendo as VLAN's

A história

Antigamente as redes Ethernet eram a base de cabos coaxiais, um emendado no outro de máquina a máquina até o final do segmento onde se colocavam terminadores de sinal. O conjunto era chamado de domínio de colisão já que os frames tinham de disputar o tempo de transmissão (em um único cabo) com todos os outros, o que causava muitas colisões e naturalmente a rede trabalhava em half-duplex.



O truque usado pelas placas era o mecanismo do CSMA/CD para evitar as colisões. Com a chegada dos cabos de par trançado e os HUB's o problema não foi resolvido já que o HUB se limita a repetir todos os sinais em toas a portas, então na lógica a rede trabalhava do mesmo jeito. Usando cabos coaxiais ou hub's com cabos de par trançado toda a rede ainda era vista como um único domínio de colisões (onde os pacotes disputam o tempo de uso do meio de propagação - camada 1) e um único domínio de broadcast (onde os hosts podem trocar mensagens de broadcast endereçadas a FF:FF:FF:FF:FF:FF - camada 2).
Chegaram então as bridges, que eram dispositivos que tinham um conector coaxial e mais alguns conectores RJ45 trabalhando como um HUB. Mas o segredo das bridges é que elas trabalhavam na camada 2, isolando os domínios de colisão.

Bridge Ethernet. Imagem disponível em hardware.com.br


 As bridges trabalhavam de forma um pouco mais inteligente. Ao invés de replicar as mensagens de um segmento de rede ao outro (coaxial e par trançado) elas montavam uma tabela relacionando os endereços MAC de cada segmento e só transmitindo o que era necessário para cada lado economizando colisões e congestionamento. Daí o conceito de "Ponte" ethernet.

Um bom artigo para entender a evolução pode ser visto AQUI


Em seguida temos os switchs. O swich trabalha de forma ainda melhor. Monta uma tabela relacionando os endereços MAC de cada porta e só encaminha os frames de acordo com o endereço do destinatário. Com a chegada dos switchs o termo domínio de colisão caiu em desuso, já que cada porta do aparelho representa um único domínio de colisão e tendo apenas um host "pendurado" à ela não existem colisões. O mesmo se aplica ao algorítimo CSMA/CD e as comunicações em Half-duplex, que só continuaram existindo em redes wireless, segmentos cascateados através de hubs ou em outros casos.

Hoje o padrão de uma rede cabeada é ter um switch centralizando as comunicações e toda a rede trabalha em Full-duplex. Cada host tem o sue próprio domínio de colisão, e toda a rede é um único domínio de broadcast.

Virtual LAN's

Isto nos leva a outra questão. Com redes muito maiores e switchs gerenciáveis, podemos configurá-los para separar os domínios de broadcast. Entra o conceito de "Virtual LAN's".

A ideia é separar segmentos de rede em 2 ou mais domínios de broadcast, mesmo que todas as máquinas estejam conectadas no mesmo switch, estarão "presas" em uma rede virtual onde só podem se comunicar diretamente com máquinas do mesmo domínio de broadcast.
Basicamente o administrador da rede tem de configurar o switch para que determinadas portas sejam entendidas como membros de VLAN's diferentes, e o tráfego de uma não se aplica a outra.

Imagine um Switch de 8 portas representando apenas uma VLAN (sem nenhuma configuração):




Mensagens destinadas à endereços de broadcast atingem todas as máquinas, já que só existe um domínio de broadcast. Em seguida 2 portas são configuradas como membros da VLAN 2:





Agora máquinas conectadas às portas 1 e 6 não têm comunicação com as outras. Note que esta configuração é feita apenas no switch e é totalmente transparente para os hosts conectados. Mesmo se você espetar outros switchs em portas relacionadas a VLAN's, tudo funciona normalmente. Imagine que agora ele trabalha como 2 switchs diferentes. Você pode continuar o processo e selecionar portas do switch para que trabalhem em VLAN's diferentes e ter vários domínios de broadcast na mesma rede física. Naturalmente o administrador vai implementar faixas de endereços IP diferentes para cada VLAN, deixando as coisas mais claras. Portas pertencentes a uma VLAN são chamadas portas de acesso (ou untagged members), onde os dispositivos finais são conectados e trabalham sem saber de nada.



Alguém poderia perguntar qual a diferença desta configuração (que atua na camada 2) para uma rede onde simplesmente os hosts são configurados em faixas de endereço IP distintas (fazendo VLAN's em camada 3) e não se comunicariam da mesma forma. Desta maneira ainda seria possível um engraçadinho alterar o seu endereço IP e obter acesso a outras máquinas de sub-redes diferentes, sem falar que quanto maior o domínio de broadcast, maior o número de máquinas que um atacante pode explorar com ARP spoofing por exemplo. O separação da rede por VLAN's ainda melhora o tráfego já que diminui os broadcast storms, que apesar de necessários podem gerar problemas diversos que seriam propagados por toda a rede.


Em seguida temos as portas de transporte, chamadas "Trunk port", que podem carregar tráfego de VLANs diferentes. A ideia é que tendo vários switchs gerenciáveis na rede, todos eles vão ter portas membros de VLAN's comuns. O trabalho das portas trunk é cascatear o tráfego, mas desta vez marcando os frames provenientes de cada VLAN com uma tag indicando o número da VLAN (por isso a maioria usa o termo "tagged port"). A marcação é feita respeitando o protocolo 802.1q, que é compatível com qualquer fabricante.
Se um frame de uma determinada VLAN, de acordo com o MAC, não pertence a nenhuma das portas daquele switch ele é encaminhado para a porta trunk encapsulado com o número correspondente da VLAN. Ao chegar no outro switch a porta também deve estar configurada como trunk, então ele fará a verificação da VLAN correspondente e escolher a porta onde está o dono da mensagem segundo a VLAN indicada, ou mesmo encaminhar para uma outra porta trunk. Assim podemos ter um cenário com vários switchs trabalhando com várias VLAN's como se houvesse um conjunto de switchs para cada VLAN.


Roteamento

Agora que temos várias sub-redes isoladas pela lógica do switch, como fazer para que essas sub-redes de comuniquem? Todos sabem que redes de faixas IP diferentes só se comunicam por roteamento. Então mesmo que eu tenha um único domínio de broadcast com várias faixas de endereçamento, é preciso um roteador para encaminhar os pacotes de uma rede a outra. A solução mais óbvia seria ter um roteador com tantas placas de rede quanto VLAN's existentes na rede, cada uma com um endereço da faixa correspondente. A pesar de funcionar seria uma grande desperdício de cabos, placas de rede e trabalho adicional.

A solução mais comum é usar um roteador com uma única porta configurada em modo trunk (VLAN tagged), chamada de "Routing on a stick". A partir disso o roteador receberá os pacotes e poderá identificar a VLAN de origem já que os frames vão vir marcados com o ID da VLAN. Nele serão criadas interfaces virtuais sobre a interface física e cada uma receberá um IP na faixa usada pela VLAN. Os frames serão desmarcados e despejados na interface correspondente a cada uma. Isso pode ser feito em roteadores mais robustos ou mesmo no Linux. O esquema fica da seguinte maneira:



Para simplificar mais ainda o esquema, entra em cena os switchs layer 3. Além de todas as funcionalidades de gerenciamento de um switch layer 2, eles são capazes de criar interfaces virtuais dentro de cada VLAN com endereços IP, usurpando a função do roteador.

Desta maneira temos várias sub-redes onde o roteador pode dar tratamento diferenciado e regras específicas para cada faixa de endereçamento. Os broadcast storms são diminuídos e poderíamos ter uma rede totalmente isolada por exemplo. Switchs gerenciáveis ainda são caros, mas com pelo menos um atuando como backbone da rede é possível tornar a rede mais segura.




segunda-feira, 16 de setembro de 2013

3 pontos definitivos para a segurança de qualquer PC

Ter o PC infectado é quase tão comum como pegar uma gripe anualmente, o que ocorre de fato é que a grande maioria dos usuários está usando o computador de uma forma vulnerável, e estranho seria se eles não fossem infectados desta maneira!

Entre muitas e muitas recomendações de segurança, o que proponho são 3 passos simples, e na verdade óbvios, que deixam você muito menos ameaçado e permite uma recuperação muito mais rápida do que simplesmente formatando o seu PC.


1º - Nunca, mas nunca use contas com privilégio de administrador

Quando se usa Linux os usuários tomam um choque por que a conta de usuário "padrão" simplesmente não tem permissão para alterar configurações do sistema, como instalar programas, alterar a hora, ou mesmo alterar arquivos do sistema e de outros usuários. Na verdade esta é uma tática muito óbvia do ponto de vista da segurança, no entanto a maneira como o Windows vem configurado (com a sua conta de usuário com privilégios de administrador) deixa para trás o conceito e faz com que o usuário, e o vírus, se sintam  a vontade para executar qualquer código e fazer qualquer alteração no sistema, sem o mínimo de restrição.  
Ironicamente, no help do Windows a recomendação é justamente o contrário.... Que coisa não?!



 A dica é criar uma conta de usuário pessoal (João por exemplo) e criar outra conta com outro nome para ser o "Administrador" do sistema. Criadas as contas no painel de controle você deve ir em "Alterar tipo de conta" e selecionar uma delas como sendo "Usuário padrão".  A diferença é que uma delas é membro do grupo "Administradores" e a outra somente membro do grupo "Usuários".
Você pode ainda usar o console de gerenciamento de usuários, o que pode ser mais simples para você:

Iniciar > Executar > lusrmgr.msc

É importante que cada usuário da máquina tenha a sua conta para deixar as coisas separadas, e apenas uma conta com privilégios de administrador para fazer tarefas administrativas. Você não notará diferença absolutamente nenhuma, a não ser quando for adicionar ou remover programas e alterar configurações do sistema. Para todos caso, quando for necessário executar algum programa com privilégios (instaladores por exemplo) será necessário uso da conta apropriada. Basta clicar com o botão direito e em "Executar como administrador", ou no Windows XP "Executar como...". O trabalho pode ser ainda mais simples no WIndows 7 com o recurso da UAC que torna o mecanismo automático. No máximo você terá de fazer logoff e fazer logon com a conta de administrador para realizar o trabalho.


Pense que quando um vírus é executado no seu sistema, geralmente ele é executado por você, mesmo que acidentalmente. Então ele terá o mesmo nível de privilégio que a sua conta, que sendo restrita fará no máximo alterações em seu próprio perfil de usuário. Mesmo que você seja infectado é bem provável que excluindo a sua conta e criando uma nova resolva o problema.

2º - Anti vírus e software PIRATA

A dica do anti vírus é velha. Mas vale lembrar:
 - Use um bom anti vírus (AVG, Avast, Avira)
 - Eles se atualizam automaticamente, não se preocupe
 - Processe o anti vírus em qualquer arquivo que baixar da internet, e sempre em pendrives alheios

Esses 3 anti vírus citados são grátis para uso doméstico, e possuem versões corporativas pagas. Mas onde entra a questão do software pirata?
Infelizmente muitas pessoas usam versões "crackeadas" mesmo de anti vírus! Quer dizer, alguém mal intencionado conseguiu burlar a perícia do próprio anti vírus, e oferece uma versão independente. O mesmo acontece com inúmeros programas (AutoCAD, Adobe CS, Office, Nero) e Jogos, você pensa estar fazendo um bom negócio mas está abrindo a porta para o inimigo, já que o "crack" deste software pode conter código malicioso que você terá que "engolir" junto.

Então, evite software pirata ao máximo! Respeite o trabalho dos outros, e procure alternativas grátis e confiáveis. Principalmente em ambientes empresariais onde você está sujeito à fiscalização e será responsabilizado pelo comprometimento das informações.

3º - Atualizações automáticas do sistema

A triste realidade e que a grande maioria dos técnicos desativa as atualizações do sistema. Simplesmente por que a maioria das pessoas usam Windows não licenciado, e junto das atualizações do sistema vem a ferramenta de validação da cópia do Windows. Para evitar muito trabalho e que o freguês não se depare com a mensagem de Windows pirata, desativam as atualizações e cortam o "problema" pela raiz.
Saiba que todas as falhas de segurança são corrigidas com as atualizações,  o que as coloca em um nível de prioridade ainda maior que um anti vírus. Qualquer software malicioso explora uma falha no sistema, e essas falhas são corrigidas com as atualizações. Isso vale não só para o Windows mas para todos os softwares que você usa como: Firefox, Chrome, Adobe Reader, Office, Java, flash, etc... Trabalhar com o sistema desatualizado é como andar com um carro sem fazer revisões e esperar que tudo funcione perfeitamente bem para sempre.

De qualquer forma você pode simplesmente evitar o procedimento de validação, já que ele é opcional, removendo o programa da lista de atualizações automáticas. Antes de tudo configure o sistema para que confirme as atualizações antes mesmo de serem baixadas :

Configuração no Windows 7
No WIndows XP

 Logo em seguida o sistema procura pelas atualizações e mostra a lista de correções disponíveis. No Windows 7 é usada a de código KB971033, e no Windows XP KB905474. Na própria descrição delas você pode ver que se trata de Ferramenta de ativação do Windows ou algo do tipo, basta desmarcá-las, clicar com o botão direito e em OCULTAR. Pronto, deixe que o sistema instale todas as outras sem medo :-).

Assim o sistema fica muito mais seguro, sem falar que a Microsoft disponibiliza até mesmo o drivers mais recentes do seu hardware, e homologados por eles.
Além de deixar o seu sistema protegido de verdade ( e não vigiado, como no caso do anti vírus ) a Microsoft lança mensalmente a "Ferramenta de remoção de software mal intencionado", que finaliza a proteção do sistema, trabalhando como uma espécie de anti vírus.

Muitos dizem que o Linux é mais seguro que o Windows. Sem dúvida, mas repare que no ambiente do pinguim as coisas já funcionam desta maneira naturalmente.
 - Usuário administrador, só o root.
 - Software pirata praticamente não existe já que a maioria é software livre e proveniente de um repositório oficial.
 - O sistema é atualizado regularmente sem nenhuma "pedra no caminho".


Tomando estes 3 cuidados que são extremamente óbvios e simples, você tem um nível real de segurança e pode trabalhar de consciência limpa. Ma não se esqueça que segurança não para por aí...



Descobrindo o Sysinternals suite

O sysinternals suite é um conjunto de ferramentas desenvolvidas por Mark Russinovich e adotada oficialmente pela Microsoft em 2006. Deixando a história de lado, o fato é que as ferramentas são tão boas que quem se acostuma a usar não consegue viver sem elas. Na verdade eu acho que a Microsoft deveria incluir no Windows nativamente, para não me dar o trabalho de copiar para todas as máquinas.

Para começar você pode baixar o pacote AQUI, em seguida descompacte em uma pasta qualquer.Mas guarde o pacote por que você vai querer copiar para outras máquinas com certeza.


Você pode se sentir a vontade para clicar em qualquer aplicativo e ver como funciona. Todos eles vêm com um help :-). Mas antes de começar é importante preparar o ambiente.
Eu particularmente não gosto de ir até uma pasta específica, escolher uma delas e dar 2 clicks. Eu sempre chamo os programas através do "Executar...". 


Mas para isso é preciso que os executáveis estejam em alguma pasta do path do sistema. Sempre que me sento em frente a uma máquina para fazer qualquer diagnóstico, antes de tudo copio a kit de ferramentas para a pasta "System32", que é o principal path do Windows. Depois disso você pode executar qualquer uma das ferramentas naturalmente pela linha de comando ou via "Executar...". Para automatizar o processo você pode usar um script para copiar os arquivos para a "system32" com um clique. Crie um arquivo no bloco de notas com o seguinte conteúdo:

rem @echo off

copy "SysInternalsSuite"\* "%WINDIR%\System32\"

pause


Basta então salvar com qualquer nome ".cmd" e coloque junto com a pasta do Sysinternals. 2 cliques e ele executa o código copiando tudo para  o path.
Dados os preparativos, vamos aqui a uma apresentação das ferramentas mais úteis e seus principais recursos:

1) Autoruns: Esta ferramenta simplesmente mostra todos os programas que são carregados com o Windows, desde os serviços as tarefas agendadas, e muito mais. De uma forma muito intuitiva você pode habilitar ou não cada entrada de "autorun" no sistema ou mesmo deletar. O mais interessante é que com o tempo você percebe onde aparecem entradas relacionadas a cada programa ou mesmo vírus e adwares. Antes de tentar removê-los ou mesmo terminar o processo com o gerenciador de tarefas tente desabilitar no Autoruns e reiniciar a máquina. Com ele é muito fácil neutralizar programas indesejados ou mesmo malwares. Para quem sentiu algo familiar, este aplicativo nada mais é do que uma ferramente similar ao MSconfig, porém infinitamente superior.

Este software é tão temido pelos malwares que é muito comum quado a máquina etá infectada o vírus detectar que você executou o autoruns e terminar o processo imediatamente! Por isso não se assuste se você executá-lo em uma máquina infectada e a janela fechar de repente. Pule para o "Process Explorer", mate o processo do vírus e volte a abrir o autoruns. Tiro e queda!



Neste link o Mark mostra como remover malwares e usar algumas ferramentas.



2) Process Explorer:  Depois de usar este você nunca mais se sentirá bem com o gerenciador de tarefas nativo do Windows. O "procexp" mostra os processos em árvore e com os ícones. Ele ainda pode ser configurado para exibir colunas a gosto. É possível visualizar a linha de comando que iniciou o processo, usuário, threads, título da janela e muito mais. Vendo o esquema em árvore é possível finalizar toda a árvore.


Como pode ver na imagem acima, há uma opção de substituir o gerenciador padrão e usar o "procexp". Então ao presionar "Ctrl+Shift+Esc" ele será aberto. Simples assim.

O "procexp" tem ainda um irmão, o Process Monitor. Ele monitora toda a atividade dos processos incluindo arquivos e chaves de registro utilizadas. Porém o volume de dados é muito grande e requer uso dos filtros.


3) TCPview:  Qualquer administrador de rede sabe que o netstat é útil porém confuso. Então por que usar o netstat se existe o "tcpview"? Esta ferramenta mostra todas as conexões abertas no sistema em tempo real, incluindo o executável responsável, estado da conexão, portas, e o volume de dados transportados. Simplesmente fabuloso.





4) Sdelete: Quem vem do Linux já está acostumado a usar o shred para apagar arquivos com segurança, mas o Windows carece de uma ferramenta nativa. Apagar arquivos com segurança, significa que ele será sobrescrito várias vezes antes de ser realmente deletado do incide do sistema de arquivos, tornando impossível a recuperação com softwares específicos. O sdelete vem para suprir a necessidade, mas para melhor uso, já que é uma ferramente de linha de comando é bom copiá-la para uma pasta do path como sugerido acima. Basta usar como um comando qualquer e você poderá deletar arquivos com segurança. Por exemplo :

C:\>sdelete -p 8 teste.txt

SDelete - Secure Delete v1.61
Copyright (C) 1999-2012 Mark Russinovich
Sysinternals - www.sysinternals.com

SDelete is set for 8 passes.

C:\teste.txt...deleted.
1 files found


O parâmetro "-p 8" indica o número de vezes que o arquivo será sobrescrito.

5) Whois: Com este utilitário em mãos você nunca mais vai precisar entrar em sites de consulta de domínios e passar pelos captcha. Basta digitar "Whois dominio.com" e pronto. Lembre-se que que este serviço usa a porta 43, então deve estar liberada  a saída no firewall.

6) PsTools:  O Pstools é um pacote de utilitários de linha de comando muito útil para quem administra uma rede grande e precisa obter informações e executar comandos remotamente. Vale uma artigo apenas para este pacote:

http://technet.microsoft.com/en-us/sysinternals/bb896649

7) Desktops: Este simula 4 áreas de trabalho no explorer. Não funciona tão bem quanto no Linux mas não deixa de ser útil. Assim que executado ele deixa um ícone na área de notificação e pode ser configurado facilmente. O padrão é que alterne entre as áreas de trabalho usando "Alt+Nº", onde é um número de 1 a 4 de acorde com a área de trabalho.



8)Zoomit: Para quem faz apresentações de slides ou em data show com frequência é muito útil dar um zoom para que os espectadores veja melhor o conteúdo. Executando esta ferramenta, com um comando você foca uma área da tela facilmente e regula a ampliação com o mouse. Só usando mesmo para entender como é simples e útil.



9) Blue screen: Que tal ter a infame "Tela azul da morte" como proteção de tela? Baixe o arquivo AQUI e copie para a pasta system32. Então configure-o como protetor de tela.

Existem muitas outras ferramentas no pacote. Vale a pena olhar uma por uma e se acostumar a usá-las. Bom exemplos são o contig, Sync, PsPing, ShellRunas, Autologon, LogonSessions, RootKitRevealer, e por aí vai....