약 3일 간의 삽질과 구글 여러 많은 분들의 글을 취합해서 현재 내게 맞는 결과물을 내옴.

 

왜 필요한지는 다른 분들이 너무 잘 써 놓으셔서 그냥 본론만 작성하기로 함.

0------------------------------------------------------------------------------------------------------0

 

            << 실습 환경 >>

가상머신 : Oracle Virtual Box

사용 커넥터 : mod_jk

사용 OS : 전부 CentOS 7 ( WEB, WAS1, WAS )

WEB APACHE version : Apache 2.4.6

WAS Tomcat version : Tomcat 8.5

WEB IP : 192.168.0.123

WAS1 IP : 192.168.0.5

WAS2 IP : 192.168.0.120

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

( OS 설치 초기상태라 가정하고 시작 )

1. WEB 환경 구축

#yum -y update

#yum -y install wget vim curl net-tools gcc gcc-c++ httpd httpd-devel

 

apache-tomcat 커넥터는 다 다른 버전임으로 현재시점의 가장 최신 버전을 이용.

tomcat.apache.org 사이트를 들어가면 있다. ( 해당 URL은 복붙 안하는것을 추천 )

#wget https://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz

#tar zxf tomcat-connectors-1.2.48-src.tar.gz

#mv tomcat-connectors-1.2.48-src /usr/src

#cd /usr/src/tomcat-connectors-1.2.48/native

#ls

사진은 그냥 참조만 하시길...이미 완성후라 처음부터 하지는 않았음

configure 파일을 이용해 make 하기전에 알아야 하는게 apxs 위치인데 [모든 환경마다 저거 위치가 다름

#find / -name apxs

#./configure --with-apxs=/usr/bin/apxs

#make

#make install

               그렇게 되면 mod_jk.so 파일이 어딘가에 생기는데 

#find / -name mod_jk.so

어딘가에든 저렇게 생기면 OK! 오류 난것은 나도 책임 못 짐....그건 환경이 다른 것! 

본인 경험 상 Fedora34에서는 오류 났었음

 

#cd /etc/httpd/conf

#vim httpd.conf

       그냥 맨 밑에 작성 해도 됨

사실 LoadModule 중에 mod_jk를 쓸려면 LoadModule jk_module modules/mod_jk.so 만 써도 됨

 밑에서 2번째 것. mod proxy, mod proxy apj 다 해봤다.....사실...... 나머지는 다 작성하시길

!!!!! 참고 사항 :: JkMount 부분은 자유다. 모든 파일을 WAS에서 처리하고 싶으면 /* 만 쓰고

                     특정 파일들, jsp, do, xml 과 같은 파일들만 WAS에서 돌리고 싶으면 특정해서 써야 함

저장 후 

#cd /usr/src/tomcat-connectors-1.2.48-src/conf

#cp workers.properties workersmain.properties

#rm -f workers.properties

#vim workers.properties

여기서는 port는 허용가능한 영역이 있는데 그건 알아서들 찾아보고 임의로 부여 가능

저장 후 나와서

 

#ln workers.properties /etc/httpd/conf

이거 안해줘도 될거 같긴한데...일단 불안해서 했음

 

 

2. WAS 설정 

 >> 사실 이미 톰캣 설치 및 자바 설정은 다 되어있기도 하고 다른데가 설명 더 잘함ㅋ

      절대 귀찬아서가 아님!!  && 주의사항 : 각자 tomcat 위치는 다르니까 주의 할것

 

#cd /usr/local/tomcat8/conf

#vim server.xml

이 부분을 찾아서 이렇게 고쳐 놓아야 함.

WAS2 사진은 따로 첨부!

 

3. RESTART!!

   3-1 WEB  >> #systemctl restart httpd

   3-2 WAS  >> 방법이 여러 가지라 할 말이 없다...컴퓨터를 껐다 켜도 되고

                      톰캣 홈디렉터리 중 bin 밑에 가서 #./shutdown.sh    #./startup.sh 해도 되고

                      systemd에서 설정 후 systemctl 을 이용한 방법들이 있다.

 

이렇게 되면 

http://웹서버IP/ ~.jsp 형태의 모든 URL은 WAS1, WAS2로 가서 jsp 파일을 불러오게 된다.

 

 

4. jkmanager

httpd.conf 파일 작성 중 JkMount jkstatus, 그리고 workers.properties 파일에

jkstatus.type=status 는 jk Manager를 이용 할 수 있게 해주는 코드다.

httpd.conf 파일에 본인 로컬 IP 를 써 넣어야지 들어갈 수 있다.

 

브라우저 url 창에   http://웹IP/jkmanager/   를 입력하면

요런 페이지가 뜰것이다. 여기서 직접 WAS 연결을 조절 및 현 상태를 알아 볼수 있다.

 

3일간의 삽질 끝

'Study > IT' 카테고리의 다른 글

JSP. ResultSet & next()  (0) 2022.01.17
DDoS의 이해와 Linux 환경에서 간단한 DDoS코딩해보기  (0) 2021.12.01

JSP에 쓰이는 ResultSet 객체에 대해 알아 보았다.

(현재 AWS 3Tier Architecture, WAS Server를 JSP로 구현 중이다.

JSP에 대해 조금 아는 수준이며 나와 같은 수준이시면 그냥 봐도 무방 할 듯?)

이번 포스팅에는 제목에 나왔듯이 next();를 왜 써야 하는지에 대해 알아보겠다.

다른 블로그들에서는 while()문을 써서 여러 데이터를 뽑아서 뿌리는 것을 중점으로 포스팅 하는 것 같다.

하지만 나와 같은 고민을 하는 분들에게 그 나마 조금이라도 시간을 아끼시는 바람에서 글을 시작하겠다.

 

1. ResultSet ?

ResultSet은 어떤 실행 문에 대한 결과 값을 갖는 객체로 

주로 Database와 연동하여 정보를 가져와 변수선언과 동시에

해당 변수에 값을 저장하게 해주는 객체이다.

 

Ex. ResultSet rs = stmt.executeQuery(쿼리문);

기본적인 MySQL 연동 문이다.

16번 줄에 rs.next()를 썼는데, 

ResultSet 객체는 대표적으로

  1) 커서

  2) 데이터 가저오기

로 나눌 수있다.

 

(데이터 가져오기는  getString("필드"); getInt("필드"); 가 있고 나중에 따로 설명 하겠다.)

 

 '1) 커서' 는 데이터를 가져오면 현재 가리키고 있는 지점을 말한다.

C언어에서 공부 할 때도 배운 개념인데,

컴퓨터는 연산할 대상을 가리킴으로써 중심을 잡는 거 같다.

여기에는

next(); last(); first(); 함수들이 있다.

fist(); 함수는 커서를 데이터의 맨 처음으로!

last(); 함수는 커서를 데이터의 맨 마지막으로!

next(); 함수는 현재 커서에서 다음 칸으로!

커서 이동 함수들이다. 

그림으로 설명 하면 그냥 ResultSet rs = ....  해버리고 String 변수 = rs.getString("필드); 하면 바로 오류난다.

아마도 시작부분인 first()를 가리키고 있지 않을까 생각해본다.

Error!!

이렇게 작성하면 100프로 오류 난다.

맨 위에 사진 처럼 next(); 함수를 써서 첫 데이터를 가리키게 끔 해줘야 데이터가 나온다.

No Error

이렇게 가운데에 rs.next(); 함수를 써주어야 에러가 안 난다.

 

 

내가 공부하는 책에서는 last() first()함수들은 각각 마지막 레코드, 첫 번째 레코드로 이동시킨다 서술되어 있다.

내가 아직 부족해서 이 말을 제대로 이해 못 한 건지 뭔지 모르겠지만,

현재 나타는 현상/ 결과를 보면 내가 이해하는 바가 맞다 생각된다.

 

대부분의 블로그, 책이 이 부분을 안 알랴줌을 하는거 같아 일단 몇자 끄적여 본다.

부디 도움이 되셨길.

DDoS는 좀 오래된 공격기법이고, 혹자는 이제는 유치한, 또는 양야치(?)스러운 공격이라 불린다.

이 공격은 아직까지 무시 할 수 없는 수준이긴 하지만, 

기본적인 지식이 있으면 현대에서는 잘 안 쓰이고 비 효율적인 공격 기법이라는 것.

 

1.  DDoS 전에 DoS!!

DoS ( Denial of Service : 서비스 거부)는 우리 주변에서 발견 할 수 있는 현상이다.

예를 들면 유명 가수, 공연의 콘서트 티켓을 구매하는 사이트를 보면 알 수 있다.

BTS 공연 티켓을 사기 위해 전 세계인들이 앞 다투어 공연 티켓을 사기 위해 한 사이트로 몰린다.

그럼 사이트가 버텨내기에 힘든 트래픽이 발생, 이 사이트는 말그대로 지치다 못 해 뻗어버린다.

이때 이 사이트에 들어왔던 사람들이 사이트가 멈춘 것 같은 모습이나, 서비스 중지 페이지를 발견한다.

이런 현상이 DoS 현상 중 하나이고 이 현상을 이용해 Hacker는 공격을 감행한다.

 

2. DoS 공격의 원리

DoS 공격은 위에서 보았듯, 어떠한 한정적인 부분을 과부화 시켜 해당 장비, 서버가 서비스를 못 하게 만드는 것이다.

좀 더 자세히 말하면, 현재 우리가 쓰는 인터넷 통신 장비, 즉 PC는 자원을 갖고 있는데,

이 자원으로 말하자면, 우리가 이제는 쉽게 접하게 된 부품들, CPU, RAM, DISK 같은 종류가 되겠다.

Hacker는 이 자원들을 고갈시켜 PC를 마비시키는데, 각 자원(부품)별로 공격하거나,

또는 서버 컴퓨터 같은 경우는 인터넷 통신을 위해 있으니, 해당되는 사이트 트래픽을 과하게 생성한다.

 

3. DDoS!!

DDoS(Distributed Denial of Serivce : 분산 서비스 거부), DoS가 짜잘하게 여럿이 모이면 DDoS가 된다.

간단한 원리.

 

하지만 DDoS는 마치 6.25전쟁의 중공군을 연상시키기도 하고

흔히 DDoS공격 내부에서 쓰이는 용어인 'Zombie'를 연상시킨다.

사실 DDoS는 실질적으로 쓰이는 공격이며,

준비하는 과정과  단계를 보면 DoS는 정말 기본적인 핵심 원리이지만 전체적인 그림에서는 작게 보여진다.

 

 DDoS의 과정>>

DDoS, CNC서버와 ZOMBIE들의 감염, 그리고 공격 도표

Hacker는 공격대상을 선정하면

 > 1. CNC서버 컴퓨터가 될 존재들을 물색

 > 2. Zombie / Bot 역할을 할 PC들을 물색

 > 3. 모두 공격 수행을 시키기 위해 CNC, Zombie PC들을 감염시킨다. 

그림과 설명으로만 봐도 DDoS 공격을 위해 수 십~ 수 백대의 PC를 공격자는 찾아야 한다.

이것은 말이 쉽지 간단한 작업은 아니다. 요즘같이 보안의 중요성을 일반인들도 접하게 된 시대에는 찾기 더 힘들다.

보안이 취약한 PC들을 선정, 한 컴퓨터에서 모든 PC를 컨트롤 하기 힘드니 CNC들을 감염시키고

CNC들은 또 다시 Zombie들을 감염시켜 공격 대상을 공격하게 끔 만드는 코딩을 해야한다.

그리고 자신의 신분을 노출 시키지 않기 위해 코딩마지막에 자멸 코드를 삽입 해 정체를 숨기는 것 까지.

물론 해킹이라는 것이 쉽게 생각하면 할 수 있겠지만 이 과정은 한명, 소수가 수행 하기에는 오래 걸린다.

 

4. 현 시점에서의 DDoS 는?

    Ex>

얼마전에 우리나라 KT에서 대규모로 인터넷 통신이 안되었던 사건이 일어났다.

처음 KT의 입장은 대규모 DDoS공격이라 주장했다. (물론 나는 믿지 않았다.)

그리고 과학기술정보통신부에서는 DDoS공격이 아니라 발표한다. KT는 그제서야 말을 바꾼다.

 

DDoS는 대규모로 공격을 감행해야 한다. 

앞에 예를 들었듯, KT가 인터넷 통신 서비스가 안되었다. 약 1시간 동안.

물론 DDoS공격은 결론적으로는 아니었지만,

우리가 현재 꼭 써야하는 인터넷 통신이 안된 다는 것은 솔직히 공포를 느끼는 사람도 있었고

금전적 손실을 본 사람, 나처럼 수업을 집에서 듣다가 인터넷이 끊겨서 한 시간동안 멈춰야 하는

그런 경우들이 생겨난다.

즉 일상이 멈춘다는 것이다.

 

    Q. 그렇다면 DDoS는 흔한 것인가?

>> 위에 언급했듯이 대규모로 공격하는 것이다. 뉴스에 나올 법한 일이다.

자주 일어나기 힘든 공격이고, 그 이유 중 하나를 들자면,

과학 기술, 컴퓨터 부품들의 기술들이 날이 가면 갈 수록 발전한다.

'작년에 나온 CPU의 몇 배가 빠른 최신 CPU가 출시!', 이런 것만 봐도 기술이 몇 배로 좋아 진다.

이런 좋아지는 부품들은 수 초만에 어마어마한 연산을 해버린다. 

즉 자원이 상상을 초월하게 커졌다는 말이다.

DoS의 원리는 자원을 고갈 시키는 것인데, 자원이 마르기 힘들다면?

내가 본 DDoS 는 전쟁급, 한 회사를 조질 작정이 아니면 개인간에 하기도 유치한 공격이 아닌가 싶다.

 

 

5. Linux 환경에서의 DoS현상 By. C Language 코딩

이번 포스팅에서는 Fedora34를 설치한 가상머신에서의 환경임을 알린다.

 

     Practice 1>>

먼저 Disk를 잡아먹는 DoS현상을 연출 해보겠다.

/root 밑에  'test' 라는 디렉터리를 생성해 이 곳에서 실습을 하겠다.

 

 

disk를 잡아먹는 DoS공격 c파일을 만들고

 

 

코드는 이렇게 되는데

fd라는 변수에 /tmp/test 위치에 'tempfile' 파일을 생성, 

그리고 무한 루프로 buff크기만큼 계속 무엇인 가를 작성한다

이 코드를 실행한다면 매 초당 buff의 사이즈 만큼 디스크의 영역을 먹는다.

 

 

 

 

 

 

 

 

 

 


경고가 뜨는데, write가 아니라 fwrite라고 한다. 원래는 fwrite가 맞는데 딱히 상관 없다.

밑에 보다시피 멀쩡히 잘 생성 되었다.

그래서 터미널을 한개 더 띄워서

한쪽은 컴파일한 파일을 실행, 다른 한쪽은 df 명령어로 여분 디스크 용량을 확인해 가면서 비교 해보겠다.

 

 

 

 

 

 

 

 

 

먼저 띄우기 전의 상태다. /tmp의 용량을 보면 현저히 낮다. 1%썼고 48Kb를 썼다.

파일 실행

 

현 상태를 보면 1분도 안되었는데 2.0G를 써버렸다.

내 기억이 맞으면 tmp에 2기가를 줬던거 같은데;;

df 로 다시 확인해 보면

 

그렇다.... 다썼다....

30초도 안되어서...

 

 

 

#cat tempfile 로 tempfile에 뭐가 있나 봤더니 이런게 있다.

이 값들이 2기가를 순시간에 채워버렸다.

30초 미만에 2기가인데 

요즘 왠만한 피씨 사양들 다 1TB씩 하니....

이 공격으로 하다가는 금방 발각 될 것이다.

 

 

 

 

 

 

 


 

     Practice 2>>

이번에는 Memory 영역을 고갈 시키는 DoS현상을 코딩 해보겠다. ( tempfile은 지워야 된다...)

 

memory를 고갈시키는 DoS현상의 c파일 생성 / 코딩 시작

코드를 약간 분석 해보면, 

포인터 변수 a에 매모리 할당을 10000씩 하는것이다. ( 참고로 이 이상으로 하면 에러 뜬다. 컴파일이 안되는 걸로 암 )

메모리 할당을 무한루프 시키는 것. 그래서 헤더파일도 STDLIB.H 하나만으로 족하다. 

#gcc -o memd memd.c 로 컴파일

memd 파일을 실행하고 아까와 마찬가지로 터미널을 하나 더 띄워

#top 명령어로 현재 메모리 상태를 실시간으로 확인한다.

 

>> 실행 전

 

>> 실행 후

실행 하자 마자 스크린샷을 찍어야 했다. 

보다 시피 메모리의 77%를 차지하고 있다. 3초 내로 실행 중인 터미널은 종료 되며 memd 또한 종료 된다.

시스템이 Kill 시켜버린거다. 

이 또한 시스템의 진화로 먹히는 공격이 아니다....;;

 

 

     Practice 3>>

이번에는 Process를 점유하는 DoS현상을 코딩 해보겠다.

아이러니 하게 제일 간단하고, 제일 잘 먹히는 코딩이다.

process를

먹는 DoS현상 c파일 생성 및 코딩

fork 함수는 프로세스의 자식 프로세스를 생성 및 복제하는 함수다. 

stdio.h 헤더파일과 unistd.h 헤더파일을 추가적으로 써야 한다.

하지만 그런거 없어도 컴파일은 잘 만된다.

너무 걱정 말고 해도 된다. ( 솔직히 현대인들은 걱정을 너무 많이 한다.... ㅈㅅ..... )

이 파일은 검증 할 도구가 따로 필요 없다.

왜냐 바로! 즉각! 확인 가능하다.

터미널이 멈춰버린다.

이건 영상으로 찍어야 하는데, 내가 그런거는 하기 귀찬아서가 맞다....

직접 해보시길....

 

 

 

#DDoS공격

#CLanguage

 

'Study > IT' 카테고리의 다른 글

Tomcat-Apache2 연동[WEB-WAS연동]  (0) 2022.01.26
JSP. ResultSet & next()  (0) 2022.01.17

+ Recent posts