Automatisierte Servereinrichtung
Die Servereinrichtung erfolgt in drei Schritten. Die einzelnen Schritte sind notwendig, da bei der Absicherung des Systems der root Account für die Anmeldung gesperrt wird. Es muss also zwischendurch geprüft werden, ob die Installation wie gewünscht durchgelaufen ist. Ansonsten besteht die Gefahr, dass sich niemand mehr auf dem System anmelden kann.
Die einzelnen Skripte liegen lokal vor (~/Workspace/Kubernetes/vServer) und sind mit scp root@<server-ip>:~ auf den neuen Server zu kopieren. Dort sind ihnen mit chmod +x *.sh die Ausführungsrechte zuzuweisen. Sie werden in dieser Dokumentation in der Reihenfolge, in der sie ausgeführt werden müssen, dargestellt. Der jeweilige User, der ein Skript ausführen sollte, wird in Klammern angegeben. Alle Skripte benötigen root Rechte, sind also ggf. mit sudo auszuführen.
Bitte auch die Hinweise vor Skript 3 beachten!
Skript 1: initServer_1.sh (root)
#! /bin/bash
#
# Check if user has root rights
#
idval=`id -u`
if ((0 != $idval))
then echo "Please run as root (sudo)!"
exit 1
fi
#
# Swap File anlegen, wenn keines existiert
#
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
#
# file2ban installieren und konfigurieren
#
apt update
apt upgrade -y
apt install fail2ban
printf "[sshd]\nenabled = true\nbanaction = iptables-multiport\nbantime = 30m" > /etc/fail2ban/jail.local
systemctl start fail2ban
#
# Neuen Admin-User anlegen
#
useradd -m -U -s /bin/bash -G sudo ralf
passwd ralf
Skript 2: initServer_2.sh (ralf)
#! /bin/bash
#
# Check if user has root rights
#
idval=`id -u`
if ((0 != $idval))
then echo "Please run as root (sudo)!"
exit 1
fi
#
# Harden ssh
#
sed -i -e '/^\(#\|\)PermitRootLogin/s/^.*$/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i -e '/^\(#\|\)PasswordAuthentication/s/^.*$/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i -e '/^\(#\|\)X11Forwarding/s/^.*$/X11Forwarding no/' /etc/ssh/sshd_config
sed -i -e '/^\(#\|\)MaxAuthTries/s/^.*$/MaxAuthTries 2/' /etc/ssh/sshd_config
sed -i -e '/^\(#\|\)AllowTcpForwarding/s/^.*$/AllowTcpForwarding no/' /etc/ssh/sshd_config
sed -i -e '/^\(#\|\)AllowAgentForwarding/s/^.*$/AllowAgentForwarding no/' /etc/ssh/sshd_config
sed -i -e '/^\(#\|\)AuthorizedKeysFile/s/^.*$/AuthorizedKeysFile .ssh\/authorized_keys/' /etc/ssh/sshd_config
sed -i '$a AllowUsers ralf' /etc/ssh/sshd_config
#
# Test sshd configuration and restart sshd (if config is ok)
#
sshd -t
rc=$?
if [ ${rc} -ne 0 ]; then
echo "sshd test reports errors - script stopped"
exit ${rc}
fi
echo "sshd test passed, restart sshd. After restart further root logins are impossible!!"
echo "Please check if all works as expected before logout!"
systemctl restart sshd
exit 0
Skript 3: initServer_3.sh (ralf)
Dieses Skript benötigt bei Neuaufsetzen des Cluster-Servers (1. Server mit --cluster-init) Anpassungen an den Variablen IP1 und ggf. HOST1 (wenn auch der Servername geändert wurde).
#!/bin/bash
#
# Check if user has root rights
#
idval=`id -u`
if ((0 != $idval))
then echo "Please run as root (sudo)!"
exit 1
fi
HOST1="kub-1"
IP1="10.0.0.2"
#
# k3s installieren
#
mkdir -p /etc/rancher/k3s/
printf "disable: traefik\n" > /etc/rancher/k3s/config.yaml
#
# Auf dem ersten V-Server, der als server das Cluster initialisiert:
# Das Token wurde mit dem KeyPassXC Passwordgenerator erstellt
#
hostval=`hostname`
if [ "$hostval" != "$HOST1" ]; then
echo "Install next server ($hostval) in cluster ..."
curl -sfL https://get.k3s.io | K3S_TOKEN=rWeygpe4VFENvXA4u7aT7ANodS2q32N53mq9Jnc4xzLR35HRJjqJnSL5YuD4d2jZ sh -s - server --server https://$IP1:6443
else
ech "Install first server for cluster ..."
curl -sfL https://get.k3s.io | K3S_TOKEN=rWeygpe4VFENvXA4u7aT7ANodS2q32N53mq9Jnc4xzLR35HRJjqJnSL5YuD4d2jZ sh -s - server --cluster-init
fi