Part #5 : 기본 WAF 서비스에 Error 메세지 커스터마이징하기
지금까지 테스트한 모든
경우에 혹여나 Error 가 발생되면 늘 같은 형태의 Error 메세지가 출력된 것을 확인 가능하며 실제적으로 운영시스템에
적용하고자 한다면 이 부분을 좀 더 친절하게 변경하고 싶은 생각이 들것입니다. 이번 강좌에서는 간단하게 Error 가 발생시에
해당 메세지를 커스터마이징하는 것을 보여드리도록 하겠습니다.
이전에 Request Map 이나 Response Map 을 만들었던 것과 동일하게 Error 를 컨트롤 하기 위해서 Error Map 을 하나 만듭니다. (샘플이니 Matching Rule 은 all 로 합니다.)
Rule Action 에서는 GatewayScript(Javascript) 로 설정하고 script 파일의 위치를 지정합니다.
(참고적으로
그간 강좌에서 XSLT 나 Map 을 사용했지만 여기서는 좀 더 개발자 친숙한 GatewayScript 를 사용하도록 합니다.
GatewayScript 는 보안과 성능이 강화된 Javascript 로 이해하면 되시며 그간 작성된 XSLT 는 모두
Gatewayscript 로 대체 가능합니다.
보다 상세한 내용은 하단의 링크를 참고하시기 바라겠습니다.
GatewayScript for DataPower 7.0.0
ftp://ftp.software.ibm.com/software/iea/content/com.ibm.iea.wdatapower/wdatapower/1.0/xi52/DataPower_70_GatewayScript.pdf
)
Processing Rule 에서 Rule Direction 을 Error 로 설정하고 Rule Action 을 하나 만듭니다.
error_handle.js ---------------
// Get the current exception values
var sm = require ('service-metadata');
var errorHead = sm.errorHeaders;
// Check if we are handling 500 error
if (errorHead.includes('500')) {
var httpCode=500;
var httpReasonPhrase='Target Server Internal Error';
var errorMessage=sm.errorMessage;
} else {
var httpCode=555;
var httpReasonPhrase='Server Error';
var errorMessage=sm.errorMessage;
}
// Compute the new Error response
var httpResponse = { "httpCode" : httpCode,
"httpMessage" : httpReasonPhrase,
"moreInformation" : errorMessage };
//error code changed into normal 200 OK
sm.errorProtocolResponse = '200';
sm.errorProtocolReasonPhrase = 'OK';
session.output.write(httpResponse);
error_handle.js ---------------
추가적으로 Error 처리를 위한 다양한 변수나 객체들에 대한 내용은 하단의 링크를 참고하시기 바라겠습니다 .
Error handling variables
https://www.ibm.com/support/knowledgecenter/SS9H2Y_7.5.0/com.ibm.dp.doc/errorhandlingvariables_reference.html
Supported objects and modules
https://www.ibm.com/support/knowledgecenter/SS9H2Y_7.5.0/com.ibm.dp.doc/gs_toc_js.html
이전 강좌에서 언급했지만 Gatewayscript 와 같은 script 파일은 작성 후에 하단과 같이 local 폴더에 넣어두고 사용하면 됩니다.
이제 설정을 마무리하고 간단히 테스트 해보면 하단과 같이 기존 Error 발생시에 받았던 문구를 원하는 형태로 수정하는 것이 가능하다라는 것을 확인 가능합니다.
(예시는 Error 라고 해도 200 정상을 받고 그 메세지의 body 에 실제 error code 와 message 를 넣은 형태입니다. )
여기까지
잘 따라왔다면 IBM DataPower Gateway 를 가지고 기본적인 WAF 서비스 작성부터 시작해서 필요한 보안
강화(SQL Injection, XSS 등)와 추가적인 REST/JSON 요청 처리, 로드 밸런싱, Error 커스터마이징까지
일반적으로 필요한 내용들은 간단하게나마 한번씩 다 다룬 것 같습니다. 간단히 다루기는 했지만 지금까지의 강좌를 천천히 따라해 보면
IBM DataPower Gateway 의 전반적인 흐름과 동작 방식을 이해할 수 있으며 이를 통해 조금 다르더라도 각
고객사의 요건에 따라 필요한 부분을 추가 가능할 것이라고 판단됩니다. 결국은 Request Map, Response Map,
Error Map 을 어떻게 정의하고(Matching rule) 어떤 액션들을(Processing Rule) 넣느냐에 따라
Secure Gateway 로서 그 안에서 원하는 어떠한 액션들도 수행 가능하다라는 것을 알 수 있을 것 입니다.
그럼 IBM DataPower Gateway 를 사용한 WAF 구성 강좌는 여기까지 살며보는 것으로 하고 이번 강좌는 여기서 마무리 하도록 하겠습니다.
참고 #1: DataPower 의 WAF 설정을 export 한 백업 파일 (DataPower 환경이면 바로 import 하여 확인 가능)
참고 #2 : DataPower 의 log 를 확인하시면 하단과 같이 보안 위협에 의해 발생되는 error 를 좀 더 자세히 확인 가능합니다.
참고 #3 : WAF 에서 다루었던 대부분의 기능은 좀 더 세밀하게 MPGW(Multi-Protocol GateWay) 에서도 구성 가능합니다.
댓글