Docker
- docker 환경은 on-premise 환경과 같이 동일한 설치 방식을 따릅니다.
http://download.deepfinder.co.kr/DeepFinder/1.0/DeepFinder.tar.gz
1) 컨테이너 접속
- Docker 내 DeepFinder 설치를 위해선 Container가 실행중이어야 합니다. 실행중인 Container ID를 확인하여 설치할 Docker 내부로 접근합니다.
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b28e84231 b541f09 "/bin/sh" 19 hours ago Up 1 hours 0.0.0.0:82->82/tcp great_it
[root@localhost ~]# docker exec –it 9b28e84231 /bin/bash
2) 설치 파일 다운로드
- wget, curl 등의 유틸리티로 DeepFinder Repository에서 DeepFinder Agent 설치파일을 다운로드 합니다.
2-1) Ubuntu OS
/ # sudo apt-get install -y wget
/ # wget http://download.deepfinder.co.kr/DeepFinder/1.0/DeepFinder.tar.gz
2-2) Alpine OS
설치할 환경이 Alpine OS라면 사전에 컴파일 도구 및 개발 라이브러리를 설치해야 합니다.
/ # apk add wget libstdc++ libgcc libmagic libproc
/ # wget http://download.deepfinder.co.kr/DeepFinder/1.0/DeepFinder.tar.gz
- Docker 내 외부 인터넷 액세스가 불가능한 경우 DeepFinder Agent 설치 패키지를 다운로드 받아 Docker 내부에 복사하여 진행합니다.
[root@localhost ~]# wget http://download.deepfinder.co.kr/DeepFinder/1.0/DeepFinder.tar.gz
[root@localhost ~]# docker cp 9b28e84231:/usr/local/src ./DeepFinder.tar.gz
3) 압축 해제
다운로드 된 설치파일의 압축을 해제합니다.
/ # tar xvfz DeepFinder.tar.gz
4) Agent 설치
4-1) Apache 설치
- Alpine Linux OS 설치 시 컴파일 도구 및 개발 라이브러리 설치
[root@localhost ~]# apk add libstdc++ libgcc libmagic libproc
/ # cd DeepFinder
root@162243d:/usr/local/src/DeepFinder# ./setup.sh 1.1.1.1 611dd4300b91412e89xxxxxxxx
SERVER IP : 1.1.1.1
AGENT ID : 611dd4300b91412e89xxxxxxxx
SYSTEM KERNEL : 5.15
CHECK OS : Linux
CHECK LINUX : Ubuntu Linux
CHECK OS BIT : x86_64 (64 bit)
DeepFinder install path : /usr/local/deepfinder
* Starting DeepFinder Agent [ OK ]
## Check Apache Conf : LoadModule deepfinder_module /usr/local/deepfinder/lib/mod_deepfinder24.so
- Finished DeepFinder WAF Install
***************************************************************
만일 아래와 같이 HTTPD Not found 메세지가 나타나면 agent.sh 스크립트로 설치를 진행합니다.
agent.sh 설치 후 apache 버전에 맞는 모듈정보를 apache 환경파일에 삽입하고, apache graceful을 진행하여 웹 서버 필터적용을 완료합니다.
#9b28e846a231:/usr/local/src/DeepFinder# ./setup.sh 1.1.1.1 611dd4300b91412e89xxxxxxxx
SERVER IP : 1.1.1.1
AGENT ID : 611dd4300b91412e89xxxxxxxx
SYSTEM KERNEL : 5.15
CHECK OS : Linux
CHECK LINUX : Alpine Linux
HTTPD Not found
------------------------------------------------------------
1. agent.sh 스크립트 실행
root@162243d14c3b:/usr/local/src/DeepFinder# ./agent.sh 1.1.1.1 123xxxxxxx
Agent only - DeepFinder Intall Start
SERVER IP : 1.1.1.1
AUTH KEY : 123xxxxxxx
SYSTEM KERNEL : 5.15
CHECK OS : Linux
CHECK LINUX : Ubuntu Linux
CHECK OS BIT : x86_64 (64 bit)
DeepFinder install path : /usr/local/deepfinder
* Starting DeepFinder Agent [ OK ]
- Finished DeepFinder WAF Install
2. Apache 내 DeepFinder 모듈 삽입
#9b28e846a231:/usr/local/DeepFinder# vi /etc/apache2/httpd.conf
....
#EnableMMAP off
#EnableSendfile on
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
# DeepFinder Module 삽입
LoadModule deepfinder_module /usr/local/deepfinder/lib/mod_deepfinder24.so
------------------------------------------------------------
3. Apache graceful 진행
#9b28e846a231:/usr/local/src/DeepFinder# /usr/sbin/apachectl -k graceful
4-2) nginx 설치
- nginx의 경우 모듈 컴파일이 필요하기 때문에 nginx 컴파일에 필요한 외부 라이브러리가 필요합니다.
- 외부 인터넷 불가시 이미지 빌드에서 아래 도구들을 모두 설치합니다.
Debian 계열 설치 시(Ubuntu 등)
[root@localhost ~]# apt-get install wget gcc make libpcre3-dev libssl-dev zlib1g-dev libmagic1
Alpine Linux OS 설치 시
[root@localhost ~]# apk add libstdc++ libgcc libmagic libproc
Redhat 계열 설치 시
[root@localhost ~]# yum install –y wget gcc make pcre-devel openssl-devel zlib-devel
AWS Linux 계열 설치 시
[root@localhost ~]# yum install redhat-rpm-config [root@localhost ~]# $DeepFinder/linux_x64/nginx/make_module
1. nginx 설치 스크립트 실행
root@162243d:/usr/local/DeepFinder# ./nginx.sh 1.1.1.1 123xxxxxxx
NGINX - DeepFinder Install Start
SERVER IP : 1.1.1.1
AUTH KEY : 123xxxxxxx
SYSTEM KERNEL : 5.15
CHECK OS : Linux
CHECK LINUX : Ubuntu Linux
CHECK OS BIT : x86_64 (64 bit)
NGINX File Path : /usr/sbin/nginx
NGINX Version : 1.18.0 (Ubuntu)
DeepFinder install path : /usr/local/deepfinder
* Starting DeepFinder Agent [ OK ]
Install NGINX Module : Please wait a moment..
--2023-12-06 04:33:57-- http://nginx.org/download/nginx-1.18.0.tar.gz
Resolving nginx.org (nginx.org)... 3.125.197.172, 2a05:d014:edb:5704::6, ...
Connecting to nginx.org (nginx.org)|3.125.197.172|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1039530 (1015K) [application/octet-stream]
Saving to: 'nginx-1.18.0.tar.gz'
nginx-1.18.0.tar.gz 100%[=============================>] 1015K 686KB/s in 1.5s
2023-12-06 04:33:59 (686 KB/s) - 'nginx-1.18.0.tar.gz' saved [1039530/1039530]
Add to nginx.conf & configtest : ok
NEXT STEP : Reload nginx
/usr/sbin/nginx -s reload
- Finished DeepFinder WAF Install
------------------------------------------------------------
2. nginx 프로세스 reload
root@162243d:/usr/local/DeepFinder# /usr/sbin/nginx -s reload
만일 아래와 같이 Agent 설치가 원활하지 않다면 agent.sh 스크립트로 설치를 진행합니다.
agent.sh 설치 후 nginx 모듈 설치파일을 실행하여 필터적용을 완료합니다.
1. agent.sh 스크립트 실행
root@162243d14c3b:/usr/local/src/DeepFinder# ./agent.sh 1.1.1.1 123xxxxxxx
Agent only - DeepFinder Intall Start
SERVER IP : 1.1.1.1
AUTH KEY : 123xxxxxxx
SYSTEM KERNEL : 5.15
CHECK OS : Linux
CHECK LINUX : Ubuntu Linux
CHECK OS BIT : x86_64 (64 bit)
DeepFinder install path : /usr/local/deepfinder
* Starting DeepFinder Agent [ OK ]
- Finished DeepFinder WAF Install
2. nginx 모듈 설치파일 실행
#9b28e846a231:/usr/local/src/DeepFinder# ./linux_x64/nginx/make_module
# nginx를 찾을 수 없을 경우 nginx 실행파일 경로 지정
#9b28e846a231:/usr/local/src/DeepFinder# ./linux_x64/nginx/make_module /usr/sbin/nginx
--2023-12-06 05:22:49-- http://nginx.org/download/nginx-1.18.0.tar.gz
Resolving nginx.org (nginx.org)... 52.58.199.22, 3.125.197.172, 2a05:d014:edb:5704::6, ...
Connecting to nginx.org (nginx.org)|52.58.199.22|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1039530 (1015K) [application/octet-stream]
Saving to: 'nginx-1.18.0.tar.gz'
nginx-1.18.0.tar.gz 100%[==================================>] 1015K 572KB/s in 1.8s
2023-12-06 05:22:51 (572 KB/s) - 'nginx-1.18.0.tar.gz' saved [1039530/1039530]
Add to nginx.conf & configtest : ok
NEXT STEP : Reload nginx
/usr/sbin/nginx -s reload
------------------------------------------------------------
3. nginx 프로세스 reload
root@162243d:/usr/local/DeepFinder# /usr/sbin/nginx -s reload
5) 설치 확인
Agent 프로세스가 정상적으로 동작 중인지 확인합니다.
# root@162243d14c3b:~# ps -ef |grep deepfinder root 5651 1 0 04:33 ? 00:00:00 /usr/local/deepfinder/bin/starter root 13543 5651 0 05:42 ? 00:00:00 /usr/local/deepfinder/bin/agent
만일 starter 및 agent 프로세스가 동작중이지 않다면 수동으로 프로세스를 실행합니다.
root@162243d14c3b:~# /usr/local/deepfinder/bin/starter root@162243d14c3b:~# ps -ef |grep deepfinder root 5651 1 0 04:35 ? 00:00:00 /usr/local/deepfinder/bin/starter root 13543 5651 0 04:36 ? 00:00:00 /usr/local/deepfinder/bin/agent
Manager 내 agent 상태를 확인합니다.
- 컨테이너에서 agent 로그를 확인합니다.
# cd /usr/local/deepfinder/log
# ls
agent.log filter.log
# cat agent.log
2023-11-06 15:09:42 [AGENT] Init ---------------------------
2023-11-06 15:09:42 Read AgentID 1010
2023-11-06 15:09:42 Connect Server [52.78.94.74:10012]
2023-11-06 15:09:42 Server Connected OK : 52.78.94.74
2023-11-06 15:09:42 Agent Start
2023-11-06 15:09:42 Recv Connect : : 10016 (TCP)
2023-11-06 15:09:42 [AGENT] Unique ID : 0a1426f5f2de
2023-11-06 15:09:42 Disconnect Server
2023-11-06 15:09:42 Connect Server [52.78.94.74:10016]
2023-11-06 15:09:42 Server Connected OK : 52.78.94.74
2023-11-06 15:09:42 Recv Connect : : 0 (TCP)
2023-11-06 15:09:42 [AGENT] Unique ID : 0a1426f5f2de
2023-11-06 15:09:42 ===== POLICY INSERT START =====
2023-11-06 15:09:42 AgentProperty [1010] [OK]
2023-11-06 15:09:42 LogTypeSeq [54] [OK]
2023-11-06 15:09:42 PatternGroupSeq [130] [OK]
2023-11-06 15:09:42 PatternSeq [496] [OK]
2023-11-06 15:09:42 CountryInfoSeq [252] [OK]
2023-11-06 15:09:42 IPInfoSeq [59] [OK]
2023-11-06 15:09:42 DomainPolicySeq [1] [OK]
2023-11-06 15:09:42 DomainPolicy [97]
2023-11-06 15:09:42 > DomainPolicy [97] : DomainSeq [0]
2023-11-06 15:09:42 > DomainPolicy [97] : BasePolicy
2023-11-06 15:09:42 > DomainPolicy [97] : LimitPolicy
2023-11-06 15:09:42 > DomainPolicy [97] : MethodPolicySeq [4]
2023-11-06 15:09:42 > DomainPolicy [97] : RequestUriPolicySeq [13]
2023-11-06 15:09:42 > DomainPolicy [97] : CookiePolicySeq [53]
2023-11-06 15:09:42 > DomainPolicy [97] : HeadNamePolicySeq [4]
2023-11-06 15:09:42 > DomainPolicy [97] : HeadValuePolicySeq [5]
2023-11-06 15:09:42 > DomainPolicy [97] : URLPolicySeq [1]
2023-11-06 15:09:42 > URLPolicy [97:1]
2023-11-06 15:09:42 >> URLPolicy [97:1] : URLBasePolicy
2023-11-06 15:09:42 >> URLPolicy [97:1] : ParamPatternPolicySeq [58]
2023-11-06 15:09:42 >> URLPolicy [97:1] : UploadPolicySeq [13]
2023-11-06 15:09:42 ===== POLICY INSERT END =====
2023-11-06 15:09:52 Filter Policy Update Status : OK
- 연결이 원활하지 않을 경우 deepfinder/conf/config.xml 내 Manager IP, 인증키, 방화벽 설정 등을 확인합니다.
# cat filter.log
2023-11-06 14:59:55 : [23606] LibFilter Start PID 23606
2023-11-06 14:59:55 : [23606] Filter Init OK
2023-11-06 14:59:55 : [23607] LibFilter Start PID 23607
2023-11-06 14:59:55 : [23607] Filter Init OK
- 해당 로그가 없는 경우 웹 서비스를 재기동 합니다.
K8s
- k8s의 경우 container 이미지로 배포되어 서비스가 되기 때문에 이미지에 DeepFinder가 포함되어 있어야 합니다.
- DeepFinder를 설치하고자 하는 이미지를 docker로 기동 후 docker 설치 가이드와 같이 동일하게 진행합니다.
1) Docker build
2) Docker run으로 컨테이너 실행
3) DeepFinder Agent 설치
4) Docker commit으로 이미지 생성
5) k8s 이미지 배포
config map 사용시 아래 설정파일에 DeepFinder 모듈을 등록 합니다.
cat nginx.conf
worker_processes auto;
pid /run/nginx.pid;
# deepfinder
load_module /usr/local/deepfinder/lib/ngx_http_deepfinder_module.so;
events {
worker_connections 1024;
}
....
Dockerfile 설정
- Docker 내 웹 서버 재기동이 불가능하거나 Dockerfile을 통해 적용하고자 할 경우 아래와 같은 방법으로 Dockerfile을 수정합니다.
1. Dockerfile build
1.1. Agent를 포함한 경우
1.1.1. CMD or ENTRYPOINT 를 스크립트로 수정
-------start.sh----------
#!bin/bash
# deepfinder start
/usr/local/deepfinder/bin/starter
# apache start
set -e
# Apache gets grumpy about PID files pre-existing
rm -f /usr/local/apache2/logs/httpd.pid
exec httpd -DFOREGROUND "$@"
# nginx start
nginx -g "daemon off;"
# springboot start
java -jar demo.jar
-------start.sh----------
1.2. Agent를 포함하지 않은 경우
1.2.1. Docker run으로 컨테이너 실행
1.2.2. DeepFinder Agent 설치
1.2.3. 웹서버 및 agent 프로세스가 실행된 상태에서 Docker commit으로 이미지 생성
2. k8s 이미지 배포
2.1. configmap 사용시 필터구문 추가
nginx.conf: |
worker_processes auto;
pid /run/nginx.pid;
# deepfinder
load_module /usr/local/deepfinder/lib/ngx_http_deepfinder_module.so;
events {
worker_connections 1024;
2.2. nginx.yaml 에 기동스크립트 추가
apiVersion: apps/v1
kind: Deployment
...
containers:
lifecycle:
postStart:
exec:
# Agent 설정파일 변경 & 실행
#command: ["/bin/sh", "-c","/bin/sed -i 's/52.72.93.74/3.34.164.78/g' /usr/local/deepfinder/conf/config.xml && /bin/sed -i 's/701de8xxxxxx/17c0089a9xxxxxxx/g' /usr/local/deepfinder/conf/config.xml && /usr/sbin/service deepfinder restart"]
# Agent 실행
command: ["/bin/sh", "/usr/sbin/service deepfinder start"]