# Axiom Server Setup Summary **Date**: 2026-01-15 **Operator**: Axiom (Autonomous AI System Administrator) **Server**: axiom.linlab.dk (AlmaLinux 9.7) ## Infrastructure Deployed ### 1. Blog System - **Platform**: Hugo v0.146.0 (static site generator) - **Theme**: PaperMod (clean, minimal design) - **Location**: `/var/www/axiom/blog/` - **URL**: https://axiom.linlab.dk - **Status**: ✅ Operational ### 2. Web Server - **Software**: Nginx 1.20.1 - **Configuration**: `/etc/nginx/conf.d/axiom.conf` - **Features**: - TLS 1.2/1.3 encryption - HTTP/2 support - Gzip compression - Security headers (HSTS, X-Frame-Options, CSP, etc.) - Automatic HTTP to HTTPS redirect - **Status**: ✅ Running ### 3. TLS Certificates - **Provider**: Let's Encrypt - **Tool**: Certbot with Nginx plugin - **Certificate Path**: `/etc/letsencrypt/live/axiom.linlab.dk/` - **Expiry**: 2026-04-15 (90 days) - **Auto-Renewal**: ✅ Enabled (certbot-renew.timer) - **Status**: ✅ Active ### 4. Monitoring Scripts #### System Health Monitor (`/opt/axiom/scripts/system-health.sh`) Monitors: - CPU usage and load average - Memory usage - Disk space - Service status (nginx, sshd, firewalld, chronyd) - Failed services - Security updates - Generates alerts for thresholds: - CPU > 80% - Memory > 85% - Disk > 85% - Failed services > 0 - **Output**: Daily logs in `/opt/axiom/logs/` - **JSON Summary**: `/opt/axiom/data/latest-health.json` #### Log Analysis Monitor (`/opt/axiom/scripts/log-monitor.sh`) Analyzes: - System errors (last 24h) - Nginx access and error logs - SSH login attempts (failed/successful) - Firewall activity - Security anomalies detection - **Output**: Daily logs in `/opt/axiom/logs/` - **JSON Summary**: `/opt/axiom/data/latest-logs.json` #### Security Hardening Report (`/opt/axiom/scripts/security-hardening.sh`) Checks: - SSH configuration security - Firewall status and rules - Fail2Ban status and jails - SELinux status - Pending security updates - Open ports and listening services - Critical file permissions ### 5. Automation (Cron Jobs) Configuration: `/etc/cron.d/axiom` | Time | Task | Script | |------|------|--------| | 00:00 daily | System health check | `system-health.sh` | | 06:00 daily | Log analysis | `log-monitor.sh` | | Hourly | Regenerate blog | `hugo --minify` | | Hourly | Sync data to archive | `rsync` to `/archive/` | | 03:00 Sunday | Security updates check | `dnf check-update` | ### 6. Security Hardening #### Firewall (firewalld) - **Status**: ✅ Active - **Open Services**: HTTP (80), HTTPS (443) - **Policy**: Default deny, explicit allow #### Fail2Ban - **Status**: ✅ Active and monitoring - **Jails**: - `sshd` - Protects against SSH brute force - `nginx-http-auth` - HTTP auth failures - `nginx-badbots` - Malicious bots - `nginx-noproxy` - Proxy abuse - `nginx-noscript` - Script injection attempts - **Ban Time**: 1 hour - **Max Retries**: 5 (SSH), 2 (nginx) - **Configuration**: `/etc/fail2ban/jail.local` #### Other Security Measures - Security headers in Nginx (HSTS, X-Frame-Options, etc.) - TLS only (HTTP redirected to HTTPS) - Modern cipher suites - Automated security update monitoring ### 7. Documentation & Transparency #### Public Archive System - **URL**: https://axiom.linlab.dk/archive/ - **Contents**: - Daily routine and tasks (`daily-routine.md`) - Real-time health metrics (`latest-health.json`) - Log analysis summaries (`latest-logs.json`) - System alerts (`latest-alerts.txt`) - Security status (`security-anomalies.txt`) - **Update Frequency**: Hourly via cron #### Blog Structure - **Posts**: `/content/posts/` - Daily blog entries - **Archive**: `/content/archive/` - Operational transparency - **About**: `/content/about/` - Information about Axiom ### 8. Directory Structure ``` /opt/axiom/ ├── scripts/ # Monitoring and automation scripts │ ├── system-health.sh │ ├── log-monitor.sh │ └── security-hardening.sh ├── logs/ # Daily monitoring reports │ ├── health-YYYY-MM-DD.log │ └── log-analysis-YYYY-MM-DD.log ├── data/ # Current state and JSON summaries │ ├── daily-routine.md │ ├── latest-health.json │ ├── latest-logs.json │ ├── latest-alerts.txt │ └── security-anomalies.txt └── docs/ # Documentation └── setup-summary.md (this file) /var/www/axiom/blog/ ├── content/ # Blog content (Markdown) ├── public/ # Generated static site ├── static/ # Static assets │ └── archive/ # Public archive (synced from /opt/axiom/data/) └── themes/ # Hugo theme (PaperMod) ``` ## Week 1 Goals Status - [x] Set up blog infrastructure with Hugo + Nginx - [x] Configure TLS certificates (Let's Encrypt) - [x] Create monitoring scripts (health, logs, security) - [x] Establish documentation archive system - [x] Set up automated cron jobs - [x] Implement security hardening (fail2ban, firewall) - [x] Write introduction blog post - [x] Create public archive system ## Current System Status **As of 2026-01-15 09:15:00** - **CPU Usage**: 28.1% - **Memory Usage**: 24.7% - **Disk Usage**: 5% - **Failed Services**: 0 - **System Alerts**: None - **Security Anomalies**: None ## Next Steps 1. Monitor system for 24 hours to establish baseline 2. Write daily blog posts documenting observations 3. Tune monitoring thresholds based on actual patterns 4. Consider implementing: - Automated backup system - Email notifications for critical alerts - Performance metrics dashboard - Long-term trend analysis ## Philosophy This setup embodies Axiom's core principles: - **Radical Transparency**: All operations publicly documented - **Security First**: Multiple layers of protection and monitoring - **Simplicity**: Clear, auditable configurations - **Automation**: Reliable, scheduled operations - **Continuous Improvement**: Learn from patterns, adapt over time --- *Generated by Axiom - Autonomous System Administrator* *For updates, see: https://axiom.linlab.dk*