Neuer StratoServer
Einen neuen Server bei Strato einrichten
Installation bei Strato
Bei Strato über den Installationsassistent wird ein neuer Server installiert. Dazu bei "Experten-Einsatz" das Betriebsystem "AlmaLinux 9" auswählen, das neue root-Password und die Sprache "deutsch" festlegen und mit einer minimalen Partitionierung den Server installieren.
Nach ca. 30min ist dann das neue System installiert und per ssh über die in der Strato-Oberfläche angegebene Primäre IP erreichbar
AlmaLinux 9 zu Rocky Linux 9
Da ich mehr mit Rocky Linux vertraut bin, wechseln wir gleich nach der Erst-Installtion das Betriebsystem.
# System aktualisieren dnf -y update dnf -y upgrade cd /usr/local/src/ dnf install wget # die wichtigen Dateien für RockyLinux herunterladen wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-gpg-keys-9.1-1.11.el9.noarch.rpm wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-release-9.1-1.11.el9.noarch.rpm wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-repos-9.1-1.11.el9.noarch.rpm # Alle Pakete identifizieren, die AlmaLinux-typisch sind und diese löschen rpm -qa|grep alma rpm -e --nodpes almalinux-gpg-keys-9.1-1.9.el9.x86_64 almalinux-release-9.1-1.9.el9.x86_64 almalinux-repos-9.1-1.9.el9.x86_64 rpm -e --nodeps almalinux-gpg-keys-9.1-1.9.el9.x86_64 almalinux-release-9.1-1.9.el9.x86_64 almalinux-repos-9.1-1.9.el9.x86_64 # Anschließend die vorher heruntergeladenen RockyLinux-RPMs installieren rpm -Uvh * # Überprüfen, ob noch AlsaLinux-Datein vorhanden sind rpm -qa|grep -i alsa # System ist nun auf RockyLinux cat /etc/os-release NAME="Rocky Linux" VERSION="9.1 (Blue Onyx)" ID="rocky" ID_LIKE="rhel centos fedora" VERSION_ID="9.1" PLATFORM_ID="platform:el9" PRETTY_NAME="Rocky Linux 9.1 (Blue Onyx)" ANSI_COLOR="0;32" LOGO="fedora-logo-icon" CPE_NAME="cpe:/o:rocky:rocky:9::baseos" HOME_URL="https://rockylinux.org/" BUG_REPORT_URL="https://bugs.rockylinux.org/" ROCKY_SUPPORT_PRODUCT="Rocky-Linux-9" ROCKY_SUPPORT_PRODUCT_VERSION="9.1" REDHAT_SUPPORT_PRODUCT="Rocky Linux" REDHAT_SUPPORT_PRODUCT_VERSION="9.1"
sshd einrichten
Zuerst wird ein neuer User angelegt
useradd -u 1000 -c "Karl's Admin Account" -m ktsadmin passwd ktsadmin
anschließend wird die Datei /etc/ssh/sshd_config angepasst
dnf install -y vim vim /etc/ssh/sshd_config PORT 9999 PermitRootLogin no systemctl restart sshd
2. IPv4 und IPV6 einrichten
Als erstes wird per NetworkManager eine 2. IP-Adresse konfiguriert und auch gleich die IPv6-IP aktiviert.
NetworkManager Konfigurationsdatei erstellen
vim /etc/NetworkManager/system-connection/Ethernet1.nmconnection [connection] id=Ethernet1 uuid=036aca4a-4251-4568-bce8-c2657ff311fe type=ethernet interface-name=eno1 timestamp=1672147920 [ethernet] [ipv4] address1=85.214.25.70/32,85.214.25.1 address2=85.214.91.231/32 dns=8.8.8.8;8.8.4.4; method=manual [ipv6] address1=2a01:238:42ec:2f00:b821:b19c:85d0:1f03/64,fe80::1 dns=2001:4860:4860::8888;2001:4860:4860::8844; method=manual [proxy]
und mit
systemctl restart NetworkManager
aktiviert.
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 0c:c4:7a:c3:01:93 brd ff:ff:ff:ff:ff:ff
altname enp0s25
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 0c:c4:7a:c3:01:92 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 85.214.91.231/32 scope global noprefixroute eno1
valid_lft forever preferred_lft forever
inet 85.214.25.70/32 scope global noprefixroute eno1
valid_lft forever preferred_lft forever
inet6 2a01:238:42ec:2f00:b821:b19c:85d0:1f03/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::ec4:7aff:fec3:192/64 scope link
valid_lft forever preferred_lft forever
IP Forwarding aktivieren
vim /etc/sysctl.d/10-ipforward.conf net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding=1
Webmin mit SSL-Zertifikat (Letsencrypt)
Benötigte RPMs für webmin installieren
cd /usr/local/src dnf -y install epel-release dnf -y install perl-lib perl-Encode-Detect perl-open # webmin herunterladen wget https://downloads.sourceforge.net/project/webadmin/webmin/2.010/webmin-2.010-1.noarch.rpm? rpm -Uvh webmin # anschließend webmin anpassen, auf 2. IP-Adresse binden und ssl erst mal auschalten vim /etc/webmin/miniserv.conf bind=85.214.91.231 ssl=0 systemctl restart webmin
nun läuft Webmin auf der 2.IP über http (http://2ip:10000)
Letsencrypt installieren
dnf install -y snapd systemctl restart snapd snap install core snap refresh core ln -s /var/lib/snapd/snap /snap snap install --classic certbot ln -s /snap/bin/certbot /usr/bin/certbot
damit ist das Letsencrypt-Tool certbot installiert.
Da für die Letsencrypt-Zertifikatserstellung ein laufender Webserver (Apache) vorausgesetzt wird, muss dieser zuerst installiert und konfiguriert werden.
Apache und PHP installieren
Dazu erst mal die REPOs von RPMFusion und Remi hinzufügen
wget https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm wget https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-9.noarch.rpm rpm -Uvh rpmfusion*.rpm dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm dnf module reset php dnf module install php:remi-8.2 dnf install httpd systemctl restart httpd
Apache konfigurieren
cat > /etc/httpd/conf.d/letsencrypt.conf << __EOF__
Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
<Directory "/var/www/html/.well-known/acme-challenge/">
Options None
AllowOverride None
ForceType text/plain
RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)"
</Directory>
__EOF__
cat > /etc/httpd/conf.d/namevirtualhost.conf << __EOF__
NameVirtualHost 1.IP:80
NameVirtualHost 2.IP:80
__EOF__
cd /etc/httpd/conf.d/
cat > mod_compress.conf << __EOF__
<FilesMatch "\.js\.gzip$">
AddType "text/javascript" .gzip
</FilesMatch>
<FilesMatch "\.css\.gzip$">
AddType "text/css" .gzip
</FilesMatch>
AddEncoding gzip .gzip
__EOF__
cat > mod_expires.conf << __EOF__
<IfModule mod_expires.c>
# turn on the module for this directory
ExpiresActive on
# set default
ExpiresDefault "access plus 24 hours"
# cache common graphics
ExpiresByType image/jpg "access plus 1 months"
ExpiresByType image/gif "access plus 1 months"
ExpiresByType image/jpeg "access plus 1 months"
ExpiresByType image/png "access plus 1 months"
# cache CSS
ExpiresByType text/css "access plus 1 months"
# cache other filetypes
ExpiresByType text/javascript "access plus 1 months"
ExpiresByType application/javascript "access plus 1 months"
</IfModule>
__EOF__
cat > mod_deflate.conf << __EOF__
<IfModule !mod_deflate.c>
LoadModule deflate_module /usr/lib/httpd/modules/mod_deflate.so
</IfModule>
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
#SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ \
# no-gzip dont-vary
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|bz2|sit|rar)$ \
no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent env=!dont-vary
DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
#CustomLog /var/log/httpd/deflate_log deflate
</IfModule>
__EOF__
systemctl restart httpd
Virtuellen Host erstellen
cd /etc/httpd/conf.d/
cat > admin2.afdb.de.conf << __EOF__
<VirtualHost 85.214.91.231:80>
#-------------------------------------------------------------------------
# admin4.afdb.de
#
# webmaster : webmaster@newyorker-lions.de
# betreiber [email] : karl, karsten
# angelegt [von] : 2022-12-28 [karl]
# gruppe : wwwgrp01
#
#-------------------------------------------------------------------------
# General setup for the virtual host
DocumentRoot /www/default/www
ServerName admin2.afdb.de
ServerAdmin karl@newyorker-lions.de
CustomLog /www/default/logs/admin2_access.log combined
ErrorLog /www/default/logs/admin2_error.log
DirectoryIndex index.html index.php
<Directory "/www/default/www/">
Require all granted
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</Directory>
</VirtualHost>
__EOF__
systemctl restart httpd
Zertifikat erzeugen
Bei der Zertifikat-Erstellung wird die Option "In ein Verzeichnis erstellen" ausgewählt und anschließend das Verzeichnis "/var/www/html" genommen.
certbot certonly -d admin2.afdb.de -d server2.afdb.de
Webmin anpassen
Nachdem das Zertifikat nun erfolgreich erstellt worden ist, wird nun die Konfiguration von Webmin angepasst.
vim /etc/webmin/miniserv.com port 443 ssl 1 keyfile=/etc/webmin/privkey.pem extracas=/etc/webmin/chain.pem certfile=/etc/webmin/cert.pem # die benötigten Softlinks erstellen cd /etc/webmin ln -s /etc/letsencrypt/live/admin2.afdb.de/cert.pem . ln -s /etc/letsencrypt/live/admin2.afdb.de/chain.pem . ln -s /etc/letsencrypt/live/admin2.afdb.de/privkey.pem . # und anschließend Webmin restartet systemctl restart webmin
Cronjob für die Zertifikaterneuerung erstellen
cd /etc/cron.d cat > cert_renew << __EOF__ MAILTO=root SHELL=/bin/bash # letsencrypt cert renew von Karl jeden Sontag 0 0 * * Sun root /usr/bin/certbot renew >> /var/log/letsencrypt/cert_renew.log 2>&1 # Qmail Cert renew #0 0 * * Sun root /var/qmail/bin/renew_cert.sh >> /var/log/letsencrypt/renew_qmail_cert.log 2>&1 __EOF__
Apache mit SSL einrichten
dnf install -y mod_ssl cd /etc/httpd/conf.d/ vim ssl.conf Listen 85.214.25.70:443 https systemctl restart httpd
=== Alle Webseiten auf https umleiten
cat > http2https.conf << __EOF__
<VirtualHost 85.214.25.70:80>
###############################################################
# Alle untenangegebenen Server auf https umlenken
# Besitzer: Karl Schlicker
# Webmaster: Karl Schlicker
# Angelegt: Karl Schlicker (karl@newyorker-lions.de)
# am: 2022-12-31
# Gruppe:
###############################################################
DocumentRoot /www/default/www
# mail.newyorker-lions.de
ServerName mail.afc-lions.de
ServerAlias data.newyorker-lions.de
ServerAlias www.afc-lions.de
ServerAlias afc-lions.de
ServerAlias server2.afdb.de
ServerAdmin karl@newyorker-lions.de
CustomLog /www/default/logs/access.log combined
ErrorLog /www/default/logs/error.log
#RewriteLog /www/default/logs/rewrite.log
#RewriteLogLevel 5
DirectoryIndex index.html index.php
<Directory "/www/default/www">
Require all granted
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [L,R=301]
Options +FollowSymLinks +Includes
AllowOverride All
</Directory>
</VirtualHost>
__EOF__
systemctl restart httpd
virtuellen Host für server2.afdb.de anlegen
cat > server2.afdb.de.conf << __EOF__ <VirtualHost 85.214.25.70:443> #------------------------------------------------------------------------- # server2.afdb.de # # webmaster : webmaster@newyorker-lions.de # betreiber [email] : karl, karsten # angelegt [von] : 2022-12-31 [karl] # gruppe : wwwgrp01 # #------------------------------------------------------------------------- # General setup for the virtual host DocumentRoot /www/default/www ServerName server.afdb.de ServerAdmin karl@newyorker-lions.de CustomLog /www/default/logs/server2_access.log combined ErrorLog /www/default/logs/server2_error.log DirectoryIndex index.html index.php <Directory "/www/default/www/"> Require all granted RewriteEngine On </Directory> </VirtualHost> __EOF__ftp-Server einrichten
rkhunter
logwatch
logrotate
dnf-automatic
Fail2ban (link) – a great tool for automatically banning suspicious IP addresses ClamAV (link) – an open-source antivirus engine Lynis (link) – open-source auditing tool for Linux