Webserver Härtung

Die IT-Sicherheitsbranche bleibt nicht stehen, deswegen gibt es hier mal wieder einen Aktualisierung/Ergänzung zu meinem Artikel über sichere Webserver-Konfiguration.

Wo ich früher eigentlich ausschließlich SSLlabs zum Testen meiner Webserver Konfiguration eingesetzt habe steht bei mir mittlerweile eine Kombination aus diversen Tools im Vordergrund.

Weiterlesen

Puppet Config für einen sicheren Webserver

Hier mal die Puppet Config für meinen Webserver. Das ganze besteht aus mehreren Teilen, der Webserver allgemein:

class blue-web-srv::srv {
	
	class { 'apache': 
		server_tokens  => 'Prod',
		server_signature => 'EMail',
		trace_enable => 'off',
		mpm_module => 'prefork'
	}
	apache::listen { '80': }
	apache::listen { '443': }
	class { 'apache::mod::ssl':
		ssl_cipher => 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256',
		ssl_protocol => [ 'all', '-SSLv2', '-SSLv3', '-TLSv1', '-TLSv1.1' ],
		ssl_compression => false,
		ssl_honorcipherorder => true,
		ssl_stapling => true,		
	}
	class { 'apache::mod::rewrite': }
	class { 'apache::mod::headers': }
	class { 'apache::mod::php': }

}

dann der Config für den VHost:

class blue-web-srv::sebastianhaeutlede {

	$domain = 'sebastian-haeutle.de'
	$alias = ['www.haeutleit.de', 'haeutleit.de', 'www.sebastian-haeutle.de', 'www.sebastian-haeutle.com', 'sebastian-haeutle.com', 'www.sebastianhaeutle.de', 'sebastianhaeutle.de']
	
	file { "/opt/myssl/${domain}":
		ensure => 'directory',
		owner  => 'root',
		group  => 'root',
		mode   => '0755',
	}
	
	file { "/opt/myssl/${domain}/request.cnf":
		ensure  => file,
		content => template('blue-web-srv/request.cnf.erb'),
	}
	
	apache::vhost { "${domain}_non-ssl":
		servername => $domain,
		serveraliases => $alias,
		serveradmin => 'root@haeutle-it.de',
		port       => '80',
		ip_based   => true,
		docroot    => "/var/httpd/${domain}",
		docroot_owner => 'www-data',
		docroot_group => 'www-data',
		redirect_status => 'permanent',
		rewrite_cond => '%{HTTPS} off',
		rewrite_rule => '(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]',
	}
	apache::vhost { "${domain}_ssl":
		servername => $domain,
		serveraliases => $alias,
		serveradmin => 'root@haeutle-it.de',
		port       => '443',
		ip_based   => true,
		docroot    => "/var/httpd/${domain}",
		docroot_owner => 'www-data',
		docroot_group => 'www-data',
		ssl     => true,
		ssl_cert => '/opt/myssl/fullchain.pem',
		ssl_key  => '/opt/myssl/privkey.pem',
		ssl_openssl_conf_cmd => 'DHParameters "/opt/myssl/dhparam.pem"',
		ssl_stapling_timeout => '5',
		ssl_stapling_return_errors => false,
		directories  => [
			{ path           =>  "/var/www/${domain}",
			allow_override => ['all'],
			},
		],
		headers => [
			'always set Strict-Transport-Security: "max-age=31536001; includeSubDomains"',
			'always set X-Content-Type-Options nosniff',
			'edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure',
			'set X-XSS-Protection "1; mode=block"',
			'append X-Frame-Options "SAMEORIGIN"',
			'set X-Content-Security-Policy "default-src https:"',
			'set Public-Key-Pins "pin-sha256=\"XXXXX=\"; max-age=100800; includeSubDomains"'
			],
	}

}

und schließlich noch eine Datenbank für das mysql.

Dieses Setup reicht für ein A+ Rantig auf SSLlabs und immerhin ein B Ranting bei observatory.mozilla.org

So Long, and Thanks For All the Fish // Goodby genua

Heute war mein letzter echter Arbeitstag bei genua in Kirchheim. Es waren jetzt insgesamt doch 3 Jahre die ich für genua gearbeitet habe. Ich durfte viele neue Technologien entdeckten und klasse Kollegen kennenlernen. Danke an das Team der System Administration (SYS) für eine interessante und bereichernde Zeit bei genua.

keybase.io: GPG-Keys verifizieren

Seit einiger Zeit bin ich auf keybase.io Mitglied.
Über das Portal kann man gpg-keys verifizieren, schaut es euch einfach mal an.

Ich habe noch ein Paar Invites zu vergeben, bei Interesse einfach anmailen.

Verifizierung per Twitter

Verifizierung per DNS

> sebastian-haeutle.de
Server:  fritz.box
Address:  fd00::9ec7:a6ff:fe82:1244

Nicht autorisierende Antwort:
sebastian-haeutle.de    text =

        "keybase-site-verification=CiSrWCPWbCen-GiveLVprebIO5AJJ8LATMh7iG4f-ro"
>

Prüfung des Keys über die Kommandozeile

shaeutle@haeutle.net:~$ keybase  id schlaubibasti
  public key fingerprint: D16E A591 6C8E 766D 88A5 F764 5790 E010 CA75 A6F4
  "schlaubibasti" on twitter: https://twitter.com/schlaubibasti/status/569477492156866560
  "schlaubibasti" on github: https://gist.github.com/04cf98f5ae4ed9899434
  admin of www.haeutle.net via HTTP: http://www.haeutle.net/.well-known/keybase.txt
  admin of the DNS zone for haeutle.net
  admin of the DNS zone for schlaubibasti.de

CAcert Self-Signed Certificate in apache2

Für mich als Gedankenstütze: Wie richte ich einfach und schnell ein neues Zertifikat mit CAcert ein.

mkdir /etc/myssl/DOMAIN
cd /etc/myssl/DOMAIN
mkdir private
mkdir public

openssl genrsa -out private/privkey.pem 4096
chmod 600 private/privkey.pem
openssl req -new -key private/privkey.pem -out cert.csr 
## „CommonName” = Domainname z.B. „meinedomain.com„
cat cert.csr
## Output bei CAcert einreichen
vi public/domain.pem
## Output von CAcert speichern
wget http://www.cacert.org/certs/class3.crt
## Apache Konfigurieren
a2enmod ssl

vi /etc/apache2/ports.conf
<IfModule mod_ssl.c>
Listen 443
</IfModule>

<VirtualHost *:443>
DocumentRoot /var/www
ServerName meinedomain.com
SSLEngine on
SSLCertificateKeyFile /etc/myssl/DOMAIN/private/privkey.pem
SSLCertificateFile /etc/myssl/DOMAIN/public/domain.pem
SSLCACertificateFile /etc/myssl/DOMAIN/intermediate_ca.crt
SSLCipherSuite 'EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA:EECDH:EDH+AESGCM:EDH:+3DES:ECDH+AESGCM:ECDH+AES:ECDH:AES:HIGH:MEDIUM:!RC4:!CAMELLIA:!SEED:!aNULL:!MD5:!eNULL:!LOW:!EXP:!DSS:!PSK:!SRP'
</VirtualHost>

service apache2 restart