Firewall no Oracle

Eu tenho a opinião de que a segurança deve ser aplicada em camadas em uma arquitetura, e não delegada a um único item da rede. E não acredito em uma Zona Segura: tudo tem que ser protegido, e o custo de dificultar um Troubleshooting é menor do que o custo potencial de um vazamaneto de informações.

Por essas razões que eu prefiro que o Servidor de Banco de Dados Oracle tenha um Firewall local. Como podem ver no teste abaixo, funciona perfeitamente. Normalmente eu só deixo a porta do Listener e a do SSH ativados.

<UPDATE>

Atenção: as conexões de clientes só irão funcionar com o firewall liberado apenas para a porta do listener, se este não estiver executando REDIRECT das portas para os clientes. O REDIRECT faz com que a conversa entre servidor e cliente seja feita em outra porta que não a 1521. O REDIRECT ocorre quando o Oracle Database e o listener estão em uma máquina Windows, se está sendo utilizado Shared Server (MTS) ou RAC. Em caso do servidor estar em Linux / Unix e utilizando o Dedicated Server (que é o padrão), não há um REDIRECT de portas para o cliente, mesmo que o log do listener indique isto: neste caso, até há um REDIRECT para outra porta (no alcance indicado pelo parâmetro do Linux net.ipv4.ip_local_port_range), mas este é local, entre o Oracle Database e os processos de usuários criados no servidor. A conversa entre o cliente e servidor continuam sendo feitas na porta 1521.

As portas utilizadas pelo REDIRECT do listener, sendo local ou não, é controlado pelo Sistema Operacional (de acordo com o parâmetro já citado, ou equivalente em outro SO), e são chamadas portas efêmeras no padrão TCP-UDP/IP.

Veja abaixo o Log do Listener de um servidor com Firewall ativado, liberado apenas para a porta 1521. Os acessos foram feitos de outra máquina, e o Listener os redirecionou para outra porta, mas trata-se de um REDIRECT local, pois é uma instalação em Linux, Single instance, e Dedicated Server.

[oracle@Oracle01 database]$ tail -f /u01/app/oracle/diag/tnslsnr/Oracle01/listener/alert/log.xml
<msg time='2010-11-10T13:39:08.880-02:00' org_id='oracle' comp_id='tnslsnr'
type='UNKNOWN' level='16' host_id='nerv07.localdomain'
 host_addr='192.168.0.7'>
 <txt>10-NOV-2010 13:39:08 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=ricardo.proni))(SERVICE_NAME=ORCL)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=ricardo.proni))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.201)(PORT=62815)) * establish * ORCL * 0
 </txt>
</msg>
<msg time='2010-11-10T13:39:08.895-02:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='nerv07.localdomain'
 host_addr='192.168.0.7'>
 <txt>10-NOV-2010 13:39:08 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=ricardo.proni))(SERVICE_NAME=ORCL)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=ricardo.proni))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.201)(PORT=62816)) * establish * ORCL * 0
 </txt>
</msg>
<msg time='2010-11-10T13:39:08.929-02:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='nerv07.localdomain'
 host_addr='192.168.0.7'>
 <txt>10-NOV-2010 13:39:08 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=ricardo.proni))(SERVICE_NAME=ORCL)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=ricardo.proni))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.201)(PORT=62817)) * establish * ORCL * 0
 </txt>
</msg>
<msg time='2010-11-10T13:39:08.940-02:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='nerv07.localdomain'
 host_addr='192.168.0.7'>
 <txt>10-NOV-2010 13:39:08 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=ricardo.proni))(SERVICE_NAME=ORCL)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=ricardo.proni))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.201)(PORT=62818)) * establish * ORCL * 0
 </txt>
</msg>
<msg time='2010-11-10T13:39:08.973-02:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='nerv07.localdomain'
 host_addr='192.168.0.7'>
 <txt>10-NOV-2010 13:39:08 * (CONNECT_DATA=(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=ricardo.proni))(SERVICE_NAME=ORCL)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=ricardo.proni))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.201)(PORT=62819)) * establish * ORCL * 0
 </txt>
</msg>

</UPDATE>

ricardo@ricardo-laptop:~/Software/instantclient_11_2$ nmap -sV 192.168.56.105

Starting Nmap 5.21 ( http://nmap.org ) at 2010-09-21 11:20 BRT
Nmap scan report for 192.168.56.105
Host is up (0.0038s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 4.3 (protocol 2.0)
111/tcp  open  rpcbind
1521/tcp open  oracle-tns Oracle TNS Listener

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 6.49 seconds
ricardo@ricardo-laptop:~/Software/instantclient_11_2$ ./sqlplus SCOTT/TIGER@ORCL

SQL*Plus: Release 11.2.0.2.0 Production on Tue Sep 21 11:20:26 2010

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options

SQL> EXIT
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
ricardo@ricardo-laptop:~/Software/instantclient_11_2$

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.