Panoramica
Nel seguente post tratteremo lo scenario in cui installeremo WordPress con database remoto su Debian. In altre parole, avremo un ambiente in cui avremo due server separati, uno che avrà solo l'installazione di WordPress (il che significa che ospiterà solo il sito Web) e l'altro avrà solo il database (agirà solo come server di database) .
Ci sono molte ragioni vantaggiose per la configurazione di questo tipo di ambiente:una è la facilità di manutenzione del sito Web e del database, l'aumento delle prestazioni (ovvero il wordpress poiché non dipende da un server, richiederà molte meno risorse).
Ma lo svantaggio è che, poiché ora abbiamo due server, la manutenzione del server aumenterà.
Questa configurazione sarà configurata su due server Debian (entrambi nella stessa rete/stessa LAN).
Lo stack sarà LEMP – server web Nginx, server PHP e MariaDB.
Configurazione del server di database
Ci concentreremo prima sul server di database:
1. Installa il server MariaDB
sudo apt install mariadb-server
Esegui mysql_secure_installation
sudo mysql_secure_installation
2. Modifica il file di configurazione del database e cambia il parametro bind-address e inserisci l'indirizzo privato del server del database:
Il file da modificare:
sudo /etc/mysql/mariadb.conf.d/50-server.cnf
Riga da modificare – bind-address =127.0.0.1
indirizzo-bind =192.168.56.252
Salva ed esci, riavvia e abilita mariadb.service.
sudo systemctl restart mariadb.service sudo systemctl enabled mariadb.service
Per scoprire l'indirizzo IP del tuo server di database, esegui il comando – ip a.
3. Crea il database, l'utente e imposta i privilegi (le informazioni nei comandi sono usate come esempio)
sudo mysql -u root -p CREATE DATABASE wptest; GRANT ALL ON wptest.* TO 'wpadmin'@'192.168.56.251' IDENTIFIED BY 'StrongPassword'; FLUSH PRIVILEGES; exit
Sul database è necessario creare un utente remoto, ovvero l'account utente che la nostra installazione di WordPress utilizzerà per connettersi al database. È necessario conoscere davanti l'indirizzo IP del server WordPress e specificarlo/associarlo all'account utente remoto.
Configurazione firewall
Se hai un firewall in esecuzione sul tuo database server, allora è necessario aprire la porta del 3306 per accettare la connessione dal web server e per accedere al database. Per sicurezza, è bene configurare le regole per accettare solo le connessioni solo dal nostro server web.
Configurazione firewall UFW
sudo ufw allow from 192.168.56.251 to any port 3306
Configurazione IPTABLES
iptables -I INPUT -p tcp -s 192.168.56.251 --dport 3306 -j ACCEPT
Configurazione del server web
1. Installa il server web Nginx con altre librerie php necessarie per eseguire WordPress e comunicare con il server del database e il client mysql/mariadb.
sudo apt install nginx php-cli php-fpm php-mysql php-json php-opcache php-mbstring php-xml php-gd php-curl sudo apt install mariadb-client
Possiamo testare la connessione al server del database se eseguiamo questo comando dal nostro server web (essenzialmente, accedendo in remoto al database):
sudo mysql -u remote-admin -h 192.168.56.252 -p
2. Installa WordPress, configuralo e configura Nginx. Qui ora configureremo solo la parte di WordPress in cui dobbiamo aggiungere l'indirizzo del nostro server di database remoto. Se hai bisogno di passaggi dettagliati su come installare WordPress e configurare Nginx, puoi trovare le istruzioni in questo post.
cd /var/www/html/wordpress/ sudo mv wp-config-sample.php wp-config.php sudo nano wp-config.php
Nella riga del database, sostituire localhost con l'indirizzo IP del server del database. Fare riferimento all'immagine seguente come esempio:
3. Crea il file Nginx conf e rimuovi quello predefinito:
sudo nano /etc/nginx/sites-available/wordpress.conf sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/
La Nginx conf che puoi usare, puoi trovarla nello stesso post che abbiamo menzionato in precedenza.
sudo rm /etc/nginx/sites-available/default sudo rm /etc/nignx/sites-enabled/default
Dopo questa configurazione dovresti essere in grado di eseguire WordPress, accedere al suo database remoto e completare l'installazione di WordPress.
E ora dovresti avere un sito WordPress in esecuzione con un server Web e database separato. Puoi fermarti qui se sei soddisfatto dell'installazione. Questi erano i passaggi necessari su come installare WordPress con un database remoto e, a questo punto, tutto dovrebbe essere attivo e funzionante. Altrimenti continua nel capitolo successivo e finale come proteggere e crittografare la connessione al database e il traffico tra il Web e il server del database e per rendere l'installazione più sicura.
Proteggi e crittografa la connessione al database con un SSL (opzionale ma consigliato)
È anche una buona pratica di sicurezza e un ulteriore livello di sicurezza per proteggere e crittografare il traffico tra il Web e il server di database. Il motivo è che se non è sicuro e crittografato, e SE in qualche modo un utente malintenzionato irrompe nella tua sottorete privata (la rete LAN privata in cui si trovano i server) o nel server Web, l'attaccante può intercettare e annusare il traffico (monitorarlo e ottenere dati) che possono comportare la violazione e l'hacking del tuo sito Web e dei server.
Certificato del server di database
1. Su entrambi i server (web e database), crea una directory temporanea per archiviare i certificati (esempio ssl o certs) nella tua home directory per un esempio o in un posto facile per archiviarli – ad esempio, qui faremo la directory certs nella nostra home directory:
cd mkdir certs
Inizieremo innanzitutto con il server del database, quindi passa alla nuova directory certs che abbiamo appena creato:
cd certs
2. Sul server del database genereremo la chiave CA, il certificato e la chiave privata. Segui le istruzioni e rispondi di conseguenza quando richiesto. È possibile utilizzare le immagini qui sotto come riferimento. Una cosa a cui prestare attenzione è il prompt Nome comune (che è piuttosto importante). Sta chiedendo il nome del server di database. Qui dovresti aggiungere l'indirizzo IP del server (come abbiamo noi) o il nome di dominio del server se hai o il nome host. Le informazioni devono corrispondere poiché creeremo i certificati del server e le chiavi client in modo che corrispondano.:
sudo openssl genrsa 4096 > ca-key.pem sudo openssl req -new -x509 -nodes -days 1825 -key ca-key.pem -out cacert.pem
Nel secondo comando, l'attributo -days 1825 fa riferimento alla validità del certificato creato per 5 anni (1825 giorni). Puoi impostare i giorni che desideri o di cui hai bisogno.
3. Successivamente creare la chiave privata RSA e firmare il certificato:
sudo openssl rsa -in server-key.pem -out server-key.pem
sudo openssl req -newkey rsa:4096 -days 1825 -nodes -keyout server-key.pem -out server-req.pem
sudo openssl x509 -req -in server-req.pem -days 1825 -CA cacert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Ora possiamo spostare i certificati in una posizione permanente:
sudo mkdir /etc/mysql/ssl sudo mv *.* /etc/mysql/ssl cd /etc/mysql/ssl
Certificato del server Web
4. Genera il certificato client. Le richieste saranno le stesse del server di database, ma nella domanda Nome comune, inserisci i dettagli del server web in cui è installato Wodpress (come l'indirizzo IP del server web). Scrivi la RSA e firma il certificato:
sudo openssl req -newkey rsa:2048 -days 1825 -nodes -keyout client-key.pem -out client-req.pem sudo openssl rsa -in client-key.pem -out client-key.pem sudo openssl x509 -req -in client-req.pem -days 1825 -CA cacert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Configurazione SSL per entrambi i server
Configurazione del server di database
1. Il passaggio successivo consiste nel configurare i nostri server per utilizzare i certificati che abbiamo creato e abilitare la connessione SSL tra il server Web e il database. Prima modifica la configurazione sulla configurazione del server MariaDB:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
E trova le seguenti righe, decommentale, aggiungi riscrivi le righe che corrispondono alle directory e ai file dei nostri certificati che abbiamo creato:
ssl-ca=/etc/mysql/ssl/cacert.pem ssl-cert=/etc/mysql/ssl/server-cert.pem ssl-key=/etc/mysql/ssl/server-key.pem
Salva il file ed esci.
2. Ora accedi a MariDB come root ed esegui le seguenti query per abilitare sul server che consentirà la connessione dal server Web solo con SSL:
sudo mysql -u root -p GRANT ALL PRIVILEGES ON wptest.* TO 'wpadmin'@'192.168.56.251' REQUIRE SSL; FLUSH PRIVILEGES; exit
Riavvia il server del database:
sudo systemctl restart mariadb.service
Configurazione del server web
3. Mentre sei ancora nella directory /etc/mysql/ssl (o spostati qui), con lo strumento scp, copia i certificati client sul server web (webuser e l'indirizzo IP sostituiscono con il nome utente e l'indirizzo IP effettivi del tuo server web):
scp cacert.pem client-cert.pem client-key.pem [email protected]:~/certs
Ora passa/accedi al server web e sposta anche i certificati in un posto permanente (lo stesso del server del database):
sudo mkdir /etc/mysql/ssl cd certs sudo mv /certs/*.* /etc/mysql/ssl
Modifica il file di configurazione per il client MariaDB che abbiamo installato nel primo passaggio. Ha la stessa posizione del server:
sudo nano /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
E trova la stessa riga SSL (dovrebbe essere nella sezione [mysql]) che abbiamo fatto per il server del database e fallo corrispondere alla posizione e ai nomi dei file dei certificati che abbiamo aggiunto nella directory /etc/mysql/ssl:
[mysql] ssl-ca=/etc/mysql/ssl/cacert.pem ssl-cert=/etc/mysql/ssl/client-cert.pem ssl-key=/etc/mysql/ssl/client-key.pem
Salva il file, esci.
Puoi verificare se la connessione funziona con l'accesso remoto:
mysql -u wpadmin -h 192.168.56.252 -p
4. L'ultimo file da modificare è di nuovo wp-config.php. Abbiamo bisogno anche della riga di configurazione SSL:
sudo nano /var/www/html/wordpress/wp-config.php
e aggiungi la riga prima della riga con il nome del database:
define( 'MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL );
Fare riferimento all'immagine:
Riavvia il server web Nginx e termina l'installazione di WordPress dal browser web. Dovrebbe essere attivo e funzionante.
Riepilogo
Per riassumere questo articolo, abbiamo illustrato i passaggi su come installare WordPress con un database remoto. Abbiamo anche spiegato il processo su come proteggere la connessione tra i due server (se non hai sperimentato prima i certificati autofirmati e come lavorare, puoi saltare il passaggio, come detto sopra, non è necessario, solo una raccomandazione) . Il processo di base stesso su come installare WordPress con un database remoto non è così difficile e offre un paio di vantaggi, uno dei quali è che le prestazioni e la manutenzione del server web possono ora essere piuttosto più semplici e ridurre i tempi di inattività quando è necessaria la manutenzione.