Seite wählen

NETWAYS Blog

Zugriff aus bestimmten Ländern verhindern

kim_glassIhr kommt am Morgen vom ersten Kaffee wieder zurück an den Platz und schwups hat Euch ein Kunde aus Nordkorea die Sensoren aus dem Shop weggekauft. Wer kennt das nicht!? Wie also kann die steigende Nachfrage nach Temperatur- und Rauchsensoren aus solchen Ländern unterbunden werden. Auch wenn der Versand schwierig ist würden wir als Dienstleister natürlich gerne helfen, aber wir dürfen doch nicht.
Was also tun um entsprechenden Anfragen direkt in Sonderwirtschaftszone Kaesong umzuleiten? Natürlich hat die schöne Open Source Welt auch für solche Bedürfnisse eine Lösung parat. Mit mod_geoip2 kann man direkt in der entsprechenden Country-DB nachschlagen und entsprechenden Anfragen weiterleiten. Einfach das entsprechende Apache2-Modul laden und nach Anleitung installieren. Anschließend muss nur noch das frei Geodaten-File geladen werden und schon kann die Konfiguration beginnen.
Ein Beispiel der Apache Config:

GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
# Redirect requests for north korea to south korea
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^KP$
RewriteRule ^(.*)$ http://www.dksh.kr$1 [R,L]

In dem Beispiel wird das Modul nach Installation enabled und die entsprechenden Geodaten referenziert. Es gibt verschiedene Versionen der Geodaten bezogen auf Land und Stadt. Wer es etwas detaillierter möchte, kann bei MaxMind gegen Einwurf von Münzen auch regelmässige Aktualisierungen bekommen.
Bei meinem privaten Blog habe ich bereits alle Zugriffe nördlich von Kaesong abgeschaltet; der verbliebene Leser kommt also aus einem anderen Eck!
(Bildquelle: kapsoulstore.com)

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startete er früher das wöchentliche Lexware-Backup, welches er nun endlich automatisiert hat. So investiert er seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinen beiden Söhnen und seiner Tochter.

Weekly Snap: Source Code Pro, Apace & Active Directory, JMX

weekly snap 11 – 15 February introduced new products at our shop and shared tips for programmers and sys admins alike.
Eva began by counting 65 days down to the OSDC with Jochen Lillich’s presentation on Kanban.
Lennart then solved an Apache and Active Directory configuration problem as Johannes trialled Adobe’s coding font, Source Code Pro.
Ronny followed with his quick guide to activating JMX and Christian announced the arrival of new power distribution units by Gude to our online hardware store.
Finally, Georg gave the adjudication reins over to our readers to decide which poet should win our competition for two TKS Supermicro 2HE servers.

LDAP-Filter zur Autorisierung bei rekursiven Gruppen

Bevor wie zum Eingemachten kommen zuerst ein paar klärende Worte zum Titel. Hier ist unter rekursiven Gruppen, eine rekursive Gruppenstruktur gemeint, bei der eine Gruppe eine weitere Gruppe als Mitglied enthalten kann. Der Filter

&(sAMAccountName=__USERNAME__)(member=CN=group,DC=netways,DC=de)

leistet dies leider nicht, so dass Mitglieder einer Gruppe, die Mitglied von CN=group ist, nicht authorisiert sind. Mit dem memberOf-Overlay, ist dies mit einer eingebauten „Funktion“ jedoch leicht möglich:

&(sAMAccountName=__USERNAME__)(memberOf:1.2.840.113556.1.4.1941:=CN=group,DC=netways,DC=de)

Das Active Directory von Microsoft bringt das memberOf-Overlay von Hause aus mit. Bei Openldap kann es als Modul nachgeladen werden.

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof
dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

Eine zur Authentifizierung zusätzliche Autorisierung bei einem Apache-Webserver, wie in SSO bei Apache mit gruppenbezogener Authentifizierung gegen ein Active Directory beschrieben, sähe dann wie folgt aus:

AuthzLDAPAuthoritative on
AuthLDAPURL "ldap://dc.netways.de/dc=netways,dc=de?userPrincipalName"
AuthLDAPBindDN "cn=ads,cn=Users,dc=netways,dc=de"
AuthLDAPBindPassword ********
Require ldap-filter memberOf:1.2.840.113556.1.4.1941:=CN=group,DC=netways,DC=de
Lennart Betz
Lennart Betz
Senior Consultant

Der diplomierte Mathematiker arbeitet bei NETWAYS im Bereich Consulting und bereichert seine Kunden mit seinem Wissen zu Icinga, Nagios und anderen Open Source Administrationstools. Im Büro erleuchtet Lennart seine Kollegen mit fundierten geschichtlichen Vorträgen die seinesgleichen suchen.

Weekly Snap: Update on Updian, SSO in Apache and Perl compilation with PAR::Packer

24 – 28 October looked at the latest version of Updian and shared tips for compiling Perl as well as SSO in Apache.
To begin, Ronny brought us up to scratch on Updian’s latest release. As previously introduced, Updian is a simple update engine for Debian. Compared to v0.2, the new v0.3 has a slicker interface, with sorted lists and generally clearer display of large lists and views. SSH connections can now be specified where the standard port 22 doesn’t apply, and different ports can be used on different servers. To top it off, users of ‘debian-goodies’ can try ’checkrestart’ for a colour-coded view of services for libs that need to be restarted.
Gunnar then introduced the handy PAR::Packer Perl module that compiles Perl scripts with their dependencies linked into a single binary. Platform independent, he showed how to install PAR::Packer on Windows with the help of CPAN and Strawberry Perl. For more info, he recommended http://search.cpan.org/dist/PAR/lib/PAR/Tutorial.pod
Last but not least, Lennart showed how to use ‘single sign on’ (SSO) in Apache with group-specific authentication in an Active Directory environment. Put otherwise, he set out to authenticate a web server via Kerberos ticket and check downstream, whether a user is in a group whose members may access a website. He began by creating a user in Active Directory, and generating a key on the domain controller to which the user is given a principal name. Then he copied the apache2.keytab file to the web server and used kinit to check the apache2.keytab for accuracy, and klist to determine the principal name in advance. Finally, he loaded mod_ldap, mod_authnz_ldap and mod_auth_kerb and configured the browser for SSO access.

SSO bei Apache mit gruppenbezogener Authentifizierung gegen ein Active Directory

Heute soll sich dieser Blogeintrag also um Single Sign On im Apache- und Active Directory-Umfeld drehen. Ziel ist es, sich an einem Webserver per Kerberos-Ticket zu authentifizieren und nachgelagert zu prüfen, ob der Benutzer sich ebenfalls in der Gruppe befindet, dessen Mitglieder Zugriff auf die Wibsite erhalten dürfen.
Zuerst muss ein Benutzer im Active Directory angelegt werden. Danach erzeugen wir auf unserem Domain Controller einen Schlüssel und fügen diesem Benutzer eine PrincipalName hinzu. Also Verschlüsselung wählen wir RC4-HMAC, da dies von Windows XP unterstützt wird. Die ab Windows Server 2008 hinzugekommenden Verschlüsselingen auf AES basierend werden erst von Windows Vista und Windows 7 unterstützt.
ktpass -out apache2.keytab \
   -mapuser www@NETWAYS.DE \
   -princ HTTP/www.netways.de@NETWAYS.DE \
   -pass login123 \
   -ptype KRB5_NT_PRINCIPAL \
   -crypto RC4-HMAC-NT \
In unserem Beispiel haben wir den Benutzer www angelegt. Unsere NS-Domäne lauetet netways.de und unser Kerberos-Realm NETWAYS.DE. Mit dem Kommando ktpass weisen wir nun diesem Benutzer über die Option -mapusr und -princ den PrincipalName HTTP/www.netways.de@NETWAYS.DE zu. Der Schlüssel erhält das Passwort login123 mit +rndpass kann man diesen auch zufällig erzeugen lassen. Erzeugt man den Schlüssel jedoch zufällig, ist es dann aber leider nicht möglich den Schlüssel auf dem Linux-Serverauf Korrektheit zu überprüfen.
Nachdem wir nun den Schlüssel erzeugt haben, kopieren wir die Datei apache2.keytab auf sicherem Wege auf unseren Webserver.
Die Kerberos-Client-Konfiguration /etc/krb5.keytab auf unserem Linux-Server sieht wie folgt aus:
[libdefaults]
     default_realm = NETWAYS.DE
[realms]
     NETWAYS.DE = {
          kdc = dc.netways.de
          default_domain = netways.de
          ktpasswd_server = dc.netways.de
     }
[domain_realm]
     .netways.de = NETWAYS.DE
Unsere apache2.keytab können wir nun mit kinit auf Korrektheit prüfen.
kinit -t /etc/apache2/apache2.keytab HTTP/www.netways.de
Der PrincipalName kann im Vorfeld auch schon mit klist ermittelt werden.
klist -t -k /etc/apache2/apache2.keytab
Für den Apache Webserver werden noch drei zusätzliche Module benötigt. Die Module mod_ldap und mod_authnz_ldap, im Gegensatz zu mod_auth_kerb sind diese beiden Module Bestandteil vom Apache-Paket. Das Module mod_auth_kerb muss nötigenfalls selbst übersetzt werden.
a2enmod auth_kerb
a2enmod ldap
a2enmod authnz_ldap
Für unser Beispiel  benötigen wir noch einen Active Directory Benutzer ads, um auf den LDAP-Server des DC zugreifen zu können. Außerdem die Gruppe ApacheAcces, deren Mitglieder auf unsere Website zu greifen dürfen.
AuthType Kerberos
AuthName "Kerberos Login"
KrbAuthRealm NETWAYS.DE
KrbServiceName HTTP
Krb5Keytab /etc/apache2/apache.keytab
KrbMethodK5Passwd on
KrbMethodNegotiate on
AuthzLDAPAuthoritative on
AuthLDAPURL "ldap://dc.netways.de/dc=netways,dc=de?userPrincipalName"
AuthLDAPBindDN "cn=ads,cn=Users,dc=netways,dc=de"
AuthLDAPBindPassword ********
Require ldap-group cn=ApacheAccess,cn=Users,dc=netways,dc=de
Zu Abschuss nicht vergessen den Browser für den SSO-Zugriff zu konfigurieren. Beim Firefox geschieht dies durch den Aufruf der URL about:config.
network.negotiate-auth.trusted-uris     .netways.de

Weitere Artikel zum Thema:
LDAP-Filter zur Autorisierung bei rekursiven Gruppen
Nochmal Apache und Active Directory

Lennart Betz
Lennart Betz
Senior Consultant

Der diplomierte Mathematiker arbeitet bei NETWAYS im Bereich Consulting und bereichert seine Kunden mit seinem Wissen zu Icinga, Nagios und anderen Open Source Administrationstools. Im Büro erleuchtet Lennart seine Kollegen mit fundierten geschichtlichen Vorträgen die seinesgleichen suchen.