Oracle 10.2부터 DoS(Denial of Service) 공격에 대비하기 위해 다음 두 파라미터의 기본 설정값이 60초가 되었습니다.
- SQLNET.INBOUND_CONNECT_TIMEOUT (sqlnet.ora 파일에 설정)
- INBOUND_CONNECT_TIMEOUT_listenername (listener.ora 파일에 설정)
60초 안에 로그인이 되지 않으면 아래와 같은 에러가 발생하도록 만드는 것이지요.
WARNING: inbound connection timed out (ORA-3136)
이것은 일반적으로 error라기 보다는 normal warning으로 취급합니다.
로그인 시도가 급격히 증가했다는 것을 의미하기 때문입니다.
http://cafe.naver.com/prodba.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=11505
10g가 되면서 inbound_connect_timeout 이 60초로 바뀌게 되어, 가끔씩 alertlog 에
ORA-3136 inbound connection timed out 이 발생함.
1. CASE 1
WIPPY@/oracle> sqlplus /@rac1
SQL*Plus: Release 10.2.0.4.0 - Production on Wed Jan 7 13:33:27 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
이상태에서 타이핑 없이 대기를 하게되면 60초 후에 alert log에 ORA-3136 이 떨어지게 됨
그렇다면 그 60초 동안 어떤일이 발생하는가?
1) ps -ef|grep LOCAL=NO 로 확인해 보면 process가 하나 늘어남
2) v$process 나 v$resource_limit를 보면 process가 하나 늘어남
위를 통해서 60초를 강제로 설정해 놓은 이유를 알 수 있음.
누군가 악의적인 목적으로 저런 식의 접속을 한 다음 끊지 않으면 설정해 놓은 process개수를 다 채워버리게 되고
정상적인 connection이 처리되지 못하는 문제가 발생함.
따라서 60초를 주기로 oracle에서는 저런 process를 강제로 죽이는 것임
ORA-3136을 발생시키지는 않지만 유사한 경우가 있음.
2. CASE 2
WIPPY@/oracle> telnet 192.168.0.11 1521
Trying 192.168.0.11...
Connected to 192.168.0.11 (192.168.0.11).
Escape character is '^]'.
위와 같이 했을 경우에는 다음과 같은 현상이 발생함
1) ps -ef|grep LOCAL=NO 로 확인해 보면 process 하나 늘어남
2) v$process or v$resource_limit를 보면 변화 없음
즉 OS상에서는 process가 뜨지만 oracle의 view에는 반영이 되지 않는 상황.
이러한 상황도 system resource를 사용하는 것이기 때문에 그다지 좋은 상황은 아님
3. 메세지를 안나오게 하는 방법
1) sqlnet.ora 에 SQLNET.INBOUND_CONNECT_TIMEOUT = 0 설정
2) listener.ora에 INBOUND_CONNECT_TIMEOUT_<listener_name> = 0 을 설정
sqlnet.ora - SQLNET.INBOUND_CONNECT_TIMEOUT = 0 : sqlplus /@RAC1 에만 영향을 줌.
listener.ora - INBOUND_CONNECT_TIMEOUT_ = 0 : telnet 192.168.0.11 1521 에만 영향을 줌.
즉 APP의 접속 형태에 따라 sqlner.ora와 listener.ora를 취사 선택하거나 둘 다 설정을 해야 할 필요성이 있음.
4. 결론
INBOUND_CONNECT_TIMEOUT을 설정할때는 위와 같은 내용을 인지하고 설정을 해야 함.
무작정 ERROR를 보이지 않게 하기 위해서 설정을 한다면 보안상 심각한 문제를 야기할 수 있음.
'DB - ORACLE > Oracle Command' 카테고리의 다른 글
Dedicated Server 와 Shared Server (0) | 2015.01.19 |
---|---|
DB에서 object 의 권한 부여 확인 및 생성해 주는 쿼리 (0) | 2015.01.19 |
RAC 스토리지 이관 (ASM) (0) | 2015.01.19 |
Index 재생성시 테스트 방법 (0) | 2015.01.19 |
TEMP 테이블스페이스의 Really Status 쿼리 (0) | 2015.01.19 |