Oracle Listener

Practical Oracle Security 第三章笔记 + 其他总结

 

1.   9i,保证设置监听密码

不设置密码,可以远程关闭监听,修改log文件位置覆盖重要的文件,导致DB崩溃

 

[oracle10@zhangqiaoc ~]$ ./tnscmd stop -h 83.16.16.200 -p 1509

sending (CONNECT_DATA=(COMMAND=stop)) to 83.16.16.200:1509

writing 87 bytes

reading

.G......"..;(DESCRIPTION=(TMP=)(VSNNUM=153094144)(ERR=0)(USECKPFILE=0))

tnscmd脚本在http://www.jammed.com/~jwa/hacks/security/tnscmd/ 下载

通过该脚本可以远程控制监听。

通过设置密码,可以限制该脚本对监听的动作

10g进行了一些安全相关的对监听器的重要修改,默认只有监听可执行文件的宿主可以管理监听器

 

2.   监听日志分析

监听日志提供了对监听器基本操作的审计,其记录每次连接,以及任何失败的命令

通过AWK进行简单的日志监控

#! /bin/awk

## analyze_listener_log.awk

## created by zhangqiaoc

function transDateFormat(i){

  MON=substr(i,4,3);

  if(MON=="JAN"){MONTH="01"}

    else if(MON=="FEB"){MONTH="02"}

    else if(MON=="MAR"){MONTH="03"}

    else if(MON=="APR"){MONTH="04"}

    else if(MON=="MAY"){MONTH="05"}

    else if(MON=="JUN"){MONTH="06"}

    else if(MON=="JUL"){MONTH="07"}

    else if(MON=="AUG"){MONTH="08"}

    else if(MON=="SEP"){MONTH="09"}

    else if(MON=="OCT"){MONTH="10"}

    else if(MON=="NOV"){MONTH="11"}

    else if(MON=="DEC"){MONTH="12"} 

  TDATE=substr(i,8,4)""MONTH""substr(i,1,2);

  if( TDATE >= BEGIND ){

    FLAG=1;

  }

}

 

BEGIN{

  FS="*";i=1;F=0;FLAG=0;

}

{

  if(BEGIND==""){FLAG=1}

  if($1 ~ /^[0-9][0-9]-[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/ && FLAG=="0"){

    transDateFormat($1);

  }

  if(M=="ERR" && FLAG=="1"){

    if (MESSAGE==""){MESSAGE="TNS-"}

    if($1 ~ /^[0-9][0-9]-[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/){

      if(F=="1"){

        print "*** "DATE"************************************"

        for(x=1;x

          print TMP[x];

        }

        F=0;

        print " "

      }

      i=1;

      DATE=$1;

    }

    TMP[i]=$0;

    i++; 

    if($0 ~ MESSAGE ){F=1;}

  }else if(M=="ANALYZE" && FLAG=="1"){

    if($2~ /\(CONNECT_DATA=\(S/){

      ### -----------------------------------------

      split($2,ARR,"\\)\\(");

      for(x in ARR){

        if(ARR[x]~"HOST="){

          HOST=ARR[x];gsub("HOST=","",HOST);

        }else if(ARR[x]~"USER="){

          USER=ARR[x];gsub("USER=","",USER);gsub(")","",USER);

        }else if(ARR[x]~"PROGRAM="){

          PROGRAM=ARR[x];gsub("CID=\\(PROGRAM=","",PROGRAM);

        }

      }

      ### -----------------------------------------

      split($3,ARR,"\\)\\(");

      for(x in ARR){

        if(ARR[x]~"HOST="){

          HOST=ARR[x];gsub("HOST=","",HOST);  

        }

      }

      ### -----------------------------------------

      NAME=HOST"."USER;

      y=0;

      for(x in NAMEARR){

        if(NAME==NAMEARR[x]){

          y=y+1;

          TMPSEQ=x;

          break;  

        }

      }

      if(y>0){

        CNTNAMEARR[TMPSEQ]=CNTNAMEARR[TMPSEQ]+1;

      }else{

        NAMEARR[i]=NAME;

        CNTNAMEARR[i]=1;

        i++; 

      }

      ### -----------------------------------------

      z=0;

      for(x in PROGRAMARR){

        if(PROGRAM==PROGRAMARR[x]){

          z=z+1;

          TMPSEQ=x;

          break;  

        }         

      }

      if(z>0){

        CNTPROGRAMARR[TMPSEQ]=CNTPROGRAMARR[TMPSEQ]+1;

      }else{

        PROGRAMARR[i]=PROGRAM;

        CNTPROGRAMARR[i]=1;

        i++; 

      }     

    }

  }else if(M=="STOP" && FLAG=="1"){

    if($2~"COMMAND=stop"){

      if($2 !~ "HOST=" && $1 !~ "USER="){

        print "[WARNING!!!]"$0  

      } 

    }

  }

}

END{

  if(M=="ERR"||M=="err"){  

    if(F=="1"){

      print "*** "DATE"************************************"

      for(x=1;x

        print TMP[x]; 

      } 

      print "\n"

    }

  }else if(M=="ANALYZE"||M=="analyze"){

    print "*** NODE ******************************"

    for(x in NAMEARR){

      printf "%-80s %s\n","  "NAMEARR[x],CNTNAMEARR[x];

    }

    print "*** PROGRAM ***************************"

    for(x in PROGRAMARR){

      printf "%-80s %s\n","  "PROGRAMARR[x],CNTPROGRAMARR[x];

    }

  }

}

捕获异常

awk -f analyze_listener_log.awk -v M=err listener9.log

捕获异常TNS-12505

awk -f analyze_listener_log.awk -v M=err -v MESSAGE=TNS-12505 listener9.log

捕获从20100407开始的异常

awk -f analyze_listener_log.awk -v M=ERR -v BEGIND=20100407 listener9.log

分析登录情况

awk -f analyze_listener_log.awk -v M=analyze listener9.log

[oracle9@zhangqiaoc log]$ awk -f analyze_listener_log.awk -v M=ANALYZE listener9.log             

*** NODE ******************************

  83.16.16.1.Administrator                                                       174

  83.16.16.163.Administrator                                                     4

  83.16.16.132.SYSTEM                                                            15

  83.16.16.163.oracle9                                                           2

*** PROGRAM ***************************

  sqlplus@SINGLE                                                                 1

  oracle                                                                         5

  C:\Program?Files\PLSQL?Developer\plsqldev.exe                                  152

  C:\Documents?and?Settings\Administrator\????\OWI\ASHMON\ashmon\bin\bltwish.exe 3

  D:\oracle\10.2.0\db_1\jdk\jre\bin\java.exe                                     7

  D:\OraWorkSpace\????????\????????\oracle????????\HCORACLE.exe                  11

  D:\oracle\10.2.0\db_1\bin\sqlplus.exe                                          1

  C:\Program Files\Common Files\SolarWinds\JobEngine\SWJobEngineWorker.exe       15

分析异常停止监听的情况

awk -f analyze_listener_log.awk -v M=STOP listener9.log

[oracle9@zhangqiaoc log]$ awk -f analyze_listener_log.awk -v M=STOP listener9.log

[WARNING!!!]07-APR-2010 11:32:03 * (CONNECT_DATA=(COMMAND=stop)) * stop * 0

[WARNING!!!]07-APR-2010 11:35:31 * (CONNECT_DATA=(COMMAND=stop)) * stop * 0

[WARNING!!!]07-APR-2010 11:37:59 * (CONNECT_DATA=(COMMAND=stop)) * stop * 0

[WARNING!!!]07-APR-2010 16:19:48 * (CONNECT_DATA=(COMMAND=stop)) * stop * 0

[WARNING!!!]07-APR-2010 13:27:23 * (CONNECT_DATA=(COMMAND=stop)) * stop * 0

 

3.   加密传输数据

监听通过设置协议为TCPS,只接受加密的通信

此特性以后在研究

 

4.   ADMIN_RESTRICTIONS_LISTENER10=ON

通过在listener.ora设置该参数,限制通过lsnrctl命令来运行一些set命令,以防止通过设置log_file来覆盖重要的文件,设置trc_level来生成大量TRC崩溃程序

设置前

LSNRCTL> set log_file /tmp/1.txt

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zhangqiaoc)(PORT=1510)))

listener10 parameter "log_file" set to /tmp/1.txt

The command completed successfully

设置后

LSNRCTL> set log_file /tmp/1.txt

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zhangqiaoc)(PORT=1510)))

TNS-12508: TNS:listener could not resolve the COMMAND given

 

5.   extproc

通过EXTPROC可以使在数据库和OS上进行控制的操作变的更容易

原则上,如果不调用外部程序,应该从监听中注销掉EXTPROC

可以通过分析监听器日志来确定是否存在EXTPROC

如果确定需要,应该分离出一个监听器用于专门的外部调用,通过ENV限制监听器调用的库

 

6.   限制节点登录

sqlnet.ora

tcp.vaildnode_checking=yes

tcp.invited_nodes=(localhost,83.16.16.200)

 

设置invited_nodes后貌似无法动态注册监听,需要手工配置

 

7.   LOG & TRACE

sqlnet.ora

文件

LOG&TRACE

SERVER

CLIENT

sqlnet.ora

LOG

LOG_DIRECTORY_SERVER

LOG_FILE_SERVER

LOG_DIRECTORY_CLIENT

LOG_FILE_CLIENT

TRACE

TRACE_DIRECTORY_SERVER

TRACE_FILE_SERVER

TRACE_FILELEN_SERVER

TRACE_FILENO_SERVER

TRACE_LEVEL_SERVER

TRACE_TIMESTAMP_SERVER

TRACE_DIRECTORY_CLIENT

TRACE_FILE_CLIENT

TRACE_FILELEN_CLIENT

TRACE_FILENO_CLIENT

TRACE_LEVEL_CLIENT

TRACE_TIMESTAMP_CLIENT

TRACE_UNIQUE_CLIENT

TRACE

 

TNSPING.TRACE_DIRECTORY

TNSPING.TRACE_LEVEL

listener.ora

LOG

LOG_DIRECTORY_listener_name

LOG_FILE_listener_name

 

TRACE

TRACE_LEVEL_listener_name

TRACE_FILELEN_listener_name

TRACE_FILENO_listener_name

TRACE_TIMESTAMP_listener_name

 

 

格式化TRACE

trcasst [options]

只能格式化LEVEL16 SUPPORT

 

Usage : trcasst [options]

      [options]  default values are -odt -e0 -s

        always last argument

    -o[c|d][u|t][q]  Net Services and TTC information

      [c]  Summary of Net Services information

      [d]  Detailed Net Services information

      [u]  Summary of TTC information

      [t]  Detailed TTC information

      [q]  SQL commands (used together with u)

    -s  Statistics

    -e[0|1|2]  Error information, default is 0

      [0]  Translate NS error numbers

      [1]  Error translation

      [2]  Error numbers without translation

    -l[a|i ]  Connection information

      [a]  List all connections in a trace file

      [i ]  Decode a specified connection

 

8.   SDU

增加该参数以弱化SQL*Net more data from clientSQL*Net more data to clientSQL*Net more data from dblink

需要客户端,服务器端同时设置

该参数对STANDBY的日志传输性能有较大影响

 

9.   INBOUND_CONNECT_TIMEOUT

sqlnet.ora中的该参数:

表示等待用户认证超时的时间,单位是秒,缺省值是60

如果用户认证超时了,服务器日志alert.log显示出错信息

WARNING: inbound connection timed out (ORA-3136)

listener.ora中的该参数:

表示等待用户连接请求超时的时间,单位是秒,缺省值是60

如果连接请求超时了,监听器日志listener.log显示出错信息

TNS-12525: TNS:listener has not received client's request in time allowed

服务器日志alert.log里不报错

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8242091/viewspace-631607/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8242091/viewspace-631607/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值