Kategori Security

speedport.ip 403 permission to get this page

Mittwoch, Dezember 12th, 2012

Heute mussten wir bei einem Kunden das WLAN auf seinem neuen DSL Router einstellen. Hierfür habe ich den Port auf meinen Rechner durch leiten wollen:

ssh -L 8080:192.168.2.1:443 hostname-client

Dann haben wir aber eine 403 Error bekommen:
403 Forbidden
Your client does not have permission to get this page.(code=41193) from this server.

Also habe ich in der /etc/hosts auf meinem localen Rechner den Namen des Routers Nachgetragen:
127.0.0.1 speedport.ip

Dann habe ich den SSH Befehl noch um sudo erweitert um den Port 443 (SSL) bei mir auch local zu binden.
sudo -i ./id_rsa ssh -L 443:192.168.2.1:443 hostname-client

version.bind

Freitag, Oktober 19th, 2012

Hier habe ich mal ein Script geschrieben wie man die Bind Version von allen Nameserver einer Domain herausfindet.

#!/bin/bash
for ns in $(host -t ns $1 | awk '{print $4}'); do 
	echo -n "$ns: "
	dig @$ns -c CH -t txt version.bind | grep "^version.bind." | grep TXT | awk '{print $5}'
done

Ausgabe:
#version-bind.sh istoph.de
ns01.caix.de.: "9.9.1-P3"
ns03.caix.de.: "9.9.2rc1"

Um das zu verhindern kann man in der /etc/bind/named.conf.options im Options teil die Variabele version sätzen.
options
{
version "unknown";
...

Danach liefert bind nur noch den String in der Versions-Variable aus:
#version-bind.sh istoph.de
ns01.caix.de.: "unknown"
ns03.caix.de.: "unknown"

gpg key expierd

Donnerstag, September 27th, 2012

Toll wenn auslaufende gpg keys einen daran erinnern wie lange man schon in der Firma ist. Heute ist der Key für unseren deb Pakete ausgelaufen. Da ich diesen mit als erstes Projekt in der Firma hatte freute ich mich heute wie ein Bär über folgende Fehlermeldung.

W: GPG error: http://repository.chr.istoph.de gpl Release: The following signatures were invalid: KEYEXPIRED 1348734885 KEYEXPIRED 1348734885 KEYEXPIRED 1348734885

server:~# gpg --list-keys
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
/root/.gnupg/pubring.gpg
------------------------
pub   1024D/F748C82F 2010-09-28 [expired: 2012-09-27]
uid                  Christoph Hueffelmann (repository.chr.istoph.de) 

server:~# gpg --edit-key F748C82F
gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

pub  1024D/F748C82F  created: 2010-09-28  expired: 2012-09-27  usage: SC  
                     trust: ultimate      validity: expired
sub  2048g/686FE6D2  created: 2010-09-28  expired: 2012-09-27  usage: E   
[ expired] (1). Christoph Hueffelmann (repository.chr.istoph.de) 

Command> key 1

pub  1024D/F748C82F  created: 2010-09-28  expired: 2012-09-27  usage: SC  
                     trust: ultimate      validity: expired
sub* 2048g/686FE6D2  created: 2010-09-28  expired: 2012-09-27  usage: E   
[ expired] (1). Christoph Hueffelmann (repository.chr.istoph.de) 

Command> expire
Changing expiration time for a subkey.
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0) 2y
Key expires at Sat 27 Sep 2014 12:08:30 PM CEST
Is this correct? (y/N) y

pub  1024D/F748C82F  created: 2010-09-28  expired: 2012-09-27  usage: SC  
                     trust: ultimate      validity: expired
sub* 2048g/686FE6D2  created: 2010-09-28  expired: 2014-09-27  usage: E   
[ expired] (1). Christoph Hueffelmann (repository.chr.istoph.de) 

Command> quit
Save changes? (y/N) y

Anschließend musst ich nur noch das gesamte repository neu bauen lassen um damit die signierten Dateien neu signiert wurden. Auf den Clients die auf das repository zugreifen muss der Key nicht geändert werden.

disable ipv6 aus Sicherheitsgründen

Donnerstag, Juli 26th, 2012

Da wir in unserem Wohnheims-Netz eh kein IPv6 bekommen werden, habe ich kurzerhand entschlossen alle Server von der Automatischen Beziehung von IPv6 Adressen, aus Sicherheitsgründen, auszuschließen.

Das Problem was dabei entsteht ist das IPv6 Verbindungen grundsätzlich priorisiert werden. Wenn jetzt jemand „sagt“ hier hast du eine IPv6 Address und eine Route ins Internet. Dann wird der IPv6 Traffig über diesen Gateway transportiert. So hat ein Angreifer eine wunderbare „man in the middle“ Position.

Eine schlechte Idee ist es IPv6 im Kernel ganz auszuschalten, das führt unter aktuellen Systemen dazu das einige Dienste die mit ::1 kommunizieren nicht mehr funktionieren. (ein Beispiel dafür ist ssh -X)

echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
echo "net.ipv6.conf.all.disable_ipv6 = 1" > /etc/sysctl.d/01-disable-ipv6.conf

Was man aber machen will ist die reine autoconf (der dhcp Ersatz) Funktion abzuschalten. Das geht mit:

echo "net.ipv6.conf.all.autoconf=0" > /etc/sysctl.d/01-disable-ipv6-autoconf.conf
echo "net.ipv6.conf.all.accept_ra=0" >> /etc/sysctl.d/01-disable-ipv6-autoconf.conf

Eine eigene x509v3 CA erstellen

Samstag, April 28th, 2012

Zunächst wird eine Config Datei benötigt.
ca.conf:
[ req ]
default_bits=4096
default_md=sha512
utf8=yes
distinguished_name=req_distinguished_name
x509_extensions=x509_exts

[ req_distinguished_name ]

[ x509_exts ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints = CA:true

[ ca ]
default_ca=default_ca

[ default_ca ]
certificate=ca.crt
private_key=private/ca.key
default_days=36500
default_md=sha512
database=meta/db.txt
unique_subject=no
serial=meta/serial
policy=ca_policy
name_opt=ca_default
cert_opt=ca_default
copy_extensions=copyall
x509_extensions=ca_x509_ext

[ ca_x509_ext ]
# an empty referenced section ensures a v3 cert is generated

[ server ]
nsCertType=server

[ ca_policy ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = optional
emailAddress = optional

Dann werden noch ein paar Ordner, eine lehre Datenbank(halde) und eine Seriennummer benötigt.
mkdir private meta certs
touch meta/db.txt
echo 01 > meta/serial

Nun wird die CA erstellt.
openssl req -x509 -subj /CN=TestCA -newkey rsa:4096 -keyout private/ca.key -out ca.crt -nodes -config ca.conf -days 36500

Dann muss das CSR (Certifikate signing request) erstellt werden.
openssl req -subj /CN=TestCert -newkey rsa:4096 -keyout new.key -out new.csr -nodes -config ca.conf -days 36500

Zum Schluss wird aus dem CSR das von der CA signierte Zertifikat des Clients.
openssl ca -in new.csr -outdir certs/ -config ca.conf -notext -utf8

Möchten man nun z.b. ein vpn Server mit der CA betreiben braucht man noch ein Server Zertifikat.
openssl ca -in new.csr -outdir certs/ -config ca.conf -extensions server -notext -utf8
(z.B. openvpn server wenn man die –ns-cert-type server bei den clients angibt)

Die Zertifikate kann man sich dann mit folgenden Befehl anzeigen lassen.
openssl x509 -in ca.crt -noout -text

Quelle: www.openssl.org

[update 17.02.2014]
Der Hash Algorithmus wurde von sha1 auf sha512 geändert, da dieser als Angreifbar gilt.