tomcat과 jenkins 서버가 같이 있는 경우 문제가 발생했다.

기존에는 배포서버에서 톰캣 서버로 ssh 접속하여 tomcat 재기동을 하였지만

이번 구성은 서버 하나에 모든 구성이 들어가게 되어 tomcat과 jenkins 서버가 같이 있게 되었다.

 

기존 처럼  스테이지를 아래와 같이 구성했다.

    stage('Deploy1') {
        sh "sh /data/web3/deploy1.sh"
        sh "sh /data/web3/healthcheck1.sh
    }

물론 배포 및 재기동도 잘 되었다.

그런데 핼스체크이후 파이프 라인이 종료하면 톰캣도 종료되는 것이다.

 

이런 파이프라인이 종료하면 파이프라인에서 실행한 프로세스도 같이 종료시키는 사상이라고 한다.

 

배포 스크립트를 백그라운드로 실행하고 실행 시 JENKINS_NODE_COOKIE=dontKillMe 옵션을 주면 된다.

    stage('Deploy1') {
        sh "JENKINS_NODE_COOKIE=dontKillMe && nohup sh /data/web3/deploy1.sh &"

        sh "slepp 10s"
        sh "sh /data/web3/healthcheck1.sh
    }

 

 

서버간 방화벽 뚤렸는지 확인할때

보통 telnet을 사용한다.

 

telnet 아이피 포트

> telnet 192.168.0.10 8080

 

그런데 요즘 보안때문인지 telnet을 사용 못하게 하는거 같다.

그렇다고 서버에 내맘대로 설치할 수도 없는 거고...

 

이럴때 대신 사용할 수 있는 명령어가 몇개 있다.

 

1. curl -v http://아이피:포트

> curl -v http://192.168.0.10:8080

curl은 대부분의 lnux환경에 기본 설치되는 패키지로 대부분 사용할 수 있다.

 

2. wget http://아이피:포트

> wget http://192.168.0.10:8080

wget은 웹에서 파일을 다운로드 하는 용도 이지만 해당 아이피와 포트가 열렸는지 확인 할 수 있다.

 

3. nc -v 아이피 포트

> nc -v 192.168.0.10 8080

nc는 상대 서버의 포트가 열렸는지 확인하거나 내 서버의 포트를 임시로 띄울때 쓸수 있다.

ex) 내 서버 포트 임시로 띄울때

> nc -l 8888

--> 8888 포트를 listen 상태로 오픈

linux에서 보통 톰캣이나 Nginx는 root 가 아닌 일반 사용자로 띄우므로

서버가 무슨일이 있어 재부팅되는 경우

서비스 하는 application을 일반 유저로 실행해야 한다.

 

우선 실행할 쉘스크립트를 만든다.

> vi /data/restart.sh

#!/bin/bash

sh /data/tomcat/bin/startup.sh

/data/nginx/sbin/nginx

등등 서비스를 실행하는 명령을 모아놓는 파일을 생성한다.

 

해당 파일에 실행권한을 주고

> chmod 744 /data/restart.sh

 

이후 crontab 에서 서비스할 스크립트를 실행해 주면 된다.

>crontab -e

@reboot /data/restart.sh

 

@reboot는 크론식에서 서버가 재기동 되었을때 1번 실행된다.

 

리눅스 서버 설정 파일등 vi로 들어가면 주석이 검은 색 바탕에 시퍼런 글씨라 도저히 눈아파서 알아볼수가 없다.

 

 

눈이 튀어 나올거 같다.

 

vi 설정을 변경해 보자

사용자 홈으로 이동한다.

> cd ~

vi 설정하는 파일을 열거나 만든다.

> vi .vimrc

설정한 적이 없으면 새파일로 만들어 진다.

:colorscheme torte

무난한것 하나를 골라서 사용하면 된다.

 

사용할 color 목록은

> ll /usr/share/vim/vim74/colors/ 목록이 나온다 . vim74 는 리눅스별로 다른 숫자이니 자신의 서버에 맞게 찾으면 된다.

 

 

tomcat을 로컬에 설치해서 여러가지 버전별로 테스트를 해볼때가 있다.

 

요즘은 거의 SpringBoot 라서 직접 톰캣을 올리는 경우는 거의 없지만

레거시 프로젝트 유지보수를 위해서는 어쩔수 없이 플젝 자바 버전에 맞는 톰캣을 올리는 수밖에..

 

우선 윈도우에서는 톰캣 폴더의 /bin/ 폴더 아래에 startup.bat 을 실행시키면

같은 폴더에 catalina.bat 을 실행하게 된다. 리눅스 같긴 하지만.

 

catalina.bat 파일의 주석 아래부분에 JAVA_HOME과 JRE_HOME을 설정해 주면 된다.

rem ---------------------------------------------------------------------------

setlocal

set "JAVA_HOME=C:\util\JAVA\jdk-17.0.2"
set "JRE_HOME=C:\util\JAVA\jdk-17.0.2"

set "JAVA_HOME=C:\util\JAVA\jdk-17.0.2"
set "JRE_HOME=C:\util\JAVA\jdk-17.0.2"

 

톰캣 실행 시 

org.apache.catalina.webresources.cache.getresource unable to add the resource at

오류는

 

톰캣에 캐시 메모리가 부족하기 때문에 발생한다.

특별한 설정을 하지 않으면 기본 10240(10MB) 가 디폴트값이다.

 

캐시를 늘려주는 설정을 하면 된다.

톰캣/conf/context.xml 에

<Resources cachingAllowed="true" cacheMaxSize="102400" />

를 추가해 주면 된다.

 

1. 톰캣에서 기본 docBase 이외에 물리적으로 다른 폴더를 

하위폴더로 잡고 싶을때 context를 추가해 준다.


<Context path="/contents" docBase="/data/upload" reloadable="false" crossContext="true" />



2. 해당 폴더에 WEB-INF폴더를 만들고 web.xml 을 만든다

해당 web.xml에


    <security-constraint>

      <display-name>JSP Protection</display-name>

      <web-resource-collection>

        <web-resource-name>SecureJSPPages</web-resource-name>

          <url-pattern>*.jsp</url-pattern>

      </web-resource-collection>

      <auth-constraint>

        <role-name>nobody</role-name>

      </auth-constraint>

    </security-constraint>


를 추가하여 jsp가 실행되지 않게 설정한다.


웹취약성점검툴인 OWASP ZAP을 실행하였는데

미디움 레벨로 제일 많이 나오는 경고가


X-Frame-Options Header Not Set 경고이다.

내용은 아래와 같다.




Medium (Medium)

X-Frame-Options Header Not Set

Description 

X-Frame-Options header is not included in the HTTP response to protect against 'ClickJacking' attacks.

URL http://localhost:8080/usr/main/UsrMainBasc0102.do?popupSeq=71 

Method GET 

Parameter X-Frame-Options 


해결

Most modern Web browsers support the X-Frame-Options HTTP header. 

Ensure it's set on all web pages returned by your site 

(if you expect the page to be framed only by pages on your server (e.g. it's part of a FRAMESET) 

then you'll want to use SAMEORIGIN, otherwise if you never expect the page to be framed, 

you should use DENY. ALLOW-FROM allows specific websites to frame the web page in supported web browsers).


참조

http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx


클릭제킹이란 간단하게

사용자의 클릭이 의도하지 않은 화면을 클릭하게 해서 사용자의 의도와 다른 이벤트를 발생시키는것이다.

요즘 가장 많이 보이는것이

광고 레이어를 투명하게 만들어서 클릭하면 광고페이지로 이동하게 만드는것

frame, iframe, obejct 등을 이용해서..


아무튼 해당 경고를 제거할려면

web.xml에 다음과 같은 필터를 추가한다.


    <!-- X-Frame-Options header -->

    <filter>

        <filter-name>httpHeaderSecurity</filter-name>

        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>

        <init-param>

            <param-name>antiClickJackingOption</param-name>

            <param-value>SAMEORIGIN</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>httpHeaderSecurity</filter-name>

        <url-pattern>*.do</url-pattern>

    </filter-mapping>



경로는 *.do만 설정

클릭젝킹방지설정은 

DENY, SAMEORIGIN, ALLOW-FROM allows

중 원하는 설정으로...


+ Recent posts