DIY Accesspoint

Der Vortrag zum Aufbau eines AccessPoints mit einem Cache, VPN und dem pi-hole fand am 18.09.2018 im Hofbräuhaus in München statt. Der Linuxstammtisch wird von Atix gehostet.

Feedback oder Fragen?

Raspberian Stretch minimal installieren

Als Grundlage für das Projekt benutzen wir das Raspberian minimal Setup. Wir nutzen das Setup ohne Desktop und daher bietet es sich an die Installation möglichst klein zu halten. Was nicht installiert ist, kann auch kein Angriffsvektor sein.

Raspberry Pi 3B+ AccessPoint

Raspberry Pi 3B+ AccessPoint

Auf der Seite von raspberrypi.org gibt es den entsprechenden Download-Link. Wir laden das RASPBIAN STRETCH LITE Image.

Die Zip-Datei wird danach entpackt und muss auf eine mindestens 4GB grosse SD-Karte geschrieben werden. Ein ausführliche Anleitung  wie man das macht gibt es auf der Installationshilfe Seite von raspberrypi.org.

Installation anpassen

Raspi-config overview

Raspi-config overview

Wir müssen nach dem Kopieren des Images auf die SD-Karte noch einige Dinge anpassen. Dafür stecken wir die SD-Karte in den entsprechenden Slot des RaspberryPis und schliessen Tastatur und Monitor an. Durch Einstecken des Netzteils wird der Pi gestartet.

Als erstes erweitert er automatisch das Dateisystem um den gesamten Platz der SD-Karte zu nutzen. Danach bootet er fertig und wir können uns mit dem Benutzernamen pi und Passwort raspberry anmelden. (Achtung! Standardmäßig ist eine englische GB Tastatur eingestellt!)

Dieses Passwort ändern wir SOFORT mittels: passwd

Raspi-config changing Wi-fi country

Raspi-config changing Wi-fi country

Nächste Änderungen umfassen die erste Einstellung die wir mittels sudo raspi-config vornehmen:

  • Hostnamen ändern
  • WIFI anschalten und Land einstellen
  • Tastatur und Locale auf deine Präferenz einstellen
  • sshd anschalten
  • Timezone einstellen (Ich empfehle ETC/UTC)
  • Memory-split auf 16GB für die eh nicht verwendete Graphikkarte einstellen

    Raspi-config enabling SSH

    Raspi-config enabling SSH

Danach bootet der Raspberry Pi neu und wir melden uns erneut an.
Wir müssen nur noch die neusten Updates installeren mit: sudo aptitude update && sudo aptitude -y safe-upgrade && sudo reboot

Den AccessPoint anschalten mit hostapd

hostapd.conf

hostapd.conf

Um aus unserem Raspberry Pi einen AccessPoint zu machen brauchen wir die Software hostapd und wenn wir ein anderes WLAN anzapfen wollen auch noch eine weitere WiFi-Karte.
Zum Glück gibt es USB WiFi Karten, diese übernimmt die Anbindung an das Internet und die interne WiFi Karte verwandeln wir in den HotSpot.

Dazu muss man natürlich die Konfiguration anpassen. Ein Beispiel:
/etc/hostapd/hostapd.conf
interface=wlx74da382e4985
driver=nl80211
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK=40]
macaddr_acl=0
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
ssid=LinuxStammtisch
wpa_passphrase=LinuxStammtisch

Desweiteren muss man noch /etc/default/hostapd.conf anpassen, damit es beim Booten auch aufgerufen wird.
DAEMON_CONF="/etc/hostapd/hostapd.conf"

Wir brauchen noch ein paar Regeln für das NAT:
# Generated by iptables-save v1.6.0 on Thu Aug 2 16:19:05 2018
*filter
:INPUT ACCEPT [13757:2903694]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5300:499977]
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -i wlan0 -j ACCEPT
COMMIT
# Completed on Thu Aug 2 16:19:05 2018
# Generated by iptables-save v1.6.0 on Thu Aug 2 16:19:05 2018
*nat
:PREROUTING ACCEPT [4:930]
:INPUT ACCEPT [4:930]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.42.0/24 -j MASQUERADE
-A POSTROUTING -s 192.168.43.0/24 -j MASQUERADE
COMMIT
# Completed on Thu Aug 2 16:19:05 2018

Den Caching-Server aufsetzen

Um Download Menge zu sparen installieren wir noch eine Caching Server, den man dann bei seinen Geräte eintragen kann. Automatische Konfiguration über DHCP wird leider von zu wenigen Endgeräten unterstützt. Und den Cache per Firewallregeln zu erzwingen, bricht dann schon bei https Seiten. Und wir wollen ja keinen Man-in-the-middle bauen.

Der Caching Server ist squid und folgende Konfiguration filtert auch noch einiges an Daten raus.

/etc/squid/squid.conf
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
via off
forwarded_for delete

Werbung mittels pi-hole blocken

Pi-Hole Overview

Pi-Hole Overview

Pi-Hole ist eine Kombination von einem DHCP und DNS Server. Seit der Version 4.0 hat Pi-Hole den dnsmasqd geforkt. Der pihole-FTL liest allerdings problemlos die dnsmasq Konfigurationsdateien.

In unserer Konfiguration macht das Pi-Hole nur den DNS-Filter Teil. DHCP wird von dhcpcd.
Die folgende Regeln gelten:
/etc/dhcpcd.conf
hostname
clientid
persistent
option rapid_commit
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
option ntp_servers
option interface_mtu
require dhcp_server_identifier
slaac private
interface wlx74da382e4985
static ip_address=192.168.42.1/24
interface enxb827ebad22ab
static ip_address=192.168.43.1/24

/etc/dnsmasq.conf
except-interface=wlan1
conf-dir=/etc/dnsmasq.d
dhcp-mac=set:client_is_a_pi,B8:27:EB:*:*:*
dhcp-reply-delay=tag:client_is_a_pi,2
dhcp-option=252,http://192.168.42.1/wpad.dat
interface=wlx74da382e4985
dhcp-range=192.168.42.2,192.168.42.240,255.255.255.0,2h
interface=enxb827ebad22ab
dhcp-range=192.168.43.2,192.168.43.240,255.255.255.0,2h

/etc/dnsmasq.d/01-pihole.conf
addn-hosts=/etc/pihole/gravity.list
addn-hosts=/etc/pihole/black.list
addn-hosts=/etc/pihole/local.list
localise-queries
no-resolv
cache-size=10000
log-queries=extra
log-facility=/var/log/pihole.log
local-ttl=2
log-async
server=8.8.8.8
server=8.8.4.4
server=84.200.69.80
server=84.200.70.40
server=9.9.9.9
server=149.112.112.112
domain-needed
bogus-priv
dnssec
trust-anchor=.,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
trust-anchor=.,20326,8,2,E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
local-service

Wie man pi-hole installiert sieht man im rechts stehenden Installationsvideo.

Slides
Und hier gibt es die Vortragspräsentation zum zeitversetzten Nachlesen: 20180918 PiHole Vortrag Slides

Raspberry Pi als AccessPoint

Installationsvideo von Pi-Hole