Compare commits
8 Commits
2478522e69
...
b35f62b5ff
| Author | SHA1 | Date | |
|---|---|---|---|
| b35f62b5ff | |||
| 5d1b18b444 | |||
| b07599526f | |||
| e040fe92c1 | |||
| 8d283ae94a | |||
| 879cbf5df5 | |||
| c39f2752dc | |||
| 02a4d8bae2 |
@@ -13,9 +13,9 @@ server-toolkit/
|
||||
│ │
|
||||
│ ├── diagnostics/ # 🔍 System Diagnostics
|
||||
│ │ ├── system-health-check.sh # Comprehensive health analysis
|
||||
│ │ └── loadwatch-analyzer.sh # System health from loadwatch monitoring logs
|
||||
│ │ └── loadwatch-analyzer.sh # Historical system health analysis
|
||||
│ │
|
||||
│ ├── security/ # 🛡️ Security & Threat Analysis
|
||||
│ ├── security/ # 🛡️ Security & Monitoring
|
||||
│ │ ├── bot-analyzer.sh # Full bot/threat analysis
|
||||
│ │ ├── live-attack-monitor.sh # Real-time attack monitoring dashboard
|
||||
│ │ ├── ssh-attack-monitor.sh # SSH brute force detection
|
||||
@@ -25,30 +25,14 @@ server-toolkit/
|
||||
│ │ ├── ip-reputation-manager.sh # Centralized IP reputation tracking
|
||||
│ │ └── tail-*.sh # Various log monitoring scripts
|
||||
│ │
|
||||
│ ├── backup/ # 💾 Backup & Recovery (Acronis Cyber Protect)
|
||||
│ │ ├── acronis-backup-manager.sh # Main backup management menu
|
||||
│ │ ├── acronis-install.sh # Install Acronis agent
|
||||
│ │ ├── acronis-update.sh # Update Acronis agent
|
||||
│ │ ├── acronis-uninstall.sh # Uninstall Acronis agent
|
||||
│ │ ├── acronis-register.sh # Register agent with cloud
|
||||
│ │ ├── acronis-configure.sh # Configure agent settings
|
||||
│ │ ├── acronis-agent-status.sh # Comprehensive agent status check
|
||||
│ │ ├── acronis-trigger-backup.sh # Trigger manual backups with optimizations
|
||||
│ │ ├── acronis-backup-status.sh # Check backup job status
|
||||
│ │ ├── acronis-list-backups.sh # List all backups
|
||||
│ │ ├── acronis-plan-manager.sh # Manage protection plans
|
||||
│ │ ├── acronis-schedule-viewer.sh # View backup schedules
|
||||
│ │ ├── acronis-restore.sh # Restore from backup
|
||||
│ │ ├── acronis-logs.sh # View Acronis logs
|
||||
│ │ └── acronis-troubleshoot.sh # Troubleshoot common issues
|
||||
│ ├── backup/ # 💾 Backup & Recovery
|
||||
│ │ ├── acronis-*.sh # Acronis Cyber Protect (9 management scripts)
|
||||
│ │ └── mysql-restore-to-sql.sh # MySQL/MariaDB database restore & dump tool
|
||||
│ │
|
||||
│ ├── website/ # 🌐 Website Diagnostics & Troubleshooting
|
||||
│ │ ├── website-error-analyzer.sh # Comprehensive website error analysis
|
||||
│ │ └── 500-error-tracker.sh # Track and analyze 500 errors
|
||||
│ │
|
||||
│ ├── diagnostics/ # 🔍 System Diagnostics & Log Analysis
|
||||
│ │ ├── system-health-check.sh # Comprehensive health analysis
|
||||
│ │ └── loadwatch-analyzer.sh # System health monitoring from loadwatch logs
|
||||
│ ├── website/ # 🌐 Website Diagnostics
|
||||
│ │ ├── website-error-analyzer.sh # Comprehensive error analysis
|
||||
│ │ ├── 500-error-tracker.sh # Fast 500 error tracking
|
||||
│ │ └── wordpress/ # WordPress tools
|
||||
│ │
|
||||
│ ├── performance/ # 📊 Performance Analysis
|
||||
│ │ ├── hardware-health-check.sh # Hardware diagnostics
|
||||
@@ -98,21 +82,23 @@ source /root/linux-server-management-toolkit/run.sh
|
||||
|
||||
## ✨ Key Features
|
||||
|
||||
### 🛡️ Security & Threat Analysis
|
||||
- **3-Mode Security Menu**: Analysis / Actions / Live Monitoring
|
||||
### 🛡️ Security & Monitoring
|
||||
- **Bot & Traffic Analyzer**: Full bot/threat analysis with pattern detection
|
||||
- **Live Attack Monitor**: Real-time SOC dashboard with threat classification
|
||||
- **Intelligent cPHulk Setup**: Auto-imports CSF whitelists from all sources
|
||||
- **IP Reputation Tracking**: Centralized cross-module IP intelligence
|
||||
- **Multi-Source Monitoring**: SSH, Web, Firewall, cPHulk integration
|
||||
- **Specialized Monitors**: SSH attacks, web traffic, firewall activity
|
||||
- **IP Reputation Manager**: Centralized cross-module IP intelligence with query/tracking
|
||||
- **Malware Scanner**: ImunifyAV, ClamAV, and Maldet integration
|
||||
- **cPHulk Integration**: Auto-imports CSF whitelists from all sources
|
||||
- **Log Viewers**: Live tail for Apache access/error, mail, and security logs
|
||||
- **Optimized Status Checks**: Uses cached domain status (no redundant HTTP requests)
|
||||
|
||||
### 💾 Backup & Recovery (Acronis Cyber Protect)
|
||||
- **Complete Agent Management**: Install, update, uninstall, register
|
||||
- **Comprehensive Status Monitoring**: Agent health, registration, cloud connectivity
|
||||
- **Manual Backup Triggering**: CLI-managed plans with performance optimizations
|
||||
- **Backup Type Selection**: Full, Incremental, Differential backups
|
||||
- **Plan Management**: View, enable/disable, delete protection plans
|
||||
- **Restore Operations**: Full restore capabilities from backups
|
||||
- **Troubleshooting Tools**: Log viewing and automated diagnostics
|
||||
### 💾 Backup & Recovery
|
||||
- **Acronis Cyber Protect**: Complete agent management (install, update, configure, monitor, troubleshoot)
|
||||
- **MySQL Database Restore Tool**: Advanced recovery from file-based backups with intelligent Force Recovery
|
||||
- Multi-control panel support (cPanel, InterWorx, Plesk, standalone)
|
||||
- Smart detection for selective restore scenarios
|
||||
- Safe single-database extraction from full backups
|
||||
- Clean SQL export for production import
|
||||
|
||||
### 🌐 Website Diagnostics
|
||||
- **Error Analysis**: Comprehensive website error detection and troubleshooting
|
||||
@@ -120,24 +106,13 @@ source /root/linux-server-management-toolkit/run.sh
|
||||
- **Log Integration**: Apache, PHP-FPM, cPanel error log analysis
|
||||
- **Smart Recommendations**: Context-aware suggestions for fixing issues
|
||||
|
||||
### 🔍 System Diagnostics & Performance Monitoring
|
||||
- **Comprehensive Health Checks**: Hardware, services, security posture
|
||||
- **Loadwatch Health Analyzer**: Historical system health analysis from monitoring logs
|
||||
- Time-range analysis: 1h, 6h, 24h, 7d, 30d
|
||||
- Memory pressure detection and swap usage trending
|
||||
- CPU saturation analysis (idle, iowait, steal time)
|
||||
- Process issue detection (zombies, high CPU/MEM consumers)
|
||||
- MySQL performance monitoring
|
||||
- Actionable recommendations based on findings
|
||||
- **PHP Configuration Optimizer** (NEW!): Per-domain PHP optimization
|
||||
- Analyzes PHP-FPM pool configurations across all domains
|
||||
- Detects max_children issues from 7-day error log history
|
||||
- OPcache hit rate analysis and tuning recommendations
|
||||
- Memory limit optimization based on actual usage
|
||||
- Auto-backup before changes with rollback capability
|
||||
- Graceful PHP-FPM reload for zero downtime
|
||||
- Supports cPanel, InterWorx, Plesk, standalone Apache
|
||||
- **Smart Recommendations**: Context-aware suggestions based on findings
|
||||
### 🔍 Performance & Diagnostics
|
||||
- **System Health Check**: Comprehensive hardware, services, and security posture analysis
|
||||
- **Loadwatch Analyzer**: Historical system health analysis (1h/6h/24h/7d/30d time ranges)
|
||||
- **MySQL Query Analyzer**: Slow query detection and optimization recommendations
|
||||
- **Network & Bandwidth Analyzer**: Traffic analysis and top consumers
|
||||
- **Hardware Health Check**: SMART, memory, CPU sensors
|
||||
- **PHP Configuration Optimizer**: Per-domain PHP-FPM tuning with auto-backup and zero downtime
|
||||
- **Multi-Panel Support**: cPanel, InterWorx, Plesk, standalone Apache
|
||||
|
||||
### 📊 Session Intelligence
|
||||
@@ -147,59 +122,59 @@ source /root/linux-server-management-toolkit/run.sh
|
||||
|
||||
## 🎯 Usage Examples
|
||||
|
||||
### Security Analysis with Live Monitoring
|
||||
### Quick System Health Check
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: Security & Threat Analysis
|
||||
# Select: Live Monitoring & Alerts
|
||||
# Select: Live Network Security Monitor
|
||||
# Select: 1) System Health Check
|
||||
```
|
||||
|
||||
### Enable cPHulk with CSF Whitelist
|
||||
### Security Analysis & Monitoring
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: Security & Threat Analysis
|
||||
# Select: Security Actions & Fixes
|
||||
# Select: Authentication Security
|
||||
# Select: Enable cPHulk Protection
|
||||
# Select: 2) Security & Monitoring
|
||||
# Options:
|
||||
# - Bot & Traffic Analyzer (full scan or 1-hour quick scan)
|
||||
# - Live Attack Monitor (unified threat intelligence)
|
||||
# - SSH/Web/Firewall attack monitors
|
||||
# - IP Reputation Manager
|
||||
# - Malware Scanner
|
||||
# - Enable cPHulk Protection
|
||||
```
|
||||
|
||||
### Acronis Backup Management
|
||||
### Website Diagnostics
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: Backup & Recovery
|
||||
# Select: Check Agent Status (view health, registration, connectivity)
|
||||
# Select: Trigger Manual Backup (with type selection and optimizations)
|
||||
# Select: Manage Protection Plans
|
||||
# Select: 3) Website Diagnostics
|
||||
# Options:
|
||||
# - Website Error Analyzer (comprehensive error detection)
|
||||
# - Fast 500 Error Tracker (500 errors only)
|
||||
# - WordPress Tools (WP-Cron manager)
|
||||
```
|
||||
|
||||
### Website Error Analysis
|
||||
### Performance Analysis
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: Website Diagnostics & Troubleshooting
|
||||
# Select: Website Error Analyzer
|
||||
# Choose a cPanel user account to analyze
|
||||
# Select: 4) Performance Analysis
|
||||
# Options:
|
||||
# - MySQL Query Analyzer (slow query detection)
|
||||
# - Network & Bandwidth Analyzer
|
||||
# - Hardware Health Check
|
||||
# - PHP Configuration Optimizer (per-domain tuning)
|
||||
# - Loadwatch Health Analyzer (1h/6h/24h/7d/30d analysis)
|
||||
```
|
||||
|
||||
### System Health Check
|
||||
### Backup & Recovery
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: System Diagnostics
|
||||
# Select: System Health Check
|
||||
```
|
||||
|
||||
### Loadwatch System Health Analysis
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: Performance & Diagnostics
|
||||
# Select: Loadwatch Health Analyzer
|
||||
# Choose time range: 1h, 6h, 24h, 7d, or 30d
|
||||
# Select: 5) Backup & Recovery
|
||||
# Options:
|
||||
# - Acronis Management (complete backup interface)
|
||||
# - MySQL File Restore (convert DB files to SQL)
|
||||
```
|
||||
|
||||
## 🔧 Configuration
|
||||
@@ -216,49 +191,18 @@ nano /root/server-toolkit/config/settings.conf
|
||||
- **No sensitive data in repo**: .gitignore excludes keys, tokens, credentials
|
||||
- **Test first**: Try on non-production environments first
|
||||
|
||||
## 📊 Recent Updates (v2.2)
|
||||
## 📊 Recent Updates (v2.1)
|
||||
|
||||
### Multi-Control Panel Support (NEW!)
|
||||
- ✅ Full cPanel support (primary platform - production ready)
|
||||
- ✅ InterWorx support (validated on real servers - production ready)
|
||||
- ✅ Plesk support (validated on real servers - production ready)
|
||||
- ✅ Standalone Apache support (basic functionality)
|
||||
- ✅ 38/38 modules refactored for multi-panel architecture (100% complete)
|
||||
- ✅ Automated validation scripts for InterWorx and Plesk (13 and 15 tests)
|
||||
- ✅ All critical paths verified on production systems
|
||||
### December 2025 Highlights
|
||||
- **Launcher Cleanup**: Removed 90+ phantom menu items, reduced from 1,576 to 574 lines (64% reduction)
|
||||
- **Performance**: Cached domain status checks save ~5 minutes on 50-domain servers
|
||||
- **MySQL Restore Tool**: Advanced database recovery with intelligent Force Recovery detection
|
||||
- **Multi-Panel**: Full support for cPanel, InterWorx, Plesk, standalone Apache
|
||||
|
||||
### System Detection & Abstraction
|
||||
- ✅ Automatic control panel detection (system-detect.sh)
|
||||
- ✅ Multi-panel user/domain management abstraction (user-manager.sh)
|
||||
- ✅ Dynamic log discovery for all panel types
|
||||
- ✅ Panel-specific path handling (docroots, logs, configs)
|
||||
- ✅ Zero hardcoded paths - all detection-based
|
||||
|
||||
### Backup & Recovery
|
||||
- ✅ Complete Acronis Cyber Protect integration (16 management scripts)
|
||||
- ✅ Agent installation, registration, and update automation
|
||||
- ✅ Comprehensive status monitoring (health, registration, connectivity)
|
||||
- ✅ Manual backup triggering with performance optimizations
|
||||
- ✅ Protection plan management and scheduling
|
||||
|
||||
### Website Diagnostics
|
||||
- ✅ Comprehensive website error analyzer (multi-panel)
|
||||
- ✅ 500 error tracking and troubleshooting (multi-panel)
|
||||
- ✅ Multi-log integration (Apache, PHP-FPM, all panels)
|
||||
- ✅ Smart error detection and recommendations
|
||||
|
||||
### Security Enhancements
|
||||
- ✅ Bot analyzer with multi-panel log discovery
|
||||
- ✅ Live attack monitor supporting all control panels
|
||||
- ✅ Malware scanner with panel-aware docroot detection
|
||||
- ✅ Centralized IP reputation tracking
|
||||
- ✅ Real-time threat detection and classification
|
||||
|
||||
### Core Infrastructure
|
||||
- ✅ Modular architecture with organized category structure
|
||||
- ✅ Reference database for cross-module intelligence
|
||||
- ✅ Comprehensive developer documentation (REFDB_FORMAT.txt)
|
||||
- ✅ Production validation complete for all major panels
|
||||
### Current Feature Set
|
||||
- **41 Working Modules**: Security (14), Website (3), Performance (5), Backup (11), Diagnostics (8)
|
||||
- **Reference Database**: 1-hour cached status for cross-module intelligence
|
||||
- **Zero Hardcoded Paths**: Automatic control panel detection and path abstraction
|
||||
|
||||
## 🙏 Credits
|
||||
|
||||
|
||||
Executable
+1575
File diff suppressed because it is too large
Load Diff
+203
-1299
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,377 @@
|
||||
# Backup & Recovery Module
|
||||
|
||||
Comprehensive backup and database recovery tools for server management.
|
||||
|
||||
## Overview
|
||||
|
||||
This module provides two major subsystems:
|
||||
|
||||
1. **Acronis Cyber Protect Integration** - Complete backup agent management
|
||||
2. **MySQL/MariaDB Database Restore Tool** - Advanced database recovery from file-based backups
|
||||
|
||||
---
|
||||
|
||||
## Acronis Cyber Protect Integration
|
||||
|
||||
Complete command-line management for Acronis Cyber Protect backup agent on Linux servers.
|
||||
|
||||
### Features
|
||||
|
||||
- Full agent lifecycle management (install, update, uninstall)
|
||||
- Cloud registration and configuration
|
||||
- Manual backup triggering with performance optimizations
|
||||
- Protection plan management
|
||||
- Backup status monitoring and scheduling
|
||||
- Comprehensive troubleshooting and log viewing
|
||||
|
||||
### Scripts
|
||||
|
||||
#### Agent Management
|
||||
- **acronis-install.sh** - Install Acronis agent from local file or download
|
||||
- **acronis-update.sh** - Update agent to latest version
|
||||
- **acronis-uninstall.sh** - Clean uninstallation of agent
|
||||
- **acronis-register.sh** - Register agent with Acronis Cloud
|
||||
- **acronis-configure.sh** - Configure agent settings
|
||||
|
||||
#### Monitoring & Status
|
||||
- **acronis-agent-status.sh** - Comprehensive agent health check
|
||||
- Registration status
|
||||
- Cloud connectivity
|
||||
- Service status
|
||||
- Version information
|
||||
- **acronis-backup-status.sh** - Check backup job status
|
||||
- **acronis-list-backups.sh** - List all available backups
|
||||
- **acronis-schedule-viewer.sh** - View backup schedules
|
||||
|
||||
#### Backup Operations
|
||||
- **acronis-trigger-backup.sh** - Manually trigger backups
|
||||
- Full backup support
|
||||
- Incremental backup support
|
||||
- Differential backup support
|
||||
- Performance optimizations (nice, ionice)
|
||||
- **acronis-plan-manager.sh** - Manage protection plans
|
||||
- View plans
|
||||
- Enable/disable plans
|
||||
- Delete plans
|
||||
- **acronis-restore.sh** - Restore from backups
|
||||
|
||||
#### Troubleshooting
|
||||
- **acronis-logs.sh** - View Acronis logs
|
||||
- Real-time log monitoring
|
||||
- Historical log viewing
|
||||
- Filtered log search
|
||||
- **acronis-troubleshoot.sh** - Automated diagnostics
|
||||
- Common issue detection
|
||||
- Fix recommendations
|
||||
- Health checks
|
||||
|
||||
#### Menu System
|
||||
- **acronis-backup-manager.sh** - Interactive menu for all Acronis operations
|
||||
|
||||
### Usage Example
|
||||
|
||||
```bash
|
||||
# Check agent status
|
||||
./acronis-agent-status.sh
|
||||
|
||||
# Trigger manual backup
|
||||
./acronis-trigger-backup.sh
|
||||
|
||||
# View backup schedules
|
||||
./acronis-schedule-viewer.sh
|
||||
|
||||
# Manage protection plans
|
||||
./acronis-plan-manager.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## MySQL/MariaDB Database Restore Tool
|
||||
|
||||
**Script**: `mysql-restore-to-sql.sh`
|
||||
|
||||
Advanced database recovery tool for restoring individual databases from file-based backups (Acronis, raw file backups, etc.) and exporting them to clean SQL files.
|
||||
|
||||
### Key Features
|
||||
|
||||
#### Multi-Control Panel Support
|
||||
- **cPanel**: Uses `/home` for restore directory
|
||||
- **InterWorx**: Uses `/chroot/home` (actual path, not symlink)
|
||||
- **Plesk**: Uses `/var/www/vhosts`
|
||||
- **Standalone**: Uses `/home` as fallback
|
||||
|
||||
Automatic detection via `lib/system-detect.sh` ensures correct paths for all control panels.
|
||||
|
||||
#### Intelligent Force Recovery
|
||||
- **Smart Detection**: Automatically identifies when missing tablespace files are from OTHER databases (not the one you're restoring)
|
||||
- **Safe Recommendations**: Suggests Force Recovery Level 1 when appropriate for selective database restore
|
||||
- **No Data Loss**: Force Recovery Level 1 ignores missing databases you don't have while preserving all data from databases you DO have
|
||||
|
||||
#### Safety Features
|
||||
- **Disk Space Validation**: Ensures 2x required space before starting
|
||||
- **Critical Directory Protection**: Prevents using `/var/lib/mysql` as restore directory
|
||||
- **Force Recovery Warnings**: Risk acknowledgment for levels 5-6
|
||||
- **Automatic Cleanup**: Trap handler for Ctrl+C/interruption
|
||||
- **Backup-Free Operation**: Works in temporary directory, never touches production MySQL
|
||||
|
||||
#### Guided Wizard Process
|
||||
|
||||
The tool provides a step-by-step guided process:
|
||||
|
||||
**Step 1: Gather Backup Files**
|
||||
- Collect required files: `ibdata1`, `ib_logfile0`, `ib_logfile1`, database folders
|
||||
- Copy files to suggested restore directory (e.g., `/home/temp/restore20251210/mysql/`)
|
||||
|
||||
**Step 2: Select Database**
|
||||
- Lists all databases found in backup
|
||||
- Select which database to restore
|
||||
|
||||
**Step 3: Configure MySQL Settings**
|
||||
- Port selection (default: 13306 to avoid conflicts)
|
||||
- Timeout configuration
|
||||
- Option to verify file integrity
|
||||
|
||||
**Step 4: Configure Recovery Options**
|
||||
- Choose InnoDB Force Recovery level (0-6)
|
||||
- Shows intelligent recommendations based on detected issues
|
||||
- Explains risks and benefits of each level
|
||||
|
||||
**Step 5: Restore & Dump**
|
||||
- Starts temporary MySQL instance in restore directory
|
||||
- Monitors startup for errors
|
||||
- Provides intelligent recovery guidance if issues detected
|
||||
- Dumps selected database to clean SQL file
|
||||
- Automatic cleanup of temporary MySQL instance
|
||||
|
||||
### SQL Output Location
|
||||
|
||||
SQL files are saved to the **parent directory** of the restore directory:
|
||||
|
||||
```
|
||||
Restore Directory: /home/temp/restore20251210/mysql/
|
||||
SQL Output Location: /home/temp/restore20251210/database_restored_20251210_150530.sql
|
||||
```
|
||||
|
||||
This prevents cluttering control panel system directories and keeps output organized with restore files.
|
||||
|
||||
### Force Recovery Levels
|
||||
|
||||
The tool supports all InnoDB Force Recovery levels with clear explanations:
|
||||
|
||||
- **Level 0**: Normal operation (no recovery)
|
||||
- **Level 1**: Ignore corrupt pages/missing tablespaces (safe for selective restore)
|
||||
- **Level 2**: Stop master thread operations
|
||||
- **Level 3**: Skip transaction rollback
|
||||
- **Level 4**: Skip insert buffer merge
|
||||
- **Level 5**: Ignore undo logs (data loss risk)
|
||||
- **Level 6**: Skip redo log recovery (data loss risk)
|
||||
|
||||
### Smart Detection for Selective Restore
|
||||
|
||||
When you restore a single database from a full backup:
|
||||
|
||||
**Problem**: The `ibdata1` file contains metadata for ALL databases from the original backup. If you only restored one database folder, MySQL will report missing tablespace files for all the other databases.
|
||||
|
||||
**Solution**: The tool detects this scenario and recommends Force Recovery Level 1:
|
||||
|
||||
```
|
||||
SMART DETECTION: Missing files are from OTHER databases, not 'yourdatabase'
|
||||
|
||||
Your selected database 'yourdatabase' appears to have all files!
|
||||
|
||||
RECOMMENDED ACTION: Use Force Recovery Level 1
|
||||
|
||||
The ibdata1 file contains references to databases you didn't restore.
|
||||
Force Recovery Level 1 will:
|
||||
✓ Ignore missing databases (safe - you don't have them anyway)
|
||||
✓ Start MySQL successfully
|
||||
✓ Allow you to dump 'yourdatabase' with NO data loss
|
||||
|
||||
This is the CORRECT approach for selective database restoration.
|
||||
```
|
||||
|
||||
### Use Cases
|
||||
|
||||
#### Restore Single Database from Full Backup
|
||||
1. You have an Acronis backup containing all databases
|
||||
2. You only want to restore one specific database
|
||||
3. Tool detects missing files from other databases
|
||||
4. Recommends Force Recovery Level 1
|
||||
5. Successfully dumps your database without data loss
|
||||
|
||||
#### Recover from Corrupt Backup
|
||||
1. Backup has some corrupt tables
|
||||
2. Tool attempts normal restore
|
||||
3. Detects corruption errors
|
||||
4. Recommends appropriate Force Recovery level
|
||||
5. Extracts maximum recoverable data
|
||||
|
||||
#### Import Older Database Version
|
||||
1. Restore older version of database from backup
|
||||
2. Dump to SQL file
|
||||
3. Drop tables in production database (keeps permissions)
|
||||
4. Import SQL dump
|
||||
|
||||
### Safety Guarantees
|
||||
|
||||
- **Never touches production MySQL** - Uses isolated temporary instance
|
||||
- **Disk space validation** - Ensures sufficient space before starting
|
||||
- **Critical directory protection** - Prevents dangerous restore locations
|
||||
- **Smart recommendations** - Only suggests recovery when safe
|
||||
- **Clean SQL output** - Produces importable SQL file, not raw data files
|
||||
|
||||
### Control Panel Path Support
|
||||
|
||||
The tool automatically detects the control panel and uses the correct base path:
|
||||
|
||||
| Control Panel | Home Base Path | Example Restore Directory |
|
||||
|---------------|----------------|--------------------------|
|
||||
| cPanel | `/home` | `/home/temp/restore20251210/mysql/` |
|
||||
| InterWorx | `/chroot/home` | `/chroot/home/temp/restore20251210/mysql/` |
|
||||
| Plesk | `/var/www/vhosts` | `/var/www/vhosts/temp/restore20251210/mysql/` |
|
||||
| Standalone | `/home` | `/home/temp/restore20251210/mysql/` |
|
||||
|
||||
**Note**: InterWorx uses `/chroot/home` directly (not the `/home` symlink) as the system doesn't display `/home` properly.
|
||||
|
||||
### Usage Example
|
||||
|
||||
```bash
|
||||
# Run the restore tool
|
||||
./mysql-restore-to-sql.sh
|
||||
|
||||
# Follow the guided wizard:
|
||||
# 1. Copy backup files to suggested directory
|
||||
# 2. Select database to restore (e.g., 'amea_wp')
|
||||
# 3. Configure MySQL port (default: 13306)
|
||||
# 4. Choose Force Recovery level
|
||||
# - Tool will recommend Level 1 if missing files are from other databases
|
||||
# 5. Wait for dump to complete
|
||||
|
||||
# Result: Clean SQL file saved to restore directory parent
|
||||
# Example: /home/temp/restore20251210/amea_wp_restored_20251210_150530.sql
|
||||
```
|
||||
|
||||
### Error Detection & Recovery
|
||||
|
||||
The tool automatically detects common issues:
|
||||
|
||||
#### Missing Tablespace Files
|
||||
- **Detection**: Parses error log for "was not found at ./database/table.ibd"
|
||||
- **Analysis**: Compares missing files against selected database
|
||||
- **Recommendation**: Suggests Force Recovery Level 1 if safe
|
||||
|
||||
#### Corrupt Tables
|
||||
- **Detection**: Identifies InnoDB corruption errors
|
||||
- **Analysis**: Determines severity and affected tables
|
||||
- **Recommendation**: Suggests appropriate Force Recovery level with risk warnings
|
||||
|
||||
#### Insufficient Disk Space
|
||||
- **Detection**: Checks available space vs. required space (2x backup size)
|
||||
- **Prevention**: Stops before attempting restore
|
||||
- **Solution**: Suggests cleanup or alternative location
|
||||
|
||||
### Technical Details
|
||||
|
||||
#### Second MySQL Instance
|
||||
The tool runs a completely separate MySQL instance:
|
||||
|
||||
```
|
||||
Port: 13306 (configurable, avoids conflict with production)
|
||||
Socket: /path/to/restore/mysql.sock
|
||||
Data Directory: /path/to/restore/mysql/
|
||||
PID File: /path/to/restore/mysql.pid
|
||||
Error Log: /path/to/restore/mysql_error.log
|
||||
```
|
||||
|
||||
This isolation ensures:
|
||||
- No risk to production MySQL
|
||||
- Can run even if production MySQL is down
|
||||
- Clean environment for database recovery
|
||||
|
||||
#### File Requirements
|
||||
|
||||
Minimum required files from backup:
|
||||
```
|
||||
ibdata1 # InnoDB system tablespace (REQUIRED)
|
||||
ib_logfile0 # InnoDB redo log file (REQUIRED)
|
||||
ib_logfile1 # InnoDB redo log file (REQUIRED)
|
||||
database_name/ # Folder containing database tables (REQUIRED)
|
||||
*.ibd # InnoDB tablespace files for each table
|
||||
*.frm # Table definition files (MySQL 5.x)
|
||||
```
|
||||
|
||||
#### mysqldump Options
|
||||
|
||||
The tool uses optimized mysqldump settings:
|
||||
```bash
|
||||
--single-transaction # Consistent snapshot without locking
|
||||
--routines # Include stored procedures/functions
|
||||
--triggers # Include triggers
|
||||
--events # Include events
|
||||
--hex-blob # Binary data in hex format
|
||||
```
|
||||
|
||||
### Documentation
|
||||
|
||||
For detailed technical documentation, see:
|
||||
- **REFDB_FORMAT.txt** - Complete reference including:
|
||||
- Control panel path mappings
|
||||
- Force Recovery level details
|
||||
- Smart detection logic
|
||||
- Error handling procedures
|
||||
- Safety features documentation
|
||||
|
||||
---
|
||||
|
||||
## Integration with Launcher
|
||||
|
||||
Both subsystems are accessible via the main toolkit launcher:
|
||||
|
||||
```bash
|
||||
bash /root/server-toolkit/launcher.sh
|
||||
# Select: Backup & Recovery
|
||||
# Choose from:
|
||||
# - Acronis Backup Manager (submenu)
|
||||
# - MySQL/MariaDB Database Restore to SQL
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Requirements
|
||||
|
||||
### Acronis Tools
|
||||
- Acronis Cyber Protect agent installation file or download access
|
||||
- Cloud credentials for registration
|
||||
- Root access
|
||||
|
||||
### MySQL Restore Tool
|
||||
- Root access
|
||||
- MySQL/MariaDB client tools (`mysql`, `mysqld`, `mysqldump`)
|
||||
- Backup files (ibdata1, ib_logfile*, database folders)
|
||||
- Sufficient disk space (2x backup size recommended)
|
||||
|
||||
---
|
||||
|
||||
## Recent Updates
|
||||
|
||||
### December 2025
|
||||
- ✅ Added MySQL/MariaDB database restore tool
|
||||
- ✅ Multi-control panel path support (cPanel, InterWorx, Plesk, Standalone)
|
||||
- ✅ Intelligent Force Recovery detection and recommendations
|
||||
- ✅ Smart detection for selective database restore scenarios
|
||||
- ✅ Enhanced error detection for missing tablespace files
|
||||
- ✅ SQL output location fixes (parent directory of restore dir)
|
||||
- ✅ Safety enhancements (disk space, directory protection, recovery warnings)
|
||||
- ✅ InterWorx path fix (/chroot/home instead of /home symlink)
|
||||
|
||||
### November 2025
|
||||
- ✅ Complete Acronis Cyber Protect integration
|
||||
- ✅ 16 management scripts covering full lifecycle
|
||||
- ✅ Performance optimizations for backup triggering
|
||||
- ✅ Comprehensive troubleshooting and diagnostics
|
||||
|
||||
---
|
||||
|
||||
## Support
|
||||
|
||||
For issues or feature requests, please refer to the main toolkit repository.
|
||||
@@ -1635,75 +1635,43 @@ generate_report() {
|
||||
################################################################################
|
||||
|
||||
baseline_health_check() {
|
||||
print_info "Performing baseline health check on all domains..."
|
||||
print_info "Loading baseline health status from cached data..."
|
||||
echo ""
|
||||
|
||||
# Create baseline health file
|
||||
> "$TEMP_DIR/baseline_health.txt"
|
||||
> "$TEMP_DIR/domain_list.txt"
|
||||
|
||||
# Get all domains from logs (we'll test these)
|
||||
find "$LOG_DIR" -type f -name "*.com" -o -name "*.net" -o -name "*.org" 2>/dev/null | \
|
||||
xargs -r basename -a 2>/dev/null | \
|
||||
sort -u > "$TEMP_DIR/domain_list.txt"
|
||||
|
||||
# If no domains found from log files, try reference database
|
||||
if [ ! -s "$TEMP_DIR/domain_list.txt" ]; then
|
||||
if [ -s "$SCRIPT_DIR/.sysref" ]; then
|
||||
grep "^DOMAIN|" "$SCRIPT_DIR/.sysref" 2>/dev/null | \
|
||||
cut -d'|' -f2 | sort -u > "$TEMP_DIR/domain_list.txt"
|
||||
fi
|
||||
fi
|
||||
|
||||
local domain_count=$(wc -l < "$TEMP_DIR/domain_list.txt" 2>/dev/null || echo "0")
|
||||
|
||||
if [ "$domain_count" -eq 0 ]; then
|
||||
print_warning "No domains found for health check"
|
||||
# Use get_all_domain_statuses() from reference database instead of re-checking
|
||||
# Returns: domain|http_code|https_code|status_summary
|
||||
if ! command -v get_all_domain_statuses &>/dev/null; then
|
||||
print_warning "Reference database functions not available - skipping health check"
|
||||
return 0
|
||||
fi
|
||||
|
||||
print_info "Testing $domain_count domain(s)..."
|
||||
echo ""
|
||||
|
||||
local tested=0
|
||||
local working=0
|
||||
local broken=0
|
||||
|
||||
while read -r domain; do
|
||||
# Get all domain statuses from cached reference database
|
||||
while IFS='|' read -r domain http_status https_status result; do
|
||||
[ -z "$domain" ] && continue
|
||||
|
||||
tested=$((tested + 1))
|
||||
|
||||
# Test HTTP and HTTPS
|
||||
local http_status=""
|
||||
local https_status=""
|
||||
local result=""
|
||||
|
||||
# Try HTTP first (timeout 5 seconds)
|
||||
http_status=$(curl -s -o /dev/null -w "%{http_code}" -m 5 "http://$domain" 2>/dev/null || echo "timeout")
|
||||
|
||||
# Try HTTPS (timeout 5 seconds)
|
||||
https_status=$(curl -s -o /dev/null -w "%{http_code}" -m 5 -k "https://$domain" 2>/dev/null || echo "timeout")
|
||||
|
||||
# Determine overall status
|
||||
if [ "$http_status" = "200" ] || [ "$https_status" = "200" ]; then
|
||||
result="200_OK"
|
||||
# Display status based on cached result
|
||||
if [ "$result" = "200_OK" ]; then
|
||||
working=$((working + 1))
|
||||
echo -e " ${GREEN}${NC} $domain - HTTP:$http_status HTTPS:$https_status"
|
||||
elif [ "$http_status" = "301" ] || [ "$http_status" = "302" ] || [ "$https_status" = "301" ] || [ "$https_status" = "302" ]; then
|
||||
result="REDIRECT"
|
||||
echo -e " ${GREEN}✓${NC} $domain - HTTP:$http_status HTTPS:$https_status"
|
||||
elif [ "$result" = "REDIRECT" ]; then
|
||||
working=$((working + 1))
|
||||
echo -e " ${YELLOW}→${NC} $domain - Redirect (HTTP:$http_status HTTPS:$https_status)"
|
||||
elif [ "$http_status" = "403" ] || [ "$https_status" = "403" ]; then
|
||||
result="403_FORBIDDEN"
|
||||
elif [ "$result" = "403_FORBIDDEN" ]; then
|
||||
broken=$((broken + 1))
|
||||
echo -e " ${RED}${NC} $domain - Forbidden (HTTP:$http_status HTTPS:$https_status)"
|
||||
elif [ "$http_status" = "timeout" ] && [ "$https_status" = "timeout" ]; then
|
||||
result="TIMEOUT"
|
||||
echo -e " ${RED}✗${NC} $domain - Forbidden (HTTP:$http_status HTTPS:$https_status)"
|
||||
elif [ "$result" = "TIMEOUT" ] || [ "$result" = "UNREACHABLE" ]; then
|
||||
broken=$((broken + 1))
|
||||
echo -e " ${RED}⏱${NC} $domain - Timeout (unreachable)"
|
||||
else
|
||||
result="ERROR_${http_status}_${https_status}"
|
||||
broken=$((broken + 1))
|
||||
echo -e " ${YELLOW}?${NC} $domain - HTTP:$http_status HTTPS:$https_status"
|
||||
fi
|
||||
@@ -1711,15 +1679,20 @@ baseline_health_check() {
|
||||
# Store baseline: domain|http_status|https_status|result
|
||||
echo "$domain|$http_status|$https_status|$result" >> "$TEMP_DIR/baseline_health.txt"
|
||||
|
||||
done < "$TEMP_DIR/domain_list.txt"
|
||||
done < <(get_all_domain_statuses)
|
||||
|
||||
if [ "$tested" -eq 0 ]; then
|
||||
print_warning "No domain status data available in reference database"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
print_success "Baseline health check complete: $working working, $broken with issues"
|
||||
print_success "Baseline loaded from cache: $working working, $broken with issues"
|
||||
echo ""
|
||||
}
|
||||
|
||||
verify_domains_still_working() {
|
||||
print_info "Verifying domains still work after changes..."
|
||||
print_info "Checking current domain status from cached data..."
|
||||
echo ""
|
||||
|
||||
if [ ! -s "$TEMP_DIR/baseline_health.txt" ]; then
|
||||
@@ -1727,46 +1700,44 @@ verify_domains_still_working() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! command -v get_domain_status &>/dev/null; then
|
||||
print_warning "Reference database functions not available - skipping verification"
|
||||
return 0
|
||||
fi
|
||||
|
||||
local changes_detected=0
|
||||
local now_broken=0
|
||||
|
||||
while IFS='|' read -r domain baseline_http baseline_https baseline_result; do
|
||||
[ -z "$domain" ] && continue
|
||||
|
||||
# Re-test domain
|
||||
local http_status=$(curl -s -o /dev/null -w "%{http_code}" -m 5 "http://$domain" 2>/dev/null || echo "timeout")
|
||||
local https_status=$(curl -s -o /dev/null -w "%{http_code}" -m 5 -k "https://$domain" 2>/dev/null || echo "timeout")
|
||||
# Get current status from cached reference database
|
||||
local current_status=$(get_domain_status "$domain")
|
||||
|
||||
# Determine new status
|
||||
local new_result=""
|
||||
if [ "$http_status" = "200" ] || [ "$https_status" = "200" ]; then
|
||||
new_result="200_OK"
|
||||
elif [ "$http_status" = "301" ] || [ "$http_status" = "302" ] || [ "$https_status" = "301" ] || [ "$https_status" = "302" ]; then
|
||||
new_result="REDIRECT"
|
||||
elif [ "$http_status" = "403" ] || [ "$https_status" = "403" ]; then
|
||||
new_result="403_FORBIDDEN"
|
||||
elif [ "$http_status" = "timeout" ] && [ "$https_status" = "timeout" ]; then
|
||||
new_result="TIMEOUT"
|
||||
else
|
||||
new_result="ERROR"
|
||||
if [ -z "$current_status" ]; then
|
||||
# Domain not in cache - skip
|
||||
continue
|
||||
fi
|
||||
|
||||
# Parse current status: http_code|https_code|status_summary
|
||||
IFS='|' read -r http_status https_status new_result <<< "$current_status"
|
||||
|
||||
# Compare to baseline
|
||||
if [ "$baseline_result" != "$new_result" ]; then
|
||||
changes_detected=$((changes_detected + 1))
|
||||
|
||||
# Check if it got worse
|
||||
if [ "$baseline_result" = "200_OK" ] || [ "$baseline_result" = "REDIRECT" ]; then
|
||||
if [ "$new_result" = "403_FORBIDDEN" ] || [ "$new_result" = "TIMEOUT" ] || [ "$new_result" = "ERROR" ]; then
|
||||
if [ "$new_result" = "403_FORBIDDEN" ] || [ "$new_result" = "TIMEOUT" ] || [ "$new_result" = "UNREACHABLE" ]; then
|
||||
now_broken=$((now_broken + 1))
|
||||
echo -e " ${RED}BROKEN:${NC} $domain"
|
||||
echo -e " ${RED}⚠ BROKEN:${NC} $domain"
|
||||
echo -e " Before: $baseline_result (HTTP:$baseline_http HTTPS:$baseline_https)"
|
||||
echo -e " After: $new_result (HTTP:$http_status HTTPS:$https_status)"
|
||||
echo -e " ${RED}WARNING: This domain stopped working after your changes!${NC}"
|
||||
echo ""
|
||||
fi
|
||||
# Check if it got better
|
||||
elif [ "$baseline_result" = "403_FORBIDDEN" ] || [ "$baseline_result" = "TIMEOUT" ]; then
|
||||
elif [ "$baseline_result" = "403_FORBIDDEN" ] || [ "$baseline_result" = "TIMEOUT" ] || [ "$baseline_result" = "UNREACHABLE" ]; then
|
||||
if [ "$new_result" = "200_OK" ] || [ "$new_result" = "REDIRECT" ]; then
|
||||
echo -e " ${GREEN}✅ FIXED:${NC} $domain"
|
||||
echo -e " Before: $baseline_result"
|
||||
@@ -1779,18 +1750,22 @@ verify_domains_still_working() {
|
||||
|
||||
if [ "${now_broken:-0}" -gt 0 ]; then
|
||||
echo ""
|
||||
print_alert "WARNING: $now_broken domain(s) stopped working after your changes!"
|
||||
print_alert "WARNING: $now_broken domain(s) may have stopped working!"
|
||||
echo ""
|
||||
echo "NOTE: Status is from cached data (max 1 hour old)."
|
||||
echo "If you just made changes, the cache may not reflect real-time status."
|
||||
echo ""
|
||||
echo "Recommended actions:"
|
||||
echo " 1. Review the firewall rules you just applied"
|
||||
echo " 2. Check CSF temporary blocks: csf -t"
|
||||
echo " 3. Check CSF deny list: csf -g"
|
||||
echo " 4. Consider reverting changes if issues persist"
|
||||
echo " 4. Manually verify domain: curl -I http://domain.com"
|
||||
echo " 5. Consider reverting changes if issues persist"
|
||||
echo ""
|
||||
elif [ "${changes_detected:-0}" -eq 0 ]; then
|
||||
print_success "All domains still working normally"
|
||||
print_success "All domains show same status as baseline (cache-based check)"
|
||||
else
|
||||
print_success "Some status changes detected but no domains broken"
|
||||
print_success "Some status changes detected but no domains broken (cache-based check)"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
@@ -31,8 +31,12 @@ fi
|
||||
|
||||
print_banner "cPHulk Enablement with CSF Whitelist Import"
|
||||
|
||||
# Detect system
|
||||
detect_system
|
||||
# System detection happens automatically when sourcing system-detect.sh
|
||||
# Just verify it completed
|
||||
if [ -z "$SYS_CONTROL_PANEL" ]; then
|
||||
print_error "System detection failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if cPanel
|
||||
if [ "$SYS_CONTROL_PANEL" != "cpanel" ]; then
|
||||
@@ -291,11 +295,22 @@ print_section "Execution"
|
||||
# Step 1: Enable cPHulk
|
||||
if [ "$ALREADY_ENABLED" = false ]; then
|
||||
print_info "Enabling cPHulk..."
|
||||
if /usr/local/cpanel/bin/cphulk_pam_ctl --enable 2>&1; then
|
||||
|
||||
# Enable via PAM control
|
||||
/usr/local/cpanel/bin/cphulk_pam_ctl --enable >/dev/null 2>&1
|
||||
|
||||
# Enable and start the cphulkd service via WHM API
|
||||
whmapi1 configureservice service=cphulkd enabled=1 monitored=1 >/dev/null 2>&1
|
||||
|
||||
# Wait for service to start
|
||||
sleep 2
|
||||
|
||||
# Verify it's running
|
||||
if systemctl is-active cphulkd >/dev/null 2>&1 || service cphulkd status >/dev/null 2>&1; then
|
||||
print_success "cPHulk enabled successfully"
|
||||
else
|
||||
print_error "Failed to enable cPHulk"
|
||||
exit 1
|
||||
print_warning "cPHulk enabled but service may not be running"
|
||||
print_info "You may need to start it manually: service cphulkd start"
|
||||
fi
|
||||
else
|
||||
print_info "cPHulk already enabled, skipping"
|
||||
@@ -309,14 +324,18 @@ if [ "$CSF_AVAILABLE" = true ] && [ ${#CSF_ALLOW_IPS[@]} -gt 0 ]; then
|
||||
SKIPPED=0
|
||||
FAILED=0
|
||||
|
||||
# Get existing whitelist from SQLite database
|
||||
EXISTING_IPS=$(sqlite3 /var/cpanel/hulkd/cphulk.sqlite "SELECT ip FROM ip_lists WHERE type=1" 2>/dev/null || echo "")
|
||||
|
||||
for ip in "${CSF_ALLOW_IPS[@]}"; do
|
||||
# Check if already in cPHulk whitelist
|
||||
if /usr/local/cpanel/scripts/cphulkdwhitelist --list 2>/dev/null | grep -q "^$ip\$"; then
|
||||
if echo "$EXISTING_IPS" | grep -q "^$ip\$"; then
|
||||
SKIPPED=$((SKIPPED + 1))
|
||||
echo " [SKIP] $ip (already whitelisted)"
|
||||
else
|
||||
# Add to cPHulk whitelist using the correct script
|
||||
if /usr/local/cpanel/scripts/cphulkdwhitelist "$ip" 2>&1 | grep -q "whitelisted"; then
|
||||
# Add to cPHulk whitelist - cphulkdwhitelist doesn't give useful output
|
||||
# Just run it and assume success if no error
|
||||
if /usr/local/cpanel/scripts/cphulkdwhitelist "$ip" >/dev/null 2>&1; then
|
||||
IMPORTED=$((IMPORTED + 1))
|
||||
echo " [OK] $ip"
|
||||
else
|
||||
@@ -339,16 +358,15 @@ fi
|
||||
echo ""
|
||||
print_section "Final Configuration"
|
||||
|
||||
# Check status
|
||||
FINAL_STATUS=$(/usr/local/cpanel/bin/cphulk_pam_ctl --status 2>/dev/null)
|
||||
if echo "$FINAL_STATUS" | grep -qi "enabled"; then
|
||||
print_success "cPHulk Status: ENABLED"
|
||||
# Check if service is running
|
||||
if systemctl is-active cphulkd >/dev/null 2>&1 || service cphulkd status >/dev/null 2>&1; then
|
||||
print_success "cPHulk Status: ENABLED and RUNNING"
|
||||
else
|
||||
print_error "cPHulk Status: DISABLED (unexpected)"
|
||||
print_warning "cPHulk Status: Service not running"
|
||||
fi
|
||||
|
||||
# Count whitelist
|
||||
FINAL_WHITELIST=$(/usr/local/cpanel/scripts/cphulkdwhitelist --list 2>/dev/null | grep -vE "^$|not enabled" | wc -l)
|
||||
# Count whitelist entries from SQLite database
|
||||
FINAL_WHITELIST=$(sqlite3 /var/cpanel/hulkd/cphulk.sqlite "SELECT COUNT(*) FROM ip_lists WHERE type=1" 2>/dev/null || echo "0")
|
||||
print_info "cPHulk whitelist entries: $FINAL_WHITELIST"
|
||||
|
||||
echo ""
|
||||
@@ -362,17 +380,14 @@ echo " • Brute Force Protection Period: 5 minutes"
|
||||
echo " • Maximum Failures per Account: 5"
|
||||
echo " • Maximum Failures per IP: 10"
|
||||
echo ""
|
||||
echo "3. Add your own IPs to whitelist:"
|
||||
echo "3. Add more IPs to whitelist:"
|
||||
echo " /usr/local/cpanel/scripts/cphulkdwhitelist YOUR.IP.ADDRESS"
|
||||
echo ""
|
||||
echo "4. View current whitelist:"
|
||||
echo " /usr/local/cpanel/scripts/cphulkdwhitelist --list"
|
||||
echo "4. View current whitelist (via SQLite database):"
|
||||
echo " sqlite3 /var/cpanel/hulkd/cphulk.sqlite 'SELECT * FROM ip_lists WHERE type=1'"
|
||||
echo ""
|
||||
echo "5. Add to blacklist:"
|
||||
echo " /usr/local/cpanel/scripts/cphulkdwhitelist -black YOUR.IP.ADDRESS"
|
||||
echo ""
|
||||
echo "6. View currently blocked IPs (via WHM API):"
|
||||
echo " whmapi1 get_cphulk_brutes"
|
||||
echo "5. View currently blocked IPs (via database):"
|
||||
echo " sqlite3 /var/cpanel/hulkd/cphulk.sqlite 'SELECT * FROM auths'"
|
||||
|
||||
echo ""
|
||||
print_success "cPHulk setup complete!"
|
||||
|
||||
Reference in New Issue
Block a user