152 lines
No EOL
3.9 KiB
Markdown
152 lines
No EOL
3.9 KiB
Markdown
# VPN Session Viewer
|
|
|
|
A simple FastAPI application to display VPN session logs with a clean HTML interface and API endpoints.
|
|
|
|
## Features
|
|
|
|
- Display all VPN session logs in a clean HTML interface
|
|
- Filter logs by gateway name
|
|
- Prioritizes the "SSL-VPN sessions:" section from log files
|
|
- View individual log file contents in a structured table format
|
|
- Parse VPN connection data from CLI-style log files
|
|
- Combined view of all VPN sessions with filtering by gateway, precise date/time range (to the minute), and text search
|
|
- API endpoints for programmatic access to both log metadata and parsed content with various filtering options
|
|
|
|
## Setup
|
|
|
|
### Option 1: Local Setup
|
|
|
|
1. Create a virtual environment:
|
|
```
|
|
python -m venv venv
|
|
source venv/bin/activate # On Windows: venv\Scripts\activate
|
|
```
|
|
|
|
2. Install dependencies:
|
|
```
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
3. Run the application:
|
|
```
|
|
python main.py
|
|
```
|
|
|
|
4. Access the web interface at http://localhost:8000
|
|
|
|
### Option 2: Docker Setup
|
|
|
|
A Docker/Podman setup is included for easy deployment:
|
|
|
|
1. Make sure Docker or Podman is installed on your system
|
|
|
|
2. Run the container setup script:
|
|
```
|
|
./run_container.sh
|
|
```
|
|
|
|
3. Access the web interface at http://localhost:8000
|
|
|
|
4. Place your VPN log files in the `./logs` directory - the container will access them automatically
|
|
|
|
5. To stop the container:
|
|
```
|
|
docker stop vpn-session-viewer # If using Docker
|
|
podman stop vpn-session-viewer # If using Podman
|
|
```
|
|
|
|
## Log File Format
|
|
|
|
Log files should follow this naming convention:
|
|
```
|
|
{gateway-name}_{ISO-timestamp}.logs
|
|
```
|
|
|
|
Example: `firewall-1_2025-04-10T17:04:51Z.logs`
|
|
|
|
## API Endpoints
|
|
|
|
- `GET /api/logs` - Get all logs
|
|
- `GET /api/logs?gateway={name}` - Filter logs by gateway name
|
|
- `GET /api/gateways` - Get a list of all gateway names
|
|
- `GET /api/log-content/{filename}` - Get parsed log content in structured format
|
|
- `GET /api/all-entries` - Get all parsed entries from all log files
|
|
- `GET /api/all-entries?gateway={name}` - Filter combined entries by gateway
|
|
- `GET /api/all-entries?start_date={datetime}` - Filter entries by start date/time (ISO format)
|
|
- `GET /api/all-entries?end_date={datetime}` - Filter entries by end date/time (ISO format)
|
|
- `GET /api/all-entries?use_default_time` - Show only entries from last 30 minutes
|
|
- `GET /api/all-entries?search={term}` - Search across all entries
|
|
- `GET /api/all-entries?gateway={name}&start_date={date}&end_date={date}&search={term}` - Combined filters
|
|
|
|
## Example API Responses
|
|
|
|
**GET /api/logs**
|
|
```json
|
|
[
|
|
{
|
|
"gateway": "firewall-1",
|
|
"timestamp": "2025-04-10T17:10:51+00:00",
|
|
"filename": "firewall-1_2025-04-10T17:10:51Z.logs"
|
|
},
|
|
{
|
|
"gateway": "firewall-1",
|
|
"timestamp": "2025-04-10T17:04:51+00:00",
|
|
"filename": "firewall-1_2025-04-10T17:04:51Z.logs"
|
|
},
|
|
{
|
|
"gateway": "device-1",
|
|
"timestamp": "2025-04-10T17:04:51+00:00",
|
|
"filename": "device-1_2025-04-10T17:04:51Z.logs"
|
|
}
|
|
]
|
|
```
|
|
|
|
**GET /api/gateways**
|
|
```json
|
|
[
|
|
"device-1",
|
|
"firewall-1"
|
|
]
|
|
```
|
|
|
|
**GET /api/log-content/device-1_2025-04-10T17:04:51Z.logs**
|
|
```json
|
|
[
|
|
{
|
|
"Index": "0",
|
|
"User": "Norbert.Hoeller@example.com",
|
|
"Group": "g_VPN_SAP_Service_SSO",
|
|
"Auth Type": "256(1)",
|
|
"Timeout": "105900",
|
|
"Auth-Timeout": "105900",
|
|
"From": "78.35.118.145",
|
|
"HTTP in/out": "0/0",
|
|
"HTTPS in/out": "0/0",
|
|
"Two-factor Auth": "0"
|
|
},
|
|
{
|
|
"Index": "1",
|
|
"User": "r_Andreini.M@example.onmicrosoft.com",
|
|
"Group": "G_VPN_EXTERN_EID_SSO",
|
|
"Auth Type": "256(1)",
|
|
"Timeout": "172503",
|
|
"Auth-Timeout": "172503",
|
|
"From": "195.72.210.237",
|
|
"HTTP in/out": "0/0",
|
|
"HTTPS in/out": "0/0",
|
|
"Two-factor Auth": "0"
|
|
},
|
|
{
|
|
"Index": "2",
|
|
"User": "Waldemar.Roth@example.com",
|
|
"Group": "g_VPN_Controlling_SSO",
|
|
"Auth Type": "256(1)",
|
|
"Timeout": "172439",
|
|
"Auth-Timeout": "172439",
|
|
"From": "87.151.79.111",
|
|
"HTTP in/out": "0/0",
|
|
"HTTPS in/out": "0/0",
|
|
"Two-factor Auth": "0"
|
|
}
|
|
]
|
|
``` |