Distributionswechsel auf CloudLinux -- IP-Weiterleitung / Portweiterleitung via socat

Aus Glaskugel
Zur Navigation springen Zur Suche springen

Wenn ein neuer Server und alle darauf angelegten Domains unter der IP des alten (Quell-) servers erreichbar gemacht werden sollen, empfiehlt sich immer die die IP-Weiterleitung.

Aber auch bei Massenmigrationen, bei denen eine neue IP in Kauf genommen wird, sollte eine IP-Weiterleitung vom alten auf den neuen Server erfolgen. Stichworte: DNS-Cache, TTL, externe Domainverwaltung

Migration aller Abos vom Quellserver auf den Zielserver

1. Stoppe auf dem Quellserver den iptables und fail2ban Dienst
service fail2ban stop && service iptables stop
Beziehungsweise stoppe die Plesk Firewall sofern diese schon im Einsatz ist.
1a. Sofern installiert und aktiv, stoppe in Plesk den Watchdog
2. Starte auf dem Zielserver den Migrationsmanager und migriere ALLE Kundenabos. Das dauert etwas. Mache in der Zwischenzeit etwas anderes. Richte zum Beispiel den nächsten Zielserver ein.
Schaue inwieweit Du die erhaltenen Warnmeldung vor der Migration auf dem Quellserver beheben must, oder ob Du diese Warnungen ignorieren, bzw. die Fehler auf dem Zielserver beheben kannst.
2a. Nachdem zunächst mal alle Abos auf dem Zielserver gelandet sind, passe noch keine Servicepakete o.ä. an, denn Du willst zum mit dem Kunden vereinbarten Termin noch einmal eine finale Synchronisierung machen.
[3. Anlegen der Sym-Links, so wie sie auf dem Quellserver auch bestanden haben]*
Dieser Schritt ist notwendig, weil Du sicherlich nicht Lust hast den Dokumentenstamm in jedem einzelnen Abo und jeder Kundeninstallation anzupassen.
Leider wurde früher mit diesen Symlinks gearbeitet, damit der Kunde nicht "var/www/vhosts/web1.wwwx.hostkraft.de/httpdocs" als Dokumentenpfad verwenden musste, sondern nur "/var/www/web1". Rächt sich jetzt und bei jeder Migration, sollte also tendenziell im Nachgang behoben werden.
[3a. Symlink erstellen (sudo -i)]*
Zum Beispiel für einen Symlink von web1.www12.hostkraft.de auf web1
cd /var/www/ && ln -s /var/www/vhosts/web1.www12.hostkraft.de/ /var/www/web1
* Nur bei Migrationen innerhalb CentOS oder CentOS->Almalinux o.ä. möglich
3. Schaue, welche Symlinks auf dem Quellserver bestanden haben und passe die Konfigurationen der Shopsysteme und .htaccess auf den komplett Dokumentenstamm an.
4. Der Migrator legt in vielen Fällen kein "selector dir" für die migrierten User an. Du machst das also einmal global. (sudo -i)
/usr/sbin/cagefsctl --rebuild-alt-php-ini && /usr/sbin/cagefsctl --force-update
Dieser Schritt ist nach jeder Synchronisation erforderlich!
5. Wähle nun in Plesk, im Kundenabo, via PHP-Selector die vom Kunden verwendete PHP-Version aus.
6. Finale Synchronisierung der Kundendaten
Gehe dazu in den Migrations Manager, klicke vorn auf die IP der Migration und in dem darauf folgenden Fenster findest du die Option [Erneut synchronisieren]
6. Nachdem die Abos final synchronisiert sind, passe unbedingt die mit migrierten Servicepakete an, ordne dem migrierten Kunden am besten ein passendes aktuelles Paket zu
Ressorcen
"Acronis Backup Limit" -> 7
Berechtigungen
"Verwaltung des Zugriffs auf den Server via SSH" -> Zugriff nur auf chrooted-Umgebung erlauben
"Verwaltung von PHP-Version und -Handler" -> DEAKTIVIEREN
"Backup und Wiederherstellung der Abonnement-Daten mittels Serverspeicher" -> AUS
"Backup und Wiederherstellung der Abonnement-Daten mithilfe des Remote-Speichers" -> AUS
"Acronis Backup" AKTIVIEREN
"Weitere verfügbare Berechtigungen anzeigen" -> "Verwaltung von Domains" -> DEAKTIVIEREN
Hosting-Parameter >
"Webbenutzer dürfen Skripte nutzen" -> aktivieren
"FastCGI-Unterstützung" -> aktivieren
PHP-Einstellungen
"HP-Unterstützung (PHP-Version)" -> eine fastcgi Version auswählen

Die eigentliche Portweiterleitung vom Quellserver auf den neuen Zielserver

1. Logge Dich als User "root" auf dem Quellserver ein

Die Weiterleitung wird über den Dienst SOCAT realisiert. Hierfür benötigst Du neben socat, ein Script

(Installation "socat" siehe weiter unten "Zusatzinformationen")

1. Scriptdownload

wget --user=Shopbenutzer12 --password='9k2aS2s' -P /root/ https://www.estugo.de/files/scripts/umzugspaket.zip unzip -o umzugspaket.zip

2. Oder Script anlegen

mcedit socat.sh

Inhalt:

#!/bin/bash

ulimit -n 64000

socat -s TCP-LISTEN:143,fork,reuseaddr,bind=$1 TCP:$2:143 &

socat -s TCP-LISTEN:587,fork,reuseaddr,bind=$1 TCP:$2:587 &

socat -s TCP-LISTEN:80,fork,reuseaddr,bind=$1 TCP:$2:80 &

socat -s TCP-LISTEN:465,fork,reuseaddr,bind=$1 TCP:$2:465 &

socat -s TCP-LISTEN:25,fork,reuseaddr,bind=$1 TCP:$2:25 &

socat -s TCP-LISTEN:443,fork,reuseaddr,bind=$1 TCP:$2:443 &

socat -s TCP-LISTEN:110,fork,reuseaddr,bind=$1 TCP:$2:110 &

socat -s TCP-LISTEN:993,fork,reuseaddr,bind=$1 TCP:$2:993 &

socat -s TCP-LISTEN:995,fork,reuseaddr,bind=$1 TCP:$2:995 &

socat -s TCP-LISTEN:21,fork,reuseaddr,bind=$1 TCP:$2:21 &

socat -s TCP-LISTEN:20,fork,reuseaddr,bind=$1 TCP:$2:20 &

socat -s TCP-LISTEN:989,fork,reuseaddr,bind=$1 TCP:$2:989 &

socat -s TCP-LISTEN:990,fork,reuseaddr,bind=$1 TCP:$2:990 &

socat -s TCP-LISTEN:8443,fork,reuseaddr,bind=$1 TCP:$2:8443 &

socat -s TCP-LISTEN:8447,fork,reuseaddr,bind=$1 TCP:$2:8447 &

socat -s TCP-LISTEN:3306,fork,reuseaddr,bind=$1 TCP:$2:3306 &

socat -s TCP-LISTEN:7080,fork,reuseaddr,bind=$1 TCP:$2:7080 &

socat -s TCP-LISTEN:7081,fork,reuseaddr,bind=$1 TCP:$2:7081 &

socat -s TCP-LISTEN:8880,fork,reuseaddr,bind=$1 TCP:$2:8880 &

socat -s TCP-LISTEN:953,fork,reuseaddr,bind=$1 TCP:$2:953 &

socat -s TCP-LISTEN:53,fork,reuseaddr,bind=$1 TCP:$2:53 &

socat -s UDP-LISTEN:53,fork,reuseaddr,bind=$1 UDP:$2:53 &

Ports können hier nach Bedarf weggelassen oder hinzugefügt werden.

2. Script ausführbar machen

chmod +x socat.sh

Alle Dienste stoppen, die das Script "umleiten" soll und Umleitung starten

1. Alle für die Weiterleitung relevanten Dienste müssen natürlich gestoppt werden, damit sie nicht mehr auf den Ports lauschen, auf die socat nun zugreifen soll. (siehe ganz unten)

Erst im Anschluss kann eine Portweiterleitung per socat erfolgen.

2. Gestartet wird die Weiterleitung dann mittels

./socat.sh QUELL-IP ZIEL-IP

Bitte beachte, dass für die Dauer dieser Weiterleitung der fail2ban auf dem Zielsystem beendet werden oder die IP des Quellsystems in die Whitelist werden sollte, damit die Quell-IP nicht ggf. durch den fail2ban blockiert wird.

3. Noch ein Tipp
Damit die Weiterleitungen rebootfest sind, die nicht mehr benötigten Dienste mittels
CentOS7 -> systemctl disable $Service
CentOS6 -> chkconfig $Service off

nicht mehr automatisch starteten lassen und das

./socat.sh QUELL-IP ZIEL-IP

in /etc/rc.local eintragen.

4. Info an Dogado, dass der Switch der IP-Adressen von Quellserver und Zielserver erfolgen soll.

Arbeite hier mit der ContainerID, denn die Server haben den gleichen Namen!

Prüfe die Erreichbarkeit der Kundendomains

Im besten Fall hast Du eine Liste der Domains, die VOR dem Start des Scripts auf dem Quellserver funktionierten und prüfst nun, ob jede dieser Domains auf dem neuen Server ebenso funktioniert.

Deaktiviere den Server in Zabbix, denn sonst würde Dir andauernd gemeldet, dass der Server down ist.

Shared-Server: http://sharon.estugo.de/

Managed-vServer: http://zabbix.estugo.de/zabbix/ oder http://mamonix.estugo.de/

Configuration > Hosts > Status -> Dort einfach auf "Enabled" klicken -> ändert sich zu disabled

Was ist nach dem IP-Switch zu erledigen?

Wenn Dogado bestätigt hat, dass der Switch der IP von Alt auf Neu erfolgt ist, muss Plesk entsprechend rekonfiguriert werden. (Beachte den nachfolgenden Punkt hierzu)

Remapping der IP auf dem Zielserver WICHTIG!

Hinweis: Die neue IP darf nicht unter Plesk> Extras & Einstellungen> IP-Adressen hinzugefügt werden, bevor Du die folgenden Anweisungen anwendest. Entfernen die IP, falls Du sie bereits hinzugefügt hast!

Plesk macht sehr genaue Angaben wie dieser Vorgang erfolgen soll: https://support.plesk.com/hc/en-us/articles/115001761193-How-to-change-the-IP-address-of-the-Plesk-server-

Hinzufügen des "neuen" Servers zu Zabbix

1. Lösche den Host, den Du am Vorabend deaktiviert hast aus Zabbix (Shabbix)
2. Installiere den zabbix-Agenten auf dem neuen Server. Dieser verbindet sich dann ganz von alleine mit dem Zabbix/Shabbix und fügt den Server dort hinzu
Wechseln in das Zabbix-Verzeichnis
cd /root/zabbix_bereitstellung
Ausführen des Installationsscripts
bash AddNodeToZabbix.sh

Stoppen des alten Servers

1. Stoppe den alten Server und sende Deinen Kollegen die neuen Zugangsdaten
2. Um Speicherplatz freizugeben und auch die IP wieder verfügbar zu haben, setze Dir einen Termin für die Löschung des alten Servers +14 Tage

Zusatzinformationen

Freilich muss zunächst socat installiert werden. Das ist auf Maschinen mit CentOS6 nicht zu einfach, aber es geht:

Die einfache Installation via yum scheitert zuverlässig daran, dass es für CentOS6 keine Standard yum-Repos mehr gibt. Alles was Du via yum machen willst, scheitert also.
1. Du musst also yum erstmal ein funktionierende Repos geben

curl https://www.getpagespeed.com/files/centos6-eol.repo --output /etc/yum.repos.d/CentOS-Base.repo

Der Befehl zieht sich eine yum-Repo-Konfiguration mit funktionierenden Repos und schreibt diese gleich in die entsprechende yum-Konfiguration
Genau nachlesen kannst Du das hier https://www.getpagespeed.com/server-setup/how-to-fix-yum-after-centos-6-went-eol
2. Spezielles Repo für socat hinzufügen

rpm -Uvh https://forensics.cert.org/cert-forensics-tools-release-el6.rpm

3. Installation von socat unter Verwendung dieses Repos

yum --enablerepo=forensics install socat

4. Repo deaktivieren (man weiß ja nie)

rpm -e cert-forensics-tools-release

Zu stoppende Dienste könnten sein:

service postfix stop && service saslauthd stop && service courier-authdaemon stop
service xinetd stop
service spamassassin stop
service psa stop
service sw-engine stop
service sw-cp-server stop
service courier-imapd stop && service courier-imaps stop
service courier-pop3d stop && service courier-pop3s stop
service crond stop
service mysqld stop
service mariadbd stop
service httpd stop && service nginx stop && service zabbix-agent stop

Hinterher via ps faux schauen ob noch Dienste laufen und ggfs. via netstat -tulpn schauen, ob noch ein Dienst auf einem Port lauscht den man weiterleiten möchte.