USB Netzwerkkarte (auch) für Linux: DeLOCK 61147 USB 2.0 > Ethernet Adapter
Achtung! Aktuell unter Lucid läuft der Adapter NICHT mehr.
Um es gleich vorweg zu nehmen - der Adapter läuft mit einem aktuellen Linux ohne Treiberinstallation sofort "out of the Box" (getestet unter Debian Lenny und Ubuntu Karmic). Drinnen steckt ein indischer MOSCHIP 7830. Mit dem praktischen Teil kann man allen Kisten mit USB-Anschluss eine weitere Netzwerkkarte spendieren. Zum Beispiel um ein Notebook als Bridge oder Router zu benutzen, oder um Kisten ohne Netzwerkkarte online zu bekommen.
Nach dem Einstecken:
# /var/log/messages Apr 23 18:23:08 ww kernel: [13489.976038] usb 1-3: new high speed USB device using ehci_hcd and address 7 Apr 23 18:23:08 ww kernel: [13490.112911] usb 1-3: configuration #1 chosen from 1 choice Apr 23 18:23:08 ww kernel: [13490.184613] usb 1-3: applying rev.C fixup Apr 23 18:23:08 ww kernel: [13490.192111] usb 1-3: applying rev.C fixup Apr 23 18:23:08 ww kernel: [13490.201739] eth2: register 'MOSCHIP usb-ethernet driver' at usb-0000:00:1d.7-3, MOSCHIP 7830/7730 usb-NET adapter, 00:13:3b:04:00:5a Apr 23 18:23:09 ww NetworkManager: SCPlugin-Ifupdown: devices added (path: /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/net/eth5, iface: eth5) Apr 23 18:23:09 ww kernel: [13490.251588] udev: renamed network interface eth2 to eth5 Apr 23 18:23:09 ww NetworkManager: SCPlugin-Ifupdown: device added (path: /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/net/eth5, iface: eth5): no ifupdown configuration found.
eth5 existiert danach und kann direkt konfiguriert werden.
Mit dabei ist noch eine Treiber-CD mit Treibern für Windows und Linux, man kann sich zur Not also auch das Kernelmodul selbst kompilieren. Der Hersteller bietet eine Seite mit aktuellen Treibern für alle gängigen Betriebssysteme. Und auch vom Chiphersteller selbst gibt es eine Treiber-Downloadseite.
Ein cooles Teil. Es wird sich noch im täglichen Gebrauch beweisen müssen, aber der erste Eindruck war sehr gut.
Auf Trojanerjagd mit einer sniffenden Netzbrücke
Vor einigen Tagen erhielt ich einen Anruf mit der Bitte um Hilfe. Aus einem Firmen-LAN mit ca. 10 Clients konnte keine E-Mail mehr versandt werden. Alle Mails blieben in der Warteschlange des lokalen SMTP stecken, der sie an einen Remote-SMTP beim Provider weiterreichen sollte. Eine manuelle Telnet-Session zum SMTP des Providers brachte schnelle Klarheit: "Your IP is blacklisted in Spamcop.net's Spam-Database". Ups. Ich dachte zunächst nichts Böses und ging davon aus, dass das Problem dadurch entstanden ist, dass durch Pech beim täglichen IP-Wechsel eine Ex-Adresse eines Spammers zugewiesen worden war. Nach einem mauellen Reset des Routers, der dadurch eine neue IP bekam, war das Problem auch gelöst (dachte ich zumindest). Die Mails gingen raus.
Einen Tag später: "Wir können keine Mails mehr verschicken!" Oh nein, eine Workstation hat einen Trojaner. Der Spammer ist im LAN. Avira Workstation Pro läuft auf allen XP-Clients im LAN und hat in der Regel auch zuverlässig funktioniert. Hier ist aber wohl etwas schief gelaufen.
Um herauszufinden wer der Übeltäter ist, habe ich den SMTP-Traffic zwischen DSL-Router und LAN gesnifft. Da alle Clients an Switchen hängen, war passives Mithören am selben Switch mit einem Client nicht möglich (Das geht nur mit HUB's). Deshalb habe ich mit einer Debian-Kiste, 2 Netzwerkkarten und 2 Switches ziemlich umständlich einen Wiretap gebaut. Dabei war mir dieser Artikel von heise netze sehr nützlich.
Im Endeffekt muss nur die Verkablung des Sniff-Rechners stimmen, danach muss eine
Netzwerkbrücke erstellt werden:
Die beiden Netzwerkkarten im Rechner wurden gebridged, damit der ganze LAN-INTERNET Traffic auch durch den Pinguin fliessen konnte. Ein Sniff mit Wireshark auf TCP/25 brachte dann sehr schnell die Lösung. In Sekundenschnelle füllte sich das Livelog mit SMTP-Verbindungen eines LAN-CLients zu externen SMTPs.
Den Übeltäter habe ich mit dem Avira Rescue System gebootet. Die Live-CD hat einen Trojaner (TR/Trojan.GEN) festgestellt, konnte ihn aber nicht löschen. Ich habe die infizierte Datei (Zufallsname in system32/drivers) danach mit einer Ubuntu-Live-CD entfernt. Die Spamflut hatte aufgehört. Ich muss es noch einige Zeit beobachten, aber ich glaube der Client ist wieder Herr seiner Sinne.
Ich werde mir mal so einen USB LAN NIC besorgen. Dann geht das ganze auch mit dem Notebook. Das wäre viel angenehmer beim nächsten Mal.
Die heise Schnüffel-Bridge:
apt-get install brctl ifconfig eth0 -arp promisc 0.0.0.0 up ifconfig eth1 -arp promisc 0.0.0.0 up brctl addbr br0 brctl addif br0 eth0 brctl addif br0 eth1 ifconfig br0 -arp promisc 0.0.0.0 up
Mit der PS3 online zocken ohne Update 3.21 [defunct]
Leider funktioniert der Workaround seit dem 13. April nicht mehr. Sony überprüft inzwischen auch bei der Anmeldung ans PSN die Firmware-Version. Das Update Downgrade 3.21 für die PS3 entfernt die Linux-Unterstützung der PS3. Deshalb sollte man es nicht installieren, falls man die PS3 auch weiterhin als Linux-Rechner benutzen möchte. Um trotzdem mit der PS3 online zocken zu können muss man etwas tricksen und ihr vorgaukeln, es gäbe das Update auf 3.21 gar nicht. Danke an einige Unbekannte aus dem Golem-Forum, die die Methode zusammengebastelt haben. Ich habe sie lediglich in einem leicht zu benutzenden Skript zusammengefasst. Der Trick funktioniert so: Bevor die PS3 online geht, überprüft sie, ob sie die neueste Systemsoftware hat. Wenn nicht, wird der Benutzer zum Update aufgefordert und die Verbindung schlägt fehl. Zur Überprüfung verbindet sich die PS3 mit einem SONY-Server und liest dort eine Textdatei, in der die aktuelle Version hinterlegt ist.
Um der PS3 vorzugaukeln, dass sie bereits die aktuelle Version hat, benötigt man einen lokalen Proxy-Server (im Beispiel Squid), der die Anfrage an den SONY-Server an einen anderen Webserver umleitet, auf dem eine ältere Version der Textdatei liegt. Die PS3 denkt, dass sie aktuell ist und geht online.
Der Code wurde getstet unter einem Debian Lenny mit einem lokalen Webserver auf der Maschine. Er sollte aber auch unter Ubuntu ohne Probleme funktionieren.
Danach muss man in der PS3 als Proxy (Einstellungen -> Netwerk-Einstellungen -> Internetverbindungseinstellungen) lediglich noch die IP des Squid-Proxys angeben. Der Squid-Standardport ist 3128.
Leider ist das keine permanente Lösung. Sobald die ersten Games die Firmware 3.21 voraussetzen, werden diese durch diesen Workaround unspielbar. Aber wahrscheinlich ist ohnehin bald eine permanente Lösung verfügbar. Eventuell tut sich auch auf rechtlicher Seite etwas, da das Vorgehen von SONY klar gegen die EU-Direktive 1999/44 verstößt, die unter anderem vorschreibt, dass ein in der EU gekauftes Produkt die Funktion erfüllen muss, die dem Käufer zur Zeit des Kaufes bekanntgemacht wurde. Wörtlich: "fit for the purpose which the consumer requires them and which was made known to the seller at the time of purchase""
Linux auf der PS3 offenbar gerettet
Letzte Woche hat die neue PS3-Firmware Blogger-Wellen geschlagen, da sie als einziges neues Feature den Support für das zusätzliche Betriebssystem auf der PS3 entfernte. Heute präsentierte "GeoHot" seinen angekündigten Weg aus der Misere:
Ich habe bisher nicht upgedatet, um das "Other OS" nicht zu gefährden, da ich mir damit eine Emu-Box bauen wollte. Bisher wurde der Patch von Geohot noch nicht veröffentlicht. Um weiterhin mit einer nicht aktualisierten PS3 online gehen zu können, kann mit einem Webproxy wie zum Beispiel Squid gebastelt werden. Ich bin gespannt. Mehr Infos hier: http://geohotps3.blogspot.com/
Ubuntuzilla – Immer die aktuelle Firefox- und Thunderbirdversion unter Ubuntu
Das Paketsystem von Ubuntu ist schon etwas Feines. Nachdem man ein Programm über die Paketverwaltung installiert hat, bekommt man automatisch Sicherheitsupdates und neuere Versionen eingespielt. Sicherheitsupdates kommen sofort, wenn sie verfügbar sind. Neue Software-Versionen hingegen leider immer nur im Takt der Ubuntu Releases. Man wartet, wenn man sich das entsprechende Programm nicht manuell installieren will, ziemlich genau 6 Monate auf die nächste Version. Das ist in der Regel kein Problem, nur bei Firefox und Thunderbird hat es mich manchmal gestört.
Diesem Problem hat sich das Ubuntuzilla-Projekt angenommen. Sie betreiben ein Repository für Ubuntu, das stets die aktuellen stabilien Mozilla-Builds von Firefox, Thunderbird und Seamonkey enthält. Einmal dem aktuellen System hinzugefügt, bekommt man so bequem über die Paketverwaltung die neuesten Versionen eingespielt.
Und so funktioniert es:
Ubuntuzilla-Repo der sources.list hinzufügen
echo -e "\ndeb http://downloads.sourceforge.net/project/ubuntuzilla/mozilla/apt all main" | sudo tee -a /etc/apt/sources.list > /dev/null
Den Repository Key hinzufügen um Nachfragen des Paketmanagers zu vermeiden
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com C1289A29
Danach die gewünschten Pakete installieren
sudo apt-get update sudo apt-get install firefox-mozilla-build sudo apt-get install thunderbird-mozilla-build sudo apt-get install seamonkey-mozilla-build
BASH Spickzettel
Dies ist mein BASH-Spickzettel. Ich werde hier nützliche Codeschnipsel und Konstrukte sammeln, die ich ansonsten immer mal wieder googlen oder man'en musste. Der Artikel dient mir persönlich als Nachschlagewerk aber könnte auch anderen nützlich sein, die häufig mit der Bourne-again Shell zu tun haben.
Schleifen
while [ 1 ] #Endlosschleife
do
echo "Blah"
done
for i in $(ls /etc) do echo $i done for i in `seq 1 10`; do echo $i done
Case
case "$1" in
a)
echo "a"
;;
b)
echo b"
;;
*)
echo "$1 ist nicht a oder b"
;;
esac
Switches für Test : http://bash-hackers.org/wiki/doku.php/commands/classictest oder /usr/bin/[ --help
If-Then-Else
if [ "$1" = "a" ]; then
echo "a"
else
echo "kein a"
fi
dpkg + apt
#Installierte Files aus einem Paket auflisten dpkg -L [Paketname] #Files IN einem Paket auflisten dpkg -c [paket.deb] #Info über ein Paket dpkg -I [paket.deb] #Alle installierten Pakete auflisten dpkg -l dpkg --get-selections > getselections.txt #Installationsauswahl aus Datei einspielen dpkg --set-selections < getselections.txt
netstat
# Alle nach außen geöffneten Ports listen netstat -lpn | grep LISTEN | grep -v localhost
mdadm
# Testmail senden # Benutzt MAILADDR aus /etc/mdadm/mdadm.conf mdadm --monitor -1 /dev/md0 -t # Device dem Array hinzufügen mdadm --add /dev/md0 /dev/sda1 # Device aus dem Array entfernen mdadm --remove /dev/md0 /dev/sda1 # Fehlerhafte Devices entfernen mdadm --manage /dev/md0 --remove faulty mdadm --manage /dev/md0 --remove failed # Bootloader nachinstallieren grub grub> root (hd0,0) grub> setup(hd0) # Festplatteninfos ausgeben smartctl -i /dev/sdx
ext
# Disklabel setzen e2label device label
screen
# Screens in Scripten automatisch generieren und task in screen starten screen -S [screenname] -d -m [script.sh] # Neue screen erstellen oder zu bestehender wechseln screen -R -d [screenname] # Keystroke zum verlassen einer Screen CTRL - A - D
mysql
# Alle Datenbanken in eine Datei dumpen
mysqldump -u root -psecret --all-databases > backup.sql
# Nur die Datenbankstruktur in eine Datei dumpen
mysqldump -u root -psecret --no-data --all-databases > backup.sql
# Dump wieder herstellen
mysql -u root -psecret < backup.sql
# root Passwort resetten
/etc/init.d/mysql stop
echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('neuespasswort');" >~/setrootpassword.sql
mysqld_safe --init-file=~/setrootpassword.sql
#[ctrl]+[c]
/etc/init.d/mysql start
rm -f ~/setrootpassword.sql
imagemagick
# Alle Bilder im aktuellen Verzeichnis resizen mogrify -resize 800x600 ./*.JPG # Alle Bilder im aktuellen Verzeichnis in PNG konvertieren mogrify -format png ./*
unionfs-fuse
# Union zwischen a und b in c # Geschrieben wird nach a unionfs-fuse -o cow /home/a=RW:/home/b=RW /home/ww/Desktop/c
ffmpeg
# flv in 3gp umwandeln ffmpeg -i in.flv -f 3gp -vcodec h263 -s 176x144 -ab 12.2k -ar 8000 -ac 1 out.3gp
find
# Dateien suchen und etwas mit ihnen tun
find . -name "*.mp3" -exec file {} \;
# Softlinks finden und anzeigen
find . -type l -exec ls -l {} \;
# Alle Dateien in einem Verzeichnis zählen
find /verzeichnis -type f | wc -l
sudo
#/etc/sudoers # User username erlauben einen privilegierten Befehl ohne Passwort auszuführen # (Muss ganz am Ende von /etc/sudoers angehängt werden) username ALL=NOPASSWD: /sbin/reboot
iptables
# Alles auf INPUT erlauben iptables -F; iptables -P INPUT ACCEPT # Verbindungen debuggen # Paketzähler einer Chain auf 0 setzen iptables -Z INPUT # Chain mit Paketzähler anzeigen iptables -L INPUT -v
FTP mounten
mkdir /tmp/mnt modprobe fuse curlftpfs -v ftp.host.com -o nonempty -o user=username:passwort /tmp/mnt umount /tmp/mnt
umount "Device is busy" - Blockierenden Prozess finden
fuser -m [mountpoint]
wget Website mirrorn
wget -km http://www.website.com
SAMBA mounten
mount.cifs //192.168.0.1/share /media/share -o username=$USERNAME,password=$PASSWORD
32bit oder 64bit
getconf LONG_BIT
/etc/fstab
NFS: 192.168.0.1:/home /home nfs rsize=8192,wsize=8192,hard,intr 0 0
Disk Full - Speicherfresser finden
apt-get install ncdu ncdu # / ohne mounts auf andere FS in /mnt mounten # (Falls mounts Daten auf der lokalen Platte verdecken) mount --bind / /mnt ; du -sm /mnt
Vollverschlüsselung des Systems
Sehr gutes Tutorial von Andreas Haerter: http://blog.andreas-haerter.com/2011/06/18/ubuntu-festplattenvollverschluesselung-lvm-luks
Platte über das LAN klonen
dd if=/dev/hda | ssh -c blowfish -C root@otherbox.ip.addr dd of=/dev/hda
Aktuellen UNIX TIMESTAMP (Epoch) ausgeben
date +%s
Ein lustiger Windowsausflug
Ich habe mic
h mit der Windowstrollerei halbwegs zurückgehalten, aber mein heutiger Ausflug in die gute, alte Microsoftwelt hatte es in sich. Ich benutze seit ca. 3 Jahren privat kein Windows mehr. Wenn ich tatsächlich einmal unbedingt ein Windows-Programm gebraucht habe, habe ich es mit wine oder einem XP in VirtualBox zum laufen gebracht. Heute benötigte ich zum ersten mal wieder ein "echtes Windows", da ich eine neue Firmware auf mein Motorola Milestone flashen wollte. Das Tool dazu läuft leider nur unter nativem Windows. Da ich noch ein wenig Platz hinten auf meiner Platte hatte, machte ich mich schweren Herzens daran XP zu installieren. Ich hatte schon böse Vorahnungen. Nach der Neuinstallation liefen LAN und Grafik nicht richtig. Verständlich, hatte ein uraltes XP und die Treiber waren damals nur vom Hersteller verfügbar. Zuerst habe ich mir den LAN-Treiber mit einer anderen Kiste gesaugt - REBOOT - danach den VGA-Treiber mit meinem jetzt vernetzten XP. Installation - REBOOT - CANNOT LOAD OPERATING SYSTEM. In Ordnung. Damit hatte ich nicht gerechnet. MBR kaputt? Wodurch? Grafiktreiberinstallation? Gut, kein Problem. Habe mit der Super Grub Disk mein Ubuntu gebootet und mit update-grub das kleine Malheur bereinigt. Zurück in XP: Ich benötige von Motorola einen Treiber für die USB-Verbindung vom Handy zum PC. Nachdem ich ihn mir heruntergeladen hatte (Motorola_Phone_treiber_Blah_irgendwas.exe) habe ich beim beherzten Doppelklick noch gedacht: "Ach ja, das ist schon besser als unter Linux. *Wenn* man unter Linux Treiberprobleme hat, dann aber so richtig". Kaum zuende gedacht ein Popup: "Cannot write file. Volume not found C:\". Fuck. Da ich XP im freien Platz hinten auf meiner Platte installiert hatte (vorne ist ja bereits Ubuntu), hat Windows den Laufwerksbuchstaben H: bekommen. Der Treiber installiert sich wohl nur auf C:\. Ich habe mir winrar besorgt und die exe ausgepackt. Darin: Keine .inf nur kryptischer Installer-Mist. Danach habe ich Foren gewälzt. Angeblich bringe das "Motorola Software Update", ein Updatetool für Motorola-Software und Geräte, auch eine Treiberinstallation mit sich. Also gut. Ich installiere es. Es benötigt "Windows Installer 3.1". Den gibts über Windows Update. Ich kriege den Installer 3.1 und Windows Genuine Advantage, mein proprietäres Vorteilspaket. REBOOT. Ich versuche erneut das "Motorola Software Update" zu installieren. Diesmal fehlt .NET. Ich lade es runter, fette 66MB. Die Installation dauert ungefähr 10 Minuten. Eine freundliche Meldung währenddessen sagt: "Der Download ist abgeschlossen, Sie können die Verbindung zum Internet nun trennen" Ich komme mir vor wie auf einer Zeitreise. Die Verbindung trennen? Lol! Der Updater läuft jetzt und installiert wohl auch einige Treiber. Windows beginnt sofort ungefragt Photos von meinem Handy herunterzuladen und eine Digitalkamera wird erkannt. Der Treiber zum flashen war aber wohl leider nicht dabei. Das Tool erkennt mein Handy nach wie vor nicht. Als letzten Ausweg versuche ich den Laufwerksbuchstaben von H: auf C: zu ändern. Microsoft sagt, dass es nicht geht und dass es nicht empfohlen wird. Ich fummele in der Registry herum. REBOOT. Hübsches Windows XP Logo. Leider für 4 Minuten. Windows bootet nicht mehr. Ich werde wohl meine ganzen Partitionen nach hinten verschieben müssen und danach noch einmal Windows installieren müssen. Nur damit Windows C:\ als Laufwerksbuchstabe bekommt, um einen Treiber installieren zu können. Krank oder?
Ein Tag später. Mein Ehrgeiz wurde geweckt. Ich verkleinere, verschiebe, kopiere meine Partitionen, bis sie alle hinten auf der Platte liegen. GParted braucht 3 Stunden dafür. Ich boote mit einer Live-CD, mounte meine root-Partition, chroote in sie rein und installiere Grub neu. Ubuntu läuft wieder. Ich mache mich also daran XP nochmal zu installieren. Diesmal an den Anfang der Platte. Leider will XP die Installation am Anfang der Platte wieder auf H:\ ausführen. Es geht wohl nicht um die Reihenfolge der Partitionen auf der Platte sondern um die Reihenfolge in der Partitionstabelle. Wieder was gelernt. Ich könnte Windows auf C :\ installieren, das ist aber eigentlich mein sda1 auf dem meine root-Partition liegt. Ich will Windows nicht mein Ubuntu killen lassen. Ich boote erneut mit der Live-CD und mache mit partimage ein Backup meiner root-Partition um es nach der XP-Installation wieder in eine neue Partition zurückspielen zu können. Ich starte mal wieder das XP Setup. Jetzt bin ich völlig verwirrt.Der freie Platz am Anfang der Platte heisst jetzt doch C:\. Warum das? Ich hatte an den Partitionen nichts mehr geändert. Ich bekomme so langsam aber sicher das Gefühl, dass ich an irgendeiner Stelle dieser Odysee etwas hätte schlauer machen können. Ich gähne mich durch die erneute XP-Installation. Mann, warum müssen sie mitten in der Installation die Fragen stellen und nicht einfach ganz am Anfang. Man muß daneben sitzen. XP ist wieder da. Auf C:\. Ich installiere den LAN Treiber und den VGA-Treiber. REBOOT. CANNOT LOAD OPERATING SYSTEM. Na ja. Kenne ich ja schon. Vielleicht bin ich in einer Windows-Support Endlosschleife in der Hölle. REBOOT. Also nochmal die Super Grub Disk und update-grub && grub-install. REBOOT. Zurück in XP. "Ihr Computer ist eventuell gefährdet" - da bin ich mir sicher. Ich sauge mir erneut den Motorola-USB-Treiber. Geschafft. Es funktioniert. Was für ein Krampf.
Nachtrag: Ein befreundeteter Windows-Admin hat mir erzählt, wie ich es mir viel einfacher hätte machen können: ein "subst h: c:\" hätte vor der Installation des Treibers gereicht. Ich Windows-DAU!
Howto Spickzettel: Debian Lenny Mailserver: Postfix-SSL Courier-SSL SASL TLS MD5-CRAM VirtualAliases Procmail ClamAV Spamassassin
Ich hatte immer mal wieder mit Mailservern zu tun. Leider war ich häufiger etwas verwirrt, da - je nach Setup - sehr viele verschiedene Komponenten miteinander kommunizieren müssen. Aus diesem Grund hier mein Spickzettel für einen Mailserver auf einem Internethost mit FQDN. Ausprobiert wurde es auf einem Debian Lenny.
Alle Verbindungen nach außen sind verschlüsselt oder mit MD5-Cram Pasword Hashes verschleiert. Eingehende Mail wird auf Spam und Viren geprüft und Benutzer können ihre Mail über IMAP lesen.
Im Bild oben sind Daemons gelb, Datenbanken grau und gesichtere Verbindungen grün.
Was machen die einzelnen Komponenten?
- Postfix empfängt Mails, die Clients versenden wollen. Diese leitet er weiter an den richtigen Server im Internet. Außerdem entfängt Postfix Mails aus dem Internet für Benutzer mit Mailboxen auf dem Server.
- VirtualAliases(Teil von Postfix) ist eine Datenbank mit der Postfix empfangene Mails den einzelnen Mailusern zuordnen kann.
- Saslauthd authentifiziert User die Mail über Postfix per SMTP verschicken wollen. Er überprüft Username und Passwort mit MD5-Cram Hashes.
- Sasldb ist die Datenbank, aus der Saslauthd Usernamen und Passwörter anfragen kann.
- Courier-IMAP stellt dem Mailclient eines Nutzers die Mails aus seinem Maildir zur Verfügung
- Courier-Authdaemon authentifiziert User, die Mail über den Courier-IMAP lesen. Er überprüft Username und Passwort mit MD5-Cram Hashes.
- Userdb (Teil von Courier) ist die Datenbank, aus der Courier-Authdaemon Usernamen und Passwörter anfragen kann.
- Procmail ist ein Filter, durch den jede eingehende Mail laufen muss. Procmail reicht die Mail an den Spamfilter und den Virenscanner durch und liefert sie danach an den User aus.
- Clamassassin ist ein kleines Tool, das eine Schnittstelle zwischen Procmail und ClamAV bildet. Es reicht die Mails nur durch an ClamAV.
- Spamassassin (spamd) Spamchecker. Gibt jeder Mail einen Score, der aussagt wie wahrscheinlich es ist, dass die überprüfte Mail SPAM ist.
- Maildir Mailbox Hier liegen die Mails der Benutzer des Systems. Es ist ein normales Verzeichnis im Dateisystem. IMAP-Clients können sie von hieraus abrufen.
Vorbereitung
Alle benötigten Pakete installieren
apt-get update && apt-get upgrade apt-get install postfix postfix-doc postfix libsasl2-2 sasl2-bin libsasl2-modules courier-imap-ssl procmail spamassassin clamav clamassassin
Konfigfragen von Courier
- Verzeichnisse für WWW-Administration? Nein
Konfigfragen von Postfix
- Internet-Server
- E-Mail-Name: Der per DNS auflösbare FQDN des Servers (z.B. meinedomain.de)
Konfiguration von Postfix fortsetzten
dpkg-reconfigure postfix
Weitere Konfigfragen von Postfix
- Internet-Server
- An wen sollen Mails für root weitergeleitet werden: Nichts eintragen, kommt später.
- Rechner für die dieser Rechner als Zielsystem gilt: Alle Domains die mit Postfix Mails empfangen können und die einen DNS-Eintrag für die IP des Servers haben. (z.B. meinedomain.de, meinanderedomain.de, meinedrittedomain.de)
Postfix
Configdatei für Postfix
# /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = /usr/share/doc/postfix
# TLS aktivieren
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = meinedomain.de
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = meinedomain.de, meineanderedomain, meinedrittedomain , localhost, 127.0.0.1
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html
inet_protocols = ipv4
# Auth über SASL
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
# Nur User Mail versenden lassen, die in SASL-DB stehen, nur MD5-Passwörter erlauben
smtp_sasl_security_options = noanonymous, noplaintext
# Nur Localhost (mynetworks) und über SASL angemeldete User dürfen Mails verschicken
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_local_domain =
# Nur verschlüsselt Authentifizieren mit TLS
smtp_tls_auth_only = yes
#TLS aktivieren
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
# Selbstgenerierter Schlüssel und das Zertifikat
smtpd_tls_key_file = /etc/postfix/cert/smtpd.key
smtpd_tls_cert_file = /etc/postfix/cert/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/cert/cacert.pem
# SPäter auf 0 setzen, gut zum debuggen
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
# Mails in Maildirs ausliefern
home_mailbox = Maildir/
# Dateiname der Virtual-Alias-Map mit der Zuordnung von E-Mail-Adresse zu lokaler Mailbox
virtual_alias_maps = hash:/etc/postfix/virtual
# Mail wird nicht direkt in Mailboxen gelegt sondern an Procmail übergeben
mailbox_command = procmail -a "$EXTENSION"
SASL
SASL stellt für verschiedene Daemons einen Authentifizierungsmechanismus zur Verfügung. In diesem Setup werden in einer SASL-Datenbank die Benutzer gespeichert, die über unseren Postfix Post verschicken dürfen. (Also der Username und das Passwort, die im E-Mail-Client als Zugangsdaten für den SMTP-Server eingetragen werden müssen)
Konfigdatei für SASL erstellen
# /etc/postfix/smtpd.conf pwcheck_method: authdaemond mech_list: CRAM-MD5
Postfix kann leider noch nicht den saslauthd benutzen um Benutzerdaten zu überprüfen, da Postfix in einer chroot-Umgebung läuft und noch keinen Zugriff auf den saslauthd hat.
# /etc/default/saslauthd START=yes DESC="SASL Authentication Daemon" NAME="saslauthd" MECHANISMS="pam" MECH_OPTIONS="" THREADS=5 # Mit -m legen wir das Socket von saslauthd in ein Verzeichnis, das Postfix aus dem chroot erreichen kann. OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
Danach muss noch im "start-instance"-Block von /etc/init.d/saslauthd der Ort für die PID geändert werden, auch wieder damit Postfix das PID-File lesen kann.
# /etc/init.d/saslauthd
.
.
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"
.
.
TLS
Es können nun keine nicht-authentifizierten Sender mehr Mail über den Postfix SMTP versenden, allerdings gehen die Mails noch im Klartext durch LAN und Internet. Die TLS-Verschlüsselung wurde bereits oben in der Postfix-Konfigdatei main.cf aktiviert. Allerdings fehlen noch Key und Zertifikat.
mkdir /etc/postfix/cert cd /etc/postfix/cert openssl genrsa -des3 -rand /etc/hosts -out ./smtpd.key 1024 chmod 600 ./smtpd.key openssl req -new -key ./smtpd.key -out ./smtpd.csr openssl x509 -req -days 99999 -in ./smtpd.csr -signkey ./smtpd.key -out ./smtpd.crt openssl rsa -in ./smtpd.key -out ./smtpd.key.tmp mv -f ./smtpd.key.tmp ./smtpd.key chmod 600 ./smtpd.key openssl req -new -x509 -extensions v3_ca -keyout ./cakey.pem -out ./cacert.pem -days 99999
SASL DB erstellen
Mails werden nun bei der Übertragung verschlüsselt, Usernamen und Passwörter für den Mailversand über den SMTP-Server gehen jedoch noch im Klartext durchs Internet. Diese kann man zumindest mit der MD5-Cram-Methode kaschieren. Diese wurde bereits in der /etc/postfix/smtpd.conf aktiviert. Es fehlt nur noch die SASL-Datenbank selbst. Diese legt man an, indem man einfach einem späteren Mailuser einen Usernamen und ein Passwort gibt.
# Für Username einen lokalen Mailuser einsetzen um die SASL-DB zu erstellen mit einem ersten Benutzer saslpasswd2 username
Postfix ist fertig. Er kann Mails empfangen und verschicken. Verbindungen zu Clients und anderen Mailservern sind verschlüsselt.
Courier
Couriers Konfigdateien
# /etc/courier/authdaemonrc # UserDB zur authentifizierung benutzen authmodulelist="authuserdb" authmodulelistorig="authuserdb authpam authpgsql authldap authmysql authcustom authpipe" daemons=5 authdaemonvar=/var/run/courier/authdaemon # Gut zum debuggen DEBUG_LOGIN=2 DEFAULTOPTIONS="" LOGGEROPTS=""
#/etc/courier/authmodulelist # courierauthdaemon nutzt MD5-cram authcram
# /etc/courier/imapd ADDRESS=0 PORT=143 MAXDAEMONS=40 MAXPERIP=20 PIDFILE=/var/run/courier/imapd.pid TCPDOPTS="-nodnslookup -noidentlookup" LOGGEROPTS="-name=imapd" #Hier wird AUTH=CRAM-MD5 hinzugefügt IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 IDLE" IMAP_KEYWORDS=1 IMAP_ACL=1 IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE" IMAP_PROXY=0 IMAP_PROXY_FOREIGN=0 IMAP_IDLE_TIMEOUT=60 IMAP_MAILBOX_SANITY_CHECK=1 IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN" IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN" IMAP_DISABLETHREADSORT=0 IMAP_CHECK_ALL_FOLDERS=0 IMAP_OBSOLETE_CLIENT=0 IMAP_UMASK=022 IMAP_ULIMITD=65536 IMAP_USELOCKS=1 IMAP_SHAREDINDEXFILE=/etc/courier/shared/index IMAP_ENHANCEDIDLE=0 IMAP_TRASHFOLDERNAME=Trash IMAP_EMPTYTRASH=Trash:7 IMAP_MOVE_EXPUNGE_TO_TRASH=0 SENDMAIL=/usr/sbin/sendmail HEADERFROM=X-IMAP-Sender IMAPDSTART=YES MAILDIRPATH=Maildir
SSLPORT=993 SSLADDRESS=externe.ip.des.servers SSLPIDFILE=/var/run/courier/imapd-ssl.pid SSLLOGGEROPTS="-name=imapd-ssl" IMAPDSSLSTART=YES IMAPDSTARTTLS=YES IMAP_TLS_REQUIRED=1 COURIERTLS=/usr/bin/couriertls TLS_KX_LIST=ALL TLS_COMPRESSION=ALL TLS_CERTS=X509 TLS_CERTFILE=/etc/courier/imapd.pem TLS_TRUSTCERTS=/etc/ssl/certs TLS_VERIFYPEER=NONE TLS_CACHEFILE=/var/lib/courier/couriersslcache TLS_CACHESIZE=524288 MAILDIRPATH=Maildir # Auch hier kommt AUTH=CRAM-MD5 hinzu IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 IDLE"
Spamassassin
Spamassassin muss aktiviert werden
# /etc/default/spamassassin ENABLED=1 OPTIONS="--create-prefs --max-children 5 --helper-home-dir" PIDFILE="/var/run/spamd.pid" CRON=0
Procmail
Nachdem Postfix Mails aus dem Internet für einen lokalen Benutzer empfangen hat, übergibt er sie an procmail. Procmail wiederum übergibt die Mail an Spamassassin um sie auf Spam zu überprüfen und an clamassassin, der sie weiterreicht an den Virenscanner clamav.
# Eine Beispiel .procmailrc für die Homeverzeichnisse der Mailuser PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin:. MAILDIR=$HOME/Maildir/ DEFAULT=$HOME/Maildir/new LOGFILE=$HOME/procmail.log # SPAMASSASSIN :0fw: /var/run/spam.lock * < 256000 | spamc -f -u $LOGNAME # Alle SPAMS mit Score 10-99 gleich weg :0: * ^X-Spam-Status: Yes, score=[1-9][0-9]\. /dev/null # Alle SPAMS mit Score > 3 gleich weg #:0: #* ^X-Spam-Status: Yes, score=[4-9]\. #/dev/null :0fw | /usr/bin/clamassassin # Rewrite Subject Line, if SpamLevel is high enough. :0fw * ^X-Virus-Status: Yes | sed '1,/^$/s@^Subject:@Subject: /VIRUS!/@' :0: * ^X-Virus-Status: Yes /dev/null # Move SA SPAM MAILS TO SPAM :0: * ^X-Spam-Status: Yes $MAILDIR/.Spam/new # Alle Mails die es ohne Blessuren bis hier geschafft haben, landen automatisch in der Inbox des Users. "Sie haben Post!"
Puh! Das Mailsystem ist fertig! Es fehlen nur noch Benutzer, die Maildirs und die Konfiguration der Virtual-Aliases um festzulegen welche Email-Adressen in welchen lokalen Mailboxen laden. Das folgende Skript legt den UNIX-Systembenutzer an, und denselben Benutzer noch einmal für Postfix in der SASLdb und für Courier in der Courier-Userdb.
Skript zum anlegen neuer User
# Added einen neuen User zum Mailsystem #!/bin/bash clear echo "Neuer User fuer das Mailsystem"; echo "Username eingeben: "; read newuser echo $newuser >> /root/scripts/mail/mail_users.dat # Adding Unix User adduser --ingroup users --quiet --shell /bin/false $newuser echo echo "Linux User wurde angelegt....." echo # Adding Courier Mailboxes maildirmake /home/$newuser/Maildir maildirmake -f Spam /home/$newuser/Maildir maildirmake -f Virus /home/$newuser/Maildir maildirmake -f LerneSpam /home/$newuser/Maildir maildirmake -f LerneKeinSpam /home/$newuser/Maildir maildirmake -f MeineOrdner /home/$newuser/Maildir maildirmake -f Sent /home/$newuser/Maildir maildirmake -f Trash /home/$newuser/Maildir chown -R $newuser.users /home/$newuser/Maildir echo echo "IMAP Mailverzeichnisse wurden angelegt...." echo # Setting SASL Password for Postfix SMTP auth echo echo echo "Passwort für SMTP-Auth angeben (Mails verschicken mit dem Client)" saslpasswd2 $newuser echo echo echo "Passwort für Courier angeben (Zuganspasswort für den IMAPSERVER)" NEWUID=`cat /etc/passwd | grep $newuser | cut -d: -f3` userdb $newuser set home=/home/$newuser uid=$NEWUID gid=100 userdbpw -hmac-md5 | userdb $newuser set imap-hmac-md5pw home=/home/$newuser makeuserdb /etc/init.d/courier-authdaemon restart /etc/init.d/saslauthd restart echo "OK. User angelegt" echo "Weisen Sie dem neuen User bitte noch E-Mail-Adressen zu!" echo echo echo "Datei /etc/postfix/virtual editieren." echo "Danach einmalig ausführen: postmap /etc/postfix/virtual" echo "Danach einmalig ausführen: /etc/init.d/postfix reload"
Skript zum löschen von Usern
echo "Diesen User loeschen:" read DELUSER # aus mail_users_dat kriegt lernespam die mailuser cat /root/scripts/mail/mail_users.dat | grep -v "^$DELUSER$" > /root/scripts/mail/mail_users.dat.tmp rm /root/scripts/mail/mail_users.dat mv /root/scripts/mail/mail_users.dat.tmp /root/scripts/mail/mail_users.dat deluser --remove-home $DELUSER saslpasswd2 -d $DELUSER userdb $DELUSER del makeuserdb /etc/init.d/courier-authdaemon restart /etc/init.d/saslauthd restart
Skript zum manuellen Spam-lernen
#!/bin/bash for user in $(cat /root/scripts/mail/mail_users.dat); do SADIR=/home/$user/.spamassassin NOSPAM=/home/$user/Maildir/.LerneKeinSpam/cur/ for l in $(ls $NOSPAM ); do PRINT=`cat $NOSPAM/$l | grep -e "^From:" | grep -o "[[:alnum:]\.\+\-\_]*@[[:alnum:]\.\-]*" | sort -u` echo "whitelist_from $PRINT" >> $SADIR/user_prefs done # Let SA learn /usr/bin/sa-learn -D --spam /home/$user/Maildir/.LerneSpam/cur /usr/bin/sa-learn -D --ham /home/$user/Maildir/.LerneKeinSpam/cur # Move Stuff mv /home/$user/Maildir/.LerneKeinSpam/cur/* /home/$user/Maildir/cur/ rm /home/$user/Maildir/.LerneSpam/cur/* done exit
Virtual Aliases
Unser Postfix weiss noch gar nicht welche E-Mail-Adressen welchen lokalen Mailboxen zugeordnet sind. Diese Zuordnung wird in der Datei /etc/postfix/virtual geschaffen. Links stehen E-Mail-Adressen oder lokale Absender wie "root", rechts steht der Username für die IMAP-Mailbox oder eine Ziel-E-Mail-Adresse für Weiterleitungen
# /etc/postfix/virtual root daniel daniel@meinedomain.de daniel daniel@meineanderedomain.de daniel fritz@meinedomain.de fritz alle@meinedomain.de daniel,fritz weiterleitung@meinedomain.de daniel@gmail.com
Danach muss Postfix die virtuellen Aliase neu initialisieren. Das ist nach jeder Änderung der Datei notwendig.
postmap /etc/postfix/virtual
Jetzt ist wirklich alles fertig. Es müssen noch alle Dienste gestartet werden.
/etc/init.d/postfix restart /etc/init.d/courier-imap restart /etc/init.d/courier-imap-ssl restart /etc/init.d/courier-authdaemon restart /etc/init.d/saslauthd restart /etc/init.d/spamassassin restart /etc/init.d/clamav restart
Irgendwas wird sicherlich nicht funktionieren! Zum Debuggen eignet sich /var/log/mail.log ganz gut. In vielen Configdateien kann man das Loglevel hochsetzen um mehr Informationen zu bekommen.
Transport Maps
Um Mails an einen anderen SMTP weiterzurouten, benötigt man Transport-Maps. Sie werden in der Datei /etc/postfix/transport angelegt:
#/etc/postfix/transport # Links lokales Ziel # Rechts SMTP an den weitergeleitet wird daniel-ritter.de smtp:12.13.14.15 daniel-ritter.de smtp:anderer.host.de # Zusätzlich alle Subdomains .daniel-ritter.de smtp:anderer.host.de
#/etc/postfix/main.cf transport_maps = hash:/etc/postfix/transport
# Aktivieren von Änderungen an den Transportmaps postmap /etc/postfix/transport /etc/init.d/postfix reload
Nutzer das Courier-Passwort selbst ändern lassen
echo "Courier Passwort ändern" echo echo echo "Benutzername: " read U echo "Altes Passwort: " read A echo "Neues Passwort: " read N if [ $(echo $N | grep -e ^[0-9]) ]; then echo "Entschuldigung. Passwörter dürfen nicht mit einer Zahl beginnen." exit fi echo -e "$U\0$A\0$N\0" | /opt/courierpasswd --verbose --stderr --stdin --changepw
Keep it simple – Very basic iptables
Iptables können ziemlich verwirrend sein. Deshalb habe ich, um einen Grundstock zu schaffen, ein ganz simples Skript gebastelt. Standardmässig sind keine Ports von außen erreichbar, gewünschte Ports müssen explizit freigegeben werden. Von innen initiierte Verbindungen funktionieren, Verbindungen mit den freigegebenen Ports auch. Kann man es noch weiter vereinfachen?
#!/bin/bash # alle bestehenden Regeln löschen iptables -F # Standardmässig eingehende Verbindungen verbieten iptables -P INPUT DROP # Standardmässig ausgehende Verbindungen erlauben iptables -P OUTPUT ACCEPT # Nicht routen iptables -P FORWARD DROP # localhost darf alles iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Eingehende Verbindungen für SSH und HTTP erlauben iptables -A INPUT -j ACCEPT -p tcp --dport 22 iptables -A INPUT -j ACCEPT -p tcp --dport 80 # Eingehende Verbindungen erlauben, die sich auf bestehende Verbindungen # beziehen. (Damit es nach dem Verbindungsrequest eines Clients auch weitergeht) iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Screencast Ubuntu 10.04 “Lucid Lynx” Beta 1
Ein kleiner Screencast zur neuen Lucid Beta. Ich schaue mir den Desktop und einige neue Features an.
My Ubuntu 9.10 Karmic Koala annoyances and how i fixed them
Lets face the truth. Desktop Linux has made an incredible progress in the last few years. It still gives you all the freedom, happiness and elegance it inherited from it's UNIX-foundation - and it tries hard to compete with the Windows Plug-And-Play mentality.
The standard user shouldn't need to do complicated things on the console. Basic things should just work. Especially Ubuntu did great, they really improved many GUI aspects of the GNOME-desktop. Most modern machines run and work just "out of the box" with a fresh Ubuntu install. BUT there are still these little annoyances and things that don't work as expected. I will collect my personal annoyances with Ubuntu 9.10 "Karmic Koala" in this post and add solutions, if I find them.
Annoyance #1
Logs are spammed with messages about CPU temperature
This one is an ugly one. It started for me with Karmic. /var/log/kern.log and /var/log/syslog got spammed with millions of messages from the kernel stating things like:
CPU0: Temperature above threshold, cpu clock throttled (total events = 208[ 8973.550089] CPU0: Temperature/speed normal
CPU0: Temperat cpu clock throttled (total events = 2080190)
This was a real problem, because about 100 messages per second were written to the logs, making them hard to read for other purposes. Syslog archiving them pushed my CPU to 100% and they filled up my root partition very quickly. This behaviour seems to originate from a kernel bug that should be fixed anytime soon. There is an Ubuntu Bug-Report on the problem already: https://bugs.launchpad.net/ubuntu/+source/rsyslog/+bug/453444. There is no real fix for it, as this is a kernel bug, but there is a workaround that fixed the odd behaviour of my system. I just disabled the logging of lines, that contain the bogus information:
- Create a file /etc/rsyslog.d/10-temperature.conf
- Paste the following code into it::msg,contains,"Temperature/speed normal" ~
:msg,contains,"Temperature above threshold" ~
- Save it
- Do an sudo restart rsyslog to make the new rule active.
Annoyance #2
CPU Frequency Scaling Monitor didn't remember my password
There is a very useful little applet for the Gnome panel, that allows you to change the speed of your CPU while working. As I am using a notebook most of the time, this thingy came in quiet handy for me. Because changing of the CPU policy requires root-privileges, you had to enter your password once with old Ubuntu versions. After that you were able to check a checkbox and Ubuntu remembered your policy. Things changed in Karmic. With the new policykit2 environment, there was no possibility anymore to remember the password. I had to reenter it every time i wanted to change my CPU policy. I found out, that I could set the permisson right in the config files for policykit2:
- Create a file /var/lib/polkit-1/localauthority/50-local.d/gnome-cpufreq.pkla
- Paste the following code into it (be sure to replace YOURUSERNAME with your username):[Allow users to set the CPU frequency]
Identity=unix-group:YOURUSERNAME
Action=org.gnome.cpufreqselector
ResultAny=no
ResultInactive=no
ResultActive=yes
- Save it
- There is no password needed anymore for changing CPU policies
Annoyance #3
Streamtuner couldn't load the Shoutcast streamlist anymore
This started with Intrepid or so. Shoutcast changed the hostname of it's streamlist-servers. The old hostname seems to be hardcoded into Streamtuner, so it couldn't get the streamlist anymore. This was unconvenient for me, because i got used to tune into my favourite internet radio stations (like Lemixx Paris France) with Streamtuner. There seems to be no effort to fix this in the Ubuntu package, as the bug is now several months old already. I fixed it by adding the right IP to /etc/hosts.
- Open up /etc/hosts with a text editor
- Add the following line to it:205.188.234.120 www.shoutcast.com
- Save it
- Streamtuner can access Shoutcast streams again
Annoyance #4
USB Startup Disk Creator is unable to create an USB Startup Disk
Ubuntu brings it's own tool to clone itself onto an USB flashdrive. You basicly get a fully working Ubuntu Installation on your flashdrive. A very useful thingy to carry around if you want to connect to the internet from untrusted machines or if you want to fix a brokeen down computer. So far so good, it didn't work. When you start the USB Startup Disk Creator from Ubuntus menu, the tool starts but is unable to format or write to partitions on your flashdrive. The solution is surprisingly simple: It needs to be run as root to make it work:
- Open up a terminal
- Enter the following command:
sudo usb-creator-gtk - Create and enjoy your flashdrive
Annoyance #5
Couldn't click on any web link in Pokerstars with wine
Poker is one of my hobbies and the guys from Pokerstars did a great job on making it a good experience on Linux with wine too. There are a few downgrades though. When clicking on links in the Pokerstars software, no webbrowser opened up in Gnome. You need to edit the registry to fix that.
- Run wine regedit to open the registry editor
- Navigate to HKEY_CLASSES_ROOT\http\shell\open\command
- Add a "%1" after -nohome in that registry key
- Links work now in Pokerstars
Annoyance #6
Couldn't make Pokerstars tables fullscreen with wine
Another Pokerstars problem. Scaling tables didn't work well. There was no way to make a table fullscreen. There is a way to fix that, implemented espcially for wine users by Pokerstars.
- Open up the file user.ini in your Pokerstars directory ($HOME/.wine/Program....)
- Add a line with f5redrawtable=1 to the file
- Save it
- Tables are redrawn now after resizing them when you press F5
Annoyance #7
Skype didn't show video on my Logitech Qucikcam Chat
Skype detected my cam as /dev/video0 but was unable to grab pictures from it. The video window just stayed in plain old black
I started Skype with -> LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype to fix it.
To be continued...
6 Useful Things You Can Do With SSH
SSH must be my favourite piece of software ever. It's free, it gives you freedom, it's simple to use yet powerful in the things it can do. It helps you to encrypt and secure your communication. It can do this in an universal way and for nearly every usage case. In this post, I want to show you 6 things you can do with SSH without too much hassle. SSH can do more than just serve as an encrypted remote session. Try the following examples for yourself and explore the power of the Secure Shell.
Thingy #1 - A secure remote shell

OK, this is the most obvious thing you can do with SSH and i bet most of you have already done it: Connect to a remote machine via a SSH-secured connection and type on it's console to administer it.
This is very simple:
ssh user@box_B
This will connect you to Box B as user "user". After having entered your password, you will be able to use BOX B's console.
Sometimes you don't want to connect to the remote machine for an interactive session, because you just want to run a single command on the remote machine. In that case you can just do a
ssh user@box_B command
This will connect to Box B as "user", run "command", show you "command"'s output and disconnect.
Thingy #2 - Copy files between your boxes

Great, we can administer a remote machine with SSH but we can also move data between machines in an encrypted and secure way. It basicly works like the standard "cp" command, but it has got a different name: "scp"
scp /home/me/a_file.txt user@box_B:/home/me/
This will copy the local file "/home/me/a_file.txt" on our Box A to "/home/me/a_file.txt" on Box B.
It will work vice versa as well:
scp user@box_B:/home/me/b_file.txt /home/me
This would get the file "/home/me/b_file.txt" and would put in into our home dir on box A.
Because "scp" works like "cp" wildcards are allowed as well:
scp /var/log/* user@box_B:/home/me/logsbackup
This would copy all of the log files from our Box A to "/home/me/logsbackup" on Box B.
Thingy #3 - Mount a remote directory into your local file system

Sometimes it's not enough to simply copy one or more files from one machine to another. Mounting a remote directrory into your local filesystem becomes super useful, when you want to work on the remote files with local programs. A good example for this would be working on a remote website. You can simply mount the web-directory from the remote server into your local filesystem and use all your fancy HTML-editors and image-programs on the remote files as if they were on your local harddrive. That's where "sshfs" comes in handy. The tool isn't installed by default in most distributions but you should be able to find it in your repository. On Debian based systems just install it with:
apt-get install sshfs
After having installed sshfs you can start using it:
mkdir /mnt/b_data sshfs user@box_B:/b_data /mnt/b_data
This mounts the directory "/b_data" from box B into "/mnt/b_data" on your local file system. Now you can work on your remote files with local tools. When you are done, you can unmount the directory with:
fusermount -u /mnt/b_data
If the unmount fails, check if you have still open files in the directory or if you are still in that directory in some shell or Nautilus/Konqueror window.
Thingy #4 - Surf the Web uncensored and anonymously from "critical" locations

Corporate policies, fascist governments, internet cafés and other "unfriendly" rules, institutions and places can give you a hard time, when you want to access the web in a secure and private way. Firewalls and proxies may block your favourite sites, log the sites you have visited, perform man in the middle attacks or can just give you a bad feeling. SSH is the solution for these problems. It offers you the possibility to use it as a web-proxy. You simply connect to your good old trusted box B and surf through the encrypted connection.
(Local Browser <-> Local SSH Proxy <-> SSH <-> Box B <-> Website)
Now nobody on your unfriendly local LAN can block or spy on your surfing session.
Sounds good? Great! It's even simple to setup. SSH offers the "-D" option to provide a SOCKS proxy on the local machine:
ssh -D 1234 user@box_B
You'll have a proxy listening on localhost port 1234. Now you just have to setup your webbrowser to use the "SOCKS proxy" on localhost port 1234 and all your surfing will go through Box B. You can check if it worked by visiting a website that shows your IP. http://www.whatismyip.com is a site that would work. If that site shows Box B's IP-address instead of your local one, you setup everything correctly. A portable webbrowser on your USB-pendrive like Portable Firefox would make things even more cozy.
Thingy #5 - Encrypt the data traffic of your favourite local application or access services in LAN's you couldn't reach otherwise with SSH-tunnels

OK, we encrypted remote admin-sessions, copied files securely and even surfed the web in a private way. But SSH can do more. You can encrypt the traffic of every application that uses the TCP-protocol with SSH tunnels. Like with our SOCKS-proxy, we can tunnel other data through ssh, for example the traffic of our e-mail client. Lets say you want to pickup your e-mail while being in a "critical" environment. Bad corporations / governments / script kiddies could read your email and even worse could sniff your e-mail password. SSH helps. The syntax for tunnels in SSH might puzzle your brain at first sight, but it's not too hard:
ssh -L local_port:target_host:target_port user@box_B
for example
ssh -L 10000:pop3.mailprovider.com:110 user@box_B
OK, lets see what happened here. We told ssh to create a tunnel with a local (-L) endpoint at port "10000". Everything that is put into our local endpoint goes first encrypted to our Box B and after that to "pop3.mailprovider.com" on port 110 (which is POP3). You relay all data that goes into our local endpoint in an encrypted way via Box B to your E-Mail provider. In this example you would set the POP-account in your e-mail client to "localhost" port "10000". It doesn't have to be e-mail. Any other application that uses a protocol utilizing TCP works as well. For example IRC, FTP, HTTP, IMAP, you name it...
in case you are running your own server-service on Box B, "target host" can be Box B itself of course:
ssh -L 10000:127.0.0.1:110 user@box_B
Target host in this example is "127.0.0.1" because it's the target from Box B's point of view. "127.0.0.1" seen from Box B sure is Box B itself.
Tunneling can be useful to secure your services or to connect to services inside BOX B's network. Lets say BOX B is in an intranet that has an interesting webserver on IP "192.168.0.77" and you are unable to access that server from the outside. You just tunnel your way to BOX B and let BOX B forward you to the webserver:
ssh -L 10000:192.168.0.77:80 user@box_B
Now typing "http://127.0.0.1:10000" into your local webbrowser will show you the homepage of the intranets webserver.
Thingy #6 - A tunnel the other way around

OK, this could have been part of "Thingy #5" but to make things more clear i made an extra point for it. If you understood #5 this should be no problem for you. Here, you open up a "remote" endpoint on Box B. Everything that goes in there is relayed encrypted to Box A (the one you are using at the moment) and after that to the target host.
ssh -R remote_port:target_host:target_port user@box_B
for example
ssh -R 10000:pop3.mailprovider.com:110 user@box_B
An e-mail client would set "box_B" and port "10000" as the POP3 server. BOX B would relay the traffic to BOX A through SSH. BOX A would relay the traffic to "pop3.mailprovider.com" port "110".
Useful commandline options for SSH
-c "Compress"
The "-c" option in SSH compresses all traffic with gzip before sending it to the remote host. This increases the speed greatly with uncompressed data-types. It's very useful for copying large text-files over SSH or for surfing the web with the "-D" option. In general "-c" never hurts, it just puts a little more pressure onto your CPU.
ssh -c -D 1234 user@box_B
-g "Grant Access"
The "-g" option allows other hosts to connect to your local tunnel endpoints. If you don't use "-g" in combination with a tunnel, only your own localhost (Box A in the examples) may use the tunnel.
ssh -L -g 10000:127.0.0.1:110 user@box_B
-p "Port"
The "-p" option is needed, if the SSH-server you want to connect to doesn't run on the default port "22"
ssh -p 22000 user@box_b
-v "Verbose"
Add this option if you want to dive deeper into SSH. You will see many technical information while connecting to a remote host.
Further reading
I tried to keep this article as simple as possible to make it usable. There is a lot more to know about SSH. If you are looking for a more comprehensive read i suggest you check out these docs:



