22
Revista Eletrônica da Faculdade Metodista Granbery http://re.granbery.edu.br - ISSN 1981 0377 Curso de Sistemas de Informação - N. 17, JUL/DEZ 2014 ROTEAMENTO AVANÇADO COM IPROUTE2 Flávio Alexandre dos Reis 1 1 Faculdade Metodista Granbery CEP: 36010-532 - Juiz de Fora - MG - Brasil Resumo O Sistema Operacional GNU/Linux possui em seu Kernel um conjunto poderoso de recursos para definição de regras de roteamento, o que permite que o mesmo seja utilizado para se obter soluções de problemas não convencionais de roteamento nos quais, muitas vezes, nem mesmo roteadores propriamente ditos, construídos em hardware especializado, oferecem uma solução a contento. Palavras Chave: Linux, Roteamento, IP, IPTables, IPRoute2 Abstract The operating system GNU/Linux has in it's Kernel a powerful set of features to define routing rules, which allows it to be used to obtain unconventional troubleshooting routing in which, often, not even routers properly said, built on specialized hardware, offer a solution to the satisfaction. Key Words: Linux, Routing, IP, IPTables, IPTroue2 1 Introdução O Kernel do Linux, a partir da série 2.2, evoluiu para um subsistema de rede completamente novo e remodelado. O código deste subsistema é extremamente flexível, robusto e, graças a funções especiais, faz par a poucos sistemas operacionais, mesmo considerando o firmware de roteadores dedicados. As funções especiais existentes neste subsistema do Linux incluem diretivas diversas de

1 Introdução - re.granbery.edu.br

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 1 Introdução - re.granbery.edu.br

Revista Eletrônica da Faculdade Metodista Granbery

http://re.granbery.edu.br - ISSN 1981 0377

Curso de Sistemas de Informação - N. 17, JUL/DEZ 2014

ROTEAMENTO AVANÇADO COM IPROUTE2

Flávio Alexandre dos Reis1 1Faculdade Metodista Granbery

CEP: 36010-532 - Juiz de Fora - MG - Brasil

Resumo

O Sistema Operacional GNU/Linux possui em seu Kernel um conjunto poderoso de

recursos para definição de regras de roteamento, o que permite que o mesmo seja

utilizado para se obter soluções de problemas não convencionais de roteamento nos

quais, muitas vezes, nem mesmo roteadores propriamente ditos, construídos em

hardware especializado, oferecem uma solução a contento.

Palavras Chave: Linux, Roteamento, IP, IPTables, IPRoute2

Abstract

The operating system GNU/Linux has in it's Kernel a powerful set of features to

define routing rules, which allows it to be used to obtain unconventional

troubleshooting routing in which, often, not even routers properly said, built on

specialized hardware, offer a solution to the satisfaction.

Key Words: Linux, Routing, IP, IPTables, IPTroue2

1 Introdução

O Kernel do Linux, a partir da série 2.2, evoluiu para um subsistema de rede

completamente novo e remodelado. O código deste subsistema é extremamente

flexível, robusto e, graças a funções especiais, faz par a poucos sistemas

operacionais, mesmo considerando o firmware de roteadores dedicados. As funções

especiais existentes neste subsistema do Linux incluem diretivas diversas de

Page 2: 1 Introdução - re.granbery.edu.br

roteamento, controle, filtragem e priorização de tráfego.

Embora o Linux possua tanta flexibilidade, perdemos o uso de tais funções pelo

simples fato de que na maior parte dos sistemas a configuração é baseada em

utilitários presentes em toda base UNIX, nos quais a configuração e uso das funções

especiais do Kernel do Linux não são acessíveis, como os comandos arp, ifconfig e

route. Estes comandos, embora utilizem syscalls adaptadas ao novo subsistema,

fazem as chamadas passando diversos argumentos com valores padrão, perdendo-

se a flexibilidade de configuração neles existente. Contudo, um pacote chamado

iproute2 liberta o poder do subsistema de rede do Linux, permitindo a configuração

de estruturas com toda a flexibilidade existente no Kernel, de forma poderosa, sem

perder a facilidade de uso das ferramentas anteriores. Ainda será abordado o uso do

iptables, o qual permite definir diversas regras de tratamento de pacotes, que tornam

um servidor Linux um seguro firewall.

2 O comando IP

A base do pacote iproute2 é a ferramenta ip. Ela traz toda a funcionalidade

existente nos comandos arp, ifconfig eroute. O modo de operação desta

ferramenta baseia-se na passagem de comandos com argumentos apropriados para

um dos seguintes objetos:

• link: interfaces físicas existentes no sistema;

• 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);

• route: tabela de roteamento do sistema;

• maddr: endereços lógicos de multicast existentes no sistema;

• mroute: tabela de roteamento multicast do sistema;

• tunnel: configuração de túneis de protocolo do sistema;

• neigh: tabela ARP do sistema;

• 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;

• monitor: permite monitoramento dos demais objetos.

Page 3: 1 Introdução - re.granbery.edu.br

A sintaxe básica da ferramenta ip é: ip OBJETO { COMANDO | help }. Onde

OBJETO é um dos acima descritos e COMANDO é a ação a ser tomada, 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.

A partir do comando ip pode-se passar diferentes tipos de argumentos. Existe

uma farta documentação sobre a sintaxe de configuração adotada no iproute2. Nas

distribuições baseadas em GNU/Linux essas documentações podem ser localizadas

em /usr/share/doc, procure pelo arquivo ip-cref. A Tabela 01 apresenta uma lista de

opções usadas pelo comando ip.

Comando Descrição ip link Para ajustar ou visualizar a configuração de uma interface de rede; ip addr Para configurar ou visualizar o endereço IP de uma interface de

rede; ip neigh Para configurar ou visualizar o cachê da tabela ARP de hosts

“vizinhos” ip route Para configurar ou visualizar as rotas na tabela de roteamento; ip rule Para determinar critérios de roteamento 9 regras );

Tabela 01 - Lista de opções usadas pelo comando ip.

Para obter uma listagem completa das opções aceitas pelo comando ip, siga o exemplo conforme apresentado na Listagem 01. # ip link help Usage: ip link add [link DEV] [ name ] NAME [ txqueuelen PACKETS ] [ address LLADDR ] [ broadcast LLADDR ] [ mtu MTU ] type TYPE [ ARGS ] ip link delete DEV type TYPE [ ARGS ] ip link set { dev DEVICE | group DEVGROUP } [ { up | down } ] [ arp { on | off } ] [ dynamic { on | off } ] [ multicast { on | off } ] [ allmulticast { on | off } ] [ promisc { on | off } ] [ trailers { on | off } ] [ txqueuelen PACKETS ] [ name NEWNAME ] [ address LLADDR ] [ broadcast LLADDR ] [ mtu MTU ]

Page 4: 1 Introdução - re.granbery.edu.br

[ netns PID ] [ netns NAME ] [ alias NAME ] [ vf NUM [ mac LLADDR ] [ vlan VLANID [ qos VLAN-QOS ] ] [ rate TXRATE ] ] [ master DEVICE ] [ nomaster ] ip link show [ DEVICE | group GROUP ] TYPE := { vlan | veth | vcan | dummy | ifb | macvlan | can | bridge }

Listagem 01 – Opções do commando IP

2.1 Configurando uma Interface de rede

Para ativar uma interface de rede com uso do comando “ip” use a sintaxe

conforme o exemplo da Listagem 02.

-Ativando uma interface

#ip link set eth0 up

-Desativando

#ip linl set eth0 down

Listagem 02 – Exemplo de uso do comando up e down

Os comandos da Listagem 2 são equivalentes ao “ifconfig eth0 up” e “ifconfig

eth0 down”;

Com o comando “ip” pode-se também ajustar alguns parâmetros como “mtu”.

“promisc” e multicast. O multicast é uma forma de roteamento baseada em “grupos”.

Grosso modo, é possível dizer que este é um roteamento do tipo 1 para muitos (

pertencentes a um mesmo grupo de roteamento ). Para ativar este recurso observe

a Listagem 3. O endereçamento de rede é representado por 244.0.0.0 com mascara

de rede 240.0.0.0. Ainda na Listagem 3 é apresentado o parâmetro “ls” do comando

“ip” sendo assim possível visualizar toda configuração.

#ip link set eth0 down

#ip link set eth0 mtu 1500 promisc off multicast on up

#ip link ls

Listagem 03 – Parâmetro ls

Pode-se observar ainda na Listagem 03 que a Interface está ativa (UP), as

opções broadcast e multicast estão selecionadas, os pacotes são gerenciados pela

Page 5: 1 Introdução - re.granbery.edu.br

“disciplina CBQ” ( qdisc cbq ) e o tamanho da fila (cache) está definido comom 100

bytes (qlen ). CBQ refere-se ao algoritmo de controle de banda adotado pelo kernel,

determinando quais pacotes são roteados e quais são mantidos ou encaminhados a

uma área temporária ( enviando para fila ). Em redes ethernet, o valor padrão do

MTU equivale o 1500. Em varias distribuições os scripts de rede configuram

automaticamente a interface de loopback (lo). Raramente será necessário

preocupar-se com essa interface.

O comando “ip” fornece o parâmetro “-s” para que possa ser observado possíveis

erros os colisões, observe um exemplo na Listagem 04 e 05.

#ip –s link ls dev eth0

Listagem 04 – Uso do parâmetro –s – exemplo 01

#ip -s -s link show eth0

Listagem 05 – Uso do parâmetro –s – exemplo 02

2.2 Configurando um endereço IP

Para atribuir um endereço a uma interface, deverão ser utilizados, os parâmetros

“addr add” seguidos do IP desejado. A utilização do argumento “+” indica que o valor

de broadcast deve ser calculado automaticamente a partir da rede atribuída a

interface. Para o IP 192.168.0.1/24 o broadcast será 192.168.0.255. Observe um

exemplo na Listagem 06.

#ip addr add 192.168.0.1/24 brd + dev eth0

Listagem 06 – Adicionando endereço IP

É importante frisar que o uso do comando da Listagem 06 não modifica o

endereço IP da interface e sim adiciona um ou mais. Para que uma alteração seja

feita antes deve-se remove-lo seguindo o exemplo da Listagem 07.

#ip addr del 192.168.0.1/24 dev eth0

Listagem 07 – removendo endereço IP

No iproute2, a sintaxe de configuração do endereçamento de rede ou hot

também obedece aos padrões de endereçamento/roteamento CIDR (Classless Inter-

Page 6: 1 Introdução - re.granbery.edu.br

Domain Routing) que, diferente do padrão adotado pelas classes de endereçamento

( A,B,C por exemplo ) permite a alocação de endereços IP de forma mais inteligente.

Um roteador que não suporte endereçamento CIDR não permite a criação de

uma rede 10.0.0.0/24, uma vez que a rede 10.0.0.0 pertence a faixa de

endereçamento Classe A que, por padrão é representada pelo endereçamento

10.0.0.0/8 ( mascara 255.0.0.0 ). Essa característica pode ser observada em um

roteador ADSL Alcatel SpeedPro.

Para demover todos os endereços ip atribuídos a uma interface use o parâmetro

“flush” conforme é apresentado na Listagem 08.

#ip addr flush dev eth0

LIstagem 08 – Uso do commando flush

O comando ifconfig é vantagem em relação ao comando “ip” quando abordada a

configuração de uma interface, pois o mesmo pode também ajustar a tabela de

roteamento em uma única linha. Observe um exemplo na Listagem 09

O argumento “up” na Listagem 09 faz com que a tabela de roteamento seja

gerada automaticamente.

#ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up

Listagem 09 - Uso do parâmetro up

3 Roteamento de Pacotes com ip route

Nesse ponto do artigo será apresentado o comando “ip route”, com ele, é

permitido adotar determinadas configurações não suportadas pela ferramenta

“route”. Em uma interface de rede com mais de um endereço ip, é possível

especificar qual será o de origem. O roteador selecionado para uma determinada

rota é “similar” a uma regra de iptables com alvo SNAT, lembrando que as regras e

roteamento são processadas, pelo kernel, antes das regras do netfilter (iptables). O

recurso mais interessante é o roteamento multipath, em que um mesmo destino

pode ser alcançado por diferentes caminhos ( utilizado para implementar o

balanceamento de carga ).

Page 7: 1 Introdução - re.granbery.edu.br

No iproute2 é possível especificar qual algoritmo é responsável por uma rota

qualquer. As rotas adicionadas pelo sistema ou via scripts de rede são definidas

como rotas de kernel ou boot. Quando uma interface de rede é ativada, as rotas

necessárias são adicionadas e gerenciadas pelo kernel, podendo ser modificadas

administrativamente. Caso a interface de rede seja gerenciada apenas pelo

administrador do sistema, deve-se defini-la como estática. Para isso basta adicioná-

la como “static”. Existem situações em que o kernel manipula estas rotas, como

durante a modificação do status (ativa/desativa) de uma interface de rede por

exemplo.

A partir de um patch desenvolvido por Julian Anastasov (http://www.ssi.bg/~ja/)

as rotas estáticas não serão manipuladas pelo kernel, apenas o administrador ou

alguns daemons de roteamento terão acesso a essas rotas. Isso significa que uma

rota estática é mantida mesmo que uma interface de rede seja desativada ( apenas

com o patch ), a rota deve ser marcada como “dead', ao invés de ser removida.

As rotas adicionadas por daemons de roteamento dinâmico, como gated e zebra

são adicionadas com o respectivo protocolo. Todas as rotas gerenciadas pela zebra

são adicionadas com protocolo “zebra”.

Para aumentar ainda mais as possibilidades de configuração, pode-se definir

critérios de roteamento através do comando “ip rule”. Com esse recurso é possível

combinar critérios de roteamento baseados no filtro de pacotes ( usando a target

MARK ) ou regras básicas, como selecionar uma tabela de roteamento de acordo

com a origem ou destino do pacote.

A sintaxe é simples e pode ser observada na Listagem 10.

#ip route add 192.168.0.0/24 dev eth0

Listagem 10 – Encaminhamento de pacos via interface

A Listagem 10 determina que os pacotes destinados a rede 192.168.0.0/24

sejam encaminhados pela interface eth0. Trata-se de uma rota “de rede” e deve

existir, obrigatoriamente, caso o host em questão pertença a rede 192.168.0.0/24.

Page 8: 1 Introdução - re.granbery.edu.br

Isto significa que a rede especificada acima está fisicamente conectada a eth0.

Pode-se dizer que os pacotes destinados a rede 192.168.1.0/24 sejam

encaminhados ao roteador 192.168.0.1, veja um exemplo na Listagem 11.

#ip route add 192.168.1.0/24 via 192.168.0.1

Listagem 11 – Inserindo rota default

Uma rota default pode ser adicionada baseando em uma interface padrão, a rota

default é utilizada quando não houver, na tabela de roteamento, um mapeamento

direto para o endereço de destino. Ou seja, qualquer pacote com destino

desconhecido será repassado para essa interface. Observe um exemplo na

Listagem 12.

#ip route add default dev ppp0

Listagem 12 – Rota default baseada em Interface

Há um recurso muito útil quando o roteador tem múltiplos endereços ( ips virtuais

) associados a uma única interface de rede, possibilitando definir qual endereço será

o responsável pelo encaminhamento do pacote. Com o comando da Listagem 13 os

pacotes destinados a rede 192.168.1.0/24 serão encaminhados ao roteador

192.168.0.1 através do endereço 192.168.0.254 ( porém não é uma regra de SNAT

).

#ip route add 192.168.1.0/24 via 192.168.0.1 src 192.168.0.254

Listagem 13 – Rota default baseada em IP

Sabe-se que uma regra de firewall com alvo MASQUERADE fará com que o

pacote seja encaminhado pelo roteador, modificando o IP de origem para o endereço

que permite conectividade com o destinatário. Similar a uma regra com alvo SNAT,

pode-se fazer a seleção do endereço de origem baseando-se no endereço

configurado a “src”. Portanto, pode-se concluir que o endereço da origem é

modificado de acordo com a tabela de roteamento. Conforme o exemplo da

Listagem 13, o roteador 192.168.0.1 receberá todos os pacotes destinados a

192.168.1.0/24 “acreditando” que o endereço de host de origem corresponde a

Page 9: 1 Introdução - re.granbery.edu.br

192.168.0.254, isso ocorre devido à modificação do endereço por NAT.

É possível com o iproute2 criar balanceamento de carga, podendo assim enviar

pacotes através dos roteadores configurados em “nexthop” ( próximo salto ). A

Listagem 14 define uma rota default baseada em dois links, repassando ora ao

roteador 192.168.0.1 ora a interface ppp0.

# ip route default \

nexthop via 192.168.0.1 dev eth0 \

nexthop dev ppp0

Listagem 14 – Rota baseada em 02 links

O mesmo ocorre em relação à rede 192.168.1.0/24, que será alcançada a partir

dos roteadores 192.168.0.1 e 192.168.0 10. Observe o exemplo da regra na

Listagem 15.

#ip route add 192.168.1.0/24

nexthop via 192.168.0.1 dev eth0 \

nexthop via 192.168.0.10 dev eth1

Listagem 15 – Rota com dois links – Exemplo 02

Pode ainda configurar para que os pacotes sejam enviados de forma aleatória

entre links diferentes, para isso deve-se utilizar a opção “equalize”, isso fará com que

os pacotes ora sejam enviados por um gateway ora por outro. Veja um exemplo na

Listagem 16.

# ip route add default equalize \

nexthop via 192.168.0.1 dev eth0 \

nexthop dev ppp0

Listagem 16 – Envio de forma aleatória

A preferência de roteamento pode ser configurada aplicando diferentes valores

de peso ( weight ). Por padrão, o valor de “weight” equivale a “1”. Para priorizar o link

de maior largura de banda, é possível atribuir diferentes pesos aos respectivos links

( ou gateway ). A diferença entre esses valores é que determina a prioridade de

roteamento. Evite atribuir valores muito elevados, pois o peso simula o número de

Page 10: 1 Introdução - re.granbery.edu.br

caminhos a um destino qualquer. Na listagem 17 há um exemplo com a Interface

eth0 recebendo valor “weight 3” e a interface ppp0 “weight 1”.

# ip route add default equalize \

nexthop via 192.168.0.1 dev eth0 weight 3 \

nexthop dev ppp0 weight 1

Listagem 17 – Entregando valores de weight

Um recurso muito útil para verificar qual gateway é utilizado para atingir um

destino qualquer, é o uso do “get”. Pode-se utilizá-lo para verificar se o roteamento

multipath está ocorrendo de forma satisfatória ou não. Basta executar o comando da

Listagem 18 por um período de tempo qualquer e avaliando qual roteador é

selecionado a cada instante.

#ip route get 200.251.137.2

Listagem 18 – Verificando gateway

4 Criando rotas alternativas

É possível criar rotas alternativas utilizando a opção “append”. Quando a primeira

rota for eliminada ou descartada pelo kernel, após a modificação do status de uma

interface de rede, a rota seguinte passa a ser utilizada. Não se trata de um

roteamento “multipath”, pode-se assimilar a adição de rotas de kernel com métricas

diferentes. Vale lembrar que o uso das métricas é manipulado apenas por protocolos

de roteamento dinâmico, como RIP, OSPF e BGP, por exemplo. O objetivo é

fornecer apenas a redundância de roteadores, pois será especificado mais de um

roteador para o mesmo destino ( sem balancear ). Ambas as regras estarão

disponíveis. Porém a primeira rota sempre será preferência enquanto estiver

disponível. Veja um exemplo na Listagem 19.

#ip route append default via 192.168.0.1

#ip route append default via 192.168.0.100

Listagem 19 – Rotas alternativas

Regra de roteamento com ip rule

Estando o Kernel configurado com as opções avançadas de roteamento descritas

Page 11: 1 Introdução - re.granbery.edu.br

na preparação do ambiente, pode-se fazer uso de políticas de roteamento antes não

disponíveis. Uma das opções avançadas é o fato de que se pode ter múltiplas

tabelas de roteamento. Ao se efetuar o roteamento de um pacote, o Kernel deve

verificar se o ele se enquadra em uma tabela e ao roteamento correspondente a

mesma, então o aplicando. Existe um conjunto de regras para esta verificação, cada

qual com sua prioridade, e o Kernel verifica se o pacote se enquadra inicialmente em

uma prioridade mais baixa. O Kernel utiliza três tabelas iniciais:

• local: identificada no Kernel por 255, é associada com a regra de prioridade

0, possui rotas para endereços locais e de broadcast, tal regra não pode ser

alterada;

• main: identificada no Kernel por 254, é associada com a regra de prioridade

32766, possui as demais rotas normais do sistema, sem envolver quaisquer

políticas especiais de roteamento, podendo ser alterada livremente pelo

administrador, ou até apagada;

• default: identificada no Kernel por 253, é associada com a regra de

prioridade 32768, por padrão está vazia, é reservada para alguma atividade

de pós-processamento se o pacote não foi selecionado por nenhuma das

tabelas iniciais.

Podem-se verificar as regras existentes no sistema com o comando da Listagem

20.

# ip rule list

0: from all lookup local

32766: from all lookup main

32767: from all lookup default

Listagem 20 – Verificando regras existentes

Por padrão, todas as regras são aplicadas a todos os pacotes de acordo com a

prioridade descrita, confrontando-se assim com cada tabela de roteamento até que a

regra atenda ao pacote a ser roteado.

Não devemos confundir tabelas de roteamento com as regras: as regras

Page 12: 1 Introdução - re.granbery.edu.br

apontam para as tabelas de roteamento, várias regras podem se referir a uma tabela

de roteamento e algumas tabelas de roteamento podem não ter regra alguma

apontando para elas. Se o administrador remove todas as regras se referindo a uma

tabela, a tabela não é usada, mas permanece e só desaparecerá se todas as rotas

contidas nela forem apagadas.

O Kernel trabalha exclusivamente com o identificador numérico da tabela.

Podem-se estabelecer novas tabelas e definir situações especiais de roteamento.

Para uso da ferramenta ip, devera ser informado essas novas tabelas no arquivo

/etc/iproute2/rt_tables, cujo conteúdo padrão é apresentado na Listagem 21.

# reserved values

255 local

254 main

253 default

0 unspec

Listagem 21 – arquivo rt_tables

Pode-se adicionar uma nova tabela editando este arquivo e definir uma regra

nova com o comando ip rule add. Tal regra pode ser aplicada para pacotes que

atendam a critérios específicos como, por exemplo, o endereço IP de origem. Isto

permite a realização de Roteamento pela Origem, conforme será abordado no

estudo de caso.

5 Rotas Alternativas

Para disponibilizar o roteamento de pacotes por de mais de um link ( roteador ),

é necessário trabalhar com técnicas de roteamento avançado não suportadas pela

ferramenta “route”. Uma estrutura de roteamento baseada em caminhos alternativos

implica em uma configuração um pouco mais complexa e pode ser alcançada

através de um roteamento dinâmico, ou estático, quando o sistema permite a

manipulação dos diferentes caminhos ao ser constatada a necessidade.

No roteamento multipath é preciso determinar quando um pacote deve trafegar

por um link ou por outro. O comando “route” permite manipular apenas a tabela

Page 13: 1 Introdução - re.granbery.edu.br

“main”, mas dificilmente podemos trabalhar com ambos os links sem manipular as

rotas em tabelas separadas (não é possível). Ao definir diferentes tabelas de

roteamento, será possível selecionar as tabelas de acordo com as regras

adicionadas por “ip rule”.

Figura 01 – Exemplo de topologia lógica de rede.

Na Figura 01 pode-se avaliar que a rede 192.168.254.0/24 tem o acesso a

Internet controlado por um firewall Linux. Seguindo esse modelo de rede, podem-se

explicar três situações de roteamento.

• Disponibilizar o acesso a um serviço existente no firewall;

• Disponibilizar o acesso a Internet para as estações de Rede Local;

• Disponibilizar o acesso ao serviço de web através de um servidor de rede

local;

Segundo a imagem, a rede não está definida de acordo com uma estrutura de

DMZ. É importante deixar claro que esta configuração não é segura e está sendo

utilizada apenas para ilustrar o roteamento multipath. Fisicamente, é importante que

o servidor não esteja conectado diretamente a rede local.

Page 14: 1 Introdução - re.granbery.edu.br

A configuração do firewall Linux pode ser diferente dependendo da tecnologia

adotada. Conforme a Figura 01 há 2 endereços Públicos (187.95.23.132 e

200.244.32.12), o Firewall poderá ser configurada para responder pelos endereços

dessa faixa de rede ( fornecido pela operadora ).

Ao ativar as duas interfaces de rede, é provável que nenhum roteador na Internet

seja capaz de fazer um simples teste de ping aos endereços públicos setados nas

placas do Firewall, mesmo estando na mesma rede, será necessário informar o

default gateway. O problema é que existe dois links de acesso a Internet, ou seja,

mais de um default gateway.

Como estaticamente a tabela mail só admite um “default gw”, é necessário então

trabalhar com o iproute2. Caso seja adicionado 2 default gateway com métricas

diferentes ( usando append ) aquele que tiver menor métrica terá prioridade e será

utilizado pelo kernel. A manipulação de rotas de acordo com a métrica funcionará

apenas com a utilização de protocolos específicos ( para roteamento dinâmico ).,

Dependendo da configuração, existe a possibilidade de ambos os links funcionarem

com um único default gateway, mas o retorno será sempre pelo mesmo roteador,

quebrando a redundância que busca-se ao implementar um roteamento multipath.

O problema está relacionado ao retorno do pacote. Existem diferentes elementos

que poderão influenciar no sucesso do roteamento, como a existência de regras de

firewall para compartilhar os acessos de Internet as estações da rede local. É um

pouco mais complexo enxergar as diferentes possibilidades, mas tenha em mente

que retorno (ou resposta) deve partir do endereço ao qual o cliente solicitou uma

conexão, e a melhor forma de fazer isto é diferenciando os links em tabelas de

roteamento separadas.

Para disponibilizar o acesso aos endereços 187.95.23.133 e 200.244.32.13,

pode-se fazer a seguinte configuração. Primeiro será removido o default gw da tabel

main, para que assim possa selecionar o gateway correto de acordo com a

respectiva tabela. Observe a Listagem 22

# Removendo o default gw da tabela main

ip route del default

Page 15: 1 Introdução - re.granbery.edu.br

# criando as tabelas de roteamento para cada um dos links

ip route add default via 187.95.23.132 src 187.95.23.133 table 100

ip route add default via 200.244.32.12 src 200.244.32.13 table 110

# Definindo as regras de roteamento

ip rule add prio 10 table main

ip rule add prio 15 from 187.95.23.132 table 100 ip rule add prio 15 from 200.244.32.12 table 110

# Definindo um default gw as demais situações

ip rule add prio 30 table 110

# Aplicando as modificações

ip rule flush cache

Listagem 22 –Exemplo de script

A preferencia fica a critério do administrador, não deverá ser adicionado ou

modificado para as prioridades com numeração padrão ( definidas pelo sistema

operacional ), as tabelas foram adicionadas a partir da prioridade de numero 15 para

deixar vaga a possibilidade de adição de mais quatro regras, caso necessário, antes

que o sistema analise a regra de prioridade “15”. E uma forma de reservar espaço

para novas regras que necessitem de maior prevalência.

Quando um host da Internet (200.234.2.2) fizer um ping a 187.95.23.133, e

retorno de um sinal de echo-replay será feito da seguinte maneira:

• A tabela main será consultada, após a local, mas a rota para esse endereço

(200.234.2.2) não será localizada porque não existe um default gw atribuído

a esta tabela;

• A regra seguinte com prioridade 15 será ignorada porque o host de origem

(no retorno) é 187.95.23.133 e não 187.95.23.132;

• A próxima regra é verificada ( pri 16 ) e o default gw é selecionado, pois o

endereço de origem realmente 187.95.23.133.

A regra de prioridade “30” seleciona 187.95.23.133 como um default gw para

todas as demais situações, Repare que, neste exemplo, a regra de prioridade “16”

acaba redundante e poderá ser removida. Há também a possibilidade de uma

Page 16: 1 Introdução - re.granbery.edu.br

conexão ADSL em modo roter, porém não será abordado nesse artigo.

Disponibilizado acesso a Internet à rede local

Existem diferentes formas de configuração para todos os exemplos tratados,

incluindo este. Podem-se compartilhar os acessos a Internet através de um

balanceamento de carga.

Inicialmente, serão confirmados alguns pré-requisitos (selecionando o primeiro

link para navegação na Internet). Observe um exemplo na Listagem 23

# Verificar se o roteamento de pacotes está ativo, a opção ip_forward deve estar setada para 1

cat /proc/sys/net/ipv4/ip_forward

# nat para a tabelas originadas da rede local

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.254.0/24 -j MASQUERADE

# permissao de acesso

iptables -A FORWARD -o eth0 -s 192.168.254.0/24 -j ACCEPT

iptables -A FORWARD -i eth0 -d 192.168.254.0/24 -m state –state ESTABLISHED, RELATED -j

ACCEPT

# regras de roteamento

ip role add prio 30 from 192.168.254.0/24 table 100

Listagem 23 – Configurando pré-requisitos

A configuração das tabelas de roteamento que foram verificadas anteriormente

deve ser respeitada. O primeiro roteador será selecionado com default gateway para

todas as estações da rede 192.168.254.0/24. A Listagem 24 traz um exemplo com

configuração mínima.

#/bin/bash

ip route del default

ip route flush table 100

ip route flush table 110

ip route add default via 187.95.23.132 table 100

ip route add default via 200.244.32.12 table 110

ip rule add prio 10 table main

Page 17: 1 Introdução - re.granbery.edu.br

… ip rule add prio 30 from 192.168.254.0/24 table 100

iptables -P INPUT DROP

iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

iptables -F

iptables -F -t nat

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A POSTROUTING -t nat -o eth0 -s 192.168.254.0/24 -j MASUQERADE

iptables -A FORWARD -s 192.168.254.0/24 -j ACCEPT

iptables -A FORWARD -d 192.168.254.0/24 -m state --state -j ACCEPT

Listagem 24 – Exemplo de configuração minima

No Exemplo da Listagem XX não foram exemplificado regras de roteamento (ip

rule), no intervalo representado pelas prioridades 10 e 30, mas há de se lembrar que

a verificação das regras é sequencial e a regra de prioridade 30 será processada,

desde que nenhuma regra de prioridade inferior selecione outra tabela quando uma

condição for satisfeita.

5.1 Exemplo de Firewall com iptables e iproute2

A seguir é descrito um script para exemplificar o uso das ferramentas iproute2 e

iptables. Os IPs aqui utilizados são fictícios, bem como seus gateways. O leitor

deverá trocá-los pelos IPs da sua rede conforme a necessidade.

Nesse exemplo é apresentado um script pronto em um firewall com 3 interfaces

e rede. A primeira ETH0 é a interface conectada à rede administrativa. A interface

ETH1 é a interface ligada ao primeiro link de Internet e por ultimo, a interface ETH2,

ligada ao segundo link de Internet.

Nesta parte do script é descrito as variáveis para as interfaces de rede, será

utilizado a seguinte descrição. A Interface ETH0 recebe o nome de

Page 18: 1 Introdução - re.granbery.edu.br

v_INTERFACE_ETH0_LAN, essa interface é responsável pelo acesso a rede

administrativa. A Interface ETH1 recebe o nome de v_INTERFACE_ETH1_LINK_01,

essa interface é responsável por receber o primeiro link de Internet. A Interface

ETH2 recebe o nome de v_INTERFACE_ETH2_LINK_02, essa interface é

responsável por receber o segundo link de Internet.

v_INTERFACE_ETH0_LAN='eth0'

v_INTERFACE_ETH1_LINK_01='eth1'

v_INTERFACE_ETH2_LINK_02='eth2'

Listagem 25 – Criando variáveis para interfaces

As próximas variáveis são utilizadas para gravar os IP's dos gateways.

v_IP_INTERFACE_LINK_01='187.95.23.132'

v_IP_INTERFACE_LINK_02='200.244.32.12'

Listagem 26 – Criando variáveis para IP’s Públicos

O próximo passo no script é utilizar o comando IPTABLES para mascarar os IPs,

ou seja, fazer um NAT (Network Address Translation) para que os pacotes que

venham da Interface ETH0 com IPs da rede interna, ou mesmo pacotes gerados

dentro do próprio Firewall, possam sair para a Internet com endereços trocados,

usando os IPs das interfaces ligadas aos Links de Internet. O alvo MASQUERADE

ao final do comando faz exatamente isto. Caso contrário, utilizaria o alvo ACCEPT,

mas dessa forma os pacotes sairiam para a Internet com IPs da rede interna e

jamais retornariam ao Firewall.

iptables -t nat -A POSTROUTING -o $v_INTERFACE_ETH1_LINK_01 -j MASQUERADE

iptables -t nat -A POSTROUTING -o $v_INTERFACE_ETH2_LINK_02 -j MASQUERADE

Listagem 27 - Compartilhando Internet

Aqui começamos a marcar os pacotes diferenciando-os pela porta utilizada.

Observe que escolhemos os pacotes com destino às portas 80 (HTTP) 443 (HTTPS)

25 (SMTP) 110 (POP)

Todo pacote que passar pelo Firewall com estas particularidades receberão uma

"marca", uma espécie de carimbo. Pacotes destinados à porta 80 recebem "carimbo"

de número 2, pacotes com destino à porta 25 recebem "carimbo" número 3. Desta

forma, podemos diferenciá-los para que mais à frente no script tenhamos controle do

Page 19: 1 Introdução - re.granbery.edu.br

que saiu/entrou e por onde saiu/entrou.

iptables -t mangle -A PREROUTING -i $v_INTERFACE_ETH0_LAN -p tcp --dport 80 -j MARK --set-

mark 2

iptables -t mangle -A PREROUTING -i $v_INTERFACE_ETH0_LAN -p tcp --dport 443 -j MARK --set-

mark 2

iptables -t mangle -A PREROUTING -i $v_INTERFACE_ETH0_LAN -p tcp --dport 25 -j MARK --set-

mark 3

iptables -t mangle -A PREROUTING -i $v_INTERFACE_ETH0_LAN -p tcp --dport 110 -j MARK --set-

mark 3

Listagem 28 – Marcando pacotes

A diferença entre o PREROUTING e o OUTPUT é que, PREROUTING abrange

os pacotes que foram originados fora do FIREWALL, por exemplo, Interface ETH0

($v_INTERFACE_ETH0_LAN), enquanto OUTPUT são os pacotes originados no

Firewall, ou seja, na própria console.

iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2

iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2

iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 3

iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 3

Listagem 29 –Marcando pacotes de saída

Nesse ponto montam-se as tabelas dinâmicas a partir das marcas (carimbos)

que fizemos lá em cima no nosso script. Pacotes que foram marcados com 2 vão

para a tabela "table 20" e os marcados com 3, vão para a tabela "table 21", com a

mesma prioridade. Perceba o PRIO 20 após os comandos.

ip rule add fwmark 2 table 20 prio 20

ip rule add fwmark 3 table 21 prio 20

Listagem 30 – Montando tabelas dinâmicas

Caso queira condicionar esta marcação de outra forma, pode-se utilizar o

comando das seguintes formas. Este comando condiciona que todos os pacotes que

vierem da rede 192.192.254.0 vão para a tabela 20. No exemplo ele está

comentado.

Page 20: 1 Introdução - re.granbery.edu.br

# ip rule add from 192.168.254.0/24 table 20

Listagem 31 – Outra forma de adicionar marcação de pacotes

Agora será destinado a direção correta aos pacotes que foram marcados e

cadastrados na tabela dinâmica. Veja que os pacotes que foram enviados para a

tabela 20 têm como DEFAULT GATEWAY o LINK1. Sendo assim, os pacotes serão

enviados para o LINK1 na Interface ETH1 com o IP 200.201.202.1. Já os pacotes da

tabela 21 serão enviados para o LINK2 na Interface ETH1, com o IP 200.201.202.2

ip route add default via $v_IP_INTERFACE_LINK_01 dev $v_INTERFACE_ETH1_LINK_01 table 20

ip route add default via $v_IP_INTERFACE_LINK_02 dev $v_INTERFACE_ETH2_LINK_02 table 21

Listagem 32 – Apontando a direção dos pacotes com o comando ip route

Este último comando limpa a tabela, caso ela já tenha sido utilizada

anteriormente, ou apenas para termos certeza de que quando você resetar as regras

todas, o Firewall não guarde nenhum tipo de informação na memória (cache). Daí o

nome FLUSH CACHE.

ip route flush cache

Listagem 33 – executando um flush

6 Conclusão

Page 21: 1 Introdução - re.granbery.edu.br

Uma série de outros recursos pode ser explorada com o uso do iptables e ip,

sempre que o convencional não atender às expectativas. Uma boa referência é o

documento “Linux 2.4 Advanced Routing HOWTO”, disponível a partir de

http://www.linux.org/ .

Como exemplo de solução possível usando os recursos aqui abordados, vimos o

uso de roteamento pela origem onde há uma necessidade de se aproveitar o recurso

de dois links, separando o uso pelas sub-redes. Embora tal tema tenha sido tratado

com extrema precisão e clareza em artigo anterior, “ Roteando pela Origem com

Linux ”, a solução apresentada baseia-se no Kernel de série 2.0, através de

aplicação de patches ao mesmo. O uso desta versão do Kernel não é desejável, pois

limita os recursos disponíveis do sistema, ao mesmo tempo em que o Kernel 2.4

possui um subsistema de rede no Kernel do Linux totalmente remodelado e com

claras melhorias em relação ao 2.0, o que implica que a implementação descrita no

referido artigo não se aplica a sistemas baseados em versões recentes do Kernel.

Como a versão do kernel já se expandindo para 3,16 novos recursos e correção de

bugs foram atualizados, criando ainda maior confiabilidade em sua utilização.

Este artigo procurou apenas introduzir as ferramentas ip, iproute2 e iptable.

Embora apenas tenha sido citada, a ferramenta é extremamente poderosa para a

execução de ações de controle de tráfego, sugerindo-se uma análise cuidadosa dos

recursos da mesma. As três ferramentas usadas em conjunto tornam o Linux um

roteador altamente flexível, configurável e seguro, equiparado a um grupo seleto de

soluções de roteamento. Para trabalhos futuros, visa-se apresentar com mais

detalhes o gerenciamento de banda e balanceamento de carga entre links.

Page 22: 1 Introdução - re.granbery.edu.br

REFERENCIAS BIBLIOGRAFICAS. FREITAS,A.E.S. Roteamento avançado com Linux. Boletim RNP, Volume 6 2012. Disponível em: https://memoria.rnp.br/newsgen/0201/roteamento_linux.html . Acesso em Maior 2015. FERREIRA. F. Roteamento com Iptables e Iproute2. Viva o Linux, Disponível em : http://www.vivaolinux.com.br/artigo/Firewall-Linux-Roteamento-avancado-usando-iproute2-e-iptables-(load-balance2). Acesso em Outubro 2014 PEIXINHA. I.C. “Roteando pela Origem com Linux” in NewsGeneration volume 2 número 7. RNP. Setembro de 1998.Disponível em:http://www.rnp.br/newsgen/9809/rot-linux.html . Acesso em Julho 2014 Netherlabs B.V, Gregory Maxwell, Remco van Mook, Martijn van Oosterhout, Paul B Schroeder e Jasper Spaans – Linux 2.4 Advanced Routing HOWTO. Linux Documentation Project. Setembro de 2001. Disponível em: http://www.linux.org/docs/ldp/howto/Adv-Routing- HOWTO.html. Acesso em Maio 2014 KUZNETSOV A. N. - IP Command Reference. Institute for Nuclear Research, Moscou. Abril de 1999.Disponíel em: http://defiant.coinet.com/iproute2/ip-cref/node104.html. Acesso em Setembro 2014