I do not have much time in my life right now to maintain this project. I undertook this challenge as a means to learn JavaScript, and to improve upon the Python I already knew. I'm sure there are several things I could have done differently in my implementation, and I won't be offended if I receive constructive criticism from someone who downloads and views my code. I know I learned a ton when working on this, and I hope the open source community will continue to teach me things :)
NOTE: Because I don't maintain this project there are a few features that probably don't work out the box, for example, the map probably won't display because I don't pay for a legitimate MapBox API key. To fix this you will probably have to create your own MapBox account and use your own key.
This geoip attack map visualizer was developed to display network attacks on your organization in real time. The data server follows a syslog file, and parses out source IP, destination IP, source port, and destination port. Protocols are determined via common ports, and the visualizations vary in color based on protocol type. CLICK HERE for a demo video. This project would not be possible if it weren't for Sam Cappella, who created a cyber defense competition network traffic visualizer for the 2015 Palmetto Cyber Defense Competition. I mainly used his code as a reference, but I did borrow a few functions while creating the display server, and visual aspects of the webapp. I would also like to give special thanks to Dylan Madisetti as well for giving me advice about certain aspects of my implementation.
This program relies entirely on syslog, and because all appliances format logs differently, you will need to customize the log parsing function(s). If your organization uses a security information and event management system (SIEM), it can probably normalize logs to save you a ton of time writing regex.
If you find any errors or bugs, please let me know. Questions and feedback are also welcome, and can be sent to mcmay.web@gmail.com, or open an issue in this repository.
Tested on Ubuntu 16.04 LTS.
Clone the application:
git clone https://github.com/matthewclarkmay/geoip-attack-map.git
Install system dependencies:
sudo apt install python3-pip redis-server
Install python requirements:
cd geoip-attack-map
sudo pip3 install -U -r requirements.txt
Start Redis Server:
redis-server
Configure the Data Server DB:
cd DataServerDB
./db-dl.sh
cd ..
Start the Data Server:
cd DataServer
sudo python3 DataServer.py
Start the Syslog Gen Script, inside DataServer directory:
./syslog-gen.py
./syslog-gen.sh
Configure the Attack Map Server, extract the flags to the right place:
cd AttackMapServer/
unzip static/flags.zip
Start the Attack Map Server:
sudo python3 AttackMapServer.py
Access the Attack Map Server from browser:
To access via browser on another computer, use the external IP of the machine running the AttackMapServer.
var webSock = new WebSocket("ws:/127.0.0.1:8888/websocket");
var webSock = new WebSocket("ws:/192.168.1.100:8888/websocket");
sudo python3 AttackMapServer.py
http://192.168.1.100:8888/