Archiv

Archiv für die Kategorie ‘Linux’

Bash ~/.bashrc, /etc/profile

31. Mai 2016 Keine Kommentare

Die folgende Grafik verdeutlicht welche Bash Konfigurationsdateien verwendet und geladen werden.
Grundsätzlich ist das davon abhängig ob es sich von um eine interactive shell handelt, welche Paramter verwendet werden und ob es eine login shell ist.

bash_config_files

Source

KategorienLinux

NTP Stratum 2 installieren und konfigurieren (ntp.conf)

15. Mai 2016 Keine Kommentare

Da immer mehr Geräte an das Internet angeschlossen sind, steigt die Anzahl der NTP Queries kontinuierlich an. Manche Hersteller wie Microsoft oder Apple stellen den Usern eigene Zeitserver zu Verfügung, aber viele andere Entwickler, Hersteller oder Provider nutzen frei zugängliche NTP Pools um die Uhrzeit synchronisieren zu lassen. Dazu zählen Linux Distributionen, DSL Router, Kabel Router und viele andere Betriebssysteme oder Appliances.

Der am häufigsten verwendete Pool ist pool.ntp.org an welchem auch mein Server angeschlossen ist. Die Last wird unter tausenden von angeschlossen NTP Servern verteilt, aber dennoch steigt der Bedarf an weiteren NTP Servern da immer mehr Anfragen zu bedienen sind.

Während die Zeitsynchronisierung und das NTP Protokoll eine Wissenschaft für sich sind, ist es denkbar einfach einen NTP Stratum 2 Server für die Nutzung im Pool zu installieren. Während Stratum 1 Server direkt an einen sehr genauen Zeitgeber angeschlossen sein müssen, reicht es für Stratum 2 aus die Uhrzeit über das Internet zu synchronisieren und den Usern zur Verfügung zu stellen.

Unter Debian / CentOS / RedHat installiert mein dazu einfach das ntp Paket und konfiguriert den NTP Daemon. Ich verwende sieben Stratum 1 Server als Zeitgeber. Das ist zum einen länderübergreifend redundant und zum anderen auch ziemlich genau. NTP sucht sich dann selbst die zu verwendenden Stratum 1 Zeitgeber heraus. Den Status kann man jederzeit mit „ntpq -p“ prüfen und sehen wie sich der eigene Server verhält.

Diese Konfiguration ist nur sinnvoll wenn man selbst die Uhrzeit weitergeben möchte. Also Mitglied eines Pools wird oder anderweitig (sehr) viele Clients bedient. Als Endnutzer oder für einen NTP Server im eigenen Netzwerk, reicht es völlig aus selbst einen NTP Pool als Client zu verwenden. So wie das in der default Konfiguration des NTP Pakets der Fall ist. Die Stratum 1 Server müssen hierfür nicht belastet werden. Möchte man aber selbst dem Pool beitreten, sollte der Server ein Stratum 2 oder Stratum 1 Server sein, allerdings ist das (zumindest bei pool.ntp.org) keine explizit definierte Voraussetzung.

Weitere Informationen zu pool.ntp.org und Statistiken meines NTP Servers gibt es hier.

Stratum 2 ntp.conf Settings Example:

/etc/ntp.conf

driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
restrict default kod limited notrap nomodify nopeer noquery
restrict -6 default kod limited notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
 
# Stratum 1 DE
server ptbtime1.ptb.de iburst
server ntps1-0.cs.tu-berlin.de iburst
server ntp0.fau.de iburst
 
# Stratum 1 AT
server time.metrologie.at iburst
 
# Stratum 1 CH
server ntp.metas.ch iburst
 
# Stratum 1 NL
server ntp0.nl.net iburst
 
# Stratum 1 FR
server ntp-p1.obspm.fr iburst
KategorienLinux

Kostenlose SSL Zertifikate mit letsencrypt

21. Februar 2016 Keine Kommentare

Die letzten Tage habe ich mir letsencrypt angeschaut und bin wirklich positiv überrascht. Zum einen ist es gut dokumentiert und einfach zu benutzen, vor allem funktioniert es auch. Wie einfach es ist möchte ich hier zeigen.

Installation

Das letsencrypt Script wird beim ersten Aufruf alle Abhängigkeiten für das OS nachinstallieren und nachladen.

cd /root
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto

Konfiguration

Die Konfigurationsdatei befindet sich unter /etc/letsencrypt/cli.ini Hier können Dinge konfiguriert werden, die für alle Zertifikate gültig sein sollen.
Mir war es z.B. lieber 4096-bit RSA Keys (Default: 2048) zu erzeugen und die E-Mail Adresse ändert sich auch nicht.

rsa-key-size = 4096
email = webmaster@example.com

Zertifikat erstellen

Um ein Zertifikat zu erstellen benötigt man einen Webserver auf Port 80 mit einem bereits konfigurierten VirtualHost. Danach reicht ein einzelner Befehl um das SSL Zertifikat zu erstellen. Mit certonly signalisiert man, dass man Apache lieber selbst konfigurieren möchte.

./letsencrypt-auto certonly --webroot -w /var/www/example.com -d example.com -d www.example.com

Die Zertifikate (und alle weiteren Dateien) liegen anschließend unter /etc/letsencrypt/live

SSL Weiterleitung mit letsencrypt

Ich persönlich habe eine Weiterleitung von HTTP auf HTTPS konfiguriert. Dennoch muss der letsencrypt Server in der Lage sein Daten per HTTP aus dem VirtualHost abrufen zu können. Das dient zur Domain Verifikation. Die Lösung war einen Port 80 VirtualHost zu erstellen und mit mod_rewrite zu arbeiten:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com
    ServerAdmin webmaster@example.com
    CustomLog /var/log/apache2/access.log combined
    ErrorLog /var/log/apache2/error.log
 
    <Directory "/var/www/example.com">
      RewriteEngine on
      RewriteBase /
      RewriteCond %{HTTPS} off
      RewriteCond %{REQUEST_URI} !^/.well-known/.*$
      RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]
    </Directory>
</VirtualHost>

Der .well-known Pfad wird von letsencrypt verwendet und wird nicht weitergeleitet. Ansonsten wird alles auf HTTPS umgeleitet. Der VirtualHost hat also nur die Funktion letsencrypt zu bedienen und die Umleitung vorzunehmen.

Renewal

Die letsencrypt Zertifikate sind nur 90 Tage lang gültig. Daher sollte man einen cronjob einrichten der die Aktualisierung automatisiert. Auch das wurde von den Entwicklern sehr einfach gelöst. Bei mir läuft der Cronjob jeden Sonntag morgen. letsencrypt erneuert alle Zertifikate die noch weniger als 30 Tage gültig sind, von daher reicht das locker aus.

0       7       *       *       0       /root/scripte/letsencrypt_renew.sh

Das Script prüft auch gleichzeitig ob Zertifikate erneuert wurden und startet anschließend die Dienste automatisch neu.

#!/bin/bash
 
LOGFILE=$(mktemp)
 
cd /root/letsencrypt
./letsencrypt-auto renew &> $LOGFILE
 
if [ $? -ne 0 ]; then
  echo -e "ERROR: Something went wrong with letsencrypt.\n\n"
  cat $LOGFILE
else
  if [[ -n $(find -L /etc/letsencrypt/live/ -type f -mtime -1 2>/dev/null) ]]; then
    echo -e "INFO: letsencrypt renewed some certificates.\n\n"
    cat $LOGFILE
    service apache2 graceful
  fi
 
  if [[ -n $(find -L /etc/letsencrypt/live/mailserver.example.com/ -type f -mtime -1 2>/dev/null) ]]; then
    service postfix reload
    service dovecot reload
  fi
fi
 
rm $LOGFILE

Webseiten

letsencrypt Website: Link
letsencrypt Dokumentation: Link

Ich bin auf jedenfall ein großer Fan von diesem kostenlosen Service und HTTPS nutze ich ohnehin schon lange.

KategorienLinux