torsdag 10 april 2014

Cisco, Palo Alto Networks och användar-id: lösningen

Jag har haft lite strul med att plocka ut användar-id från Cisco Wireless LAN Controllers och mata in det i Palo Alto Networks brandvägg.

Jag har dock knäckt det.

Det script jag använde har jag modifierat till följande:
--------- SNIP! ---------
#!/bin/bash
snmp_community="public"
snmp_host="1.1.1.1"
rm -f /tmp/wlc.txt
IFS=$'\n'
while [ "1" -ne "2" ]
do
 Unique_OID=($(snmpwalk -v 2c -O x -c $snmp_community $snmp_host 1.3.6.1.4.1.14179.2.1.4.1.1))
 Client_IP=($(snmpwalk -v 2c -c $snmp_community $snmp_host 1.3.6.1.4.1.14179.2.1.4.1.2))
 Client_Username=($(snmpwalk -v 2c -c $snmp_community $snmp_host 1.3.6.1.4.1.14179.2.1.4.1.3))
 count1=${#Unique_OID[@]}
 count2=${#Client_IP[@]}
 count3=${#Client_Username[@]}
 if [ "$count1" -eq "$count2" ]; then
                  if [ "$count2" -eq "$count3" ]; then
                                                                  break
         fi
 fi
done
wait
index=0
while [ "$index" -lt "$count1" ]
      do  
          id=$(echo ${Unique_OID[$index]} | cut -d "=" -f1 | awk -F "." '{print $8 "."$9 "." $10 "." $11 "." $12 "." $13 }')
          cIP=$(echo ${Client_IP[$index]} | grep $id | awk -F " " '{print $4}')
          cUser=$(echo ${Client_Username[$index]} | grep $id | awk -F " " '{print $4}' | sed s/\"//g)
          if [[ $cUser = TEST* ]] || [[ $cUser != "" ]] && [[ $cUser != host* ]] && [[ $cIP != "0.0.0.0" ]]; then
                if [[ $cUser = TEST* ]]; then                        
                    echo "SYSTEM=CISCO IP="$cIP "USER="$cUser >> /tmp/wlc.txt
                else                        
                    echo "SYSTEM=CISCO IP="$cIP "USER=TEST\\\\"$cUser >> /tmp/wlc.txt
                fi
          fi
     ((index++))
     done
logger -d -f /tmp/wlc.txt -n 172.17.1.101 -P 514
--------- SNIP! ---------

Det var väl inte så svårt?
Det jag gör är alltså att skapa en fil med innehållet Etikett (SYSTEM=CISCO), IP= (själva adressen) och USER= (användarnamnet), de två sistnämnda drar jag ut via SNMPWalk från WLC:n.
Problemet med att vissa användare inte dök upp var för att de inte hade vårt domännamn som prefix och brandväggen därför inte kunde slå upp dem via Active Directory. Så för dem användarnamn som saknar domännamn skjuter jag helt enkelt in det framför deras namn och skriver ner dem i filen.

Scriptet är testat och fungerar på Ciscos 5508. Det fungerar dock högst sporadiskt på Ciscos 4xxx men de börjar bli så gamla att de börjar fasas ut (vi gör det).

På Palo Alto:n ska du in under Device -> User Identification -> User Mapping -> Palo Alto Networks User ID Agent Setup (Klicka på kugghjulet (Edit)). I dialogen som kommer upp ska du till Syslog Filters. Där skapar du ett nytt filter enligt nedan:


Du är inte riktigt färdig ännu. Du ska också in under Device -> User Identification -> User Mapping -> Server Monitoring, klicka på Add.
Lägg till en ny enligt följande:

Märk väl att ditt filter heter Test om du följt mitt exempel enligt ovan istället för, som i mitt fall, LS-ID.
Glöm inte att köra en commit på dina ändringar. Sätt scriptet att köra med lämpligt intervall via cron och njut av att se när du kan identifiera de trådlösa användarna i din brandvägg.

Och ja, man kunde lika gärna tagit bort domännamnet i filen man genererar och skjuta in den i fältet Default Domain name i sista dialogen.

Verifierat och fungerar med PAN-OS 6.0.1.

Inga kommentarer:

Skicka en kommentar