Firewall: Port blockieren und nur für einzelne IPs freigeben


Mit iptables und wenigen Befehlen kann man sehr leicht einen Port nur für einzelne IPs freigeben. In diesem Beispiel sperren wir den MySQL Port (Standard: 3306) für alle und geben einzelne IPs frei, die weiterhin darauf zugreifen dürfen. Bei wechselnden IPs müsste man die Regeln jedes Mal erneut anlegen.

Einzelne IPs freigeben
Zuerst geben wir alle IPs frei, die danach weiterhin zugreifen dürfen. So verhindern wird, dass die MySQL Verbindungen unterbrochen werden, wenn wir die Sperr-Regel hinzufügen. Beispielsweise geben wir nun 1.2.3.4 und 4.3.2.1 als IP für den MySQL-Port frei:

iptables -A INPUT -p tcp --src 1.2.3.4 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --src 4.3.2.1 --dport 3306 -j ACCEPT

Port nun für alle Anderen sperren
Nun sperren wir endgültig den MySQL Port für alle Anderen, die wir vorhin nicht freigegeben haben:

iptables -A INPUT -p tcp --dport 3306 -j DROP

IPv6 Protokoll
Sollte primär oder auch zusätzlich das neue IPv6-Protokoll verwendet werden, so müssen die Regeln ebenfalls für IPv6 eingestellt werden. Also geben wir erneut als ersten Schritt die IPv6 IPs frei:

ip6tables -A INPUT -p tcp --src 2a01:4f8:191:3481::1 --dport 3306 -j ACCEPT
ip6tables -A INPUT -p tcp --src 2a01:4f8:191:3481::2 --dport 3306 -j ACCEPT

…oder das gesamte /64 Subnetz mit dem Befehl:

ip6tables -A INPUT -p tcp --src 2a01:4f8:191:3481::/64 --dport 3306 -j ACCEPT

Am Ende müssen wir nun den Port für alle anderen Ipv6 Adressen ebenfalls blockieren:

ip6tables -A INPUT -p tcp --dport 3306 -j DROP

Hinweise

  • MySQL lauscht bei der Einstellung “bind-address 0.0.0.0” nur auf IPv4 und nicht auf IPv6. Damit MySQL auf allen IPv6 Interfaces lauscht, muss stattdessen der Wert “bind-address ::” angegeben werden.
  • Sollte eine Regel falsch hinzugefügt worden sein, muss man alle Regeln aus iptables entfernen und von erneut beginnen. Die Regeln lassen sich mit iptables -F bzw. ip6tables -F flushen (= leeren).
  • Mehrere Ports (Port-Bereiche) können mit einem Doppelpunkt definiert werden. Zum Beispiel Port 100 bis 200: ip6tables -A INPUT -p tcp –dport 100:200 -j DROP

Abschlusswort
Wie man sehen kann, gibt es zwischen IPv4 und IPv6 nur einen kleinen Unterschied: Zwar muss man unbedingt dafür ip6tables dafür verwenden.

Als großes Manko gilt leider, dass es unter den Linux Kernel 3.7 kein IPv6 NAT gibt – das bedeutet, dass man nicht so einfach wie bei IPv4 einzelne Ports an andere IP Adressen weiterleiten kann. Es gibt Community Patches für Kernel Versionen unter 3.7, die es ebenfalls ermöglichen, nur ist dafür eine eigene Kompilation des Kernels erforderlich (was bei unerfahrenen Benutzern schlecht enden könnte!)

Wie das blockieren bzw. freigeben einzelner IPs (alle Ports) möglich ist, habe ich bereits kurz in einem eigenen Artikel erwähnt: Linux: IP mit iptables blockieren und freigeben

KVM: qcow2 Disk-Image mit Hilfe von qemu mounten


Bei der Virtualisierungstechnologie KVM gibt es verschiedenste Disk-Formate bei der Erstellung zur Auswahl – eines dieser Formate ist qcow2. Nach der Löschung einer KVM Maschine, benötigte ich die Daten der virtuellen Festplatte erneut und hatte zum Glück noch ein Backup zur Hand. Mit Hilfe von qemu-nbd ist es möglich, das Image problemlos in einen Ordner zu mounten.

Das Mounten des Images geht wie folgt:
modprobe nbd max_part=8 # Kernel-Modul laden
qemu-nbd --connect=/dev/nbd0 /home/kvm/100/hdd.qcow2 # Image als Device hinzufügen
mount /dev/nbd0p1 /mnt/ # erste Partition der HDD nach /mnt mounten

Nun kann man einfach auf die Daten unter /mnt/ zugreifen.
Zum Trennen werden folgende Befehle benötigt:

umount /mnt/ # Ordner unmounten
qemu-nbd --disconnect /dev/nbd0 # Device trennen

Jetpack Sharing: Weitere Abfragen verhindern


Die meisten WordPress Benutzer werden höchstwahrscheinlich das Plugin namens “Jetpack” kennen und unter den vielen verschiedenen Module auch die “Sharing”-Funktionalität. Das Modul fügt Facebook, Twitter & Co unter jedem Post ein, um das Teilen der Beiträge zu erleichtern. Zusätzlich ruft das Modul von den Seiten ab, wie oft dieser Link nun schon geteilt wird. Gerade diese mehrere Zugriffe auf externe Seiten, wenn mehrere Posts auf einer Seite angezeigt werden, können das Laden der Seite etwas verzögern.

Aus diesem Grund hab ich mir den Code des Sharedaddy-Moduls genauer angesehen und herausgefunden, wie man die externe Zugriffe auf Facebook & Co unterbinden kann. Dazu öffnet die folgende Datei in einem Editor:

/wp-content/plugins/jetpack/modules/sharedaddy/sharing.js

Und ändert diese beiden Zeilen (Zeile 50 und 51)

$( document ).on( 'ready', WPCOMSharing_do );
$( document.body ).on( 'post-load', WPCOMSharing_do );

in folgende um:

/*$( document ).on( 'ready', WPCOMSharing_do );*/
/*$( document.body ).on( 'post-load', WPCOMSharing_do );*/

Nun wird nicht mehr angezeigt, wie oft welcher Beitrag geteilt wurde und sparrt somit etwas Ladezeit. Leider wird die Änderung bei jedem Update des Plugins überschrieben und muss somit erneut übernommen werden.

Linux QuickTipp: DTRX – intelligentes Entpackungstool


DTRX – Do The Right Extraction!
So nennt sich das kleine und ebenso feine Tool, welches komprimierte Archive automatisch richtig und bequem entpackt. Viele kennen sich das die Problematik, dass man für jede verschiedene komprimierte Datei wie .tar.gz, .bz2 & Co eigene Befehle braucht, um diese entpacken zu können. “Entpacke richtig!” (die deutsche Übersetzung davon) erkennt automatisch das Format und wendet die korrekte Entpackung an.

Installiert wird das Tool wie üblich mit dem Paketmanager:

apt-get install dtrx

Ausgeführt wird dies wie folgt:

dtrx KomprimierteDatei

DTRX unterstützt die Formate tar, zip (selbstentpackende .exe Dateien), cpio, rpm, deb, gem, 7z, cab, rar, InstallShield Dateien und kann unter anderem auch mit gzip, bzip2, lzma oder compress komprimierte Dateien entpacken. Zur Vereinfachung bietet das Tool auch noch eine -r (Rekursive) Option, um weitere komprimierte Inhalte einer komprimierten Datei automatisch zu entpacken. (via)