LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1707|回复: 17

oracle居然与iptables的设置有关?

[复制链接]
发表于 2003-4-19 10:19:19 | 显示全部楼层 |阅读模式
我发现一个奇怪的问题,我这儿的机器上的oracle服务居然与iptables的配置有关,不设置iptables的话,oracle服务虽然看起来开着,但实际上在过几分钟后却不能提供服务,显示错误:"ORA-12545:连接因对象主机或对象不存在而失败",先前开的连接还是有效,但是要新开一个连接就不行了,就象用pl/sql delveloper,新开一个窗口都不能用,如果这时候用lsnrctl stop,lsnrctl start之后就可以开新的连接,但在几分钟后仍然会出现这个错误.如果设置iptables 如下所示
#!/bin/sh
echo "Starting iptables rules..."

/sbin/iptables -P INPUT ACCEPT

#Refresh all chains

/sbin/iptables -F

/sbin/iptables -A INPUT -p tcp -s ! 10.137.18.194/26 --dport ssh -j DROP
/sbin/iptables -A INPUT -p tcp -s ! 10.137.16.0/22 --dport 21 -j DROP
/sbin/iptables -A INPUT -p tcp -s ! 10.137.16.0/22 --dport 20 -j DROP
/sbin/iptables -A INPUT -p tcp -s ! 10.137.18.194/26 --dport 139 -j DROP
/sbin/iptables -A INPUT -p tcp -s ! 10.137.18.194/26 --dport 1521 -j DROP
/sbin/iptables -A INPUT -p tcp -s ! 10.137.18.194/26 --dport 777 -j DROP
/sbin/iptables -A INPUT -p tcp -s ! 10.137.18.194/26 --dport 80 -j DROP
/sbin/iptables -A INPUT -p tcp -s ! 10.137.18.194/26  --dport 111 -j DROP


oralcle就很正常,今天看到了那篇加入精华板的iptables配置的文章,所以我改了一下iptables,如下
#!/bin/sh
echo "Starting iptables rules..."

#Refresh all chains

/sbin/iptables -F INPUT
/sbin/iptables -F OUTPUT

/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT

/sbin/iptables -A INPUT -i lo -j ACCEPT

/sbin/iptables -A INPUT -p tcp -s  10.137.18.194/26 --dport ssh -j ACCEPT

/sbin/iptables -A INPUT -p tcp -s  10.137.16.0/22 --dport 21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s  10.137.16.0/22 --dport 20 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s  10.137.18.194/26 --dport 139 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s  10.137.18.194/26 --dport 1521 -j ACCEPT
/sbin/iptables -A INPUT -i lo -p tcp --dport 1521 -j DROP
/sbin/iptables -A INPUT -p tcp -s  10.137.18.194/26 --dport 777 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s  10.137.18.194/26 --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s  10.137.18.194/26  --dport 111 -j ACCEPT
但是oracle还是出现了一样的问题,不知道各位有没有碰到过这样的问题,
我去找过资料,所有讲到ORA-12545的错误都说是oracle本身的配置问题,没有看到过我这类的问题
 楼主| 发表于 2003-4-19 10:27:34 | 显示全部楼层

补充

用了第一个配置的话,lsnrctl stop,lsnrctl start速度非常慢,象是很难连接上一样,但命令还是能执行成功的,如果这时候先iptables -F,然后再lsnrctl stop,start,速度就会很快,所以我一开始怀疑跟lo的连接oracle有关,所以在第配置里面用了一句
/sbin/iptables -A INPUT -i lo -p tcp --dport 1521 -j DROP
但这样还是有一样的问题,而且lsnrctl stop,start执行的也飞快,换句话说如果lsnrctl执行的很快oracle就有问题.我不知道还跟什么有关,各位高手不吝指教
发表于 2003-4-19 15:18:23 | 显示全部楼层
oracle的服务都是通过net8建立连接的,如果网络有防火墙,当然net8不能连通,session建立有问题了
 楼主| 发表于 2003-4-19 15:56:45 | 显示全部楼层

我的意思是说如果没有防火墙的话

oracle就要出问题,所以我才奇怪
发表于 2003-4-20 00:44:12 | 显示全部楼层
首先可以肯定的是,iptables的设置肯定会影响到Oracle的通讯。

其次,看了你的两个script,它们有很大的,逻辑上的出入。

第一个script是说“不接受除网段10.137.16.0/22外的FTP请求,不接受除网段10.137.18.194/26外的SSH,HTTP,RPC,NETBIOS,MULTILING HTTP及ORACLE请求,其余的全接受!”

第二个script是说“只接受网段10.137.16.0/22的FTP请求,只接受网段10.137.18.194/26的HTTP,RPC,NETBIOS,MULTILING HTTP及ORACLE请求,其余全不接受!”

应该说,第二个script的逻辑是非常清晰的,限制是严格的(也许太严格了,所以ORACLE不工作);而第一个逻辑混乱,限制松散(请原谅我的直率)。

还有一点我看不明白,第二个script中:
/sbin/iptables -A INPUT -i lo -p tcp --dport 1521 -j DROP

为什么要限制loop界面的1521口呢?第一个script里可没有这一条呀。虽然我不懂ORACLE,但我知道它的很多内部通讯也是用TCP/IP协议的。你把loop上的1521口屏蔽了,是不是会产生问题原因呢?
 楼主| 发表于 2003-4-20 09:45:34 | 显示全部楼层

非常感谢你的指点

第一个script是我自己写的,水平有限,可能是有些问题,呵呵,我现在还是看不出有什么问题,还请详细指点一下.
第二个是参考这里的一篇文章写的,至于为什么要限制lo的通讯,是因为在一开始的时候我没有写这一条,也有上述的问题,所以我特意加上了这一条(因为我以为跟lo有关).加上了以后问题仍然发生.
我说的大概还不够清楚,表达能力有限,请大家谅解,其实我这儿一开始没有设置任何防火墙的时候,oracle就不正常了,不正常并不是说完全不能够工作,而是在一开始的时候能够连接正常,过了几分钟以后就不能连接了,显示::"ORA-12545:连接因对象主机或对象不存在而失败",这个时候如果lsnrctl stop,lsnrctl start,oracle就能恢复正常,但也就是几分钟,然后又不行,很偶然的机会,我发现用了我写的script(第一个iptables script)后,oracle就正常了,而这个时候lsnrctl 使用是不正常的,要很长时间才能stop,start,所以我猜测是不是跟lo通讯有关,因为第一个script里面限制了所有的lo通讯.
我这儿有三台机器都是rh8.0+oracle8.1.7,都是这样的问题,很是不解.
发表于 2003-4-21 01:14:17 | 显示全部楼层
1. 先看看有没有/etc/sysconfig/iptables文件,如果有的话,贴出来看看.

2. 请提供ORACLE所需要的通讯端口(我对ORACLE不熟,只有请楼主提供了).

咱们先解决ORACLE的问题,其他象HTTP,FTP等是小事.
 楼主| 发表于 2003-4-21 07:49:16 | 显示全部楼层
# Firewall configuration written by lokkit
# Manual customization of this file is not recommended.
# Note: ifup-post will punch the current nameservers through the
#       firewall; such entries will *not* be listed here.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Lokkit-0-50-INPUT - [0:0]
-A INPUT -j RH-Lokkit-0-50-INPUT
-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 --syn -j REJECT
COMMIT
这就是我的iptabls文件
至于oracle
iptables -L后出来是这样的
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  -- !10.137.18.192/26     anywhere           tcp dpt:ssh
DROP       tcp  -- !10.137.16.0/22       anywhere           tcp dpt:ftp
DROP       tcp  -- !10.137.16.0/22       anywhere           tcp dpt:ftp-data
DROP       tcp  -- !10.137.18.192/26     anywhere           tcp dpt:netbios-ssn
DROP       tcp  -- !10.137.18.192/26     anywhere           tcp dpt:1521
DROP       tcp  -- !10.137.18.192/26     anywhere           tcp dpt:777
DROP       tcp  -- !10.137.18.192/26     anywhere           tcp dpt:http
DROP       tcp  -- !10.137.18.192/26     anywhere           tcp dpt:sunrpc

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Lokkit-0-50-INPUT (0 references)
target     prot opt source               destination
至于oracle的通讯端口,应该是只有1521一个
发表于 2003-4-21 13:00:29 | 显示全部楼层
我在网上搜了一下,找到了下面这个列表:
http://213.41.74.67:7778/portlist
Oracle 9iAS List of Ports in Use
---------------------------------------------------
Service  Port
Enterprise Manager Repository port                 1521
Enterprise Manager Servlet port                      1810
Java Object Cache port                                  7000
Oracle HTTP Server Jserv port                        8007
Oracle HTTP Server SSL listen port                  4444
Oracle HTTP Server SSL port                          4443
Oracle HTTP Server listen port                         7778
Oracle HTTP Server port                                 7777
Oracle Intelligent Agent                                  1748, 1754, 1808, 1809
Oracle Notification Service local port                 6100
Oracle Notification Service remote port             6200
Oracle Notification Service request port             6003
Oracle9iAS Clickstream Collector Agent              6667
Oracle9iAS Web Cache Admin port                   4000
Oracle9iAS Web Cache HTTP Listen(SSL) port   4443
Oracle9iAS Web Cache HTTP Listen(non-SSL) port          7777
Oracle9iAS Web Cache Invalidation port                         4001
Oracle9iAS Web Cache Statistics port                            4002

注意红色的那行,缺省的设置屏蔽了6003口
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT

除此之外,我看不出缺省设置有何问题。你可以把这行注释掉,然后service iptables restart重启缺省防火墙,看看ORACLE有何反应。
===========================
另外,你在先前的贴子里说
如果这时候先iptables -F,然后再lsnrctl stop,start,速度就会很快

很快什么?工作正常,不正常工作?如果你对上述的缺省防火墙iptables -F,ORACLE还不能正常工作,那几乎肯定是ORACLE本身的问题---要么没装好,要么没设置好;如果iptables -F后ORACLE能正常工作,那就肯定是iptables的问题。
 楼主| 发表于 2003-4-21 16:55:04 | 显示全部楼层
我在iptables -F以后还是出现这样的问题,真是搞不懂,而且我有三台机器都是这样的问题,其中一台连/etc/sysconfig/iptables文件都不存在,问题也是一样.也许是我的oracle设置有问题,呵呵
我前面的贴子说的很快说的是lsnrctl stop,start执行很快,这是在iptables -F的情况下,而iptables 脚本启动以后lsnrctl stop,start执行非常慢.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表