Neuer StratoServer: Unterschied zwischen den Versionen
| (26 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 19: | Zeile 19: | ||
# die wichtigen Dateien für RockyLinux herunterladen | # 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. | + | wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-gpg-keys-9.4-1.7.el9.noarch.rpm |
| − | wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-release-9. | + | wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-release-9.4-1.7.el9.noarch.rpm |
| − | wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-repos-9. | + | wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-repos-9.4-1.7.el9.noarch.rpm |
# Alle Pakete identifizieren, die AlmaLinux-typisch sind und diese löschen | # Alle Pakete identifizieren, die AlmaLinux-typisch sind und diese löschen | ||
rpm -qa|grep alma | rpm -qa|grep alma | ||
| − | rpm -e -- | + | rpm -e --nodeps almalinux-gpg-keys-9.4-1.el9.x86_64 almalinux-release-9.4-1.el9.x86_64 almalinux-repos-9.4-1.el9.x86_64 |
| − | + | ||
# Anschließend die vorher heruntergeladenen RockyLinux-RPMs installieren | # Anschließend die vorher heruntergeladenen RockyLinux-RPMs installieren | ||
| Zeile 76: | Zeile 76: | ||
Als erstes wird per NetworkManager eine 2. IP-Adresse konfiguriert und auch gleich die IPv6-IP aktiviert. | Als erstes wird per NetworkManager eine 2. IP-Adresse konfiguriert und auch gleich die IPv6-IP aktiviert. | ||
| − | === NetworkManager | + | === NetworkManager 2.IP einrichten === |
| + | |||
| + | Zuerst schauen, wie der Name der Verbinung lautet | ||
| + | <pre> | ||
| + | nmcli con show | ||
| + | NAME UUID TYPE DEVICE | ||
| + | main 19337dbe-a8d6-5f13-bbec-dada0cb7d5ee ethernet eno1 | ||
| + | lo b7a5d2d8-7a40-4425-ac22-6de414305a8b loopback lo | ||
<pre> | <pre> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | Anschließend 2. IP-Adresse zur Verbindung hinzufügen und auch Reboot fest machen | ||
<pre> | <pre> | ||
| − | + | nmcli connection modify main +ipv4.addresses 85.214.99.209/32 | |
| + | nmcli connection up main | ||
| + | nmcli connection reload | ||
| + | nmcli connection modify main connection.autoconnect yes | ||
</pre> | </pre> | ||
| − | + | Danach schauen, ob die 2. IP anliegt | |
| − | |||
<pre> | <pre> | ||
ip a | ip a | ||
| Zeile 119: | Zeile 104: | ||
valid_lft forever preferred_lft forever | valid_lft forever preferred_lft forever | ||
2: eno2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 | 2: eno2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 | ||
| − | link/ether | + | link/ether 00:25:90:47:40:cd brd ff:ff:ff:ff:ff:ff |
altname enp0s25 | altname enp0s25 | ||
3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 | 3: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 | ||
| − | link/ether | + | link/ether 00:25:90:47:40:cc brd ff:ff:ff:ff:ff:ff |
altname enp3s0 | altname enp3s0 | ||
| − | inet 85.214. | + | inet 85.214.99.209/32 scope global noprefixroute eno1 |
valid_lft forever preferred_lft forever | valid_lft forever preferred_lft forever | ||
| − | inet | + | inet 81.169.197.241/32 scope global dynamic noprefixroute eno1 |
| − | valid_lft | + | valid_lft 86394sec preferred_lft 86394sec |
| − | + | inet6 fe80::ae72:efb5:a13e:1296/64 scope link noprefixroute | |
| − | |||
| − | inet6 fe80:: | ||
valid_lft forever preferred_lft forever | valid_lft forever preferred_lft forever | ||
| + | </pre> | ||
| − | + | Zum Abschluß reboot durchführen und schauen, ob auch alles wirklich geklappt hat. | |
=== IP Forwarding aktivieren === | === IP Forwarding aktivieren === | ||
| Zeile 145: | Zeile 129: | ||
== Webmin mit SSL-Zertifikat (Letsencrypt) == | == Webmin mit SSL-Zertifikat (Letsencrypt) == | ||
| − | === | + | === Webmin installieren === |
<pre> | <pre> | ||
cd /usr/local/src | cd /usr/local/src | ||
| − | + | wget https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh | |
| − | + | sh setup-repos.sh | |
| − | + | dnf install webmin | |
| − | wget https:// | + | </pre> |
| − | + | ||
| − | + | anschließend webmin anpassen, auf 2. IP-Adresse binden und ssl erst mal auschalten | |
| + | |||
| + | <pre> | ||
vim /etc/webmin/miniserv.conf | vim /etc/webmin/miniserv.conf | ||
| − | bind=85.214. | + | bind=85.214.99.209 |
| − | + | listen=443 | |
| + | port=443 | ||
| + | |||
systemctl restart webmin | systemctl restart webmin | ||
</pre> | </pre> | ||
| − | nun läuft Webmin auf der 2.IP über | + | nun läuft Webmin auf der 2.IP über https (https://2ip) |
=== Letsencrypt installieren === | === Letsencrypt installieren === | ||
| + | Da das epel-Repository vorhanden ist, kann man direkt certbot installieren | ||
<pre> | <pre> | ||
| − | dnf install - | + | dnf install certbot python3-certbot-apache |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
</pre> | </pre> | ||
| − | |||
damit ist das Letsencrypt-Tool certbot installiert. | damit ist das Letsencrypt-Tool certbot installiert. | ||
| Zeile 184: | Zeile 166: | ||
| − | Dazu erst mal die REPOs von RPMFusion und Remi hinzufügen | + | Dazu erst mal die REPOs von RPMFusion und Remi hinzufügen und php Vers. 8.3 installieren |
<pre> | <pre> | ||
| + | cd /usr/local/src/ | ||
wget https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm | 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 | wget https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-9.noarch.rpm | ||
| Zeile 192: | Zeile 175: | ||
dnf module reset php | dnf module reset php | ||
| − | dnf module install php:remi-8. | + | dnf module install php:remi-8.3 |
dnf install httpd | dnf install httpd | ||
systemctl restart httpd | systemctl restart httpd | ||
| + | systemctl enable httpd | ||
</pre> | </pre> | ||
| Zeile 208: | Zeile 192: | ||
RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)" | RedirectMatch 404 "^(?!/\.well-known/acme-challenge/[\w-]{43}$)" | ||
</Directory> | </Directory> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
__EOF__ | __EOF__ | ||
| Zeile 331: | Zeile 310: | ||
<pre> | <pre> | ||
| − | vim /etc/webmin/miniserv. | + | vim /etc/webmin/miniserv.conf |
| − | |||
| − | |||
keyfile=/etc/webmin/privkey.pem | keyfile=/etc/webmin/privkey.pem | ||
extracas=/etc/webmin/chain.pem | extracas=/etc/webmin/chain.pem | ||
| Zeile 374: | Zeile 351: | ||
=== Alle Webseiten auf https umleiten === | === Alle Webseiten auf https umleiten === | ||
<pre> | <pre> | ||
| − | cat > http2https.conf << __EOF__ | + | cat > /etc/httpd/conf.d/http2https.conf << __EOF__ |
| − | <VirtualHost | + | <VirtualHost 81.169.197.241:80> |
############################################################### | ############################################################### | ||
# Alle untenangegebenen Server auf https umlenken | # Alle untenangegebenen Server auf https umlenken | ||
| Zeile 381: | Zeile 358: | ||
# Webmaster: Karl Schlicker | # Webmaster: Karl Schlicker | ||
# Angelegt: Karl Schlicker (karl@schlicker.org) | # Angelegt: Karl Schlicker (karl@schlicker.org) | ||
| − | # am: | + | # am: 2024-10-06 |
# Gruppe: | # Gruppe: | ||
############################################################### | ############################################################### | ||
| Zeile 387: | Zeile 364: | ||
# mail.afdb.de | # mail.afdb.de | ||
| − | ServerName | + | ServerName mail1.afdb.de |
ServerAlias server1.afdb.de | ServerAlias server1.afdb.de | ||
| Zeile 418: | Zeile 395: | ||
<pre> | <pre> | ||
| − | cat > server1.afdb.de.conf << __EOF__ | + | cat > /etc/httpd/conf.d/server1.afdb.de.conf << __EOF__ |
| − | <VirtualHost | + | <VirtualHost 81.169.197.241:443> |
#------------------------------------------------------------------------- | #------------------------------------------------------------------------- | ||
# server1.afdb.de | # server1.afdb.de | ||
| Zeile 425: | Zeile 402: | ||
# webmaster : webmaster@schlicker.org | # webmaster : webmaster@schlicker.org | ||
# betreiber [email] : karl | # betreiber [email] : karl | ||
| − | # angelegt [von] : | + | # angelegt [von] : 2024-10-06 [karl] |
# gruppe : wwwgrp01 | # gruppe : wwwgrp01 | ||
# | # | ||
| Zeile 437: | Zeile 414: | ||
CustomLog /www/default/logs/server1_access.log combined | CustomLog /www/default/logs/server1_access.log combined | ||
ErrorLog /www/default/logs/server1_error.log | ErrorLog /www/default/logs/server1_error.log | ||
| + | |||
| + | SSLEngine on | ||
| + | SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 | ||
| + | SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4" | ||
| + | SSLHonorCipherOrder on | ||
| + | SSLCompression off | ||
| + | SSLSessionTickets off | ||
| + | |||
| + | SSLCertificateFile /etc/letsencrypt/live/admin1.afdb.de/cert.pem | ||
| + | SSLCertificateKeyFile /etc/letsencrypt/live/admin1.afdb.de/privkey.pem | ||
| + | SSLCertificateChainFile /etc/letsencrypt/live/admin1.afdb.de/fullchain.pem | ||
| + | |||
| + | SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 | ||
| + | Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" | ||
DirectoryIndex index.html index.php | DirectoryIndex index.html index.php | ||
| Zeile 447: | Zeile 438: | ||
</VirtualHost> | </VirtualHost> | ||
__EOF__ | __EOF__ | ||
| + | |||
| + | systemctl restart httpd | ||
</pre> | </pre> | ||
| + | |||
== ftp-Server einrichten == | == ftp-Server einrichten == | ||
| Zeile 513: | Zeile 507: | ||
2. Dann die Daten '''/etc/vsftpd/server1_nossl.conf''' erstellen | 2. Dann die Daten '''/etc/vsftpd/server1_nossl.conf''' erstellen | ||
<pre> | <pre> | ||
| − | + | cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/server1_nossl.conf | |
| − | + | cat > /etc/vsftpd/server1_nossl.conf << __EOF__ | |
| − | + | # modification ktsadmin 20241006 | |
| − | + | xferlog_file=/var/log/vsftpd/admin1_xferlog.log | |
| − | + | ftpd_banner=Welcome to admin1.afdb.de FTP service. | |
| − | + | listen_address=85.214.99.209 | |
__EOF__ | __EOF__ | ||
</pre> | </pre> | ||
| Zeile 524: | Zeile 518: | ||
3. Dann die Daten '''/etc/vsftpd/server1_ssl.conf''' erstellen | 3. Dann die Daten '''/etc/vsftpd/server1_ssl.conf''' erstellen | ||
<pre> | <pre> | ||
| − | + | cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/server1_ssl.conf | |
cat > /etc/vsftpd/server1_ssl.conf << __EOF__ | cat > /etc/vsftpd/server1_ssl.conf << __EOF__ | ||
| − | # modification ktsadmin | + | # modification ktsadmin 20241006 |
xferlog_file=/var/log/vsftpd/server1_xferlog.log | xferlog_file=/var/log/vsftpd/server1_xferlog.log | ||
ftpd_banner=Welcome to server1.afdb.de FTP service. | ftpd_banner=Welcome to server1.afdb.de FTP service. | ||
| − | listen_address= | + | listen_address=81.169.197.241 |
ls_recurse_enable=NO | ls_recurse_enable=NO | ||
| Zeile 548: | Zeile 542: | ||
<pre> | <pre> | ||
systemctl enable vsftpd@server1_nossl.service | systemctl enable vsftpd@server1_nossl.service | ||
| − | |||
systemctl enable vsftpd@server1_ssl.service | systemctl enable vsftpd@server1_ssl.service | ||
| − | + | systemctl enable vsftpd.target | |
</pre> | </pre> | ||
| Zeile 625: | Zeile 618: | ||
=== Testlauf === | === Testlauf === | ||
<pre> | <pre> | ||
| − | /etc/reoback/run_reoback.sh | + | /etc/reoback/run_reoback.sh |
| + | </pre> | ||
| + | |||
| + | Danach sollten auf dem ftp-Server neue Tarballs vorhanden sein. | ||
| + | |||
| + | === Überprüfung === | ||
| + | |||
| + | einen weiteren Cronjob einrichten | ||
| + | <pre> | ||
| + | cat > /etc/cron.d/check_backup << __EOT__ | ||
| + | MAILTO=root | ||
| + | SHELL=/bin/bash | ||
| + | |||
| + | # backup ftp checken | ||
| + | 58 12 * * * root /root/check_backup.sh | ||
| + | 03 05 * * * root /root/delete_old_backup.sh >> /var/log/reoback/delete_old_backup.log 2>&1 | ||
| + | __EOT__ | ||
</pre> | </pre> | ||
| + | |||
| + | und dazu von einem existieren Server die beiden Skript '''check_backup.sh''' und '''delete_old_backup''' auf den neuen Server nach '''/root''' kopieren. | ||
| + | |||
| + | Danach sollte jeden Tag um ca. 13:00 eine Mail erstelt werden, die den Inhalt des ftp-Servers anzeigt. | ||
== rkhunter == | == rkhunter == | ||
Aktuelle Version vom 19. Oktober 2024, 11:36 Uhr
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.4-1.7.el9.noarch.rpm wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-release-9.4-1.7.el9.noarch.rpm wget https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/os/Packages/r/rocky-repos-9.4-1.7.el9.noarch.rpm # Alle Pakete identifizieren, die AlmaLinux-typisch sind und diese löschen rpm -qa|grep alma rpm -e --nodeps almalinux-gpg-keys-9.4-1.el9.x86_64 almalinux-release-9.4-1.el9.x86_64 almalinux-repos-9.4-1.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 2.IP einrichten
Zuerst schauen, wie der Name der Verbinung lautet
nmcli con show NAME UUID TYPE DEVICE main 19337dbe-a8d6-5f13-bbec-dada0cb7d5ee ethernet eno1 lo b7a5d2d8-7a40-4425-ac22-6de414305a8b loopback lo <pre> Anschließend 2. IP-Adresse zur Verbindung hinzufügen und auch Reboot fest machen <pre> nmcli connection modify main +ipv4.addresses 85.214.99.209/32 nmcli connection up main nmcli connection reload nmcli connection modify main connection.autoconnect yes
Danach schauen, ob die 2. IP anliegt
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 00:25:90:47:40:cd 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 00:25:90:47:40:cc brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 85.214.99.209/32 scope global noprefixroute eno1
valid_lft forever preferred_lft forever
inet 81.169.197.241/32 scope global dynamic noprefixroute eno1
valid_lft 86394sec preferred_lft 86394sec
inet6 fe80::ae72:efb5:a13e:1296/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Zum Abschluß reboot durchführen und schauen, ob auch alles wirklich geklappt hat.
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)
Webmin installieren
cd /usr/local/src wget https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh sh setup-repos.sh dnf install webmin
anschließend webmin anpassen, auf 2. IP-Adresse binden und ssl erst mal auschalten
vim /etc/webmin/miniserv.conf bind=85.214.99.209 listen=443 port=443 systemctl restart webmin
nun läuft Webmin auf der 2.IP über https (https://2ip)
Letsencrypt installieren
Da das epel-Repository vorhanden ist, kann man direkt certbot installieren
dnf install certbot python3-certbot-apache
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 und php Vers. 8.3 installieren
cd /usr/local/src/ 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.3 dnf install httpd systemctl restart httpd systemctl enable 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__
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
groupadd -g 1005 wwwgrp01
usermod -aG wwwgrp01 apache
cd /etc/httpd/conf.d/
cat > admin1.afdb.de.conf << __EOF__
<VirtualHost 85.214.91.231:80>
#-------------------------------------------------------------------------
# admin4.afdb.de
#
# webmaster : webmaster@schlicker.org
# betreiber [email] : karl
# angelegt [von] : 2022-12-28 [karl]
# gruppe : wwwgrp01
#
#-------------------------------------------------------------------------
# General setup for the virtual host
DocumentRoot /www/default/www
ServerName admin1.afdb.de
ServerAdmin karl@schlicker.org
CustomLog /www/default/logs/admin1_access.log combined
ErrorLog /www/default/logs/admin1_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.conf 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 > /etc/httpd/conf.d/http2https.conf << __EOF__
<VirtualHost 81.169.197.241:80>
###############################################################
# Alle untenangegebenen Server auf https umlenken
# Besitzer: Karl Schlicker
# Webmaster: Karl Schlicker
# Angelegt: Karl Schlicker (karl@schlicker.org)
# am: 2024-10-06
# Gruppe:
###############################################################
DocumentRoot /www/default/www
# mail.afdb.de
ServerName mail1.afdb.de
ServerAlias server1.afdb.de
ServerAdmin karl@schlicker.org
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 server1.afdb.de anlegen
cat > /etc/httpd/conf.d/server1.afdb.de.conf << __EOF__ <VirtualHost 81.169.197.241:443> #------------------------------------------------------------------------- # server1.afdb.de # # webmaster : webmaster@schlicker.org # betreiber [email] : karl # angelegt [von] : 2024-10-06 [karl] # gruppe : wwwgrp01 # #------------------------------------------------------------------------- # General setup for the virtual host DocumentRoot /www/default/www ServerName server1.afdb.de ServerAdmin karl@schlicker.org CustomLog /www/default/logs/server1_access.log combined ErrorLog /www/default/logs/server1_error.log SSLEngine on SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4" SSLHonorCipherOrder on SSLCompression off SSLSessionTickets off SSLCertificateFile /etc/letsencrypt/live/admin1.afdb.de/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/admin1.afdb.de/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/admin1.afdb.de/fullchain.pem SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" DirectoryIndex index.html index.php <Directory "/www/default/www/"> Require all granted RewriteEngine On </Directory> </VirtualHost> __EOF__ systemctl restart httpd
ftp-Server einrichten
Paket vsftpd installieren
dnf install vsftpd Letzte Prüfung auf abgelaufene Metadaten: vor 3:02:44 am Mo 15 Mai 2023 08:32:00 CEST. Abhängigkeiten sind aufgelöst. ======================================================================================================================================================================= Paket Architektur Version Paketquelle Größe ======================================================================================================================================================================= Installieren: vsftpd x86_64 3.0.3-49.el9 appstream 158 k Transaktionszusammenfassung ======================================================================================================================================================================= Installieren 1 Paket Gesamte Downloadgröße: 158 k Installationsgröße: 348 k Ist dies in Ordnung? [j/N]: j Pakete werden heruntergeladen: vsftpd-3.0.3-49.el9.x86_64.rpm 761 kB/s | 158 kB 00:00 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- Gesamt 356 kB/s | 158 kB 00:00 Transaktionsüberprüfung wird ausgeführt Transaktionsüberprüfung war erfolgreich. Transaktion wird getestet Transaktionstest war erfolgreich. Transaktion wird ausgeführt Vorbereitung läuft : 1/1 Installieren : vsftpd-3.0.3-49.el9.x86_64 1/1 Ausgeführtes Scriptlet: vsftpd-3.0.3-49.el9.x86_64 1/1 Überprüfung läuft : vsftpd-3.0.3-49.el9.x86_64 1/1 Installiert: vsftpd-3.0.3-49.el9.x86_64 Fertig!
vsftp konfigurieren
1. Zuerst die Datei /etc/vsftpd/vsftpd.conf editieren
listen_ipv6=NO pam_service_name=vsftpd userlist_enable=YES chroot_local_user=YES allow_writeable_chroot=YES # tuning idle_session_timeout=120 data_connection_timeout=300 accept_timeout=60 connect_timeout=60 anon_max_rate=50000 pasv_min_port=40000 pasv_max_port=60000
2. Dann die Daten /etc/vsftpd/server1_nossl.conf erstellen
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/server1_nossl.conf cat > /etc/vsftpd/server1_nossl.conf << __EOF__ # modification ktsadmin 20241006 xferlog_file=/var/log/vsftpd/admin1_xferlog.log ftpd_banner=Welcome to admin1.afdb.de FTP service. listen_address=85.214.99.209 __EOF__
3. Dann die Daten /etc/vsftpd/server1_ssl.conf erstellen
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/server1_ssl.conf cat > /etc/vsftpd/server1_ssl.conf << __EOF__ # modification ktsadmin 20241006 xferlog_file=/var/log/vsftpd/server1_xferlog.log ftpd_banner=Welcome to server1.afdb.de FTP service. listen_address=81.169.197.241 ls_recurse_enable=NO # ssl enable ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=NO ssl_tlsv1_1=NO ssl_tlsv1_2=YES rsa_cert_file=/etc/letsencrypt/live/admin1.afdb.de/cert.pem rsa_private_key_file=/etc/letsencrypt/live/admin1.afdb.de/privkey.pem __EOF__
vsftpd Autostart einstellen
systemctl enable vsftpd@server1_nossl.service systemctl enable vsftpd@server1_ssl.service systemctl enable vsftpd.target
Mail einrichten
siehe QMAIL-Toaster
reoback
Auf reoback basierendes Backup einrichten, hierbei werden verschiedene Tarballs generiert und auf einem anderen ftp-Server gesichert.
Installation
Von einem Bestandsystem das aktuelle reoback.sh Skript kopieren und auf dem Zielsystem ausführbar unter /usr/local/sbin/reoback.sh ablegen.
cd /usr/local/sbin scp -P 9999 reoback.sh ktsadmin@admin1.afdb.de:~/ ktsadmin@admin1.afdb.de's password: reoback.sh
auf admin1.
dnf -y install curl bzip2 cd /usr/local/sbin/ mv /home/ktsadmin/reoback.sh /usr/local/sbin/reoback.sh chown root.root reoback.sh
Von einem Bestandssystem die Datei aus /etc/reoback auf das Zielsystem kopieren.
cd /etc/reoback scp -P 9999 *.sh ktsadmin@admin1.afdb.de:~/ ktsadmin@admin1.afdb.de's password: make_mail_files.sh 100% 2324 174.7KB/s 00:00 make_www_files.sh 100% 1704 521.6KB/s 00:00 run_reoback.sh
und dann auf admin1.
mkdir /etc/reoback cd /etc/reoback mv /home/ktsadmin/make*.sh /etc/reoback mv /home/ktsadmin/run_reoback.sh /etc/reoback chmod 700 * chown root.root *
Genauso verfährt man dann für jeden Ordner unterhalb von /etc/reoback und kopiert in jeden Unterordner die beiden Daten files.conf und settings.conf
Konfiguration
Anschließend wird in jedem Ordner unterhalb /etc/reoback/ die Datei 'settings.conf angepasst.
Die Datei files.conf wird für die Ordner www und mail über ein Skript erzeugt
/etc/reoback/make_www_files.sh /etc/reoback/make_mail_files.sh
Cronjob
cat > /etc/cron.d/reoback << __EOT__ MAILTO=info@schlicker.org SHELL=/bin/bash # Backup Server 5 4 * * * root /etc/reoback/run_reoback.sh >> /var/log/reoback/reoback.log 2>&1 # Backup-Konfiguration anpassen jeden Sonntag um 03:03 3 3 * * 0 root /etc/reoback/make_mail_files.sh >> /dev/null 2>&1 3 3 * * 0 root /etc/reoback/make_www_files.sh >> /dev/null 2>&1 __EOT__
Testlauf
/etc/reoback/run_reoback.sh
Danach sollten auf dem ftp-Server neue Tarballs vorhanden sein.
Überprüfung
einen weiteren Cronjob einrichten
cat > /etc/cron.d/check_backup << __EOT__ MAILTO=root SHELL=/bin/bash # backup ftp checken 58 12 * * * root /root/check_backup.sh 03 05 * * * root /root/delete_old_backup.sh >> /var/log/reoback/delete_old_backup.log 2>&1 __EOT__
und dazu von einem existieren Server die beiden Skript check_backup.sh und delete_old_backup auf den neuen Server nach /root kopieren.
Danach sollte jeden Tag um ca. 13:00 eine Mail erstelt werden, die den Inhalt des ftp-Servers anzeigt.
rkhunter
rkhunter (Rootkit Hunter) ist ein Linux-Werkzeug, welches nach Rootkits, Hintertüren und möglichen lokalen Exploits sucht. Dabei vergleicht es vorhandene Dateien anhand von MD5-hashes mit kompromittierten Dateien, sucht nach von Rootkits angelegten Ordnern, falschen Dateirechten, versteckten Dateien, verdächtigen Strings in Kernelmodulen und führt eine Reihe weiterer Tests durch.
Installation
dnf install -y rkhunter
Konfiguration
anschließend die Datei /etc/rkhunter.conf anpassen
MAIL-ON-WARNING=server@schlicker.org
MAIL_CMD=mail -s "[rkhunter] Warnings found for admin1.afdb.de [${HOST_NAME}]"
LANGUAGE=de
LOGFILE=/var/log/rkhunter/rkhunter.log
ALLOW_SSH_ROOT_USER=no
ALLOW_SSH_PROT_V1=2
Die übrigen Einstellungen lässt man zuerst auf default, anschließend führt man zuerst ein Update aus
Schwachstellen und Sprachedateien update
rkhunter --update [ Rootkit Hunter Version 1.4.6 ] Überprüfung der Daten-Dateien von rkhunter... Überprüfe Datei mirrors.dat [ Keine Aktualisierung ] Überprüfe Datei programs_bad.dat [ Keine Aktualisierung ] Überprüfe Datei backdoorports.dat [ Keine Aktualisierung ] Überprüfe Datei suspscan.dat [ Keine Aktualisierung ] Überprüfe Datei i18n/cn [ Keine Aktualisierung ] Überprüfe Datei i18n/de [ Keine Aktualisierung ] Überprüfe Datei i18n/en [ Keine Aktualisierung ] Überprüfe Datei i18n/tr [ Keine Aktualisierung ] Überprüfe Datei i18n/tr.utf8 [ Keine Aktualisierung ] Überprüfe Datei i18n/zh [ Keine Aktualisierung ] Überprüfe Datei i18n/zh.utf8 [ Keine Aktualisierung ] Überprüfe Datei i18n/ja [ Keine Aktualisierung ]
1. Testlauf und Analyse des Ergebnisses
danach macht man ein PropUpd für den aktuellen Stand
rkhunter --propupd [ Rootkit Hunter Version 1.4.6 ] Datei aktualisiert: gesucht wurden 176 Dateien, gefunden wurden 134
und Schluß ein Check ohne das eine Warning-Mail versendet wird. Hier kann man schauen, ob in der Konfiguration alle Parameter korrekt gesetzt sind.
rkhunter -c --nomow
...
zusammenfassung der Systemüberprüfung
=====================================
Dateieigenschaften-Überprüfung...
Dateien überprüft: 134
Verdächtige Dateien: 0
Rootkit-Überprüfungen...
Rootkits überprüft : 494
Mögliche Rootkits: 0
Anwendungs-Überprüfungen...
Alle Überprüfungen übersprungen
Dauer der System-Überprüfung: 1 minute and 45 seconds
Alle Ergebnisse wurden in die Log-Datei geschrieben (/var/log/rkhunter/rkhunter.log)
Keine Warnungen während der System-Überprüfung gefunden.
bind mit dnssec
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