Proxy Auto Konfiguration

Damit man die Einstellungen seines Proxy Servers nicht bei jedem Client händisch nachhalten muss, kann man die Einstellungen via Wpad-Datei automatisch verteilen.

Dazu ist ein Webserver notwendig, der die Datei bereit stellt.

Installation des Webservers:

apt-get install apache2

Anschließend muss eine Konfigurationsdatei erstellt werden, die dem Webserver sagt, wie er mit dem Konfigurationsskript umzugehen hat (/etc/apache2/conf.d/wpad.dat):

AddType application/x-ns-proxy-autoconfig .dat

Danach kann die Datei erstellt und auf die jeweiligen Gegebenheiten angepasst werden (/var/www/wpad.dat):

function FindProxyForURL(url, host)
{
$proxy = "PROXY proxyserver.example.local:8080";
// URLs within this network are accessed direct
if (isInNet(host, "192.168.42.0", "255.255.255.0")) {return "DIRECT";}
if (isInNet(host, "172.16.0.0", "255.255.0.0")) {return "DIRECT";}
if (isInNet(host, "127.0.0.0", "255.0.0.0")) {return "DIRECT";}
//Return proxy for EVERYTHING else
else return $proxy;
}

Apache Dienst neustarten.

Wpad DNS Eintrag

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][fusion_alert type=”general” accent_color=”” background_color=”” border_size=”1px” icon=”fa-exclamation-triangle” box_shadow=”yes” animation_type=”0″ animation_direction=”down” animation_speed=”0.1″ animation_offset=”” class=”” id=””]Achtung: Nach dem Hinzufügen des DNS Eintrags wird der Proxy live geschaltet und von jedem Client angenommen![/fusion_alert]

Man erstellt dazu einen DNS Eintrag, welcher als CNAME wpad.example.local hat und auf squidproxy.example.local verweist.

Vorher sollte man aber einen Browser auf “Automatisches Konfigurationsskript” stellen und das Skript testen:

Verbindungs-Einstellungen[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Squid Proxy unter Debian mit Kerberos Authentifizierung

In diesem Artikel wird beschrieben, wie man einen Squid Proxy einrichtet, der bei der Authentifizierung auf Kerberos zurück greift und die Benutzer am vorhandenen Active Directory authentifiziert. Das ist vor allem für Computer ab Windows 7 ratsam, da NTLM als Authentifizierungsmechanismus nicht mehr länger unterstützt wird – es sei denn man ändert die lokales Richtlinien.

Genutzt wird in dieser Konstellation ein Debain 8 als Betriebssystem und eine Windows Server 2008 R2 Domäne.

Im Internet Explorer muss die Option “Integrierte Windows-Authentifizierung aktivieren” gesetzt sein.

DNS Konfiguration

Die folgenden Schritte sind nur notwendig, falls sie nicht über den DHCP Server verteilt werden.

Installation dnsutils: apt-get install dnsutils

Im DNS Server muss ein neuer A-Record sowie der zugehörige PTR Eintrag erstellt werden.

Die Datei “/etc/resolv.conf” muss dementsprechend angepasst werden:

search example.local
nameserver 192.168.0.1
nameserver 192.168.0.2

Zur Überprüfung kann man nun das System pingen:

ping domaincontroller1.example.local -c 4

Und die zugehörige Rückwärtssuche durchführen:

dig -x 192.168.0.1

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][fusion_alert type=”general” accent_color=”#000000″ background_color=”#eeee22″ border_size=”1px” icon=”fa-exclamation-triangle” box_shadow=”yes” animation_type=”0″ animation_direction=”down” animation_speed=”0.1″ animation_offset=”” class=”” id=””]Macht hier nicht weiter, solange die DNS Auflösung nicht funktioniert, da die Proxy Authentifizierung sonst fehlschlagen wird! Auch bei der späteren Konfiguration der Browser muss der DNS Name des Proxys genutzt werden![/fusion_alert]

NTP Konfiguration

Installtion der Pakete:

apt-get install ntp

Da der Proxy einen synchronisierten Zeitstempel mit dem Active Directory benötigt, muss er die Zeit mit dem Domain Controller synchronisieren.

Dazu wird die Datei “/etc/ntp.conf” bearbeitet:

# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example

# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will
# pick a different set every time it starts up. Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
server domaincontroller1.example.local
server server2.example.local

Nun wird der Dienst neu gestartet und getestet.

service ntp restart
ntpq -p

Kerberos Konfiguration

Installation der Pakete:

apt-get install krb5-user libkrb5-3

Einrichten von Kerberos

cp /etc/krb5.conf /etc/krb5.conf_bak
cat /dev/null > /etc/krb5.conf
nano /etc/krb5.conf

Datei anpassen:
[/fusion_builder_column][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][libdefaults]
default_realm = EXAMPLE.LOCAL
dns_lookup_kdc = no
dns_lookup_realm = no
ticket_lifetime = 24h
default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
[realms]
EXAMPLE.LOCAL = {
kdc = domaincontroller1.example.local
kdc = server2.example.local
admin_server = domaincontroller1.example.local
default_domain = example.local
}
[domain_realm]
.example.local = EXAMPLE.LOCAL
example.local = EXAMPLE.LOCAL

Testen:

kinit Administrator@EXAMPLE.LOCAL
klist

kinit-klist

Squid installieren

Pakete installieren:

apt-get install squid3

Konfiguriert wird später

User aus der Domäne für die Kerberos Authentifizierung vorbereiten

Damit Squid in der Lage ist, an der Domäne zu authentifizieren, muss er darauf zugreifen können.

Dazu wird ein neuer Benutzer angelegt, bei dem in den Account Optionen “Keine Kerberos-Präauthentifizierung erforderlich” angeklickt werden muss.

Dann öffnet man die CMD mit folgendem Befehl:

ktpass -princ HTTP/proxyserver.example.local@EXAMPLE.LOCAL -mapuser squid@EXAMPLE.LOCAL -crypto rc4-hmac-nt -pass Passw0rd -ptype KRB5_NT_PRINCIPAL -out krb5.keytab

ktpass

Die erstellte Keytab wird anschließend auf den Proxy unter “/etc/krb5.keytab” kopiert (oder wohin man auch möchte).

Nun kann getestet werden, ob man ein TGT from DC bekommt:

kinit -V -k -t /etc/krb5.keytab HTTP/proxyserver.example.local@EXAMPLE.LOCAL

kinit

Jetzt wird die Datei noch dem Squid Benutzer zugeteilt.

chown proxy:proxy /etc/krb5.keytab && chmod 644 /etc/krb5.keytab

Konfiguration Squid

Um Squid die Keytab bekannt zu machen, wird folgende Datei angelegt, die den Pfad in eine Umgebungsvariable schreibt:

nano /etc/default/squid3

KRB5_KTNAME=/etc/squid3/PROXY.keytab
export KRB5_KTNAME

Einstellen der Squid Config

####### /etc/squid3/squid.conf Configuration File #######
http_port 8080
####### cache manager
cache_mgr administrator@example.local
####### kerberos authentication
auth_param negotiate program /usr/lib/squid3/negotiate_kerberos_auth -s HTTP/proxyserver.example.local@EXAMPLE.LOCAL
auth_param negotiate children 20 startup=0 idle=1
auth_param negotiate keep_alive off

acl auth proxy_auth REQUIRED

http_access deny !auth
http_access allow auth
http_access deny all

Testen

Hinterlegen der Proxysetting im Internet Explorer

Internet Explorer Proxyeinstellungen

[fusion_alert type=”general” accent_color=”#000000″ background_color=”#eeee22″ border_size=”1px” icon=”fa-exclamation-triangle” box_shadow=”yes” animation_type=”0″ animation_direction=”down” animation_speed=”0.1″ animation_offset=”” class=”” id=””]Hier unbedingt den Namen des Proxyservers eingeben und nicht die IP![/fusion_alert]

Nun kann man beliebige Seiten aufrufen und im access.log des Proxyservers nachverfolgen, was er tut:

access-log[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Wiederherstellen eines gelöschten Active Directory-Objekts mit "Ldp.exe"

Zum Wiederherstellen von Active Directory Objekten, die zuvor gelöscht wurden, ist es notwendig, dass der Papierkorb des ADs aktiviert wurde.

Start des Programms und Anmeldung

  1. Ausführen des Programms “ldp.exe”
  2. Remotedesktopverbindung – Verbinden; Dort muss der Servername  des Domain Controllers eingegeben werden, anschließend “ok” klicken
  3. Remotedesktopverbindung – Gebunden; Hier entweder direkt verbinden oder einen Useraccount angeben, der mindestens Mitglied der Gruppe “Domänen-Admins” ist

Einblenden der gelöschten Elemente

  1. Optionen – Steuerelemente -> Im Dropdown “Return deleted objects” auswählen und “ok” klicken
  2. Ansicht – Struktur; Basis DN eingeben
  3. Im Baum zu  “CN=Deleted Objects” navigieren

Wiederherstellen des Objekts

  1. Nach dem gelöschten Objekt suchen, das man wiederherstellen möchte
  2. Rechtsklick auf das Objekt – Ändern
  • Unter Eingabe bearbeiten im Feld Attribut den Wert isDeleted eingeben.
  • Das Feld Werte leer lassen.
  • Unter Vorgang auf Löschen klicken, und dann auf Eingabe.
  • Jetzt unter Eingabe bearbeiten im Feld Attribut den Wert distinguishedName eingeben.
  • Im Feld Werte den ursprünglichen definierten Namen (DN) des Active Directory-Objekts eingeben.
  • Unter Vorgang auf Ersetzen klicken.
  • Kontrollkästchen Erweitert aktivieren und dann auf Eingabe und Ausführen klicken.

ldap-aendern

Apticron – E-Mails über Softwareupdates bei Debian/Ubuntu Systemen

Mit der Software apticron können sich Admins einfach per Mail über neue Updates ihres Servers informieren lassen.
Damit man apticron benutzen kann, muss ein Mail_Transfer_Agent installiert sein. Dieser ist für die Übertragung von E-Mails zuständig.
Für das reine Versenden von Mails reicht auch bspw. ssmtp.

Installieren des Pakets

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”]

apt-get install apticron

Konfiguration (/etc/apticron/apticron.conf)

[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”]

# apticron.conf
EMAIL="xy@tj-braun.de"
SYSTEM="tj-braun.de"
CUSTOM_SUBJECT="Neue Updates verfügbar"
CUSTOM_FROM="apticron@tj-braun.de"

Nun bekommt man jeden Tag eine Mail, sollten Updates verfügbar sein.

Beispiel

apticron-bsp[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Subversion Repository sichern und wiederherstellen

Lokales SVN Repository sichern und komprimieren

svnadmin dump /pfad/zum/Repository --deltas | gzip -9 | > dump.svn

Der Parameter –deltas veranlasst svnadmin dump, statt Volltextrepräsentationen von Dateiinhalten und Eigenschafts-Listen nur die jeweiligen Unterschiede zu früheren Versionen auszugeben. Das verringert (in einigen Fällen erheblich) den Umfang der Auszugsdatei, die svnadmin dump erzeugt.
Per Pipen zu gzip wird der Dump noch komprimiert und anschließend abgespeichert.

Lokales SVN Repository wiederherstellen

svnadmin create /pfad/zum/neuen/Repository
gunzip -c  /pfad/zum/Dump | svnadmin load /pfad/zum/neuen/Repository
chown www-data:www-data -R /pfad/zum/neuen/Repository

Zunächst wird ein neues, leeres Repository erstellt.
In dieses wird der Dump geladen, nachdem er entpackt wurde.
Damit man via SVN auf die Dateien zugreifen kann, müssen sie noch dem Benutzer des Webservers zugewiesen werden.

Archive unter Linux (tar, gz, bz2, zip)

tar

Entpacken eines Archivs:

tar xfv archiv.tar (x = extract, f = file, v = verbose)

Dateien/Ordner in ein Archiv packen:

tar cfv archiv.tar inhalt1 inhalt2 inhalt3 (c = create)

Komprimierte Archive erstellen:

tar cfzv archiv.tar inhalt1 inhalt2 inhalt3 (z = komprimieren)

Inhalt eines Archivs auflisten:

tar tfv archiv.tar

gz

Eine Datei komprimieren

gzip file

Ergbnis: file.gz

Datei dekomprimieren:

gunzip file

Dateien in einem komprimierten Archiv zusammenfassen:

tar cfvz archiv.tar.gz inhalt1 inhalt2

Ergebnis: archiv.tar.gz

Archiv dekomprimieren und auspacken:

tar xfvz archiv.tar.gz

bz2

Eine Datei komprimieren

bzip2 file

Ergebnis: file.bz2

Datei dekomprimieren:

bunzip2 file.bz2

Dateien in einem komprimierten Archiv zusammenfassen:

tar cfvj archiv.tar.bz2 inhalt1 inhalt2

Ergebnis: archiv.tar.bz2

Archiv dekomprimieren und auspacken:

tar xfvj archiv.tar.bz2

zip

Einzelne Dateien in einem komprimierten Archiv zusammenfassen:

zip archiv.zip inhalt1 inhalt2

Komplette Ordner in einem komprimierten Archiv zusammenfassen:

zip -r archiv.zip ordner1 ordner2 ordner3

Komprimiertes Archiv entpacken:

unzip archiv.zip

Inhalt eines komprimierten Archivs anzeigen:

unzip -l archiv.zip

Subversion Needs Lock Property global setzen

Wenn man SVN zur Revisionsverwaltung von Quellcode nutzt, kann man über das Property “Needs Lock” festlegen, dass keine Änderung an Dateien vorgenommen werden kann, solange man diese Dateien nicht für sich gesperrt hat.
Sollte im Nachhinein auffallen, dass das Property nicht durchgängig gesetzt ist, kann das über folgende Skripte automatisiert werden.
Zunächst muss eine Liste aller Repositories erstellt werden, in deinen das Property fehlt.
Dazu kann folgendes Bash Skript auf dem Subversion Server genutzt werden.

#!/bin/bash
#Dateien in jedem Repository finden, die die Eigenschaft "Needs-Lock" nicht gesetzt haben
#
#findReposWithoutLogInHEAD.sh ausführen.
#Repositories ohne Needs-Lock Property werden ausgegeben.
#Ausgaben in Datei umleiten: ./findReposWithoutLogInHEAD.sh >> needLockFehlt.log
#Log auf PC kopieren und PS Script starten: checkoutWholeRepo.ps1

IFS=$'n'
cd /srv/svn-parent/
pwd

#Verzeichnis auflisten
array=(*/)

#Repos durchgehen
for dir in "${array[@]%/*}";
do #echo "$dir";
	files=`svn list -r HEAD -R http://subversion-server/svn/$dir --username *** --password "***" | grep -e ".*.vi$" -e ".*.ctl$" -e ".*.lvlib$" -e ".*.lvclass$" -e ".*.rtm$" -e ".*.lvproj$"`
	for fn in $files;
	do
		#wenn svn propget nicht gleich yes, dann ist prop nicht gesetzt
		if [[ $(svn propget svn:needs-lock http://subversion-server/svn/$dir/$fn --revprop -r HEAD) != "*"  ]]; then
			#echo Hier ist Prop nicht gesetzt
			echo http://subversion-server/svn/$dir/$fn
		fi
	done
done

Die Ausgabe des Skripts sollte in eine Datei umgeleitet werden, die dem Powershell Skript mitgegeben wird. Das Skript setzt das Vorhandensein des SVN Clients Tortoise SVN voraus!

#Liest Liste von Dateien ein, denen Needs:Lock fehlt, checkt das jeweilige Repository aus und setzt die Eigenschaft auf die Dateien
#

$files = cat "PfadzumLog.log"
#Array für die Repositories, wo die Namen drin stehen
$repoArray=@()
$lwDPfad
$pfadAufD ="D:SVNREPOS"

$checkout='checkout'
$usernamePasswort='--username "***" --password "***"'

#Initiierung für den ersten String
$a = $files[0].split("/")
$compString=$a[4] + "/" + $a[5]
Write-Host "Erstes Repo: $compString"
$repoArray+=("http://subversion-server/svn/"+$compString)

for ($i=0; $i -lt $files.length; $i++){
	if($files[$i] -match $compString){
        #Repo gleich, nichts zu tun
	}else{
		Write-Host "Neues Repo gefunden: "$files[$i]
		$a = $files[$i].split("/")
		$compString=$a[4] + "/" + $a[5]
		#Write-host $compString
        $repoArray+=("http://subversion-server/svn/"+$compString)
	}
}

#Jedes Repo einzeln auschecken
foreach($s in $repoArray){
Write-Warning "Checke $s aus"
#hier auschecken
svn.exe checkout $s $pfadAufD

    foreach($file in $files){
        if($file -match $s){
        #das sind die Dateien, die angepasst werden müssen
        #Pfad lokal anpassen
            #write-host $file
            $z = $file.split("/")
            $compString=$z[0] + "/" + $z[1] + "/" +$z[2] + "/" +$z[3] + "/" +$z[4] + "/" +$z[5]
            $lwDPfad = $file -replace $compString, $pfadAufD
            $lwDPfad = $lwDPfad -replace "/",""
            #Das ist der Pfad zur Datei, die angepasst werden muss:
            if(test-path $lwDPfad){
                write-host "Datei gefunden: $lwDPfad" -ForegroundColor green
                svn lock $lwDPfad
                svn propset svn:needs-lock yes $lwDPfad

                }
            else{
                write-host "Datei nicht gefunden: $lwDPfad" -ForegroundColor red}
        }
    }
#Fertig mit Repo, also commit und dann löschen
svn commit $pfadAufD -m "Needs Lock wurde auf die Dateien gesetzt"
read-host
Write-Warning "Lösche Inhalte..."
rmdir "$pfadAufD*" -force -Recurse
}

Damit werden nun alle gefundenen Repositories ausgecheckt und das Property gesetzt. Danach wird es wieder eingecheckt.