SNAT com iptables

Até agora, discutimos NAT princípios gerais, tipos de NAT, e que cada tipo de NAT faz.
netfilter / iptables pode ser usado para fazer NAT em qualquer uma das formas que discutimos. Na verdade, há muitas coisas que você pode fazer com o iptables nesta área e nós vamos tentar cobrir o máximo possível neste artigo. Antes de chegarmos lá, vamos ver o que temos de ser capazes de executar com êxito o NAT no Linux.

Configurando o Kernel

Normalmente, cada distribuição do Linux vem com um kernel compilado com suporte netfilter, iptables, e todos os módulos necessários para a realização de Network Address Translation.
Um tutorial muito bom sobre a compilação do Linux kernels 2.4 e 2.6 é escrito por Kwan Lowe e pode ser encontrado em http://www.digitalhermit.com/linux/Kernel-Build-HOWTO.html
Ao compilar um novo kernel e recompilar o kernel que você tem, você deve definir NETFILTER y = a fim de utilizar o iptables. Em kernels 2.6, esta opção é geralmente encontrado em Os drivers de dispositivo | Rede de apoio | Networking support (NET [= y]) | Networking opções, Mas realmente depende da versão do kernel.
Por exemplo, no kernel 2.6.14, esta opção é encontrado em Redes | Networking Options.
Se você usar o make menuconfig ou make xconfig para configurar o kernel para recompilar, selecione Redes | Networking opções | Rede de filtragem de pacotes (substitui o ipchains) | IP: Netfilter Configuration.
No IP: Netfilter Configuration seção você encontrará as opções necessárias para NAT da seguinte forma:
IP_NF_CONNTRACK ou Monitoramento de conexão (necessário para masq / NAT) mantém um registro dos pacotes IP que passar pela máquina, a fim de passá-los corretamente para as extremidades NATed quando as solicitações feitas daquelas são respondidas. Isso é vital para o NAT. Se você disser Não aqui, você não será capaz de executar NAT.

O netfilter Tabela nat

A tabela NAT contêm três cadeias de PREROUTING, POSTROUTING e OUTPUT. Cada cadeia pode conter regras que são analisadas seqüencialmente até que uma das regras coincide com um pacote, o mesmo que para as cadeias da tabela netfilter. Essas cadeias podem ser visualizados através da emissão do comando iptables-t nat-L.
os módulos e iptable_nat ip_conntrack aquando da emissão de todos os comandos com o iptables-t nat; portanto, não há necessidade de usar utilitários Linux insmod ou modprobe para NAT para trabalhar.
A cadeia OUTPUT não é totalmente suportado, então teremos de ignorar que, por enquanto.
As chains PREROUTING e POSTROUTING têm nomes significativos. A cadeia PREROUTING é analisado pelo kernel antes de qualquer decisão de encaminhamento é feito. Portanto, o que devemos fazer na cadeia PREROUTING é mudar o endereço do IP de destino e em seguida, deixar que o processo de roteamento para encontrar o destino que nós apenas alterado (DNAT).
A cadeia POSTROUTING contém regras que analisa o kernel depois de uma decisão de encaminhamento é feito. Isto significa que temos um caminho para o destino, e assim nós podemos mudar o endereço IP de origem, se esse caminho está fora da nossa rede (SNAT).

SNAT com iptables

SNAT é um dos tipos mais comumente usados de NAT com o iptables por causa da topologia utilizada.
Vamos ver, por exemplo, o seguinte cenário:
Rede 192.168.1.0/24 está em nosso escritório. Nós temos uma conexão Ethernet do nosso fornecedor, que atribuiu-nos a 1.2.3.1/30 endereço IP eo gateway padrão 1.2.3.2.
Todos os computadores na rede 192.168.1.0/24 que o gateway padrão definido como 192.168.1.1.
Nosso roteador Linux possui duas interfaces Ethernet:

  • Eth0, com o endereço IP 192.168.1.1 e máscara 255.255.255.0, está ligado a um interruptor que conecta outros dispositivos na rede 192.168.1.0/24.
  • Eth1, com o endereço IP 1.2.3.1 e máscara de rede 255.255.255.252, está ligado a CPE do provedor (Customer Premises Equipment), que pode ser um modem DSL, cabo modem, conversor de mídia, etc
  

Podemos definir o SNAT para que todos os dispositivos na rede 192.168.1.0/24 acesso à Internet com apenas uma regra:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -J SNAT - to 1.2.3.1

Este comando tem o mesmo efeito que o comando a seguir, que usaria se o endereço IP do Eth1 foram atribuídos dinamicamente, ou se foi utilizado um modem dial-up em vez de uma placa Ethernet:


iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -J MASQUERADE

Digamos que os nossos filtros de prestador de fora todos os portos superiores a 1024. Neste caso, teremos de mudar a porta de origem, bem como, e não apenas o endereço IP de origem. Isso pode ser feito:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24-j SNAT - to 1.2.3.1:1-1024

O usuário do portátil visto na figura anterior é um fã de IRC e ele dá-nos uma chamada dizendo que ele não pode se conectar a qualquer rede de IRC. Isto significa que o módulo ip_conntrack precisa de um pouco de ajuda, e nós podemos dar a ele através da inserção do módulo ip_conntrack_irc no kernel. Além disso, podemos querer que os usuários fazem conexões FTP bem sucedida, e assim que nós queremos adicionar o módulo ip_conntrack_ftp também.

ip_conntrack_irc # modprobe ou insmod ip_conntrack_irc
ip_conntrack_ftp modprobe ip_conntrack_ftp # insmod ou

Depois de algumas semanas, o usuário de laptop convenceu os outros usuários da rede 192.168.1.0/24 do quão maravilhoso é o IRC, por isso, temos cerca de 20-30 usuários que se conectam à rede de IRC mesmo. Agora, eles começaram a queixar-se como é difícil ficar ligado na rede de IRC, porque a rede de IRC só permite que algumas conexões do mesmo endereço IP. Nós figuramos que 32 endereços IP são o suficiente para eles, de modo a que chamamos o provedor atribuir-nos um / 27 sub-rede IP pública. Por alguns dólares extra, atribuir-nos 1.2.4.0/27. Temos de mudar a regra inicial:

 

iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -J SNAT - to 1.2.4.0-1.2.4.32

Eles param de reclamar, mas nós percebemos que nós não usamos o endereço IP público do nosso roteador Linux para NAT anymore. Vamos acrescentar que também, por isso vamos dar-lhes um endereço IP adicional:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24-j SNAT - to 1.2.4.0-1.2.4.32 - Para 1.2.3.1

Um dos nossos usuários se em um argumento no IRC, e fica inundada durante SNAT Mapps seu endereço IP para 1.2.4.15. Inundação nosso fornecedor sistema de detecção automática de filtros que o endereço IP e envia-nos um e-mail informando-nos sobre isso. Precisamos parar de SNAT para mapear todos os endereços internos para que o endereço IP, por isso, faça o seguinte:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24-j SNAT - Para 1.2.4.0-1.2.4.14 - para 1.2.4.16-1.2.4.32 - para 1.2.3.1

Um rapaz da contabilidade com o endereço IP 192.168.1.19 reclama que ele não pode acessar todos os computadores com endereços IP em 192.168.1.32. É possível que ele tenha mudado a sua máscara de rede 255.255.255.227, e assim todos os pacotes IP do seu computador para computadores em 192.168.1.0/24 que não estão na 192.168.1.0/27 passar pelo roteador Linux e obter SNATed. Para resolver este problema, temos duas alternativas.
A primeira seria a não SNAT 192.168.1.0/24 quando o destino é outro computador na 192.168.1.0/24:


iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -D! 192.168.1.0/24 -J SNAT - to 1.2.4.0-1.2.4.32 - para 1.2.3.1

A segunda opção que temos é a SNAT apenas os pacotes que saem na eth1:

iptables-t nat-A POSTROUTING-s 192.168.1.0/24 -O eth1 -J SNAT - to 1.2.4.0-1.2.4.32 - para 1.2.3.1

Nosso provedor ligado em outro local da nossa empresa com o mesmo equipamento, e já que estamos na mesma VLAN, não temos para construir um túnel entre os roteadores em cada local, mas apenas via as redes através do roteador Linux naquele local . Em outro site, temos a rede 192.168.2.0/24. Precisamos deixar os computadores em nossos computadores de acesso à rede na rede 192.168.2.0/24 sem SNATing eles:

iptables-t nat-I POSTROUTING-s 192.168.1.0/24-d 192.168.2.0/24-j ACCEPT

Este comando irá inserir a regra antes da regra NAT, por isso se algum pacote de 192.168.1.0/24 é destinado a qualquer IP na rede 192.168.2.0/24, esta regra irá corresponder a cadeia e não será analisado posteriormente, de modo SNAT não terá lugar.
Jane, nossa secretária, é famosa por seu bom café, mas desde que comecei a febre IRC, ela não está fazendo nada. O gerente está zangado sobre isso, mas ela não quer fogo Jane porque ela é viciada em seu famoso café, por isso ela vem nos pedir para fazer algo sobre ele. Há muitas coisas que podemos fazer nesta matéria, por exemplo pacotes queda de Jane (192.168.1.31) ao tentar acessar portas 6666-6669 na cadeia POSTROUTING:

iptables-t nat-I POSTROUTING-s 192.168.1.31 -P tcp - dport 6666:6669 -J DROP

Podemos querer perguntar ao gerente que Jane é permitido fazer. Por exemplo, se o gestor quer permitir Jane acesso à web só, podemos fazer o seguinte:

iptables-t nat-I POSTROUTING-s 192.168.1.31 -P tcp - dport! 80 -J DROP

Esta regra não SNAT Jane endereço IP ao tentar acessar algo que não seja a porta 80 TCP, mas vai SNAT seu endereço IP ao acessar os serviços UDP, pois os pacotes UDP não irá corresponder a esta regra, assim ela será capaz de acessar qualquer servidor de DNS fora da nossa rede.

DNAT com iptables

Vamos continuar com o cenário anterior para DNAT também. Um dia, o gerente chama-nos dizendo que ela precisa acessar seu computador de casa. Claro que ela não pode fazer isso por causa do seu endereço IP privado 192.168.1.50. Decidimos atribuir um dos endereços IP públicos que nós temos para o seu computador do escritório, mas se tivéssemos que criar um alias na eth0, para isso, nós não apenas perder alguns endereços de IP, mas ela também não será no mesmo rede como os outros. A melhor solução é a Mapa um endereço IP público (digamos 1.2.4.1) para resolver o seu computador do escritório do IP privado (192.168.1.50). Este é, naturalmente, DNAT:

iptables-t nat-A PREROUTING-d 1.2.4.1 --j DNAT - to 192.168.1.50

Portanto, a próxima coisa a fazer é ligar para ela e dizer-lhe que sempre que ela tenta se conectar ao seu computador do escritório de casa, ela deve se conectar a 1.2.4.1.
Nosso servidor de intranet tem o endereço IP 192.168.1.100. Um cara do departamento financeiro tem uma conexão de banda larga e nos pergunta se ele pode acessar o servidor de intranet a partir de casa. Ele dá-nos o seu endereço IP público como 1.2.5.17. Dizemos-lhe que a partir de sua casa, ele deveria tentar o endereço IP 1.2.4.2 no seu navegador, e nós executamos:

iptables-t nat-A PREROUTING-s 1.2.5.17-d 1.2.4.2 --p tcp - dport 80-j DNAT - to 192.168.1.100

Nós pensamos que poderíamos querer SSH para o servidor de intranet em qualquer lugar. Não seria uma idéia muito sábia para mapear um endereço IP para o servidor de intranet, pois é vital para a nossa empresa, e se um bug SSH é descoberto, não queremos que o servidor a ser cortado. Uma boa idéia seria mapear uma porta número alto para a porta SSH no servidor de intranet (este é o PAT ou NAPT).

iptables-t nat-A PREROUTING-d 1.2.4.2 -P tcp - dport 65521-j DNAT - to 192.168.1.100:22

Dessa forma, quando não estamos no escritório e queremos SSH para o servidor de intranet, abrimos uma conexão SSH para 1.2.4.2 port 65521.
Depois de um tempo, suponha que instalou um servidor web com o endereço IP 192.168.1.200. O servidor web é www.mycompany.whatever e pontos de DNS para 1.2.4.5. Para ter acesso ao mundo exterior, podemos executar o seguinte:

iptables-t nat-A PREROUTING-d 1.2.4.5-p tcp - dport 80-j DNAT - to 192.168.1.200

Transparent Proxy

O proxy transparente é uma maneira de forçar os usuários a utilizar um servidor proxy, mesmo se seus navegadores estão configurados para não. Você provavelmente conhece os benefícios de usar um servidor proxy poupança de largura de banda para páginas em cache e implementação de controle de acesso (por exemplo, negar downloads de arquivos que têm extensões perigosas).
Podemos realizar proxy transparente para todos ou alguns usuários para os impedir de ignorar o proxy quando quiserem. Isto é especialmente bom para os computadores das crianças para lhes negar o acesso a sites sexualmente explícito, por exemplo.
Em nosso roteador Linux, nós instalamos um servidor de proxy Squid com cache algum conteúdo da web. Além disso, queremos negar o acesso a sites de sexo ou downloads maliciosos para os usuários. Os usuários não estão muito satisfeitos sobre como usar o nosso servidor proxy e, normalmente, removê-lo da sua configuração do navegador. Não podemos obrigá-los a usar o servidor proxy de qualquer maneira. Se o servidor proxy escuta na porta 3128 vamos fazer o seguinte:

iptables-t nat-A PREROUTING-s 192.168.1.0/24 -P tcp - dport 80-j REDIRECT - to-port 3128

Se queremos permitir que o gerente (que tem o endereço IP 192.168.1.50) para ignorar o servidor proxy, fazemo-lo assim:

iptables-t nat-I PREROUTING-s 192.168.1.50 --p tcp - dport 80-j ACCEPT

Portanto, esta regra será compensada na cadeia PREROUTING, e ela será SNATed na cadeia POSTROUTING.

um artigo submetido por Philip A Clare


Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre.
Importante: Este artigo "SNAT com iptables" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.


Online: 383 users browsing the articles directory