, , , , , , , , , , , ,

Nginx, PHPmyAdmin, Certbot und vHost installieren – Tutorial

Posted by

0
(0)

Willkommen!

In diesem Tutorial beschäftigen wir uns mit dem Thema Webservern und wie Du deinen eigenen Nginx Webserver installieren, und mit zusätzlichen Addons aufrüsten kannst.

Natürlich werden wir uns mit folgenden Themen beschäftigen:

  1. Wir installieren Nginx
  2. Werden eine Domain darauf via vHost hosten
  3. Werden diese via Certbot konfigurieren (SSL Let’s Encrypt)
  4. Werden nur die benötigten Port hierzu öffnen (UFW Firewall)
  5. Werden PHP-FPM installieren (Version 8.2)
  6. Werden unsere vHost für PHPmyadmin erstellen und MySQL installieren
  7. Zusätzlich mit verschiedenen Absicherungen besonders für PHPmyadmin
  8. Werden uns mit den Verzeichnisen beschäftigen und mit deren www-data User Rechten.

Das alles ist schonmal Ordentlich Input würde ich mal behaupten 🙂

Bitte beachtet das wir das ganze ohne Zusätzliche Skripte machen sondern wir werden alles per Hand (manuelle Installation) konfigurieren.

1. Nginx und Certbot installieren

				
					apt update && apt upgrade -y
apt install sudo -y
				
			
				
					sudo apt install certbot python3-certbot-nginx -y
				
			

Mit diesen Befehlen updaten und upgraden wir das jeweilige Linux OS z.B Debian 11/12… auf den neusten Stand. Darauf folgend installieren wir Certbot zusammen mit dem Nginx Webserver.

2. Domain mit dem Webserver verknüpfen

Damit wir später z.B Blogs etc. hosten können, benötigt es eine Domain. Eine Domain ist wie der eigene Name im Internet sagen wir einfach das ist der Name eures Ladens (Webseite). Damit dieser Laden auch von überall aus sicher betreten werden kann und es auch DSGVO Rechtskonform ist, können wir mittels Let’s Encrypt die Verbindungen von Client zu Webserver und umgekehrt schützen via SSL Verbindungen. Mit Let’s Encrypt erhaltet Ihr ein kostenloses Zertifikat das jeweils 3 Monate gültig ist und immer wieder erneuert werden kann und das ohne Aufpreis.

Let’s Encypt ist genau genommen eine Zertifizierungstelle die sich das Ziel macht, Webseiten mehr von HTTP auf HTTPs zum Umstieg zu motivieren.

Screenshot 04 07 2024 04.43.43
Hier erstelle ich eine Sub-Domain (pma) für z.B mein PHPmyAdmin.
				
					sudo certbot --nginx -d sub.example.com -d www.sub.example.com
				
			

Mit dem Certbot Befehl können wir unser eigenes Let’s Encrypt Zertifikat anfordern bei der Zertifizierungsstelle.

Das -d bedeutet immer das eine neue Sub/Domain genannt wird und zum Zertifikat hinzugefügt wird.

Die vHost wird bei Erfolgreichen Ausstellung vom Certbot automatisch angelegt und wir müssen diese eben halt nur noch ein bisschen anpassen.

Screenshot 04 07 2024 20.46.56
Nach Erfolgreicher Austellung des Zertifikats wurde von Certbot ein vHost erstellt
				
					 # Jetzt erstellen wir das Web-Verzeichnis im /var/www/* Bereich.
 mkdir /var/www/pma.example.com

				
			
				
					# Öffnen mit dem Nano Editor die jeweilige default Konfiguration die auch Certbot nutzt.
nano /etc/nginx/sites-available/default
				
			
Screenshot 04 07 2024 20.52.41
Nun passe ich meine vHost Datei an und aktiviere php8.2-fpm und setze den root Pfad
Screenshot 04 07 2024 20.54.22
Für den Index, setze ich hier die index.php

3. Jetzt mit der UFW Firewall nicht benötigte Ports blocken.

Denn ohne eine richtige Firewall ist jeder Port egal ob benutzt oder nicht, eine Potenzielle Gefahr. Sagen wir je weniger Ports von verschiedenen Diensten offen sind, so sinkt auch das Risiko einer Gefährdung.

				
					# Wir installieren jetzt die UFW Firewall
apt install ufw -y
				
			
				
					ufw allow http
ufw allow https
ufw allow ftp
ufw allow ssh

# Jetzt UFW aktivieren
ufw enable
				
			
Screenshot 04 07 2024 21.05.55
Hier sehen wir nun mittels ufw status – welche Ports offen sind und das die UFW aktiv ist

4. PHP-FPM installieren (8.2)

				
					# Jetzt installieren wir php8.2-fpm und die dazugehörigen Pakete.
apt install php8.2-fpm php8.2-curl php8.2-mbstring php8.2-xsl php8.2-intl php8.2-mysql php8.2-zip php8.2-common  -y
				
			
				
					# Die PHP.ini kann hierzu auch angepasst werden falls man mit den Standart Einstellungen an den Grenzen kommt.
nano /etc/php/8.2/fpm/php.ini
				
			

5. MySQL und PHPmyAdmin installation

				
					apt install mariadb-server -y
# Danach konfigurieren wir MySQL mit folgendem Befehl.
mysql_secure_installation
				
			
				
					# Hier eine Log Ausgabe
root@webserver-tutorial:~# mysql_secure_installation                              

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): => Hier ein Passwort einfügen
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y <= Ja
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y <= Ja
New password: {{Hier dein Passwort nochmal zwei mal eintragen}}
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y <= Ja
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y <= Ja
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y <= Ja
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y <= Ja
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
				
			
				
					# Jetzt wechseln wir zu unserem Web-Verzeichnis
cd /var/www/pma.example.com/

# Erstellen einen Sicherheits Ordner
mkdir /var/www/pma.example.com/auth

# Wechseln in auth
cd /var/www/pma.example.com/auth

# Jetzt laden wir uns die PHPmyAdmin Source herunter
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip; apt install unzip -y; unzip phpMyAdmin-5.2.1-all-languages.zip; rm phpMyAdmin-5.2.1-all-languages.zip; cd phpMyAdmin-5.2.1-all-languages; mv * ../; cd ..; rm -r phpMyAdmin-5.2.1-all-languages;

# Jetzt nochmal die Rechte zu www-data für alle /var/www/* Files und Ordner setzen
chown -R www-data:www-data /var/www

				
			

Jetzt zusätzlichen Schutz aktivieren

				
					# Wir installieren nun ein wichtiges Paket für das Basic Auth Header verfahren
apt install apache2-utils -y

# Öffnen mit dem Nano Editor die jeweilige default Konfiguration die auch Certbot nutzt.
nano /etc/nginx/sites-available/default

# Jetzt fügen wir folgendes ein

location ^~/auth/ {
                auth_basic "Admin Login";
                auth_basic_user_file /etc/nginx/pma_pass;
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                        location ~ \.php$ {
                        include snippets/fastcgi-php.conf;
                        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
             }
        }
        
        location ~ /\.ht {
                deny all;
        }
        
# Jetzt erstellen wir einen Zusätzlichen Schutz für PHPmyAdmin
sudo htpasswd -c /etc/nginx/pma_pass Nutzername

# Danach Syntax Check

nginx -t
				
			
Screenshot 04 07 2024 21.25.22
Ich erstelle den Benutzer “janhill” und setze im Anschluss das Passwort für den Benutzer
Screenshot 04 07 2024 21.29.54
Hier sehen wir nun das der Syntax gut ausschaut
				
					# Jetzt Webserver neustarten
sudo service nginx restart
				
			
Screenshot 04 07 2024 21.32.21
Tada 🙂 Ein Basic Auth Header für mehr Schutz
Screenshot 04 07 2024 21.33.09
SSL ist aktiv und wir können uns jetzt mit Nutzer “root” anmelden und das zuvor gesetzte Passwort
Screenshot 04 07 2024 21.35.05
Jetzt haben wir im Endeffekt volle Kontrolle in dem was wir machen möchten.

Dazu gehören auch Datenbanken oder Unter-Benutzer für Datenbanken zu erstellen.

Fortsetzung folgt in Kürze (BONUS)

In ca. 1 Woche ab Release des Beitrages gibt es immer mehr aktualisierte Inhalte was man mit Nginx noch so alles machen kann. Heute habe ich die Basics gezeigt wie man alles Grundlegende aufsetzten tut. Im nächsten Part geht es dann über folgendes:

1. Nginx Reverse Proxy

2. Verschiedene CMS aufsetzungen + Rewrites

3. Und tolle Tipps und Tricks mit Wireguard VPN für das Verknüpfen mehrerer Dienste über die Nginx Reverse Proxy

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert