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