Segunda, 5 de Janeiro de 2009



Redirecionando conexões SSH para um outro gateway

Por: Flavio Torres - flaviotorres[@]linuxmasters.info
Publicado em: 01/09/2008

O objetivo desta dica é fazer com que conexões destinadas à um serviço, por exemplo: SSH, MySQL, Postgres, TS, etc... saiam por um único gateway de sua rede.

Por exemplo: Temos 3 links/3 gateways de diferentes operadoras e com diferentes velocidades, entretanto para conexões SSH devemos utilizar apenas um gateway. Para evitar a troca de gateway na hora do rush, que tal criarmos uma tabela de roteamento e dizer ao firewall que apenas as conexões destinadas a SSH sairão pelo gateway 2?

Mão na massa!

No Debian, necessitaremos do pacote iproute2, o que facilmente conseguimos com:

apt-get install iproute2

Então, vamos dar um nome a nossa tabela de roteamento, basta adicionar no arquivo /etc/iproute2/rt_tables a linha:

200 ssh

Valor 200, nome ssh.

Agora, vamos as regras:

ip route add 192.168.0.0/24 dev eth0 table ssh
ip route add default dev eth0 via 192.168.0.2 table ssh
ip route flush cached
iptables -t mangle -A POSTROUTING -p tcp --sport 22 -s 192.168.0.0/24 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp --sport 22 -s 192.168.0.0/24 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
iptables -t mangle -A INPUT -p tcp --dport 22 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp --sport 22 -s 192.168.0.0/24 -j MARK --set-mark 1
iptables -t mangle -A FORWARD -p tcp --sport 22 -s 192.168.0.0/24 -j MARK --set-mark 1
iptables -t mangle -A FORWARD -p tcp --dport 22 -j MARK --set-mark 1
ip rule add fwmark 1 lookup ssh
ip route flush cached

Feito, já está tudo funcionando, simples, não?

Considerações:
Rede interna: eth0
Primeira linha: Digo para adicionar na tabela ssh a rede 192.168.0.0/24 que é acessível pelo dispositivo eth0
Segunda linha: Digo que o gateway da tabela ssh é a máquina 192.168.0.2 que é acessível pelo dispositivo eth0
Da quarta à décima linha: São tratamentos especiais do pacote (tabela mangle) onde eu adiciono regras dizendo que o pacote com origem (--sport), destino (--dport) a porta 22 devem, após ser roteado (POSTROUTING), antes de ser roteado (PREROUTING), na entrada (INPUT), na saída (OUTPUT) e no encaminhamento (FORWARD), marcado com a flag 1
Décima primeira linha: Enfim, crio uma regra dizendo que os pacotes marcados devem ser tratados pela tabela ssh
Décima segunda linha: flush e lenha!

 


Copyright© 2006 flaviotorres.com.br . Todos os direitos reservados.