10. April 2014

Heimsteuerung mit WLan

Wenn im Netz hostapd als WLan-Accesspoint zum Einsatz kommt, so kann das Tool hostapd_cli genutzt werden um auf Events wie das An- und Abmelden von Geräten mit bestimmten Programmen zu reagieren. Das Tool hostapd_cli wurde mit hostapd bereits installiert und ruft bei An- und Abmelden eines Gerätes ein vorgegebenes Script auf und übergibt die entsprechende MAC-Adresse. Ein einfaches Script könnte wie folgt aussehen:
#!/bin/bash #Überwachte Geräte homeDevice[0]="00:11:22:33:44:5a" homeDevice[1]="00:11:22:33:44:5b" homeDevice[2]="00:11:22:33:44:5c" countHomeDevices=${#homeDevices[*]} #Statusmeldungen von hostapd_cli connected="AP-STA-CONNECTED" disconnected="AP-STA-DISCONNECTED" echo $3 $(date) $2 for (( i=0; i<=$(( $countHomeDevices -1 )); i++ )); do if [ $3 = "${homeDevices[$i]}" ]; then echo "jetzt könnte ich was tun" fi done
Das Script mit chmod u+x ausführbar machen und dann hostapd_cli zum Testen starten
sudo hostapd_cli -p /var/run/hostapd -i wlan0 -a /home/user/scripte/hostapd_event.sh
Anschließend soll hoastapd_cli natürlich auch als Dienst im Hintergrund laufen und automatisch starten. Dazu wird noch ein weiteres Script benötigt. Das stammt von folgender Seite: http://wiki.excito.org/wiki/index.php/Controling_Homeautomation_devices_using_wifi_presence
#!/bin/sh ### BEGIN INIT INFO # Provides: hostapd_cli # Required-Start: $remote_fs hostapd # Required-Stop: $remote_fs # Should-Start: $network # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Utility to trigger events based on connects/disconnects # Description: ### END INIT INFO PATH=/sbin:/bin:/usr/sbin:/usr/bin DAEMON_SBIN=/usr/sbin/hostapd_cli NAME=hostapd_cli DESC="hostapd cli" PIDFILE=/var/run/hostapd_cli.pid [ -x "$DAEMON_SBIN" ] || exit 0 DAEMON_OPTS="-B -a /home/user/scripte/hostapd_event.sh" . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" start-stop-daemon --start --oknodo --quiet --exec "$DAEMON_SBIN" \ -- $DAEMON_OPTS >/dev/null log_end_msg "$?" ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" start-stop-daemon --stop --oknodo --quiet --exec "$DAEMON_SBIN" log_end_msg "$?" ;; restart|force-reload) $0 stop sleep 8 $0 start ;; status) status_of_proc "$DAEMON_SBIN" "$NAME" exit $? ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0
Mit Hilfe dieses Scriptes können nur bestimmte Funktionen, Benachrichtigungen usw. ausgelöst werden, wenn sich ein (bestimmtes) Gerät im WLan An- oder Abmeldet. Zu Bedenken wäre noch, dass mobile Geräte sich meist nicht beim WLan abmelden sondern einfach irgendwann nicht mehr in der Reichweite sind. In diesem Fall erfolgt die Reaktion auch erst verzögert.

21. Juni 2013

SSH-Tunnel zum Surfen

Mittels SSH-Tunnel kann man recht unkompliziert surfen.

ssh -D 8080 -C -N host -p 22


Mit D wird dort Port angegeben, über den die Weiterleitung erfolgen soll,
mit C wird die Komprimierung aktiviert (kann man auch weglassen),
mit N wird die Ausführung von Befehlen verhindert (wir wollen über die Verbindung ja auch nur Tunneln),
host ist unser Zielserver zu dem der Tunnel aufgebaut wird und p der Port auf dem Zielserver. Das ist standardmäßig 22 und kann dann auch weggelassen werden. Ich verwendet aber grundsätzlich einen anderen Port, den muss man dann statt 22 angeben.

Anschließend im Browser die Proxyeinstellungen auf SOCKS einstellen und dort localhost:8080 eintragen. Schon surft der Browser durch den Tunnel zum host und von dort ins Internet.

30. Mai 2011

MiniDLNA - Kleiner aber feiner DLNA-Server

Das Projekt MiniDLNA stellt eine Server-Software  für DLNA/UPnP-AV Clients bereits, die auch auf kleinen NAS-Servern läuft.
Leider funktioniert das Statische-File nicht auf einem Armel-Server. Man muss also das ganze aus dem Sourcecode selbst kompilieren.
Vorher werden jedoch noch einige Pakete benötigt:
apt-get install libavcodec-dev libavformat-dev libavutil-dev libflac-dev libvorbis-dev libogg-dev libid3tag0-dev libexif-dev libjpeg62-dev libsqlite3-dev
Danach den Sourcecode entpacken und kompilieren:
tar xvzf minidlna_1.0.19_src.tar.gz

cd minidlna1.0.19

make
Nach erfolgreichen kompilieren noch die Programmdatei und die Konfiguration kopieren:
cp minidlna /usr/sbin/
cp minidlna.conf /etc
und die /etc/minidlna.conf anpassen. Viel ist dabei nicht zu tun. Als Standardschnittstelle ist eth0 eingestellt, sollte der Server eine andere nutzen, muss die in der minidlna.conf eingetragen werden.
Dann sollte man das media_dir nach den eigenen Erfordernissen ändern, also dass Verzeichnis in dem die Media-Dateien liegen. Das kann für Audio, Video und Bilder auch getrennt erfolgen.
Wer man kann noch den Namen des Servers (friendly_name) ändern.

28. Mai 2011

Webserver mit lighttpd

Anleitung für die Installation eine Webservers mit lighttpd, php5 und sqlite3 unter Debian Squeeze

folgende Pakete werden benötigt:

apt-get install lighttpd php5-cgi sqlite3 php5-sqlite

Anschließend muss noch php5 aktiviert werden:
lighty-enable-mod fastcgi fastcgi-php

/etc/init.d/lighttpd reload
Danach sollte der Server bereits verfügbar sein. Wenn statt der Startseite nur das Verzeichnis mit der Datei index.lighttpd.html angezeigt wird, so liegt das an einem Fehler in der Datei /etc/lighttpd/lighttpd.conf. Hier werden unter index-file.names alle möglichen Startseiten definiert. Bei der Default-Startseite ist jedoch ein Leerzeichen zuviel. Wenn man aus " index.lighttpd.html" das Leerzeichen am Anfang entfernt und den Server neustartet wird die Startseite angezeigt:

Im Verzeichnis /var/www nun die Datei index.php anlegen:
cat /var/www/index.php

Damit kann man gleich die Funktionsfähigkeit von PHP testen.

Zusätzliche Module für php5 lassen sich ebenfalls problemlos installieren. So z.B.:
apt-get install php5-gd

Absichern mit Fail2ban

Installation mit
apt-get install fail2ban

Anschließend die Konfigurationsdatei erstellen:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

In der jail.local sollten einige Anpassungen vorgenommen werden:
Alle IP-Adressen, die nicht blockiert werden sollen (z.B. Rechner im eigenen LAN)
ignoreip = 127.0.0.1 192.168.178.xxx

Empfängeradresse für evtl. Warnemails
destemail = root@localhost

Was soll erfolgen, nur Ban oder auch eine (ausführliche) EMail
action = %(action_mwl)s

Danach noch einzelne Einstellungen für die verschiedenen überwachten Dienste wie SSH, Proftpd usw.

SSMTP als Alternative zu sendmail

Wenn es nur darum geht, hin und wieder eine Mail vom Server zu verschicken benötigt man kein sendmail. Es genügt das kleinere SSMTP zum Verschicken.

Installiert wird es mit
apt-get install ssmtp

Danach müssen noch die beiden folgenden Dateien konfiguriert werden:
cat /etc/ssmtp/ssmtp.conf
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=postmaster # The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=smtp.live.com:587 # Beispiel für live/hotmail # Where will the mail seem to come from? #rewriteDomain= # The full hostname hostname=SERVERNAME # Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address FromLineOverride=YES AuthUser=LOGIN-Name AuthPass=Passwort UseTLS=yes UseSTARTTLS=yes



# cat revaliases
# sSMTP aliases
#
# Format: local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
root:LOGIN-Name:smtp.live.com:587
www-data:LOGIN-Name:smtp.live.com:587

Da die Datei ssmtp.conf das Passwort im Klartext enthält sollte man verhindern, dass unbefugte Nutzer diese auslesen können. Andererseits muss aber auch sichergestellt werden, dass Dienste und User die Datei auslesen können.

11. Februar 2011

Automatische Emails vom Server - Teil 2: Verarbeitung

Nachdem die Email mit getmail vom Server geladen wurde [*]
ist nun Zeit die Nachrichten auszuwerten und zu reagieren.

Dafür wird die Konfiguration für procmail angelegt:
cat .procmailrc
MAILDIR=$HOME/procmail
LOGFILE=/var/log/procmail/procmail.log
VERBOSE=off

:0 w
* ^From:.*admin@server.de
* ^Subject:.*IP-Codewort
| $HOME/sendip.sh

:0 w
* ^From:.*admin@server.de|!^FROM_DAEMON
| $HOME/weiter.sh

:0 w
/dev/null
MAILDIR gibt an, wo die Nachrichten abgelegt werden - wenn welche angelegt werden ;-)
Anschließend folgen "Rezepte" für die Bearbeitung der Emails.

Im ersten Rezept werden Nachrichten bearbeitet, deren Absender (From) der Admin ist und die im Betreff das IP-Codewort haben. Diese Nachrichten werden an das Script sendip.sh übergeben (welches noch anlegen werden muss).

Im zweiten Rezept werden die Nachrichten bearbeitet, die vom Admin kommen aber nicht das Code-Wort enthalten ODER alles anderen Nachrichten, die nicht von einem Daemon kommen. Damit sollen Endlosschleifen vermieden werden. Hier werden die Nachrichten an das Script weiter.sh übergeben - welches auch noch angelegt werden muss.

Am Ende werden alle restlichen Nachrichten gelöscht.