ISE Troubleshooting
Authorization Issues
Wrong VLAN Assignment
Symptoms
-
Authentication succeeds but endpoint placed on wrong VLAN
-
Cannot reach expected network resources
-
IP address on unexpected subnet
# Check current IP
ip addr show enp130s0
# Shows: inet 10.50.40.104/24 (VLAN 40 - Research)
# Expected: inet 10.50.10.x/24 (VLAN 10 - Data)
Diagnosis
-
Check ISE session details:
# Source credentials source <(DSEC_SECURITY_MODE=permissive ~/.secrets/bin/dsec source d000 dev/network) # Check which authorization profile was applied netapi ise mnt session 98:bb:1e:1f:a7:13 # Get detailed authorization context netapi ise dc session 98:bb:1e:1f:a7:13 -
Check authorization profile configuration:
# Get profile details (shows VLAN assignment) netapi ise get-authz-profile Linux_EAPTLS_AdminsLook for the
vlanfield:vlan {'nameID': 'RESEARCH_VLAN', 'tagID': 1} ← Wrong VLAN
Resolution
Update the authorization profile with correct VLAN name:
# Update to correct VLAN (use VLAN NAME from switch)
netapi ise update-authz-profile Linux_EAPTLS_Admins --vlan DATA_VLAN
# Verify change
netapi ise get-authz-profile Linux_EAPTLS_Admins
|
CRITICAL: Always use switch VLAN names (e.g., Verify switch VLAN names:
Output:
|
Reconnect to apply new VLAN:
# Reconnect 802.1X
sudo nmcli connection down Wired-802.1X
sudo nmcli connection up Wired-802.1X
# Verify new IP address
ip addr show enp130s0
# Should now show: inet 10.50.10.x/24
DACL Not Applied
Symptoms
-
Authentication succeeds, correct VLAN assigned
-
Network access more restrictive than expected
-
Cannot reach resources that should be accessible
Diagnosis
-
Check if DACL exists:
# List all DACLs netapi ise get-dacls # Get specific DACL content netapi ise get-dacl LINUX_EAPTLS_PERMIT_ALL -
Check if DACL assigned to profile:
# Check authorization profile netapi ise get-authz-profile Linux_EAPTLS_AdminsLook for
daclNamefield:daclName LINUX_EAPTLS_PERMIT_ALL ← DACL assigned daclName (empty) ← No DACL assigned -
Check session to verify DACL applied:
# Detailed session view shows applied DACL netapi ise dc session 98:bb:1e:1f:a7:13
Resolution
If DACL doesn’t exist, create it:
netapi ise create-dacl LINUX_EAPTLS_PERMIT_ALL \
--acl "permit ip any any" \
--descr "Full network access for Linux Admin workstations"
If DACL exists but not assigned, update profile:
netapi ise update-authz-profile Linux_EAPTLS_Admins \
--dacl LINUX_EAPTLS_PERMIT_ALL
Reconnect to apply new DACL:
# Send CoA to reauthorize without reconnecting
netapi ise mnt coa-reauth 98:bb:1e:1f:a7:13
# Or reconnect manually
sudo nmcli connection down Wired-802.1X
sudo nmcli connection up Wired-802.1X
Authorization Rule Not Matching
Symptoms
-
Authentication succeeds but wrong authorization profile applied
-
Endpoint gets default/catch-all authorization instead of expected profile
Diagnosis
-
Check which rule matched:
# Detailed session shows matched authorization rule netapi ise dc session 98:bb:1e:1f:a7:13 -
Check authorization rules in policy set:
# List all authorization rules netapi ise get-authz-rules "Domus-Wired 802.1X" -
Check rule conditions:
Look for AD group membership conditions:
Condition: INSIDE-AD.ExternalGroups contains 'inside.domusdigitalis.dev/Groups/GRP-Linux-Admin-Workstations'
Resolution
Verify computer is member of correct AD group:
# SSH to Domain Controller
ssh modestus-p50 "ssh administrator@dc-01.inside.domusdigitalis.dev \
'Get-ADGroupMember -Identity GRP-Linux-Admin-Workstations'"
If group exists but not in ISE, add it:
# Add AD group to ISE join point
netapi ise add-ad-groups "INSIDE-AD" "GRP-Linux-Admin-Workstations"
If rule doesn’t exist, create it:
See Authorization Policy for creating authorization rules.
If wrong rule is matching (rule order issue):
ISE evaluates authorization rules top-to-bottom. A generic rule at the top can shadow more specific rules below.
# List rules to check order
netapi ise get-authz-rules "Domus-Wired 802.1X"
# Output shows:
# #0: Linux_Admin_EAP-TLS (specific - AD group check)
# #1: Linux_Research_AD_Machine (generic - EAP-TLS only) ← Matches first!
|
Rule evaluation is FIRST-MATCH-WINS: Most specific rules MUST be at rank 0 (top). Wrong Order (generic shadows specific):
Correct Order (specific before generic):
|
Fix by deleting shadowing rule:
# Delete the generic rule that's matching incorrectly
netapi ise delete-authz-rule "Domus-Wired 802.1X" "Linux_Research_AD_Machine" --force
# Verify rule removed
netapi ise get-authz-rules "Domus-Wired 802.1X"
# Reconnect to apply new rule
sudo nmcli connection down Wired-802.1X
sudo nmcli connection up Wired-802.1X
# Verify correct profile applied
netapi ise dc session 98:bb:1e:1f:a7:13
Success Case: modestus-razer Resolution
Scenario: Authentication succeeded but endpoint assigned wrong VLAN (40 instead of 10), causing network access issues.
Root Causes Identified:
-
Authorization rule ordering - generic rules shadowing specific rules
-
AD group condition not matching (computer not in required AD group)
-
Posture rules matching before intended EAP-TLS rules
Resolution Steps Taken:
# Remove generic rules that were matching first
netapi ise delete-authz-rule "Domus-Wired 802.1X" "Linux_Research_AD_Machine" --force
netapi ise delete-authz-rule "Domus-Wired 802.1X" "Linux_EAPTLS_Test" --force
# Create rule that matches any EAP-TLS authentication
netapi ise add-authz-rule "Domus-Wired 802.1X" \
"Linux_EAP-TLS_Permit" \
"Linux_EAPTLS_Admins" \
--dict "Network Access" \
--attr "EapAuthentication" \
--value "EAP-TLS" \
--operator "equals" \
--rank 0
# Recreate but keep disabled
netapi ise add-authz-rule "Domus-Wired 802.1X" \
"Linux_Posture_Compliant" "Linux_Posture_Compliant" \
--dict "Session" --attr "PostureStatus" \
--value "Compliant" --operator "equals" --rank 1
# Disable via ISE GUI: Policy → Policy Sets → Domus-Wired 802.1X → Toggle OFF
# Verify rule order
netapi ise get-authz-rules "Domus-Wired 802.1X"
# Output:
# #0: Linux_EAP-TLS_Permit → Linux_EAPTLS_Admins (VLAN 10) ✓
# #1: Linux_Admin_EAP-TLS → (disabled - AD group required)
# #2-4: Posture rules → (disabled - not ready yet)
# #5: Default → DenyAccess
# Reconnect 802.1X
sudo nmcli connection down Wired-802.1X
sudo nmcli connection up Wired-802.1X
# Verify VLAN 10 assignment
ip addr show enp130s0 | grep inet
# Output: inet 10.50.10.130/24 ✓
# Verify switch status
netapi ios exec "show access-s int g1/0/5 d"
# Output:
# Status: Authorized ✓
# IPv4 Address: 10.50.10.130 ✓
# Vlan: 10 ✓
# dot1x Authc Success ✓
Lessons Learned:
-
Rule order is critical - Most specific rules MUST be at rank 0 (top)
-
Test incrementally - Add one rule at a time, verify it works
-
AD group prerequisites - Ensure groups exist in ISE before using in conditions
-
Disable unused rules - Don’t leave experimental rules enabled
-
netapi is essential - CLI automation saved hours of GUI clicking
Key Commands Used:
| Command | Purpose |
|---|---|
|
List all authorization rules in policy set |
|
Create new authorization rule |
|
Remove authorization rule (permanent) |
|
Enable/disable rule, change rank, change profile |
|
Detailed session diagnostics (which rule matched) |
|
Verify switch port authorization status |
Network Connectivity Issues After Authentication
Symptoms
-
Authentication succeeds, correct VLAN assigned
-
Cannot ping gateway or other network devices
-
DACL shows "permit ip any any" but still restricted
Diagnosis
-
Check interface and IP configuration:
# Check IP address ip addr show enp130s0 # Check routing table ip route show # Check DNS cat /etc/resolv.conf -
Test gateway connectivity:
# Ping gateway ping -c 2 10.50.10.1 # Check ARP table ip neigh show -
Check firewall rules on pfSense:
Cross-VLAN traffic might be blocked by firewall rules even if DACL permits it.
Common Causes
-
pfSense firewall rules blocking traffic between VLANs
-
Switch ACL in addition to DACL
-
Linux local firewall (iptables/nftables) blocking traffic
-
DACL has restrictive rules despite appearing to permit all
Resolution
Check Linux local firewall:
# Check iptables rules
sudo iptables -L -n -v
# Check nftables rules
sudo nft list ruleset
# Temporarily disable to test (if safe)
sudo systemctl stop iptables
sudo systemctl stop nftables
Verify DACL content:
# Get exact ACL rules
netapi ise get-dacl LINUX_EAPTLS_PERMIT_ALL
Check switch interface configuration:
# Check interface config on switch
netapi ios exec "show running-config interface GigabitEthernet1/0/7"
Complete Verification Workflow
After any authorization changes, follow this workflow:
#!/bin/bash
# complete-verification.sh - Verify ISE authorization configuration
# Source credentials
source <(DSEC_SECURITY_MODE=permissive ~/.secrets/bin/dsec source d000 dev/network)
MAC="98:bb:1e:1f:a7:13"
PROFILE="Linux_EAPTLS_Admins"
echo "=== 1. Authorization Profile Configuration ==="
netapi ise get-authz-profile "$PROFILE"
echo -e "\n=== 2. DACL Content ==="
netapi ise get-dacl LINUX_EAPTLS_PERMIT_ALL
echo -e "\n=== 3. Current Session Details ==="
netapi ise mnt session "$MAC"
echo -e "\n=== 4. Detailed Authorization Context ==="
netapi ise dc session "$MAC"
echo -e "\n=== 5. Network Configuration ==="
echo "IP Address:"
ip addr show enp130s0 | grep "inet "
echo -e "\nRouting:"
ip route show | grep default
echo -e "\n=== 6. Connectivity Tests ==="
echo "Gateway (10.50.10.1):"
ping -c 2 10.50.10.1 2>&1 | tail -1
echo "Switch (10.50.1.10):"
ping -c 2 10.50.1.10 2>&1 | tail -1
echo "ISE (10.50.1.21):"
ping -c 2 10.50.1.21 2>&1 | tail -1
Make executable and run:
chmod +x complete-verification.sh
./complete-verification.sh
Common Error Messages
| Error | Cause | Resolution |
|---|---|---|
|
AD group not added to ISE join point |
Run |
|
Profile name misspelled or doesn’t exist |
Check |
|
DACL name misspelled or doesn’t exist |
Check |
|
Endpoint not authenticated or wrong MAC |
Check |
Silent VLAN assignment failure |
Used numeric VLAN ID instead of name |
Use VLAN name: |