当前位置: 首页 > 科技观察

限制IP访问Oracle数据库的3种方法

时间:2023-03-19 00:39:37 科技观察

01概述本文将介绍如何通过/etc/hosts.deny和/etc/hosts限制某个ip或某个ip段通过sqlnet.ora访问Oracle数据库.allow官方通过iptables02进行实验实验环境为Centos6.10+Oracle11.2.0.4单实例,数据库服务器ip地址为192.168.31.711。通过sqlnet.oraa。关闭数据库服务器上的防火墙,修改sqlnet.ora文件,放到$ORACLE_HOME/network/admin下,如果没有,就在这个目录下新建一个,加入下面两行tcp.validnode_checking=yestcp.invited_nodes=(192.168.31.71,192.168.31.77)这里需要注意的是,本地ip一定要加上地址(不能写成localhost和127.0.0.1),否则monitor启动的时候会报错。b.重启monitor让sqlnet.ora的修改生效。设置lsnrctlstoplsnrctlstart后,只有192.168.31.71和192.168.31.77这两个ip可以访问数据库,其他ip会报ORA-12547:TNS:lostcontacterrortcp。invited_nodes表示开启白名单,所有不在白名单内的都将被拒绝访问。也可以写成(192.168.31.*,192.168.31.0/24)等,表示该网段可以访问。另外还有一个参数tcp.excluded_nodes,就是黑名单的意思,这里就不介绍了,有兴趣的可以自己做实验。2.通过/etc/hosts.deny和/etc/hosts.allowsqlnet.ora是数据库级别的限制,但是如果一个ip可以用root或者oraclessh到这个数据库服务器,那么还是可以访问数据库的。为了避免这种情况,需要通过/etc/hosts.allow和/etc/hosts.deny来限制某个ip或ip段ssh访问数据库服务器。先删除之前实验添加的sqlnet.ora,然后重启监控lsnrctlstoplsnrctlstarta。修改/etc/hosts.deny,在文件末尾添加一行all:all:deny。第一个all表示禁用所有使用tcp_wrappers库的服务,例如ssh、telnet等服务。第二个all表示所有网段。b.修改/etc/hosts.allow上一步我禁止了所有网段,所以这一步要启用指定网段。修改/etc/hosts.allow,在文件末尾添加all:192.168.31.71:allowall:192.168.31.47:allow,格式同hosts.deny,第一行表示放行机器,第二行line的意思是打开for.47白名单下,我用另一台机器(也就是不在allow中)用ssh或者telnet连接到71机器,会出现如下错误[oracle@oracle19c1~]$ssh192.168.31.71ssh_exchange_identification:read:Connectionresetbypeer[oracle@oracle19c1~[oracle@oracle19c1~]$sqlplussys/xxxxx@192.168.31.71:1521/orcltestassysdbaSQL*Plus:Release19.0.0.0.0-ProductiononSunAug1623:120.0.0.0-ProductiononSunAug1623:120.0.0.0.Copyright120.0.0.120.0.0-生产c)1982,2019,Oracle.Allrightsed1Connectlegrasereserved12.0.4.0-64bitProductionWiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions其中ip地址也可以用下面的通配符形式替换192.168.31.*表示192.168.31。网段/掩码192.168.31.0/255.255.255.0也就是192.168的意思。31本网段3.可以通过iptablessqlnet.ora限制访问数据库,通过/etc/hosts.deny和/etc/hosts.allow可以限制ssh的访问。有什么办法吗?该方法不仅可以限制数据库的访问,还可以限制ssh的访问。答案是linux的防火墙功能。对于实验,所有之前的修改都被清除。使用root执行以下命令serviceiptablesstart#开启防火墙服务iptables-IINPUT-s192.168.31.0/24-ptcp--dport1521-jACCEPT#允许192.168.31网段的ip访问本地1521端口iptables-IINPUT!-s192.168.31.0/24-ptcp--dport22-jDROP#拒绝非192.168.31网段的ip访问本机22端口ssh和数据库访问的一些扩展知识:iptables-L-n--line-numbers#查看当前系统中的iptablesiptables-DINPUT2#删除输入链中编号为2的规则,编号可以通过前面的命令获取03总结如果只是限制别人ip访问数据库,使用sqlnet.ora。如果要限制其他ipssh连接到数据库所在的服务器,使用/etc/hosts.deny和/etc/hosts.allow。前两者的结合基本可以保证你的数据库是安全的。但是如果你熟悉linux的iptables,那就直接用iptables来限制吧。在使用/etc/hosts.deny和iptables的时候,一定要保证你的操作函数可以连接到服务器,否则很容易把自己锁在门外。