由 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