天天看點

【方法】如何限定IP通路Oracle資料庫

【方法】如何限定IP通路Oracle資料庫

【方法】如何限定IP通路Oracle資料庫

各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~:

① 限定IP通路Oracle資料庫的3種方法(重點)

② 如何将資訊寫入到Oracle的告警日志中

③ RAISE_APPLICATION_ERROR不能抛出錯誤到用戶端環境

④ 系統觸發器

⑤ 隐含參數:_system_trig_enabled

本文詳細介紹了3種限制IP位址登入Oracle資料庫的辦法。

項目

source db

db 類型

RAC

db version

11.2.0.3.0

db 存儲

ASM

OS版本及kernel版本

RHEL 6.5

資料庫伺服器IP位址

192.168.59.130

用戶端IP位址

192.168.59.1或192.168.59.129

需要注意的問題:

① 觸發的對象類型可以為DATABASE,也可以為“使用者名.SCHEMA”,如:

AFTER LOGON ON DATABASE

AFTER LOGON ON SCOTT.SCHEMA

② 當觸發的對象類型為DATABASE的時候,登入使用者不能擁有“ADMINISTER DATABASE TRIGGER”的系統權限;當觸發的對象類型為“使用者名.SCHEMA”的時候,登入使用者不能擁有“ALTER ANY TRIGGER”的系統權限。否則,這些使用者還是會正常登入到資料庫,隻是将相應的報錯資訊寫入到告警日志中。是以,擁有IMP_FULL_DATABASE和DBA角色的使用者以及SYS和EXFSYS使用者将不能通過這種方式限制登入。

③ 隐含參數“_SYSTEM_TRIG_ENABLED”的預設值是TRUE,即允許DDL和系統觸發器。當設定隐含參數“_SYSTEM_TRIG_ENABLED”為FALSE的時候,将禁用DDL和系統觸發器。是以,當該值設定為FALSE的時候将不能通過這種方式限制登入。

第二種是修改$ORACLE_HOME/network/admin/sqlnet.ora檔案,增加如下内容:

TCP.VALIDNODE_CHECKING=YES  #開啟IP限制功能

TCP.INVITED_NODES=(127.0.0.1,IP1,IP2,……)  #允許通路資料庫的IP位址清單,多個IP位址使用逗号分開

TCP.EXCLUDED_NODES=(IP1,IP2,……)  #禁止通路資料庫的IP位址清單,多個IP位址使用逗号分開

之後重新啟動監聽器即可。這樣用戶端在登入的時候會報“ORA-12537: TNS:connection closed”的錯誤。

① 需要設定參數TCP.VALIDNODE_CHECKING為YES才能激活該特性。

② 一定要許可或不要禁止資料庫伺服器本機的IP位址,否則通過lsnrctl将不能啟動或停止監聽,因為該過程監聽程式會通過本機的IP通路監聽器,而該IP被禁止了,但是通過服務啟動或關閉則不影響。

③ 當參數TCP.INVITED_NODES和TCP.EXCLUDED_NODES設定的位址相同的時候以TCP.INVITED_NODES的配置為主。

④ 修改之後,一定要重起監聽才能生效,而不需要重新啟動資料庫。

⑤ 這個方式隻是适合TCP/IP協定。

⑥ 這個配置适用于Oracle 9i以上版本。在Oracle 9i之前的版本使用檔案protocol.ora。

⑦ 在伺服器上直接連接配接資料庫不受影響。

⑧ 這種限制方式是通過監聽器來限制的。

⑨ 這個限制隻是針對IP檢測,對于使用者名檢測是不支援的。

第3種是修改資料庫伺服器的IPTABLES(配置檔案:/etc/sysconfig/iptables)來限制某些IP登入資料庫伺服器。如下:

iptables -I INPUT -s 192.168.59.129 -j DROP

service iptables save

則,192.168.59.129這台主機将不能連接配接到資料庫伺服器了,會報“ORA-12170: TNS:Connect timeout occurred”的錯誤。

該部分可以參考網絡配置,小麥苗從網上找了很多。

我們可以通過以下的iptables的設定來限制使用者通路oracle所在linux作業系統的安全。

1、清楚作業系統預設的iptables政策

      我本機安裝的是centos6.0,安裝之後系統會提供iptables預設的policy政策,我們首先要清楚預設的政策

      iptables -F

2、開發22和1521端口對區域網路的某個IP,在本例中用戶端ip是192.168.1.125,oracle所在機器的IP是192.168.1.144,在這裡,設定僅有該用戶端可以通路22和1521端口,區域網路内的其他IP都不允許通路,

    iptables -A INPUT -s 192.168.1.125/32 -i eth0 -p tcp  --dport 22 -j ACCEPT

    iptables -A INPUT -s 192.168.1.125/32 -i eth0 -p tcp  --dport 1521 -j ACCEPT

    iptables -A INPUT -s 192.168.1.0/24 -p tcp  --dport 22 -j DROP

    iptables -A INPUT -s 192.168.1.0/24 -p tcp  --dport 1521 -j DROP

    這樣同一網段内除192.168.1.125之外其他IP都不能通路資料庫伺服器,即使ping指令也不可以

3、開發22和1521的OUTPUT鍊給192.168.1.125,否則已經啟動的oracle instance的pmon程序無法動态注冊到1521端口中

     iptables -A OUTPUT -d 192.168.1.125/32 -p tcp  --sport 22 -j ACCEPT

     iptables -A OUTPUT -d 192.168.1.125/32 -p tcp --sport 1521 -j ACCEPT

4、儲存目前設定的iptables規則

      service iptables save

      這時系統會将已經設定的規則儲存到/etc/sysconfig/iptables檔案中

      否則重新開機之後之前設定的規則都會失效

先關閉所有的80端口

開啟ip段192.168.1.0/24端的80口

開啟ip段211.123.16.123/24端ip段的80口

# iptables -I INPUT -p tcp --dport 80 -j DROP

# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

# iptables -I INPUT -s 211.123.16.123/24 -p tcp --dport 80 -j ACCEPT

以上是臨時設定。

1.先備份iptables

# cp /etc/sysconfig/iptables /var/tmp

2.然後儲存iptables

# service iptables save

3.重新開機防火牆

#service iptables restart

以下是端口,先全部封再開某些的IP

iptables -I INPUT -p tcp --dport 9889 -j DROP

iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 9889 -j ACCEPT

如果用了NAT轉發記得配合以下才能生效

iptables -I FORWARD -p tcp --dport 80 -j DROP

iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

常用的IPTABLES規則如下:

隻能收發郵件,别的都關閉

iptables -I Filter -m mac --mac-source 00:0F:EA:25:51:37 -j DROP

iptables -I Filter -m mac --mac-source 00:0F:EA:25:51:37 -p udp --dport 53 -j ACCEPT

iptables -I Filter -m mac --mac-source 00:0F:EA:25:51:37 -p tcp --dport 25 -j ACCEPT

iptables -I Filter -m mac --mac-source 00:0F:EA:25:51:37 -p tcp --dport 110 -j ACCEPT

IPSEC NAT 政策

iptables -I PFWanPriv -d 192.168.100.2 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 80 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:80

iptables -t nat -A PREROUTING -p tcp --dport 1723 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:1723

iptables -t nat -A PREROUTING -p udp --dport 1723 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:1723

iptables -t nat -A PREROUTING -p udp --dport 500 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:500

iptables -t nat -A PREROUTING -p udp --dport 4500 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.2:4500

FTP伺服器的NAT

iptables -I PFWanPriv -p tcp --dport 21 -d 192.168.100.200 -j ACCEPT

iptables -t nat -A PREROUTING -p tcp --dport 21 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.200:21

隻允許通路指定網址

iptables -A Filter -p udp --dport 53 -j ACCEPT

iptables -A Filter -p tcp --dport 53 -j ACCEPT

iptables -A Filter -d www.3322.org -j ACCEPT

iptables -A Filter -d img.cn99.com -j ACCEPT

iptables -A Filter -j DROP

開放一個IP的一些端口,其它都封閉

iptables -A Filter -p tcp --dport 80 -s 192.168.100.200 -d www.pconline.com.cn -j ACCEPT

iptables -A Filter -p tcp --dport 25 -s 192.168.100.200 -j ACCEPT

iptables -A Filter -p tcp --dport 109 -s 192.168.100.200 -j ACCEPT

iptables -A Filter -p tcp --dport 110 -s 192.168.100.200 -j ACCEPT

多個端口

iptables -A Filter -p tcp -m multiport --destination-port 22,53,80,110 -s 192.168.20.3 -j REJECT

連續端口

iptables -A Filter -p tcp -m multiport --source-port 22,53,80,110 -s 192.168.20.3 -j REJECT iptables -A Filter -p tcp --source-port 2:80 -s 192.168.20.3 -j REJECT

指定時間上網

iptables -A Filter -s 10.10.10.253 -m time --timestart 6:00 --timestop 11:00 --days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j DROP

iptables -A Filter -m time --timestart 12:00 --timestop 13:00 --days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j ACCEPT

iptables -A Filter -m time --timestart 17:30 --timestop 8:30 --days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j ACCEPT

禁止多個端口服務

iptables -A Filter -m multiport -p tcp --dport 21,23,80 -j ACCEPT

将WAN 口NAT到PC

iptables -t nat -A PREROUTING -i $INTERNET_IF -d $INTERNET_ADDR -j DNAT --to-destination 192.168.0.1

将WAN口8000端口NAT到192。168。100。200的80端口

iptables -t nat -A PREROUTING -p tcp --dport 8000 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.200:80

MAIL伺服器要轉的端口

iptables -t nat -A PREROUTING -p tcp --dport 110 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.200:110

iptables -t nat -A PREROUTING -p tcp --dport 25 -d $INTERNET_ADDR -j DNAT --to-destination 192.168.100.200:25

隻允許PING 202。96。134。133,别的服務都禁止

iptables -A Filter -p icmp -s 192.168.100.200 -d 202.96.134.133 -j ACCEPT

禁用BT配置

iptables –A Filter –p tcp –dport 6000:20000 –j DROP

禁用QQ防火牆配置

iptables -A Filter -p udp --dport ! 53 -j DROP

iptables -A Filter -d 218.17.209.0/24 -j DROP

iptables -A Filter -d 218.18.95.0/24 -j DROP

iptables -A Filter -d 219.133.40.177 -j DROP

基于MAC,隻能收發郵件,其它都拒絕

iptables -I Filter -m mac --mac-source 00:0A:EB:97:79:A1 -j DROP

iptables -I Filter -m mac --mac-source 00:0A:EB:97:79:A1 -p tcp --dport 25 -j ACCEPT

iptables -I Filter -m mac --mac-source 00:0A:EB:97:79:A1 -p tcp --dport 110 -j ACCEPT

禁用MSN配置

iptables -A Filter -p udp --dport 9 -j DROP

iptables -A Filter -p tcp --dport 1863 -j DROP

iptables -A Filter -p tcp --dport 80 -d 207.68.178.238 -j DROP

iptables -A Filter -p tcp --dport 80 -d 207.46.110.0/24 -j DROP

隻允許PING 202。96。134。133 其它公網IP都不許PING

iptables -A Filter -p icmp -j DROP

禁止某個MAC位址通路internet:

iptables -I Filter -m mac --mac-source 00:20:18:8F:72:F8 -j DROP

禁止某個IP位址的PING:

iptables –A Filter –p icmp –s 192.168.0.1 –j DROP

禁止某個IP位址服務:

iptables –A Filter -p tcp -s 192.168.0.1 --dport 80 -j DROP

iptables –A Filter -p udp -s 192.168.0.1 --dport 53 -j DROP

隻允許某些服務,其他都拒絕(2條規則)

iptables -A Filter -p tcp -s 192.168.0.1 --dport 1000 -j ACCEPT

禁止某個IP位址的某個端口服務

iptables -A Filter -p tcp -s 10.10.10.253 --dport 80 -j ACCEPT

iptables -A Filter -p tcp -s 10.10.10.253 --dport 80 -j DROP

禁止某個MAC位址的某個端口服務

iptables -I Filter -p tcp -m mac --mac-source 00:20:18:8F:72:F8 --dport 80 -j DROP

iptables -I Filter -m mac --mac-source 00:11:22:33:44:55 -j DROP

在Oracle中,有3種辦法可以限定特定IP通路資料庫。第一種是利用登入觸發器,如下:

CREATE OR REPLACE TRIGGER CHK_IP_LHR

  AFTER LOGON ON DATABASE

DECLARE

  V_IPADDR    VARCHAR2(30);

  V_LOGONUSER VARCHAR2(60);

BEGIN

  SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS'),

         SYS_CONTEXT('USERENV', 'SESSION_USER')

    INTO V_IPADDR, V_LOGONUSER

    FROM DUAL;

  IF V_IPADDR LIKE ('192.168.59.%') THEN

    RAISE_APPLICATION_ERROR('-20001', 'User '||V_LOGONUSER||' is not allowed to connect from '||V_IPADDR);

  END IF;

END;

/

② 當觸發的對象類型為DATABASE的時候,登入使用者不能擁有“ADMINISTER DATABASE TRIGGER”的系統權限;當觸發的對象類型為“使用者名.SCHEMA”的時候,登入使用者不能擁有“ALTER ANY TIGGER”的系統權限。否則,這些使用者還是會正常登入到資料庫,隻是将相應的報錯資訊寫入到告警日志中。是以,擁有IMP_FULL_DATABASE和DBA角色的使用者以及SYS和EXFSYS使用者将不能通過這種方式限制登入。

iptables -A INPUT -s 192.168.59.1/32 -i eth0 -p tcp  --dport 1521 -j DROP

則,192.168.59.1這台主機将不能通過1521端口連接配接到資料庫伺服器了,會報“ORA-12170: TNS:Connect timeout occurred”的錯誤。

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

<b>     本文轉自lhrbest 51CTO部落格,原文連結:http://blog.51cto.com/lhrbest/1907972</b><b>,如需轉載請自行聯系原作者</b>

<b></b>