반응형

참고 사이트 : 
1. 설정값 들 정보
   https://www.lesstif.com/pages/viewpage.action?pageId=43843899
2. Centos 7 설치 관련
   https://idchowto.com/?p=43787

불러오는 중입니다...

 

Centos 7에 아무생각없이... (난 보안 담당자는 아님....)

 

서비스를 오픈하고 나니

 

불특정 다수에게 서비스를 제공해야 하는 상황이 발생하였습니다...

 

우리만 접근하면 참 좋은데

 

너무 많은 불법 접근 및 접속 요청이 있는 것을 알았고

 

이것을 능동적으로 대응하기 위해

 

fail2ban 패키지가 있다는 사실을 알게되어 글을 씁니다.

 

ssh, mariadb, http 불법 접근시 자동으로 ip ban이 되도록 하였습니다.

 



1. fail2ban 설치

 

다음 명령어를 통해 저장소를 설치할 수 있습니다.

 

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 

# yum install -y fail2ban fail2ban-systemd 


redhat 계열에서 접근로그파일은 /var/log/secure 입니다.  

centos 7 이전에는 secure 로그파일에 의존하여 동작했으나 centos 7 부터는 systemd에서 통합적으로 관리합니다.

※ 이 설정과 관련하여 별도의 파일로 설정할 때는 2가지 옵션을 추가해야 합니다.

 ( backend = polling
   banaction = iptables-multiport )

로그파일이 없으면 fail2ban동작불가하기 때문에 fail2ban-systemd를 같이 설치진행합니다

 

centos 시작시 fail2ban이 자동으로 시작하도록 설정

# systemctl enable fail2ban  

fail2ban 서비스 시작

# systemctl start fail2ban 




2. 설정

fail2ban 의 기본 설정은 /etc/fail2ban/jail.conf 에 있지만 설정을 수정할 필요가 있을 경우 

기본 설정 파일은 놔두고 개인화 설정 파일인 /etc/fail2ban/jail.local 을 사용하는 것이 좋습니다.

설정 파일은 Windows 의 ini 파일처럼 [항목명] 밑에 key=value 형식으로 기술하면 되며 

# 은 주석이며 주요 설정은 [DEFAULT] 항목 밑에 기술하며 여러 기능중에 주요 설정 항목을 알아 봅시다.

 

2019.04.30일 기준으로 기본 설치하면 /etc/fail2ban/jail.conf 파일만 존재하며 jail.local은 보이지 않습니다.

                  복사하여 사용하는 방식으로 보이나 아래 설정들은 그냥 사용하였습니다. (jail.conf은 백업 받아둠)

                  



2.1 ignoreip

ignoreip 에 설정된 IP 는 로그인을 실패해도 차단하지 않으며 기본 설정은 localhost 입니다. 

IP를 추가할 경우 jail.local 파일 의 [DEFAULT] 항목에 기술해 주면 되며 여러개를 기술할 경우 

공백이나 , 로 구분해 주면 되며 아래는 로컬호스트와 192.168.10.x 대역은 차단하지 않는 설정입니다.

ignoreip = 127.0.0.1/8 192.168.10.0/24 



2.2 bantime 

bantime 은 지정된 조건(아래에서 설명할 findtime, maxretry)에 따라 인증에 실패한 클라이언트를 차단할 

시간을 초 단위로 지정하며 기본 설정은 600초(10분)입니다.


2.3 findtime, maxretry

findtime 과 maxretry 는 클라이언트를 차단하기 위한 조건을 지정하며 findtime 에 

지정한 시간(초 단위)내에 maxretry 에 설정한 횟수만큼 인증을 실패하면 차단하게 됩니다.

즉 위 설정은 600초(10분) 내에 5번을 인증 실패할 경우 bantime 만큼 차단합니다.

특정 IP에서 차단후에도 지속적으로 인증을 시도할 경우 bantime 을 점점 길게 해서 

시도 횟수를 줄이는 게 필요하지만 이 기능은 개발 버전(0.10.x)에만 반영되어 있고 0.9 버전에는 구현되어 있지 않습니다.

실제 운영 환경에서는 bantime 을 몇 시간 정도로 길게 주는 것이 보안상 유리합니다.



2.4 mail 알림

 

# 1 
destemail = sysadmin@example.com 
  
  
# 2 
sender = fail2ban@my-server.com 
  
# 3 
mta = sendmail 
  
# 4 
action = %(action_mw)s 


fail2ban 으로 차단한 정보를 메일로 전송할 경우 destemail 에 수신자 이메일 주소를  설정하고 sender 에는  "보낸 사람"의 정보를 설정합니다.

보낸 사람 이름은 전자 메일의 "보낸 사람"필드의 값을 설정하며 mta 매개 변수는 메일을 보내는 데 사용할 메일 서비스를 설정하며 기본은 sendmail 입니다.

중요한 부분은 action 항목으로 차단했을 때 실행할 액션을 의미하며 기본 설정은 아무 일도 안 하는 설정인 "action = %(action_)s" 입니다.

기본 설정으로는 차단 내용을 메일로 전송하지 않으므로 action_ 을 action_mw 나 action_mwl 로 지정해야 메일을 전송하며 차이는 아래와 같습니다.

action_mw : 메일을 전송하고 whois 로 IP 정보를 조회한 결과를 첨부
action_mwl : 메일을 전송하고 whois 로 IP 정보를 조회한 결과와 관련된 로그를 첨부


권장 설정은 다음과 같이 메일을 전송하고 whois 와 log 를 첨부하는 설정입니다.

action = %(action_mwl)s 

※ 위 설정으로 하는 경우 메일 송신시 해당 IP의 정보를 검색한 결과도 같이 송부됩니다.

 

   따라서 whois 명령을 통해 정보가 조회될 수 있어야 합니다.


whois 가 설치되지 않은 경우 

 

$ sudo yum install whois 를 실행합니다.


2.5 개별 jail 설정

기본적으로 fail2ban 은 차단하지 않으므로 차단할 서비스를 [sshd] 처럼 항목명에 서비스를 등록하고 enabled = true 를 추가해 주면 차단됩니다.

2.6 포트 번호 변경

ssh 를 다른 포트로 사용할 경우 port 항목에 해당 포트를 기술해 주면 됩니다. 만약 ssh 가 여러 포트를 사용한다면 

, 를 구분자로 해서 포트를 모두 기술하며 아래는 ssh 기본 포트와 10022 를 사용할 경우 설정입니다.

 

[sshd] 
enabled = true 
port = ssh,10022 
sshd jail 설정 


3. 최종 설정값

 이제 ssh 를 위한 최종 /etc/fail2ban/jail.local 파일을 완성해 보면 아래와 같습니다.

[DEFAULT] 
  
## 차단하지 않을 IP 
ignoreip = 127.0.0.1/8 192.168.10.0/24 
  
# 1시간 차단 (-1로 설정할 경우 영구 차단) 
bantime  = 3600 
  
# 아래 시간동안 maxretry 만큼 실패시 차단 
findtime  = 300 
  
# 최대 허용 횟수 
maxretry = 5 
  
# 메일 수신자, 다중 수신자는 지원 안 함 
destemail = sysadmin@example.com 
  
# 메일 보낸 사람 
sender = fail2ban@my-server.com 
  
# 메일 전송 프로그램 
mta = sendmail 
  
  
# 차단시 whois 정보와 관련 로그를 첨부하여 메일 전송 
action = %(action_mwl)s 
  
# sshd 서비스 차단 
[sshd] 
enabled = true 
port     = ssh, 10022 



4. 서비스 적용

설정을 마쳤으면 서비스를 재시작하여 변경 사항을 반영합니다. 

$ sudo systemctl restart fail2ban 


fail2ban 동작 로그는 /var/log/fail2ban.log 에 기록되므로 tail -f /var/log/fail2ban.log 명령어로 확인해 볼 수 있습니다.


5. firewall-cmd 커널 방화벽 설정 규칙 확인

이제 firewall-cmd 로 커널 방화벽 설정 규칙을 확인해 보겠습니다.

$ sudo firewall-cmd --direct --get-all-rules
ipv4 filter INPUT 0 -p tcp -m multiport --dports ssh -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable
fail2ban이 추가한 firewall 설정 규칙
결과에 보이는 "--match-set fail2ban-sshd src" 는 ipset 그룹명이 fail2ban-sshd 인 source 에서 ssh 서비스로 전송한 패킷은 REJECT 하라는 의미입니다.


6. 차단 설정된 정보 조회

설정된 ipset 의 정보는 --list 옵션으로 확인할 수 있습니다.

 

$ sudo ipset --list    

  
Name: fail2ban-sshd 
Type: hash:ip 
Revision: 1 
Header: family inet hashsize 1024 maxelem 65536 timeout 10800 
Size in memory: 16592 
References: 1 
Members: 
192.168.58.1 timeout 89 

ipset 정책 목록
이제 fail2ban-sshd 규칙의 Header 항목에 있는 "timeout 3600"  에 따라 인증에 실패한 IP 는 1시간 동안 차단됩니다.


7. 전체 차단 정보 조회

이제 fail2ban-sshd 규칙의 Header 항목에 있는 "timeout 10800"  에 따라 인증에 실패한 IP 는 3시간 동안 차단됩니다.

전체 차단 정보는 fail2ban 의 클라이언트 유틸리티인 fail2ban-client 명령어를 통해서 확인해 볼 수 있습니다.

$ sudo fail2ban-client status sshd 

Status for the jail: sshd 
|- Filter 
|  |- Currently failed: 1 
|  |- Total failed:     8 
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd 
`- Actions 
   |- Currently banned: 2 
   |- Total banned:     2 
   `- Banned IP list: 103.114.106.xxx 58.242.83.xxx 

 

8. mariadb 10 로그 파일 설정

8.1 로그 경로 생성

 

# mkdir /var/log/mariadb 

# chown mysql:mysql /var/log/mariadb 


8.2  로그 출력 경로 추가

/etc/my.cnf 파일에 다음 내역 추가

[mysqld] 항목 아래에

[mysqld]
log-error=/var/log/mariadb/mariadb.log 


8.3. mariadb 재시작

 

# systemctl restart mariadb 


9. fail2ban 에서 mariadb 설정

위의 8번 항목에 mairadb 설정 로그 출력까지 정상적으로 확인되면

다음 작업을 수행합니다.

/etc/fail2ban/jail.conf 파일

[mysqld-auth] 
# 설정 활성화 
enabled = true 

# 3306 포트 
port     = 3306 

# 로그 경로 
logpath  = /var/log/mariadb/mariadb.log 

# 최대 5회 실패시 적용 
maxretry = 5 

# 사용 필터 
filter   = mysqld-auth 
  
# 폴링 방식 적용 
backend = polling 

# ban 적용 
banaction = iptables-multiport 



9.1 재시작

위의 세팅 정보를 모두 설정하고

아래 명령을 통해 재시작 합니다.

 

# systemctl restart fail2ban 


10. apache tomcat 404 error 설정 추가 하기

10.1 tomcat 필터 파일 생성


404 에 대한 block 처리 방식입니다.

다만, 사전에 소스에 404 Not Found가 발생하는지 여부를 정확하게 확인이 필요합니다.
(아니면 모두 block 처리됨)

아래의 위치에 적용할 필터 명에 파일을 생성합니다.

- 위치 : /etc/fail2ban/filter.d
- 파일명 : tomcat.conf

[INCLUDES] 
before = common.conf 

[Definition] 
failregex =  ^.*\/.*\/.*404 
ignoreregex = 



10.2. jail.conf 정보 추가.

/etc/fail2ban/jail.conf 파일

[tomcat] 
# 설정 활성화 
enabled  = true 

# 적용 서비스 및 포트 
port     = http,https,80,443 

# block 설정 하지 않을 IP  대역대 
ignoreip = 127.0.0.1/8 192.168.10.0/24 

# ban (초) 시간 
bantime  = 3600 

# 최근 10분 동안 
findtime = 600 

# 설정 filter tomcat 
filter   = tomcat 

# 톰켓 로그 폴더 
logpath  = /var/log/tomcat8/localhost_access_log.*.txt 

# 재시도 회수 
maxretry = 5 

# 폴링 방식 적용 
backend = polling 

# ban 적용 
banaction = iptables-multiport 


10.3 재시작

위의 세팅 정보를 모두 설정하고

아래 명령을 통해 재시작 합니다.

# systemctl restart fail2ban 


11. php 파일 관련 설정 추가

11.1 필터 파일 생성

구축 사이트는 PHP 파일이 존재하지 않으므로

모든 php 파일의 404 not found의 경우에는 block 처리 함.


- 위치 : /etc/fail2ban/filter.d
- 파일명 : tomcat-php-404.conf

 

[INCLUDES] 
before = common.conf 

[Definition] 

failregex = ^ - - \[.*\] ".*\.php HTTP/1.1" 404 \d+$ 
            ^ - - \[.*\] ".*\.PHP HTTP/1.1" 404 \d+$ 

ignoreregex = 

 

11.2 필터 설정 적용

/etc/fail2ban/jail.conf 파일

[tomcat-php-404] 
# 설정 활성화 
enabled  = true 

# 적용 서비스 및 포트 
port     = http,https,80,443 

# block 설정 하지 않을 IP  대역대 
ignoreip = 127.0.0.1/8 192.168.10.0/24 

# ban (초) 시간 
bantime  = 3600 

# 최근 10분 동안 
findtime = 600 

# 설정 filter tomcat-php-404 
filter   = tomcat-php-404 

# 톰켓 로그 폴더 
logpath  = /var/log/tomcat8/localhost_access_log.*.txt 

# 재시도 회수 
maxretry = 5 

# 폴링 방식 적용 
backend = polling 

# ban 적용 
banaction = iptables-multiport 


11.3 재시작

위의 세팅 정보를 모두 설정하고

아래 명령을 통해 재시작 합니다.

 

# systemctl restart fail2ban 

============= 기타 ==========

1. jail.conf 설정 파일들에서 옵션들의 의미

ignoreip :이 매개 변수는 금지 시스템에서 무시해야하는 IP 주소를 식별합니다. 
          기본적으로 이것은 기계 자체에서 오는 트래픽을 무시하도록 설정되어 있습니다. 이는 꽤 좋은 설정입니다.
bantime :이 매개 변수는 금지의 길이를 초 단위로 설정합니다. 기본값은 600 초 또는 10 분입니다.
findtime :이 매개 변수는 fail2ban이 반복적으로 실패한 인증 시도를 찾을 때주의 할 창을 설정합니다. 
          기본값은 600 초 (다시 10 분)로 설정됩니다. 즉, 소프트웨어는 지난 10 분 동안 실패한 시도 횟수를 계산합니다.
maxretry : findtime금지가 설정되기 전에 창 에서 허용되는 실패한 시도 횟수를 설정합니다 .
backend :이 항목은 fail2ban이 로그 파일을 모니터하는 방법을 지정합니다. 
         이 설정은 autofail2ban이 시도한 pyinotify다음 gamin사용할 수있는 것을 
         기반으로 폴링 알고리즘을 시도한다는 것을 의미합니다 .
usedns : 역방향 DNS가 금지 구현을 돕는 데 사용되는지 여부를 정의합니다. 
         이것을 "no"로 설정하면 호스트 이름 대신 IP 자체가 금지됩니다. 
         "warn"설정은 역방향 DNS를 사용하여 호스트 이름을 검색하고 그런 식으로 금지하려고 시도하지만 검토를 위해 활동을 기록합니다.
destemail :이 주소는 메일 알리미로 작업을 구성한 경우 알림 메일로 전송됩니다.
           보낸 사람 이름 : 생성 된 알림 전자 메일의 보낸 사람 전자 메일 필드에 사용됩니다.
banaction : 임계 값에 도달 할 때 사용할 조치를 설정합니다. 실제로 /etc/fail2ban/action.d/호출 된 
            파일의 이름이 있습니다 iptables-multiport.conf. 
            이것은 iptablesIP 주소를 금지하기위한 실제 조작을 처리합니다 .          
mta : 알림 이메일을 보내는 데 사용할 메일 전송 에이전트입니다.
protocol : IP 금지가 구현 될 때 삭제 될 트래픽 유형입니다. 
           이것은 새로운 iptables 체인으로 전송되는 트래픽 유형이기도합니다.
chain : 이것은 fail2ban 깔때기로 트래픽을 보내기위한 점프 규칙으로 구성되는 체인입니다.


2. fail2ban 자주 사용하는 명령목록

fail2ban-client status : ban 목록확인
cat /var/log/fail2ban.log : fail2ban 로그확인
cat /var/log/fail2ban.log | grep Ban : Ban 내역만 뽑아서 보기
* ban된 ip 해제하기
fail2ban-client set sshd unbanip 192.111.1.101 (해제IP)

위에 명령어의 sshd 체인네임이며 ftp 등 ban 내역의 해제정보를 적으면된다.

3. filter 적용 테스트

모든 필터는 작성한 후 정상 동작하는지 필터 체크를 해야 합니다.

아래는 예제...

# fail2ban-regex   

예)

# fail2ban-regex /var/log/tomcat8/localhost_access_log.*.txt  /etc/fail2ban/filter.d/tomcat-php-404.conf

 
예2 ) 변수로 정의하는 방식

$ line='0.0.0.0 - - [06/Apr/2017:07:45:42 +0000] "POST /xmlrpc.php'

$ ./fail2ban-regex "$line"  ' - - \[.*\].*POST /xmlrpc' |grep ^Lines
Lines: 1 lines, 0 ignored, 1 matched, 0 missed


4. 설정된 fail2ban 상태 확인

# fail2ban-client status sshd

정상 상태이면 Journal matches 정보나 file 정보가 보이나

비정상 상태이면 안보임... ㅜㅜ


Status for the jail: mysqld-auth
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:
[root@localhost fail2ban]# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     13
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 27
   |- Total banned:     27
   `- Banned IP list:   198.211

 

# fail2ban-client status mysqld-auth
Status for the jail: mysqld-auth
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     1
|  `- File list:        /var/log/mariadb/mariadb.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

 

 


 

윈도우즈 용도 존재함 (시간나면 정리를 할 예정)

Wail2Ban

관련 : http://cloudjoon.blogspot.com/2017/08/rdp-security-wail2ban.html

 

Beyond Cloud "IBM Cloud"

RDP( 원격데스크탑 ) 무차별 대입공격 관련 보안스크립트 적용 가이드 1. Wail2ban 소개 - Wail2ban 은 Windows 운영체제 대상으로 RDP( 원격데스크탑 ) 에 대하여 Brute-forc...

cloudjoon.blogspot.com

https://developer.ibm.com/kr/cloud/softlayer-bluemix-infra/security/2017/08/31/rdp-security-script/

 

RDP(원격데스크탑) 무차별 대입공격 관련 보안스크립트 적용 가이드 - IBM Developer

1. Wail2ban 소개 – Wail2ban 은 Windows 운영체제 대상으로 RDP(원격데스크탑)에 대하여 Brute-force Attack(패스워드 무차별 대입공격) 에 대한 방어를 위한 자동 보안설정 스크립트입니다. – 해당 스크립트는 파워쉘(PowerShell)로 작성되었으며, 원작자는 “Katie McLaughlin” 로써 해당 코드에 대한 재배포시에는 반드시 하기URL 의 “Copy Right Notice” 를 명시해야 됩니다.    htt

developer.ibm.com

 

https://github.com/glasnt/wail2ban

 

glasnt/wail2ban

fail2ban, for windows. . Contribute to glasnt/wail2ban development by creating an account on GitHub.

github.com

 

 

반응형
반응형

갑자기 개발자분이 특정 IP 대역에서

 

무차별 웹 페이지 검색이 일어난다고 알려주셨네요

 

응?

 

Tomcat 상에서는 server.xml 파일 내역을 통해

 

특정 여러 IP들을 막을수 있습니다.

 

아래 예제는 111.222.111.222 IP와 111.222.111.223 IP를 웹 접속시 403 에러를 발생시켜 접근 금지시키는 설정입니다.

(IP 사이에 . 앞에 \를 붙이지 않아도 동작 하기는 합니다만, 정식 설정 페이지에서는 \를 붙이는 것을 가이드함)

 

관련 Apache 페이지 : http://tomcat.apache.org/tomcat-9.0-doc/config/valve.html

 

<Context path="" docBase="/" reloadable="true">

   <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="111\.222\.111\.222|111\.222\.111\.223" />

</Context>

 

하는 김에 서버 자체에 대한 접근을 막는것도 추가를 하였습니다.

 

우리 서버는 소중하니까요!

 

다만, 유동 IP에는 위험할 수는 있습니다.

(제 IP가 바뀌니까요!)

 

/etc/hosts.deny

 

sshd:ALL
mysqld:ALL

 

아래는 회사가 11.73.xxx.xxx 대역대에 있다는 가정하에 작성합니다.

 

(참고 : http://www.findip.kr/  사이트에 방문하면 외부에서 보여지는 (NAT 설정 등....) IP 주소를 확인 가능합니다.)

 

/etc/hosts.allow

sshd:11.73.
mysqld:11.73.

 

모두 마쳤으면

 

아래와 같이 서비스를 재시작 합니다.

 

# service mysqld restart

# service sshd restart

반응형
반응형

기본적으로 systemctl 명령을 통한 방식 (CASE 1)과 Startup.sh 및 Shutdown.sh 2가지 방식(CASE 2)이 있습니다.

 

설정하는 환경에 따른 차이로

 

공통적으로 시작 및 종료를 하기 위해서는

 

정확하게 쉘을 수행하는 것이 좋습니다.

 

systemctl 명령을 통해 시작한 tomcat은 Shutdown.sh를 수행하여도

 

잠시뒤에 다시 시작하는 현상도 볼수 있습니다.

 

1. Tomcat 시작하는 쉘

- CASE 1 방식

# Systemctl 서비스 시작 방식

MYID=`whoami`

# CHECK WAS PORT
WASPORT=`lsof -i TCP:80 | grep -i java | wc -l`

if [ ${WASPORT} -gt 0 ]; then
        echo ""
        echo "====================================="
        echo " 이미 WAS(Tomcat)가 실행 중입니다."
        echo ""

        echo " 종료한 뒤 수행해 주세요."
        echo "===================================="
        echo ""

        exit 0

fi

if [ ${MYID} = "root" ]; then
        systemctl start tomcat
else

        echo " root 계정만 실행 가능합니다."
fi

- CASE 2 방식

# WAS 서비스 시작 방식
WASHOME='/apache-tomcat-8.5.40/bin'

MYID=`whoami`

# CHECK WAS PORT
WASPORT=`lsof -i TCP:80 | wc -l`

if [ ${WASPORT} -gt 0 ]; then
        echo ""
        echo "====================================="
        echo " 이미 WAS(Tomcat)가 실행 중입니다."
        echo ""

        echo " 종료한 뒤 수행해 주세요."
        echo "===================================="
        echo ""

        exit 0

fi

if [ ${MYID} = "root" ]; then
        cd ${WASHOME}
        ./startup.sh
else

        echo " root 계정만 실행 가능합니다."
fi

 

2. Tomcat 종료하는 쉘

- CASE 1

# Systemctl 서비스 종료 방식
MYID=`whoami`

# CHECK WAS PORT
WASPORT=`lsof -i TCP:80 | wc -l`

if [ ${WASPORT} -eq 0 ]; then
        echo ""
        echo "====================================="
        echo " WAS가 기동중인 상태가 아닙니다."
        echo ""

        echo " 종료한 뒤 수행해 주세요."
        echo "===================================="
        echo ""

        exit 0

fi

if [ ${MYID} = "root" ]; then
        systemctl stop tomcat
else

        echo " root 계정만 실행 가능합니다."
fi

- CASE 2

# WAS 서비스 종료 방식
WASHOME='/apache-tomcat-8.5.40/bin'

MYID=`whoami`

# CHECK WAS PORT
WASPORT=`lsof -i TCP:80 | wc -l`

if [ ${WASPORT} -eq 0 ]; then
        echo ""
        echo "====================================="
        echo " WAS가 기동중인 상태가 아닙니다."
        echo ""

        echo " 종료한 뒤 수행해 주세요."
        echo "===================================="
        echo ""

        exit 0

fi

if [ ${MYID} = "root" ]; then
        cd ${WASHOME}
        ./shutdown.sh
else

        echo " root 계정만 실행 가능합니다."
fi

 

3. 서비스 포트에 수행되는 PID 확인

# Tomcat 기준

echo ""
echo "==================================================="
echo ""
echo " Use Port : 80, 8005, 8009, 8443, 8080 "
echo ""
echo "==================================================="

echo ""
echo "***************************************************"
echo " 1. Search : 80 Port "
lsof -i TCP:80
echo "***************************************************"
echo ""

echo ""
echo "***************************************************"
echo " 2. Search : 8005 Port "
lsof -i TCP:8005
echo "***************************************************"

echo ""
echo "***************************************************"
echo " 3. Search : 8009 Port "
lsof -i TCP:8009
echo "***************************************************"

echo ""
echo "***************************************************"
echo " 4. Search : 8443 Port "
lsof -i TCP:8443
echo "***************************************************"

echo ""
echo "***************************************************"
echo " 5. Search : 8080 Port "
lsof -i TCP:8080
echo "***************************************************"

echo ""

 

4. tomcat 에 WAR 파일 Deploy 하는 쉘

echo ""
echo "===================================================================="
echo ""
echo " Deploy Shell "
echo ""
echo "===================================================================="

############################# Define Path ################################
BACKUP_ROOT="/home/tomcat/backup"
WAR_DIR="/apache-tomcat-8.5.40/webapps"
WAR_FILE="deploy.war"

##########################################################################


if [ $# -eq 1 ]; then


        echo ""
        echo " 1. Check Deploy File Exist....."
        echo ""

        if [ -f $1 ]; then

                echo ""
                echo " 2. Check WAR File Exist..... "

                if [ -f ${WAR_DIR}/${WAR_FILE} ]; then

                        echo ""
                        echo " 3. Exist deploy.war File Backup"
                        echo "    Backup Folder => $BACKUP_ROOT "
                        echo ""

                        BK_NAME=`date +%Y%m%d_%H%M%S`

                        echo " *  cp ${WAR_DIR}/${WAR_FILE} ${BACKUP_ROOT}/${WAR_FILE}_${BK_NAME}"
                        cp ${WAR_DIR}/${WAR_FILE} ${BACKUP_ROOT}/${WAR_FILE}_${BK_NAME}
                        echo ""

                else

                        echo " *  Don't Backup Run becase, War File Not Exist "
                fi

                # delete old deploy folder
###                rm -rf ${WAR_DIR}/factory

                # Deploy File
                echo " *  cp $1 ${WAR_DIR}/${WAR_FILE}"
                cp $1 ${WAR_DIR}/${WAR_FILE}
                echo ""
                echo " >>> Please Restart Tomcat Service"
                echo ""

        else
                echo ""
                echo " $1 File not Exist .... Please check!"
                echo ""
        fi

else

        echo ""
        echo " Usage : $0 ${WAR_FILE} "
        echo ""
fi

echo ""
echo "===================================================================="
echo ""

 

반응형
반응형

어느날 갑자기

 

잘 WAR 배포 되던 사이트에서

 

tomcat 시작시 오류가 발생했습니다.

 

물론 간헐적으로 종종 있었지만,

 

아에 시작이 안되는 오류가 발생한것은 처음이었지요

 

-------------------- 오류 내역 ----------------------

 

23-Apr-2019 08:41:39.156 심각 [Catalina-startStop-1] org.apache.catalina.core.ContainerBase.startInternal A child container failed during start
 java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
        at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1423)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1413)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        ... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@1e50349c]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4885)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5020)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 6 more
Caused by: java.lang.IllegalArgumentException: The main resource set specified [/factory] is not valid
        at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:748)
        at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:706)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 9 more

 

23-Apr-2019 08:41:39.158 심각 [main] org.apache.catalina.core.ContainerBase.startInternal A child container failed during start
 java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
        at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:688)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:353)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:493)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1423)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1413)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:953)
        at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 6 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
        ... 8 more

 

Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        ... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@1e50349c]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4885)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5020)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 6 more
Caused by: java.lang.IllegalArgumentException: The main resource set specified [/factory] is not valid
        at org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:748)
        at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:706)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 9 more

 

23-Apr-2019 08:41:39.160 심각 [main] org.apache.catalina.startup.Catalina.start The required Server component failed to start so Tomcat is unable to start.
 org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:688)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:353)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:493)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:953)
        at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 11 more
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
        ... 13 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1423)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1413)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
        at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:953)
        at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 6 more

 

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

 

해당 원인

1. Tomcat JMX(Java Management Extensions) 사용 + STS JMX 사용 = 2개 포트 중복으로 인한 충돌 발생
2. Local 개발 환경에서는 Tomcat을 사용하지 않아 발생하지 않음
3. 개발 서버에서는 Startup 시 Tomcat JMX가 먼저 부팅되는 경우(그동안) 정상적으로 UP이 되었으나
    언젠가는 발생해야 하는 문제였음.

해결 방법

1. STS 에서 사용하는 JMX 사용하지 않기(Tomcat만 사용하기)
    application.properties 설정 변경 방식 => 이 방식 설정 (우리는 JMX를 쓰지 않음, 만약 쓰고 싶다면 2번 해결 방식 참고)
2. STS에서 사용하는 JMX 포트 변경
    There are a few things we could do to avoid the error. We could open the editor again and change the JMX port as well, or we could disable ‘Live Bean Support’. But probably we don’t really want to run more than one copy of our app in this scenario. So we should just stop the already running instance before launching a new one. As this is such a common thing to do, STS provides a Relaunch Toolbar Button for just this purpose. Click the Button, the running app is stopped and restarted with the changes you just made to the Launch Configuration now taking effect. If it worked you should now have a 404 error page at http://localhost:8888 instead of 8080. (Note: the Relaunch button won’t work if you haven’t launched anything yet because it works from your current session’s launch history. However if you’ve launched an app at least once, it is okay to ‘Relaunch’ an app that is already terminated)

    https://spring.io/blog/2015/03/18/spring-boot-support-in-spring-tool-suite-3-6-4

관련 정보

1. 외국 관련 정보 사이트
https://stackoverflow.com/questions/28607506/disabling-jmx-in-a-spring-application/30853954  


application.properties 추가 내역
============================================================================================================================ 
 
# Prevent Spring from automatically exposing beans to JMX. Tomcat automatically creates an MBean when setting the
# JNDI data source, and an error gets thrown if spring then tries to add the data source MBean itself.
# 번역 : Spring이 자동으로 Bean을 JMX에 노출시키는 것을 방지한다. Tomcat은 JNDI 데이터 소스를 설정할 때 자동으로 MBean을 만들고, 스프링이 데이터 소스 MBean 자체를 추가하려고하면 오류가 발생합니다.
#
org.springframework.jmx.export.UnableToRegisterMBeanException 예외처리용
spring.jmx.enabled=false

============================================================================================================================

1. 스트링 부팅 application.properties 환경 설정 (config 정보들)
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html


2. jmx 란?

참고 : https://en.wikipedia.org/wiki/Java_Management_Extensions
Java Management Extensions 의 약자로 각종 프로그램/장치 등을 모니터링/관리 하기 위한 API 입니다.

출처 : https://gs.saro.me/dev?tn=467

 

 

반응형
반응형

https://www.nginx.com/blog/introduction-to-microservices/

 

위의 이미지와 같이 차량 요금 수집하는 앱을 만들때 하나의 결과물로 배포됩니다.

이런 형태를 모놀리스 or 모노리스 식 어플리케이션이라고 합니다.

 

반응형

'IT 관련 용어' 카테고리의 다른 글

이메일 발송 서비스 사이트  (0) 2019.04.22
MSA (MicroService Architecture) 관련 링크  (0) 2019.04.22
반응형

1. Sendgrid

 

메일 전송을 위한 서비스

 

무료 가입시 하루 100통 전송 가능.

 

https://sendgrid.com/pricing/

 

Pricing and Plans | SendGrid

Sign up to send transactional and marketing email. All of our plans are backed by our industry-leading deliverability, reliability, and support.

sendgrid.com

 

2. Mailgun

 

한달에 10,000 개 까지는 무료

 

https://www.mailgun.com/pricing

 

Flexible Pricing & Email Delivery Plans - Email API Service - Mailgun

Pricing plans built for an email delivery solution that brings emails and validations together under one API-driven engine.

www.mailgun.com

 

 

반응형
반응형

 

마이크로서비스 Microservices (1) 아키텍처 소개

https://futurecreator.github.io/2018/09/14/what-is-microservices-architecture/

 

마이크로서비스 Microservices (1) 아키텍처 소개

주변에서 마이크로서비스 아키텍처(Microservices architecture; MSA)에 대한 이야기가 많이 들려옵니다. 마이크로서비스가 모든 것을 해결해줄 것처럼 이야기하는 사람이 있는가하면, 서비스 지향 아키텍처(Service-oriented architecture;SOA)랑 다를 게 없는 마케팅 용어에 불과하다고 폄하하는 사람들도 있습니다. 마이크

futurecreator.github.io

 

 

반응형
반응형

1. 방화벽

3690 : svn 포트, 3306 : mariadb 포트

8080 -> 80 포트 포워딩

8443 -> 443 포트 포워딩

작업 하기

firewall-cmd --permanent --zone=public --add-port=3690/tcp
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=8443 --permanent
firewall-cmd --reload

 

적용된 내역 조회하기

firewall-cmd --list-services   --zone=public
firewall-cmd --list-ports   --zone=public
firewall-cmd --list-forward-ports  

 

 

2. SVN 설정

svn info svn://localhost/ai --username jphong --password [암호]

 

[authz 파일]

[/]
tester = rw

 

[passwd 파일]

[users]
tester = tester

 

[svnserve.conf 파일]

# 익명 사용자 권한 없음

anon-access = none  

 

# 인증 사용자 write 권한
auth-access = write

 

# 패스워드 설정 파일

password-db = passwd

 

# 권한 설정 파일 authz

authz-db = authz

 

# 인증시 사용자에게 보여질 인증 메시지

realm = Welcome Test SVN

반응형
반응형

참고자료 : 2019년도 행정공공 웹사이트 구축운영 가이드 (배포본)

 

구분

문서명

발행년도

발행기관

사업대가 산정

o SW사업 대가산정가이드

2017

한국소프트웨어산업협회

사업계획서

o 소프트웨어 분리발주 매뉴얼

2016

정보통신산업진흥원

시스템 도입

o 정보시스템 하드웨어 규모산정 지침

2018

한국정보통신기술협회

o 네트워크 구축을 위한 장비 규모산정 지침

2017

플러그인 제거

o 인터넷 이용환경 개선기술 안내서

2016

행정안전부/

한국인터넷진흥원

o 공공기관 플러그인 제거 가이드라인

2018

행정안전부

정보접근성

o 한국형 웹 콘텐츠 접근성 지침 2.1

2015

과학기술정보통신부

국립전파연구원

o 소프트웨어 접근성 설계지침

2015

산업통상자원부

국가기술표준원

개인정보보호

o 개인정보 영향평가 수행안내서

2016

행정안전부

o 개인정보 수집제공 동의서 작성 가이드라인

2018

o 주민등록번호 수집금지제도 가이드라인

2016

o 개인정보수집 최소화 가이드라인

2016

행정안전부/

한국인터넷진흥원

o 홈페이지 개인정보 노출방지 안내서

2016

정보보안

o 소프트웨어 개발보안 가이드

2017

행정안전부/

한국인터넷진흥원

o 시큐어코딩 가이드

2012

o 소프트웨어 보안약점 진단가이드

2012

o 공개 소프트웨어를 활용한 개발보안 점검가이드

2016

o 웹서버 구축 보안점검 안내서

2010

한국인터넷진흥원

o 홈페이지 취약점 진단제거 가이드

2013

o 보안서버 구축 안내서

2010

UI·UX

o 전자정부 웹사이트 UI·UX 가이드라인

2019

행정안전부

자가진단

o 전자정부 웹사이트 자가진단지표

2019

행정안전부

게시판 관리

o 행정기관 웹사이트 게시판 관리 매뉴얼

2013

행정안전부

테스트 및 시험운영

o 정보시스템 성능관리지침

2007

한국정보통신 기술협회

사업관리

o 행정기관 정보화사업 단계별 관리·점검 가이드

2015

행정안전부,

과학기술정보통신부

한국정보화진흥원

o 행정기관 정보화사업 추진 매뉴얼

2010

정부통합전산센터

운영이관

o IT 아웃소싱 운영 관리 매뉴얼

2011

행정안전부 외

o 행정공공기관 웹사이트 관리 개선 방안

2014

행정안전부

o 정부기능분류시스템(BRM) 운영 지침

2008

검색엔진 최적화

o 검색엔진 최적화 기본 가이드(민간 SEO 가이드)

2013

주요 포털(구글, 네이버 등)

기록물 관리

o 기록물관리지침

2018

국가기록원

o 폐지기관 기록물 관리 지침

2005

 

관련 URL : https://www.mois.go.kr/frt/bbs/type001/commonSelectBoardArticle.do?bbsId=BBSMSTR_000000000045&nttId=69787

반응형

'사업' 카테고리의 다른 글

tar 증분 백업 수행하기  (0) 2013.12.18

+ Recent posts