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.

[ Hits: 21.605 ]

Por: Luis Gustavo em 17/07/2003


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 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

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Monte seu próprio servidor de ICQ

Leitura recomendada

Criando um banco de dados no Flamerobin (Firebird)

Trabalhando com Firebird em múltiplos arquivos de dados

Case de Sucesso com Sistema de Gestão Hospitalar

Interbase no Debian

Firebird, fazendo valer o lado do servidor

  
Comentários
[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts