Setting Environment

OS : mac OS X Mojave
Python : 3.6.5
Django : 2.2.1

위 버전들을 바탕으로 Django 개발 환경 세팅을 진행하겠습니다.

 

1. python version 세팅

 # pyenv를 homebrew를 이용해 설치
 $ brew install pyenv
 
 # 환경 변수 세팅
 # 아래 내용들을 파일 끝에 추가
 # zsh을 사용할 경우 ~/.zshrc
 $ vi ~/.bashrc
 export PATH="$HOME/.pyenv/bin:$PATH"
 eval "$(pyenv init -)"
 eval "$(pyenv virtualenv-init -)"
 
 # 특정 버전을 pyenv를 통해 설치(여기서는 3.6.5)
 #
 # zipimport.ZipImportError: can't decompress data; zlib not available
 # 위와 같은 에러가 뜬다면 아래처럼 환경변수를 추가해 설치
 # LDFLAGS="-L/usr/local/opt/zlib/lib" CPPFLAGS="-I/usr/local/opt/zlib/include" pyenv install 3.6.5
 $ pyenv install <~python-version~>
 
 # 실제 3.6.5 버전이 설치 되었는지 확인
 $ pyenv versions
 
 # virtualenv 설정을 위한 homebrew를 이용해 pyenv-virtualenv 설치
 $ brew install pyenv-virtualenv
 
 # virtualenv 생성
 $ pyenv virtualenv <~python-version~> <~virtualenv-name~>

 

2. Django 설치

 # virtualev activate
 $ pyenv activate <~virtualenv-name~>
 
 # pip를 이용한 Django 설치
 $ pip install django==<~django-version~>
 
 # django 설치 검증
 # django 버전이 출력된다면 제대로 설치 완료
 $ python -m django --version
 <~django-version~>

 

3. Django start project 생성

 # django admin을 사용한 start project 생성
 # <~project-name~>으로 folder가 생성됨.
 $ django-admin startproject <~project-name~>
 
 # project로 change directory
 $ cd <~project-name~>
 
 # run development server
 $ python manage.py runserver
 python manage.py runserver
 Watching for file changes with StatReloader
 Performing system checks...

 System check identified no issues (0 silenced).

 You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
 Run 'python manage.py migrate' to apply them.

 May 29, 2019 - 17:20:27
 Django version 2.2.1, using settings 'exmatch.settings'
 Starting development server at http://127.0.0.1:8000/
 Quit the server with CONTROL-C.

 

4. Project 생성 확인

제대로 서버가 생성되었다면 http://127.0.0.1:8000/ 에 접속하시면 
아래처럼 page가 뜨시는 것을 확인하실 수 있습니다

 

5. Django start app 생성

 # manage.py를 사용한 start app 생성
 $ python manage.py startapp <~app-name~>

 

6. Django MySQL Setting

 # <~project-name~>/setting.py

...

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'api',
]

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '<~hostname~>',
        'PORT': '<~PORT~>',
        'USER': '<~username~>',
        'PASSWORD': '<~password~>',
        'NAME': '<~database-name~>',
    }
}

...

 

7. MySQL migration

 # install mysqlClient
 $ pip install mysqlclient

 # <~app-name~>의 db model 생성
 $ python manage.py makemigrations
 
 # django app db model 생성
 $ python manage.py migrate

https://static.googleusercontent.com/media/research.google.com/ko//pubs/archive/43438.pdf

https://static.googleusercontent.com/media/research.google.com/ko//pubs/archive/44843.pdf

https://static.googleusercontent.com/media/research.google.com/ko//pubs/archive/45406.pdf

http://www.oreilly.com/webops-perf/free/kubernetes.csp

'Cloud > Kubernetes' 카테고리의 다른 글

[Kubernetes] AWS에 Kubernetes 설치하기  (0) 2017.07.13

https://github.com/MatthewClarkMay/geoip-attack-map


위 github의 오픈 소스는 특정 IP(현재 내가 서비스하고 있는 IP 등등)에 대한 패킷 정보를 attack map 형태의 웹 어플리케이션으로 나타내 주는 오픈소스이다. 물론 해당 IP의 패킷 정보를 받아와서 보여주는 기능은 구현되어 있지 않다. github의 README.md 파일에서는 해당 오픈 소스를 설치하는 방법을 자세히 설명해 두었다. 해당 과정대로 설치를 끝내고, config까지 해준다면 지도 위에서 attack이 날라가는 것을 볼 수 있다. 실제 attack이 아니라, dummy 정보를 syslog에 넣고, 그 syslog를 읽어서 visualization해주는 오픈 소스이기에 수정이 필요하다.


* 설치 환경
서버 : Ubuntu Server 16.04 LTS (AWS EC2 t2.micro)


1. git clone으로 저장소 복사

$ git clone https://github.com/MatthewClarkMay/geoip-attack-map


2. 파이썬, redis 설치

$ sudo apt-get install python3-pip redis-server


3. python requirements 설치

$ cd geoip-attack-map/ 
$ sudo pip3 install -U -r requirements.txt


4. redis 실행

$ redis-server

이처럼 redis server가 잘 구동중이라면 Ctrl + C로 빠져나감


5. IP 주소의 정보를 알기 위한 maxminddb를 받아옴

$ cd DataServerDB
$ ./db-dl.sh
$ cd ..


6. DataServer.py 시작

$ cd DataServer
$ sudo ./DataServer.py

이후 putty를 Duplicate Session으로 새로운 Session 생성


7.  dummy data(attack) 생성

$ cd geoip-attack-map/DataServer
$ ./syslog-gen.sh

이후 putty를 Duplicate Session으로 새로운 Session 생성


8. attack map을 위한 국가별 flag image unzip

$ sudo apt-get install unzip     #unzip이 설치 안되었을 떄
$ cd geoip-attack-map/AttackMapServer/static/
$ unzip flags.zip


9. 서버 외부에서 접속하기 위한 javascript 수정

$ vim map.js


실제 서버 주소로 수정해줌

// To access by a browser in another computer, use the external IP of machine running AttackMapServer
// from the same computer(only), you can use the internal IP.
// Example:
// - AttackMapServer machine:
//   - Internal IP: 127.0.0.1
//   - External IP: 192.168.11.106
var webSock = new WebSocket("ws:/<실제 서버 주소>:8888/websocket"); // Internal
//var webSock = new WebSocket("ws:/192.168.1.100:8888/websocket"); // External


10. 웹 어플리케이션 동작

$ cd ..
$ ./AttackMapServer.py

이렇게 되면 웹 어플리케이션이 동작 중이다.

※ 해당 웹 어플리케이션은 8888포트로 동작하므로 AWS Inbound 설정에서 8888포트를 열어줘야 한다.


11. 웹 어플리케이션 동작 확인

다음처럼 실제 어택하는 모습이 보이게 된다.

현재는 ip 8.8.8.8이 고정되어 있어서 미국 왼쪽 부분으로 모든 패킷이 날라가는 것을 볼 수 있다.

DataServer.py 와 map.js, AttackMapServer.py를 고쳐주면 목적지를 바꿔줄 수 있다.



12. 각 주요 부분 설명

 - DataServer/sys-gen.py     : 출발 IP, Port, 도착 IP, Port, 공격 유형 등을 랜덤으로 생성시켜 /var/log/syslog에 저장해 준다
 - DataServer/DataServer.py    : /var/log/syslog에서 log 정보를 읽어와 패킷 정보라면 IP의 나라, 위치 등 정보를
                                                           Json 파일로 만들어 웹 어플리케이션으로 전달하는 역활
 - AttackMapServer/AttackMapServer.py : 해당 웹 어플리케이션을 구동시켜주는 프로그램, Json파일을 읽어와 Javascript로 넘겨준다
 - AttackMapServer/static/map.js : Server에서 넘겨준 정보로 Attack Map을 그려줌

+ Recent posts