Pular para o conteúdo

Acessando o Firebird que esta atras de um firewall

Esse artigo mostra um jeito simples de acessar um banco de dados que está atrás de um firewall ou também de uma DMZ utilizando o iptables.
Luis Gustavo lgustavo
Hits: 22.473 Categoria: Banco de Dados Subcategoria: Firebird
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Introdução

Em nossa rede temos um servidor proxy/firewall com o CL8 e ip interno 192.168.0.1 e um servidor do banco de dados Firebird com 192.168.0.5 com CL8 (pode ser Windows).

Nossas aplicações internas e aplicações que rodam em nossas filiais via VPN acessam o Firebird diretamente pelo ip 192.168.0.5.

Acessos externos ao Firebird sem estar na VPN, não são liberados pelo proxy e somente abrir a porta 3050 nele não bastou.

Para o acesso externo, foi criado um redirecionamento para o servidor 192.168.0.5.

Para este teste foi utilizado Conectiva Linux 8 e iptables-1.2.4-1cl no ambiente abaixo:

INTERNET <=> CL8 <=> Firebird

>> PROXY
Eth0_CL8=200.X.X.X (Internet)
Eth1_CL8=192.168.0.1

>> FIREBIRD
Eth0=192.168.0.5

Caso não tenha o iptables no servidor proxy, o pacote está no CD de instalação e utilize o comando:

# rpm -ivh iptables*

pronto..... ou ao menos era para estar... :-)

agora vamos ao script...

Crie um arquivo qualquer dentro do /etc/rc.d/init.d (por exemplo iptables.sh). Dê a seguinte permissão a este arquivo:

# chmod 700 iptables.sh

Edite o arquivo iptables.sh e adicione este script:

#!/bin/bash
############################################
#chkconfig: 345 20 80 #
#description(po_BR) : Iptables.sh
############################################
#####Checando se a rede está OK


. /etc/rc.d/init.d/functions
. /etc/sysconfig/network

IP_EXTERNO="200.X.X.X"
IP_INTERNO="192.168.0.1"
IP_FIREBIRD="192.168.0.5"

if [ ${NETWORKING} = "no" ]
then
exit 0
fi

case "$1" in
start)
gprintf "Iniciando %s services: [ OK ]" "iptables"
echo "1"> /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 > $f
done
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
echo 0 > $f
done
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 0 > $f
done
for f in $(ls /proc/sys/net/ipv4/conf/*/log_martians) ; do
echo 0 > $f
done

##### Carregando os Módulos
/sbin/modprobe ip_tables
/sbin/modprobe iptable_nat
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp

###### GERANDO LOGS
iptables -A FORWARD -p tcp -i eth0 --dport 3050 -j LOG

######>>> FIREBIRD
iptables -t nat -A PREROUTING -p tcp -s 0/0 -d $IP_EXTERNO --dport 3050 -j DNAT --to-destination $IP_FIREBIRD:3050
iptables -A FORWARD -p tcp -s $IP_FIREBIRD -d $IP_EXTERNO --dport 3050 -j ACCEPT
######<<< FIREBIRD

echo
;;

stop)
gprintf "Interrompendo %s services [ OK ]: " "iptables"
iptables -F ;iptables -Z ; iptables -F -t nat ;
iptables -P INPUT ACCEPT
echo
;;
status)
iptables -L
;;
restart)
$0 stop
$0 start
echo
;;
*)
gprintf "Usage : %s ( start|stop|status|restart)"iptables
exit 1
echo
;;
esac
exit 0
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

O bloco principal é:

Firebird


iptables -t nat -A PREROUTING -p tcp -s 0/0 -d $IP_EXTERNO --dport 3050 -j DNAT --to-destination $IP_FIREBIRD:3050
iptables -A FORWARD -p tcp -s $IP_FIREBIRD -d $IP_EXTERNO --dport 3050 -j ACCEPT


onde -s 0/0 pode ser trocado por somente um IP, isso aumenta o nível de segurança, ou seja, somente o IP informado terá acesso ao Firebird, isto é útil quando por exemplo, se você tem uma aplicação web em um provedor e necessita acessar seu dados no Firebird, assim somente libera o ip do seu provedor.

No caso ficaria assim :

IP_LIBERADO="200.201.X.X"
iptables -t nat -A PREROUTING -p tcp -s $IP_LIBERADO -d $IP_EXTERNO --dport 3050 -j DNAT --to-destination $IP_FIREBIRD:3050 iptables -A FORWARD -p tcp -s $IP_FIREBIRD -d $IP_EXTERNO --dport 3050 -j ACCEPT


Execute o script criado (iptables.sh no nosso exemplo):

# ./iptables start

Teste


Utilizamos uma máquina fora da rede e conectamos na internet via dial-up, usando o IBConsole criamos o servidor utilizando o IP de entrada da Internet (IP_EXTERNO), O CL8 fará o redirecionamento para o micro que tem o Firebird (192.168.0.5) dentro da rede interna ou DMZ. O micro com o Firebird pode ser coloca em uma DMZ também.

Os logs da porta 3050 serão gerados dentro de /var/log/messages.

Esperamos ter ajudado!

Críticas e melhorias são bem vindas.

Autores:
Luís Gustavo (lgustavo@directnet.com.br)
Fábio R. Calegari (fabio.linux@e-logicon.com.br)
26 de Maio de 2003

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução

Monte seu próprio servidor de ICQ

Firebird, fazendo valer o lado do servidor

Apresentando o FenixSQL - Ferramenta de Banco de Dados para Interbase / Firebird

Case de Sucesso com Sistema de Gestão Hospitalar

Coletando informações direto do FIREBIRD via D.O.S. ou SHELL

Lazarus com Firebird e JVUIB

#1 Comentário enviado por batista em 18/07/2003 - 12:04h
So queria saber como seria as regras do bloco principal em ipchains? Mas o script parece bem simples porem eficiente.
#2 Comentário enviado por Delphinhow em 27/03/2005 - 10:13h
Como seria a confirguração para acessar a firebird na propria máquina com o firewall, digo localmente?
Obs.: Eu uso Kurumin

Contribuir com comentário

Entre na sua conta para comentar.