Alle Beiträge von Don Matteo

lebt in der Schweiz, ist System Engineer MCP bei A-Enterprise GmbH. Mitglied des UNBLOG Knowledge Network. Author und Blogger zu den Themen, Tutorials für Linux und Open Source.

iptables mit DDNS Adressen

Die Linux Kernel Firewall iptables unterstützt keine FQDN und DDNS Namen in den Ketten, deshalb habe ich hierfür ein einfaches Script erstellt, dieses ein DDNS A Record auflöst und die IPv4 Adresse in die Kette als append chain einfügt.

#!/bin/sh
iptables="/etc/sysconfig/iptables"
sed -i '/#DDNSIP/d' $iptables
lookup="$(grep -i "#MyDDNS" $iptables)"
select=( $lookup )
ddns="${select[2]}"
echo $select $ddns
ip="$(host $ddns)"
if [ "$ip" == "${ip%% has address *}" ]; then
continue;
fi
ip="${ip##* has address }"
sed -i 's/^\('"$lookup"'\)$/\1\n-A RH-Firewall-1-INPUT -i eth0 -p udp -m udp -s '"$ip"' -m comment --comment #DDNSIP -j ACCEPT/' $iptables
service iptables restart

Dieses Shell Skript ist auf einem CentOS geschrieben, ist aber mit kleinen Änderungen auf anderen Linux distributionen einsetzbar, bei Zeile 3 wird der entsprechende Pfad zu iptables angepasst, z.B. für Debian /etc/defaut.

Das Commad host ist Teil der BIND-Dienstprogramme, sodass diese installiert sein müssen. Dazu führt man folgende yum Installation auf der Console aus, um die BIND-Dienstprogramme zu installieren:

sudo yum -y install bind-utils

Es wird eine Zeile mit dem DDNS-Hostnamen in die Konfigurationsdatei iptables eingetragen, der Tag #MyDDNS dient als Marke und muss in der Konfigurationsdatei iptables eingetragen werden:

#Allow from myhost.dyndns.org #MyDDNS
-A RH-Firewall-1-INPUT -i eth0 -p udp -m udp -s 123.456.789.101 -m comment --comment #DDNSIP -j ACCEPT

Die Kette wird mit Parameter -A (Append) automatisch bei der ersten ausführung angehängt. Nicht zu vergessen ist, das Script ausführbar machen:

chmod +x /usr/bin/allow_myhost.sh

Die Quellen IP-Adresse wird automatisch alle 15 Minuten aufgelöst. Die iptables-Kette erlaubt das UDP Protokoll, dieses beispielsweise einem IP-Telefon ermöglicht mit der PBX zu kommunizieren. Die Regel kann beliebig angepasst werden, wobei die Kommentar option –comment vorhanden sein muss.

Für die kontinuierliche Aktualisierung erstellt man ein Cron-Job:

*/15 * * * * root /usr/bin/allow_myhost.sh >/dev/null 2>&1

Dieser Beitrag ist auch auf gist donkey/allow_myhost.md

Amerkung

iptables ist ein Userspace-Programm zur Konfiguration der Tabellen (tables), die durch die Firewall im Linux-Kernel (bestehend aus einer Reihe von Netfilter-Modulen) bereitgestellt werden. Diese Tabellen enthalten Ketten (chains) und Regeln (rules). Verschiedene Programme werden gegenwärtig für unterschiedliche Protokolle verwendet; iptables beschränkt sich auf IPv4, für IPv6 gibt es ip6tables, für ARP ist es arptables, und mit ebtables gibt es eine Sonderkomponente für Ethernet-Frames.

Da iptables erweiterte Systemprivilegien benötigt, muss es als root ausgeführt werden. Auf den meisten Linux-Systemen ist iptables als /usr/sbin/iptables installiert. Dokumentation ist in den Manpages mittels man iptables einsehbar, sofern installiert.

Der Begriff iptables wird auch oft verwendet, um ausschließlich die Kernel-Komponenten zu beschreiben. x_tables ist der Name des Kernelmoduls, der den gemeinsamen Code aller vier Module (v4, v6, arp und eb) trägt, und das API für iptables-Erweiterungen bereitstellt. Folglich ist mit Xtables oft die gesamte Firewall-Infrastruktur gemeint.

Decimal Hexadecimal Umwandlung mit PowerShell

Text in Hexadecimal und Decimal Umwandlung in der PowerShell

ASCII Text in Hexadezimale Zeichen Konverter gibt es als Online Tool im Internet viele. Sollen sensible Daten beim Konvertieren im Internet nicht preisgegeben werden, empfiehlt sich die Umwandlung auf dem eigenen Rechner. Dazu braucht man nicht einmal ein Programm zu installieren, einfach zu bewerkstelligen ist es mit Hexadecimal und Decimal Umwandlung in der PowerShell.

Hierzu PowerShell öffnen und folgenden Befehl ausführen:

PS C:\> notepad $profile

Mit Notepad die Code Zeilen einfügen und speichern:

function text2hex($strg)
{
$txt = $strg.ToCharArray();
Foreach ($value in $txt) {$hex = $hex + ":" + [System.String]::Format("{0:X2}", [System.Convert]::ToUInt32($value))}
$hex
}

Text in Hexadecimal Umwandlung

PowerShell beenden und neu öffnen, nun kann der Befehl text2hex ausgeführt werden.

PS C:\> text2hex https://think.unblog.ch
:68:74:74:70:3A:2F:2F:74:68:69:6E:6B:2E:75:6E:62:6C:6F:67:2E:63:68

Decimal Hexadecimal Binary Umwandlung

Die Umwandlung von Decimal to Binary, Decimal to Hexadecimal und Hexadecimal to Decimal.

// Convert Decimal to Binary
function dec2bin($strg)
{
$dec = $strg
Foreach ($value in $dec) {$bin = [System.Convert]::ToString($value,2)}
$bin
}

// Convert Decimal to Hexadecimal
function dec2hex
{
param($DEC)
Foreach ($value in $DEC) {“{0:x}” -f [Int]$value}
}

// Convert Hexadecimal to Decimal
function hex2dec
{
param($HEX)
Foreach ($value in $HEX) {[Convert]::ToInt32($value,16)}
}

Anmerkung

Im Hexadezimalsystem werden Zahlen in einem Stellenwertsystem zur Basis 16 dargestellt. „Hexadecimal“ ist ein lateinisch-griechisches Mischwort.

Das Hexadezimalsystem eignet sich sehr gut, um Folgen von Bits (in der Digitaltechnik) darzustellen. Vier Stellen einer Bitfolge (ein Nibble) werden wie eine Dualzahl interpretiert und entsprechen so einer Ziffer des Hexadezimalsystems, da 16 die vierte Potenz von 2 ist. Die Hexadezimaldarstellung der Bitfolgen ist leichter zu lesen und schneller zu schreiben:

binärhexadecimaldecimal
1111F15
1.11111F31
11.0111.1100.010137C514.277
1010.1100.1101.1100ACDC44.252
1.0000.0000.0000.00001.000065.536
1010.1111.1111.1110.0000.1000.0001.0101AFFE.08152.952.661.013

Umwandlung von Decimal in Hexadecimal

Eine Möglichkeit, eine Zahl des Dezimalsystems in eine Zahl des Hexadezimalsystems umzurechnen, ist die Betrachtung der Divisionsreste, die entstehen, wenn die Zahl durch die Basis 16 geteilt wird, die Methode wird daher auch Divisionsverfahren oder Restwertverfahren genannt.

Umwandlung von Hexadecimal in Decimal

Um eine Hexadezimalzahl in eine Dezimalzahl umzuwandeln, muss man die einzelnen Ziffern mit der jeweiligen Potenz der Basis multiplizieren. Der Exponent der Basis entspricht der Stelle der Ziffer, wobei der Zahl vor dem Komma eine Null zugeordnet wird. Dazu muss man allerdings noch die Ziffern A, B, C, D, E, F in die entsprechenden Dezimalzahlen 10, 11, 12, 13, 14, 15 umwandeln.