Conhecendo o IPTables - Compartilhamento de Conexão, Mascaramento e Redirecionamento de Pacotes - Parte 2


Olá, 🖖🏼

Na Parte 1 do artigo sobre iptables analisamos como o firewall funciona. Vamos agora saber como ele trabalha com compartilhamento de conexão, mascaramento e redirecionamento de pacotes.

Compartilhamento de Conexão.

Vamos ter a rede 192.168.1.0/255.255.255.0 como exemplo. Vejam o comando abaixo:

iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

Os hosts da minha rede podem utilizar a internet através do roteamento dinâmico. A linha que habilita o redirecionamento é essa:

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

Mas vale observar que se inserirmos somente esta linha no script, a cada vez que reiniciar o sistema será necessário a ativação do roteamento. Para que não percamos o roteamento é necessário editar o arquivo /etc/sysctl.conf e inserimos ou modificamos a linha do modo que fique assim:

net.ipv4.ip_forward=1

Voltando ao exemplo, temos que verificar uma ação nova ( MASQUERADE ), servindo para que as máquinas da rede interna possam acessar a internet usando o IP externo do Gateway. Assim as máquinas da rede interna ficarão invisíveis para a rede externa. Para que uma máquina da rede interna possa executar serviços onde cuja necessita que o IP da máquina seja visível para redes externas, será necessário fazer um redirecionamento de IP’s ou Portas.

Vamos ter a maquina de IP 192.168.0.50 como exemplo, vamos supor que ela precise executar um serviço de FTP, na qual tem que ser feito a visibilidade da máquina. Podemos fazer com que o Firewall, cujo IP externo seja 200.200.100.100 receba estes pacotes e retransmita:

iptables -t nat -A PREROUTING -s 200.200.100.100 -i eth0 -j DNAT --to 192.168.0.50
iptables -t nat -A POSTROUTING -s 200.200.100.100 -o eth0 -p tcp --dport 21 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.50 -o eth0 -j SNAT --to 200.200.100.100
iptables -t nat -A POSTROUTING -s 192.168.0.50 -o eth0 -p tcp --dport 21 -j ACCEPT

Note que nas regras acimas, temos mais duas ações a SNAT e DNAT:

  • SNAT: É utilizada quando queremos alterar o endereço de origem do pacote. Aqui nós aplicamos para fazer o mascaramento. (Obs.: Somente a Chain POSTROUTING pode ser usada na ação SNAT).
  • DNAT: É utilizada quando desejamos alterar o endereço de destino do pacote. Está ação é aplicada para fazer redirecionamento de portas, redirecionamento de servidor, load balance e proxy transparente. As Chains que podem ser utilizadas para esta ação são PREROUTING e OUTPUT.

Outra Ação –redirect

A REDIRECT pode ser utilizada para fazer redirecionamento de portas, quando fazemos um redirecionamento de portas usamos o dado –to-port após a ação REDIRECT:

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

A regra acima faz com que todos os pacotes direcionados a porta 80 sejam redirecionados para a porta 3128.

Quando usamos a tabela nat, é preciso inserir o parâmetro -t para especificar a tabela:

-t nat

Note que quando omitimos este parâmetro usamos a tabela filter por padrão. Além destas ações, veja que existe também um novo dado.

–to = Este dado server para definir.

iptables -t nat -A PREROUTING -p tcp -d 200.200.100.100 --dport 80 -j DNAT --to 192.168.0.50:3128

Aqui, como na regra anterior os pacotes são redirecionados para a máquina 192.168.0.50, mas neste caso especificamos a porta, ou seja, porta 3128.

Opções e observações.

Vale observar a respeito da ordem das regras e manejo. Uma delas é que a primeira regra tem prioridade sobre a segunda caso ambas estejam em conflito, veja:

iptables -A FORWARD -p tcp –syn -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -p tcp –syn -s 192.168.1.0/24 -j DROP

A regra que terá validade será a primeira.

Podemos ver as regras em execução com o comando:

iptables -L

–line-number = Está opção mostra o número das regras

iptables -L --line-number

Para listar as Regras de Nat com o número de linhas:

iptables -L -t nat –line-numer

Para limpar todas as regras e tabelas usamos os comandos abaixo:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

Para que tudo possa funcionar corretamente é necessário primeiramente que todos os módulos necessários estejam carregados.

modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_queue
modprobe ip_tables
modprobe ipt_LOG
modprobe ipt_MARK
modprobe ipt_MASQUERADE
modprobe ipt_MIRROR
modprobe ipt_REDIRECT
modprobe ipt_REJECT
modprobe ipt_TCPMSS
modprobe ipt_TOS
modprobe ipt_limit
modprobe ipt_mac
modprobe ipt_mark
modprobe ipt_multiport
modprobe ipt_owner
modprobe ipt_state
modprobe ipt_tcpmss
modprobe ipt_tos
modprobe ipt_unclean
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat

É importante lembrar que as regras de iptables devem seguir uma ordem definida, ou seja, a regra posterior deve estar de acordo com a regra anterior, para que tudo corra sem problemas:

iptables -P FORWARD -j DROP
iptables -A FORWARD -s 192.168.0.0/24 -d 10.0.0.0/8 -j ACCEPT

Considerações

O Iptables tem inúmeras possibilidades de regras, É praticamente impossível citar todos os parâmetros e regras que podemos utilizar. Fica como orientação ao administrador estudar os mínimos detalhes para poder aplicar as regras mais convenientes para a sua rede. E sua rede tem uma ferramenta fortíssima que irá proteger seus dados e sua rede de possíveis ataques externos.

Dúvidas? Postem nos comentários!
👋🏼 Até a próxima!


Johnny Ferreira
johnny.ferreira.santos@gmail.com
http://www.tidahora.com.br


comments powered by Disqus