ITPub博客

首页 > 数据库 > Oracle > 使用Oracle Net实现限制特定IP访问数据库

使用Oracle Net实现限制特定IP访问数据库

Oracle 作者:bitifi 时间:2015-11-07 08:55:29 0 删除 编辑

 

在实际运维环境中,信息安全是我们不能忽视的重要方面,更是企业核心价值所在。无论系统多强大、性能有多快,安全这个硬指标是不能回避的必要条件。

数据库作为系统数据的贮存载体,是信息系统关键核心。数据库的安全、数据的安全,很大程度上就代表了信息安全的大部分内容。数据库安全不是一个单一的概念,是包括网络、连接、用户、权限乃至存储等一系列软硬件共同实现。目前尚未有专门一项技术可以解决所有的数据库安全问题。

本篇主要介绍通过Oracle Net Service来实现限制特定IP访问数据库的功能。Oracle Net是客户端Client Process连接到Service Process的主要功能组件。默认情况下,系统自动参数行为可以支持大部分的应用需求。但是,默认参数行为很多是不满足安全性要求的。特定IP访问数据库,要求Oracle网络只能接受特定IP地址发出的请求连接,其他地址连接均不予接受。

这个需求是很多时候安全巡检的一个重要内容项目。目的在于控制减少访问数据库服务器的主机数量,减少潜在风险。下面介绍在Oracle中如何实现这个功能。

 

1、环境介绍

 

笔者使用Oracle 11gR2进行测试,具体版本号为11.2.0.4

 

 

SQL> select * from v$version;

 

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL Release 11.2.0.4.0 - Production

CORE    11.2.0.4.0      Production

TNS for Linux: Version 11.2.0.4.0 - Production

NLSRTL Version 11.2.0.4.0 – Production

 

 

服务器IP地址配置如下:

 

 

[oracle@localhost ~]$ ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:21:A2:01 

          inet addr:172.16.19.2  Bcast:172.16.19.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe21:a201/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:2151824 errors:0 dropped:0 overruns:0 frame:0

          TX packets:1194873 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:2817459392 (2.6 GiB)  TX bytes:184579510 (176.0 MiB)

 

 

2sqlnet.ora配置

 

Oracle Net是控制监听器和连接行为的主要核心组件。Oracle Net配置文件包括三个:listener.orasqlnet.oratnsnames.ora。三个文件依然保持原有Unix平台下的文本配置原则,分别承担不同的配置任务。

Listener.ora主要负责监听器配置内容。我们通过netca添加的监听器程序配置信息。在最新的11g版本中,引入了默认监听器机制。也就是说,很多情况下,我们在$ORACLE_HOME/network/admin文件夹中是找不到listener.ora文件的。但是此时监听器程序也运行正常。

默认监听程序是Oracle新版本的特性,即使在listener.ora中没有配置,Oracle也是有一个默认在1521端口伺候的监听程序后台运行。但是根据笔者的经验,实际生产环境中,还是独立创建监听程序比较好。

Sqlnet.ora是核心行为参数文件,默认情况下一般为空文件。这样情况下,系统是直接使用默认Oracle Net行为参数进行控制。我们常常使用的如:禁用服务器本地匿名登录等特性,都是在这个文件上进行配置的。

Tnsnames.ora是我们日常客户端最直接接触的文件。我们连入数据库是通过主机IP、服务名、端口号进行数据库实例instance定位的。在客户端,我们是通过本地连接名进行替代的。Tnsnames.ora就是记录本地配置信息的载体。

通过查看监听器状态,我们可以了解主要的Oracle Net配置情况。

 

 

[oracle@localhost ~]$ lsnrctl status

 

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-JUL-2014 16:11:06

 

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production

Start Date                16-JUN-2014 09:37:55

Uptime                    37 days 6 hr. 33 min. 10 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/network/admin/listener.ora

Listener Log File         /u01/app/diag/tnslsnr/localhost/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Services Summary...

Service "sicspcdb" has 1 instance(s).

  Instance "sicspcdb", status READY, has 1 handler(s) for this service...

Service "sicspcdbXDB" has 1 instance(s).

  Instance "sicspcdb", status READY, has 1 handler(s) for this service...

The command completed successfully

 

 

我们在配置目录上,没有找到sqlnet.ora,所以需要单独创建一个文本文件。

 

 

[oracle@localhost ~]$ cd /u01/app/oracle/network/admin/

[oracle@localhost admin]$ ls -l

total 16

-rw-r--r--. 1 oracle oinstall  343 Jul 14 16:21 listener.ora

drwxr-xr-x. 2 oracle oinstall 4096 Jun 16 09:31 samples

-rw-r--r--. 1 oracle oinstall  381 Dec 17  2012 shrept.lst

-rw-r-----. 1 oracle oinstall  312 Jul 14 16:21 tnsnames.ora

 

 

在新建文件中,加入两个key-value参数内容。

 

 

[oracle@localhost admin]$ cat sqlnet.ora

TCP.VALIDNODE_CHECKING=yes

TCP.INVITED_NODES=172.17.22.51

 

 

TCP.VALIDNODE_CHECKING作为限制IP访问的开关项目。如果设置为yes,就表示启用限制功能。TCP.INVITED_NODES是一个列表参数,用于列出允许连入的IP地址列表。IP地址172.17.22.51是实验的windows环境。配置后,重启监听器(或者reload参数)。

 

 

[oracle@localhost admin]$ lsnrctl stop

 

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-JUL-2014 16:14:12

 

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))

The command completed successfully

[oracle@localhost admin]$ lsnrctl start

 

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-JUL-2014 16:14:14

 

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Starting /u01/app/oracle/bin/tnslsnr: please wait...

 

 

3、首轮测试

 

到客户端进行首次测试。客户端是windows环境,而且已经创建本地连接名。

 

C:\Users\admin>tnsping sicspcdb_linux_bk

 

TNS Ping Utility for 64-bit Windows: Version 11.2.0.4.0 - Production on 23-7 -

2014 16:10:15

 

Copyright (c) 1997, 2013, Oracle.  All rights reserved.

 

已使用的参数文件:

D:\app\admin\product\11.2.0\dbhome_1\network\admin\sqlnet.ora

 

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.19.2)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = sicspcdb)))

OK (10 毫秒)

 

 

当前IP地址为172.17.22.51,与配置相同。

 

 

C:\Users\admin>ipconfig

Windows IP 配置

 

以太网适配器 本地连接:

 

   连接特定的 DNS 后缀 . . . . . . . : chinare.local

   本地链接 IPv6 地址. . . . . . . . : fe80::e9b1:af96:9d03:1c89%14

   IPv4 地址 . . . . . . . . . . . . : 172.17.22.51

   子网掩码  . . . . . . . . . . . . : 255.255.254.0

   默认网关. . . . . . . . . . . . . : 172.17.22.1

 

 

客户端连接测试:

 

 

SQL> conn sys/oracle@sicspcdb_linux_bk as sysdba

ERROR:

ORA-12537: TNS: 连接关闭

 

 

连接失败,在listener.log日志文件中,我们看到了拒绝信息。

 

 

Wed Jul 23 16:19:17 2014

Incoming connection from 172.17.22.51 rejected

23-JUL-2014 16:19:17 * 12546

TNS-12546: TNS:permission denied

 TNS-12560: TNS:protocol adapter error

  TNS-00516: Permission denied

 

 

这个和我们预想的完全不同,设置上允许登录的反而不能登录。那么,Linux服务器本机登录情况是否允许呢?

 

 

[oracle@localhost admin]$ sqlplus /nolog

 

SQL*Plus: Release 11.2.0.4.0 Production on Wed Jul 23 16:16:20 2014

 

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

 

SQL> conn sys/oracle@sicspcdb as sysdba

Connected.

SQL>

 

 

故障现象:配置的连接IP在连入的时候,不被允许。本机登录尚可以支持。

 

4、故障解决

 

经过分析和资料查询,在MOS中我们找到了对应的资料解释:

 

 

Cause

If the Local Server's address (where the listener is located) is not included in the TCP.INVITED_NODES listing, then the valid node checking seems to be nul and void.

 

Fix

The solution is to add the IP address or Fully qualified hostname of the local server to the TCP.INVITED_NODES list.

If this address is missing, then the "validnode checking" is not effective.

 

 

要求我们在配置sqlnet.ora参数中加上服务器本地地址,否则限制IP功能不能实现。修改后如下:

 

 

[oracle@localhost admin]$ cat sqlnet.ora

TCP.VALIDNODE_CHECKING=yes

TCP.INVITED_NODES=(172.17.22.51,127.0.0.1)

 

 

重新启动监听器或者reload配置信息。回到windows客户端进行连接测试。

 

 

[oracle@localhost admin]$ sqlplus /nolog

 

SQL*Plus: Release 11.2.0.4.0 Production on Wed Jul 23 16:25:51 2014

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

 

SQL> conn sys/oracle@sicspcdb as sysdba

Connected.

 

 

找一个第三方IP进行测试连接。

 

 

C:\Documents and Settings\liuzy>ipconfig

 

Windows IP Configuration

 

 

Ethernet adapter 本地连接:

 

        Connection-specific DNS Suffix  . : chinare.local

        IP Address. . . . . . . . . . . . : 172.17.12.80

        Subnet Mask . . . . . . . . . . . : 255.255.254.0

        Default Gateway . . . . . . . . . : 172.17.12.1

 

 

C:\Documents and Settings\liuzy>sqlplus /nolog

 

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 7 23 16:29:32 2014

 

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

 

SQL> conn sys/oracle@sicspcdb_training_linux as sysdba

ERROR:

ORA-12537: TNS: 连接关闭

 

 

实验测试成功。

 

4、结论

 

数据库安全问题是一个系统问题,一套安全的数据库应用系统需要进行全方面的保护配置。本篇介绍的限定IP访问手段,是Oracle平台上非常简单实用的手段。记录下来,留待需要朋友待查。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30496894/viewspace-1825202/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-09-21

  • 博文量
    211
  • 访问量
    276399