NGINX avec une authentification Kerberos

Salut à tous, ça vous dirait d’apprendre à configurer NGINX avec une authentification Kerberos sous CentOS 7 ? C’est le sujet d’aujourd’hui, vu que j’ai eu besoin de le faire au boulot récemment. Il s’avère que c’est un poil plus suant qu’avec Apache. Bref on y va.

Kerberos ?

Pour ceux qui ne savent pas ce que c’est, kerberos est un protocole d’authentification. Sa particularité est de reposer sur des clés secrètes partagées entre le client et un serveur tiers (le KDC). Vous trouverez pas mal de documentations, plus ou moins exactes, sur le net (c’est un protocole qui date un peu et qui n’est pas forcément super intuitif non plus). On peut vulgariser son utilisation ainsi :

  • A l’ouverture de votre session, le KDC vous délivre un TGT (Ticket Granting Ticket) protégé par un secret partagé entre vous et le KDC.
  • Lorsque vous souhaitez accéder à un service authentifié en kerberos (genre un site web), vous demandez au KDC un TGS (Ticket Granting Service) pour ce service, à l’aide de votre TGT. Ce TGS est protégé (en partie) par la clé secrète du service (que le service partage de son côté avec le KDC)
  • Il vous suffit alors
Lire la suite

TP PowerShell – Mesurer la taille de son token Kerberos-ActiveDirectory

La taille est un problème pour certains d’entre nous, ceux qui sont concernés savent de quoi je parle… Accès aléatoire aux ressources réseau, problème au logon, etc.
Bref ça rentre plus…

En effet jusqu’à Windows 2008R2 la taille du token Kerberos une infra Active Directory est par défaut limité à 12Ko (et 48Ko à partir de 8 et 2012). On peut très simplement changer ce réglage en réglant la clé de registre suivante sur les machines:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
    Entrée : MaxTokenSize
    Type de données : REG_DWORD
    Valeur : 48000
    Source : [MS KB938118](https://support.microsoft.com/fr-fr/kb/938118)

Le problème c’est qu’il est compliqué d’estimer la taille des tokens de vos utilisateurs pour anticiper les problèmes. Ces derniers ne sont d’ailleurs pas toujours évidents à détecter, car l’ordre des tickets stocké dans le token n’est pas déterministe, et Windows tronque ce qui dépasse quand c’est nécessaire : ainsi d’un logon à l’autre vous pouvez avoir des accès différents aux ressources accédées via des groupes AD.

Seul un Event Id 31 du KDC dans l’eventvwr vous permet d’avoir l’info quand le problème se présente. Pas mal d’info ici

Mais ce qu’on aimerait bien c’est de pouvoir connaître les utilisateurs qui posent problème ou vont bientôt poser problème. … Lire la suite

Dynamic file name rsyslog

Bonjour à tous, allez je dépile mon backlog. Aujourd’hui je vous partage une configuration de dynamic file name rsyslog. Elle m’a bien servis y’a 1 an et demi pour diminuer le volume de log dans mon SIEM et configurer une plateforme de relais syslogs devant ce dernier. En effet, pour ceux qui auront écouté mon podcast No Limit Sécu sur les dix commandements du SIEM se rappelerons que le 1er commandements est de mettre en place une infrastructure de relais syslog .Celle ci permet le retraitement des logs, la diffusion et la conservation d’un buffer local.

En gros si on parle Splunk, le schéma retenu pour l’arrivée des logs n’est pas d’utiliser l’universal forwarder en reception « directe » des syslog. Mais bien de configurer un serveur RSYSLOG (ou Syslog-ng) intermédiaire qui écrit les logs dans des fichiers sur le serveur et l’universal forwarder surveille alors ces dossiers. Cette pratique présente de nombreux avantage :

  1. Les serveurs de collecte syslog « frontaux » avec les clients sont indépendant de la technologie de SIEM utilisé derrière. En cas de changement de SIEM, ces serveurs peuvent être maintenu.
  2. L’utilisation de fichier permet de conserver un cache local sur le serveur qui permet d’avoir un tampon de quelques
Lire la suite

Envoyer un CSV en HTTP en PowerShell

Salut à tous, aujourd’hui j’ai eu un besoin d’envoyer un CSV en HTTP en PowerShell. J’ai fait ça pour automatiser un envoi de fichier de résultat de script entre 2 serveurs. Ma grosse contrainte était que je pouvais pas faire du mode ‘Push’ (cf. transfert SCP sans mot de passe) comme je partais d’une zone de sécurité moindre que celle de destination. Et comme, le fichier source venait d’un Windows, je ne voulais pas mettre en place un serveur Web IIS sur le serveur pour un pauvre fichier CSV à transférer 2 fois par jour…

Du coup, j’ai bricolé quelques lignes à la fin de mon script PowerShell pour exposer le fichier en HTTP et permettre au serveur destination de venir les « Puller » pour respecter le sens d’établissement du flux.

Et sans transition le script pour envoyer un CSV en HTTP en PowerShell :

Function New-SimpleHTTPListener {
  Param (         
    [Parameter()] [Int] $Port = 7443
  )
  Begin{
    $listener = New-Object System.Net.HttpListener
    $prefix = "http://localhost:$Port/"
    $listener.Prefixes.Add($prefix)
  }

  Process{

    try{
      $listener.Start()
      Write-Host "Listening on $Port ..."
      $pathwd = Get-Location
      while ($listener.IsListening) {
        $context = $listener.GetContext()

        if ($context.Request.HttpMethod -eq 'GET' -and $context.Request.RawUrl -eq '/quit')
        {
            $listener.Close()
            break;
        }    

        $HTTPresponse = $context.Response
        $HTTPresponse.StatusCode = "200"
        $HTTPResponse.Headers.Add("Content-Type","text/csv") 

        $RequestUrl = $context.Request.Url.OriginalString
        $data = [System.Text.UTF8Encoding]::UTF8.GetBytes([System.IO.File]::ReadAllText("$pathwd"  + '\' + ($RequestUrl.Split('/')[-1])))

        $HTTPresponse.ContentLength64 = $data.Length

        $output = $HTTPresponse.OutputStream

        $output.Write($data,0,$data.Length)

        $output.Close() 
      }
    }catch{
       Write-Warning "Error with Server : $_" 
    }Finally{
      Write-Warning "terminating Server : $_" 
      $listener.Stop()
    }
  }

  End{
    
  }
}

New-SimpleHTTPListener

Alors clairement, c’est du bon gros « quick and dirty … Lire la suite