Projekt Horst - Die eierlegende Wollmilchsau


Horst Hallo, darf ich vorstellen, das ist Horst, mit all seinen Verbindungen - bis jetzt ;-) Angefangen hat alles mit einer WG (meiner) und dem aufkommen von DSL Flatrates.
Ich war völliger Linux-Neuling. Ohne jede Ahnung von Linux fing ich nun an, einen Router zu basteln. Als Grundlage nahm ich mir SuSE 7.1. Mit viel Hilfe von Freunden und fremden ist es mir dann irgendwann gelungen und die Lust auf mehr war geboren.
Da der Rechner ja sowieso immer an ist, dachte ich mir, könnte er auch noch ein bisschen mehr machen als nur routen.
Horst soll zur Eierlegenden Wollmilchsau werden, im Endeffekt, soll er eine Art Assistent sein, der einiges Leisten kann. Hier meine inzwischen realisierten Ideen: Und hier meine Visionen:

Firewall

Mein Horst steht zwischen DSL-Modem und LAN-HUB. Somit wird der interne Verkehr komplett vom externen getrennt. Hm, also mit der Firewall das ist ein ziemlicher Krampf. Ich möchte auch nicht behaupten, dass ich da so richtig bescheid weiß. Aber es ist ENORM wichtig sich dafür Zeit zu nehmen und die Sache richtig zu konfigurieren. Es gibt unglaublich viele Skript-Kiddies die daher kommen und scheisse bauen könnten...
Ich benutze iptables. Das funktioniert soweit ganz gut.
Hier ein paar grundlegende Sachen (anhand eines Bash-Skriptes):
Variablen:
COMPUTER1=192.168.0.13
COMPUTER2=192.168.0.14
ip=`/sbin/ifconfig ppp0 | grep inet | awk '{printf("%s\n", substr($2,6)) } '` #Internetadresse besorgen
Alte Regeln löschen
iptables -t nat -F POSTROUTING
iptables -t nat -F PREROUTING
iptables -F FORWARD
iptables -F INPUT
iptables -F OUTPUT
Forwarding (routing) starten
echo 1 > /proc/sys/net/ipv4/ip_forward			  # routing starten
echo 1 > /proc/sys/net/ipv4/ip_dynaddr			  # keine Ahnung
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all  # nicht auf Pings reagieren (sicherer)
Bestimmte Sachen Blocken
# SAMBA
iptables -t nat -A PREROUTING -i ppp0 -p tcp --destination-port 139 -j REJECT
# NFS
iptables -t nat -A PREROUTING -i ppp0 -p tcp --destination-port 111 -j REJECT
# MySQL
iptables -t nat -A PREROUTING -i ppp0 -p tcp --destination-port 3306 -j REJECT
Das 192.168.0.* Netzwerk nach draussen lassen
iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT   # LAN-LAN-Verkehr
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE					# LAN-Internet-Verkehr Maskieren
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # keine Ahnung
So leitet man alle von draussen kommenden Verbindungen zu einem LAN-Rechner durch
iptables -t nat -A PREROUTING -p tcp -j DNAT --to $COMPUTER1
Bestimmte Dienste direkt durchreichen (z.B. für ICQ direct-connection)
#ICQ
 iptables -t nat -A PREROUTING -d $ip -p tcp --destination-port 4000:4010 -j DNAT --to $COMPUTER1
 iptables -t nat -A PREROUTING -d $ip -p tcp --destination-port 20000:20019 -j DNAT --to $COMPUTER1:20000:20019
 iptables -t nat -A PREROUTING -d $ip -p udp --destination-port 20000:20019 -j DNAT --to $COMPUTER1:20000:20019
Den ganzen Rest blocken (bzw. Droppen)
iptables -t nat -A PREROUTING -d $ip -i ppp0 -j DROP
Diese Befehle sind nur zum reinkommen als Beispiel geeignet. Man sollte seine Firewall auf jeden Fall selbst konfigurieren. Die Sachen die hier stehen, sind dafür gedacht, dass erstmal was laufen kann. Daran hab ich ewig gesessen.

24h Saugstube

Als Sauger benutze ich MLDonkey. Der kann, wenn man ihn selbst Kompiliert in verschiedene P2P Netzwerke reinschauen und aus ihnen saugen. Meiner macht Donkey,EMule,Overnet,Limewire und Direct Connect. Eigentlich sollte er auch Soulseek beherrschen, das hat er aber noch nie gezeigt.
Ich kann ihn über ein Webinterface oder auch über eine GUI von meinem Arbeitsplatzrechner aus steuern. Die Daten werden auf dem Router gespeichert und per Samba dem WG-Netzwerk zur Verfügung gestellt. Natürlich werden nur Eigenproduktionen im Netzwerk getauscht, nie würde ich auf die Idee kommen illegal etwas runterzuladen.

LAMP - Server

Einen LAMP (Linux Apache MySQL PHP) Server einzurichten ist mit SuSE 8.1. garnicht schwer. Bei der Installation kann man dieses als vorbereitetes Package Installieren. Funktioniert.

Netzlaufwerkdiener

Da ich mit Windows "aufgewachsen" bin und mein Arbeitsplatzrechner immernoch ein Windowsrechner ist, benutze ich als Netzlaufwerk das SMB-Zeug von Windows. Samba installieren, konfigurieren. Uiuiui, wieder viel zu tun.

PSSSSSSSST!

Da hab ich ne relativ rabiate Methode: Netzteillüfter raus (oder drosseln), Prozessorlüfter drosseln (mit nem Widerstand), und die Platten hängend lagern. Die Sache mit den Lüftern ist mit vorsicht zu genießen. Man sollte gute Passivkühler haben. Und je nach Bedarf drosseln bzw. entfernen. Mir ist schonmal ein Netzteil durchgerauscht, weil es zu heiß wurde. Also alles rausnehmen, was unnötig Strom verbraucht.Kompliziert wirds natürlich wenn man Video und TV über die Kiste sehen will, denn dann braucht man Power und Kühlung. Platten aufzuhängen ist relativ einfach. entweder mit schnüren oder Klebeband eine "Hängematte" im Gehäuse aufspannen, Platten reinlegen und fertig. Natürlich sollte man den Rechner dann nicht ständig durch die Gegend schleppen. Desweiteren kann man Platten in alte Socken stecken, das dämmt gegen die hohen Freqeuenzen, dämmt aber auch Hitze sehr gut, also abwägen. Insgesamt sollte man für viel Freiraum im inneren sorgen (unnötige Kabel raus und den Rest irgendwie gut anordnen).

Anrufbeantworter

Grundlage hierfür ist ein installiertes ISDN4Linux. Da ich aber auch einen Callthrough-Server benutze, verwende ich eine modifiezierte Version von VBOX Namens VBOX-CM von Matthias Weingart. Man kann es sich auch von hier runterladen.
Die Einrichtung ist in den Manuals gut beschrieben.Probleme gibt es bei mir mit TCL. Keine Ahnung warum.

Einwahlrouter

Diesen "brauche" ich, um am Strand sitzend chatten zu können, oder EMails zu checken. Klar, nutzt man praktisch nie, aber man könnte. Das ist doch was tolles ;-).
Allerdings geht er mal, mal nicht. Da muss ich noch fummeln.
Zu dem Thema gibts ein gutes Tutorial bei Linuxnetmag.

Callthroughserver

(siehe Anrufbeantworter)
Einen Callthroughserver hab ich mir gebastelt, da ich einen relativ miesen Vertrag habe, was Gespräche in Fremde Netze angeht. Festnetz ist aber immer günstig. Daher rufe ich Horst mit dem Handy an, und wähle von dort aus zu Festnetztarifen meine weiteren Ziele. Auch hier kann ich auf die Manuals verweisen, damit kommt man klar.

Telefonzentrale

(Voraussetzungen siehe Anrufbeantworter)
Wenn ein Anruf eingeht, bekomme ich per Windowsmessaging eine Nachricht an wen der Anruf geht, von wem er kommt und welche Nummer er hat. Der Name des Anrufers wird aus einer Datei ermittelt, die Comma-Seperated-Values mit Telefonnummern und Namen enthält. Desweiteren werden alle Anrufe geloggt und sind über ein Webinterface verfügbar. Hinterlässt jemand eine Nachricht, so erscheint auch diese im Webinterface an der entsprechenden Stelle.
Inzwischen ist auch eine akustische Meldung hinzugekommen. Das alles wird realisiert durch einfache Bash-Skripte. Wenn ich das ganze abgerundet habe, werd ich mal ein Package anbieten.

MP3-Player

So, nun ist auch das realisiert. Was braucht man: Wie macht man es:
Die Soundkarte wurde problemlos von YaST2 erkannt und installiert.
Nach langem überlegen, wie man seine Jukebox steuern soll, hab ich mich entschlossen eine Tastatur zu verwenden, das geht wunderbar.
MP3-Blaster ist ein Konsolenprogramm (ich hab kein X), und es geht schonend mit der CPU um. Einziger Nachteil bis jetzt ist, dass er exklusiven Zugriff auf die Soundkarte benutzt, sodass keine anderen Audio-Augaben erfolgen können, solange er dudelt. Ich hab mich deshalb mal mit dem alsaplayer beschäftigt, der von sich behauptet, beliebig viele Instanzen auf die Soundkarte zugreifen zu lassen, aber das hat bei mir nicht gefunzt =(, ausserdem hat er den armen Pentium 100 mächtig ausgelastet.
Man sollte darauf achten, nicht als root zum dudeln eingeloggt zu sein, die ganzen MP3Player sind nicht sooooo sicher, und es gibt angeblich Leute, die sich jene Fehler zu Nutze machen wollen (wer bloß? ;-) ).
Anfänglich gab es Probleme mit der Performance, die hab ich mit renice gelöst. Mit renice kann man Prioritäten von Prozessen ändern, allerdings nur als root. Deswegen hab ich das "set User on execution" Bit gesetzt. Ich weiß nicht, inwiefern das sicherheitsbedenklich ist. Kann mir jemand das sagen?

Horst spricht

Ein wichtiger Schritt zum Hausassistenten ist die Sprachausgabe. Dazu benutze ich txt2pho,mbrola und play (auf sox aufbauender Player), wie man mit txt2pho und mbrola klarkommt, findet man ganz gut auf Linux Magazin oder auf Linux WiKi. Ich benutzte ersteres, irgendwas war da falsch, ich bekam immer nur "panic: check your pitch". Es lag an den Stimmendatenbanken, die waren irgendwie nicht im richtigen Verzeichnis, aber ich weiß es nicht mehr so genau...
Naja, in Zukunft soll er seine Fähigkeit zu sprechen auch intensiver nutzen. Mir schweben da so Sachen vor, wie Terminankündigung, News, EMail, und InstantMessenger-Kommunikation.