301 lines
8.2 KiB
Markdown
301 lines
8.2 KiB
Markdown
# A/D Infrastructure Control System
|
|
|
|
A comprehensive infrastructure control system for Attack/Defense CTF competitions. Manages services, monitors attacks, sends alerts, and provides a unified web dashboard.
|
|
|
|
## Features
|
|
|
|
### 🎮 Service Controller
|
|
- Start/stop/restart docker-compose services via API
|
|
- Auto-pull changes from git repositories
|
|
- Real-time service logs viewing
|
|
- Service action history tracking
|
|
|
|
### 🎯 Scoreboard Injector
|
|
- Real-time monitoring of ForcAD scoreboard WebSocket
|
|
- Automatic attack detection and classification
|
|
- Point loss threshold alerts
|
|
- Attack statistics by service
|
|
|
|
### 📱 Telegram Bot
|
|
- Automatic critical alert notifications
|
|
- Manual message sending via API
|
|
- Message delivery tracking
|
|
- Group chat integration
|
|
|
|
### 🌐 Web Dashboard
|
|
- Unified control panel for all services
|
|
- Real-time attack visualization
|
|
- Service management interface
|
|
- Alert monitoring and testing
|
|
|
|
## Quick Start
|
|
|
|
### One-Line Installation
|
|
```bash
|
|
curl -sSL https://raw.githubusercontent.com/YOUR-REPO/main/install.sh | bash
|
|
```
|
|
|
|
### Manual Installation
|
|
|
|
1. **Clone the repository**
|
|
```bash
|
|
git clone https://github.com/YOUR-USERNAME/attack-defence-infr-control.git
|
|
cd attack-defence-infr-control
|
|
```
|
|
|
|
2. **Configure environment**
|
|
```bash
|
|
cp .env.example .env
|
|
# Edit .env with your configuration
|
|
nano .env
|
|
```
|
|
|
|
3. **Start the infrastructure**
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
4. **Access the dashboard**
|
|
Open http://localhost:8000 in your browser (default password: `admin123`)
|
|
|
|
## Configuration
|
|
|
|
### Required Environment Variables
|
|
|
|
Edit `.env` file:
|
|
|
|
```bash
|
|
# Database
|
|
POSTGRES_PASSWORD=your_secure_password
|
|
|
|
# Authentication
|
|
SECRET_TOKEN=your_random_secret_token
|
|
WEB_PASSWORD=your_web_password
|
|
|
|
# Telegram
|
|
TELEGRAM_BOT_TOKEN=your_bot_token
|
|
TELEGRAM_CHAT_ID=your_chat_id
|
|
|
|
# Game Settings
|
|
OUR_TEAM_ID=1
|
|
SCOREBOARD_WS_URL=ws://scoreboard:8080/api/events
|
|
```
|
|
|
|
### Getting Telegram Credentials
|
|
|
|
1. Create a bot with [@BotFather](https://t.me/botfather)
|
|
2. Get your chat ID from [@userinfobot](https://t.me/userinfobot)
|
|
3. Add bot to your group and make it admin
|
|
|
|
## Service Setup
|
|
|
|
After starting the infrastructure, setup your A/D services:
|
|
|
|
```bash
|
|
cd setuper
|
|
./setup.sh
|
|
```
|
|
|
|
This will guide you through setting up:
|
|
- **Packmate**: Traffic analysis (https://gitlab.com/packmate/Packmate)
|
|
- **moded_distructive_farm**: Attack/Defense farm (https://github.com/ilyastar9999/moded_distructive_farm)
|
|
- **Firegex**: Flag regex checker (https://github.com/Pwnzer0tt1/firegex)
|
|
|
|
## API Documentation
|
|
|
|
### Controller API (Port 8001)
|
|
|
|
```bash
|
|
# List services
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8001/services
|
|
|
|
# Start a service
|
|
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"action": "start"}' \
|
|
http://localhost:8001/services/1/action
|
|
|
|
# Get service logs
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:8001/services/1/logs?lines=100
|
|
```
|
|
|
|
### Scoreboard Injector API (Port 8002)
|
|
|
|
```bash
|
|
# Get attack statistics
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8002/stats
|
|
|
|
# Get recent attacks
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" \
|
|
http://localhost:8002/attacks?limit=50&attacks_to_us=true
|
|
|
|
# Get alerts
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8002/alerts
|
|
```
|
|
|
|
### Telegram Bot API (Port 8003)
|
|
|
|
```bash
|
|
# Send message
|
|
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"message": "Test alert"}' \
|
|
http://localhost:8003/send
|
|
|
|
# Get message history
|
|
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8003/messages
|
|
```
|
|
|
|
## Architecture
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ Web Dashboard :8000 │
|
|
│ (Flask + Bootstrap + jQuery) │
|
|
└─────────────────────────────────────────────────────┘
|
|
│
|
|
┌────────────────┼────────────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
|
│ Controller │ │ Scoreboard │ │ Telegram │
|
|
│ API :8001 │ │ Injector │ │ Bot :8003 │
|
|
│ │ │ :8002 │ │ │
|
|
└──────────────┘ └──────────────┘ └──────────────┘
|
|
│ │ │
|
|
└────────────────┼────────────────┘
|
|
│
|
|
▼
|
|
┌──────────────┐
|
|
│ PostgreSQL │
|
|
│ Database │
|
|
└──────────────┘
|
|
```
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
.
|
|
├── controler/ # Service controller API
|
|
│ ├── main.py
|
|
│ ├── requirements.txt
|
|
│ └── Dockerfile
|
|
├── scoreboard_injector/ # Attack monitor
|
|
│ ├── main.py
|
|
│ ├── requirements.txt
|
|
│ └── Dockerfile
|
|
├── tg-bot/ # Telegram notifications
|
|
│ ├── main.py
|
|
│ ├── requirements.txt
|
|
│ └── Dockerfile
|
|
├── web/ # Web dashboard
|
|
│ ├── app.py
|
|
│ ├── templates/
|
|
│ ├── requirements.txt
|
|
│ └── Dockerfile
|
|
├── setuper/ # Service setup scripts
|
|
│ ├── setup.sh
|
|
│ └── README.md
|
|
├── services/ # Managed services directory
|
|
├── docker-compose.yaml # Main compose file
|
|
├── init-db.sql # Database schema
|
|
└── .env.example # Configuration template
|
|
```
|
|
|
|
## Database Schema
|
|
|
|
The system uses a single PostgreSQL instance with tables for:
|
|
- `services` - Registered services
|
|
- `service_logs` - Action history
|
|
- `attacks` - Attack events
|
|
- `attack_alerts` - Generated alerts
|
|
- `telegram_messages` - Message log
|
|
- `settings` - System configuration
|
|
|
|
## Management Commands
|
|
|
|
```bash
|
|
# View all logs
|
|
docker-compose logs -f
|
|
|
|
# View specific service logs
|
|
docker-compose logs -f web
|
|
docker-compose logs -f controller
|
|
|
|
# Restart all services
|
|
docker-compose restart
|
|
|
|
# Stop all services
|
|
docker-compose down
|
|
|
|
# Stop and remove volumes
|
|
docker-compose down -v
|
|
|
|
# Rebuild after code changes
|
|
docker-compose up -d --build
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Services won't start
|
|
```bash
|
|
# Check logs
|
|
docker-compose logs
|
|
|
|
# Verify .env configuration
|
|
cat .env
|
|
|
|
# Ensure ports are available
|
|
netstat -tulpn | grep -E '8000|8001|8002|8003'
|
|
```
|
|
|
|
### Database connection errors
|
|
```bash
|
|
# Check PostgreSQL is running
|
|
docker-compose ps postgres
|
|
|
|
# Verify database credentials in .env
|
|
# Restart PostgreSQL
|
|
docker-compose restart postgres
|
|
```
|
|
|
|
### WebSocket connection to scoreboard fails
|
|
- Verify `SCOREBOARD_WS_URL` in `.env`
|
|
- Check scoreboard is accessible
|
|
- Ensure firewall allows WebSocket connections
|
|
|
|
## Security Considerations
|
|
|
|
1. **Change default passwords** in `.env`
|
|
2. **Use strong random tokens** for `SECRET_TOKEN`
|
|
3. **Restrict network access** to API ports in production
|
|
4. **Enable HTTPS** for web dashboard in production
|
|
5. **Regularly update** Docker images
|
|
|
|
## Contributing
|
|
|
|
Contributions welcome! Please:
|
|
1. Fork the repository
|
|
2. Create a feature branch
|
|
3. Submit a pull request
|
|
|
|
## License
|
|
|
|
MIT License - see LICENSE file for details
|
|
|
|
## Support
|
|
|
|
For issues and questions:
|
|
- Open an issue on GitHub
|
|
- Check existing documentation
|
|
- Review logs: `docker-compose logs -f`
|
|
|
|
## Credits
|
|
|
|
Built for Attack/Defense CTF competitions. Integrates with:
|
|
- [ForcAD](https://github.com/pomo-mondreganto/ForcAD) - CTF platform
|
|
- [Packmate](https://gitlab.com/packmate/Packmate) - Traffic analysis
|
|
- [moded_distructive_farm](https://github.com/ilyastar9999/moded_distructive_farm) - Attack farm
|
|
- [Firegex](https://github.com/Pwnzer0tt1/firegex) - Flag checker
|