도커 설치
apt update
apt install docker.io -y #도커설치
구동확인
docker -h #구동 확인
apt install apache2 -y #웹서비스 설치
ip ad #나한테 할당된 ip를 볼수 잇음


파이어폭스에서 ip주소를 입력하여 구동되는것 확인
이미지 검색
docker search apache #이미지 검색
docker search ububtu #우분투 이미지 검색 > 이미지 추출
이미지를 다운로드
docker pull ubuntu/apache2 #이미지를 다운로드
이미지 확인
docker images #이미지 확인
컨테이너(인스턴스) 생성 및 실행
docker run -d --name apache_server -o 8080:80 ububtu/apache2
#컨테이너(인스턴스) 생성 및 실행
run #이미지 실행
-d #백그라운드로 실행
--name #이미지를 통해 내가 생성할 인스턴스 별칭이댐
-p 8080:80 #로컬 8080으로 접속하면 도커환경의 80으로 포워딩

실행확인
docker ps
docker ps -a


ip ad로 가상환경이 한개 더 올라와있는것을 확인
컨테이너(인스턴스) 내부 접속
docker exec -it apache_server5 bash
exec : 실행
-it : 터미널 모드로 접속
bash : 접속 시 bash셸로 실행

exit #도커 커멘드 종료
service apache2 stop #로컬환경에서 아파치 서비스 스탑

접속 안댐
우분투:8080 (192.~) >>> docker:80(172.~)
!우분투는 네트워크카드가 2장이기 때문에 172대역까지 다가고
칼리는 192 대역하고만 통신할수 있는 케이블이 완성이 댓기때문에
172까지는 안감
컨테이너 로그 확인
docker logs apache_server
데이터볼륨 설정(데이터 지속성)
docker run -d --name apache_server5 -p 6666:80 -v
/home/jina/Desktop:/var/www/html ubuntu/apache2

컨테이너 시작/정지
docker start apache_server
docker stop apache_server
apt install mousepad -y #로컬에서 마우스패드 설치
mousepad test.html #파우스패드로 test.html 열기

마우스패드안에 코드 작성 + 저장
docker exec -it apache_server5 bash #다시 도커환경으로 들어감
ls
test.html







웹 전체 흐름
docker build . -t voting-app #이미지 빌드
docker run -p 5000:80 voting-app >>>redis을 바라보게하는 옵션이 빠져있음
docker run -d --name=redis redis #redis 컨테이너 실행
docker run -p 5000:80 --link redis:redis voting-app #voting-app 컨테이너 실행
--link : 선언한 변수에 지정된 문자열로 컨테이너를 찾아 연결됨
docker run -d --name db -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres posdtgres:15-alpine #db(postgres) 컨테이너 실행
cd../worker
mousepad Dockerfile #Dockerfile 수정
ARG BUILDPLATFORM=linux/amd64
FROM ~~
ARG TARGETPLATFORM=linux
ARG TARGETARCH=x64
docker build . -t worker-app #worker-app 이미지 빌드
dockerw run -d --link redis:redis --link db:db worker-app #worker-app 컨테이너 실행
cd .../result
docker build . -t result-app #result-app 이미지 빌드
docker run -d --link db:db -p 5001:80 result-app #result-app 컨테이너 실행
Dockerfile : 컨테이너 내부에 설정하여 이미지로 변환
Docker-compose.yml : 컨테이너를 실행하고 연동
: 리소스(CPU, MEM, HDD 등) 의 사용률 정보 수집
최종 목적 : EC2 같은 리소스로부터 생성된 로그를 Watch로 수집하기
사용자 행위 정보 로그(로그인, 로그아웃, 정책생성 등) > CloudTrail
시스템 행위 정보 로그(EC,RDS,...) > CloudWatch
정책 생성(Role) > EC2 생성 , 서비스 설치 , EC2 연결(Role) > Access Key 생성 > EC2 접속 > AWS CLI 셋팅 > CloudWatch Agent 설치 >CloudAgent 실행 > 로그생성 > CloudWatch 검증
1) 정책생성 > IAM > CloudWatchAgentServerPolicy
final_2024로 역할을 생성함
2) IAM >>> Accesskey도 생성
3) EC2 생성 및 서비스 설치, EC2에 role연결
agent설치랑 서비스 설치 동시에 진행
yum install httpd -y
yum install amazon-cloudwatch-agent -y
yum install collectd -y
4) aws cli 설정
5) agent 설정
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard 입력하여 agent 마법사 실행
1~3번 선택사항(linux, ec2, root선택 후 쭉 엔터 눌러 진행
Do you want to monitor any log files? << 메뉴가 나오면 로그경로 입력 후 엔터
- yes
- no
default choice: [1]:
Log file path:
/var/log/httpd/access_log
이후 쭉 엔터 눌르고 ,
What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy)
default choice: [AmazonCloudWatch-linux]
final_2024 <<< role 이름
위 메시지 나오면 만든 role 이름 넣고 쭉 엔터 누르면 됨
아래 메시지가 출력되면 성공
Successfully put config to parameter store final_2024.
Program exits now.
이후 json파일을 실행
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
입력해서 json실행
amazon-cloudwatch-agent has already been stopped
Created symlink /etc/systemd/system/multi-user.target.wants/amazon-cloudwatch-agent.service → /etc/systemd/system/amazon-cloudwatch-agent.service.
가 나오면 성공
splunk 설치 >> DB생성 >> agent 설치 >> 설정파일 설정 >> 로그 수집 확인
1)사전준비
ubuntu 및 kali (둘다 MEMORY 4gb 이상 설정)
2) splunk 설치 (칼리)
dpkg -i splunk.deb
3) splunk 활성화 (칼리)
cd /opt/splunk/bin
./splunk enable boot-start >> 라이센스 동의 뜸 q 입력 후 아이디와 비번 입력
./splunk start
링크로 파이어폭스로 들어감 > 아이디와 패스워드로 로그인 > GOT IT >
4) index 생성 (칼리)
index = DB와 구성요소 동일
DB(index) 구성요소 : table(sourcetype) >> column(field) >> data
+ setting > indexs > new index > index이름 설정(logtest)
5) Index 구성 (칼리)
cd /opt/splunk/etc/system/local
mousepad inputs.conf
[splunktcp://9997]
disabled = false
생성 후 cd /opt/splunk/bin
./splunk restart 로 input.conf 실행
6) fowarder 를 타겟 시스템에 설치 (칼리)
python3 -m http.server 8080 (forwarder가 있는 경로에서)
우분투에서 파이어폭스 실행 후 kaliip:8080 으로 접속 후 deb파일 받기

--- 여기까지는 칼리(splunk 서버)
7) forwarder 설치
apt install curl -y
다시 dpkg -i ~~~.deb #forwarder설치
// forward는 curl이 필요하다
8) inputs.conf, outputs.conf 생성 (우분투)
cd /opt/splunkforwarder/etc/system/local
mousepad inputs.conf
[monitor:///var/log/apache2/access.log]
disabled = false
index = logtest >>splunk 서버에서 만든 index이름 넣기
sourcetype = apache_log >> db로 치면 table을 생성
[monitor:///var/log/apache2/error.log]
disabled = false
index = logtest
sourcetype = error_log
하나의 구문이 된다. (input file안)
mousepad outputs.conf
[tcpout]
defaultGroup = my_splunk : 그룹 이름
[tcpout:my_splunk]
server = 192.168.111.128:9997 >>>splunk serverIP:포트
9) splunkforwarder 실행 (우분투)
cd /opt/splunkforwarder/bin
./splunk start >>> q >> y 입력 >> id pw 입력 엔터
10) 서비스 실행 및 로그 확인 (우분투)
service apache2 start # 칼리에서 우분투 접속하여 로그 쌓기
cat /var/log/apache2/access.log # 로그 확인
---여기까지 우분투 작업
11) splunk 서버 index 로그 수집 확인 (칼리)
Apps > Search&Reporting > New Search > index="logtest" 입력
기획 > 요구사항정의 >> 개발설계 > 개발 > 테스트 > 운영전환 > 유지보수 > 폐기
구축도구 : Docker, Terraform, Kubernetes, CloudFomation,...
-> 구축에 있어서 중요한것!! 네트워크 (접근제어, 통신)
3 티어로 시스템을 구축
ex) 프론트 >> 백 >> 백 (구성하기 나름)
ex) docker >>> 총 5개의 환경을 구성
1) voting-app >> 5000 >> 80 public (Front)
2) redis >> private(Backend)
3) worker-app >> private(Backend)
4) db(postgres) >> private(Backend)
5) result-app >>>> 5001 >> 80 public (Front)
전가상화 vs 반 가상화 vs 컨테이너
전가상화 : 물리서버에 OS부분에 가상화 OS를 설치하여 대시보드를 통해 가상화 시스템 배포 관리
먼저 ) H/W 제어하기 위해 OS(Windows)를 설치함
다음) OS에 하드웨어 성능을 분배해서 사용할 수 있게 해주는 기술
+ 물리적인 하드웨어 스펙이 논리적으로 분리가됨
ex) cpu가 16core >>> 4core 4core 4core 4core로 나누어 총 4개의 시스템 구성이 가능
반가상화 : 물리서버에 OS를 설치하고 가상화 프로그램을 설치하여 가상환경 구축
ex) VMware, VirtualBox
+ 물리적인 성능을 논리적으로 나누어 사용됨
컨테이너 : 기존의 가상화 기술의 물리적인 성능을 할당하는 문제를 해결하기 위해 나옴
= OS위에 폴더를 설치하여 독립적인 폴더 권한을 가지면서 통신 기술을 할당해주는 기법
+ 경량화(기존 가상화는 가상환경에 OS를 올리면 실제OS설치하는 만큼 성능이나 저장공간이 필요)
+ 호스트와 리소스를 공유함(CPU, MEM, Storage)
host = local : 물리적인 HW에 설치된 OS가 돌아가는 환경
Q : 우분투에 도커를 설치해놨음 >>> 어디가 호스트일까?
A : 도커입장의 HOST는 우분투, 우분투입장의 HOST는 윈도우
guest 환경 = 가상화 환경(가상화or 컨테이너 모두)
host와 guest간에 통신 이해
같은 NAT여도 IP대역이 달라지면 통신이 안됨.

인터넷 이라는것은 라우터나 스위치에서 테이블(라우팅)을 구성해줘야함.(해당IP가 누구의 어디 에 있는지 알아야 패킷을 전달해줌)

가 : C,A
나 : 불가능, A가 라우터 역활이 되면 가능, 포트포워딩 socat 명령어를 통해 가능
다 : B
: 개발이 끝나고 테스트에 이상이 없어 운영계로 넘어와 실업무에 활용 하는 단계
1) 시스템에 대한 안정성 확보
2) 협조가 잘되어야함
DB(index) 구성요소 table(sourcetype) >> column(field) >> data
botsv1 suricata,...
SIEM : 로그를 전달받아 위협데이터를 분석할 수 있는 관리 시스템
-> SPlunk로 대체되고있음
-> 이유 : Splunk는 현재 정형화되어 있는 모든 로그를 수집하고 쿼리 및 저장할 수 있기 때문에
-> 이기종간에 로그를 모두 한곳으로 모아 연관성을 분석 가능
이미 다른 스플렁크에서 저장된 데이터를 >> 강제로 압축해서 추출 >> 강제로 데이터 영역에 붙여넣기
/opt/splunk/etc/apps/ 에 저장된 데이터(결국 여기가 인덱스 만들면 저장되는 경로)

index 파악은 어렵지 않다.
sourcetype은 별도로 파악 >> 어떤 데이터들이 저장되어 있는지 파악
index="botsv1" earliest=0
*splunk는 시단단위로 검색
suricata
stream:http
stream:dns
Xml~~~sysmon
ftg_utm
dedup : 중복제거
table : 필드 내용 출력

1)
index="botsv1" earliest=0 sourcetype="suricata" alert.signature ="*"
-> 출력 결과에 따라 CVE가 표시된 필드 확인 > 가장 빈도가 높은 CVE확인
2)
index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com
3)
index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com
-> agent 필드에서 확인 가능
4)
index="botsv1" earliest=0 sourcetype="stream:http" imreallynotbatman.com
-> dest ip 확인
5)
index="botsv1" earliest=0 imreallynotbatman.com "http.http_user_agent"="Python-urllib/2.7" src_ip="23.22.63.114"
user_agent가 WEB이 아닌것 중 빈도가 높은것
mozilla 문자열이 붙음
6)
index="botsv1" earliest=0 imreallynotbatman.com "http.http_user_agent"="Python-urllib/2.7" src_ip="23.22.63.114"
/joomla/administrator/index.php >> CMS 관리자 로그인페이지
7)
index="botsv1" earliest=0 imreallynotbatman.com "http.http_user_agent"="Python-urllib/2.7" src_ip="23.22.63.114"
data가 서버로 전송되었다.

8)
index="botsv1" earliest=0 imreallynotbatman.com src_ip="23.22.63.114" form_data="username=admin" POST http_user_agent="Mo"
9)
index="botsv1" earliest=0 imreallynotbatman.com form_data="username=admin*" src_ip="23.22.63.114" python
10)
index="botsv1" earliest=0
40.80.148.42
11)
index="botsv1" earliest=0 sourcetype="Xml*" 3791.exe

12)
13)
index="botsv1" earliest=0 imreallynotbatman.com prankglassinebracket.jumpingcrab.com
14)
index="botsv1" earliest=0 earlist=0 sourcetype="fgt_utm" 40.80.148.42 SQL
15)
terraform init #문제점 체크
terraform plan #변수 내용들 출력
terraform apply #배포 및 구축 작업 수행
terraform destroy #배포된 인프라 삭제

= 도커+테라폼
sudo docker run --name smtpd -d --restart always -p 25:25 -e "RELAY_POSTMASTER=postmaster@darkrelay.io" -e \
"RELAY_MYHOSTNAME=smtp-relay.darkrelay.io" -e "RELAY_MYDOMAIN=darkrelay.io" -e "RELAY_HOST=[127.0.0.1]:25" \
turgon37/smtp-relay
sudo docker run --name samba -d --restart always -p 139:139 -p 445:445 -p 137:137/udp -p 138:138 dperson/samba -v \
/tmp/test/share:/share:r -v /tmp/test/servershare:/servershare:r -v /tmp/test/johnshare:/johnshare:r -v /tmp/test/bobshare:/bobshare:r \
-u "john;password1" \
-u "bob;password2" \
-s "public;/share" \
-s "servershare;/tmp/test/servershare;no;no;no;john,bob" \
-s "johnshare;/tmp/test/johnshare;yes;no;no;john" \
-s "bobshare;/tmp/test/bobshare;yes;no;no;bob" \
-S : 표준모드로 동작, 자체적으로 인증절차 거침
-p : 인증없이 접근 가능하게
no;no;no;bob : 읽기쓰기설정, 브라우징, 게스트접근, 접근가능 사용자