Este artigo tem o objetivo de apresentar a ferramenta Iptables, explicando um pouco sobre seu funcionamento e mostrando alguns exemplos da utilização deste firewall, bem como alguns de seus módulos. Em seguida detalharemos a importância, a instalação e mostraremos alguns exemplos de uso de um dos módulos existentes para o Iptables: o Layer7.
Uma característica que confere muito poder ao Iptables é a expansibilidade, ou seja, podem ser criados módulos que lhe acrescentem funcionalidades, como filtragem por protocolo de camada de aplicação.
Não é o objetivo deste tutorial explicar como instalar/utilizar módulos além do Layer7. Contudo, iremos mostrar alguns exemplos de utilização de alguns módulos, para ilustrarmos ao mesmo tempo uma idéia do poder adicional disponível quando utilizamos o Iptables, e o grande poder do módulo Layer7, cuja instalação e utilização detalharemos nas próximas sessões.
Bem, assumindo que o módulo esteja instalado em sua máquina, a opção utilizada para especificar que utilizaremos este módulo é -m. Temos, por exemplo, o módulo state, que permite fazer filtragens baseadas no estado de um pacote. Se quisermos aceitar todos os pacotes que pertençam a conexões previamente estabelecidas, temos:
# iptables -A INPUT -m state --state ESTABILISHED -j ACCEPT
Podemos ainda aceitar todos os pacotes relacionados a conexões existentes. Isso é útil, por exemplo, em serviços que inicialmente utilizam uma porta, mas realizam parte da comunicação através de outras portas, como por exemplo, o FTP. Podemos usar então o comando:
# iptables -A INPUT -m state --state RELATED -j ACCEPT
Para bloquear pacotes TCP inválidos:
# iptables -A INPUT -p tcp -m state --state INVALID -j DROP
Outro modulo interessante é o limit. Com ele, podemos limitar o número de pacotes que passam por uma determinada chain durante um espaço de tempo. Por exemplo, podemos evitar o ping da morte (ataque de negação de serviço) limitando o número de pacotes icmp recebidos em até 10 por segundo. Para isso, basta utilizar o comando:
Todos os módulos mostrados aqui são de grande utilidade. Mas, e se eu quiser bloquear o uso de MSN na minha rede? E para bloquear serviço Web? Bom, existem soluções que sugerem o bloqueio de MSN, por exemplo, bloqueando todos os pacotes com destino aos servidores MSN.
No entanto, para fazer isso, devemos acrescentar inúmeras regras ao firewall, o que consome processamento, acarretando lentidão na rede. Se forem utilizados os nomes dos servidores nestas regras, a cada pacote que passa pela chain, será feita uma consulta DNS. Ok, mas se o processamento de regras já é lento, imagina uma requisição DNS! Ah, mas podemos usar os IPs dos servidores... Sim, mas e se algum mudar? Quantos IPs estão distribuídos para estes servidores? Certamente muitos... E o pior: o Messenger pode ser esperto o suficiente para mudar o endereço de autenticação. Logo, a alternativa é inviável.
E quanto a bloquear serviços Web? Bloquear a porta 80? Basta oferecer o serviço em outra porta. E quanto a aplicações P2P cujos endereços IP não são fixos e nem as portas?
Assim, é inquestionável a utilidade de um mecanismo de filtragem que atue diretamente na camada de aplicação, bloqueando diretamente o protocolo http, por exemplo, ou o protocolo usado por messengers. É exatamente isso que faz o Layer 7, cuja instalação é detalhada a seguir.
[2] Comentário enviado por renato_pacheco em 19/11/2008 - 17:02h
Excelente artigo! Tinha um professor meu q ele não conseguia bloquear o skype pelo Windows Server 2003. Eu acho q ele vai t q mudar pra um server Linux agora. Huiahiuahuiaha!!
[3] Comentário enviado por aolb em 19/11/2008 - 18:57h
renato_pacheco valeu pela força... espero que o tutorial possa ajudar!
brunocontin foi excelente sua pergunta, pois aproveito para colocar um link que não pus no tutorial. Este link é uma lista de compatibilidade do Layer 7 com as versões do kernel. Note que eu fiz o tutorial com a última versão que comprovadamente compila e funciona. De qualquer forma, segue o link para que você (e os demais que tenham a mesma dúvida) verifique de acordo com a sua versão.
[5] Comentário enviado por jpaulo_farias em 25/11/2008 - 15:45h
Parabens pelo artigo, eu ja tenho o layer 7 funcionando normal esta bloqueando perfeitamente, so que eu estou tendo um problema, espero que vc pode me ajudar.
Aqui em baixo esta as minhas regras que eu to usando, eu to bloqueando geral na o MSN e o SKYPE e to liberando pra alguns ips e esta funcionando normal so que esta bloqueando os aplicativos do telnet smtp e ftp, e ja fiz de tudo e nao consigo libera telnet e o ftp o telnet, ja o smtp funcionou depois que eu adicionei essa linha $IPT -A FORWARD -m layer7 --l7proto smtp -j ACCEPT, eu tentei fazer a mesma coisa com o ftp e o telnet + nao funcionou.
Isso acontece quando eu blqoueio o skype, ai para de funciona o telnet e o ftp, vc pode me ajudar. se abaixo comandos do layer 7 que eu estou usando.
#===========================================
#echo "Liberando Messeger e o Skype por IP ............................. OK"
#===========================================
$IPT -t filter -A FORWARD -s 10.46.22.248/32 -m layer7 --l7proto msnmessenger -j ACCEPT
$IPT -t filter -A FORWARD -d 10.46.22.248/32 -m layer7 --l7proto msnmessenger -j ACCEPT
[7] Comentário enviado por carbony em 03/12/2008 - 09:10h
valeu pelo tutorial,
um duvida,
consegui rodar as regras iptable e layer7, bloqueou msn,emule, etc etc.
so que no prompt do root , ficando aparecendo essa mensagem na tela
kernel: layer7: couldn't get conntrack.
kernel: layer7: couldn't get conntrack.
kernel: layer7: couldn't get conntrack.
kernel: layer7: couldn't get conntrack.
kernel: layer7: couldn't get conntrack.
alguem saberia me dizer se isso e um error , e como eu resolveria?
[8] Comentário enviado por carbony em 03/12/2008 - 18:12h
ola tenho uma duvida
instalei o layer7 e ipp2p,
o layer7 bloqueia os p2p, bittorrent,kazza, emule, ou e somente pra msn?
como instalei os dois , to conseguindo bloquear o msn e o p2p, gostaria de saber qual e comando para liberar determinado ip no ipp2p, sendo que no layer7 usei a dica acima do nosso companheiro.
outra duvida, o log do ipp2p consegui ver no /var/log/iptables e do layer7 aonde consigo ver o log dele?
valeu!!!
minha regra pra gerar log, gostaria de saber se esta certa
[9] Comentário enviado por jucaetico em 19/03/2009 - 18:31h
Amigos, Segui a risca esse tutorial e muitos outros desse mesmo assunto, quando reinicio a maquina para carregar o novo kernel recebo a seguinte mensagem: "Begin: Waiting for root file system". e fica nisso o kernel antigo carrega normal!! Obs: Meu HD é SATA. Obrigado!
[10] Comentário enviado por jucaetico em 20/03/2009 - 15:51h
Galera, descobri que o problema está relacionado ao tipo da placa mãe, no meu caso o meu HD sata é reconhecido como IDE na BIOS. Então após recompilar o "kernel" o mesmo não é encontrado como sda1 e nem como ide, não sei explicar o porque. O que fiz foi utilizar um outro tipo de placa mãe que reconhece o meu HD como SATA na BIOS e funcionou blz! Obrigado,
[17] Comentário enviado por smallboy em 26/11/2014 - 12:25h
Possuo um server web cujo nele há instalado diversos tipos de serviços. Kernel dele é 2.6.18 eu consigo instalar o layer 7 no CentOS ?
More one question, Quero bloquear downloads Torrent, p2p principalmente torrent que consome maior parte da banda.