6. Entendendo alguns conceitos de rede no Linux

A conexão de computadores entre si em uma rede de computadores trocando informações representou um grande avanço nas possibilidades de uso dos computadores, e o exemplo mais conhecido disso é a própria Internet, uma rede mundial de computadores.

Uma rede é uma forma barata de trocar arquivos, compartilhar a conexão com a internet, compartilhar impressoras, CD-ROM e outros periféricos, dentre outras aplicações.

Os componentes (físicos) básicos de uma rede são uma placa de rede para cada micro, os cabos e o hub ou switch que serve como um ponto de encontro, permitindo que todos os micros se enxerguem e conversem entre si.

Figura 15. Placa de Rede

Atualmente existem três padrões de redes Ethernet: de 10 megabits, 100 megabits e 1 gigabit. As placas são intercompatíveis, mas quando se usam placas de velocidades diferentes, a velocidade de comunicação fica limitada ao limite da placa mais lenta.

Com a evolução das tecnologias de rede surgiram as redes sem fio (em inglês - wireless). Embora as redes Wi-Fi também sejam redes Ethernet, o termo Ethernet é geralmente usado apenas em relação às redes cabeadas, enquanto as redes sem fio são mais popularmente chamadas de "redes wireless", "redes Wi-Fi", ou ainda "redes 802.11g" ou "redes 802.11n" (nesse caso indicando um padrão específico). (Fonte: http://www.hardware.com.br/livros/redes/padroes-ethernet.html

A velocidade das placas é calculada em bits e não em bytes (1 Byte = 8 bits). Uma rede de 100 megabits permite uma taxa de transmissão (teórica) de 12,5 MB/s (Mega Bytes por segundo - 100 megabits / 8 = 12,5 mebabytes). Como além dos dados são transmitidas outras informações (a estrutura dos pacotes, retransmissões, códigos de correção de erros, etc.), a velocidade na prática fica sempre um pouco abaixo disso. Normalmente é possível transferir arquivos a no máximo 10.5 MB/s, com a taxa máxima variando sutilmente de acordo com a placa e o sistema operacional usado.

A opção para quem precisa de mais velocidade são as redes Gigabit Ethernet, que transmitem a até 1000 megabits (125 megabytes) por segundo. As placas Gigabit atuais são compatíveis com os mesmos cabos de par trançado categoria 5, usados pelas placas de 100 megabits, por isso a diferença de custo fica por conta apenas das placas e do switch.

Os cabos de categoria 5 que usamos em redes de 100 ou 1000 megabits geralmente custam em torno de 80 centavos o metro, com mais alguns centavos por conector.

Figura 16. Cabo de rede e conector RJ45

Os cabos devem ter um mínimo de 30 centímetros e um máximo de 100 metros, a distância máxima que o sinal elétrico percorre antes que comece a haver uma degradação que comprometa a comunicação.

Existem dois tipos de cabos de rede: os cabos retos (straight), que são os cabos "normais", usados para ligar os vários micros ao hub ou switch, e os cabos cross-over, que utilizam um padrão diferente, que permite ligar diretamente dois micros, sem precisar de um hub.

Todas as placas são ligadas ao hub ou switch, que serve como uma central, de onde os sinais de um micro são retransmitidos para os demais.

É possível ligar vários hubs ou switchs entre si (até um máximo de 7) caso necessário, formando redes maiores.

A diferença entre um hub é um switch é que o hub apenas retransmite tudo o que recebe para todos os micros conectados a ele, é um tagarela. Isso faz com que apenas um micro consiga transmitir dados de cada vez e que todas as placas precisem operar na mesma velocidade (sempre nivelada por baixo, caso você coloque um micro com uma placa de 10 megabits na rede, a rede toda passará a trabalhar a 10 megabits).

Os switchs, por sua vez, são aparelhos mais inteligentes. Eles fecham canais exclusivos de comunicação entre o micro que está enviando dados e o que está recebendo, permitindo que vários pares de micros troquem dados entre si ao mesmo tempo. Isso melhora bastante a velocidade em redes com muitos micros (congestionadas).

Figura 17. Switch de 8 portas da marca Dlink

Em uma rede, cada computador deve ter sua identidade única, e esta identidade é atribuída através de um número chamado "endereço IP".

O endereço IP serve para:

Um endereço IP é formado por uma quadra de números que vai de 0 a 255 (um byte), normalmente com o formato:

número.número.número.número

Alguns exemplos:

Figura 18. Uma rede com 4 PCs com os IPs 192.168.0.1, 192.168.0.2, 192,168.0.3 e 192.168.0.4, interconectados com um switch

Os endereços IP foram divididos em 5 classes (A, B, C, D e E) com faixas de numeração bem definidas

Tabela 2. Classes dos endereços IP. (Fonte: Professor Walfredo Cirne).

ClasseMenor EndereçoMaior Endereço
A1.0.0.0126.255.255.255
B128.0.0.0191.255.255.255
C192.0.0.0223.255.255.255
D224.0.0.0239.255.255.255
E240.0.0.0247.255.255.255

Nota

Uma pergunta!

Consultando a tabela acima em qual classe você classifica a rede desta figura?

Outro conceito importante no endereçamento IP é a "Máscara de Rede" (netmask) que serve para identificar onde termina o endereço de rede (em um número IP) e onde começa o endereço de uma máquina na rede (host), através de uma operação "AND" binário entre o endereço IP e a máscara de rede. Para mais detalhes consulte o tutorial Endereçamento IP do Prof. Walfredo Cirne.

Em uma rede de computadores a informação é transmitida na forma de pacotes que é uma estrutura unitária de transmissão de dados ou uma sequência de dados transmitida por uma rede.

A informação a transmitir geralmente é quebrada em inúmeros pacotes e então transmitida. Além da parte da informação, o pacote possui um cabeçalho, que contém informações importantes para a transmissão, como o endereço do destinatário, soma para checagem de erros, prioridades, entre outras. (Fonte: Wikipedia)

6.1. Gateway e NAT.

O "Gateway", que pode ser traduzido como "portão de entrada", pode ser um PC com duas (ou mais) placas de rede, ou um dispositivo dedicado, utilizado para unir duas redes. Existem vários usos possíveis para um gateway, desde interligar duas redes que utilizam protocolos diferentes, até compartilhar a conexão com a Internet entre várias estações. (Fonte: www.hardware.com.br/termos/gateway)

Um computador da rede enviará ao gateway qualquer requisição de endereço que não faça parte da rede local. Se, por exemplo, uma rede com 4 micros, configurados com os endereços 192.168.0.1, 192.168.0.2 e 192.168.0.3 e 192.168.0.4, qualquer endereço fora do escopo 192.168.0.x será enviado ao gateway, que se encarregará de acessá-lo na Internet e entregar o resultado ao computador que fez a requisição.

Figura 19. Gateway (IP 192.168.0.1) conectando uma rede local à Internet através de um Modem 3G (USB) ou de um modem ADSL (Ex: Velox)

Quando um computador se conecta à internet através de um provedor de acesso qualquer, ele recebe do provedor um endereço IP válido.

No protocolo IPv4 um endereço IP é formado por uma quadra de números que vai de 0 a 255 (um byte), normalmente com o formato:

número.número.número.número

Para calcularmos o número máximo possível de combinações desse sistema de numeração basta multiplicarmos 256 x 256 x 256 x 256 = 4.294.967.296

Ou seja, com o protocolo IPv4 é possível gerar mais de 4 bilhões de diferentes endereços IP! Pode parecer muito, mas este número já não é suficiente para gerar números para todos os computadores e dispositivos conectados à Internet no mundo.

Dica

Na prática o número real de endereços disponíveis é menor (algo entre 3,2 e 3,3 bilhões) por causa da forma como os endereços são separados em classes.

Em meados da década de 90 surgiu o NAT (Network Address Translation - Tradução de Endereços de Rede) que se popularizou como uma ferramenta para minimizar as consequências do esgotamento dos endereços IPv4. O NAT permite que múltiplos hosts em uma rede privada usem um IP privado para se comunicar dentro da rede mas acessam a Internet usando um único endereço IP público e portanto não são visíveis na Internet.(Fonte: Wikipedia)

Neste caso o gateway se encarrega de fazer a tradução dos IPs com o NAT e faz o encaminhamento das informações (pacotes) para a máquina (host) que fez a requisição.

Apenas o gateway, que está compartilhando a conexão, possui um endereço IP "válido"(IP externo), só ele "existe" na internet.

O gateway default (ou gateway padrão) é justamente o micro da rede que tem a conexão, é ele que os outros consultarão quando precisarem acessar qualquer coisa na Internet. Por exemplo, na figura anterior com 4 PCs usando os endereços (internos) IP 192.168.0.1, 192.168.0.2, 192.168.0.3 e 192.168.0.4, o PC 192.168.0.1 está funcionando como gateway e usando o NAT, por isso ele possui um IP interno de 192.168.0.1 e um IP externo de 188.90.17.5.

Entendeu? :^)

Uma solução mais moderna para o problema do esgotamento de IPs é o protocolo IPv6, mas que ainda vai levar ainda alguns anos para ser implementado porque requer a modificação de toda a infra-estrutura da internet.

6.2. O Firewall IPTABLES

Firewall (Parede corta-fogo) na construção civil é um tipo de parede, utilizada principalmente em prédios, que contém o fogo em casos de incêndio. Mas em informática Firewall é um mecanismo de proteção de redes que controla o fluxo de dados entre as redes autorizando ou bloqueando a entrada ou saída de dados com base em um conjunto de regras.

O firewall trabalha como um fiscal de alfandega, que analisa todos os pacotes que chegam, decidindo o que deve passar e o que deve ficar retido, através de um conjunto de regras definidas.

Figura 20. Um firewall controla os pacotes que trafegam na rede com o uso de regras que estabelecem critérios para filtrar pacotes, bloquear portas específicas, sites da internet e endereços IP. (Fonte: www.taprocurandoque.com.br/firewall-conceito-e-principais-tipos)

O vídeo warriors_of_the_net mostra de forma muito didática como os pacotes de informações trafegam pela Internet.

Um firewall pode ser implementado em um computador que faz parte da rede ou em um equipamento dedicado para esta finalidade.

Existem várias alternativas de firewall disponíveis para vários sistemas: (Fonte: Wikipedia)

O iptables (www.iptables.org/) é uma interface [1] para o Netfilter, que por sua vez é um firewall incluído no kernel Linux. E o iptables é uma ferramenta (interface) que permite estabelecer regras para este firewall (Netfilter) e tem sido usado nas versões 2.4 e 2.6 do kernel Linux.

As versões 2.0.x do kernel usavam o ipfwadm/ e as versões 2.2.x usavam o ipchains como ferramenta de firewall.

O iptables funciona como um filtro de pacotes mediante regras estabelecidas. O iptables é um firewall em nível de pacotes e funciona baseado no endereço (ou porta) de origem (ou destino) do pacote, prioridade, etc. Ele funciona através da comparação de regras para saber se um pacote tem ou não permissão para passar.

As regras são como comandos passados ao iptables para que ele realize uma determinada ação (como bloquear ou deixar passar um pacote) de acordo com o endereço/porta de origem/destino, interface de origem/destino, etc. As regras são armazenadas dentro dos chains e processadas na ordem que são inseridas.((Fonte: www.guiafoca.org)

As regras são armazenadas no kernel, o que significa que quando o computador for reiniciado tudo o que fez será perdido. Por este motivo elas deverão ser gravadas em um arquivo para serem carregadas a cada inicialização.

Os pacotes que entram no kernel passam por um roteamento interno que consiste na análise e no direcionamento do pacote para as diferentes CHAINS (CORRENTES) de acordo com a TABLE (TABELA).

Importante

Você vai encontrar o termo CHAINS sendo traduzido por CADEIAS ou CORRENTES.

Para facilitar o entendimento chamo atenção do leitor(a) para visualizar o conceito de CHAINS como os diferentes FLUXOS ou CAMINHOS que os pacotes de dados podem seguir, entrando ou saindo da máquina.

No www.guiafoca.org, CHAINS são definidas como locais onde as regras do firewall definidas pelo usuário são armazenadas para operação do firewall.

No iptables, existem diversas CHAINS, a cada uma associado um certo tipo de tráfego:

O nome iptables vem do fato de internamente o iptables funcionar em cima de TABELAS que são usadas para a definição das regras de filtragem de pacotes, cada uma especializada num tipo de tratamento.

Conforme o www.guiafoca.org tabelas são os locais usados para armazenar os chains e conjunto de regras com uma determinada característica em comum.

As TABELAS existentes são:

Figura 23. Diagrama de fluxo simplificado das CHAINS (FLUXOS) e TABELAS do kernel Linux para o tráfego de pacotes.

6.2.1. Principais opções das regras de filtragem - Tabela "filter"

Essa seção é praticamente uma cópia dos sites http://eriberto.pro.br/iptables/3.html e http://www.samueldiasneto.com/doc/iptables.html.

As regras (rules) de fitragem, geralmente, são compostas com a seguinte sintaxe:

# iptables [-t tabela] [opção] [chain] [dados] [-j ação]

Exemplo:

# iptables -A FORWARD -d 192.168.1.1 -j DROP

No comando acima não foi especificada a tabela -t tabela e neste caso é usada a tabela filter (padrão). A opção -A significa Append (anexar) e neste caso está acrescentando uma nova regra à chain FORWARD. A opção -d 192.168.1.1 está definindo que a regra deve ser aplicada aos pacotes destinados ao host com endereço 192.168.1.1. E finalmente a opção -j define a ação que deve ser tomada. Neste caso -j DROP está definindo que devem ser descartados os pacotes que se enquadrarem nos critérios da regra.

Em resumo, a regra acima determina que todos os pacotes destinados à máquina 192.168.1.1 devem ser descartados.

Principais opções que podem ser usadas na criação de regras:

  • -P -> Policy (política). Altera a política da chain, ou seja, especifica a ação que deve ser executada com todos os pacotes que trafegarem na chain . A política inicial de cada chain é ACCEPT. Isso faz com que o filtro, inicialmente, aceite qualquer pacote nas chains INPUT, OUTPUT ou FORWARD. A política pode ser alterada para DROP, que irá negar o serviço da chain, até que uma opção -A entre em vigor. O -P não aceita REJECT ou LOG. Exemplos:

    #iptables -P FORWARD DROP

    Define que todos os pacotes da chain FORWARD sejam descartados.

    #iptables -P INPUT ACCEPT

    Define que todos pacotes da chain INPUT sejam aceitos.

  • -A -> Append (anexar). Acresce uma nova regra à chain. Tem prioridade sobre a opção -P. Geralmente, como buscamos segurança máxima, colocamos todas as chains em política DROP, com o -P e depois abrimos o que é necessário com o -A. Exemplos:

    #iptables -A OUTPUT -d 172.20.5.10

    Aceita os pacotes na chain OUTPUT com destino para o endereço 172.20.5.10

    A tabela filter poderia ser declarada explicitamente com a opção -t. Por exemplo:

    #iptables -t filter -A OUTPUT -d 172.20.5.10

    #iptables -A FORWARD -s 10.0.0.1 -j DROP

    Descarta todos os pacotes na chain FORWARD com origem no endereço 10.0.0.1.

    #iptables -A FORWARD -d www.chat.com.br -j DROP

    Descarta todos os pacotes na chain FORWARD com destino para o endereço www.chat.com.br.

  • -D -> Delete (apagar). Apaga uma regra. Para apagar as regras anteriores, usa-se:

    #iptables -D OUTPUT -d 172.20.5.10

    #iptables -D FORWARD -s 10.0.0.1 -j DROP

    #iptables -D FORWARD -d www.chat.com.br -j DROP

    Também é possível apagar a regra pelo seu número de ordem. Pode-se utilizar o -L para verificar o número de ordem. Por exemplo para apagar a regra 4 da chain FORWARD:

    #iptables -D FORWARD 4

  • -L -> List (listar). Lista as regras existentes. Exemplos:

    #iptables -L

    #iptables -L FORWARD

  • -F -> Flush (esvaziar). Remove todas as regras existentes. No entanto, não altera a política (-P). Exemplos:

    #iptables -F

    Remove todas as regras existentes.

    #iptables -F FORWARD

    Remove todas as regras existentes referentes à chain FORWARD.

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

6.2.2. CHAINS (ou CADEIAS ou CORRENTES) - Tabela "filter".

INPUT -> Refere-se a todos os pacotes destinados à máquina filtro.

OUTPUT -> Refere-se a todos os pacotes gerados na máquina filtro, tanto com destino local como remoto.

FORWARD -> Refere-se a todos os pacotes oriundos de uma máquina e destinados a outra. São pacotes que atravessam a máquina filtro, mas não são destinados a ela.

6.2.3. Opções relativas aos pacotes de dados - Tabela "filter".

  • -s -> Source (origem). Estabelece a origem do pacote. Geralmente é uma combinação do endereço IP com a máscara de sub-rede, separados por uma barra. Exemplo:

    #iptables -A FORWARD -s 10.0.0.1 -j DROP

    Descarta todos os pacotes na chain FORWARD com origem no endereço 10.0.0.1.

    -s 172.20.0.0/255.255.0.0

    Neste exemplo, 172.20.0.0, se refere a um endereço de rede.

    -s 172.20.5.10/255.255.255.255

    Neste exemplo, 172.20.5.10, se refere a um endereço de host, pois para hosts a máscara sempre será 255.255.255.255!

    Há um recurso para simplificar a utilização da máscara de sub-rede. Basta utilizar a quantidade de bits 1 existentes na máscara. Assim, a máscara 255.255.0.0 vira 16. A utilização fica assim:

    -s 172.20.0.0/16

    Dica

    Lembrar que cada campo corresponde a 1 byte ou 8 bits, e portanto 255.255.0.0 é representado em binário como 11111111.11111111.00000000.00000000 e por isso possui 16 bits "1". (Ver http://www.hardware.com.br/termos/mascara-de-sub-rede)

    Atenção

    É recomendável sempre que possível a especificação de endereços IP's nas regras, pois além de serem muito rápidos (pois não precisar de resolução DNS) são mais seguros para evitar que nosso firewall seja enganado por um ataque de IP spoofing.(Fonte: www.guiafoca.org)

    Outra possibilidade é a designação de hosts pelo nome. Exemplo:

    -s www.chat.com.br

    Para especificar qualquer origem, utilize a rota default, ou seja, 0.0.0.0/0.0.0.0, também admitindo 0/0.

  • -d -> Destination (destino). Estabelece o destino do pacote. Funciona exatamente como o -s, incluindo a sintaxe.

    #iptables -A OUTPUT -d 192.168.1.1/24

    Aceita os pacotes na chain OUTPUT com destino para o endereço de rede 192.168.1.1/24

  • -p -> Protocol (protocolo). Especifica o protocolo a ser filtrado. O protocolo IP pode ser especificado pelo seu número (Ver uma lista no arquivo: /etc/protocols) ou pelo nome. Os protocolos mais utilizados são udp, tcp e icmp. Exemplo:

    -p icmp

  • -i -> In-Interface (interface de entrada). Especifica a interface de entrada. As interfaces existentes podem ser vistas com o comando ifconfig.

    -i ppp0

    O sinal + pode ser utilizado para simbolizar várias interfaces. Por exemplo eth+ refere-se à eth0, eth1, eth2 etc. Exemplo:

    -i eth+

    Atenção

    A opção -i não pode ser utilizado com a chain OUTPUT

  • -o -> Out-Interface (interface de saída). Especifica a interface de saída. Similar a -i, inclusive nas flexibilidades.

    Atenção

    O -o não pode ser utilizado com a chain INPUT.

  • ! -> Exclusão. Utilizado com -s, -d, -p, -i, -o e outros, para excluir o argumento. Exemplo:

    -s ! 10.0.0.1

    Isso refere-se a qualquer endereço de entrada, exceto o 10.0.0.1.

    -p ! tcp

    Todos os protocolos, exceto o protocolo TCP.

  • --sport -> Source Port. Porta de origem. Só funciona com as opções -p udp e -p tcp. Exemplo:

    -p tcp --sport 80

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

  • --dport -> Destination Port. Porta de destino. Só funciona com as opções -p udp e -p tcp. Similar a --sport.

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

6.2.4. As "ações" (ou alvos) executadas sobre os pacotes - Tabela "filter"

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

  • 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 (envia pacote icmp unreachable).

  • LOG: Cria um log referente à regra, em /var/log/messages. Muito útil para análise de quais pacotes estão sendo descartados. Usar antes de outras ações.

6.2.5. Exemplos comentados de regras baseadas na tabela filter

#iptables -L

Lista todas as regras existentes.

#iptables -F

Apaga todas as regras sem alterar a política.

#iptables -P FORWARD DROP

Estabelece uma política de proibição inicial de passagem de pacotes entre sub-redes.

#iptables -A FORWARD -j ACCEPT

Todos os pacotes oriundos de qualquer sub-rede e destinados a qualquer sub-rede deverão ser aceitos.

#iptables -A FORWARD -s 10.0.0.0/8 -d www.chat.com.br -j DROP

Os pacotes oriundos da sub-rede 10.0.0.0 (máscara 255.0.0.0) e destinados aos hosts cujos endereços IP respondem pelo nome www.chat.com.br deverão ser descartados. Note que se a máquina possuir domínios virtuais, todos esses serão bloqueados.

#iptables -A FORWARD -s 10.0.0.0/8 -d www.chat.com.br -j REJECT

Os pacotes oriundos da sub-rede 10.0.0.0 (máscara 255.0.0.0) e destinados aos hosts cujos endereços IP respondem pelo nome www.chat.com.br deverão ser descartados. Deverá ser enviado um ICMP avisando à origem (ao contrário do comando anterior que não envia ICMP avisando à origem.

#iptables -A FORWARD -d www.chat.com.br -j DROP

Os pacotes oriundos de qualquer lugar e destinados aos hosts cujos endereços IP respondem pelo nome www.chat.com.br deverão ser descartados.

#iptables -A FORWARD -d 10.0.0.0/8 -s www.chat.com.br -j DROP

Os pacotes destinados à sub-rede 10.0.0.0 (máscara 255.0.0.0) e oriundos de hosts cujos endereços IP respondem pelo nome www.chat.com.br deverão ser descartados.

#iptables -A FORWARD -s www.chat.com.br -j DROP

Os pacotes oriundos de hosts cujos endereços IP respondem pelo nome www.chat.com.br e destinados a qualquer lugar deverão ser descartados.

6.2.5.1. Diagrama de fluxo de um pacote com uma "política fechada".

Vamos ver um exemplo muito didático do diagrama do fluxo de um pacote sujeito à uma "política fechada" e com as seguintes regras: (Fonte: http://eriberto.pro.br)

#iptables -P INPUT DROP
# iptables -A INPUT -s 10.0.0.1 -j DROP
# iptables -A INPUT -s 10.0.0.2 -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -s 172.20.0.0/16 -j ACCEPT

Figura 24. Diagrama do fluxo de um pacote com uma "política fechada". (Adaptado de: http://eriberto.pro.br)

6.2.5.2. Diagrama de fluxo de um pacote com uma "política aberta".

Agora vamos manter as mesmas regras e alterar apenas a política para uma "política aberta". (Fonte: http://eriberto.pro.br)

#iptables -P INPUT ACCEPT
# iptables -A INPUT -s 10.0.0.1 -j DROP
# iptables -A INPUT -s 10.0.0.2 -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -s 172.20.0.0/16 -j ACCEPT

Figura 25. Diagrama do fluxo de um pacote com uma "política aberta".(Adaptado de: http://eriberto.pro.br)

6.2.6. Principais opções - Tabela "nat"

-A --> Append (anexar) uma regra.

-D --> Deletar uma regra.

-F --> Flush (esvaziar). Remove todas as regras existentes, mas não altera a política (-P).

#iptables -t nat -L

Mostra as regras de NAT ativas.

#iptables -t nat -F

Apaga todas as regras de NAT existentes.

6.2.7. CHAINS (ou CADEIAS ou CORRENTES) - Tabela "nat".

  • PREROUTING -> utilizada para analisar pacotes que estão entrando no kernel para sofrerem NAT. O PREROUTING pode fazer ações de NAT com o endereço de destino do pacote. Isso é conhecido como DNAT (Destination NAT).

  • POSTROUTING -> utilizada para analisar pacotes que estão saindo do kernel, após sofrerem NAT. O POSTROUTING pode fazer ações de NAT com o endereço de origem do pacote. Isso é conhecido como SNAT (Source NAT).

  • OUTPUT -> utilizada para analisar pacotes que são gerados na própria máquina e que irão sofrer NAT. O OUTPUT pode fazer ações de NAT com o endereço de destino do pacote. Também é DNAT.

6.2.8. Opções relativas aos pacotes de dados - Tabela "nat"

  • -t -> Table (tabela). Estabelece a tabela a ser utilizada. A tabela default, por omissão, é filter. Para o mascaramento ou NAT será nat. Exemplo:

    #iptables -t nat -A ...

  • --to -> utilizado para definir IP e porta de destino, após um DNAT, ou de origem, após um SNAT. Deve ser utilizado após uma ação (-j ação). Assim:

    -j DNAT --to 10.0.0.2

    -j DNAT --to 10.0.0.2:80

    -j SNAT --to 172.20.0.2

  • --dport -> assim como -d define um host de destino, --dport define uma porta de destino. Deve ser utilizado antes de uma ação (-j ação). Antes de --dport, deve ser especificado um protocolo (-p). Exemplo:

    -d 172.20.0.1 -p tcp --dport 80 -j DNAT --to 10.0.0.2

  • -sport -> assim como -s define um host de origem, --sport define uma porta de origem. Deve ser utilizado antes de uma ação (-j ação).

  • --to-port -> define uma porta de destino, após uma ação REDIRECT.

Nota

Obs: A maioria das opções relacionadas aos pacotes de dados para a tabela filter continuam valendo para a tabale nat. Exemplo: -p servirá para definir um protocolo de rede; -d define um host de destino.

6.2.9. As "ações" (ou alvos) executadas sobre os pacotes - Tabela "nat"

  • 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 endereç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.

Em resumo, SNAT é feito quando o pacote está saindo da rede interna em direção à Internet modificando o endereço de origem e o DNAT é feito quando o pacote está chegando da Internet em direção a uma máquina da rede interna modificando o endereço de destino.

E MASQUERADE é um tipo especial de SNAT usado para conectar a sua rede interna à internet quando você recebe um IP dinâmico de seu provedor (como em conexões ppp). Todas as operações de IP Masquerading são realizadas no chain POSTROUTING.

Se você tem um IP fixo, deve usar o SNAT.

Importante

Uma etapa importante para permitir o redirecionamento de pacotes através do firewall é habilitar o conteúdo do arquivo /proc/sys/net/ipv4/ip_forward para o valor "1" com o comando:

#echo 1 >/proc/sys/net/ipv4/ip_forward

Para tornar essa configuração permanente é possível editar o arquivo /etc/sysctl.conf alterando para "1" a opção abaixo:


# Controls IP packet forwarding
net.ipv4.ip_forward = 1

6.2.10. Exemplos comentados de regras baseadas na tabela nat

#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Todos os pacotes que saírem pela interface ppp0 (modem) serão mascarados. Isso dá um nível de segurança elevado à rede que está atrás da ppp0. É uma boa regra para navegação na Internet. Note que esse tipo de mascaramento não usa SNAT.

#iptables -t nat -A POSTROUTING -s 192.168.1.2/32 -o ppp0 -j MASQUERADE

O comando acima faz IP Masquerading de todo o tráfego da máquina com IP 192.168.1.2 indo para a interface ppp0. O endereço IP dos pacotes vindos de 192.168.1.2 são substituídos pelo IP oferecido pelo provedor de acesso no momento da conexão, quando a resposta é retornada a operação inversa é realizada para garantir que a resposta chegue ao destino. Nenhuma máquina da internet poderá ter acesso direto à máquina conectada via Masquerading.

E para fazer o IP Masquerading de todas as máquinas da rede 192.168.1.* :

#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE

#iptables -t nat -A POSTROUTING -d 0/0 -j MASQUERADE

Tem o mesmo efeito da regra anterior. No entanto, parece ser menos segura, pois estabelece que qualquer pacote destinado a qualquer outra rede, diferente da interna, será mascarado. A regra anterior refere-se aos pacotes que saem por determinada interface. A opção -d 0/0 poderia ser -d 0.0.0.0/0 também. É uma outra regra para navegação na Internet.

# iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.2 --dport 80 -j DNAT --to 127.20.0.1

Redireciona todos os pacotes destinados à porta 80 da máquina 10.0.0.2 para a máquina 172.20.0.1. Esse tipo de regra exige a especificação do protocolo. Como não foi especificada uma porta de destino, a porta 80 será mantida como destino.

# iptables -t nat -A OUTPUT -p tcp -d 10.0.0.10 -j DNAT --to 10.0.0.1

Qualquer pacote TCP, originado na máquina filtro, destinado a qualquer porta da máquina 10.0.0.10, será desviado para a máquina 10.0.0.1 .

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

Essa regra faz com que todos os pacotes que irão sair pela interface eth0 tenham o seu endereço de origem alterado para 200.20.0.1.

# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 172.20.0.1

Todos os pacotes que entrarem pela eth0 serão enviados para a máquina 172.20.0.1.

# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to 172.20.0.1-172.20.0.3

Aqui haverá o load balance. Todos os pacotes que entrarem pela eth0 serão distribuídos entre as máquinas 172.20.0.1 , 172.20.0.2 e 172.20.0.3.

# iptables -t nat -A PREROUTING -s 10.0.0.0/8 -p tcp --dport 80 -j REDIRECT --to-port 3128

Todos os pacotes TCP que vierem da rede 10.0.0.0, com máscara 255.0.0.0, destinados à porta 80 de qualquer host, não sairão; serão redirecionados para a porta 3128 do filtro. Isso é o passo necessário para fazer um proxy transparente. O proxy utilizado deverá aceitar esse tipo de recurso. No caso, o Squid, que aceita transparência, deverá estar instalado na máquina filtro, servindo na porta 3128.

# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT 200.20.5.0/24

Uma situação interessante: todos os pacotes que saírem da rede 192.168.1.0 serão transformados em 200.20.5.0.

Dica

Use o comando cat /proc/net/ip_conntrack para listar todas as conexões atuais tratadas pelo módulo nat!

6.3. Alguns comandos úteis para a configuração de uma rede Linux

A seguir comentamos alguns comandos úteis para a configuração das interfaces,

6.3.1. Módulos

Para o sistema se conectar com outras máquinas em uma rede primeiramente é necessário configurar a interface de rede (placa de rede) para que o kernel (núcleo do sistema) consiga "conversar" com esse dispositivo físico.

Para isso, o kernel precisa de um "driver" (chamado de "módulo" no Linux ou carregar dinâmicamente o "módulo".

O comando lsmod serve para listar o módulos que estão carregados na memória pelo kernel.


$ lsmod 
Module                  Size  Used by
sg                     26964  0 
sr_mod                 13316  0 
cdrom                  30176  1 sr_mod
joydev                  8480  0 
usbhid                 35904  0 
hid                    33184  1 usbhid
ff_memless              4392  1 usbhid
option                 10656  0 
usbserial              26472  1 option
...

Para carregar um módulo pose-se usar o comando insmod ou modprobe. A diferença entre os dois é que o comando modprobe resolve e carrega as dependências do módulo, isto é, se o módulo "A" necessita que o módulo "B" esteja carregado, usar modprobe A carregará os dois Exemplo:


# modprobe 8139too

Alguns módulos necessitam de alguns parâmetros ao serem carregados como, por exemplo, IRQ, I/O, opções de velocidade, etc. Para obter mais informações sobre um módulo, utilize o comando modinfo. Por exemplo, para obter a lista de parâmetros de um módulo use modinfo -p módulo.

O comando rmmod serve para remover um módulo que não está mais em uso. Também podemos usar o comando rmmod com a opção "-r", para se obter um efeito análogo ao carregamento de módulos com dependências, mas para remover, é claro.

6.3.2. O comando mii-tool

O comando mii-tool serve para verificar e alterar o estado "Media-Independent-Interface" (MII) de uma interface. O MII é um recurso utilizado pela maioria dos adaptadores "fast ethernet" para negociar a velocidade do link e o full/half duplex.

Atenção

Mas, nem todos os adaptadores suportam esse recurso!

Por exemplo o meu laptop IBM (X60) retorna a mensagem:


# mii-tool 
SIOCGMIIREG on eth0 failed: Input/output error
SIOCGMIIREG on eth0 failed: Input/output error
  No MII transceiver present!.

6.3.3. O comando ifconfig

O ifconfig é o principal comando para configurarmos interfaces no Linux.

Alguns exemplos de uso do comando ifconfig para configurar a interface de rede.

Para exibir informações sobre as interfaces de rede basta digitar ifconfig (se estiver logado como root) ou /sbin/ifconfig para indicar o caminho completo do comando (se estiver logado como um usuário comum.


$ /sbin/ifconfig 
eth0      Link encap:Ethernet  Endereço de HW 00:16:d3:24:6a:fb  
          UP BROADCASTMULTICAST  MTU:1500  Métrica:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Memória:ee000000-ee020000 

lo        Link encap:Loopback Local  
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACKRUNNING  MTU:16436  Métrica:1
          RX packets:868 errors:0 dropped:0 overruns:0 frame:0
          TX packets:868 errors:0 dropped:0 overruns:0 carrier:0
          colisões:0 txqueuelen:0 
          RX bytes:72632 (70.9 KiB)  TX bytes:72632 (70.9 KiB)

Para levantar (ativar) uma interface de rede (por exemplo a interce eth0):

# ifconfig eth0 up

Para configurar e levantar uma interface com um determinado IP (Ex: 10.0.0.1) e uma máscara de rede (netmask) 255.255.255.0:

# ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up

Para mudar a MTU [2] de uma interface: (Fonte: Dica)

# ifconfig eth0 mtu 1440

O ifconfig também pode ser utilizado para se alterar o endereço MAC [3] da placa! Para alterar esse endereço (Ex: para 00:11:22:33:44:55) é necessário que a placa esteja inativa. Exemplo:

# ifconfig eth0 down
# ifconfig eth0 hw ether 00:11:22:33:44:55
# ifconfig eth0 up

6.3.3.1. Links consultados durante a organização desta seção:

Notas

[1]

O dicionário define interface como o conjunto de meios planejadamente dispostos sejam eles físicos ou lógicos com vista a fazer a adaptação entre dois sistemas para se obter um certo fim cujo resultado possui partes comuns aos dois sistemas.

Pode ter o significado, na Informática, de interconexão entre dois equipamentos que possuem diferentes funções e que não se poderiam conectar diretamente, como, p. ex., o modem.

Interface em Programação de Computadores, é um programa (ou programas) que estabelece a fronteira de comunicação entre dois outros programas. (Fonte: Wikipedia)

[2]

Tamanho de pacote, muitas vezes referida como MTU (unidade de transmissão máxima) é a maior quantidade de dados que podem ser transferidos em uma estrutura física na rede. Para redes Ethernet a MTU é de 1500 bytes, para PPPoE a MTU é 1492 (Ex: Velox) e conexões discadas geralmente usam 576.

[3]

O endereço MAC (do inglês Media Access Control) é o endereço físico de 48 bits da estação, ou, mais especificamente, da interface de rede. O protocolo é responsável pelo controle de acesso de cada estação à rede Ethernet.

O MAC é uma série de 12 dígitos hexadecimais agrupados dois a dois e separados por dois pontos. Ex: 00:11:22:33:44:55

Os três primeiros octetos são destinados à identificação do fabricante, os 3 posteriores são fornecidos pelo fabricante.É um endereço único, i.e., não existem, em todo o mundo, duas placas com o mesmo endereço.