Linux gdrive: Upload zu Google Drive über Command Line

Ich habe nach einer einfachen Möglichkeit gesucht, meine Dateien (in diesem Fall die Datenbank Backups) in meinem Google Drive zu sichern. Dazu müssen die Dateien aber von meinem Ubuntu Server via CLI in mein Drive geladen werden. Gdrive – kein offizielles Tool von Google – macht genau das.

Installation

Download der Linux Version von gdrive von GitHub.

wget https://docs.google.com/uc?id=0B3X9GlR6EmbnWksyTEtCM0VfaFE&export=download

Umbenennen der Datei.

mv uc?id=0B3X9GlR6EmbnWksyTEtCM0VfaFE gdrive

Ausführbar machen.

chmod +x gdrive

Und abschließend installieren.

install gdrive /usr/local/bin/gdrive

Verification Code hinterlegen

Damit der Google Drive Zugriff funktioniert, muss gdrive dafür berechtigt werden. Bei der ersten Ausführung eines gdrive Befehls wird nach dem Verification Code von Google gefragt.

Also einfach ein Auflisten der Dateien initiieren und den Anweisungen folgen. Der Link muss in den Browser kopiert werden, damit der Code generiert werden kann, welcher anschließend übergeben werden muss.

gdrive list

gdrive verification code

Die vollständige Befehlsübersicht gibt es hier.

Upload Ordner erstellen und ID bestimmen

Die hochgeladenen Dateien sollen in einen bestimmten Ordner hochgeladen werden. Gdrive benötigt dazu die ID dieses Ordners. Also wird in Google Drive händisch ein Ordner angelegt namens “DB Backups”. Um die ID dieses Ordners herauszufinden, kann danach gesucht werden.

gdrive list -q "name='DB Backups'"

gdrive search

Upload der Dateien mit gdrive

Dann kann initial die Datei hochgeladen werden.

gdrive upload backup.sql -p 0B8BrwyjZT63ISDdkOU4wNV85Vzg
Uploading backup.sql
Uploaded 0B8BrwyjZT63IcEJCc21jN3FfeGc at 27.5 KB/s, total 35.4 KB

Dabei definiert “-p” den Überordner des Dateiuploads. In dieses Verzeichnis wird die Datei hochgeladen.

Update von Dateien mit gdrive

Da Google Drive mit den IDs arbeitet und nicht mit Dateinamen, werden neu hochgeladene Dateien, die den gleichen Namen haben nicht überschrieben, sondern neu angelegt. Die Datei würde also mehrfach vorhanden sein. Dafür gibt es den “update” Befehl.

Nach dem initialen Upload hat man die IDs der jeweiligen Dateien und kann so das Update der Datei durchführen.

gdrive update 0B8BrwyjZT63INEZxT3RLMHgtcGc backup.sql
Uploading backup.sql
Updated 0B8BrwyjZT63INEZxT3RLMHgtcGc at 25.8 KB/s, total 35.4 KB

Dadurch wird eine neue Revision der Datei angelegt, die von Google 30 Tage lang vorgehalten wird.

Skript für das automatische Backup & den Upload mit gdrive

Mit folgendem Bash Skript werden die Datenbanken gesichert, hochgeladen und anschließend mit dem aktuellen Datum im Namen versehen. Dumps, die älter als 10 Tage sind, werden gelöscht.


#!/bin/bash
now=$(date +"%Y_%m_%d")
echo "Doing database backup with" $now "as date reference"
echo "Saving WordPress"
mysqldump wp -u root -p > /var/backups/wp.sql
echo "Saving Nextcloud"
mysqldump nc -u root -p > /var/backups/nc.sql
echo "Saving Piwik"
mysqldump piwik -u root -p > /var/backups/piwik.sql
echo "Saving Rainloop"
mysqldump rainloop -u root -p > /var/backups/rainloop.sql
echo "Saving Vmail"
mysqldump vmail -u root -p > /var/backups/vmail.sql
echo "Saving done"

echo "Upload to Drive"
gdrive update 0B8BrwyjZT63IT2V0Ymp2NEpCV28 /var/backups/wp.sql
gdrive update 0B8BrwyjZT63IaTRxemx6TTM0akk /var/backups/nc.sql
gdrive update 0B8BrwyjZT63ISUVhMFF1Nzk5R2M /var/backups/piwik.sql
gdrive update 0B8BrwyjZT63IMk5SWXpKclFZekk /var/backups/vmail.sql
gdrive update 0B8BrwyjZT63INGh3YUxYQ2Rkcmc /var/backups/rainloop.sql

echo "Moving dumps to name with timestamp"
mv /var/backups/wp.sql /var/backups/wp-$now.sql
mv /var/backups/nc.sql /var/backups/nc-$now.sql
mv /var/backups/piwik.sql /var/backups/piwik-$now.sql
mv /var/backups/rainloop.sql /var/backups/rainloop-$now.sql
mv /var/backups/vmail.sql /var/backups/vmail-$now.sql

echo "Deleting dumps older than 10 days"
find /var/backups/*.sql -mtime +10 -type f -delete -print
echo "done."

Advertisements

OpenVPN Server unter Ubuntu aufsetzen

Wie setzt man einen OpenVPN Server auf, um sich z.B. im öffentlichen WLAN abzusichern?

OpenVPN ist ein Programm zOpenVPN Logoum Aufbau eines Virtuellen Privaten Netzwerkes (VPN) über eine verschlüsselte TLS-Verbindung. Zur Verschlüsselung werden die Bibliotheken des Programmes OpenSSL benutzt. Es verwendet wahlweise UDP oder TCP zum Transport.

OpenVPN ist freie Software unter der GNU GPL und unterstützt die Betriebssysteme Linux, Solaris, OpenBSD, FreeBSD, NetBSD, Mac OS X, QNX, Windows 2000/XP/Vista/7/8, Android, iOS, Maemo und MeeGo sowie das Router-Linux OpenWRT, weiterhin stehen angepasste Implementierungen für eine Vielzahl von Linux-basierten Endgeräten, wie z. B. Settop-Boxen der Firma Dream Multimedia oder für Router der FRITZ!Box-Linie der Firma AVM zur Verfügung.

— Artikel in Wikipedia

Download des openvpn-install.sh Skripts

wget https://git.io/vpn -O openvpn-install.sh
--2016-12-21 10:24:08-- https://git.io/vpn
Resolving git.io (git.io)... 23.23.117.228, 107.21.206.81, 107.21.249.214, ...
Connecting to git.io (git.io)|23.23.117.228|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.github.com/Nyr/openvpn-install/master/openvpn-install.sh [following]
--2016-12-21 10:24:10-- https://raw.github.com/Nyr/openvpn-install/master/openvpn-install.sh
Resolving raw.github.com (raw.github.com)... 151.101.12.133
Connecting to raw.github.com (raw.github.com)|151.101.12.133|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://raw.githubusercontent.com/Nyr/openvpn-install/master/openvpn-install.sh [following]
--2016-12-21 10:24:11-- https://raw.githubusercontent.com/Nyr/openvpn-install/master/openvpn-install.sh
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.12.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.12.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13211 (13K) [text/plain]
Saving to: ‘openvpn-install.sh’
100%[======>] 13.211 --.-K/s in 0,01s
2016-12-21 10:24:11 (960 KB/s) - ‘openvpn-install.sh’ saved [13211/13211]

Nun wird das Skript ausführbar gemacht und ausgeführt.

chmod +x openvpn-install.sh
./openvpn-install.sh
Welcome to this quick OpenVPN "road warrior" installer
I need to ask you a few questions before starting the setup
You can leave the default options and just press enter if you are ok with them
First I need to know the IPv4 address of the network interface you want OpenVPN
listening to.
IP address: 1.2.3.4
What port do you want for OpenVPN?
Port: 1337
What DNS do you want to use with the VPN?
1) Current system resolvers
2) Google
3) OpenDNS
4) NTT
5) Hurricane Electric
6) Verisign
DNS [1-6]: 2
Finally, tell me your name for the client cert
Please, use one word only, no special characters
Client name: pixel
Okay, that was all I needed. We are ready to setup your OpenVPN server now
Press any key to continue...

Anschließend werden die Schlüssel generiert und der Serverdienst eingerichtet.

Um die VPN Verbindung bspw. über Android aufzubauen, können die kostenlosen Apps benutzt werden. Bspw. OpenVPN for Android

Zum Einrichten wird nur die Konfigurationsdatei (.ovpn) aus dem Userverzeichnis benötigt, die durch das Skript angelegt wurde.

OpenVPN unter Android
OpenVPN unter Android

Die aktuellen Verbindungen lassen sich der Status Logdatei unter /etc/openvpn/openvpn-status.log entnehmen:

OpenVPN CLIENT LIST
Updated,Wed Dec 21 10:32:24 2016
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
pixel,1.2.3.4:25655,774387,2387112,Wed Dec 21 10:30:23 2016
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.2,pixel,1.2.3.4:25655,Wed Dec 21 10:32:22 2016
GLOBAL STATS
Max bcast/mcast queue length,0

Nagios Core Update 4.2.2

Wie zieht man seine Nagios Installation auf die neuste Version hoch?

Zunächst sollte ein Backup der Konfiguration erstellt werden.

cp /usr/local/nagios/ /usr/local/nagios_backup -R

Anschließend kann das Paket heruntergeladen und entpackt werden.

cd /tmp
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.2.2.tar.gz
tar xzf nagios-4.2.2.tar.gz

Nun wird das Core Skript laufen gelassen, dem man die Gruppe mitgibt, welche Kontrolle über die Command-Datei innehat.

cd nagios-4.2.2/
./configure --with-command-group=nagcmd

Compilieren des Source Codes

make all

Bei Fehlern kann es sein, dass das “unzip” Paket noch nicht installiert wurde. Dann muss es installiert werden und das make Skript nochmals durchgeführt werden.

apt-get install unzip

Installation der Binaries etc.

make install

Prüfen der Konfiguration

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Neustart des Dienstes

/etc/init.d/nagios restart

Mail bei SSH Login

Mit folgendem Skript erhält man eine E-Mail, sobald sich ein Benutzer per SSH einloggt.

Dazu einfach die Datei “sshrc” im SSH Verzeichnis anlegen:

nano /etc/ssh/sshrc

Der Inhalt lautet:

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`

logger -t ssh-wrapper $USER login from $ip
echo "Benutzer $USER hat sich gerade von der IP $ip eingeloggt" | mailx -s "SSH Server Login auf tj-braun.de" "Jens Braun <xyz@tj-braun.de>"

Die Mail wird nun automatisch versendet, sobald sich ein Benutzer per SSH einloggt. Der User bekommt davon nichts mit:

ssh-server-login-auf-tj-braun

 

Cloudflare und Piwik: Anzeige Origin IP

Will man Piwik auf einem Server nutzen, der sich hinter Cloudflare befindet, müssen folgende zwei Dinge beachtet werden:

Apache: Installation von mod_cloudflare

Das Modul mod_cloudflare erlaubt es, die echte IP Adresse des Besuchers in Logs und co. anzuzeigen.

Heruntergeladen werden kann das Modul bei Cloudflare.

Ubuntu:

wget https://www.cloudflare.com/static/misc/mod_cloudflare/ubuntu/mod_cloudflare-xenial-amd64.latest.deb

dpkg -i mod_cloudflare-xenial-amd64.latest.deb

service apache2 restart

Rocket Loader deaktivieren

In den Cloudflare Einstellungen muss unter den Performance Einstellungen der Rocket Loader auf manuell oder aus geschaltet werden.

WordPress und Cloudflare: ERR_SSL_PROTOCOL_ERROR

Nach der Umstellung auf Cloudflare und der Aktiv Schaltung des Dienstes, ist die Seite nicht mehr erreichbar.

ssl_error

Das liegt daran, dass das Zertifikat auf Seiten Cloudflares noch nicht erzeugt und registriert ist. Der Status im Crypto Reiter sollte “Authorizing Certificate” anzeigen.

ssl-authorisierung

Während dieser Zeit werden Fehlermeldungen ausgegeben, wenn man versucht die Seite via https:// aufzurufen.

registrierung

Nach der Registrierung sollte alles einwandfrei laufen und ein SSL Zertifikat von Cloudflare ausgeliefert werden. Im “Free-Modus” kann hier kein anderes Zertifikat wie eins von Let’s Encrypt durchgereicht und angewendet werden!

cert

WordPress und Cloudflare: Einrichtung

Cloudflare ist ein dezentral aufgestelltes Content Delivery Network (CDN) mit anhängigem DNS. Es fungiert als Reverse Proxy und wird vor die eigentlichen Webserver geschaltet. Dadurch kann es als Cache dienen, der die Inhalte schneller bereit stellen kann und die Webseite somit schneller machen kann. CDNs können aber auch bei DDoS Attacken helfen und die Last vom eigentlichen Server fern halten und bei kurzfristigen Downtimes helfen. Ein weiterer Vorteil ist, dass Cloudflare seit einiger Zeit die gecachten Webseiten im neuen HTTP/2-Protokoll ausliefert. Das bringt ebenfalls Geschwindigkeitsvorteile und Google scheint das neue Protokoll pushen zu wollen.

Einrichtung von Cloudflare

Zunächst muss man https://www.cloudflare.com aufrufen, sich dort registrieren und die URL der Webseite eingeben, die man verbinden möchte.

cloudflare-webseite-hinzufuegen

Anschließend werden die aktiven DNS Server der Domain gescannt. Das kann etwas dauern. Als Ergebnis erhält man eine Übersicht über die DNS-Zonen. Eine orange Wolke bedeutet, dass hier ein Caching über Cloudflare eingestellt ist und der Traffic über Cloudflare selbst läuft. Eine graue Wolke bedeutet, dass für diesen Host das Caching deaktiviert ist und Cloudflare lediglich den DNS Dienst übernimmt. Der Traffic wird also weiter über den eigenen Webserver laufen.

Hier wird beispielsweise nur der Traffic zu WordPress gecached. Der Rest nicht.

dns-cloudflare

[fusion_alert type=”general” accent_color=”” background_color=”” border_size=”1px” icon=”” box_shadow=”no” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=””]

Bei den DNS Einträgen ist es wichtig, dass auch wirklich alle Inhalte des bisherigen Providers auf den Cloudflare DNS übernommen werden. TXT Einträge wurden bei mir nicht von Beginn an übernommen und mussten händisch hinterlegt werden.

[/fusion_alert]

Anschließend wird der Plan ausgewählt. “Free” sollte für den Anfang ausreichen. Ein Upgrade ist während des Betriebs unterbrechungsfrei möglich.

DNS/Nameserver einrichten

Nach der Einrichtung muss man die eigene Domain auf Cloudflare umleiten.

Dieser Punkt ist ein Muss. Wer seine DNS-Einstellungen nicht verändern kann, der hat keine Chance, Cloudflare zu nutzen. Insbesondere User, die Webseite und Hosting beim gleichen Anbieter haben, können hier Probleme bekommen.

change-nameserver

Änderung anhand INWX

Da ich als Domainregistrar INWX nutze, wird die Umstellung hier an dem Beispiel erläutert.

Ein einfaches Abändern der DNS Server bzw. NS Records der Domain ist nicht möglich, da der SOA Eintrag fix auf den ersten DNS Server zeigt und es so zu Loops kommen kann und die Namensauflösung nicht mehr sauber funktioniert. Aus diesem Grund muss die komplette Domain auf einen externen DNS Server ausgelagert werden. Das ist in dem Fall Cloudflare.

Dazu ruft man die Domainliste auf, wählt die betroffene Domain und klickt in der Übersicht auf externe Nameserver. Dort werden dann die von Cloudflare vorgegebenen DNS Server hinterlegt.

externe-nameserver-inwx

Nachdem die Cloudflare-Nameserver eingetragen wurden, kann es bis zu 24 Stunden dauern, bis alles reibungslos funktioniert.

Die korrekten Einstellungen kann man auf Seiten wie mxtoolbox.com testen.

mxtoolbox-dns-check

Bis die DNS Einstellungen übernommen wurden wird auf der Cloudflare Seite der Pending Status ausgerufen.

cloudflare-web-performance-security

Status nach erfolgreicher Inbetriebnahme:

cloudflare-overview

Kontrolle der Auslieferung via Cloudflare

Trotz des “Active” Status kann es sein, dass die Webseite immer noch über den eigentlichen Webserver ausgeliefert wird. Das passiert immer dann, wenn der Cache-Header “no-store, no-chache” ausliefert. Dadurch erhält Cloudflare die Anweisung, dass die Webseite nicht im Cache abgelegt werden darf und muss jeden Aufruf wieder auf den Webserver weiterleiten. Dadurch kann keine Geschwindigkeitsoptimierung erfolgen.

Kontrolliert werden kann der Cache-Header z.B. durch den Befehl curl -I https://www.tj-braun.de

curl

Hat man diese Header Definition (WordPress setzt sie bspw.) gibt es dennoch eine Lösung: Cloudflare Page Rules. Das sind Regeln (von denen man in der Free-Version 3 definieren kann), die dafür sorgen, dass die Webseiten dennoch gespeichert und ausgeliefert werden.

Dafür unter dem Tab “Page Rules” zuerst das Pattern für die Webseite eintragen http://www.domain.tld/* und dann folgende Regel erstellen:

Custom Caching: Cache everything

Sometimes cache headers are set on the server-side or by a CMS solution like WordPress. If you choose to Cache Everything, CloudFlare will respect these headers unless you choose to overwrite them.

Edge cache expire TTL

To overwrite any default headers, choose a time from the drop-down menu. This is the refetch time for when CloudFlare checks the origin server for a new resource.

 

cache

Damit der Admin Bereich nicht gecached wird, wird eine zweite Regel erstellt.

Pattern: http://www.domain.tld/wp-*
Custom caching: Bypass cache

[fusion_alert type=”general” accent_color=”” background_color=”” border_size=”1px” icon=”” box_shadow=”no” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=””]

Die Einstellung des Admin Bereichs muss VOR der allgemeinen Definition stehen, damit der Admin Bereich auch wirklich nicht gecached wird.

[/fusion_alert]