Autodiscover causes Outlook to hang on start for at least 30sec
try this reg key (this is valid for office365, office 2016 click-to-run and office 2019)
[HKEY_CURRENT_USER\Software\Microsoft\office\16.0\outlook\autodiscover]
"DisableAutodiscoverV2Service"=dword:00000001
or
[HKEY_CURRENT_USER\Software\Policies\Microsoft\office\16.0\outlook\autodiscover]
"DisableAutodiscoverV2Service"=dword:00000001
starting with version 1710 Build 16.0.8625.2121 Microsoft introduced a new autodiscover feature which always asks https://outlook.office365.com for the exchange server information.
the response is a http 302 redirect to https://autodiscover.yourdomain/autodiscover/autodiscover.json?...."
if there is a dns entry autodiscover.yourdomain, outlook tries to connect on port 443. But if nothing is listening on this port outlook waits for a timeout which is 20sek after that timeout the normal autodiscovery kicks in
if you only use the http redirect autodiscover feature this is a problem because nothing should listen on autodiscover.youdomain port 443 because if the ssl cert doesn't match you get a certifacte warning
starting with version 1810 Build 16.0.11001.20074 Microsoft introduced a new registry key to disable this new autodiscover behavior:
DisableAutodiscoverV2Service"=dword:00000001
I use the following reg keys because i only need active directory and http redirect for autodiscover:
[HKEY_CURRENT_USER\Software\Policies\Microsoft\office\16.0\outlook\autodiscover]
"excludelastknowngoodurl"=dword:00000000
"excludescplookup"=dword:00000000
"excludehttpsrootdomain"=dword:00000001
"excludehttpsautodiscoverdomain"=dword:00000001
"excludehttpredirect"=dword:00000000
"excludesrvrecord"=dword:00000001
"excludeexplicito365endpoint"=dword:00000001
"DisableAutodiscoverV2Service"=dword:00000001
here is a good kb entry for autodiscover but it does not mention the disableautodiscoverv2service reg key
https://support.microsoft.com/en-us/help/3211279/outlook-2016-implementation-of-autodiscover
Typo3 v8 DB Query's debuggen
Mit dem nachfolgenden Code kann man in einer Repository Class den SQL Query den man zB mit matching zusammengebaut hat ausgeben lassen.
$queryParser = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Storage\Typo3DbQueryParser::class);
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getSQL());
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($queryParser->convertQueryToDoctrineQueryBuilder($query)->getParameters());
Yum Version Lock
Manchmal kommt es vor dass man verhindern will das automatisch Pakete upgedatet werden.
zB macht es manchmal Sinn das automatische Update des check-mk-agent auf Centos 7 zu verhindern wenn man das epel Repository eingebunden hat.
Dies erreicht man einfach mit dem YUM Plugin versionlock
yum install yum-plugin-versionlock
yum versionlock check-mk-agent
Das kann man dann noch relativ einfach nachprüfen indem man in das lockfile schaut.
cat /etc/yum/pluginconf.d/versionlock.list
# Added locks on Fri Feb 10 13:50:57 2017
0:check-mk-agent-1.2.6p12-1.*
Danach macht ein yum update kein automatisches Update des check-mk-agent mehr.
Verzeichnisdatum korrigieren
Oft ist es sinnvoll, wenn in Linux Datum/Uhrzeit eines Verzeichnisses mit dem des neuesten Files in diesem Verzeichnis übereinstimmt.
Lösen kann man dies am elegantesten mit der zsh (Z-Shell). Man geht in das Verzeichnis, das aktualisiert werden soll und tippt (in der zsh) folgendes ein:
touch -r *(Dom[1]) .
Wenn alle Unterverzeichnisse rekursiv ebenfalls angepasst werden sollen:
for d (**/*(D/)) touch -r $d/*(D.om[1]) -- $d
Dies muss händisch durchgeführt werden. Soll das immer automatisch gehen, könnte man eine Lösung mit incron basteln. Dies sei dem geneigten Leser als Übung überlassen...
Routing mit openconnect-VPN
Unter Linux gibt es openconnect, mit dem z. B. zu einem Cisco AnyConnect-VPN verbunden werden kann. Das Problem ist, dass die gesamte Routingtable verändert wird, und man nur mehr in das VPN kommt. Ein Zugriff auf das "normale" Internet ist nicht mehr möglich.
Abhilfe schafft ein kleines Script, das für die VPN-Verbindung einen eigenen Networknamespace generiert:
#!/bin/bash
IP=`hostname -I | cut -d' ' -f1`
ip netns add myvpn
ip link add veth0 type veth peer name veth1
ip link set veth1 netns myvpn
ip netns exec myvpn ifconfig veth1 192.168.99.1/24 up
ifconfig veth0 192.168.99.2/24 up
ip netns exec myvpn route add default gw 192.168.99.2
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.99.0/24 -j SNAT --to-source $IP
ip netns exec myvpn openconnect -b --no-cert-check -u myvpnuser --passwd-on-stdin https://123.123.123.123 < pw.txt
ip netns exec myvpn sudo -u myunixuser /bin/bash
killall openconnect
iptables -t nat -D POSTROUTING -o eth0 -s 192.168.99.0/24 -j SNAT --to-source $IP
ifconfig veth0 down
ip netns exec myvpn ifconfig veth1 down
ip link delete veth0
ip netns delete myvpn
123.123.123.123 ist dabei die Adresse des VPN-Servers
myvpnuser der Username für das VPN
myunixuser der Username im lokalen Linux-System, mit dem gearbeitet werden soll
Das Skript muss als root aufgerufen werden.
In der Datei pw.txt muss das VPN-Passwort stehen. Alternativ kann man es jedesmal eingeben, wenn man --passwd-on-stdin weglässt.
Nach Aufruf des Skriptes startet eine bash-Shell, in der das VPN aktiv ist. Außerhalb dieser Shell ist das VPN nicht erreichbar, dafür ist das Routing dort unverändert. Es kann also ganz normal auf das Internet zugegriffen werden. Braucht man eine zweite VPN-Shell, ruft man diese Zeile einfach in einer weiteren Shell auf:
ip netns exec myvpn /bin/bash
Jede dieser VPN-Shells kann mit exit beendet werden. Die erste Shell (die vom Skript geöffnet wurde) sollte als letztes beendet werden.
Resize vmware HD with ext4
1. Resize virtual disk in VMware
2. delete and recreate partition with fdisk
3. echo 1 > /sys/class/scsi_device/devicename/device/rescan
4. stop all processes that access the partition
5. umount /dev/sdX
6. partprobe /dev/sdX
7. e2fsck -f /dev/sdbX
8. resize2fs /dev/sdbX
9. mount -a
10. start all processes you stopped before
Openstack: Resize und Migration
Soll eine Instanz auf einen anderen Host wandern, müssen die beiden Hosts aufeinander per SSH zugreifen können. Beim Resize wird die VM in geänderte Größe auf einen anderen Host migriert. Um diesen SSH-Zugriff zu ermöglichen, müssen die public keys der anderen Hosts in der authorized_keys eines jeden Hosts sein.
Um das bei einer größeren Zahl von Hosts nicht unüberschaubar werden zu lassen, empfiehlt es sich, für alle Compute-Hosts den selben Schlüssel zu verwenden. Jeder hat also den selben public und private key und ersteren auch in der authorized_hosts.
# usermod -s /bin/bash nova
# su - nova
# mkdir -p -m 700 .ssh
# cat > config <<EOF
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
EOF
# ssh-keygen -f id_rsa -b 1024 -P ""
# cp /var/lib/nova/.ssh/id_rsa.pub /var/lib/nova/.ssh/authorized_keys
Die Dateien config,id_rsa, id_rsa.pub und authorized_keys dann auf alle compute hosts verteilen!
Netzwerk trace nach prozess id
wenn man zB ein bestimmtes Email netzwerkseitig debuggen möchte, ist es auf einem Mailserver mit sehr viel Traffic oft sehr schwierig da das abhören des Port 25 sehr viel anderen Traffic der nicht relevant ist ebenfalls aufzeichnet.
Besser ist es da, den Netzwerktraffic des expliziten Prozesses mitzuschneiden. Der Output ist leider kein pcap kompatibles Format, aber für den kurzen Check reicht es allemal.
Hier wurde zB.: nachgesehen welche Spamlists der sendmail verwendet und ob diese auch schnell antworten. Hinter dass -p gehört dann natürlich die entsprechende Prozess-ID
strace -p 3636 -f -e trace=network -s 10000
send(8, "\331\314\1\0\0\1\0\0\0\0\0\0\3icb\2at\0\0\1\0\1"..., 24, MSG_NOSIGNAL) = 24
recvfrom(8, "\331\314\205\200\0\1\0\1\0\2\0\2\3icb\2at\0\0\1\0\1\300\f\0\1\0\1\0\1Q\200\0\4\303\346\250X\300\ f\0\2\0\1\0\1Q\200\0\21\7goliath\3icb\2co\300\20\300\f\0\2\0\1\0\1Q\200\0\7\4puck\300socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 8
connect(8, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("195.230.xx.xx")}, 28) = 0
send(8, "jB\1\0\0\1\0\0\0\0\0\0\00231\003160\003230\003195\2ix\5dnsbl\6manitu\3net\0\0\1\0\1"..., 52, MSG_NOS IGNAL) = 52
recvfrom(8, "jB\201\203\0\1\0\0\0\1\0\0\00231\003160\003230\003195\2ix\5dnsbl\6manitu\3net\0\0\1\0\1\300\33\0 \6\0\1\0\0\0connect(8, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("195.230.xx.xx")}, 28) = 0
send(8, "\377\375\1\0\0\1\0\0\0\0\0\0\00231\003160\003230\003195\3zen\10spamhaus\3org\0\0\1\0\1"..., 49, MSG_ NOSIGNAL) = 49
recvfrom(8, "\377\375\201\203\0\1\0\0\0\1\0\0\00231\003160\003230\003195\3zen\10spamhaus\3org\0\0\1\0\1\300\3 3\0\6\0\1\0\0\0\226\0004\4need\2to\4know\4only\0\nhostmaster\300\37S\243M\204\0\0\16\20\0\0\2X\0\6\227\200\0\ 0\0\226"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("195.230.xx.xx")}, [16]) = 113
Textdatei ohne Kommentare ausgeben
Manchmal ist es sinnvoll zB eine Konfigurationsdatei ohne Kommentare und Leerzeilen anzusehen. Bei den sehr großen Konfiguration von zB der apache httpd.conf oder der freeradius radiusd.conf fällt es im Normalzustand oft schwer Konfigurationen von zwei Servern zu vergleichen oder sogar automatisch mit diff zu vergleichen.
Ein bisschen egrep und grep helfen uns dabei wirklich nur die Zeilen auszugeben die wirkliche Konfiguration beinhalten.
Ausganskonfiguration:
# Multi-language error messages
#Include /etc/httpd/extra/httpd-multilang-errordoc.conf
# Fancy directory listings
#Include /etc/httpd/extra/httpd-autoindex.conf
# Language settings
#Include /etc/httpd/extra/httpd-languages.conf
# User home directories
#Include /etc/httpd/extra/httpd-userdir.conf
# Real-time info on requests and configuration
Include /etc/httpd/extra/httpd-info.conf
# Virtual hosts
#Include /etc/httpd/extra/httpd-vhosts.conf
# Local access to the Apache HTTP Server Manual
#Include /etc/httpd/extra/httpd-manual.conf
# Distributed authoring and versioning (WebDAV)
#Include /etc/httpd/extra/httpd-dav.conf
# Various default settings
#Include /etc/httpd/extra/httpd-default.conf
# Configure mod_proxy_html to understand HTML4/XHTML1
# Secure (SSL/TLS) connections
#Include /etc/httpd/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
SSLRandomSeed connect builtin
# Deal with user agents that deliberately violate open standards
Suexec On
Include /etc/httpd/extra/httpd-fcgid.conf
Include /etc/httpd/extra/httpd-mod_security.conf
Nun können mit einem einfach cat und grep die unnötigen Kommentare und Leerzeilen eliminiert werden.
cat /etc/httpd/httpd.conf | egrep -v "^[^a-z0-9]*#" | grep -v "^$"
Include /etc/httpd/extra/proxy-html.conf
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
BrowserMatch "MSIE 10.0;" bad_DNT
RequestHeader unset DNT env=bad_DNT
Suexec On
Include /etc/httpd/extra/httpd-fcgid.conf
Include /etc/httpd/extra/httpd-mod_security.conf
Diese "stilisierte Config" kann zB mittels diff von 2 Servern analysiert werden um Unterschiede schnell aufzuzeigen.
Centos 6 add disk space with LVM on Server without reboot
Überarbeitet Variante des Artikels für CentOS6!
Des öfteren kommt es vor, dass man bei einem virtuellen Server eine Partition vergrößern muss. Dank Virtualisierung und LVM2 ist das kein Problem.
Als Erstes erstellen wir einen Snapshot der virtuellen Maschine. Sicher ist sicher...
Als Nächstes vergrößern wir die physische Festplatte der virtuellen Maschine. Nach einem Vergößern der "physischen" Festplatte einer virtuellen Maschine (zB Vmware) kann es vorkommen dass der Linux Server immernoch die alte Blockgröße kennt. So erscheint die gerade vergrößerte Festplatte immer noch als kleine Platte. Nun kann man warten bis das Linux System das selbst erkennt, den Server rebooten oder dem Linux-Kernel einen kleinen Tip geben ;)
Mit dem Befehl:
echo 1 > /sys/class/scsi_device/
kann ein Neuscan des SCSI devices veranlasst werden. Danach sollte die Festplatte die neue größe haben.
Als nächstes sollte man die entsprechen Paritition unmounten. (Dies kann beim vergrößern auch übersprungen werden, ist aber nicht 100% Risiko frei)
umount /var/tmp/
Nun legt man am besten eine neue Partition mit cfdisk an. Diese sollte wieder vom Typ "Linux LVM 8e" sein. Danach muss die Partition Table neu eingelesen werden, da dies CentOS6 per default nicht mehr macht. Mit dem Befehl:
partx -a /dev/sda
kann man diesen Vorgang händisch anstoßen.
Nun müssen wir die neue Partition dem LVM zur Verfügung stellen.
pvcreate /dev/sda5
Jetzt müssen wir noch die gewünschte Volume Group um die hinzugefügte Partition vergrößern.
vgextend vg_webc0101 /dev/sda5
Danach kann das lvm Volume bequem vergrößert werden. In unsrem Falle auf die neue größe von 10Gb. Das richtige logical Volume findet man übrigens ganz einfach mittels df -h heraus. Mit dem Schalter -r resizen wir auch gleich das filesystem mit.
lvextend -r -l+100%FREE /dev/vg_webc0101/lv_root
Extending logical volume lv_root to 12.54 GiB
Logical volume lv_root successfully resized
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/vg_webc0101-lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mapper/vg_webc0101-lv_root to 3286016 (4k) blocks.
The filesystem on /dev/mapper/vg_webc0101-lv_root is now 3286016 blocks long.
Danach einfach noch die vergrößerte Partition wieder mounten.
mount /var/tmp/
Nachdem sich versichert hat dass alles funktioniert sollte auch der virtuelle Maschinen Snapshot wieder entfernt werden!