Neuer StratoServer

Aus Wiki schlicker.org
Zur Navigation springen Zur Suche springen

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

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.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@schlicker.org)
# am:          2022-12-31
# Gruppe:      
###############################################################
DocumentRoot /www/default/www

# mail.afdb.de
ServerName mail.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 > server1.afdb.de.conf << __EOF__
<VirtualHost 85.214.25.70:443>
#-------------------------------------------------------------------------
# server1.afdb.de
#
# webmaster         : webmaster@schlicker.org
# betreiber [email] : karl
# angelegt [von]    : 2022-12-31 [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

DirectoryIndex index.html index.php    

<Directory "/www/default/www/">
  Require all granted
  RewriteEngine On
</Directory>

</VirtualHost>
__EOF__

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

  cat > /etc/vsftpd/server1_nossl.conf << __EOF__
  # modification ktsadmin 20230515
  xferlog_file=/var/log/vsftpd/admin1_xferlog.log
  ftpd_banner=Welcome to admin1.afdb.de FTP service.
  listen_address=85.214.91.231
__EOF__

3. Dann die Daten /etc/vsftpd/server1_ssl.conf erstellen

cat > /etc/vsftpd/server1_ssl.conf << __EOF__
# modification ktsadmin 20230515
xferlog_file=/var/log/vsftpd/server1_xferlog.log
ftpd_banner=Welcome to server1.afdb.de FTP service.
listen_address=85.214.25.70
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__

Mail einrichten

siehe QMAIL-Toaster

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