Probleme mit iOS 15 und 1Blocker

Seit dem Update auf iOS 15.1 hatte ich auf meinem iPhone ein seltsames Verhalten beobachtet. Sobald ich nur noch im Mobilfunk-Netz eingewählt war, konnten bestimmte URLs per DNS nicht mehr aufgelöst werden. Im Grunde fühlte es sich so an, als ob das halbe Internet nicht mehr erreichbar war.

Über die Einstellungen von 1Blocker kann das Problem umgangen werden

Nach einiger Analyse stellte ich dann fest, das die Probleme im Zusammenhang mit der App 1Blocker bzw. deren In-App-Tracker-Firewall, welche als lokales VPN unter iOS konfiguriert wird, standen.

‎1Blocker - Ad Blocker
Preis: Kostenlos+

Nach Auskunft des Entwicklers der App gab es unter iOS wohl einige Änderungen an den Einstellungen für mobiles Netzwerk, die auch die App betreffen. In den Einstellungen der Firewall von 1Blocker kann der Filtermodus auf HTTP Proxy gesetzt werden. Anschließend funktioniert die In-App-Tracker-Firewall auch bei mobilem Internet wieder.

Downloads über youtube-dl per Bash-Funktion in der Z shell unter macOS nutzen

Vor ein paar Tagen hatte ich darüber geschrieben, wie es möglich ist mittels youtube-dl nur den MP4-Stream eines Videos herunterzuladen. Wenn das Kommando öfter benutzt werden soll, ist es etwas umständlich und wenig einprägsam.

Um das Kommando einfacher zugänglich zu machen, kann eine Bash-Funktion definiert werden. Unter macOS muss diese in der entsprechenden Konfigurationsdatei der Z shell angelegt werden:

nano ~/.zshrc

Anschließend kann die entsprechende Funktion in der Datei definiert werden:

yd ()
{
  youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]' "$1"
}

Nachdem das Terminal neu gestartet wurde, kann das Kommando wie folgt benutzt werden:

yd YouTubeID123

Anschließend startet der Download wie gehabt und das Kommando geht in Zukunft wesentlich einfacher von der Hand.

Passwort einer verschlüsselten PDF ermitteln

Vor einigen Tagen stand ich vor dem Problem ein PDF mit Vertragsunterlagen öffnen zu wollen, welches allerdings mit einem Passwort geschützt war. Und wie es Murphys Gesetz vorschreibt, hatte ich das entsprechende Passwort natürlich verlegt.

Mithilfe der Software PDFCrack, kann ein solches Passwort wieder hergestellt werden. Dazu muss die Software erst installiert werden, unter macOS z. B. mittels Homebrew:

brew install pdfcrack

Unter Linux steht PDFCrack über die entsprechenden Paketmanager ebenfalls zur Verfügung. Anschließend kann damit begonnen werden das Passwort zu ermitteln:

pdfcrack -f encrypted.pdf

PDFCrack beginnt nun damit alle möglichen Passwörter durchzuprobieren; bis schlussendlich das richtige Passwort gefunden wurde:

Security Handler: Standard
V: 2
R: 3
P: -1852
Length: 128
Encrypted Metadata: True
FileID: 382bbf6cdba9941cfd35bd21e6dbas0b68
U: 07556c324622f519b6838c213136129500000000000000000000000000000000
O: 9fb467e3c673228ac08571dab482b385da99ada024cf952ef8f8489d6f680d226
Average Speed: 84554.6 w/s. Current Word: 'O4eg'
Average Speed: 84246.6 w/s. Current Word: '9ojn'
Average Speed: 84455.9 w/s. Current Word: 'ZOou'

Wird der Prozess abgebrochen; so wird der aktuelle Status in der einer sav-Datei abgespeichert. Leider ist PDFCrack nicht Multithreading fähig; sodass es von mehreren Prozessorkernen leider nicht profitiert und der Vorgang somit entsprechend lange dauert.

Etherpad unter Ubuntu installieren

Bei Etherpad handelt es sich um einen Editor für kollaboratives Schreiben, welcher selbst gehostet werden kann. Soll Etherpad unter Ubuntu gehostet werden, muss im ersten Schritt Node.js installiert werden:

apt install -y libssl-dev
curl -sL https://deb.nodesource.com/setup_14.x | bash -
apt install -y nodejs

Anschließend wird ein Nutzer für Etherpad angelegt und in diesen gewechselt werden und dort der Quellcode für Etherpad heruntergeladen und initial einmal gestartet und dann mittels Strg + C wieder beendet:

adduser --disabled-login --gecos "" etherpad
su - etherpad
git clone --branch master https://github.com/ether/etherpad-lite.git
cd etherpad-lite
npm install sqlite3
src/bin/run.sh

Nun werden einige Konfigurationen vorgenommen. Im Groben werden die Datenbank, die Authentifikation, Vorbereitungen für den Reverse Proxy, die Nutzer und die maximale Länge von einzufügendem Inhalt und das Log konfiguriert:

nano etherpad-lite/settings.json

Die Änderungen sind in ihrer Reihenfolge in der Konfigurationsdatei angegeben:

...

"dbType": "sqlite",
"dbSettings": {
  "filename": "var/sqlite.db"
},

...

"requireAuthentication": true,

...

"trustProxy": true,

...

"users": {
"admin": {
  // 1) "password" can be replaced with "hash" if you install ep_hash_auth
  // 2) please note that if password is null, the user will not be created
  "password": "example",
  "is_admin": true
},
"user": {
  // 1) "password" can be replaced with "hash" if you install ep_hash_auth
  // 2) please note that if password is null, the user will not be created
  "password": "example",
  "is_admin": false
}
},

...

"socketIo": {
/*
 * Maximum permitted client message size (in bytes). All messages from
 * clients that are larger than this will be rejected. Large values make it
 * possible to paste large amounts of text, and plugins may require a larger
 * value to work properly, but increasing the value increases susceptibility
 * to denial of service attacks (malicious clients can exhaust memory).
 */
"maxHttpBufferSize": 1048576
},

...

"logconfig" :
{ "appenders": [
    { "type": "console"
    //, "category": "access"// only logs pad access
    }

  , { "type": "file"
  , "filename": "etherpad.log"
  , "maxLogSize": 1024000
  , "backups": 3 // how many log files there're gonna be at max
    }

...

Anschließend wird der Kontext des Nutzers etherpad verlassen und eine neue Service-Unit für systemd angelegt:

exit
nano /etc/systemd/system/etherpad.service

Diese wird mit folgendem Inhalt befüllt:

[Unit]
Description=Etherpad
After=syslog.target
After=network.target

[Service]
Type=simple
User=etherpad
Group=etherpad
Environment="NODE_ENV=production"
ExecStart=/home/etherpad/etherpad-lite/src/bin/run.sh
Restart=always

[Install]
WantedBy=multi-user.target

Nachdem die Datei angelegt wurde, kann der Service aktiviert und gestartet werden:

systemctl enable etherpad
systemctl start etherpad

Lokal ist der Service nun per HTTP unter dem Port 9001 erreichbar. Damit der Service auch von außen erreichbar ist, kann Nginx als Reverse Proxy konfiguriert werden. Dazu muss die entsprechende Konfiguration hinterlegt werden:

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl_certificate        /etc/letsencrypt/live/example.org/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/example.org/privkey.pem;

    server_name example.org;

    client_max_body_size 512m;

    location / {

        # Set proxy headers
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # These are important to support WebSockets
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        # Make sure to set your Etherpad port number
        proxy_pass http://localhost:9001;
    }
}

Damit steht Etherpad auch von außen unter der entsprechenden Domain zur Verfügung und kann benutzt werden.

Foundry VTT unter Ubuntu als Service installieren

Bei Foundry VTT handelt es sich um eine Virtual Tabletop-Plattform, welche selbst gehostet werden kann. Daneben existieren Versionen für macOS und Windows. Soll Foundry VTT unter Ubuntu gehostet werden, muss im ersten Schritt Node.js installiert werden:

apt install -y libssl-dev
curl -sL https://deb.nodesource.com/setup_14.x | bash -
apt install -y nodejs

Anschließend kann ein Nutzer für Foundry VTT angelegt werden und in diesen gewechselt werden:

adduser --disabled-login --gecos "" foundryvtt
su - foundryvtt
mkdir foundry

Nachdem das aktuelle Release von Foundry VTT heruntergeladen wurde, sollte dieses im Ordner foundry entpackt werden:

cd foundry
unzip foundryvtt.zip
rm foundryvtt.zip

Anschließend wird der Kontext des Nutzers foundryvtt verlassen und eine neue Service-Unit für systemd angelegt:

exit
nano /etc/systemd/system/foundryvtt.service

Diese wird mit folgendem Inhalt befüllt:

[Unit]
Description=Foundry VTT
After=syslog.target
After=network.target

[Service]
Type=simple
User=foundryvtt
Group=foundryvtt
ExecStart=/usr/bin/node /home/foundryvtt/foundry/resources/app/main.js --dataPath=/home/foundryvtt/foundrydata
Restart=always

[Install]
WantedBy=multi-user.target

Nachdem die Datei angelegt wurde, kann der Service aktiviert und gestartet werden:

systemctl enable foundryvtt
systemctl start foundryvtt

Lokal ist der Service nun per HTTP unter dem Port 30000 erreichbar. Damit der Service auch von außen erreichbar ist, kann Nginx als Reverse Proxy konfiguriert werden. Dazu muss die entsprechende Konfiguration hinterlegt werden:

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl_certificate        /etc/letsencrypt/live/example.org/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/example.org/privkey.pem;

    server_name example.org;

    client_max_body_size 512m;

    location / {

        # Set proxy headers
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # These are important to support WebSockets
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

        # Make sure to set your Foundry VTT port number
        proxy_pass http://localhost:30000;
    }
}

Damit steht Foundry VTT auch von außen unter der entsprechenden Domain zur Verfügung und kann benutzt werden.