Add cloudpanel-tailscale.sh
This commit is contained in:
		
						commit
						d9c19397d0
					
				
					 1 changed files with 163 additions and 0 deletions
				
			
		
							
								
								
									
										163
									
								
								cloudpanel-tailscale.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								cloudpanel-tailscale.sh
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,163 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | # Exit on any error | ||||||
|  | set -e | ||||||
|  | 
 | ||||||
|  | # Function to check if command executed successfully | ||||||
|  | check_status() { | ||||||
|  |     if [ $? -eq 0 ]; then | ||||||
|  |         echo "✅ $1 completed successfully" | ||||||
|  |     else | ||||||
|  |         echo "❌ Error: $1 failed" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Function to determine SSH service name | ||||||
|  | get_ssh_service() { | ||||||
|  |     if systemctl list-units --full -all | grep -Fq "ssh.service"; then | ||||||
|  |         echo "ssh" | ||||||
|  |     elif systemctl list-units --full -all | grep -Fq "sshd.service"; then | ||||||
|  |         echo "sshd" | ||||||
|  |     else | ||||||
|  |         echo "SSH service not found!" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | echo "Starting Tailscale setup for CloudPanel..." | ||||||
|  | 
 | ||||||
|  | # 1. Update system packages | ||||||
|  | echo "Updating system packages..." | ||||||
|  | apt update && apt upgrade -y | ||||||
|  | check_status "System update" | ||||||
|  | 
 | ||||||
|  | # 2. Install required packages | ||||||
|  | echo "Installing required packages..." | ||||||
|  | apt install -y sqlite3 | ||||||
|  | check_status "Required packages installation" | ||||||
|  | 
 | ||||||
|  | # 3. Install Tailscale | ||||||
|  | echo "Installing Tailscale..." | ||||||
|  | curl -fsSL https://tailscale.com/install.sh | sh | ||||||
|  | check_status "Tailscale installation" | ||||||
|  | 
 | ||||||
|  | # 4. Start and authenticate Tailscale | ||||||
|  | echo "Starting Tailscale..." | ||||||
|  | tailscale up | ||||||
|  | check_status "Tailscale startup" | ||||||
|  | 
 | ||||||
|  | # 5. Get Tailscale IP | ||||||
|  | TAILSCALE_IP=$(tailscale ip -4) | ||||||
|  | echo "Tailscale IP: $TAILSCALE_IP" | ||||||
|  | 
 | ||||||
|  | # 6. Backup original SSH configuration | ||||||
|  | echo "Backing up SSH configuration..." | ||||||
|  | cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup | ||||||
|  | check_status "SSH config backup" | ||||||
|  | 
 | ||||||
|  | # 7. Update SSH configuration to only listen on Tailscale IP | ||||||
|  | echo "Updating SSH configuration..." | ||||||
|  | cat > /etc/ssh/sshd_config << EOF | ||||||
|  | # SSH Configuration | ||||||
|  | Port 22 | ||||||
|  | ListenAddress ${TAILSCALE_IP} | ||||||
|  | PermitRootLogin prohibit-password | ||||||
|  | PasswordAuthentication no | ||||||
|  | ChallengeResponseAuthentication no | ||||||
|  | UsePAM yes | ||||||
|  | X11Forwarding yes | ||||||
|  | PrintMotd no | ||||||
|  | AcceptEnv LANG LC_* | ||||||
|  | Subsystem sftp /usr/lib/openssh/sftp-server | ||||||
|  | EOF | ||||||
|  | check_status "SSH config update" | ||||||
|  | 
 | ||||||
|  | # 8. Restart SSH service | ||||||
|  | SSH_SERVICE=$(get_ssh_service) | ||||||
|  | echo "Restarting ${SSH_SERVICE} service..." | ||||||
|  | systemctl restart ${SSH_SERVICE} | ||||||
|  | check_status "SSH service restart" | ||||||
|  | 
 | ||||||
|  | # 9. Update CloudPanel configuration | ||||||
|  | echo "Updating CloudPanel configuration..." | ||||||
|  | CLOUDPANEL_NGINX_CONF="/home/clp/services/nginx/sites-enabled/cloudpanel.conf" | ||||||
|  | 
 | ||||||
|  | # Backup original nginx configuration | ||||||
|  | cp "$CLOUDPANEL_NGINX_CONF" "${CLOUDPANEL_NGINX_CONF}.backup" | ||||||
|  | check_status "CloudPanel nginx config backup" | ||||||
|  | 
 | ||||||
|  | # Update nginx configuration to listen only on Tailscale IP | ||||||
|  | sed -i "s/listen 8443 ssl http2;/listen ${TAILSCALE_IP}:8443 ssl http2;/" "$CLOUDPANEL_NGINX_CONF" | ||||||
|  | check_status "CloudPanel nginx config update" | ||||||
|  | 
 | ||||||
|  | # 10. Restart nginx | ||||||
|  | echo "Restarting nginx..." | ||||||
|  | systemctl restart clp-nginx | ||||||
|  | check_status "Nginx service restart" | ||||||
|  | 
 | ||||||
|  | # 11. Update CloudPanel firewall rules | ||||||
|  | echo "Updating CloudPanel firewall rules..." | ||||||
|  | CLOUDPANEL_DB="/home/clp/htdocs/app/data/db.sq3" | ||||||
|  | 
 | ||||||
|  | # Backup the database | ||||||
|  | cp "$CLOUDPANEL_DB" "${CLOUDPANEL_DB}.backup" | ||||||
|  | check_status "Database backup" | ||||||
|  | 
 | ||||||
|  | # Update firewall rules in the database | ||||||
|  | sqlite3 "$CLOUDPANEL_DB" << EOF | ||||||
|  | -- First, clear existing rules | ||||||
|  | DELETE FROM firewall_rule; | ||||||
|  | 
 | ||||||
|  | -- SSH (22) - Tailscale only | ||||||
|  | INSERT INTO firewall_rule (port_range, source, created_at, updated_at) VALUES  | ||||||
|  | ('22', '${TAILSCALE_IP}/32', datetime('now'), datetime('now')); | ||||||
|  | 
 | ||||||
|  | -- HTTP (80) - Open to all | ||||||
|  | INSERT INTO firewall_rule (port_range, source, created_at, updated_at) VALUES  | ||||||
|  | ('80', '0.0.0.0/0', datetime('now'), datetime('now')); | ||||||
|  | 
 | ||||||
|  | -- HTTPS (443) - Open to all | ||||||
|  | INSERT INTO firewall_rule (port_range, source, created_at, updated_at) VALUES  | ||||||
|  | ('443', '0.0.0.0/0', datetime('now'), datetime('now')); | ||||||
|  | 
 | ||||||
|  | -- CloudPanel UI (8443) - Tailscale only | ||||||
|  | INSERT INTO firewall_rule (port_range, source, created_at, updated_at) VALUES  | ||||||
|  | ('8443', '${TAILSCALE_IP}/32', datetime('now'), datetime('now')); | ||||||
|  | EOF | ||||||
|  | check_status "Firewall rules update" | ||||||
|  | 
 | ||||||
|  | # 12. Apply the new firewall rules | ||||||
|  | echo "Applying new firewall rules..." | ||||||
|  | systemctl restart ufw | ||||||
|  | check_status "Firewall rules application" | ||||||
|  | 
 | ||||||
|  | echo " | ||||||
|  | ✨ Setup completed successfully! ✨ | ||||||
|  | 
 | ||||||
|  | Your services are now configured as follows: | ||||||
|  | - SSH (22): Only accessible via Tailscale (${TAILSCALE_IP}) | ||||||
|  | - HTTP (80): Open to all traffic | ||||||
|  | - HTTPS (443): Open to all traffic | ||||||
|  | - CloudPanel UI (8443): Only accessible via Tailscale (${TAILSCALE_IP}) | ||||||
|  | 
 | ||||||
|  | Important: Keep these backup files in case you need to revert: | ||||||
|  | - SSH config: /etc/ssh/sshd_config.backup | ||||||
|  | - CloudPanel nginx config: ${CLOUDPANEL_NGINX_CONF}.backup | ||||||
|  | - CloudPanel database: ${CLOUDPANEL_DB}.backup | ||||||
|  | 
 | ||||||
|  | To revert changes if needed: | ||||||
|  | 1. For CloudPanel nginx: | ||||||
|  |    cp ${CLOUDPANEL_NGINX_CONF}.backup ${CLOUDPANEL_NGINX_CONF} | ||||||
|  |    systemctl restart clp-nginx | ||||||
|  | 
 | ||||||
|  | 2. For CloudPanel database: | ||||||
|  |    cp ${CLOUDPANEL_DB}.backup ${CLOUDPANEL_DB} | ||||||
|  |    systemctl restart ufw | ||||||
|  | 
 | ||||||
|  | 3. For SSH config: | ||||||
|  |    cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config | ||||||
|  |    systemctl restart ${SSH_SERVICE} | ||||||
|  | 
 | ||||||
|  | ⚠️  Make sure you can still access your server before closing this session! | ||||||
|  | " | ||||||
		Loading…
	
		Reference in a new issue