Hallo liebe Leser,

wie schon im letzten Blog angekündigt, möchte ich heute ein wenig über die Command Line Tools (CLI) zum Debuggen schreiben. Sicher sind diese nicht so intuitiv zu bedienen, wie das „klicken“ in der GUI, aber dennoch und da sind wir uns sicher alle einig, stellen sie ein mächtiges und flexibles Werkzeug dar. Was zu dem ja auch skriptfähig ist. Denken wir nur mal an Bash-Skripte oder natürlich auch an TMSH-Skripte. Ja, auch in der TMSH kann man Skripte erstellen!

Sicher brauche ich an dieser Stelle nicht zu sehr auf Befehle wie „less, cat, tail, |, grep,...“ einzugehen. Das sind die typischen Befehle, die wir aus dem Linux Umfeld her kennen und gut zu verwenden sind, um sich beispielsweise Log-Files anzuschauen. Im Bezug auf APM denken wir da insbesondere an „/var/log/apm“. Hier verwende ich immer gerne den Befehl „tail –f /var/log/apm“, während ich Konfigurationen und Tests durchführe, um gleich zu sehen, ob es denn Probleme gibt. Durch Einstellen des Reporting Level kann man dem APM mehr oder weniger gesprächig werden lassen. In der GUI macht man dies unter:

System/Logs/Configuration/Options

clip_image001

Aber da wir ja von CLI-Befehlen sprechen...kann man den Level auch über die TMSH einstellen zum Beispiel mit:

$ tmsh list /sys db log.access.syslog

$ tmsh modify /sys db log.access.syslog value "enable"

$ tmsh modify sys db log.accesscontrol.level value “debug”

$ tmsh modify /sys db log.sso.level { value "Debug" }

$ tmsh save /sys config

Schaut man sich die db Variablen an, bekommt man auch schnell einen Überblick, was noch so alles möglich ist.

Wenn man Variablen verstellt hat und den default Wert nicht mehr kennt, hilft das hier:

$ tmsh modify sys db log.sso.level reset-to-default

Bei Änderungen, die man über die TMSH durchführt, sollte man anschliessend das “tmsh save /sys config” nicht vergessen, damit die neue Konfiguration auch reboot-fest ist.

Apropos Logfiles: „/var/log/ltm“ ist natürlich immer ein gutes Logfile, um nach Problemen oder Informationen genereller Art zu suchen.

Für APM gibt es dann noch die Datei „/var/log/rewrite<x>“. Hier werden Meldungen bzgl. der Rewrite Profile abgespeichert. Das <x> steht hierbei für die CPU, die den Eintrag geschrieben hat.

Möchte man einige Statistiken von APM Profilen einsehen, so hilft einem die TMSH weiter:

clip_image002

Natürlich kann man sich hier auch die Konfiguration ansehen oder auch verändern:

# list apm policy access-policy <NAME>

# modify policy access-policy <NAME>

Kommen wir nun zu einem weiteren Tool, welches sehr hilfreich ist, wenn man Konfigurationen mit dem Active Directory durchführt: adtest

[root@mybigip:Active:Standalone] config # adtest

usage: adtest [options]

-t <auth|query|chgpswd|join|chgmpswd> test type [auth|query|chgpswd|join|chgmpswd]

-n <num> test number [default: 1]

-c <num> concurrency [default: 1] maximum 100 threads

-d <num> debug [default: 0]

-T timing

-r <domain_name> realm

-h <kdc_name> hostname

-p <num> port

-A <admin_name> adminName

-W <admin_pass> adminPassword

-f <filter> filter [default: 'sAMAccountName=<userName>']

-C <cache_root> credential cache file root [default: '/tmp']

-u <user_name> userName

-M <machine_name> machineName

-O <operating_system_name> operatingSystemName

-V <operating_system_version operatingSystemVersion

-E <machine_description> machineDescription

-D <user_domain> userDomain

-w <user_pass> userPassword

-N <new_pass> newPassword

-s check new password against domain password policies

-g fetch primary group

-G fetch nested groups

-P fetch password expiration time

-U cross-realm support (UPN enable)

Hier ein paar Beispiele:

Authentifizierungs-Test mit Username und Passwort:

[root@bigip:Active:Standalone] config # adtest -t auth -r "demo.com" -u administrator -w adminpass

Test done: total tests: 1, success=1, failure=0

Query-Test mit administrativen User und Passwort:

[root@bigip:Active:Standalone] config # adtest -t query -r "demo.com" -A administrator -W adminpass -u testuser -w userpass

Test done: total tests: 1, success=1, failure=0

Spricht man mit LDAP Servern, hilft einem LDAPSearch.

Hier ein Beispiel, dass einem anzeigt, in welchen Gruppen ein User ist:

[root@bigip-demo:Active:Standalone] tmp # ldapsearch -x -H ldap://server1.mattlab.local:389 -D "CN=Administrator,CN=Users,DC=server1,DC=mattlab,DC=local" -w blablug\!@ -b "dc=server1,dc=mattlab,dc=local" '(sAMAccountName=f5)'

# extended LDIF

#

# LDAPv3

# base <dc=server1,dc=mattlab,dc=local> with scope subtree

# filter: (sAMAccountName=f5)

# requesting: ALL

#

# f5, Users, server1.mattlab.local

dn: CN=f5,CN=Users,DC=server1,DC=mattlab,DC=local

objectClass: top

objectClass: person

objectClass: organizationalPerson

objectClass: user

cn: f5

givenName: f5

distinguishedName: CN=f5,CN=Users,DC=server1,DC=mattlab,DC=local

instanceType: 4

whenCreated: 20120515121926.0Z

whenChanged: 20130131130804.0Z

displayName: f5

uSNCreated: 84048

memberOf: CN=resourcegrptest1,CN=Users,DC=server1,DC=mattlab,DC=local

memberOf: CN=Remote Desktop Users,CN=Builtin,DC=server1,DC=mattlab,DC=local

memberOf: CN=Administrators,CN=Builtin,DC=server1,DC=mattlab,DC=local

[root@bigip-demo:Active:Standalone] tmp # ldapsearch -x -H ldap://server1.mattlab.local:389 -D "CN=Administrator,CN=Users,DC=server1,DC=mattlab,DC=local" -w abc123\!@ -b "dc=server1,dc=mattlab,dc=local" '(sAMAccountName=f5)' | grep memberOf

memberOf: CN=resourcegrptest1,CN=Users,DC=server1,DC=mattlab,DC=local

memberOf: CN=Remote Desktop Users,CN=Builtin,DC=server1,DC=mattlab,DC=local

memberOf: CN=Administrators,CN=Builtin,DC=server1,DC=mattlab,DC=local

SecurIDTest

Mit securidtest hat man ein Tool, um das SecurID Modul zu testen:

[root@mybigip:Active:Standalone] config # securidtest

securidtest is a test tool for APD's SecurID Module

usage: securidtest [options]

-t test type [0:multithread, 1:multiprocess]

-n test number[default: 1]

-c concurrency[default: 1]

-m multi-user [default: 0]

-p config path

-s source ip

-u username

-w password

examples:

securidtest -p "/config/aaa/ace/myserver" -s 172.30.8.138 -u medusasecurid -w 123456

OAMTest

APM kann im Zusammenspiel mit dem Oracle Access Manager (OAM) betrieben werden. Zum debuggen hilft hier:

[root@mybigip:Active:Standalone] config # oamtest

usage: oamtest [options]

-i oam sdk install dir

-n test number[default: 1]

-c concurrency[default: 1]

-r resources

-u userName

-w userPassword

-t ObSSOCookie token

-x encoded Certficate

-f certficate filename

-d debug level[default: 5, range: 0-7]

examples:

oamtest -i "/config/aaa/oam/Common/oam10g/oam10gwebgate1" -r "GET https://172.30.8.30/" -u user1 -w abcd1234

oamtest -i "/config/aaa/oam/Common/oam10g/oam10gwebgate1" -r "GET https://172.30.8.30/" -t <ObSSOToken String>

oamtest -i "/config/aaa/oam/Common/oam10g/oam10gwebgate1" -r "GET https://172.30.8.30/" -x <Encoded Certficate String>

oamtest -i "/config/aaa/oam/Common/oam10g/oam10gwebgate1" -r "GET https://172.30.8.30/" -f <certficate file name>

Okay, hiermit bin ich auch schon durch mit meinem zweiten Teil zum Thema APM Debugging. Ich hoffe, es waren ein paar hilfreiche Tipps und Befehle dabei, die bei Problemen helfen.

Zum Schluss noch zwei Links aus der ASKF5 Knowledge Base, die ebenfalls das Thema behandeln:

http://support.f5.com/kb/en-us/solutions/public/13000/500/sol13595.html?sr=22896422#l

http://support.f5.com/kb/en-us/solutions/public/13000/300/sol13384.html?sr=22896422

Ihr F5-Blogger, Sven Müller