공부/클라우드기반 취약점 진단 및 대응 실무

10/19 클라우드기반 취약점 진단 및 대응 실무

마준123 2022. 10. 19. 10:11

 * docker

start - pause - stop 3가지가 가능!

어제는 start만 했다!

 

 * stop

 $ sudo docker stop webapp( 프로세스 이름 )

 = 이렇게하면 프로세스가 중지된다.

 = 그러면 갖고있는 포트를 이용 할 수 있다.

 

 * rm

$ sudo docker rm [CONTAINER ID]

 = 이렇게하면 중지된 컨테이너를 아예 삭제시켜 버릴 수 있다 ( 다시 실행 못함 )

 = 컨테이너 이름을 다 쓸필요도 없고 앞에 2글자만 써도 삭제된다!

 = ps 할때 -a 태그를 붙여주면 꺼져있는 컨테이너도 볼 수 있다.

 

 * images

$ sudo docker images

 = 다운로드 받았던 이미지를 볼 수 있다.

 = rmi를 쓰면 이미지를 삭제할수있다.

이미지 삭제

 

 

 * run

$ sudo docker run -itd -p 8889:80 --name=webapp nginx

 = 다시 실행 할 수 있다.

 

 

 * 이건 뭐한건지 모르겠음

 =  대충 여기서도 컨테이너 아이디같은걸 볼 수 있다 등등인듯

 

 * ifconfig

 = 도커를 깔면 2개의 네트워크 대역이 더 생긴다.

 = 맨 위에꺼와 맨 밑에꺼가 연결이 된다고함.

 

 * 포트포워딩, NAT 게이트웨이, 브릿지... [ 외부에서 내 docker 까지 들어오게 하기 위한 작업들... ]

 =  전혀 이해할 수 없었다.

 

 * nikto

$ sudo nikto -h http://192.168.5.129:8889  

 = 취약점 자동화 분석 도구라고함

 = 지금은 페이지가 1개라서 별거 안나온다.

 

 * 로그파일

 = /var/log/apache2

 = /var/log/ngnix

 = 저런곳에 로그가 있당.

 

 

 * 컨테이너 로그 분석

┌──(root㉿kali)-[/var/lib/docker/containers/580feae1796d8d4cad0665bde4cc72827a5379d451a47d20910fe769af2afcff]
└─# cat 580feae1796d8d4cad0665bde4cc72827a5379d451a47d20910fe769af2afcff-json.log

 

 

 * nginx 의 index 주소

 = /usr/share/nginx/html/index.html

 = 도커 컨테이너 안에있는 리눅스는 vi등 아주 기초적인 도구도 없다. ( 경량화 때문 )

 = 그래서 안에서 작업하기보단, 밖에서 개발해서 넣는 개념으로 많이 한다고 한다.

 

 

 * 도커에 index.html 넣기

$ sudo docker cp index.html webapp:/usr/share/nginx/html/index.html

 = 사실 cp명령어니까 뒤에 경로 넣는법만 잘 알면 될거같다.

 

 * 컨테이너의 변경 내역

$ sudo docker diff webapp

 

 * 컨테이너 이미지로 만들기 

$ sudo docker commit -a "mas615" webapp majunwebapp:1.0 

 = mas615는 내 아이디 ( 나중에 도커허브에 업로드 해야할지도 몰라서 제대로 쓰는게 좋다! )

 = majunwebapp:1.0  는 만들려는 이름

만들어진 모습

 

 * 이미지 사용하기

$ sudo docker run -itd -p 8887:80 --name=webapp3 majunwebapp:1.0

 = 만든 이미지:태그 로 해주는게 중요! ( 태그 안하고 이름만 썼다가 계속 안됐었음; )

태그를 안넣거나 이상하게 넣어서 안되는 모습.

 

 * 도커 로그인

$ sudo docker login 

 

 

 * 컨테이너 올리기

$ sudo docker tag majunwebapp:1.0 mas615/webapp:1.0

$ sudo docker push mas615/webapp:1.0

 

 = 푸쉬까지 완료하면 도커 허브에서 확인할 수 있다.

 

 

 * 도커 허브에 올린걸 다시 받아서 만들기

$ sudo docker run -itd -p 8886:80 --name=webapp4 mas615/webapp:1.0

 

 

 * 컨테이너의 상태정보 보기

$ sudo docker stats                               ( 다보기 )

$ sudo docker stats webapp                 (특정 컨테이너 보기 )

 = 리눅스의 top과 같은것 이라고 한다.

 

 

 * 일단 지금은 뭔지 모르겠는 무언가 ( 대충 볼륨을 이쪽에 하고...뭐 어쩌구... )

 

$ sudo docker run -idt -p 8080:80 -v /home/kali/ngnix_log:/var/log/nginx nginx:1.19

 = 참고로 디렉토리명ngnix 랑 이미지 nginx랑 스펠링 순서 다르다!! 주의!!( 왜 디렉토리를 저렇게 만든건지는 의문 )

$  cat access.log

 = ngnix_log 디렉토리에 들어가서 access.log 를 열어보면 엑세스 로그를 볼 수 있다.

 

 

 * inspect ( 컨테이너 정보보기 )

$ sudo docker inspect eb42176935ec ( CINREINER ID )

 = 정보가 너무 많이 나와서.....뭘 봐야할지도 모르겠네.

 

 

 * (오래된)이미지,컨테이너 한번에 청소해버리기

$ sudo docker system prune 

 = 하지만 매우 위험하오니 평소에는 쓸일이 거의 없다고 한다.

 

 

 * 의문

 = 저 두개는 무었인가?

 =  그 이후에 한거

 

 

 * 컨테이너 안에서 ifconfig나 vi등을 쓰려면 net-tool 등등 직접 설치해줘야한다.

 =  컨테이너 들어가는 방법은 아래 캡쳐

$ sudo docker exec -it ac193e16639b /bin/sh

들어가서 ls -l 친 모습

 

 * 네트워크 만들기 ( 약간 aws로치면 서브넷 느낌 )

$ sudo docker network create web-net01 

$ sudo docker network ls                               ( 네트워크 보기 )

 

 

 * 만든 네트워크 사용하기 

$ sudo docker run -idt -p 8081:80 --net=web-net01 --name=dev_web02 nginx:1.19

 

 * 서브넷 커스터해서 만들기

 $ sudo docker network create --driver bridge --subnet 172.100.1.0/24 --gateway 172.100.1.1 custom-net

 = driver - 브릿지나 뭐 할수있다는데 안쓰면 기본 브릿지

 = subnet - 서브넷

 = gateway - 그냥 똑같이 쓰면될듯

 = custom-net - 그냥 내가 만들고 싶은 이름

 

 

 * 로드밸런싱

$ sudo docker run -idt -p 5003:80 --name=nginx_web03 -v /home/kali/web03:/usr/share/nginx/html nginx

 = 디렉토리 3개만들기

 = 컨테이너 3개 만들기

 = 각각 디렉토리에 index.html을 만드는데 로드밸런싱이 잘 되었는지 확인하기위해 다 다르게 만들기

 

 

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

 * 여기서부터는 귀찮아서 노션에 있는거 그대로 복사했다..

 = 내용이 좀 복잡해보이는데 노션에서 확인하는게 더 이로울듯 싶다....

 

/etc/nginx/nginx.conf 에서 아래와 같이 수정한다. 나머지 설정은 #을 하여 주석처리 한다. (후에 하나씩 풀어주며 확인….)

```bash
upstream backend-lb {
                server 127.0.0.1:5001;
                server 127.0.0.1:5002;
                server 127.0.0.1:5003;
        }

        server {
                listen 80 default_server;
                listen [::]:80 default_server;

                location / {
                        proxy_pass http://backend-lb;
                }
        }
```

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


```bash
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
        upstream backend-lb {
                server 127.0.0.1:5001;
                server 127.0.0.1:5002;
                server 127.0.0.1:5003;
        }

        server {
                listen 80 default_server;
                listen [::]:80 default_server;

                location / {
                        proxy_pass http://backend-lb;
                }
        }
        ##
        # Basic Settings
        ##

        #sendfile on;
        #tcp_nopush on;
        #types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        #include /etc/nginx/mime.types;
        #default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        #ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        #ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        #gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        #include /etc/nginx/conf.d/*.conf;
        #include /etc/nginx/sites-enabled/*;
}

#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}
```

위와 같이 입력이 완료된 후에 아래와 같이 nginx 서버를 다시 시작한 후에 80포트로 접속하여 새로고침을 하시면 로드밸런싱 진행

 

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

 

:5001
:5002
:5003

이렇게 3개 로드밸런싱 하였다.

성공~

 

 

 * 뭔진 모르겠는데 강사님이 갑자기 채팅창에 올린 주소

https://kamang-it.tistory.com/entry/WebServernginxnginx%EB%A1%9C-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1-%ED%95%98%EA%B8%B0 

 

[WebServer][nginx]nginx로 로드밸런싱 하기-(4)

참고: [WebServer][nginx]운영체제별 nginx 설치하기-(1) [WebServer][nginx]root디렉터리 변경하기-(2) [WebServer][nginx]로그 보고 수정하기-(3) [Docker][ShellScript]Nginx.LoadBalancer-Nodejs : 엔진엑스..

kamang-it.tistory.com

 

 

 

 * 랜덤값

 =  아래 사진처럼 랜덤을 넣으면 랜덤으로 밸런싱한다.

 =  그런데 가중치를 줄 수 있다.

 

=  이런식으로 설정하고 리스타트시키면 1번이 유난히 많이 나오게 로드밸런싱 된다.

 = 그리고 sudo docker stop으로 컨테이너 하나를 끄면 그 컨테이너는 빼고 로드밸런싱 된다.

 = 다시 살리면 자동으로 다시 로드밸런싱 된다.