Archiv der Kategorie: Anleitungen

Anleitungen bzw. Beschreibungen zum beheben von Problemen oder zum Umsetzen von bestimmten Projekten.

Raspberry PI als AccessPoint einrichten

Die Hardwareplatform Raspberry PI eignet sich auch sehr gut um diese als AccessPoint zu verwenden. Die Einrichtung erfolgt in wenigen Schritten.

Installation der notwendigen Pakete

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install dnsmasq hostapd bridge-utils iptables

Deaktivieren der gerade Installierten Software bis wir alles konfiguriert haben:

sudo systemctl stop dnsmasq
sudo systemctl stop hostapd

DHCP client & IP Konfiguration

Zuerst schalten wir den DHCP Client für das wireless Interface (ich nehme hier an, dass dieses wlan0 ist – was wohl in 98% der Fällen so sein sollte).

sudo vi /etc/dhcpcd.conf

Am Ende der Datei folgendes einfügen:

denyinterfaces wlan0

Nun noch eine statische IP für unser WLAN Interface:

sudo vi /etc/network/interfaces
allow-hotplug wlan0  
iface wlan0 inet static  
    address 192.168.0.1
    netmask 255.255.255.0
    network 192.168.0.0

Nun können wir den DHCP Client starten und die Einstellungen des wlan0 interface übernehmen:

sudo systemctl daemon-reload
sudo service dhcpcd restart
sudo ifdown wlan0 && sudo ifup wlan0

DHCP Server (dnsmasq) einrichten

Wir verwenden als DHCP Server für das WLAN Interface dnsmasq. Die hier standardmäßig mitgelieferte Konfiguration ist recht sperrig. Für unseren sehr einfachen Einsatzzweck starten wir also mit einer leeren Konfiguration.

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.org  
sudo vi /etc/dnsmasq.conf

In die Datei folgendes kopieren:

interface=wlan0
no-dhcp-interface=eth0
dhcp-range=192.168.0.100,192.168.0.200,255.255.255.0,24h
dhcp-option=option:dns-server,8.8.8.8

Mit dieser Konfiguration vergibt der DHCP Server Adressen in der Range von *.100 bis *.200 mit einer lease time von 24h und das natürlich nur über das Interface wlan0.

Konfiguration der AccessPoint Software (hostapd)

Die Konfiguration der AccessPoint Software erfolgt über eine einzige Konfigurationsdatei:

sudo vi /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=MyWifi
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=P@ssw0rd
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

Jetzt müssen wir dem System noch mitteilen wo es die Konfiguration findet.

sudo vi /etc/default/hostapd

In der Datei suchen wir den Teil „#DAEMON_CONF“ und ersetzen diesen durch folgenden:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

… und gleich noch mal

sudo vi /etc/init.d/hostapd

Dort die Zeile mit „DAEOMON_CONF“ ebenfalls ersetzen mit

DAEMON_CONF=/etc/hostapd/hostapd.conf

Network Address Translate (NAT) einrichten

Erst mal müssen wir grundsätzlich das Weiterleiten von Paketen erlauben.

sudo vi /etc/sysctl.conf

In der Datei muss die Einstellung

#net.ipv4.ip_forward=1

auskommentiert werden.

allow_ipv4_forwarding-300x176-7752975

Um die Einstellung zu aktivieren bitte folgenden Befehl ausführen:

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

Nun brauchen wir noch die notwendigen Firewall Regeln

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Um diese zu persistieren installieren wir ein extra Paket:

sudo apt-get install iptables-persistent

Die Nachfrage des Installationsprogramms sollte mit „ja“ beantwortet werden

iptables_persist-1024x476-6162627

Sollte die Installation nicht funktionieren und pings zu z. B. security-blog.eu ebenfalls nicht funktioneren so muss ggf. die Nameserver Einstellung angepasst werden:

sudo vi /etc/resolv.conf

In der Datei sollte der Nameserver aufgeführt sein (z. B. der eigene vorhandene Internet-Router).

Zum Schluss würde ich empfehlen den Server ein Mal neu zu starten um alle Einstellungen auch wirklich aktiv werden zu lassen. Nach dem Neustart sollte das Wifi zu sehen sein und verbundenen Geräten den Zugang ins Internet bereitstellen.

Headless (unbeaufsichtigte) Installation eines Raspberry PI

Nichts ist lästiger wie einen Raspberry PI vollständig verkabeln zu müssen bevor man ihn als server einsetzt. Zum Glück kann man einen Raspberry sehr einfach auch unbeaufsichtigt installieren.

Schritt 1: Herunterladen des Image

Die notwendige Datei kann man hier herunterladen. Die Lite Version ist die Version, die wir benötigen.raspberry_download-1024x793-2912919

Schritt 2: Image auf die SD-Karte übertragen

Ich verwende für das schreiben von Image Dateien auf USB Sticks oder SD-Karten immer das Tool Win32Imager.

win32imager-300x218-5376803

Schritt 3: SSH Service aktivieren

Wenn man weiß wie es geht ist das Aktivieren des SSH Servers zum Glück sehr einfach. Im root Verzeichnis der SD-Karte muss schlicht eine Datei (ohne Dateierweiterung!) angelegt werden.

ssh_server_raspberry-300x167-2265711

Schritt 4: Raspberry starten

Nun muss die SD-Karte in den Raspberry eingelegt werden. Danach sucht man entweder mit einem Netzwerkscanner wie nmap oder über das DHCP Modul des Routers nach der IP-Adresse des Raspberry PI und verbindet sich danach z. B. mit putty und meldet sich mit den default Anmeldedaten an.

username: pi
password: raspberry

Schritt 5: Raspberry einrichten

Nach der erfolgreichen Anmeldung muss der Raspberry nur noch eingerichtet werden. Dies erledigt man am besten mit dem dafür bereitgestellten Tool:

sudo raspi-config

 

 

Beschleunigen der Antwortzeit von WordPress (für Apache)

Google und natürlich auch die Nutzer von Webseiten legen einen immer größeren Fokus auf die Antwortzeit des Webservers. Google bietet hierfür ein spezielles Tool welches eine Webseite auf Verbesserungsmöglichkeiten hin untersucht. Neben den recht einfach via Plugin’s lösbaren Problemen wie z. B. die minifizierung und Zusammenführung von CSS und Javescript Dateien gibt es auch etwas komplexere Probleme die gelöst werden müssen um einen guten Wert zu erreichen.

Komprimieren & Cachen

Der einfachste Weg die vom (Apache-) WEbserver bereitgestellten Daten so auszuliefern, dass diese maximal komprimiert sind und gleichzeitig vom Browser gecached werden, ist das einfügen des nachfolgenden codes in the virtual host Konfiguration:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault A2592000
     
    <FilesMatch "\.(txt|xml|js)$">
        ExpiresDefault A2592000
    </FilesMatch>
     
    <FilesMatch "\.(css)$">
        ExpiresDefault A2592000
    </FilesMatch>
     
    <FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav|mp4|m4v|ogg|webm|aac)$">
        ExpiresDefault A2592000
    </FilesMatch>
     
    <FilesMatch "\.(jpg|jpeg|png|gif|swf|webp)$">
        ExpiresDefault A2592000
    </FilesMatch>
</IfModule>
 
<IfModule mod_headers.c>
    <FilesMatch "\.(txt|xml|js)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
 
    <FilesMatch "\.(css)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
 
    <FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav|mp4|m4v|ogg|webm|aac)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
 
    <FilesMatch "\.(jpg|jpeg|png|gif|swf|webp)$">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
</IfModule>
 
<IfModule mod_deflate.c>
    <IfModule mod_setenvif.c>
        <IfModule mod_headers.c>
            SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
            RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
        </IfModule>
    </IfModule>
    <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE "application/atom+xml" \
                                      "application/javascript" \
                                      "application/json" \
                                      "application/ld+json" \
                                      "application/manifest+json" \
                                      "application/rdf+xml" \
                                      "application/rss+xml" \
                                      "application/schema+json" \
                                      "application/vnd.geo+json" \
                                      "application/vnd.ms-fontobject" \
                                      "application/x-font-ttf" \
                                      "application/x-javascript" \
                                      "application/x-web-app-manifest+json" \
                                      "application/xhtml+xml" \
                                      "application/xml" \
                                      "font/eot" \
                                      "font/opentype" \
                                      "image/bmp" \
                                      "image/svg+xml" \
                                      "image/vnd.microsoft.icon" \
                                      "image/x-icon" \
                                      "text/cache-manifest" \
                                      "text/css" \
                                      "text/html" \
                                      "text/javascript" \
                                      "text/plain" \
                                      "text/vcard" \
                                      "text/vnd.rim.location.xloc" \
                                      "text/vtt" \
                                      "text/x-component" \
                                      "text/x-cross-domain-policy" \
                                      "text/xml"
 
    </IfModule>
    <IfModule mod_mime.c>
        AddEncoding gzip              svgz
    </IfModule>
 
</IfModule>

PHP OpCache

Ein weiterer Weg um insbesondere die grunsätzliche Antwortzeit des eigenen Server zu verbessern ist der Einsatz von OpCache. Dieses PHP Modul sorgt dafür, dass wesentliche Code Teile nicht erst zur Laufzeit berechnet werden müssen da sie gespeichert werden.

Anpassungen der php.ini

vi /etc/php5/apache2/php.ini

Suche folgenden Code:

;opcache.enable=0

Und ersetzte ihn mit:

opcache.enable=1

Neben dem grundsätzlichen einschalten des Moduls kann man noch weitere Einstellungen anpassen um den Cache auszureizen. z. B.

opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache_revalidate_freq = 240

Einschalten des PHP Moduls

sudo php5enmod opcache

Neustart des Webservers

sudo service apache2 restart

 

Automatisches Update für einen Debian Server

In der Windows Welt ist es ganz normal, dass man nach der Installation gefragt wird, ob sich das System selbst mit (Sicherheits-) Updates versorgen soll. Auf einem Debian System ist dies etwas anderst und bedarf einer kurzen Konfiguration. Ich empfehle für diesen Zweck die Installation des Tools „unattended-upgrades“:

# apt-get install unattended-upgrades

Die Grundkonfiguration ist an sich schon nicht schlecht, da ich jedoch gerne weiß was auf meinem System passiert lasse ich mir die logs der updates zuschicken. Dies erreicht man durch die Anpassung der Zeile:

Unattended-Upgrade::Mail "root";

In der Konfigurationsdatei

#/etc/apt/apt.conf.d/50unattended-upgrades

Zum aktivieren der automatischen Updates führt man nun noch folgenden Befehl aus:

# dpkg-reconfigure -plow unattended-upgrades

oder legt alternativ die Datei

#/etc/apt/apt.conf.d/02periodic

mit folgendem Inhalt von Hand an:

// Enable the update/upgrade script (0=disable)
APT::Periodic::Enable "1";

// Do "apt-get update" automatically every n-days (0=disable)
APT::Periodic::Update-Package-Lists "1";

// Do "apt-get upgrade --download-only" every n-days (0=disable)
APT::Periodic::Download-Upgradeable-Packages "1";

// Run the "unattended-upgrade" security upgrade script
// every n-days (0=disabled)
// Requires the package "unattended-upgrades" and will write
// a log in /var/log/unattended-upgrades
APT::Periodic::Unattended-Upgrade "1";

// Do "apt-get autoclean" every n-days (0=disable)
APT::Periodic::AutocleanInterval "7";

Das war es auch schon – nun sollten die Sicherheitsupdates automatisch auf dem System eingespielt werden und entsprechende Benachrichtungen zu root gesendet werden.

HomeMatic CCU2 in Betrieb nehmen

Nachdem ich meine ersten Schritte der HomeAutomation mit einer auf einem Raspberry PI basierten FHEM gegangen bin, dabei aber durchweg auf HomeMatic Komponenten gesetzt habe, wollte ich nun auch die Steuerzentrale die direkt von HomeMatic angeboten wird testen.

Inbetriebnahme

Der Aufbau und der erste Start des Gerätes ist recht einfach wenn man sich etwas mit IT auskennt und nicht versucht sich an die Anleitung zu halten. Darin steht nämlich z. B. dass man die Webseite der Steuerzentrale im lokalen Netz über http://homematic-ccu2 erreichen kann – was natürlich in jedem normalen Netz nicht funktionieren wird. Im Gegenteil findige Werbetreibende haben die URL mit .com erweitert registriert und genau dort landet man mit gängigen Browsern auch da diese von einem Tippfehler ausgehen.

Nachdem man es also hinbekommen hat die IP Adresse des neuen Gerätes entweder über den eigenen Router oder die HomeMatic Windows Software herauszufinden, wird man von der Software begrüßt und gebeten ein Update durchzuführen (sehr sinnvoll). Die Startseite in welche man danach geleitet wird ist sehr übersichtlich und man findet sich recht schnell darauf zurecht.

image_thumb-6509968

Sicherheitsschlüssel ändern

Die wichtigen Dinge zuerst ;-). Über den Button Einstellungen –> Systemsteuerung erreicht man das Menü mit den wesentlichen Einstellungsmöglichkeiten der Software. Unter dem Punkt Sicherheit hat man hier auch die Möglichkeit den verwendeten AES Schlüssel von dem sonst verwendeten Standard (identisch auf allen Geräten und daher nicht empfehlenswert) abzuändern. Den neuen Schlüssel sollte man auf jeden fall an einem oder besser mehreren sicheren Orten aufbewahren! Man kann in dieser Maske zudem den SSH Server aktivieren und ein Backup erstellen (empfehlenswert nachdem man den Sicherheitsschlüssel geändert hat).

image_thumb-1-9960039

Zeitserver Ändern

Im Standard verwendet die CCU2 einen Zeitserver von Homematic. Da man damit für den Hersteller transparent macht, dass man seine Produkte verwendet etc. stelle ich diese Einstellung auf einen allgemeinen ntp server um. In der Systemsteuerung klickt man hierfür auf Zeit-/ Positionseinstellung und ändern den Wert des Zeitservers wie in meinem Beispiel ab:

image_thumb-2-9341558

CCU – Firewall

Die Adressbereiche die für den eingeschränkten Zugriff verwendet werden, werde nicht mit den vom DHCP Server erhaltenen Daten abgeglichen. Ich habe bei mir ein 10er Netz und die Freigaben waren für ein 192er class B eingerichtet. Man sollte diese Einstellungen somit auf sein eigenes Netz anpassen und speichern. Erreichen kann man diese über den Menüpunkt Firewall konfigurieren ebenfalls in der Systemsteuerung.

Allgemeine Einstellungen

Wer mit der CCU2 auch mit dem Preis pro kWh Strom oder Gas rechnen möchte, kann die dafür derzeit relevanten Kosten unter Allgemeine Einstellungen hinterlegen. Das ist ggf. hilfreich wenn man z. B. mit Hilfe der Schaltsteckdosen den Stromverbrauch des Trockners oder des Kühlschranks ermitteln möchte.

Gerät anlernen

Die Anlage wird natürlich erst durch die Angeschlossenen Geräte nützlich. Daher klicken wir im rechten oberen Eck auf den Button Geräte anlernen. Daraufhin öffnet sich folgendes Fenster und der Lernmodus ist für 60 Sekunden aktiv. Innerhalb dieser Zeit sollte man auf dem anzulernenden Gerät ebenfalls den entsprechenden Knopf betätigen. Für jedes erfolgreich angelernte Gerät sollte der Zähler unter Posteingang am Ende der 60 Sekunden entsprechend erhöht werden.

image_thumb-3-3619342

Klicken Sie auf den Posteingang und prüfen Sie ob alle gewünschten Geräte aufgeführt sind. Handelt es sich bei dem Gerät um einen Tausch eines bestehenden Gerätes, so können Sie dies über die Aktion im System hinterlegen. Um das Gerät verwenden zu können, müssen Sie den Button Fertig betätigen. Sie können auch bereits in dieser Ansicht anfangen ihre Geräte in Gruppen zusammen zu fassen z. B. Kinderzimmer.

image_thumb-4-8640997 image_thumb-5-7045010