[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:sudo: Root-Rechte] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis()]] Die Datei [wikipedia:hosts:/etc/hosts] wird benutzt, um Rechnernamen in IP-Adressen aufzulösen – wenn kein Nameserver im lokalen Netzwerk vorhanden ist. Nach der Installation eines Ubuntu-Rechners mit dem [:Rechnername:Rechnernamen] ''"jupiter"'' sieht die Datei so aus: {{{ 127.0.0.1 localhost 127.0.1.1 jupiter # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts }}} Der obere Teil definiert den [wikipedia:localhost:] und den Rechnernamen. Ab Ubuntu 6.06 kommen noch ein paar Zeilen für [wikipedia:IPv6:] hinzu. = Namensauflösung = Wie schon beschrieben, kann die '''/etc/hosts''' auch dazu benutzt werden, um Rechner im Netzwerk über ihren Namen anstatt über ihre IP-Adresse anzusprechen. Besteht das lokale Netzwerk z.B. aus 3 Rechnern mit den Namen * jupiter (192.168.0.1 - dieses System) * mars (192.168.0.2) * saturn (192.168.0.3) muss in der '''/etc/hosts''' mit Root-Rechten [1] folgendes eingetragen [2] werden: {{{ 127.0.0.1 localhost 127.0.1.1 jupiter # 192.168.0.1 jupiter.homenetwork jupiter 192.168.0.2 mars.homenetwork mars 192.168.0.3 saturn.homenetwork saturn # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts }}} Dadurch können die Rechner ''"mars"'' und ''"saturn"'' über ihren Namen vom Rechner ''"jupiter"'' aus angesprochen werden. == IP-Adressen umleiten == Darüber hinaus lässt sich durch eigene Einträge ein einfacher, aber effektiver systemweiter Blocker realisieren. Dazu werden einfach zeilenweise weitere Namen (oder IP-Adressen) mit ``localhost`` verbunden. Beispiel: {{{ 127.0.0.1 localhost 127.0.1.1 jupiter # 127.0.0.1 www.geblockte_domain.de }}} Damit werden alle Anfragen an ``www.geblockte_domain.de`` auf ``localhost`` umgeleitet und die Domain ist nicht mehr erreichbar. Nachteile dieses Verfahrens sind aber zum einen die aufwendige Pflege blockierter Namen und zum anderen die Verarbeitung sehr großer ``hosts``-Dateien. Ein weiterer gravierender Nachteil ist, dass Platzhalter bzw. Wildcards nicht zulässig sind. Hostnamen dürfen nur aus alphanumerischen Zeichen, Minus-Zeichen und Punkten bestehen; sie müssen mit einem alphabetischen Zeichen beginnen und mit einem alphanumerischen Zeichen enden. Das macht die ``hosts``-Datei relativ unflexibel, um Werbung im Internet zuverlässig zu blocken, da nur exakt das geblockt wird, wie es in der Datei auch angegeben ist, so dass z.B. zugehörige Subdomains nicht geblockt werden. Einige Beispiele sollen das verdeutlichen: {{{ # Beispiele für unzulässige Einträge: 127.0.0.1 *.google-analytics.com 127.0.0.1 facebook. 127.0.0.1 doubleclick.* # Beispiele für unwirksame Einträge: 127.0.0.1 google-analytics # blockiert nicht z.B. ssl.google-analytics.com 127.0.0.1 doubleclick.net # blockiert nicht z.B. 3ad.doubleclick.net, ad-emea.doubleclick.net, ad-g.doubleclick.net }}} Daher ist ein [wikipedia:Proxy_(Rechnernetz):Proxy-Server] auf Dauer die bessere Wahl. Eine flexiblere Alternative ist auch [:Dnsmasq#Manipulieren:dnsmasq], da dort das Hinzufügen der Domain ausreicht, um auch alle Subdomains zu blockieren. Eine weitere Möglichkeit besteht darin, über ein Skript mehrere im Internet erhältliche regelmäßig aktualisierte, umfangreiche hosts-Dateien herunterzuladen (die auch die in den obigen Beispielen erwähnten Subdomains enthalten), diese zu kombinieren, sie z.B. um doppelte Einträge zu bereinigen und anschließend zu '''/etc/hosts''' hinzuzufügen: {{{#!code bash #!/bin/bash # If this is our first run, save a copy of the system's original hosts file and set to read-only for safety if [ ! -f ~/hosts-system ] then echo "Saving copy of system's original hosts file..." cp /etc/hosts ~/hosts-system chmod 444 ~/hosts-system fi # Perform work in temporary files temphosts1=`mktemp` temphosts2=`mktemp` # Obtain various hosts files and merge into one echo "Downloading ad-blocking hosts files..." wget -nv -O - http://winhelp2002.mvps.org/hosts.txt >> $temphosts1 wget -nv -O - http://hosts-file.net/download/hosts.txt >> $temphosts1 wget -nv -O - http://someonewhocares.org/hosts/hosts >> $temphosts1 wget -nv -O - "http://pgl.yoyo.org/as/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext" >> $temphosts1 # Do some work on the file: # 1. Remove MS-DOS carriage returns # 2. Replace 127.0.0.1 with 0.0.0.0 because then we don't have to wait for the resolver to fail # 3. Delete all lines that don't begin with 0.0.0.0 # 4. Scrunch extraneous spaces separating address from name into a single tab # 5. Delete any comments on lines # 6. Clean up leftover trailing blanks # 7. Delete any lines ending with the word localhost because we'll obtain that from the original hosts file # 8. Delete any lines ending with the word .dropbox.com. # Pass all this through sort with the unique flag to remove duplicates and save the result echo "Parsing, cleaning, de-duplicating, sorting..." sed -e 's/\r//' -e 's/127\.0\.0\.1/0\.0\.0\.0/' -e '/^0\.0\.0\.0/!d' -e 's/ \+/\t/' -e 's/#.*$//' -e 's/[ \t]*$//' -e '/localhost$/d' -e '/\.dropbox\.com$/d' < $temphosts1 | sort -u > $temphosts2 # Combine system hosts with adblocks echo Merging with original system hosts... echo -e "\n# Ad blocking hosts generated "`date` | cat ~/hosts-system - $temphosts2 > ~/hosts-block # Clean up temp files and remind user to copy new file echo "Cleaning up..." rm $temphosts1 $temphosts2 echo "Done." cp ~/hosts-block /etc/hosts }}} Das Skript ersetzt bei den zu blockierenden Einträgen die IP-Nummer 127.0.0.1 durch 0.0.0.0, da dadurch erhebliche [http://hype-free.blogspot.de/2009/07/speedy-hosts-blocklists.html Geschwindigkeitsvorteile] {en} zu erreichen sind. Das Skript sollte unter '''/root/gethosts''' gespeichert und [:chmod: ausführbar] gemacht werden. Über einen [:ln#Symbolische-Verknuepfungen: symbolischen Link] z.B. nach '''/etc/cron.daily''' oder '''/etc/cron.weekly''' kann es dann leicht automatisch ausgeführt werden. = Links = * [man_de:hosts.5:Manpage] {de} # tag: Netzwerk