DONGBUM on blog

Linux

krcert의 Castle JSP 설치 방법

by on May.05, 2012, under Linux

KISA 한국인터넷진흥원의 인터넷침해대응센터에서는 Castle이라는 웹방화벽을 배포하고 있어서 설치해봤다. SQL 인젝션, 욕설 필터링 등등 좋은 기능이 많다.

이 소프트웨어는 PHP/JSP/ASP 3가지 버전으로 나와있어 자기 플랫폼에 맞는 버전으로 사용하면 된다. 내 서버의 경우에는 JSP와 PHP를 사용중인데 사실 PHP쪽은 잘 쓰지 않기도하고 JSP쪽으로 프로그래밍을 더 많이 즐기기 떄문에 JSP 버전으로 설치해보았다.

다운로드는 http://www.krcert.or.kr 에서 다운로드가 가능하다. 상단메뉴 중에 ‘웹보안서비스’에 ‘CASTLE’ 메뉴를 클릭하면 된다.

중요한 점 : 내가 해본 결과 이 페이지는 윈도우7 + 크롬에서는 잘 열리고 다운로드도 제대로 작동되었지만 맥 OSX 10.7 + Safari에서는 제대로 작동되지 않았다. 왜 다운로드가 안되나 한참 삽질했다.

다운로드하면 PHP/JSP/ASP 세가지 버전의 파일과 사용설명서, 설치설명서 등이 친절하게 들어있다. 사실 설치는 포함된 설치설명서 PDF 파일을 보고 그대로 하면 된다.

파일업로드 -> 자바 class 파일 컴파일 -> 기존 파일에 코드 삽입의 세단계로 이루어지는데 자바,  JSP와 서블릿을 조금이라도 해봤던 사람이라면 하나도 어렵지 않다.

문제는 다른 곳에 있었는데… 설치안내 문서에는 class 파일을 컴파일 할때 ‘javac *.java’를 실행하라고 나와있는데 이대로 했을 경우, EUC-KR 문자셋에 문제가 있다는 오류가 딱 100개 출력된다. 이 상태로 그냥 진행하면 작동은 되긴되나 나중에 방어 메시지가 한글이 모조리 깨지며 로그 파일의 한글도 모조리 깨지게 된다. java 파일을 열어봤으나 UTF-8로 제대로 저장되어 있었고 컴파일 명령도 제대로 내렸는데 왜 안됐을 까 한참 고민했는데 생각해보니 내 서버는 모든 환경을 UTF-8로 사용하고 있었다.

중요한 점 : 컴파일 할 때 ‘javac -encoding utf8 *.java’와 같이 -encoding 옵션으로 자기에게 맞는 문자셋을 지정해줘야한다. 정상적으로 컴파일이 되었다면 프롬프트에 아무런 메시지도 나타나지 않아야한다.

클래스 파일을 컴파일해서 넣고 진행했다. 이제서야 제대로 작동한다. install 화면을 진행하고 내 사이트의 헤더 파일에 프로그램 소스코드를 삽입한 후 작동테스트를 시작했다. 그런데 또 하나의 문제점 발견. 내 사이트에서는 예를 들어, a.jsp 파일에 form 양식이 있고 여기서 데이터를 입력 받은 다음 b.jsp 파일에 POST 형식으로 데이터를 넘기게 되어있었는데 a.jsp 파일에 캐슬 소스코드를 넣고 SQL 인젝션 테스트를 했더니 아무런 경고조치 없이 돌아가는 것이었다. 왜 이러나 고민하다가 b.jsp 파일에다가도 캐슬 소스코드를 넣었더니 그제서야 제대로 인젝션이 차단되었다.

중요한 점 : 데이터를 페이지에서 페이지로 이동시키며 처리하는 경우는 양쪽 모두에다가 캐슬 소스코드를 넣어줘야한다.

이렇게 설치하고 테스트해보면 SQL 인젝션을 잘 차단해주며 로그도 정상적으로 쌓인다.

 

사용해보니 몇가지 아쉬운 점은..

  1. 설치문서가 조금 단순하다. 좀더 다양한 상황에서 테스트해주시고 설치문서를 써주셧으면.
  2. 로그 파일이 저장되는 위치를 바꿀 수가 없다. 리눅스에서는 /var/log 디렉토리가 주로 로그파일 디렉토리로 많이 쓰이는데 castle은 로그파일이 무조건 캐슬 설치 디렉토리의 log 디렉토리에만 저장된다.
  3. 한 사이트마다 캐슬을 하나씩 설치해야한다. 캐슬 하나만 설치해서 여러사이트, 여러도메인에서 공유해서 사용할 수 있는 방법이 있으면 좋을 것 같다. 내 서버의 여러 사이트들에도 캐슬을 적용하고 싶었는데 한 사이트당 하나씩 설치해야하니 너무 부담스러워서 그만뒀다. 이렇게 설치해서 사용할 수 있는 방법이 있다면 설치문서에라도 좀 추가되길.
  4. iptables 같은 방화벽 소프트웨어와 연동해서 공격IP를 자동차단 할 수 있으면 더 좋을 것 같다. 웹프로그램의 특성상 시스템명령 수행이 좀 어렵긴하지만 가능하지 않을까? Runtime 클래스를 이용해도 될것 같고 아니면 나중에 C로 한번 만들어봐야할 것 같다.

하여튼 너무 좋은 프로그램 개발해주셔서 감사~ ^^ 혹시 나중에 krcert 관계자분이 이 글을 보게된다면 꼭 불편한 점과 아쉬운 점은 고쳐주셨으면 좋겠다.

Leave a Comment :, , , , , , , , , more...

Cacti에서 CPU Usage 표시하기

by on Apr.07, 2012, under Linux

모니터링툴인 Cacti를 설치하면 기본으로 있는 그래픽 템플릿으로 여러가지 모니터링 템플릿이 들어있는데 아쉽게도 여기에는 CPU 사용률에 대한 그래픽 템플릿이 없다. 물론 Host MIB – CPU Utilization이나 ucd/net – Load Average 같은 템플릿이 있지만 이것은 내가 원하는 ##%형태의 숫자를 보여주는 것이 아니었다.

그래서 역시 오늘도 구글님에게 물어본 결과 괜찮은 답변을 받았다. 역시나 이미 나와 같은 고민을 했던 외국인들이 있었다.

http://forums.cacti.net/about15412.html

글을 읽어보면 2-way system / 4-way system / 8-way system 으로 파일이 나뉘어있다. 서버의 CPU에 맞도록 다운로드 받는다. 리눅스 시스템의 경우에는 /proc/cpuinfo 파일에 프로세서 정보가 나와있으니 여기에 CPU가 몇개나 보이는지 확인한 후 적당한 것을 다운로드 받으면 된다.

내 서버의 경우에는 Intel Xeon E3-1220 프로세서를 사용하고 있고 1개의 CPU에 4개의 코어가 장착되어있으므로 4-way용으로 다운 받았다.

다운로드 받은 후 Cacti의 메뉴 중 import templete에 들어가서 다운로드 받은 xml 파일을 선택하면 cacti에 CPU 사용률을 표시할 수 있는 그래픽 템플릿이 생성된다.

Leave a Comment :, , , , more...

쉘에서 계정용량 출력하여 MySQL에 추가하기

by on Apr.03, 2012, under Linux

사용자들의 계정확인 페이지에서 계정용량을 확인할 수 있도록 제공하고 있는데 JSP페이지에서 시스템명령을 직접 수행하고 있다.

수행결과는 잘 나오고 있지만 문제는 가끔 Tomcat 서버가 다운이 된다는 것. 톰캣 서버의 로그를 자세히 살펴보기에는 너무 힘들어서 톰캣 서버 다운 문제가 혹시 이 문제가 아닌가 싶어서 계정용량 제공방식을 변경해보기로 했다.

계정용량을 cron을 통해 주기적으로 확인하여 MySQL 데이터베이스에 저장하고 계정용량을 표시할 때는 MySQL의 정보를 뽑아서 보여주기만 하면 된다.

일단 계정용량을 뽑는 명령은 다음과 같다.

du -shm /home/사용자ID | awk -F ‘[\t]‘ ‘{print $1}’

du 명령어의 출력결과를 파이프라인을 통해 재처리하는 것인데 처음에는 grep이나 cut 등의 명령으로 수행해봤지만 du 명령의 결과가 탭으로 구분되어있기 때문에 제대로 작동하지 않았다. awk 명령으로 가능할 것 같아서 찾아보니 한참을 찾아내어 위 명령어를 만들었다. 수행해보니 제대로 작동한다.

이제 이 명령어를 MySQL 데이터베이스에 추가하기만 하면 된다.

Leave a Comment :, , , , more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Blogroll

A few highly recommended websites...