sábado, 25 de abril de 2015

Como ligar seu computador remotamente usando Wake on LAN


Um dia desses, eu estava pensando em como posso ter acesso a vários recursos do meu PC mesmo quando estou fora de casa. Posso ter um servidor de FTP para acessar arquivos, posso ter controle sobre meus downloads, até controle total sobre a máquina via VNC. Basta registrar um DNS, ajeitar os serviços e pronto, controle total!
Mas e se a máquina estiver desligada?
Bom, posso ligar pra casa e pedir para alguém simplesmente ligar meu PC. Tá, mas e se não houver ninguém em casa!? Aí ferrou, né?
Calma que existe solução.

Muitos já devem ter ouvido falar no recurso Wake-on-LAN, que permite disparar um comando pela rede para acordar uma máquina. Um detalhe interessante sobre o recurso é que ele não funciona só quando a máquina está “dormindo” (quando você manda “Suspender”, este é o chamado estado S3), mas funciona também quando ela está “Hibernando” ou realmente desligada (estados S4 e S5, respectivamente).
A única pegadinha, porém, é que para que o recurso funcione, a máquina precisa ter sido ligada pelo menos uma vez. Ou seja, você liga o computador normalmente, usa e manda desligar; depois disso você pode mandar um comando de Wake on LAN que ele vai LIGAR o computador.
Isso acontece porque mesmo desligada (mas ainda alimentada), a máquina está em “stand by” (espera) e ao detectar “pacote mágico” (é sério, o negócio é chamado de “magic package”), o controlador de rede (seja ele onboard ou offboard) pode gerar uma interrupção que acorda a máquina.
Sim, outro detalhe é que para isso funcionar, o suporte a ErP (ou EuP), uma norma europeia que diz que equipamentos em stand by devem consumir menos de 1w, deve estar desabilitado. Eu lembro de ter feito uns testes rápidos com um medidor de consumo quando estava pesquisando sobre o EuP e realmente, com o recurso habilitado o consumo era inferior a 1w; mas com ele desabilitado, o consumo em stand by de um PC típico era algo em torno dos 3w, nada preocupante.
Um último detalhe antes de começarmos, o objetivo desse tutorial é que você possa ligar seu PC a partir de um smartphone (ou tablet, com iOS ou Android) a partir de qualquer lugar (DO MUNDO!!) então vamos acompanhar cada etapa do processo para garantir que o “pacote mágico” chegue até o seu computador e ele ligue.

Começando…
Bom, pra começar precisamos ativar o suporte ao Wake on LAN no BIOS Setup da sua placa mãe, pois a maioria vem com esse recurso desabilitado por padrão. Para isso, na maioria das placas mãe basta ficar apertando freneticamente a tecla Del (Delete) como um louco durante a inicialização do computador, para não perder o breve momento onde ela realmente pode ser acionada. Em algumas placas é a tecla F2 que deve ser abusada.
Uma vez dentro do setup você deve ver uma tela como estas abaixo:



setup-asussetup-msi setup-gb
(para referência, a primeira imagem é de uma placa Asus, a Segunda uma MSI e a terceira uma Gigabyte)
Procure uma tela de “Power Management” ou algo parecido e lá dentro deve haver uma opção como “Wake on LAN” ou “Wake on PME”, ou “Power up by PCI/PCIE”. Na dúvida consulte o manual da sua placa mãe para saber o nome exato e onde fica a opção.
setup-asus-efi
(Placas “chiques” como a minha ASUS P8Z77-V LX permitem capturar um screenshot do setup, assim eu não preciso tirar uma foto toda torta da tela pra mostrar pra vocês…)
O próximo passo é anotar o “MAC Address” da sua placa de rede. Existem vários métodos, o que eu acho mais fácil é abrir uma janela do prompt de comandos (chame a janela de Executar no menu iniciar ou apertando “tecla Windows +R” e digite CMD) e digite IPCONFIG /ALL
executar
Procure o campo “Endereço Físico”:
ipconfig
Anote essa sequência de letras e números em um papel, você vai precisar dela várias vezes.
Se você quiser, já pode testar se o Wake on LAN funciona.
Mas como?
Como o objetivo é acordar a máquina a partir do celular, você já pode baixar o aplicativo que dispara o pacote mágico. No iOS eu uso o “mWOL” (Mocha WOL link para a App Store https://itunes.apple.com/en/app/mocha-wol/id422625778?mt=8 ) e no Android um aplicativo simplesmente chamado Wake on LAN (link para a Play Store https://play.google.com/store/apps/details?id=net.mafro.android.wakeonlan&hl=en ) ambos gratuitos.
A configuração não tem muito mistério, basta colocar o MAC Address (sem os : ou – de separação, o app adiciona sozinho), escolher a porta 9 (normalmente são usadas a porta 9 ou 7, por segurança escolha sempre a mesma) e colocar o IP de broadcast da sua rede local (assumo que você esteja conectado via WiFi mas na mesma rede que o PC que será acordado), que é o último IP da faixa que você usa. Como a maioria dos roteadores usa por padrão o endereço 192.168.1.1, ou 192.168.0.1; o broadcast será 192.168.1.255 ou 192.168.0.255. No app para iOS você nem precisa digitar esse endereço, basta marcar a opção WOL on LAN (como no screenshot abaixo), que ele irá procurar automaticamente o endereço da sua rede local.
appioslocal appandroid255
E para você não ter que desligar o seu PC para testar, existe um aplicativinho que monitora sua rede local. Infelizmente não lembro onde o achei para dar os créditos ao autor, mas o disponibilizo aqui para garantir sua disponibilidade. http://www.doompc.com/download/WakeOnLanMonitor.zip
Basta abrir o programa, escolher que porta ele deve “escutar” e clicar em Start; então mande o pacote através do aplicativo e você deve ter uma tela como essa abaixo:
wolmonitor
Como dá pra ver ali, o tal “pacote mágico” é composto simplesmente por FF FF FF FF FF, seguido pelo MAC Address da placa de rede em questão repetido 16 vezes.
Uma vez verificado que o sistema funciona, você pode experimentar desligar (ou suspender) o PC e acordá-lo com o aplicativo. Pode ir, eu espero :)
Acordando o PC pelas Internets
Certo, então já podemos acordar nosso computador enquanto estamos em casa. Agora como fazer isso através da Internet? Bom, enviar o pacote é fácil. Já temos o aplicativo, basta descobrir o IP da sua conexão, desconectar do WiFi (ficando apenas com a conexão de dados do celular) e mandar o pacote.
Descobrir o IP da conexão é fácil, também há vários métodos, um dos mais simples é acessar o site www.meuip.net
Óbvio que anotar o seu endereço IP, além de pouco prático, pode ser inútil caso ele mude, já que assim como eu, você deve ter uma conexão de IP dinâmico.
O ideal é registrar um endereço com um nome fácil de lembrar e arranjar um jeito de associar seu IP a esse endereço. Para isso existem vários serviços de DNS dinâmico, inclusive gratuitos. Um dos mais conhecidos, e o que vou usar nesse exemplo, é o dyndns.
Crie uma conta (gratuita) em https://account.dyn.com/entrance/ , então vá em My Hosts -> Add Host Services (ou clique aqui para ir direto à página: https://account.dyn.com/dns/dyndns/add.html ).
hostsdyndns
Digite o nome desejado no campo de hostname, escolha um domínio (eu prefiro o dyndns.org porque é o mais fácil de lembrar), de modo que o seu endereço será hostname.dominio (o do exemplo abaixo será “meuendereco.dyndns.org”) e no campo IP Address em vez de digitar o seu IP, basta clicar no link logo abaixo (Your current location’s IP address is xxx.xxx.xxx.xxx) que o site preenche o campo pra você.
criandohost
Pronto, agora você já tem um endereço nas Internets! Mas para garantir que o pacote vai chegar até sua máquina usando esse endereço precisamos acertar mais dois detalhes:
1-      Arranjar um jeito de manter esse cadastro atualizado, pois se seu modem/roteador for reiniciado é bem provável que seu IP mude.
2-      Configurar o seu roteador para redirecionar o pacote recebido da Internet para a sua máquina na rede local.
Bom, o primeiro é relativamente fácil. A maioria dos roteadores pode fazer isso automaticamente. Basta você cadastrar os dados da sua conta no dyndns que ele mantém seu IP vinculado com o endereço registrado.
roteadordyndns
(Exemplo de configuração do dyndns (opção System Tools -> DDNS) no meu poderoso roteador Tenda.)
Porém, eu observei um problema com essa solução. A maioria dos roteadores (o meu inclusive) fica atualizando o endereço desnecessariamente em intervalos curtos e regulares (o meu faz a cada 15 minutos), em vez de verificar e só atualizar se o IP tiver mudado. E o pessoal do dyndns não gosta disso… Depois de um tempo eu recebi um email dizendo que se eu continuasse fazendo isso, minha conta (gratuita) seria banida…
As contas pagas não tem essa limitação. Mas como não estou muito disposto a pagar por esse serviço no momento, preciso de uma alternativa. Lembrando que nem todos os roteadores tem esse comportamento, mas se for o seu caso, segue a solução que eu adotei:
A própria Dyn(DNS) oferece um aplicativo (disponível para Windows, Linux e OSX) que pode fazer isso (de forma inteligente) pra você. Está disponível em: http://dyn.com/support/clients/
Coloque seu nome de usuário e senha, ele vai mostrar seus endereços registrados, marque qual você quer que ele autentique. Marque também a opção para que o programa seja executado sempre que o seu PC iniciar e pronto, com isso você não deve ter dores de cabeça com mudanças de IP, nem com a sua conta.
programadyn
Certo, agora vamos configurar o seu roteador para repassar o pacote mágico vindo da Internet para o seu computador.
Cada roteador é diferente e por mais exemplos que eu dê, sempre vai haver algum mais ou menos complicado. Sem o caso de alguns roteadores disponibilizados pelo provedor, que não permitem praticamente nenhuma configuração…
Enfim, vou mostrar como fazer isso no meu Tenda e procurar explicar da maneira mais completa possível para que você consiga fazer no seu (mesmo que seja diferente). Na dúvida, tenha a mão o manual do seu roteador e procure onde ficam opções semelhantes às que eu indicar.
Primeiro precisamos acessar a interface de configuração do roteador. Na grande maioria dos casos basta abrir um navegador e acessar o seu endereço na rede local (a maioria usa 192.168.1.1) e digitar um login para entrar. Normalmente o nome de usuário é “admin” e a senha também é “admin” ou basta o usuário admin e deixar a senha em branco, etc. Verifique no manual do seu roteador. Geralmente o roteador possui uma etiqueta em baixo com essas informações.
gateway
Para descobrir o endereço dele, você também pode apelar para o ipconfig (através do prompt de comando, como antes) e basta procurar o endereço do “Gateway Padrão”.
Uma vez dentro do painel de configuração, precisamos encontrar onde “fixar” um endereço IP da rede local para a sua placa de rede. Assim mesmo que seu computador esteja configurado para “pegar endereço IP automaticamente” (por DHCP) ele sempre pegará o mesmo endereço; e outro computador da rede nunca usará esse mesmo endereço.
Procure por uma opção parecida com “IP Binding”, costuma ficar perto da configuração do “Servidor DHCP”. Lá você pode associar (bind) um endereço IP a um MAC Address, no caso o da sua placa de rede, que você anotou antes.
Exemplo:
ipbinding
Aqui realmente não tenho como ajudar muito, pois há muitas variações. Dependendo do seu roteador, procure por algo como “retenção de endereço IP” ou “reservar endereço IP”, algo assim. No exemplo ali (em inglês), a opção está em DHCP Server -> DHCP List & Binding.
Escolha um endereço e lembre dele, pois agora vamos redirecionar as portas usadas para mandar o pacote Wake on LAN.
Ainda no painel de configuração do seu roteador, procure pela opção de “Servidores Virtuais” (Virtual Servers) ou Redirecionamento de Portas (Port Forwarding), costuma ficar perto do Firewall.
Então crie uma regra indicando que a porta 7 ou 9 (é mais comum o uso da porta 9 para isso) deve ser encaminhada para o IP que você reservou para o seu computador (na parte de IP Binding). O protocolo usado para esse comando é o UDP, mas na dúvida eu permiti o redirecionamento de ambos (UDP e TCP, opção Both no tipo de protocolo).
virtualserver
(Normalmente você tem opção de definir um intervalo (range) de portas em cada regra. Você pode colocar a mesma porta em ambos campos, ou definir a porta inicial e a final (Start Port e End Port) e todo esse intervalo será coberto (redirecionado) por essa regra. No exemplo eu coloquei no intervalo as portas 7 a 9.)
Pronto, agora basta aplicar, salvar e (geralmente) reiniciar o roteador. Procure por uma opção de Save and Restart no painel de configuração do roteador (quantas vezes eu já mandei o roteador reiniciar sem ter salvado as configurações primeiro e depois tive que fazer tudo de novo…).
Testando!
Bom, se fizemos tudo corretamente, o recurso já deve estar funcionando, só precisamos testar!
Abra novamente o Wake on Lan Monitor, escolha a porta 9. Pegue seu celular, certifique-se que você não está conectado à sua rede local pelo WiFi e que sua conexão de dados (4G, 3G, meio G…) esteja funcionando. Nas configurações do aplicativo, coloque o endereço que você registrou no dyndns, o MAC Address, a porta 9 e (no caso do app para iOS), desmarque a opção de WOL on LAN.
appiosnet appandroidnet
Se tudo der certo, o Wake on Lan Monitor deve exibir algo assim: observe que o pacote vem de um endereço diferente do usado na sua rede local (como 192.168…). Se você não quiser usar o celular pra isso, ou não puder na hora; há outra opção: essa página permite enviar o pacote: http://www.dslreports.com/wakeup
wakeup
Feito isso é só lembrar de configurar os serviços que você quiser acessar remotamente, como servidor de arquivos, VNC, etc. De redirecionar as respectivas portas para o IP do seu computador, e para acessar basta digitar o endereço do dyndns, dois pontos e a porta redirecionada. Exemplo. ftp://meuendereco.dyndns.org:21 (para um servidor de FTP) ou meuendereco.dyndns.org:1234 (para um VNC, por exemplo, pode ser sem HTTP:// ou FTP://)
Bom, pessoal. É isso, espero que este guia tenha ajudado. Comentários ou dúvidas podem ser feitos abaixo, ou no fórum: www.doompc.com/forum

Creditos: http://www.doompc.com/2013/07/03/como-ligar-seu-computador-remotamente-usando-wake-on-lan/

quarta-feira, 25 de março de 2015

Iptables – Bloqueando por String




As vezes precisamos bloquear um site que tem inumeros ip’s , e que esses ip’s podem mudar com o passar do tempo por que a empresa tem um range enorme. A opção mais sensata seria usar um proxy para fazer o serviço. Mas peguei um caso especifico que  o meu cliente tinha programas que conectavam em webservices e os mesmos programas não sabiam lidar com proxy, simplesmente davam todos os erros possiveis mas não estabeleciam conexão com o webservice, e não havia nenhum suporte para resolver isso do desenvolvedor dos softwares. A solução que encontrei foi o bloqueio no iptables por string. Dessa forma ele vai ler a string referente a url bloqueando o site no firewall. Segue abaixo um exemplo de como fazer isso, considerando que eth1 é a placa da sua rede interna:

Bloqueando um site:
iptables -I FORWARD -i eth0 -m string --algo bm --string 'youtube.com' -j DROP

Liberando para um ip especifico:

 iptables -A FORWARD -i eth0 -s 192.168.1.100 -m string --algo bm --string 'youtube.com' -j ACCEPT


sexta-feira, 30 de janeiro de 2015

Sistema de arquivo de partições HD no Linux


Introdução

Todos os arquivos no linux estão dispostos hierarquicamente em forma de árvore, sendo a raiz o diretório “/” e todas as partições e dispositivos montados em nosso computador também fazem parte dessa árvore. Sabemos que cada partição tem um tipo e também um possível sistema de arquivos, que pode ser um dos mais diversos, como EXT3, EXT4, FAT32, etc. Esses dias precisei descobrir o sistema de arquivos de uma partição, e por algum motivo não lembrava um modo de fazer isso. Depois de alguns minutos, lembrei do comando mount e resolvi o problema. Porém, mesmo assim fiz uma pesquisa para descobrir outros modos.
Nesse post iremos aprender quatro maneiras de se obter o tipo de e o sistema de arquivos de uma partição.

Solução 1

O comando mount nos mostra o sistema de arquivos em cada partição, além de outras informações:
 
# mount
...
...
/dev/sdb1 on /media/XISTO type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=cp437,iocharset=ascii,shortname=mixed,showexec,utf8,errors=remount-ro,uhelper=udisks)
/dev/sda6 on /home/daemonio/usb type ext4 (rw,relatime,seclabel,data=ordered)

Solução 2

Em [1], vemos que o comando df com a opção -T também pode ser utilizado:
 
$ df -T
Filesystem     Type     1K-blocks     Used Available Use% Mounted on
...
...
/dev/sdb1      vfat        994832   694500    300332  70% /media/pendrive
/dev/sda6      ext4      38448276  2002272  34492904   6% /home/daemonio/usb
A coluna Type foi acrescentada pela opção -T.

Solução 3

Ainda em [1], temos também o comando file para solucionar essa tarefa:
 
[root@daemonio tmp]# file -s /dev/sda3
/dev/sda3: Linux rev 1.0 ext4 filesystem data, ...

Solução 4

Para desenferrujar nosso lado hacking, vamos encontrar o tipo de uma partição primária usando o padrão DOS de partição. O primeiro setor do disco contém a MBR, que nada mais é que um conjunto de informações que inclui a tabela de partições e o código inicial do gerenciador de boot do sistema operacional. Nos últimos 64 bytes da MBR, temos a tabela de partições:
 
# dd if=/dev/sda count=1 | xxd
 
0000000: eb63 908e d88e d0bc 007c 89e6 0657 8ec0  .c.......|...W..
0000010: fbfc bf00 06b9 0001 f3a5 ea1f 0600 0052  ...............R
0000020: 52b4 41bb aa55 31c9 30f6 f9cd 1372 1381  R.A..U1.0....r..
0000030: fb55 aa75 0dd1 e973 0966 c706 8d06 b442  .U.u...s.f.....B
...
...
00001b0: 0000 0000 0000 0000 7480 07c8 0000 0020  ........t...... 
00001c0: 2100 06fe ffff 0008 0000 0040 9002 00fe  !..........@....
00001d0: ffff 83fe ffff 0048 9002 0000 6a18 80fe  .......H....j...
00001e0: ffff 83fe ffff 0048 fa1a 0080 a903 00fe  .......H........
00001f0: ffff 05fe ffff 00c8 a31e b022 9f06 55aa  ..........."..U.
 
As últimas linhas da saída representam a tabela de partições. Como nesse modelo só podemos ter 4 partições primárias, o início de cada uma delas foi marcado por um negrito. Esse número em negrito é a flag indicando se a partição é de boot (valor 0x80) ou não (valor 0x00).
Por [2] e [3], vemos que o tipo da partição se encontra no quinto byte (em itálico) desde o início do negrito. Usando esse byte como índice na tabela de tipos [2], encontramos o tipo de cada partição no nosso disco:
 
+---------+--------------------+
| Número  |  Tipo da Partição  |
+---------+--------------------+
|  0x05   |      Estendida     |
+---------+--------------------+
|  0x06   |        FAT16       |
+---------+--------------------+
|  0x82   |     Linux Swap     |
+---------+--------------------+
|  0x83   |        Linux       |
+---------+--------------------+

No meu caso, eu tenho duas partições primárias no formato Linux, uma FAT16 e outra estendida. Aqui, não irei mostrar como obter o tipo das partições lógicas, ou seja, aquelas contidas na partição estendida. Para mais detalhes veja [2] e [3].
Bem, essa solução foi para mostrar que conhecendo detalhes internos das coisas, podemos obter informações muito interessantes. Esses pequenos hackings são muito úteis na área de forense digital, como podemos ver em [2].

 

Conclusão


Existem vários programas e métodos para se descobrir o tipo de uma partição e o sistema de arquivos dela. Hoje vimos como utilizar os comandos mount, df e file para resolver esse problema. Aprendemos também a ler diretamente a MBR para se obter o tipo de uma partição.

Referências


Retirado do Blog do Autor: -


[1] Linux how to determine the file system type by NIXCRAFT (Acessado em: Novembro/2012)
http://www.cyberciti.biz/faq/linux-how-to-determine-find-out-file-system-type/
[2] Partição by wikipedia (Acessado em: Novembro/2012)
http://pt.wikipedia.org/wiki/Parti%C3%A7%C3%A3o
[3] PC-Based Partitions by Priscilla Oppenheimer (Acessado em: Novembro/2012)
http://www.priscilla.com/Courses/ComputerForensics/pdfslides/01-PC_Partitions.pdf