SSH via VPN, HTTP und co. via default route

Um einen Host hinter einer Firewall zu administrieren habe ich ein VPN zwischen den beiden Punkten aufgebaut. Um aber den ausgehenden Netzwerktraffic, der über die Firewall läuft, testen zu können brauchte ich eine Routing via Ports. Genau genommen wollte ich Port 22 durch den VPN Tunnel und den HTTP traffic über das Standard Gateway routen.
asyncrones-routing

Zuerst braucht man eine separate routing table in unserem Fall foo
echo "1 foo" >> /etc/iproute2/rt_tables

In diese routing Tabelle legen wir zuerst eine default route ab
ip route add table foo default dev vpn

Dann braucht man eine rule zum die angibt wann die foo routing Tabelle verwendet werden soll.
ip rule add fwmark 1 table foo

Nun kommen wir zur Auswahl der Pakete, die anders geroutet werden sollen. Dies geschieht über die mangle table. Hier werden die einzelnen Pakte über fwmarks markiert.
iptables -t mangle -A OUTPUT -d 203.0.113.80/32 -p tcp -m tcp --dport 22 -j MARK --set-xmark 0x1/0xffffffff

Damit der Kernel auch die ausgehenden Pakete richtig benennt, werden alle Pakete die über das VPN geroutet werden nun auf die source Adresse des VPNs umgeschrieben.
Dies ist notwendig, da der Kernel beim bestimmen der Absenderadresse unserer TCP Verbindung die firewall Konfiguration bei der Bestimmung der ausgehenden route nicht verarbeitet.
iptables -t nat -A POSTROUTING ! -s 10.8.0.2/32 -o vpn -j SNAT --to-source 10.8.0.2

Zum Schluss müssen wir das reverse path filtering ausschalten, damit die Entgegennahme der Pakete, deren Antwort an ein anderes Interface gehen würde, erlaubt werden.
echo 0 | tee /proc/sys/net/ipv4/conf/*/rp_filter

Ohje, alles gepacht und doch verwundbar

Es reicht nicht aus nur Updates einzuspielen, wenn man Dienste nicht neu startet deren libraries aktualisiert wurden. Denn erst nach einem Neustart werden diese neu eingelesen.

lsof | grep libssl | grep DEL
apache2 1129 www-data DEL REG 253,1 1831551 /lib/x86_64-linux-gnu/libssl.so.1.0.0

Ein einfacher Neustart der hier aufgeführten Dienstes reicht in diesem Fall aus.
/etc/init.d/apache restart

NTP Clients auf CentOS 7

Installation eines NTP Clients auf CentOS 7

Installation:
yum install ntp

Zeit von Hand updaten:
ntpdate de.pool.ntp.org

ggf. Zeitserver in der Config anpassen.
vim /etc/ntp.conf

Den ntp Dienst beim jetzt und beim Booten starten.
systemctl enable ntpd
systemctl start ntpd

mdadm bitmap erstellen

Bei RAIDs kommt es ab und an einmal vor, dass Festplatten aus dem RAID geworfen werden. Eine wieder hinzugefügte Festplatte muss dann wieder gesynct (resharpt) werden. In meinem Beispiel von 4x2TB Festplatten in einem RAID 5, dauert dass ca. 4 Stunden. Um die Wahrscheinlichkeit das während des resharpen eine weiter Festplatte ausfällt, das den Totaluferlust der Daten bedeuten würde, zu minimieren. Ist es sinnvoll auf kosten der Schreibperformance ein bitmap zu erstellen.

mdadm --grow --bitmap=internal /dev/md0

Alternativ kann man das bitmap auch auf eine separate Festplatte schreiben, dies erhört die schreib Performance des RAIDs.

mdadm --grow --bitmap=/mnt/bitmap-md0.bin /dev/md0

Um die bitmaps wieder auszuschalten muss man none angeben:

mdadm --grow --bitmap=none /dev/md0

Read the rest of this entry »

USB Platte mit LVM und mdadm Raid unsaber ausgehangen

Nach dem unsauberen entfernen einer USB Platte mit LVM und mdadm Raid kam es beim aufrufen jeglicher lvm Kommandos zu folgenden Fehlern:

# vgscan
Reading all physical volumes. This may take a while...
/dev/md0: read failed after 0 of 4096 at 0: Input/output error
/dev/md0: read failed after 0 of 4096 at 9997975552: Input/output error
/dev/md0: read failed after 0 of 4096 at 9998090240: Input/output error
/dev/md0: read failed after 0 of 4096 at 4096: Input/output error
/dev/dm-23: read failed after 0 of 4096 at 45097091072: Input/output error
/dev/dm-23: read failed after 0 of 4096 at 45097148416: Input/output error
/dev/dm-23: read failed after 0 of 4096 at 0: Input/output error
/dev/dm-23: read failed after 0 of 4096 at 4096: Input/output error
Found volume group "vg01" using metadata type lvm2

Mittels dmsetup kann man die lvs löschen. Die fehlen lvs kann man mittels ls auflisten und mit remove wieder löschen:
# dmsetup ls | grep ^vg01
vg01-lv66_hdd (254, 23)
# dmsetup remove vg01-lv66_hdd

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdd1[2]
9763768 blocks super 1.2 [2/1] [_U]

Das raid device konnte man mittels mdadm dann einfach Stoppen. Siehe dazu auch: mdadm –stop