ACCESS / DENY 설정

Client에서 접속을 시도할 때, 특정 IP address 나 newtork/netmask 들을 기준으로 요청에 대한 ACCESS/DENY를 설정할 수 있다.

    • 요청 허용과 제한이 적용되는 순서 설정
    • ACCESS 절은 DIRECTORY/URI/EXT/TCPGW 절에 적용될 수 있으며, 각각에서 정의한 리소스를 허용 또는 제어한다. 

예시

ACCESS 절 추가

#WebtoB
vi http.m

#ACESS절 추가
*ACCESS
#특정 IP만 DENY, 그 외 모든 IP 허용
access1  Order = "allow, deny", Allow = "all"
access2  Order = "deny, allow", Deny = "[IP 1],[IP 2]",Allow = "[IP 1],[", 
access3  Order = "allow, deny", Allow = "211.1.1.0/255.255.255.0"
access4  Order = "deny, allow", Deny = "211.1.1.30"
access5  Order = "allow, deny", Allow = "all",Deny = "211.1.1.30"

ACCESS 절은 Order 옵션의 순서에 따라 설정이 다르게 적용된다.

allow, deny : Method> Allow> AllowIf> Deny> DenyIf 순서로 match 한다.

deny, allow : Method > Deny > DenyIf > Allow > AllowIf 순서로 match 한다.

vi http.m

*ACCESS
access1  Order = "allow, deny", Allow = "all"
access2  Order = "allow, deny", Allow = "211.1.1.10, 211.1.1.20"
access3  Order = "allow, deny", Allow = "211.1.1.0/255.255.255.0"
access4  Order = "deny, allow", Deny = "211.1.1.30"
access5  Order = "allow, deny", Allow = "all",Deny = "211.1.1.30"

 

필수 옵션 ACCESS name = <string> Access 절의 이름을 임의로 정할 수 있다.
선택 옵션 Method = <literal> 적용 할 HTTP 메소드를 설정한다.
MethodException = <literal> 제외 할 HTTP 메소드를 설정한다.  
Order = <literal>    
Default - "Deny,Allow" Allow, AllowIf, Deny, DenyIf, Method가 적용되는 순서를 설정한다 (하단 표 참조)  
Allow = <literal> 요청이 허용되는 IP 주소나 network/netmask들을 설정  
Deny = <literal> 요청이 거절되는 IP 주소나 network/netmask들을 설정  

 


GOTOEXT = Y 설정이 들어가 있는 경우

GOTOEXT = Y 설정이 있는 경우, JEUS를 거치지 않고 바로 WebtoB로 요청을 처리하기 때문에 URI로 요청이 가지 않는다.

이럴 경우, 요청을 받는 해당 vhost에 rewrite 설정을 통하여 특정 IP에 대한 요청을 처리해야 한다.

  • URLRewrite
  • URLRewriteConfig
vi http.m

v_test          DOCROOT="/home/webtob5/webtob/docs/",
                HOSTNAME = "mail.test.com",
                HOSTALIAS = "192.168.40.137",
                PORT = "80",
                ServiceOrder = "uri,ext",
                ERRORDOCUMENT = "403,404,503",
                METHOD = "GET, POST, -HEAD, -OPTIONS",
                #Headers = "gzip,cors_all",
                #Headers ="security,X-XSS,X-Content,strict,X-Download",
                **URLRewrite = Y,
                URLRewriteConfig = "$WEBTOBDIR/config/rewrite.conf",**
                LOGGING = "acc_test",
                ERRORLOG = "err_test"
vi rewrite.conf

RewriteCond %{REQUEST_URI} !error ## 무한 redirect 방지
RewriteCond %{REMOTE_ADDR} ^139.xx.xx.132$ ##특정 ip 
RewriteRule . <https://xxx.go.kr/err/error.html> ##호출 url 페이지

즉, IP가 139.xx.xx.132로 들어오는 요청에 대해 https://xxx.go.kr/err/error.html errorpage로 redirect 시키겠다는 의미이다.

WebtoB는 Apache와 동일한 형식으로 로그를 기록하고 있으며 포맷도 동일하게 사용한다.


WebtoB 로그 구분

- syslog

  WebtoB Engine에서 남기는 로그로 WebtoB의 이상 유무를 체크하여 로그로 남긴다.

  특이한 이상이 없는 한 많은 로그를 남기지 않는다.

  일별로 생성되며 기본위치는 $WEBTOBDIR/log/syslog 이다.

 

- errorlog

  클라이언트가 웹으로 접속하여 호출 시 에러가 발생하는 모든 uri 정보를 남긴다.

  일별로 생성되며 기본위치는  $WEBTOBDIR/log/errorlog 이다.

 

- accesslog

  클라이언트가 웹으로 접속 시 호출하는 모든 요청정보를 남긴다.

  요청이 많으면 파일크기가 상당히 커지므로 로그 관리에서 access log 관리가 가장 중요하다.

  일별로 생성되며 기본위치는  $WEBTOBDIR/log/accesslog이다.

 


WebtoB 로그 포맷

webtob는 기본 로그 포맷으로 3가지 alias를 제공하고 있다.

  • Default
  • COMMON
  • COMBINED

보안 취약점 조치를 위해 WebtoB Access log의 포맷 변경이 필요할 경우 DEFAULT -> COMBINED로 변경하면 된다.

 

 

Default : [요청 IP] [요청처리를 완료한 시간] [HTTP Request의 Request line 전체] [HTTP Status Code] [헤더를 제외한 응답의 Byte] [요청 처리하는데 소요된 시간 ms]

 


USERLOGFORMAT 설정

WebtoB5 에서는 공통으로 사용될 로그 포맷을 설정할 수 있도록 *USERLOGFORMAT 절을 제공하고 있다.

기존 VHOST가 많을 경우에 동일한 포맷을 설정하고자 할 때 해당 *USERLOGFORMAT 절에 사용자가 로그 포맷을 설정하고 *LOGGING 절에서 해당 설정 포맷을 사용할 수 있도록 하였다.

 

*LOGGING
log1        Format = "format1", FileName = "C:/TmaxSoft/WebtoB4.1.9.1/log/access.log",
            Option = "sync"
            ...
*USERLOGFORMAT
format1     Format = "%h %l %u %t \"%r\" %s %b" 



ISSUE

클라이언트가 웹 페이지 호출 시 페이지가 정상적으로 작동하지 않음

JEUS Container Log 확인결과  failed because of java.net.SocketTimeoutException: Read timed out 발생

 

 

TimeOut?

프로그램이 특정 시간 내에 성공적으로 수행되지 않아서 진행이 자동적으로 중단되는 것

응답을 무한대로 기다릴 수 없기 때문에 기다리는 시간을 정해주어야 한다.

 

Read TimeOut (단위 ms)

JEUS에서 Web Connection을 통해 Web Server와 커넥션을 맺는다.

ReadTimeOut 시간을 설정하여 Web Server로부터 아무런 메시지가 오지 않는다면 커넥션에 문제가 있다고 간주하고 새 커넥션을 맺는다.

 

SvrChkTime

서버와의 연결이 정상인지 확인하기 위해 체크하는 시간을 설정하며 방화벽을 사이에 두고 연결된 JEUS와의 연결을 확인하는 데 사용된다.

 

SvrChkTime을 설정하고 서비스 요청이 없는 Ready 상태의 커넥션에 대해서 연속된 2회의 SvrChkTime에 의한 KeepAlive 요청에도 응답이 없으면 해당 커넥션에 이상이 발생했다고 인식하고 해당 커넥션을 단절하여 서비스 분배에서 제외한다.

 

 

■ http.m

*Server 절의 해당 Server에 설정한다.

설정 확인

wsadmin -i

cfg -svr


Read-timeout 산출 공식


(SvrChkTime X 2000) - 10000

 


 

클라이언트 요청 시 웹 응답시간이 오래걸리는 현상 해결

> WebtoB Log 확인

 

No free slots available for the new JSV connection. jsvname='jsvname'  


 

No free slots available for the new JSV connection

> WebtoB http.m  MinProc, MaxProc 설정과 JEUS Web-Connection Thread 수가 불일치해서 발생하는 문제

 

WebtoB MinProc, MaxProc 수와 JEUS Thread 수를 동일하게 설정해주어 해결한다.

 


 

WebtoB http.m *SERVER절 확인

 

MinProc, MaxProc : 30 설정 확인

 

JEUS6

 JEUS_HOME/config/`hostname`/***_servlet_engine > WEBMiain.xml 

THread min, max 설정 확인

 

JEUS7 이상

Webadmin 접속 -> Servers -> MS(컨테이너) 선택 -> Engine텝 -> Web Connection -> webtob 리스너 선택 -> 하단에 Thread 수 확인

 

Caching?

캐싱은 이미 로드된 데이터나 계산된 결과값의 복사본을 저장함으로써 처리 속도를 향상시키며,

이후 들어온 요청을 더 빠르게 처리할 수 있다.

 

Web Cache?

Client가 웹 사이트(Web Server)에 접속할 때, 정적 컨텐츠(PNG, JS, CSS 등)을 특정 위치에 저장하여, 웹 사이트 서버에 해당 컨텐츠를 매번 요청하는 것이 아닌, 특정 위치에서 로드함으로써 사이트의 응답시간을 줄이고 서버의 트래픽 감소 효과를 볼 수 있다.


Session VS Cache ?

 

간단히 설명하자면 Session과 Cache의 큰 차이점은 Server의 자원사용 유무다.

Session은 서버의 자원을 사용하지만 Cache는 서버의 자원을 사용하지 않고 웹 사이트에서 처리한다.


 

WebtoB Caching Option

WebtoB는 기본적으로 IMAGE, HTML, DIR Caching을 지원한다.

HTH 프로세서에서 캐싱 관리를 하고 이미지의 개수가 많거나, 사이즈가 큰 경우 Entry 개수를 조정하여 튜닝 할 수 있다.

 

$WEBTOBDIR/config/http.m 파일 내 *NODE 절에 설정한다.

*NODE

…

CacheKey = HOST_URI,   #(default)

CacheEntry(ce) = 1024,

MaxCacheMemorySize(mcms) = 100,        # (MByte)

CacheMaxFileSize(cmfs) = 4096,             # (Byte)

CacheRefreshImage = 3600,                 # (sec.)

CacheRefreshHtml = 3600,                  # (sec.)

CacheRefreshDir = 3600,                    # (sec.)

CacheRefreshJsv = 3600,                    # (sec.)

CacheRefreshRproxy = 3600,                # (sec.)
기능 기본값 설명
CacheKey HOST_URI 캐싱하기 위한 Key 값을 생성할 때 사용할 값 설정
4.1.5.0 이상 REAL_PATH 지원
CacheEntry 128 HTH 캐시(Cache) Hash 테이블 키의 크기를 설정
MaxCacheMemorySize 100Mbyte HTH 프로세스가 캐시를 위해 사용하는 최대 메모리 사이즈를 설정
4.1.5.0 이 후 버전에서 적용 됨
CacheMaxFileSize 4096byte 캐시할 수 있는 응답(Response Header + Response Body) 하나의 최대 사이즈 설정
4.1.4.0 이전 버전은 HttpOutBufSize보다 작은 파일 Cache 
CacheRefreshHtml 3600 캐시된 응답 중 "Content-Type" "text/html"인 응답에 대한 유효시간 설정(SVRTYPE HTML 인 경우)
CacheRefreshImage 3600 캐시된 응답 중 "Content-Type" "text/html"이 아닌 응답에 대한 유효시간 설정(SVRTYPE HTML인 경우).
CacheRefreshJsv 3600 JEUS로부터 받은 응답을 캐시하는 경우 응답 유효시간을 계산하기 위한 설정, 4.1.5.0 이 후 버전에서 적용 됨
CacheRefreshRproxy 3600 Reverse Proxy로 처리된 응답을 캐시는 경우 유효시간을 계산하기 위한 설정, 4.1.5.0 이 후 버전에서 적용 됨

WebtoB admin Console에서 Cachelist 조회 및 Cache 삭제 방법

 

Cache 조회

Cache에 저장된 요청을 파일 리스트로 출력하는 기능을 가지고 있다.

 

wsadmin을 접속 후 "cachelist"를 입력하면 파일이 생성된다.

HTH가 다수일 경우 HTH마다 cachelist 파일이 생성된다. 아래의 예의 경우 HTH가 4개이다.

mspark (wsadm) [2023/12/03:16:23:11]: cachelist
Cache contents files are created in /home/webtob5_1/log/cachelist/.
 Please check the directory.


cd /home/webtob5_1/log/cachelist/

ls -al
-rw------- 1 webtob5_1 webtob5_1  461 cachelist-hth-0-20231203-062526.txt
-rw------- 1 webtob5_1 webtob5_1  461 cachelist-hth-1-20231203-062526.txt
-rw------- 1 webtob5_1 webtob5_1  461 cachelist-hth-2-20231203-062526.txt
-rw------- 1 webtob5_1 webtob5_1  461 cachelist-hth-3-20231203-062526.txt

Cache 삭제

캐싱 된 정보 삭제 (wsadm) : cr -a

cache ( DIR HTML IMAGE ) is refreshed

 

Trial License ?

WebtoB 기본 설치시 제공 되는 기한 제한이 없는 라이선스다.

HTH가 1개로 제한되고 Max Client가 5명인 제약이 있다.


Trial License VS Standard License VS Enterprise License

WebtoB 라이선스는 총 3가지로 Trial, Standard, Enterprise로 나뉜다.

 

Trial license은 이전 설명 처럼 WebtoB 기본 설치시 제공되는 라이선스

 

Standard license는 Trial과는 다르게 HTH 1개 이상 사용할 수 있고 WebtoB가 제공하는 대부분의 기능을 사용할 수 있다.

 

Enterprise license는 Standard license 기능에 추가적으로 Reverse Proxy Group절이 사용이 가능하고, WebDAV를 위한 HTTP Method(MKCOL, COPY, MOVE, PORPFIND)를 사용할 수 있다.

 

TechNet에서 발급 받는 DEMO LICENSE는 Enterprise License로 제공되고 기한은 2달 동안 사용이 가능하다.

2달이 지나가면 WebtoB 재기동 시 License Expired라는 에러 메시지가 출력되며 기동이 되지 않으니 주의해야 한다.


Trial License 사용시 주의할 점

엔진 설치시 제공되는 라이선스기 때문에 우선 정식 라이선스도 아닐뿐더러 데모(개발)용 라이선스도 아니기 때문에

많은 제약사항이 있다.

 

Max Client 수가 최대 5명 : 한 Client가 동시에 여러 웹페이지를 호출할 경우 정상적으로 호출되지 않을 가능성이 높다.

 

HTH 1개 제한 : 클라이언트와 서버의 업무처리 프로세스를 중계하는 프로세스로, 서버 프로세스들과의 통신을 통해 데이터의 흐름을 관리하는데 1개로 제한이 되면 다량의 데이터를 관리하기 매우 어렵다.

 

Thread 수 제한 : 웹페이지에 호출되는 파일이 많을 경우 WebtoB에서 전달하는 데이터의 유실이 발생할 수 있다. 

failed to load resource net err_socket_not_connected 라는 오류메시지를 개발자 도구에서 확인할 수 있다.

Trial 라이선스에서는 WebtoB Thread수가 제한이 되어 랜덤으로 파일을 가져오고, 페이지에 호출하기 위해 필요한 파일들을 전부 불러오지 못할 것이다.

 


해결 방법

Trial License는 거의 모든 고객사에서 사용하지 않으며 정식적인 계약을 통해 REAL License를 발급받는게 원칙이다.

 

단순 Test나 개발 용도로 사용하려면 TechNet 회원가입 후 Demo License를 발급받아 License File을 2달마다 한 번씩 교체하는 걸 권장한다.

 

https://technet.tmaxsoft.com/ko/front/main/main.do

 

Technet

효율적인 시스템 관리를 위한 기술 전문 포탈, 테크넷서비스

technet.tmaxsoft.com

 

 

1. VHOST 설정

*VHOST
v_test         **DOCROOT="/home/webtob5_1/webtob/docs/",**
               HOSTNAME = "192.xxx.xxx.xxx",
               HOSTALIAS = "www.test.co.kr",
               PORT = "80",
               **ServiceOrder = "ext,uri",**
               ERRORDOCUMENT = "403,404,503",
               METHOD = "GET, POST, -HEAD, -OPTIONS",
               #Headers = "gzip,cors_all",
               #Headers ="security,X-XSS,X-Content,strict,X-Download",
               URLRewrite = Y,
               URLRewriteConfig = "$WEBTOBDIR/config/rewrite.conf",
               LOGGING = "acc_test",
               ERRORLOG = "err_test"
  • DOCROOT : 정적 파일을 처리할 디렉토리 설정
  • ServiceOrder : ServiceOrder 순서에 따라 동작 방식 변경되므로 설정
  • ext, uri : 1. web 2. was
  • uri, ext : 1. was 2. web

2. URI 설정

해당 vhost로 들어오는 서비스는 URI에 매칭되며 검색하는데 GoToExt = Y 설정을 통해 매칭되는 ext 확장자가 있는 경우 ext절을 먼저 매칭한다.

*URI 절 설정
u_test         Uri = "/",   Svrtype = JSV, SvrName = test, VhostName = "v_test",**GotoEXT = Y**

3. VHOST 설정

WebtoB에서 정적 파일을 처리하고 특정 확장자만 JEUS에서 처리하고 싶을 경우, 해당 확장자 구문에 Options를 추가한다.

 

옵션 설명
{+|-}Cache Content의 캐시 유무(+|-)를 결정한다.
SSLRequireSSL SSL을 통한 Request만 처리하고, Non-SSL을 통한 Request는 "403 Forbidden"으로 응답한다.
SSLDenySSL Non-SSL을 통한 Request만 처리하고, SSL을 통한 Request는 "403 Forbidden"으로 응답한다.
UnSet 기본으로 설정되어 있는 sHTML, CGI, JSP 등에 대해서 해당 확장자를 EXT 절에서 Unset시킨다.
woff            MimeType = "application/font-woff", SvrType = HTML
svg             MimeType = "image/svg+xml", SvrType = HTML
xhtml           MimeType = "application/xhtml+xml", SvrType = HTML
xml             MimeType = "application/xml", SvrType = HTML
docx            MimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", SvrType = HTML
xlsx            MimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", SvrType = HTML
**pptx            MimeType = "application/vnd.openxmlformats-officedocument.presentationml.presentation", SvrType = HTML, Options = "unset"**
mp4             MimeType = "application/mp4", SvrType = HTML
apk             MimeType = "application/vnd.android.package-archive", SvrType = HTML

 

적용확인

##Compile
wscfl -i hhtpm

##WebtoB 재기동
wsdown
wsboot

##adm에서 확인 
wsadmin
>>cfg -e

이슈

 

WebtoB 사용 중 아주 긴 URL 요청이 들어올 경우 414 Request-URI Too Large 오류가 나는 경우가 있다.

WebtoB에서 제한된 최대 길이보다 요청 URL의 길이가 더 길 경우 발생한다.

 


 

원인 분석

 

WebtoB Config 설정 파일인 http.m 파일 내 Node 절의 설정을 확인한다.

wsadmin -C "cfg -n"|grep lrl

[webtob5_1@vm1:/home/webtob5_1/webtob/config]$  wsadmin -C "cfg -n"|grep lrl
         LimitRequestLine(lrl) = 8190,

 

Default로 WebtoB에서 RequestLine은 8190으로 제한하고 있다.

 

LimitRequestLine

 

만일 8190 이상의 URL 문자열이 들어올 경우 Node에서 제한하기 때문에 요청이 받아들여지지 않는다. 

 


 

해결 방법

 

http.m 파일 내 *Node 절에 해당 Option을 추가하여 사용자에 맞는 문자열 길이를 설정한다.

 

 

설정 후 WebtoB 컴파일 및 재기동 진행한다.

#WebtoB 컴파일
wscfl -i http.m

#WebtoB 기동 중지
wsdown

#WebtoB 기동
wsboot

기동 후 정상적으로 변경이 되었는 지 Node 절의 설정을 확인한다.

wsadmin -C "cfg -n"|grep lrl

[webtob5_1@mspark:/home/webtob5_1/webtob/config]$ wsadmin -C "cfg -n" | grep lrl
         LimitRequestLine(lrl) = 10000,

 

페이지가 정상 호출 되는 지 확인한다.

+ Recent posts