segunda-feira, 14 de janeiro de 2013

os pacotes iptables e iproute2

O  pacote chamado iproute2 liberta o poder do sub-sistema de rede do Linux, permitindo a configuração de sistemas com toda a flexibilidade existente no Kernel. O iptables,  permite definir diversas regras de tratamento de pacotes, que tornam um servidor Linux um seguro firewall.

 Uso básico do iproute2

A base do pacote iproute2 é a ferramenta ip. Ela traz toda a funcionalidade existente nos comandos arp, ifconfig e route. O modo de operação desta ferramenta baseia-se na passagem de comandos com argumentos apropriados para um dos seguintes objetos:
  1. link: interfaces físicas existentes no sistema;
  2. addr: endereços lógicos atribuídos as interfaces físicas do sistema nas diversas famílias distintas de protocolos de rede, como por exemplo inet (IPv4) e inet6 (IPv6);
  3. route: tabela de roteamento do sistema;
  4. maddr: endereços lógicos de multicast existentes no sistema;
  5. mroute: tabela de roteamento multicast do sistema;
  6. tunnel: configuração de túneis de protocolo do sistema;
  7. neigh: tabela ARP do sistema;
  8. rule: permite definir regras como rejeição de pacotes, uso de NAT e classificar o tráfego em tabelas com tratamento diferenciado para o uso por outros comandos do ip com o uso do argumento table;
  9. monitor: permite monitoramento dos demais objetos.

A sintaxe básica da ferramenta ip é: ip OBJETO { COMANDO | help }. Onde OBJETO é um dos objetos acima descritos e COMANDO é a ação correspondente em cada objeto, com a respectiva passagem de argumentos. Adicionalmente, pode ser repassada a especificação da família de protocolo sobre a qual se atuará, de acordo com a sintaxe especificada pela chamada da ferramenta ip sem parâmetros.

Uso de iptables

Uma ferramenta que permite a fácil definição de regras de tratamento de pacotes, que acompanha distribuições com o Kernel 2.4 do Linux, é o iptables. Com o uso desta ferramenta definimos regras especiais para entrada, saída e passagem de pacotes entre interfaces, podendo atuar antes ou após as ações referentes ao roteamento.
O iptables atua sobre as tabelas presentes no Kernel, que indicam situações de roteamento, de acordo com a situação em que se encontra o pacote, a qual é referida por uma corrente de regras, ou chain. As tabelas são:
  1. filter: é a tabela padrão, sobre a qual podemos nos referir a três correntes de regras, ou chains: INPUT, pacotes que entram na interface; OUTPUT, pacotes que saem da interface e FORWARD, pacotes que estão sendo roteados de uma interface para outra;
  2. nat: esta tabela se refere ao uso do recurso de Network Address Translation ou NAT, na qual podemos nos referir aos chains: PREROUTING, pacotes que serão alterados antes de roteamento; OUTPUT, pacotes locais que serão alterados antes do roteamento e POSTROUTING, pacotes que serão alterados após a aplicação das regras de roteamento;
  3. mangle: usada para alterações especiais no pacote, PREROUTING, para alteração antes do roteamento e OUTPUT, pacotes locais que serão alterados antes do roteamento.
Dentre as ações que são feitas sobre os pacotes que atendem a um determinado chain em uma dada tabela, temos:
  1. ACCEPT: aceita o pacote;
  2. DROP: rejeita o pacote;
  3. MASQUERADE: atua somente sobre a tabela nat e indica que será efetuado a conversão de endereços ou NAT, conforme indicado no comando.

Sintaxe do comando ip:

ip [ OPÇÕES ] OBJETO [ COMANDO [ ARGUMENTOS ]]
 
onde OPÇÕES é um conjunto de modificadores opcionais que alteram o comportamento geral do utilitário ip ou modificam sua saída (output). Todas as opções começam com o caracter "-" e podem ser usadas tanto na forma completa, quanto na reduzida. Atualmente estão disponíveis as seguintes opções:
  • -V, -Version: imprime a versão do utilitário ip e sai.
  • -s, -stats, -statistics: dá mais informação. Se a opção aparecer duas ou mais vezes, o volume de informação aumenta. Como regra, as informações são estatísticas ou alguns valores de tempo.
  • -f, -family, seguido por um identificador de família de protocolo (inet, inet6 ou link): força o uso da família de protocolo. Se a opção não estiver presente, a família de protocolo é inferida a partir de outros argumentos. Se o resto da linha de comando não fornecer informação suficiente para inferir a família, o ip volta para o padrão, geralmente inet. "link" é um identificador de família especial indicando que nenhum protocolo de rede está envolvido.
  • -4: atalho para -family inet
  • -6: atalho para -family inet6
  • -0: atalho para -family link
  • -o, -oneline: coloca cada registro numa única linha substituindo os avanços de linha pelo caracter "\". Isto é conveniente quando se quer contar os registros com wc ou fazer um grep da saída. O script rtpr transforma a saída em texto legível.
  • -r, -resolve: usa o tradutor de nomes do sistema para mostrar nomes DNS ao invés de endereços de host.
    info Não use esta opção quando informar bugs ou pedir ajuda.
    info O ip nunca usa o DNS para transformar nomes em endereços.
OBJETO é o objeto que será manipulado ou sobre o qual se quer informações. Os tipos de objeto que atualmente são aceitos pelo ip são:
  • link -- dispositivo de rede
  • address -- endereço do protocolo (IP ou IPv6) de um dispositivo
  • neighbour -- referência no cache ARP ou NDISC
  • route -- referência na tabela de roteamento
  • rule -- regra na base de dados da política de roteamento
  • maddress -- endereço multicast
  • mroute -- referência no cache de roteamento multicast
  • tunnel -- tunnel sobre IP
Novamente os nomes de todos os objetos podem ser escritos na forma completa ou reduzida - por exemplo, address pode ser abreviado para addr ou apenas a.
COMANDO especifica a ação aplicada ao objeto. O conjunto de ações possíveis depende do tipo do objeto. Como regra, é possível adicionar, deletar e mostrar (ou listar) objetos, mas alguns deles não permitem todas estas operações ou possuem alguns comandos adicionais. O comando help está disponível para todos os objetos. Ele devolve uma lista dos comandos disponíveis e convenções de sintaxe dos argumentos.
Se nenhum comando for especificado, algum comando default é assumido. Geralmente é list ou, se os objetos desta classe não puderem ser listados, help.
ARGUMENTOS é uma lista de argumentos para o comando. Os argumentos dependem do comando e do objeto. Existem dois tipos de argumentos: flags, que são uma palavra chave única, e parâmetros, palavras chave seguidas de um valor. Para facilitar, cada comando tem alguns parâmetros default que podem ser omitidos. Por exemplo, o parâmetro dev é o default para o comando ip link. Desta forma, ip link ls eth0 é equivalente a ip link ls dev eth0. Na descrição dos comandos a seguir, estes parâmetros são destacados com o marcador "(default)".
Praticamente todas as palavras chave podem ser abreviadas com as primeiras letras (ou até mesmo com a primeira letra). Os atalhos são convenientes quando o ip é usado de forma interativa, mas não são recomendados em scripts. Leia mais...