Alle Beiträge von Don Matteo

lebt in Zürich, ist System Engineer MCP bei A-Enterprise GmbH. Mitglied des UNBLOG Network. Author und Blogger zu den Themen, Linux und Open Source. Tutorials für Windows, VMware, Synology, Fortinet.

htaccess und Dynamische IP Adressen

Apache htaccess Allow from mit DDNS Dynamischen IP Adressen

Apache Webserver Zugriffsteuerung über htaccess-Datei, für Autorisierten Zugang zu Webseiten.

Mit der Apache direktiveAllow fromist es möglich eine bestimmte IP von der Anmeldeaufforderung auszuschliessen. Dabei ist die Übergabe von Hostnamen und FQDN leider nicht möglich. Anhand des folgenden Scriptes wird die Dynamische IP eines Hostname ausgelesen und in die htaccess-Datei eingetragen.

htaccess mit Dynamischen IP Adressen

Der folgende Shell Script ermöglicht die Auflösung der IP Adresse und schreiben der IP Adresse in die htaccess-Datei. Die folgenden Zeilen in der Konsole mit copy & paste einfügen, damit wird die Script Datei erstellt.

cat << EOF > ./allow_myhost.sh
#!/bin/sh
htpath="/var/www/blog/"
grep -lr "#DDNS" $htpath | while read i; do
sed -i '/#DDNS-IP$/d' $i
grep -i "#DDNS$" $i | while read j; do
words=( $j )
ddns="${words[2]}"
ip="$(host $ddns)"
if [ "$ip" == "${ip%% has address *}" ]; then
continue;
fi
ip="${ip##* has address }"
sed -i 's/^\('"$j"'\)$/\1\nAllow from '"$ip"' #DDNS-IP/' $i
done
done
EOF

 Copy Paste

Der Script schreibt hier auf einem CentOS Host die htaccess-Datei um. Bei ZeileAllow frommit der Marke #DDNS wird der Hostname ausgelesen, auf der nächsten Zeile mit der Marke #DDNS-IP wird die aufgelöste IP des Host geschrieben. Die Pfad VariablehtpathkannDocumentRootoder ein Unterverzeichnis sein, dabei bearbeitet der Script alle vorkommenden .htaccess-Dateien rekursive ab htpath.

Die htaccess-Datei im Webverzeichnis

Die htaccess-Datei wird im Webverzeichnis gespeichert dieses geschützt werden soll. Mit cd in das gewünschten Verzeichnis wechseln und die folgenden Zeilen mit copy & paste in der Konsole einfügen, dies erzeugt die .htaccess-Datei.

cat << EOF > .htaccess
AuthName "A Blog"
AuthType Basic
AuthUserFile /home/jonny/.htpasswd
AuthGroupFile /dev/null
Order deny,allow
Deny from all
require valid-user
Allow from myhome.dyndns.org #DDNS
Allow from 198.51.100.64 #DDNS-IP
Satisfy Any
EOF

 Copy Paste

Die Zeilen mit #DDNS und #DDNS-IP (mit #) dienen zur Markierung.

Der Script muss noch ausführbar gemacht werden.

chmod 755 allow_myhost.sh

Dynamischen IP laufend aktualisieren

Damit die Auflösung der Dynamischen IP laufend aktualisiert wird, kann mitcrontab -eein Cron job erstellt werden.

*/5 * * * * root /home/jonny/allow_myhome.sh >/dev/null 2>&1

Nach restart des Cron Daemon ist der job aktive.

service crond restart

Hinweis:
Ab Apache 2.4 lautet die direktive von zuvorAllow fromnunRequire.
Apache 2.x mod_access_compat

Order deny,allow
Deny from all

Apache 2.4 mod_authz_host

Require all denied

Die von mod_access_compat bereitgestellten Allow-, Deny- und Order-Direktiven sind veraltet und werden in den zukünftigen Version nicht mehr unterstützt. Es wird empfohlen die neuen Direktiven zu verwenden.

Selbst signierte Zertifikate mit OpenSSL erstellen

Mit OpenSSL selbst signierte Zertifikate erstellen, prüfen und verwalten

OpenSSL ist ein vielseitiges Kommandozeilen-Tool, das für eine Vielzahl von Kryptographischen Aufgaben im Zusammenhang mit Public Key Infrastructure (PKI) und HTTPS (HTTP über TLS) verwendet werden kann.

Dieses Tutorial zeigt das erstellen von selbst signierten Zertifikate mit OpenSSL. Für Zertifikate zur asymmetrischen Verschlüsselung in Beta und Testaufgaben. Die für interne oder in Entwicklungsumgebungen eingesetzt werden. Die mit Kosten verbunden, CSR Certificate Signing Request Zertifikate lohnen sich für Testzwecke nicht die von einem Trusted CA Zertifikatsaussteller ausgestellt werden. Hierzu in einem Beispiel die generierung eines privaten Schlüssels mit Zertifikat Ausstellung und dessen Signierung.

Selbst signiertes Zertifikat erstellen

openssl genrsa -out priv.key 4096
openssl req -new -nodes -sha256 -key priv.key -out cert.csr
openssl x509 -req -sha256 -days 3650 -in cert.csr -signkey priv.key -out cert.crt

Bei diesem Beispiel wird ein Privater Schlüssel mit einer länge von 4096 bit generiert, dieser 10 Jahre gültig ist, es werden die X509 Distinguished Key Identifier definiert, mit der Verschlüsselung des SHA256 Algorithmus, abschliessend wird das Zertifikat selbst signiert.

PS C:\temp> openssl genrsa -out priv.key 4096
Generating RSA private key, 4096 bit long modulus
................................++
..................................++
e is 65537 (0x010001)
PS C:\temp> openssl req -new -nodes -sha256 -key priv.key -out cert.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CH
State or Province Name (full name) [Some-State]:ZRH
Locality Name (eg, city) []:ZURICH
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Cyber Lab Ltd.
Organizational Unit Name (eg, section) []:DevOps Root CA Cert Authority
Common Name (e.g. server FQDN or YOUR name) []:cyber.foo.org
Email Address []:support@cyber.foo.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:1234
An optional company name []:1234

Das so generierte Self-signed certificat dient zur Kryptographischen Verschlüsselung für HTTPS / TLS Server und Client, Code Signing, IP End Point Security (SSL-VPN) oder für S/MIME – E-Mail.

Das Zertifikat cert.crt wird anschliessend im Zertifikatspeicher importiert, dies zu Vertrauenswürdige Stammzertifizierungsstellen und zu den Eigenen Zertifikate.

Abbildung: Zertifikat-Snap-In

OpenSSL – Open Secure Socket Layer protocol gehört bei den meisten Linux Distributionen zum Standard, die Windows Binaries stehen auf sourceforge zur Verfügung.

XCA – X Certificate Key Management

Wer mit dem OpenSSL Kommandozeilen-Tool nicht vertraut ist, kann das Tool X Zertifikat – xca verwenden, dieses in einer GUI sämtliche Optionen bietet.

X Zertifikat und Key Management ist eine Schnittstelle für die Verwaltung von asymmetrischen Schlüsseln wie RSA oder DSA. Es ist für die Erstellung und Signierung von Zertifikaten gedacht. Für die kryptographischen Operationen wird die OpenSSL-Bibliothek verwendet.

Features

  • Start own PKI and create all kinds of certificates, requests or CRLs
  • Import and export in any format like PEM, DER, PKCS#7, PKCS#12
  • Use them for your IPsec, OpenVPN, HTTPs or any other certificate based setup
  • Manage your Smart-Cards via PKCS#11 interface
  • Export certificates and requests to a OpenSSL config file
  • Create Subject- and/or Extension- templates to ease issuing similar certs
  • Convert existing certificates or requests to templates
  • Get the broad support of x509v3 extensions as flexible as OpenSSL but user friendlier
  • Adapt the Columns to have your important information at a glance

Download bei sourceforge

Abbildung: X Certificate and Key management

Bevor Schlüssel und Zertifikate generiert werden können, muss eine Datenbank mit <Ctrl+N> angelegt werden. Nach dem generieren eines Privaten Schlüssels kann ein neues Zertifikat erzeugt werden. Die Privaten Schlüssel sollten Passwort geschützt aufbewahrt werden. Wird ein Privater Schlüssel für unautorisierte verfügbar, ist das Zertifikat nicht mehr sicher und muss ersetzt werden.

Schlüssel und Zertifikat überprüfen

Privat Key Prüfen und ausgeben

openssl rsa -check -in priv.key

Zertifikat anzeigen

openssl x509 -noout -text -in cert.crt

Certificate Signing Request Prüfen und ausgeben

openssl req -text -noout -verify -in cert.csr

Überprüfung des Privaten Schlüssels, des CSR und des Zertifikates auf Echtheit.

openssl rsa -noout -modulus -in priv.key | openssl md5
openssl x509 -noout -modulus -in cert.crt | openssl md5
openssl req -noout -modulus -in cert.csr | openssl md5

Wenn die Ausgabe jedes Befehls identisch ist, ist die Wahrscheinlichkeit sehr hoch, dass das Zertifikat und der CSR mit dem private Schlüssel verwandt sind.

Fazit

OpenSSL ist das vielseitige Swiss Army Knife, das für eine Vielzahl von Kryptographischen Aufgaben für asymmetrische Verschlüsselung eingesetzt werden kann, von der Generierung eines privaten Schlüssels mit Zertifikat Ausstellung und dessen Signierung, bis hin zur Überprüfung auf Authentizität mit Verbindungstest der Konnektivität.