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.

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

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.

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.

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.

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

 

Unitymedia Stoerungshelfer

Hi,

gerade mal wieder einen Klassiker erlebt. Kind schläft ausnahmsweise früh ein, man legt sich vor den TV und nach wenigen Minuten (mitten im Film) erklärt mir die Unitymedia SmartCard, dass diese auf ein Mal nicht mehr für das Programm freigeschaltet sein soll… Also Unitymedia Hotline anrufen – Fehlanzeige. Wegen der vielen Anrufer wird man nach Beantwortung der ganzen Fragen einfach raus geworfen.

… also Hinweis auf den Online Störungshelfer folgen. Sehr hilfreich – warten Sie mal bitte eine Stunde dann ist ihr Problem vermutlich erledigt, wenn nicht klicken Sie hier noch mal etwas herum, na danke! Ich liebe diese Art von Hilfe!

 

Neuer Server & Umstellung auf SSL only

Hi,

nach langer Vorbereitung bin ich nun endlich auf einen dedizierten Server umgezogen und habe die Gelegenheit nun auch genutzt um meine Webseite vollständig auf SSL umzustellen. Dank Let’s Encrypt geht das sehr einfach und ist zudem noch kostenlos. Dank der vorhandenen packages für alle gängigen Distros ist die Installation sowie die notwendigen laufenden updates (die Zertifikate haben nur eine Laufzeit von 90 Tagen) extrem einfach. Ich kann jeden mit einer Webseite nur motivieren seine Webseite ebenfalls umzustellen.