일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- EC2
- RDS
- 와이어샤크
- 정보보안
- 정보보호
- mysql
- AWS SAA
- 클라우드 자격증
- Iam
- ISMS-P
- AWS
- 인스턴스
- 공개키
- 보안컨설팅
- 클라우드보안
- 로드밸런서
- 로그분석
- ncp
- metasploit
- 클라우드자격증
- 클라우드서비스
- 취약점
- 개인정보보호법
- AWS SSA
- 네이버클라우드
- 파일시그니처
- azure
- 클라우드
- Burp Suite
- isms
- Today
- Total
처음 만나는 클라우드 보안
[팀프로젝트] 도커와 파이썬을 활용한 3Tier-시스템 구축 본문
도커(Dokcer) 컨테이너를 바탕으로 대상 서버의 접속 로그를 모니터링 할 수 있는 시스템을 구축한다.
아래 그림과 같이 컨테이너는 총 세개 (‘관리 서버’, ‘DB서버’, ‘타겟 서버’) 그리고 그것을 모두 연결하는 파이썬 프로그램이 핵심이다. 사용자는 관리서버를 통해 타켓 서버에 대한 로그기록을 실기간으로 열람할 수 있다.
도커(Docker)란?
오픈소스 가상화 플랫폼으로 하나의 OS(Operation System)상에서 여러 컨테이너(=서버)를 동시에 실행 할 수 있다. 완성 된 컨테이너들은 추가 설치 프로그램과 환경을 묶는 컴포징(Composing) 작업을 통해 하나의 자동화 서비스로 배포되어 다른 환경에서도 즉각적인 서비스 구성이 가능하다.
1) 도커 컴포즈(Docker-compose)
: 여러 개의 컨테이너를 하나의 패키지로 구성하는 기술을 의미한다. 포함된 다수의 컨테이너들은 일괄적으로 관리되며 한번에 관리가 가능하며 YAML 포맷으로 이루어져 있다.
2) 도커 볼륨(Docker Volume)
: 기본적으로 컨테이너 내부에 저장된 데이터는 컨테이너의 삭제와 함께 소멸된다. 이때 컨테이너 생성시 적용된 볼륨 옵션(-v)을 통해 데이터를 로컬 호스트 데이터로 보존할 수 있다.
1. 도커 환경 구축
명칭 | 관리서버 | DB서버 | 타켓서버 |
이미지 파일 | Python3: Latest | MySQL | Nginx |
주요 기능 | 사용자 인터페이스 | 로그 및 사용자 데이터 저장 | 로그 데이터 발생 |
2. 파이썬 프로그램 개발
컨테이너 간 원격접속 기능과 MySQL 사용을 위하여 파이썬의 Pexpect, PyMySQL 모듈이 활용되었다.
1) Pexpect 모듈
: 관리서버는 타겟서버의 SSH로 접근하는데, 이때의 기계식 질문을 Child.expect() 함수를 사용하여 응답한다. 함수 리턴 값 currentTime을 통해서 관리서버에서 로그 수집을 갱신할 수 있다.
import pymysql #예시용으로 구동되지 않습니다.
def log_col_view() :
conn = pymysql.connect(host='172.17.0.1', user='root', password='abcd', db = 'developer', charset='utf8')
cursor = conn.cursor()
sql = "SELECT ip, accessNumber FROM logCollect "
cursor.execute(sql)
data = []
for i in cursor:
data.append(i)
if data == [] :
return False
else :
return data
conn.commit()
conn.close()
2) Pymysql 모듈
: DB서버로의 원격 접속 후 pymysql.connect() 함수를 통해 MySQL 명령어를 전송한다. 이를 통해 DB서버에 대한 데이터 삽입, 삭제 그리고 출력이 가능하다.
1.import pymysql #예시용으로 구동되지 않습니다.
2.def log_col_view() :
3. conn = pymysql.connect(host='172.17.0.1', user='root', password='abcd', db = 'developer', charset='utf8')
4. cursor = conn.cursor()
5. sql = "SELECT ip, accessNumber FROM logCollect "
6. cursor.execute(sql)
7. data = []
8. for i in cursor:
9. data.append(i)
10. if data == [] :
11. return False
12. else :
13. return data
14. conn.commit()
15. conn.close()
3. 데이터 베이스 테이블 설정
DB서버에 저장되는 각 테이블 구조 및 특징은 다음과 같다.
1) User Table
: admin이라는 컬럼값을 통해 ‘1’의 경우 관리자, ‘0’의 경우 일반사용자로 식별한다. 비밀번호는 파이썬 모듈 중 HASHLI의 md5() 함수를 적용시켜 암호화된 문자로 저장된다.
idx | ID | PW | NAME | admin |
1 | a | f4ds56a4f5sd6a | Kim | 1 |
2 | b | f1ds6a41f6asd5 | Lim | 0 |
3 | c | f4ds5a6f165sda | Choi | 0 |
4 | d | gfb456sdfb416 | Hong | 0 |
2) Log Table
: IP주소와 해당 접속 횟수를 수집한다. 접속 횟수의 과도한 증가를 통해 이상 접속 여부를 판별하고자 위함이다.
IP 주소 | 접속 횟수 |
10.0.0.8 | 88 |
192.138.17.128 | 52 |
4. YAML파일 작성 및 배포
: 도커 컨테이너는 이미지 파일을 제작하여 도커 허브에 업로드(Push)하고 서비스 구현이 요구되는 컨테이너 상에서 다운(Pull)하면 서비스 재현이 가능하다. 해당 작업에선 추가적인 설정 및 설치파일을 포함시키기 위해 각 컨테이너에 대한 이미지를 도커파일(Docker File)로 생성(commit)하였고 최종적으로 yaml포맷으로 컴포징 하였다.
4. 구축결과
참고자료
PyMySQL, ‘User guide of py MySQL’, (https://pymysql.readthedocs.io/en/)
위키피디아, ‘클라우드’, (https://ko.wikipedia.org/wiki)
후니의 컴퓨터, ‘YAML파일’, (https://hoony-gunputer.tistory.com)
'클라우드 기초' 카테고리의 다른 글
[중국 클라우드] 중국 클라우드 기업 알아보기 (알리바바, 텐센트, 바이두, 화웨이) (2) | 2022.09.26 |
---|---|
PuTTY, PuTTYgen 사용법 (0) | 2022.06.14 |
클라우드 컴퓨팅 서비스란? 공급자(CSP) & 서비스 특징 (0) | 2022.06.09 |
클라우드 기초용어 정리 (0) | 2022.04.30 |