Posts Tagged ‘ Desenvolvimento

Redes, sub-redes, máscaras, CIDR – Como fica tudo isso com o IPv6? [Parte 1]

Todo mundo já sabe e tem ouvido falar a um bom tempo sobre o fim dos endereços IPv4 e o inicio da implantação dos novíssimos IPv6.

Essa postagem seria um breve texto que idealizei na tarde da última terça-feira enquanto ensinava alguns tópicos à um funcionário. Como o texto começou à ficar grande, resolvi quebrar em partes para poder garantir uma melhor qualidade nos textos.

Antes de qualquer explicação, o que é IPv4 e o que é IPv6 e quem são os tais IANA, ICANN e LACNIC?

Você que clicou no link encurtado ou simplesmente chegou até aqui pelo Google ou RSS talvez não saiba o fluxo de informações gigantesco que foi desencadeado e a complexidade dos caminhos por onde seus dados passaram.

A Internet que conhecemos hoje, nasceu no final do século passado como resultado da interligação de redes de computadores do governo norte-americano em conjunto com alguns serviços criados pelo CERN (sim, aquele que também fez e mantem o LHC).

Quando a grande rede foi disponibilizada para o mundo, alguns órgãos foram criados para regulamentar a utilização da rede. Atualmente temos uma cadeia de autoridades que regem as regras que seguimos ou tentamos burlar. São eles:

  • ICANN – É uma instituição sem fins lucrativos que gere a alocação de endereços IPs, administra os tão famosos servidores DNS dos TLDs (Top Level Domains) e também faz a atribuição dos sufixos DNS e códigos de país.
  • IANA – Localizada abaixo do ICANN é quem atua na prática para gerenciar as distribuições dos blocos de endereços IP ao redor do mundo. A IANA não distribui blocos diretamente à um país e sim à uma região que é gerida por um RIR. A IANA tem como obrigação notificar os RIRs e os NICs sobre as novas alocações para que estes possam fazer a correta manutenção de suas redes e roteadores.
  • RIRs – Os RIRs são instituições que fazem a distribuição por países, o RIR responsável pelo Brasil é o LACNIC, que gerencia as alocações de endereços para toda a América Latina. Os RIRs tem também a responsabilidade de notificar provedores e usuários avançados sobre alterações nas redes. O LACNIC e os demais RIRs tem também o banco de dados que é utilizado nas consultas do tipo WHOIS.

Lista de RIRs espalhados no mundo.

    • Ainda abaixo dos RIRs existem as instituições nacionais, que fazem a distribuição dos domínios para sites e provedores. Dentro do Brasil temos por exemplo o Registro.br que faz a venda de domínios e também o NIC.br que coordena os trabalhos do Registro.br e outros órgãos. O NIC.br é um braço executivo do CGI.br que é o Comitê Gestor da Internet no Brasil.

Agora que você já sabe que existem órgãos que distribuem endereços IP em blocos, vamos entender como funciona o IPv4 apenas gerencialmente.

Os endereços IPv4 são os endereços que conhecemos hoje em dia e tem o característico formato xxx.xxx.xxx.xxx. Esses 4 conjuntos com 3 números é a representação decimal de quatro conjuntos de 8bits, cada conjunto é chamado de octeto, um endereço 200.201.202.203 poderia ser representado em forma binária por 11001000.11001001.11001010.11001011 ou em código Hexadecimal como C8.C9.CA.CB. Com isso temos o limite de cada octeto limitado à 25510 ou 111111112 que também é igual à FF16. Esses limites existem pois esgotam todas as combinações possíveis com os binários, o que nos da 256 números diferentes (0 a 255). Se fizermos um cálculo simples para saber qual o total de combinações possíveis com os quatro octetos, teremos “apenas” 4.294.967.296 endereços, ou seja, aproximadamente 4,2×109. Apenas para fins de comparação o IPv6 suporta 3,4×1038 endereços, segundo o ipv6.br isso representa 66.557.079.334.886.694.389 de endereços por cm2 na superfície da Terra.

ip_estatisticas

Quando a Internet era uma rede apenas para fins educacionais e tinha cerca de 100 computadores interligados, não havia uma preocupação de tamanha expansão que começou à ocorrer por vota de 1993. Para distribuir os generosos endereços foram criados 3 níveis de redes, aqui já vamos entender o conceito de rede e sub-rede. As redes foram divididas em 3 classes que foram nomeadas de A a C, veja tabela abaixo:

Classe Primeiro Octeto Máscara Nº de Redes Hosts por Rede
A De 0 a 127 255.0.0.0 128 16.777.214
B De 128 a 191 255.255.0.0 16.384 65.534
C De 192 a 223 255.255.255.0 2.097.152 254

Essas classes eram distribuídas às empresas e universidades de acordo com seu tamanho, a IBM por exemplo, que é uma gigante iria receber uma rede Classe A, empresas médias, redes Classe B e enfim, empresas pequenas, teriam as redes Classe C. Com o número de redes limitados foram criados também grupos de endereço aos quais chamamos de IPs Privados, os IPs listados acima são todos públicos, ou seja, são acessíveis diretamente de qualquer lugar do mundo. Os IPs privados estão limitados à apenas três grupos. Veja tabela abaixo:

Redes Range Máscara Nº de IPs Maior Bloco
1 Classe A 10.0.0.0 a 10.255.255.255 255.0.0.0 16,777,216

10.0.0.0/8

16 Classe B 172.16.0.0 a 172.31.255.255 255.255.0.0 1,048,576

172.16.0.0/12

256 Classe C De 192 a 223 255.255.255.0 65,536 192.168.0.0/16

Para as redes criadas com IPs privados poderem ter acesso à uma rede de IPs públicos é necessário utilizar-se de um recurso chamado NAT (Network Address Tranlation). O NAT nada mais é do que um redirecionamento baseado em portas/endereços que é gerenciado por um gateway (roteador ou firewall, por exemplo). Vamos tentar exemplificar da seguinte forma:

Eu possuo um roteador Wireless em casa que está configurado para distribuir os endereços da rede 192.168.1.0/24 (ou se vocês preferirem, com máscara 255.255.255.0). Essa é uma rede Classe C e com máscara /24 (que você já está utilizando os 24 bits dos 3 primeiros octetos, o que demonstra o 255.255.255.0 ou em Hexa: FF.FF.FF.00). O Servidor desse blog está dentro da rede do meu provedor que possui um bloco de endereços públicos devidamente alocado pelo LACNIC, o IP atual do meu servidor web é 189.38.80.149.

Meu roteador Wireless é meu gateway nesse instante, ele está com o endereço IP 192.168.1.1 e meu notebook com o endereço IP 192.168.1.101, ao receber solicitações de qualquer pacote que não é da rede 192.168.1.0/24 o roteador encaminha então as informações através do NAT para outra rede, que é a rede do modem do meu NetVirtua e esse modem é um host de uma rede maior, à qual ele tem apenas um endereço IP, que nesse momento é 187.3.90.143. Esse sim conhece redes externas e então repassa a informação para um roteador que repassa pra outro até chegar enfim ao destino. Agora você já sabe melhor o que é o tal tracert ou traceroute.

Clique aqui para saber seu IP público de internet.

Com a existência então dos endereços de rede privados, podemos ter diversas redes 192.168.1.0/24 espalhadas pelo mundo e cada uma delas terá apenas um endereço público de internet. Ai surge uma nova questão, como acessar um dispositivo com o IP 192.168.1.123 de uma rede privada, estando em outra rede privada? Lembra do NAT? Ele funciona aqui também! Dentro de roteadores e firewalls podemos criar regras que encaminham pacotes que chegam através da rede pública, vamos à mais um exemplo:

Dentro da mesma rede que citei acima, tenho um computador que fica com o IP 192.168.1.2, quando quero acessar esse computador e estou fora da minha rede doméstica eu tendo me conectar no meu IP de internet e escolho uma porta específica, quando meu roteador recebe uma conexão na porta X ele sabe que aquilo se refere ao computador 192.168.1.2 e então faz o NAT para que eu chegue até o PC.

Com essa forma de utilização, não foi mais necessário fornecer IPs de internet diretamente aos computadores e com isso o IANA conseguiu adiar o fim do protocolo IPv4 que se fosse utilizado sem NAT teria esgotado todos os endereços a muito tempo.

ip_fim_do_mundo

Atualmente, com cada vez mais dispositivos ligados à internet e com cada vez mais casas e empresas com seus links, é estimado o fim dos endereços IPv4 para 2012.

A criação de encaminhamentos (NAT) pode ser feita de outra forma além da utilização de portas como citei, você pode criar um filtro que verifica o IP de origem da conexão e então faça um redirecionamento para dentro da rede. Vamos à mais um exemplo:

Eu posso configurar em meu roteador que todas as conexões vindas de um determinado IP de internet, por exemplo, 200.201.202.203 seja direcionado para o IP 192.168.1.5 da minha rede interna, com isso qualquer outro IP que tentar se conectar em meu IP público irá para um lugar e apenas quem sair da rede à qual pertence o endereço citado irá passar pelo meu gateway e chegar ao PC.

Uma das táticas utilizadas pra poder fornecer pequenos pedaços de redes para provedores e grandes empresas foi a criação de sub-redes, até então – mesmo com a utilização de NAT – as redes eram divididas nas Classes A, B e C e isso limitava muito a distribuição dos endereços.

Uma sub-rede é um pedacinho de uma rede maior e que utiliza uma máscara diferenciada para aquela classe, mais um exemplo:

Um provedor requisita um bloco de endereços para a entidade responsável em seu país, esse provedor não precisa de muitos endereços, vamos supor aqui que sejam apenas 200 IPs. A entidade de seu país entretanto é detentora de uma rede completa de Classe A que aqui iremos simular como 20.0.0.0/8 ou seja, todos os IPs entre 20.0.0.0 e 20.255.255.255. Para dividir isso o provedor pode ficar com apenas uma sub-rede da entidade local que pode ser 20.0.1.0/24 que abrange todos os IPs entre 20.0.1.0 até 20.0.1.255 e a máscara da sua sub-rede será 255.255.255.0, diferentemente de 255.0.0.0 que é o comum em redes Classe A.

Na próxima postagem irei abordar melhor como funcionam as máscaras de rede e fazer uma introdução ao IPv6.

Esse texto foi totalmente feito por mim e com base em informações retiradas da Wikipédia e dos sites Registro.br e IPv6.br já devidamente linkados no texto.

[]’s

Creative Commons License

Print

SME Server–Servidor Linux All-In-One para Pequenas e Médias Empresas

Existem empresas de pequeno e médio porte onde a área de TI por questões culturais é completamente esquecida. São empresas com poucos funcionários que utilizam computadores ou em que uma possível parada na rede não irá parar toda a empresa (difícil imaginar um ambiente corporativo assim nos dias atuais não é?).

No mundo das fábricas de pequeno porte (que existem aos montes no Brasil todo, por exemplo) é bem comum encontrar computadores velhos, com Windows Jack Sparrow Edition e ninguém para cuidar da área de TI.

tux

Com alvo esse tipo de empresa, foi criada a distribuição SME Server que também é conhecida como “e-smith”. Totalmente baseado no CentOS o SME Server está chegando em sua oitava versão que ainda está em fase beta e é baseada já na versão 5 do CentOS, o que traz além de estabilidade, uma chuva de atualizações em seus pacotes, ficando mais perto das versões atuais.

Eu conheci o SME Server há um ano em uma empresa que estava trabalhando em sua customização para implantação em diversos clientes, foi uma boa experiência mas no final descobrimos que para o objetivo do projeto e com a equipe envolvida, o SME não era a melhor solução.

Deixando essa apresentação para trás, o SME ficou guardado como uma solução mais simples, que deve ser usada como vem e com o mínimo de alterações possíveis, afim de evitar problemas com atualizações (a distribuição tem também repositórios específicos, além de poder contar com os repositórios tradicionais do CentOS) e até mesmo com configurações automáticas (o que é um dos fortes do SME Server).

Um dos detalhes que mais me chamaram a atenção no SME Server é o painel de gerenciamento, totalmente configurável via WEB Browser e com uma interface simples e intuitiva (na maioria dos casos).

image

Entre as diversas ferramentas presentes, já com configurações básicas prontas e scripts que tornam sua instalação plug & play, temos um pacote básico que pode atender à qualquer empresa que necessite de uma rede com serviços básicos. A lista abaixo mostra alguns dos principais aplicativos disponíveis:

  • SAMBA – Servidor de domínio, compartilhamento de pastas e impressoras. Aqui vale lembrar que há uma integração do Open LDAP, mas esta fica totalmente transparente para quem usa apenas a interface WEB, pois essa roda scripts que fazem tudo o que é necessário em ambos os serviços desde a criação de um novo usuário, até a adição de permissões detalhadas em pastas e arquivos.
  • Apache 2, PHP5 e MySQL 4 – Com cada vez mais mini-aplicativos desenvolvidos em PHP e que podem ajudar pequenas empresas, nada melhor do que um LAMP completamente integrado já desde a instalação do S.O. e com também todo o gerenciamento através de sua interface WEB. Além de PHP o servidor já conta com bibliotecas Phyton e Perl.
  • PPTPD e OpenVPN – Servidores de VPN que são fáceis de configurar e oferecem bastante segurança para esse nível de empresa.
  • Qmail e Horde – Serviço interno de email que conta com toda a qualidade e robustez do Qmail, junto ao Horde, uma das mais famosas e utilizadas interfaces de webmail que existem.

Um detalhe que merece destaque é o software de Backup do SME Server, que pode ser utilizado em conjunto com o excelente BackupPC, como sempre, tudo via web.

O instalador do SME Server é o Anaconda, que também é utilizado no CentOS, Fedora e RedHat, com a interface traduzida para nossa linguagem, fica mais fácil de se trabalhar (ainda mais quando estamos falando de pessoas com pouca familiaridade com Linux).

image

As perguntas feitas pelo instalador não são das mais amigáveis, mas com um bom tutorial em mãos muitos conseguem montar um pequeno server com o SME. Provavelmente no futuro eu crie uma nova postagem explicando passo-a-passo como instalar essa distribuição.

As configurações iniciais do SME Server são feitas através de um Wizard que é aberto logo no final da instalação, nele você já escolhe opões como DHCP, DNS, ativa ou desativa Proxy e etc. É possível também definir um serviço de DNS Dinâmico.

Bom, resumindo podemos dizer que o SME Server cumpre bem o papel de pequeno servidor para pequenos negócios onde não existe uma pessoa ou poucas pessoas para gerenciar recursos de rede.

Em breve devo colocar maiores informações sobre como instalar e configurar algumas funções no SME.

Para saber mais sobre o projeto e fazer o download da ISO de instalação, visite aqui.

[]’s

Creative Commons License

Print

SQL Injection? Aqui não!

Bom, aqui não é bem “aqui”. Aqui é logo ali numa outra aplicação nesse mesmo servidor mas fora do Word Press. Não entendeu? Não tem problema, isso não tem importância mesmo :)

cadeado

SQL Injection para quem não sabe (ou Injeção de SQL em português) é uma técnica onde um usuário mal intencionado ou um invasor pode se aproveitar de falhas na programação de um sistema para ter elevação de permissões ou até mesmo acesso à dados confidenciais e direito de exclusão de informações.

Como funciona

Um exemplo clássico de SQL Injection é conseguir burlar uma página de login ou de verificação de nível de acesso acrescentando uma condição sempre válida na execução de querys, por exemplo, eu tenho um sistema que para validar o login do usuário executa uma query no banco de dados da seguinte forma:

SELECT login, senha FROM users WHERE login = ‘login’ AND senha = MD5(‘senha’);

O código acima não ilustra uma linguagem especifica, apenas SQL ANSI e uma chamada à função MD5 para verificação da senha fica criptografada no banco de dados com o mesmo algoritmo. Com isso eu faço um “if” que verifica se a consulta trouxe um resultado fazendo com que uma flag se transforme em “true” e libere acesso.

Hora da Maldade

Agora que já sabemos como funciona o sistema normalmente, imaginamos se onde está posicionada a variável “login” vem o seguinte código:

‘ OR 1=1; –

Já sacou a jogada? Ainda não? Vamos montar a string completa:

SELECT login, senha FROM users WHERE login = ‘’ OR 1=1; –’ AND senha = MD5(‘senha’);

Deu pra entender agora? Com aquele código no login conseguimos fechar o espaço de igualdade do login e colocar um OR 1=1 que sempre irá retornar true, ou seja, acesso liberado ao sistema. Para evitar erro na execução da consulta colocamos os “–” que simbolizam um comentário.

Efeitos

Talvez apenas o exemplo citado acima não seja o suficiente para invadir um sistema que não tem proteção, mas em geral é! E o pior, isso abre precedentes para a execução de mais código, por exemplo:

‘ DELETE FROM users; –

Valem também consultas para obter dados de outros usuários ou até mesmo inserir informações, já que se você tiver nomes de tabelas (que geralmente não são muito criativos) você pode fazer um DELETE, nada te impede de fazer um INSERT :)

Como Evitar

Evitar uma injeção de SQL não é tarefa complicada nem que exige avançados conhecimentos de linguagens de programação. O simples trecho de código em PHP abaixo já serve para evitar dois dos caracteres mais perigosos, igualdade e aspa simples:

$usuario = str_replace("’", "", $_POST['username']);
$usuario = str_replace("="", "", $usuario);

Simples assim! Localize todas as aspas simples da String e remova e depois sinais de igualdade e remova! Pronto, seus dados estão prontos para serem usados e direcionados para a query.

Bom, era uma dica rápida, espero que possa ajudar quem está começando e ainda não tem muita noção de segurança em sistemas.

[]’s

Creative Commons License

Print