Freitag, 28. Januar 2022

TACACS+ unter Linux mit Windows-Domänenberechtigung (TACACS+ с аутентификацией в домене AD)

Als Betriebssystemeist ist Ubuntu 20 benutzt.
Als free-TACACS+ ist das Projekt https://www.pro-bono-publico.de/projects/tac_plus.html benutzt.

Installierung des TACACS+ Servers

Die Installation von Ubuntu wird in diesem Artikel nicht behandelt.

Die Distribution und die Dokumentation von TACACS+ befindet sich hier: https://www.pro-bono-publico.de/projects/howto-tac_plus-ads.html.

Bekommen Sie die Distribution (Soutce-code) und  auspacken sie in den Ordner /TAC

Im Ordner /TAC/PROJECTS/ gibt es eine Datei configure

Weiter machen Sie alles unter root:

./configure tac_plus mavis
make
make install
checkinstall

Jetzt im Ordner /TAC/PROJECTS/ haben Sie eine deb-Distribution projects_20211129-1_amd64.deb (Im Namen der deb-Distribution steht das heutige Datum)

Starten Sie die Installierung:

dpkg -i projects_20211129-1_amd64.deb

Konfigurierung der Server

Konfigurierung des Windows Active Directory Servers

  • IP-Adresse (oder DNC-Name) von dem Domain Controller (oder zwei-drei Adressen, wenn es mehr Domain Controller Server gibt) ist benötigt.
  • In Active Directory benötigen Sie zwei Gruppen tacacsadmin und tacacsuser zu haben.
  • Sie brauchen einen speziellen User für TACACS-AD Integration, z.B. ad-tacacs. Durch den User, bekommt TACACS-Server die Information über AD-Gruppen und AD-Users. User ad-tacacs muss nur in der Gruppe „Domain Users“ sein. Er braucht keine Admin-Rechte. Das Kennwort des Users ad-tacacs kann nicht veraltet werden und der User kann das Kennwort nicht ändern. (Zwei Hacken in den Einstellungen von User in Active Directory)
  • Die Gruppe tacacsadmin müssen die Netzwerkadministratoren enthalten. Die Gruppe tacacsuser muss die Users enthalten, deren Rechte auf den Netzwerkgeräten eingeschränkt sein müssen.

Konfigurierung des TACACS+ Servers

Erstellen Ordner für die Logs:

sudo mkdir /var/log/tac_plus

hier steht wer,wo und was gamacht hat:

sudo mkdir /var/log/tac_plus/accounting

hier befinden sich erfolgreiche und erfolglose Authentifizierungsversuche:

sudo mkdir /var/log/tac_plus/authentication 

hier befinden sich nur erfolgreiche  Authentifizierungsversuche. Zusammen mit "authentication" ist überflüssig:

sudo mkdir /var/log/tac_plus/access  

Config-file soll hier liegen:

/usr/local/etc/tac_plus.cfg

Config-file (tac_plus.cfg) befindet sich hier:

id = spawnd {
    listen = { 
        port = 49 
    } ## tacacs funktiooniert auf dem TCP-Port 49

    spawn = {
        instances min = 1
        instances max = 10
    }
    background = yes
}


id = tac_plus {
    # Log-files
    #access log = ">/var/log/tacacs/access/%Y%m%d.log"               # hier stehen nur erfolgreiche  Authentifizierungsversuche. Zusammen mit "authentication" ist ueberfluessig
    authentication log = ">/var/log/tacacs/authentication/%Y%m%d.log"# hier stehen erfolgreiche und erfolglose Authentifizierungsversuche
    accounting log = ">/var/log/tacacs/accounting/%Y%m%d.log"        # hier steht: wer, wo und was gemacht hat
                                     # es waere gut die Rechte 600 stellen und logrotation anpassen

    mavis module = external {
        setenv LDAP_SERVER_TYPE = "microsoft"
        setenv LDAP_HOSTS = "ldaps://10.10.10.10:636"               #"ldaps://domain.name:636"  Der Domänenname muss vom DNS-Server aufgelöst werden (mit nslookup prüfen). Die IP-Adresse kann anstelle des Namens verwendet werden
        setenv LDAP_SCOPE = sub
                setenv LDAP_BASE = "dc=damain-name,dc=intra"         # Wo muss man die Users suchen. Microsoft-Domain: domain-name.intra
                setenv LDAP_FILTER = "(&(objectclass=user)(sAMAccountName=%s))"  #Verwendet man für Microsoft-LDAP. Siehe tac_plus-Dokumentation 
                setenv LDAP_USER = "ad-tacacs"                       # Dienstbenutzer für die AD-Integration
                setenv LDAP_PASSWD = "Pa$$w0rd"                      # Kennwort des Dienstbenutzers
                #setenv AD_GROUP_PREFIX = tacacs                     # TACACS-Server such in AD Gruppen, deren Namen mit "tacacs" beginnen, dann entfernt "tacacs". Von tacacsadmin bekommt man admin, tacacsuser -> user
                #setenv REQUIRE_TACACS_GROUP_PREFIX = 1
                #setenv USE_TLS = 0
                #setenv FLAG_USE_MEMBEROF = 1
                exec = /usr/local/lib/mavis/mavis_tacplus_ldap.pl
    }
    
    login backend = mavis
    user backend = mavis
    pap backend = mavis

    host = Welt {
        address = ::/0                                               # alle IP-adresse. Permit all. Alle Geräte sollen die folgende Banners bekommen und alle Geräte haben den gleichen Schlüssel, key
        
        #Banners
        welcome banner = "\nWe are watching you! We know your ip: %%c\n"         # Die Banners funktionieren auf den Aruba-Geräten NICHT!
        failed authentication banner ="\nYou are the %%u?\n"                     #
        motd banner = "\nHello %%u. Today is %A"                                 # 

        #Key
        #Crypt password generate by "openssl passwd -1 clear_text_password"
        #enable 15 = crypt $1$eqIkg6p0$jzhK5.
        key = "longkey"                                             # Kennwort, das auf den TACACS-Clients (Netzwerkgeräten)  steht
    }
    
##==Gruppen fuer Users=========================================

    group = admin {
                message = "[Admin privileges]"                       # Auf den Aruba-Geräten funktioniert NICHT!
                default service = permit                             # Ob etwas erlaubt oder verboten werden soll, das nicht ausdrücklich im Benutzerprofil definiert ist.
                service = shell {
                    default command = permit                         # Diese Direktive legt fest, ob das Programm Befehle, die nicht explizit erlaubt sind, akzeptiert oder zurückweist. Voreinstellung: Verweigern
                    default attribute = permit
                    set priv-lvl = 15                                # Die Users in dieser Gruppe (admin) bekommen priv-lvl 15 auf den Geräten
                }
    }


    group = user {
        message = "[USER privileges]"                                # Auf den Aruba-Geräten funktioniert NICHT!
        default service = deny                                       # Ob etwas erlaubt oder verboten werden soll, das nicht ausdrücklich im Benutzerprofil definiert ist.
        service = shell {
            default cmd = deny                                       # Diese Direktive legt fest, ob das Programm Befehle, die nicht explizit erlaubt sind, akzeptiert oder zurückweist. Voreinstellung: Verweigern
            message deny = "Denied '%c %a'"                          # Gibt eine Zeichenfolge wie "Verweigert <Befehl>" aus, wenn dem Benutzer der Befehl verweigert wird. Auf den Aruba-Geräten funktioniert NICHT!
            cmd = show {                                             # Ein Block von Show-Befehlen ist hier erlaubt
                permit "running-config"                              # Befehl "running-config" aus dem Show-Befehlen ist erlaubt. Also "show running-config"
                permit "cpu"                                         # Befehl "cpu" aus dem Show-Befehlen ist erlaubt. Also "show cpu"
            }
            set priv-lvl = 15                                        # Die Users aus der Gruppe "user" erhalten die höchste Stufe auf dem Netzwerkgerät (priv-lvl 15), aber sie sind mit den Befehlen "default service = deny" und "default cmd = deny" beschränkt
        }
    }




###== fuer die Gruppe ist alles verboten ============================================================
#  Das Access-list ist in diesem Konfiguration nicht benutzt
acl = acl_DENY{ nac = 0.0.0.0/0
                nas = 0.0.0.0/0
}                                         #acl 

group = DENY {                                          
    message = "[DENY privileges]"
    default service = deny
    acl = deny acl_DENY
}
###==========================================================================================



###== Lacal USERs (Keine AD-Users)================================================================================
user = root  {
                pap = permit
                member = admin
                login = clear 12345
        chap = clear 12345
                service = shell {
                    set priv-lvl = 15
                }
}

user = w_user {                
        member = admin        #Test User
        login = crypt $1$DUcrLov4$dXRan/rLQVMUC6jLCaYeq1               #pass123
                chap = clear pass123
         }

user = user1 {                #Test user1
        member = user
        login = crypt $1$DUcrLov4$dXRan/rLQVMUC6jLCaYeq1               #pass123
        chap = clear pass123
        }





} # The END

Machen Sie tac_plus zu einem Linux-Service:

cp /TAC/PROJECTS/tac_plus/extra/etc_init.d_tac_plus /etc/init.d/tac_plus
chmod 755 /etc/init.d/tac_plus

Prüfen, ob Sie den tac_plus-Service haben:

service --status-all

Starten Sie den tac_plus-Service:

service tac_plus start

Nach jeder Änderung im Config-file (/usr/local/etc/tac_plus.cfg) muss tac_plus neustarten werden:

service tac_plus restart

Prüfung, ob in tac_plus.cfg alles richtig konfiguriert ist. Der Befehl zeigt wo in tac_plus.cfg ein Fehler ist. Falls der Befehl nichts zeigt, dann tac_plus.cfg keine Fehler enthaltet:

/usr/local/sbin/tac_plus -P /usr/local/etc/tac_plus.cfg

Machen Sie den Autostart des tac_plus-Services. Falls der Ubuntu-Server neustartet wird, muss den tac_plus-Service auch starten.
Im Anfang des Files /etc/init.d/tac_plus stellen Sie folgendes:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          haltusbpower
# Required-Start:    $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Halts USB power...
### END INIT INFO

dann unter root:

systemctl enable tac_plus

Weiter starten Sie den Ubuntu Server neu und überprüfen, ob der tac_plus-Service läuft:

service --status-all

Prüfung der Konfiguration

Wenn den Config-File (tac_plus) richtig konfiguriert ist und der Befehl  /usr/local/sbin/tac_plus -P /usr/local/etc/tac_plus.cfg

keine Fehler zeigt, kann man die Verbindung zwischen dem TACACS-Server und der Windows-Domäne überprüfen:

/usr/local/bin/mavistest -d -1 /usr/local/etc/tac_plus.cfg tac_plus TACPLUS AD-User AD-Password (AD-Netzwerkadminuser und sein Kennwort)

Die Verbindung zwischen dem TACACS-Server und der Windows-Domäne funktioniert richtig, wenn wir im Feld „RESULT“ bekommen „ACK“:

Input attribute-value-pairs:
TYPE                TACPLUS
TIMESTAMP           mavistest-4371-1639554269-0
USER                AD-User
PASSWORD            AD-Password
TACTYPE             AUTH

Output attribute-value-pairs:
TYPE                TACPLUS
TIMESTAMP           mavistest-4371-1639554269-0
USER                AD-User
RESULT              ERR                   <=====  !!!     
PASSWORD            AD-Password
SERIAL              WqTqIUKL5Be91U+Y7OkoeA=

Hier funktioniert die Verbindung zwischen dem TACACS-Server und der Windows-Domäne richtig:

Input attribute-value-pairs:
TYPE                TACPLUS
TIMESTAMP           mavistest-6628-1639579625-0
USER                AD-User
PASSWORD            AD-Password
TACTYPE             AUTH

Output attribute-value-pairs:
TYPE                TACPLUS
TIMESTAMP           mavistest-6628-1639579625-0
USER                AD-User
RESULT              ACK           <=====  !!!
PASSWORD            AD-password
SERIAL              OxA7FLHju+cP/FBqdno2gg=
DBPASSWORD          AD-Password
TACMEMBER           "admin"
TACTYPE             AUTH

Konfigurierung der Switche

Der letzte Schritt besteht darin, den TACACS+-Server auf dem Switch zu konfigurieren.

ArubaOS

TACACS-Server und der Schlüssel (key) aus tac_plus.cfg. Wiederholen Sie diesen Befehl für jeden TACACS+-Server, den Sie haben:

tacacs-server host 10.255.255.1 key "longkey"      

Timeout 2 Sekunden:

tacacs-server timeout 2

Auf dem Switch müssen Sie die TACACS+-Authentifizierung für SSH oder jeden anderen Dienst, den Sie verwenden möchten, mit dem folgenden Befehl aktivieren:

aaa authentication ssh login tacacs local

Nach der erfolgreichen Anmeldung muss sich der Benutzer authentifizieren, um auch mit dem folgenden Befehl auf den enable-Kontext zuzugreifen:

aaa authentication ssh enable tacacs local

Es ist gut genausolche Befehle für Console-Verbindung zu konfigurieren:

aaa authentication console login tacacs local
aaa authentication console enable tacacs local

Das Ende beider Befehle definiert die Authentifizierungsmethode. Es empfiehlt sich, local als zweite Authentifizierungsoption zu definieren, falls der TACACS+-Server nicht verfügbar ist. Dadurch ist sichergestellt, dass der Zugriff auf das Gerät immer möglich ist.

VORSICHT!

Einige ArubaOS-Geräte erlauben das Wort „local“ am Ende des Befehls zu schreiben, aber sie speichern das Wort „local“  in der Konfig NICHT.
Es war z.B. auf dem Switch Aruba 2530-8G (J9774A) mit der Firmwareversion #YA.16.11.0002

aaa authentication ssh login tacacs local #in der Konfig ist  "local" nicht gespeichert
aaa authentication ssh enable tacacs local
aaa authentication console login tacacs local
aaa authentication console enable tacacs local

Um die doppelte Authentifizierung und den Zugriff auf den Aktivierungsmodus bei der ersten Anmeldung zu vermeiden, verwenden Sie diesen Befehl:

aaa authentication login privilege-mode

Der Vorteil eines TACACS-Servers gegenüber einem RADIUS-Server ist, dass jeder Befehl, den der Administrator auf einem Netzwerkgerät eingibt, erlaubt (autorisiert) sein muss. Das bedeutet, dass das Netzwerkgerät vor der Ausgabe des Befehls den TACACS-Server fragt, ob der aktuelle Benutzer berechtigt ist, den Befehl auszuführen.

Um die Autorisierung für Befehle zu aktivieren, verwenden Sie diesen Befehl:

aaa authorization commands tacacs

Dadurch wird die Befehlsberechtigung für jede Befehlsausgabe auf dem Switch aktiviert. Um nur die Befehlsberechtigung auf Managerebene zu aktivieren, verwenden Sie diesen Befehl (Alle Netzwerkadministratoren bekommen manager-Rechte, aber jeder Netzwerkadministrator kann auf den TACACS-Server beschränk? werden):

aaa authorization commands access-level manager

Der letzte Schritt besteht darin, die Befehlsabrechnung (accounting) zu aktivieren. Jeder Befehl, den der aktuelle Benutzer eingibt (natürlich, wenn der Befehl dem Benutzer erlaubt ist), wird nun in der log-File (sehen tac_plus.cfg) gespeichert.  Um die Befehlsabrechnung zu aktivieren, verwenden Sie diesen Befehl:

aaa accounting commands interim-update tacacs

Die folgende Befehle gehören zu der TACACS+-Konfiguration nicht, aber es ist gut idle-Timeout von den Sessionen auf den Geräten zu beschränken. Die Befehle sind für die Console- und SSH-Verbindungen (900 Sekunden):

console idle-timeout 900
console idle-timeout serial-usb 900

Vollständige TACACS+-Konfiguration auf ArubaOS

console idle-timeout 900
console idle-timeout serial-usb 900
tacacs-server host 10.255.255.1 key "longkey"
tacacs-server timeout 2
aaa accounting commands interim-update tacacs
aaa authorization commands tacacs
aaa authorization commands access-level manager
aaa authentication login privilege-mode
aaa authentication ssh login tacacs local
aaa authentication ssh enable tacacs local
aaa authentication ssh login console local
aaa authentication ssh enable console local

ArubaOS-CX

In ArubaOS-CX muss man source-interface für TACACS+-Server einrichten. (IP-Adresse, oder Interfacename z.B. Loopback 0):

ip source-interface tacacs 10.255.255.4

In ArubaOS-CX ist der Schlüssel (key) aus tac_plus.cfg verschlüsselt:

tacacs-server key ciphertext AQBapbFg8LbZH33tGCO5YGWQ2Vt3GCiaaOt+QtlCijIIA1iCFAAAAMnUheK35LlU5nA0xoKeVBrgfzbh

Geben Sie für jeden TACACS-Server den Authentifizierungstyp wie in tac_plus.cfg (pap backend = mavis) an. Ich konnte leider das Chap-Protokoll nicht zum Laufen bringen.

tacacs-server host 10.255.255.1 auth-type pap

ArubaOS-CX unterstützt Gruppen von den TACACS+-Server:

aaa group server tacacs grTACACS-Servers
   server 10.255.255.1

Die authentication-,  authorization- und accounting-Befehle sind ähnlich wie auf ArubaOS:

aaa authentication login ssh group grTACACS-Servers local
aaa authentication login console group grTACACS-Servers local
aaa authorization commands ssh group grTACACS-Servers local
aaa authorization commands console group grTACACS-Servers local
aaa accounting all-mgmt ssh start-stop group grTACACS-Servers local

idle-Timeout von den Sessionen auf ArubaOS-CX (15 Minuten):

session-timeout 15

oder es gibt noch ein Befehl dafür:

cli-session
   timeout 15

Vollständige TACACS+-Konfiguration auf ArubaOS-CX

tacacs-server key ciphertext AQBapbFg8LbZH33tGCO5YGWQ2Vt3GCiaaOt+QtlCijIIA1iCFAAAAMnUheK35LlU5nA0xoKeVBrgfzbh
tacacs-server host 10.255.255.1 auth-type pap
!
aaa group server tacacs grTACACS-Servers
   server 10.255.255.1
!
!
aaa authentication login ssh group grTACACS-Servers local
aaa authentication login console group grTACACS-Servers local
aaa authorization commands ssh group grTACACS-Servers local
aaa authorization commands console group grTACACS-Servers local
aaa accounting all-mgmt ssh start-stop group grTACACS-Servers local

ip source-interface tacacs 10.255.255.4

cli-session
   timeout 15

https://www.pro-bono-publico.de/projects/howto-tac_plus-ads.html

https://www.flomain.de/2017/02/operator-login-clearpass/

https://www.flomain.de/2017/02/operator-command-authorization-and-accounting-with-clearpass-tacacs/

https://techhub.hpe.com/eginfolib/Aruba/OS-CX_10.04/5200-6715/index.html#GUID-31882031-B887-4E5C-A711-692A4ED784C3.html

https://itsketch.ru/linux/ubuntu/83-tacacs-na-linux-s-domennoj-avtorizatsiej

https://habr.com/ru/post/194750/

https://habr.com/ru/post/131113/

https://habr.com/ru/post/217669/

Keine Kommentare:

Kommentar veröffentlichen