Iptables

Curso ministrado pelo Centro de Difusão de Tecnologia e Conhecimento no período de 27 Nov a 03 Dez 2006.

Copyright (c) 2005, Centro de Difusão de Tecnologia e Conhecimento. É dada permissão para copiar, distribuir e/ou modificar este curso sob os termos da Licença de Documentação Livre GNU, Versão 1.1 públicada pela Free Software Foundation com a Seção Invariante Sobre o CDTC. Uma cópia da licença está inclusa na seção entitulada ¨Licença de Documentação Livre GNU¨.

Sumário

  1. Histórico
  2. Introdução ao Netfilter/Iptables
  3. Tabelas
  4. Sintaxe e uso
  5. Aplicações da tabela nat
  6. Aplicações da tabela mangle
  7. Módulos

 

Histórico

O projeto Netfilter/Iptables foi iniciado em 1998 por Rusty Russel, que também é autor do projeto predecessor, Ipchains. Com o crescimento do projeto ele fundou o Netfilter Core Team (ou simplesmente coreteam) em 1999. O software criado por eles foi licenciado sob os termos da GPL (GNU Public License) e incorporado ao kernel do Linux em março do ano 2000.

O Firewall é um programa que tem como objetivo proteger a máquina contra acessos indesejados, tráfego indesejado, proteger serviços que estejam rodando na máquina e bloquear a passagem de coisas que você não deseja receber (como conexões vindas da Internet para sua segura rede local, evitando acesso aos dados corporativos de uma empresa ou a seus dados pessoais).

Antes do Iptables, o software predominante para a criação de firewalls no Linux era o Ipchains nos kernels do Linux da série 2.2 e o Ipfwadm nos da série 2.0, que por sua vez foi baseado no Ipfw dos BSDs.

 

Introdução ao Netfilter/Iptables

Firewall filtro de pacotes

Esta classe de firewall é responsável por filtrar todo o tráfego direcionado ao próprio host Firewall ou à rede que este isola, tal como todos os pacotes emitidos por ele ou por sua rede. Ocorre mediante análise de regras previamente inseridas pelo administrador do mesmo.

O Firewall filtro de pacotes possui a capacidade de analisar cabeçalhos (headers) de pacotes enquanto os mesmos trafegam. Mediante esta análise, que é fruto de uma extensa comparação de regras previamente adicionadas, pode decidir o destino de um pacote como um todo.

A filtragem pode, então, deixar tal pacote trafegar livremente pela rede ou simplesmente parar sua trajetória, ignorando-o por completo. O mesmo é, sem dúvida, a classe mais utilizada de Firewall e não aplicar seus conceitos é deixar as portas abertas e permitir a livre circulação de pacotes não confiáveis por sua rede.

Um Firewall filtro de pacotes em sua rede lhe fornecerá controle, segurança e vigilância.

Firewall NAT

Um firewall aplicado à classe NAT, a princípio, possui o objetivo de manipular a rota padrão de pacotes que atravessam o kernel do host Firewall aplicando-lhes o que conhecemos por "tradução de endereçamento". Isso lhe agrega diversas funcionalidades dentro deste resumido conceito como, por exemplo, a de manipular o endereçamento de origem (SNAT) e destino (DNAT) dos pacotes, tal como realizar o que conhecemos como "mascaramento" (Masqueranding) sobre conexões PPP, entre outras potencialidades.

Um firewall NAT pode, por exemplo, realizar o trabalho de um proxy de forma simples e eficiente, independentemente do IP. Veremos estas potencialidades citadas, com mais detalhes, posteriormente.

Netfilter/Iptables

O Netfilter é um conjunto de situações de fluxo de dados agregadas ao kernel do linux e dividido em tabelas. Sob uma ótica mais prática, podemos ver o Netfilter como um grande banco de dados que contém em sua estrutura 3 tabelas padrões: Filter, Nat e Mangle. Cada uma destas tabelas contém regras direcionadas a seus objetivos básicos. A tabela Filter, por exemplo, guarda todas as regras aplicadas a um Firewall filtro de pacotes; a tabela Nat as regras direcionadas a um Firewall Nat e a Mangle à funções mais complexas de tratamento de pacote como o TOS. Todas as tabelas possuem situações de fluxo (entrada, saída, redirecionamento, etc.) que lhes proporcionam a realização de seus objetivos.

O Iptables trata-se, na verdade, de uma ferramenta a nível de usuário para a manipulação das tabelas do Netfilter, embora o mesmo seja frequentemente confundido com um Firewall por si só. Ele é uma versão mais robusta, completa e estável que seus antecessores Ipfwadm e Ipchains, dos kernels do Linux 2.0 e 2.2 respectivamente.

Como principais características, o Iptables (além de realizar suas tarefas de forma veloz, eficaz e econômica, tanto no aspecto financeiro quanto no de requerimento de hardware) nos dá um amplo leque de possibilidades tais como a implementação desde filtros de pacotes, utilizando a tabela Filter, a NAT via tabela NAT e mais controles avançados como o desenvolvimento de QOS sobre o tráfego, suporte à SNAT e DNAT, redirecionamento de endereçamento e portas, mascaramento de conexões, detecção de fragmentos, monitoramento de tráfego, TOS, bloqueio de ataques, scanners ocultos, pings da morte e muito mais. E além disso tudo, ainda podemos utilizar módulos externos ampliando ainda mais o nosso leque de funcionalidades.

Os requerimentos básicos para o funcionamento do Iptables são um computador sobre a arquitetura 386 com, no mínimo, 4MB de RAM e obviamente, um kernel da série 2.4 ou superior.

O Iptables é composto dos seguintes aplicativos:

Iptables: Aplicativo principal do pacote iptables para protocolos ipv4.

Ip6tables: Aplicativo principal do pacote iptables para protocolos ipv6.

Iptables-save: Aplicativo que salva todas as regras, para protocolos ipv4, inseridas na sessão ativa e também em um determinado arquivo informado pelo administrador do Firewall.

Ip6tables-save: Aplicativo que salva todas as regras, para protocolos ipv6, inseridas na sessão ativa e também em um determinado arquivo informado pelo administrador do Firewall.

Iptables-restore: Aplicativo que restaura todas as regras, para protocolos ipv4, salvas pelo software Iptables-save.

Ip6tables-restore: Aplicativo que restaura todas as regras, para protocolos ipv6, salvas pelo software Ip6tables-save.

 

Tabelas

A Tabela Filter

A tabela Filter é a tabela padrão do Netfilter/Iptables e trata das situações (chains) implementadas por um Firewall filtro de pacotes.

Estas situações são:

INPUT: Todos os pacotes que entram no host.

FORWARD: Todos os pacotes que entram no host, mas que devem ser redirecionados à um host secundário ou outra interface de rede.

OUTPUT: Todos os pacotes que saem do host.

A Tabela NAT

A tabela NAT é a tabela que implementa funções de NAT (Network Address Translation) ao host Firewall. O Nat por sua vez, possui diversas utilidades, conforme abordado anteriormente.

Suas situações (chains) são:

PREROUTING: É utilizada quando há necessidade de se fazer alterações em pacotes antes que os mesmos sejam roteados.

OUTPUT: Trata os pacotes emitidos pelo host Firewall.

POSTROUTING: Utilizado quando há necessidade de se fazer alterações em pacotes após o tratamento de roteamento.

A Tabela Mangle

A tabela MANGLE implementa alterações especiais em pacotes em um nível mais complexo. A tabela mangle é capaz, por exemplo, de alterar a prioridade de entrada e saída de um pacote baseado no tipo de serviço (TOS) o qual o pacote se destinava.

Suas situações são:

PREROUTING: Modifica pacotes dando-lhes um tratamento especial antes que os mesmos sejam roteados.

OUTPUT: Altera pacotes de forma especial gerados localmente antes que os mesmo sejam roteados.

 

Sintaxe e uso

Antes de começar

Antes de começar a utilizar o Iptables, precisamos nos certificar de que o ambiente está pronto.

Cheque se o pacote iptables está instalado em seu sistema.

Abra um terminal, como o gnome-terminal, e digite:

# dpkg -l | grep iptables

Caso este comando não retorne nada, significa que você não o tem instalado e antes de dar sequência ao nosso curso precisamos instalá-lo com o seguinte comando:

# apt-get install iptables

Sintaxe de uso do Iptables

O Iptables possui a seguinte sintaxe de uso, que pode variar um pouco dependendo da ação desejada mas que, em geral, pode ser representada por:

iptables [-t tabela] -[comando] [situação (chain)] especificação-da-regra [alvo]

Veremos adiante uma descrição mais detalhada de cada parte desta sintaxe de uso.

Comandos

Segue abaixo uma lista de comandos básicos do Iptables com exemplos explicativos:


-A: Adiciona uma nova entrada no fim da lista de regras:

Exemplo que adiciona uma nova regra no final da lista referente a INPUT chain:

# iptables -A INPUT


-D: Apaga uma regra especificada da lista:

Exemplo que apaga a regra inserida anteriormente apenas trocando o comando -A por -D:

#iptables -D INPUT

Obs: O comando -D também permite apagar uma certa regra por seu número da lista de ocorrências do Iptables

Exemplo que apaga a regra de número 2 referente a FORWARD chain:

# iptables -D FORWARD 2


-L: Lista as regras existentes na lista:

Exemplo que mostra a lista das regras existentes:

# iptables -L FORWARD


-P: Altera a política padrão das chains. Inicialmente, todas as chains de um tabela estão setadas como ACCEPT, ou seja, aceitam todo e qualquer tipo de tráfego.

Exemplo que modifica a política padrão da chain FORWARD que ao invés
de ser direcionada para o alvo ACCEPT, será direcionada para o alvo
DROP. Um pacote direcionado ao alvo DROP é descartado pelo sistema:

# iptables -P FORWARD DROP

-F: Este comando é capaz de remover todas as entradas da lista de chains, sem alterar a política padrão.

Exemplo que remove todas as regras existentes:

# iptables -F

Exemplo que remove todas as regras existentes referentes a OUTPUT chain:

# iptables -F OUTPUT


-I: Insere uma nova regra ao início da lista de regras (Ao contrário do comando -A, que insere ao final da lista)

# iptables -I OUTPUT


-R: Substitui uma regra já adicionada por outra:

Exemplo que substitui a segunda regra referente à FORWARD chain pela seguinte: " -s 10.0.40.3 -d 10.0.30.0/8 -j DROP" :

# iptables -R FORWARD 2 -s 10.0.40.3 -d 10.0.30.0/8 -j DROP


-N: Este comando nos permite inserir/criar uma nova chain na tabela especificada.

Exemplo que cria uma nova chain chamada internet na tabela filter:

# iptables -t filter -N internet


-E: Renomeia uma nova chain (Que tenha sido criada pelo administrador do Firewall):

Exemplo que renomeia a chain internet para INTERNET:

# iptables -E internet INTERNET

-X: Apaga uma chain criada pelo administrador do Firewall

Exemplo que remove a chain criada e renomeada anteriormente:

# iptables -X INTERNET


 

Especificação das Regras

A maioria dos comandos do Iptables requerem especificação para as regras a serem aplicadas. A especificação da regra também inclui um alvo que especifica o que fazer com os pacotes que casam com a regra.

As seguintes opções são as mais utilizadas na criação de especificações para as regras:

-j (--jump) alvo: Especifica o alvo dos pacotes que casarem com a regra.

Exemplo:

#iptables -t filter -A INPUT -i eth0 -p tcp --dport 6881 -j ACCEPT

-p (--protocol) : Casa pacotes cujo protocolo utilizado seja o especificado.

Exemplo:

#iptables -t filter -A INPUT -i eth0 -p tcp --dport 6881 -j ACCEPT

-s (--source): Casa pacotes cuja origem seja o endereço especificado.

Exemplo:

#iptables -t filter -A INPUT -s 192.168.1.1/24 --dport 6112 -j DROP

-d (--destination): Casa pacotes cujo destino seja o especificado.

Exemplo:

#iptables -t filter -A INPUT -d 192.168.1.1/24 --dport 6112 -j DROP

-dport (--destionantion-port): Casa pacotes cuja porta de destino seja a especificada.

Exemplo:

#iptables -t filter -A INPUT -i eth0 -p tcp --dport 6881 -j ACCEPT

-sport (--source-port): Casa pacotes cuja porta de origem seja a especificada

Exemplo:

#iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 6881 -j DROP


Obs: Para uma lista mais completa, consulte a página de manual do Iptables ($man iptables).

 

Alvos

Segue abaixo um lista de alguns dos principais alvos para nossas regras:

ACCEPT: Este alvo faz com que o Netfilter aceite a passagem do pacote. O significado prático disto depende da situação (chain) em que é feita esta aceitação. Por exemplo, um pacote que é aceito numa situação de entrada (INPUT chain) terá permissão para ser recebido pelo host, já um pacote que é aceito numa situação de saída (OUTPUT chain) terá permissão para ser enviado pelo host, assim como um pacote que é aceito numa situação de encaminhamento (FORWARD chain) terá permissão para ser roteado através da rede.

DROP: Este alvo faz com que o Netfilter descarte o pacote referenciado sem processamento prévio deste. Este pacote simplesmente desaparece sem nenhuma indicação do fato de ter sido descartado ao host ou aplicação que o enviou. Frequentemente é enviada para o emissor de tal pacote uma indicação de tempo de comunicação esgotado (timeout), o que pode gerar uma certa confusão.

QUEQUE: Este alvo faz com que o pacote seja enviado a uma fila e aguarda até que uma aplicação o requeira. Caso não exista nenhuma aplicalvo capaz de requerer tal pacote na fila, esta alvo equivale a alvo DROP e o pacote é descartado.

REJECT: Este alvo tem o mesmo efeito da alvo DROP exceto pelo fato de que ela envia, ao remetente do pacote, um outro pacote de erro.

LOG: Este alvo "loga" o tráfego do pacote. Ou seja, cria um relatório, no syslog, do seu percurso na rede. Pode ser usado em qualquer situação (chain) e em qualquer tabela. Muito útil para análise de quais pacotes estão sendo descartados.

SNAT: Este alvo faz com que o pacote tenha seu endereço de origem alterado. Utilizamos a flag "--to-source" para indicar o novo endereço de origem do pacote. Este alvo só é válido para situações(chains) de POSTROUTING dentro da tabela NAT.

DNAT: Este alvo faz com que o pacote tenha seu endereço de destino alterado. Utilizamos a flag "--to-destination" para indicar o novo enderço de destino do pacote. Este alvo é válido apenas para situações (chains) de OUTPUT e PREROUTING dentro da tabela NAT.

MASQUERADE
: Este alvo é uma forma especial restrita de SNAT para conexões com IP's dinâmicos. Ao invés de ter que alterar a uma alvo SNAT toda vez que o IP for alterado, esta alvo calcula o endereço IP de origem para fazer o NAT analizando o endereço IP da interface de saída quando um pacote encontra esta regra.

REDIRECT: Este alvo é responsável pelo redirecionamento de portas. Utilizamos a flag --to-port para especificar a porta para a qual o tráfego da regra será redirecionado.

 

Aplicações da tabela nat

Considerações Iniciais

Antes de iniciarmos a manipulação de qualquer regra que se utilize da tabela NAT, é importante que habilitemos a função de redirecionamento de pacotes (forward) em nosso kernel através do seguinte comando:

#echo "1" > /proc/sys/net/ipv/ip_forward

Não se esqueça de utilizar este comando antes de adicionar qualquer regra que envolva a tabela NAT.

Outra observação importante é que sempre que fizermos um SNAT utilizaremos a situação (chain) POSTROUTING e sempre que fizermos um DNAT utilizaremos a situação (chain) PREROUTING, por motivos obvios.

SNAT

Com o SNAT ( Source NAT ) é possível alterar o endereço de origem no cabeçalho (header) dos pacotes que casarem com a regra criada.

Exemplo:

#iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.1.223

Neste exemplo todos os pacotes que sairem pela interface de rede eth0 terão os endereços de origem alterados para 192.168.1.223.

DNAT

Com o DNAT é possível alterar o endereço de destino dos pacotes que casarem com a regra criada.

Exemplo:

#iptables -t nat PREROUTING -i eth0 -j DNAT --to 192.168.1.223

Neste exemplo todos os pacotes que entrarem pela interface de rede eth0 terão o endereço de destino alterados para 192.168.1.223.

Proxy transparente

O proxy transparente é a forma que a tabela NAT possui de realizar um redirecionamento de portas em um mesmo host de destino. Este método é comumente utilizado, por exemplo, pelo software Squid, pois este costuma disponibilizar acesso à internet através da porta 3128 ao invés da porta padrão, 80, para este tipo de acesso.

Logo, concluímos que o Squid faz um redirecionamento das portas solicitadas por seus clientes, uma vez que estes solicitam conexão via porta 80 e são redirecionados à porta 3128. Para esta finalidade utilizamos as situações (chains) PREROUTING e OUTPUT da tabela NAT e o alvo REDIRECT.

Não confunda proxy transparente com DNAT. A única forma de se fazer redirecionamento de portas de destino em um mesmo host é pelo alvo REDIRECT que caracteriza o modelo de proxy transparente.

Exemplo:

#iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Neste exemplo, os pacotes que entram pela interface eth0 com destino à porta 80 serão redirecionados para a porta 3128.

Compartilhamento de internet via NAT

Podemos utilizar ainda a tabela NAT para realizar o compartilhamento do acesso à internet. Isto é útil, por exemplo, quando desejamos que nossa rede local tenha acesso à internet. Para tanto, utilizamos o alvo MASQUERADE para fazer o que conhecemos como "mascaramento".

Exemplo:

#iptables -t nat -A POSTROUTING -o lo -d 127.0.0.0/8 -j ACCEPT
#iptables -t nat -P POSTROUTING DROP
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Neste exemplo, todos os IP's da rede 192.168.1.0 com máscara de rede 255.255.255.0 serão "mascarados".

 

Aplicações da tabela mangle

TOS

O TOS (Type of Service) nos permite filtrar pacotes que trafegam na nossa rede capturando informações sobre o tipo de serviço ao qual o pacote se destina. Estas informações estão contidas no cabeçalho de cada pacote. O campo TOS foi criado especificamente para que pudessemos fazer tal filtragem.

Para usufruirmos desta funcionalidade, nós utilizamos a tabela mangle do Netfilter. O TOS é um alvo (target) para o qual direcionamos os pacotes desejados referenciando-os em uma determinada regra. Compreenderemos o seu uso mais adiante.

Aplicando TOS

Para aplicar filtragem por TOS em nossa rede fazemos uso da tabela mangle e do alvo TOS seguido pelo parâmento --set-tos valor, em que os valores possíveis são, em ordem descrescente de prioridade:

Espera Mínima: É especificado através de Minimize-Delay, 16 ou 0x10.
Máximo Processamento: É especificado através de Maximize-Throughput, 8, ou 0x08.
Máxima Confiança: É especificado através de Maximize-Reliability, 4 ou 0x04.
Custo mínimo: Especificado através de Minimize-Cost, 2 ou 0x02.
Prioridade Normal:
Especificado através de Normal-Service, 0 ou 0x00.

Por padão a prioridade dada à todos os pacotes, a menos que você especifique outro, será a prioridade normal.

Exemplos:

#iptables -t mangle -A OUTPUT -o eth0 -p tcp --dport 5123 -j TOS --set-tos 16

Este exemplo dá prioridade de espera mínima à todos os pacotes tcp que saem da rede pela interface de rede eth0 com porta de destino 5123. Ou seja, estes pacotes terão uma facilidade maior para trafegar na rede.

TOS no tráfego de entrada

Esta operação é realizada nas situações (chains) INPUT ou PREROUTING. Não faz muito sentido o uso desta chain (situação) dentro de uma rede pequena ou média, pois o tráfego que recebermos será priorizado pelo chain de saída de outras máquinas da internet ou de outras redes antes de chegar a nossa (desde que elas também estejam usando TOS).

Exemplo:

#iptables -t mangle -A PREROUTING -i eth0 -p tcp --sport 6666-6668 -j TOS --set-tos 0x10

TOS no tráfego de saída

Esta operação pode ser realizada somente na situação (chain) OUTPUT e tem por objetivo controlar o tráfego de saída em nossa rede.

Exemplos:

Para priorizar todo o tráfego de IRC de nossa rede interna indo para a interface ppp0:

#iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 6666-6668 -j TOS --set-tos 16

O bit TOS é ajustado para espera mínima e será enviado antes dos pacotes com prioridade normal para fora.

Para priorizar a transmissão de dados ftp saindo da rede:

#iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 20 -j TOS --set-tos 8

Para priorizaer o tráfego de ICQ da rede:

#iptables -t mangle -A OUTPUT -o ppp0 -p tcp --dport 5190 -j TOS --set-tos 16

 

Módulos

Os módulos do iptables são especificados com a opção -m módulo ou --match módulo e permitem expandir a funcionalidade do firewall através de novas conferências e recursos de filtragem adicionais, como limitar a conferência de regras do firewall (um método útil de limitar ping floods, syn floods, etc).

Limit

Regras sob o módulo limit especificam exatamente quantas vezes as mesmas devem ser executadas em um intervalo de tempo específico e, caso isto ocorra, ela automaticamente executará a regra seguinte.

Trata-se de um módulo muito útil para conter ataques sofisticados como ataques do tipo DOS (Denial Of Service) onde o cracker tenta enviar o máximo de requisições ICMP possíveis em um menor intervalo de tempo, esperando que com isso cause uma negação de serviços por parte de seu Firewall.

Exemplo:

#iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

Neste exemplo, temos que os pacotes de respostas de ICMP ( -p icmp ) serão aceitos somente se recebidos em um intervalo de tempo de 1 segundo ( -m limit --limit 1/s -j ACCEPT ). Caso algum pacote ultrapasse este limite imposto pela regra, esta deverá automaticamente executar a regra seguinte que deverá ser algo como:

#iptables -A INPUT -p icmp -j DROP

Esta regra irá bloquear ( -j DROP ) qualquer pacote ICMP ( -p icmp ) que chegar ao FIrewall.

State

O módulo state atribui regras mediante a análise do estado da conexão de um pacote. Tais estados podem ser:

NEW: Indica que o pacote está criando uma nova conexão.
ESTABLISHED: Informa que o pacote pertence à uma conexão já existente, logo, trata-se de um pacote de resposta.
RELATED: Referente à pacotes que relacionam-se indiretamente com outro pacote, a exemplo das mensagens de erros de conexão.
INVALID: Referente à pacotes não identificados por algum motivo desconhecido. Aconselha-se que estes pacotes sejam descartados pelo Firewall.

Exemplo:

#iptables -A INPUT -m state --state NEW -i eth0 -j DROP

Este exemplo faz com que qualquer nova conexão que parta da interface eth0 seja rejeitada.

Mac

Mac (Media access control) é a identificação de mais baixo nível que um dispositivo de rede pode ter.

O módulo mac permite que seu Firewall atue neste nível, independentemente de endereçamento de rede. Logo, a checagem da regra não depende mais do endereço IP e sim do endereço Mac do dispositivo de rede.

Exemplo:

#iptables -A INPUT -m mac --mac-source 00:0F:B0:C2:0C:5C -j DROP

Este exemplo bloquearia qualquer pacote proveniente deste dispositivo de rede cujo endereço mac foi referenciado.

Multiport

O módulo multiport permite que seja especificado múltiplas portas para um alvo. Podem ser especificadas até 15 portas em um único parâmetro e basta que uma porta confira para que a regra entre em ação, pois a comparação é feita usando condições "or". O parâmetro multiport deve ser acompanhado de um dos argumentos abaixo:

  • --source-port [porta1, porta2...] - Faz a regra conferir se a porta de origem estiver presente entre as portas especificadas.
  • --destination-port [porta1, porta2...] - Faz a regra conferir se a porta de destino estiver presente entre as portas especificadas.
  • --port [porta1, porta2...] - Faz a regra conferir caso a porta de origem ou destino esteja presente no parâmetro.

Este módulo pode eliminar muitas regras de firewall que fazem o mesmo tratamento de pacotes para diversas portas diferentes.

Exemplo:

#iptables -A INPUT -p tcp -i ppp0 -m multiport --destination-port 21,23,25,80,110,113,6667 -j DROP

Este exemplo bloqueia todos os pacotes vindo de ppp0 para as portas 21 (ftp), 23 (telnet), 25 (smtp), 80 (www), 110 (pop3), 113 (ident), 6667 (irc).

String

O módulo string do Iptables permite a inspeção de conteúdo de um pacote e tomar uma ação se determinado tipo de tráfego for encontrado em um pacote. Esta técnica pode ser usada tanto para segurança como para economia de banda dentro da rede. Esta opção *NÃO* torna o Iptables como um firewall proxy, pois o proxy tem a habilidade de inspecionar o conteúdo, protocolo, comandos do pacote e decidir se o seu conteúdo é nocivo ou não. O firewall em nível de pacotes fazendo inspeção de conteúdo, chega a ser 3 a 10 vezes mais rápido do que um proxy, assim seu uso deve ser analisado dependendo do tráfego que circula pelo link e da segurança dos dados que trafegam através dele.

Uma boa prática é aliar esta opção a um IDS externo usando o alvo QUEUE e deixando o trabalho de inspeção de conteúdo para ele. Um exemplo de restrição direta é o bloqueio do envio de qualquer informação confidencial sigilosa para fora da rede interna (número de contas, tudo que conferir com CPF, CGC, endereços de e-mail, memorandos, etc).

De qualquer forma, analise o tráfego de sua rede antes de querer implementar qualquer solução baseada neste método sob o risco de afetar tráfego legítimo.

Outra utilidade eficiente é a diminuição de tráfego, pois podemos barrar programas que sobrecarregam o link em uma rede com muitos usuários como, por exemplo, usando o Kazaa ou qualquer outro programa para cópia de arquivos via Internet.

Veja alguns exemplos:

Bloqueia qualquer tentativa de acesso ao programa Kazaa:

#iptables -A INPUT -m string --string "X-Kazaa" -j DROP

Não permite que dados confidenciais sejam enviados para fora da empresa e registra o ocorrido:

#iptables -A OUTPUT -m string --string "conta" -j LOG --log-prefix "ALERTA: dados confidencial "
#iptables -A OUTPUT -m string --string "conta" -j DROP


Somente permite a passagem de pacotes que não contém ".exe" em seu conteúdo:

#iptables -A INPUT -m string --string ! ".exe" -j ACCEPT

Owner

Este módulo confere com o usuário que iniciou a conexão. É somente válido no chain OUTPUT da tabela filter. Os seguintes argumentos são válidas para este módulo:

  • --uid-owner UID - Confere se o pacote foi criado por um processo com o UID especificado. Até o momento somente UID numéricos são aceitos.
  • --gid-owner GID - Confere se o pacote foi criado por um usuário pertencente ao grupo GID. Até o momento somente GID numéricos são aceitos.
  • --pid-owner PID - Confere se o pacote foi criado por um processo com o PID especificado.
  • --sid-owner ID - Confere se o pacote foi criado por um processo no grupo de seção especificado.

OBS: - Lembre-se que pacotes que não possuem detalhes suficientes de cabeçalho nunca serão conferidos!

Exemplo:

#iptables -A OUTPUT -m owner --gid-owner 100 -p udp -j DROP

Este exemplo rejeita conexões indo para portas UDP de pacotes criados pelo usuários pertencentes ao grupo 100.