oracle居然与iptables的设置有关?

由 jkm 在 04-19-2003 10:19 发表:

oracle居然与iptables的设置有关?

我发现一个奇怪的问题,我这儿的机器上的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本身的配置问题,没有看到过我这类的问题


由 jkm 在 04-19-2003 10:27 发表:

补充

用了第一个配置的话,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就有问题.我不知道还跟什么有关,各位高手不吝指教


由 my420 在 04-19-2003 15:18 发表:


oracle的服务都是通过net8建立连接的,如果网络有防火墙,当然net8不能连通,session建立有问题了


由 jkm 在 04-19-2003 15:56 发表:

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

oracle就要出问题,所以我才奇怪


由 BTworm 在 04-20-2003 00:44 发表:


首先可以肯定的是,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中:

> quote: > > * * * > > /sbin/iptables -A INPUT -i lo -p tcp --dport 1521 -j DROP > > * * *

为什么要限制loop界面的1521口呢?第一个script里可没有这一条呀。虽然我不懂ORACLE,但我知道它的很多内部通讯也是用TCP/IP协议的。你把loop上的1521口屏蔽了,是不是会产生问题原因呢?


由 jkm 在 04-20-2003 09:45 发表:

非常感谢你的指点

第一个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,都是这样的问题,很是不解.


由 BTworm 在 04-21-2003 01:14 发表:


1. 先看看有没有/etc/sysconfig/iptables文件,如果有的话,贴出来看看.

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

咱们先解决ORACLE的问题,其他象HTTP,FTP等是小事.


由 jkm 在 04-21-2003 07:49 发表:


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


由 BTworm 在 04-21-2003 13:00 发表:


我在网上搜了一下,找到了下面这个列表:

http://213.41.74.67:7778/portlist

> quote: > > * * * > >
>
> 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口

> quote: > > * * * > > -A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT > > * * *

除此之外,我看不出缺省设置有何问题。你可以把这行注释掉,然后service iptables restart重启缺省防火墙,看看ORACLE有何反应。

===========================

另外,你在先前的贴子里说

> quote: > > * * * > > 如果这时候先iptables -F,然后再lsnrctl stop,start,速度就会很快 > > * * *

很快什么?工作正常,不正常工作?如果你对上述的缺省防火墙iptables -F,ORACLE还不能正常工作,那几乎肯定是ORACLE本身的问题---要么没装好,要么没设置好;如果iptables -F后ORACLE能正常工作,那就肯定是iptables的问题。


由 jkm 在 04-21-2003 16:55 发表:


我在iptables -F以后还是出现这样的问题,真是搞不懂,而且我有三台机器都是这样的问题,其中一台连/etc/sysconfig/iptables文件都不存在,问题也是一样.也许是我的oracle设置有问题,呵呵

我前面的贴子说的很快说的是lsnrctl stop,start执行很快,这是在iptables -F的情况下,而iptables 脚本启动以后lsnrctl stop,start执行非常慢.


由 jkm 在 04-21-2003 16:55 发表:

补充

lsnrctl stop,start 执行很快的时候oracle就不正常,而很慢的时候就正常


由 BTworm 在 04-22-2003 01:34 发表:


> quote: > > * * * > > 其中一台连/etc/sysconfig/iptables文件都不存在,问题也是一样.也许是我的oracle设置有问题,呵呵 > > * * *

如果在没有防火墙的时候ORACLE都不工作,那就应该好好检查一下ORACEL本身了。


由 jkm 在 04-22-2003 16:29 发表:

更正

现在发现,其实在iptables -F以后,也就是在

Chain INPUT (policy ACCEPT)

target prot opt source destination

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使用是完全正常的<br

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus