Iptables + Iproute (2 links + balanceamento)

1. Iptables + Iproute (2 links + balanceamento)

Supzica
supzica

(usa Debian)

Enviado em 29/05/2013 - 17:08h

Meus caros.

Estou levando um surra para testar/implementar um ambiente, e gostaria de ajuda da comunidade.

Tenho 1 firewall com GNU/Linux Debian 6, operando sem problemas.

Agora tenho a necessidade de adicionar um 2º link, na qual desejo utilizar somente para um protocolo especifico (RDP - TCP 3389), para acessar um aplicação de um fornecedor.

Sendo assim, terei 1 Link (GVT) para produção (e-mail, navegação e etc.).

E o 2º Link, exclusivo para acesso RDP (TCP/3389) em uma aplicação externa.

Desta forma toda a produção irá utilizar o link da GVT como já vem sendo realizado.

E o link da OI vai ficar exclusivo para a utilização para acesso ao sistema.


Cenário:

Rede Local:
Rede: 192.168.0.0/24
eth0: 192.168.0.254

Link GVT:
Rede: 10.1.1.0/24
eth1: 10.1.1.1
gw: 10.1.1.253

Link OI:
Rede 172.0.0.0/24
eth2: 172.0.0.2
gw: 172.0.0.1


Já alterei o arquivo "/etc/iproute2/rt_tables", ficando da seguinte forma:

255 local
254 main
253 default
0 unspec
250 gvt
251 oi


Segue abaixo o modelo do meu script firewall em produção:
OBS: Ainda não foi alterado, pois não sei como marcar os pacotes e etc.


#!/bin/bash

/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp

case "$1" in

start)

################################## tabela filter #######################################

##### flush #####
/sbin/iptables -F

##### apaga todas as user chains #####
/sbin/iptables -X

##### politicas padrão #####
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT DROP


##### chain INPUT #####

### stateful ###
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

### regras para redes que não fazem parte da internet ###
/sbin/iptables -A INPUT -p ALL -i eth0 -d 192.168.0.255 -j ACCEPT
/sbin/iptables -A INPUT -p ALL -i lo -s 127.0.0.1 -j ACCEPT
/sbin/iptables -A INPUT -p ALL -i lo -s 10.1.1.1 -j ACCEPT
/sbin/iptables -A INPUT -p ALL -i lo -s 192.168.0.254 -j ACCEPT
/sbin/iptables -A INPUT -p ALL -i eth0 -s 192.168.0.0/24 -j ACCEPT

# Limitar resposta do ping a 1 por segundo
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

### ssh ###
/sbin/iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.254 -p tcp -m multiport --dport 2244 -j ACCEPT
/sbin/iptables -A INPUT -i eth1 -p tcp -m multiport --dport 2244 -j ACCEPT

### squid ###
/sbin/iptables -A INPUT -p tcp -i eth0 -s 192.168.0.0/24 -d 192.168.0.254 --dport 3128 -j ACCEPT

### Publica Servidor WEB / SARG ###
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT


##### chain forward #####

### stateful ###
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

### spoofing ###
# ext #
/sbin/iptables -A FORWARD -o eth1 -d 192.168.0.0/24 -j DROP
/sbin/iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -j DROP
# int #
/sbin/iptables -A FORWARD -o eth0 ! -d 192.168.0.0/24 -j DROP
/sbin/iptables -A FORWARD -i eth0 ! -s 192.168.0.0/24 -j DROP

### ICMP ###
/sbin/iptables -A FORWARD -p icmp -j ACCEPT

# Acesso remoto RDP - SERVIDOR -> 192.168.0.254
/sbin/iptables -A FORWARD -p tcp --dport 4100 -d 192.168.0.254 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp --dport 4100 -s 192.168.0.254 -j ACCEPT

### ftp, smtp, smtps, pop, pops, imap, imaps ###
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -o eth1 -p tcp -m multiport --dport 21,25,465,110,995,143,993 -j ACCEPT

### dns ###
/sbin/iptables -A FORWARD -p udp -i eth0 -s 192.168.0.0/24 -o eth1 --dport 53 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -i eth0 -s 192.168.0.0/24 -o eth1 --dport 53 -j ACCEPT

### squid ###
/sbin/iptables -A FORWARD -p tcp -i eth0 -s 192.168.0.0/24 -o eth1 --dport 3128 -j ACCEPT

### RDP ###
/sbin/iptables -A FORWARD -p tcp -i eth0 -s 192.168.0.0/24 -o eth1 --dport 3389 -j ACCEPT

### Libera Conectividade Social ###
/sbin/iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -o eth1 -d 200.201.174.204 -p tcp -m multiport --dport 443,2631 -j ACCEPT


##### chain OUTPUT #####
/sbin/iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT
/sbin/iptables -A OUTPUT -p ALL -s 10.1.1.1 -j ACCEPT
/sbin/iptables -A OUTPUT -p ALL -s 192.168.0.254 -j ACCEPT

/sbin/iptables -A OUTPUT -p icmp -j ACCEPT


############################## Tabela NAT ##################################

##### Flush #####
/sbin/iptables -t nat -F

##### apaga todas as user chains #####
/sbin/iptables -t nat -X

##### politicas padrão #####

##### cria chains usuario #####

##### regras chains usuario #####

##### chain PREROUTING #####

##### Redireciona acesso RDP 4100 - SERVIDOR -> 192.168.0.254 #####
/sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 4100 -j DNAT --to-destination 192.168.0.254:4100


##### chain POSTROUTING #####
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE

##### chain OUTPUT #####


############################### tabela mangle #################################

##### flush #####
/sbin/iptables -t mangle -F

##### apaga todas as user chains #####
/sbin/iptables -t mangle -X

/sbin/iptables -t mangle -A OUTPUT -o eth1 -p tcp --dport 80 -j TOS --set-tos 16
/sbin/iptables -t mangle -A OUTPUT -o eth1 -p tcp --dport 443 -j TOS --set-tos 16

;;

stop)

### restaura as politicas default da tabela filter ###
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT

### restaura as politicas default da tabela nat ###
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT

### restaura as politicas default da tabela mangle ###
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT

### Flush ###
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F

### apaga todas as user chains ###
/sbin/iptables -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X

;;

status)

echo ""
echo "TABELA FILTER"
echo ""
/sbin/iptables -L -n
echo ""
echo "TABELA NAT"
echo ""
/sbin/iptables -t nat -L -n
echo ""
echo "TABELA MANGLE"
echo ""
/sbin/iptables -t mangle -L -n

;;

restart)
$0 stop
$0 start

;;

*)
echo $"Usage: $0 {start|stop|status|restart|}"
exit 1

;;

esac

exit $?



Fico grato pela ajuda de todos.




  


2. Re: Iptables + Iproute (2 links + balanceamento)

Maison K. Sakamoto
sneeps.ninja

(usa Debian)

Enviado em 29/05/2013 - 17:31h

Rapaz, leia atentamente esse link:
http://www.vivaolinux.com.br/artigo/Conexoes-de-entrada-e-saida-com-2-links-em-um-servidor/

ele faz exatamente o que você precisa, porém ele esta se referindo a outra porta, acho que só trocando a porta ai pela sua já resolve, eu tenho um servidor parecido com o seu também estou usando um link só p/ atender as conexões de http no meu servidor apache e outra p/ rede interna usar a internet domestica.

Qualquer coisa vai postando ai que vou tentar te ajudar


3. Re: Iptables + Iproute (2 links + balanceamento)

Supzica
supzica

(usa Debian)

Enviado em 29/05/2013 - 17:43h

Sneeps, parece um pouco com o cenário.

Mas em pesquisas que fiz, não teria eu que criar 2 tables no rt_tables? Uma para cada Link?

No exemplo ele utiliza apenas 1 tabela adicional.



4. Re: Iptables + Iproute (2 links + balanceamento)

Maison K. Sakamoto
sneeps.ninja

(usa Debian)

Enviado em 29/05/2013 - 17:56h

eu estou usando 1 table somente, e neste eu direciono.
Pois tenho o default gateway como padrao já roteando a rede interna com o link de internet domestica.

o ip route é só p/ rotear a "outra" então dá p/ fazer com 1 table sim, o que nada impede de fazer dois, mas eu fiquei com preguiça de fazer dois também...rsrsr


5. Re: Iptables + Iproute (2 links + balanceamento)

Supzica
supzica

(usa Debian)

Enviado em 29/05/2013 - 18:11h

Tentei segui o exemplo do link que mandou, mas não funcionou.

Se puder postar o exemplos de seus arquivos "rt_tables", script "ip route", e exemplo do firewall.

Assim poderei ver aonde posso estar errando.

OBS: Diferente do cenário do link, no qual os 2 modens estão na mesma rede, o meu cenário os modens/gw estão em redes distintas:

Cenário:

Rede Local:
Rede: 192.168.0.0/24
eth0: 192.168.0.254

Link GVT:
Rede: 10.1.1.0/24
eth1: 10.1.1.1
gw: 10.1.1.253

Link OI:
Rede 172.0.0.0/24
eth2: 172.0.0.2
gw: 172.0.0.1


Abraços.


6. Re: Iptables + Iproute (2 links + balanceamento)

Maison K. Sakamoto
sneeps.ninja

(usa Debian)

Enviado em 29/05/2013 - 20:07h

olha como eu fiz:
auto eth0
iface eth0 inet static
address 192.168.1.200
netmask 255.255.255.0
broadcast 192.168.1.255
dns-server 192.168.1.1
auto eth1
iface eth1 inet static
address 189.58.100.148
netmask 255.255.255.0
broadcast 189.58.100.150
network 189.58.100.145
auto eth2
iface eth2 inet static
address 10.0.0.200
netmask 255.255.255.0
broadcast 10.0.0.255
network 10.0.0.0
gateway 10.0.0.1

Olha eu só deixei 1 gateway padrao (10.0.0.1) logo quando eu fiz o comando route -v
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 * 255.255.255.0 U 0 0 0 eth2
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
189.58.100.0 * 255.255.255.0 U 0 0 0 eth1
default 10.0.0.1 0.0.0.0 UG 0 0 0 eth2

ta vendo eu tenho um gateway "padrão" a internet da rede interna sai tudo por ai (10.0.0.1)

agora olha o pulo do gato esta nesta outra configuração:
fiz um arquivo rota.sh para executar as configurações toda vez que reiniciar a maquina.
#!/bin/bash
# USADO PARA CRIAR UM GATEWAY SEPARADO(NAO O PADRAO) PARA ENTAR E SAIR ATRAVES DO LINK DEDICADO
ip route add 189.58.100.0/24 dev eth1 table site
ip route add default dev eth1 via 189.58.100.145 table site
ip rule add from 189.58.100.148 lookup site
ip route flush cached

quando estas linhas forem executadas a magica esta feita, teremos um table chamado site onde a rede 189.58.100.0/24 tera um "outro" default gateway o 189.58.100.145. (obs este gateway nao aparece com o comando route -v)

para ver essas tabela use o comando:
ip route show table site

para ver a tabela "padrao" use o comando:
ip route show table main
(esta tabela apare o mesmo que o comando route -v)


7. Re: Iptables + Iproute (2 links + balanceamento)

Supzica
supzica

(usa Debian)

Enviado em 29/05/2013 - 20:43h

E agora, como faria para marcar os pacotes que deseja que saiam pela tabela "site"?

Por exemplo, se quiser que todo trafego no protocolo tcp, 3389 e 3390 saia por essa tabela, como marcaria os pacotes?

Grato.


8. Re: Iptables + Iproute (2 links + balanceamento)

Supzica
supzica

(usa Debian)

Enviado em 30/05/2013 - 23:27h

Alguém mais poderia ajudar?


9. Re: Iptables + Iproute (2 links + balanceamento)

Maison K. Sakamoto
sneeps.ninja

(usa Debian)

Enviado em 31/05/2013 - 08:10h

supzica desculpa a demora... é o feriado...

Então no seu caso ficaria assim:
iptables -t mangle -A POSTROUTING -p tcp --sport 3389 -s 172.0.0.2/32 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp --sport 3389 -s 172.0.0.2/32 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp --dport 3389 -j MARK --set-mark 1
iptables -t mangle -A INPUT -p tcp --dport 3389 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp --sport 3389 -s 172.0.0.2/32 -j MARK --set-mark 1
iptables -t mangle -A FORWARD -p tcp --sport 3389 -s 172.0.0.2/32 -j MARK --set-mark 1
iptables -t mangle -A FORWARD -p tcp --dport 3389 -j MARK --set-mark 1

iptables -t mangle -A POSTROUTING -p tcp --sport 3390 -s 172.0.0.2/32 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp --sport 3390 -s 172.0.0.2/32 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp --dport 3390 -j MARK --set-mark 1
iptables -t mangle -A INPUT -p tcp --dport 3390 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp --sport 3390 -s 172.0.0.2/32 -j MARK --set-mark 1
iptables -t mangle -A FORWARD -p tcp --sport 3390 -s 172.0.0.2/32 -j MARK --set-mark 1
iptables -t mangle -A FORWARD -p tcp --dport 3390 -j MARK --set-mark 1


10. Re: Iptables + Iproute (2 links + balanceamento)

Fernando Dias
fernandodiassm

(usa Debian)

Enviado em 26/11/2013 - 21:36h

Maison, tudo bem contigo?
estou com este mesmo problema... gostaria que tudo que fosse para openvpn porta 1194 fosse enviado atraves do link2 eth2, entretanto fiz como vc sugeriu, mas quando dou um ifconfig eth2 down, subentendo que deveria cair a vpn, mas não é isso que acontece.

tem algum ideia?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts