Inhalt

10. Konfiguration der Internet-Dienste

Voraussetzung: Die Internet-Verbindung über eine Dial-On-Demand Wählverbindung und das Routing funktioniert.

Jetzt sollen (je nach Bedarf) weitere Internetdienste eingerichtet werden.

10.1 DNS-Cache

Hintergrund: siehe IP-Nummern Auflösung

  1. Paket bind installieren.
  2. editiere /etc/named.boot:

    cache . root.cache
    options query-log
    forwarders 192.76.144.66
    slave
                    
    
    Bei forwarders werden ein oder mehrere IP-Nummern der Nameserver eingetragen. Die Option slave steuert das Verhalten, wenn der Nameserver selbst noch keine Antwort hat, ohne die Option müßte jetzt der eigene Nameserver die Anfrage auflösen (aufwendig). Mit dieser Option (empfohlen) wird dem Forwarder gesagt, daß er soll die Anfrage auflösen. Bei der nächsten Anfrage hat er diese dann im Cache.

    Zur Diagnose ist zu empfehlen, noch die Zeile options query-log einzufügen, es werden dann über Syslog (also in /var/log/messages alle Anfragen an den Nameserver protokolliert, dadurch lassen sich einfach die Übeltäter im lokalen Netz finden. Bsp:

    named[232]: XX /192.168.1.2/www.suse.de/A
                    
    
    Der Rechner 192.168.1.2 fragt nach dem A-Record für www.suse.de.
  3. Wir benutzen uns selbst als Nameserver.

    Trage als Nameserver die lokale IP-Nummer ein (192.168.1.1), siehe Konfiguration der Namensauflösung

  4. Starte den Nameserver:
  5. Test: nslookup www.suse.de.

    Ergebnis: eine Verbindung wird aufgebaut, in messages wird die Anfrage protokolliert und die IP-Nummer wird aufgelöst.

    Eine Wiederholung der Anfrage, wenn die Verbindung nicht besteht, darf keine Verbindung aufbauen, die Anfrage muß sofort beantwortet werden.

10.2 Squid

Squid ist ein WWW- und FTP-Proxy. Der Vorteil eines Proxies liegt nicht nur darin, Anfragen (für mehrere Benutzer) zu cachen, sondern auch darin, daß Clientrechner im lokalen Netz nicht unbedingt echten Internetzugriff (über Masquerading) haben müssen, was die Übersicht und die Sicherheit erhöht.

Squid hat eine Vielzahl von Optionen und Features, die mitgelieferte Beispielkonfiguration in /etc/squid.conf ist sehr gut dokumentiert und funktioniert zunächst einmal ohne Änderung.

Starten von Squid

Bei S.u.S.E. wird über die rc.config-Variable START_SQUID gesteuert, ob Squid gleich beim Systemstart hochgefahren werden soll (über /sbin/init.d/squid).

Manuell kann man squid z.B. durch

/usr/sbin/squid -sYD >> /var/squid/squid.out 2>&1 &
starten.

Vor dem ersten Start muß das Cache-Directory initialisiert werden, dies sollte als Benutzer squid geschehen. Als root kann man einfach aufrufen:

/su squid -c "/usr/sbin/squid -z"/

Clients anpassen

Die WWW-Browser müssen konfiguriert werden, damit Sie den Proxy ansprechen. Bei Netscape gibt es die Maske Options/Network Preferences/Proxies/ Manual Proxy Configuration. In der Maske gibt man jeweils für FTP und HTTP-Proxy die IP-Nummer des IZG im lokalen Netz ein und als Portnummer 3128 (oder was in /etc/squid.conf definiert ist.

Zusätzlich sollte man noch das Feld No Proxy for ausfüllen, für welche Domains nicht über den Proxy gegangen, sondern direkt auf den WWW-Server zugegriffen werden soll, z.B.: localhost isdnworkshop.de.

10.3 Fetchmail

Das Programm fetchmail (Paket pop) eignet sich dazu, Mails über das POP3-Protokoll vom Provider abzuholen.

Das Abholen kann auch als normaler User durchgeführt werden, wir holen hier die Mails als Root ab, dadurch läßt sich der Vorgang besser automatisieren. Nach dem Abholen werden die Mails dem lokalen Sendmail übergeben und zugestellt.

Der Mailserver sei mail.provider.de. Es gibt zwei Benutzer asterix und obelix, die auf dem lokalen Rechner eva und maria heissen. Als Passwörter werden (auf dem Mailserver) adam und josef benutzt.

Mehr Infos:

http://www.suse.de/Support/sdb/fetchmail.html

Übung: auf dem Server liegen Mails für jede Workstation bereit. Richte fetchmail so ein, daß bei jedem Verbindungsaufbau Mails abgeholt werden. Prüfe die lokale Zustellung. Siehe /support-db/sdb/fetchmail.html und /etc/ppp/ip-up.

10.4 Sendmail

Über Sendmail kann man dicke Bücher schreiben (siehe Sendmail).

Das S.u.S.E. Paket sendmail ist für diese Zwecke hier bestens gerüstet. Besonders wichtig sind hier zum einem, daß die Absenderadresse richtig gesetzt wird, denn die lokale Domain könnte ja zur E-Mail-Adresse beim Provider unterschiedlich sein. Zum anderen sollen lokale E-Mails sofort zugestellt werden, Mails die über die Wählleitung verschickt werden müssen, sollen dagegen in eine Queue gestellt werden, ohne daß eine Verbindung aufgebaut wird.

Wie immer gibt es mehrere Wege:

10.5 News

Online News lesen ist schon hiermit sehr einfach, als News-Server den Server des ISP angeben. Dazu muß man für die meisten News-Read die Variable NNTPSERVER setzen, z.B. export NNTPSERVER='klaus.franken.de'. Dies sollte man systemweit in der /etc/profile eintragen.

Wünschenswert ist natürlich News-Offline zu lesen und entweder bei Bedarf zu holen bzw. zu verschicken oder dieses per Cron-Job z.B. jede Nacht durchführen zu lassen.

Die Installation eines eigenen News-Servers ist recht aufwendig, es bieten sich CNews oder INN an. Siehe dazu News HOWTO (fixme).

Ein eigener News-Server ist aber eigentlich nur dann notwendig, wenn man auf diesem selber Newsgruppen einrichten möchte. Will man das nicht, sind CNews und INN vollkommen overkilled, deshalb möchte ich hier zwei andere Möglichkleiten vorstellen:

Zwei Pakete bieten sich an: Leafnode und slrn. Beide sind einfach einzurichten und zu warten und eignen sich für ein mittleres Newsaufkommen vollkommen aus.

slrn ist eigentlich ein eigener News-Reader (textorientiert, sehr flexibel und schnell) und bietet ein eigenes Programm slrnpull, das die News abholt und in ein eigenes Spool-Verzeichnis stellt, auf welches direkt von slrn zugegriffen werden kann. Einschränkungen: es kann kein anderes News-Programm darauf zugreifen; es kann nicht über Netzwerk auf die News zugegriffen werden (vielleicht über NFS, untestet), da kein lokaler News-Server läuft.

Leafnode stellt dagegen einen eigenen News-Server zur Verfügung, braucht aber insgesamt mehr Ressourcen. Der Trick bei Leafnode ist der, das sich der Server quasi selbst konfiguriert: wird von einem Client auf eine Gruppe zugegriffen, wird diese automatisch abonniert und ist beim nächsten Abgleich vorhanden; wird dagegen längere Zeit nicht (mehr) auf eine Gruppe zugegriffen, wird diese automatisch gelöscht. Man kann Leafnode also in einem kleineren Netz mit mehreren Lesern trotzdem nahezu unbeaufsichtigt laufen lassen.

Beide Programme arbeiten sehr gut in dieser Dial-On-Demand-Umgebung, Zugriffe auf den News-Server beim Provider werden nur auf Wunsch, nie aber automatisch ausgeführt.

slrn installieren und konfigurieren

Die getestete Version ist 0.9.5.2 von

space.mit.edu:/pub/davis/slrn

Es wird die slang-Bibliothek ab Version 1.0.3 benötigt (bei S.u.S.E. 5.2 ist noch 0.99.38 dabei), zu bekommen unter

space.mit.edu:/pub/davis/slang

Beim Compilieren nicht vergessen auch make slrnpull anzugeben. Die Binaries z.B. nach /usr/local/bin kopieren, oder folgendes ausführen:

install -m 755 -o root -g root src/objs/slrn /usr/local/bin
install -m 755 -o root -g root src/objs/slrnpull /usr/local/bin
install -d /usr/doc/packages/slrn -m 755 -o root -g root
install -m 644 -o root -g root doc/* /usr/doc/packages/slrn
install -m 644 -o root -g root COPYRIGHT /usr/doc/packages/slrn
install -m 644 -o root -g root COPYING /usr/doc/packages/slrn
install -m 644 -o root -g root README /usr/doc/packages/slrn
install -m 644 -o root -g root changes.txt /usr/doc/packages/slrn
install -m 644 -o root -g root doc/slrn.1 /usr/local/man/man1
install -d /usr/doc/packages/slrn/slrnpull -m 755 -o root -g root
install -m 644 -o root -g root slrnpull/* /usr/doc/packages/slrn/slrnpull
            

Dann das Spool-Verzeichnis anlegen und die Config-Datei erstellen:

mkdir /var/spool/slrnpull
cd /var/spool/slrnpull
cp /src/slrn/slrnpull/slrnpull.conf .
            

In slrnpull.conf könnte z.B. folgendes stehen:

default                0   14
de.alt.comm.isdn4linux
            

Jetzt noch den News-Reader auf diesen Spool-Pfad konfigurieren, in ~/.slrnrc anfügen (anpassen !):

%%% Spool
set spool_inn_root   "/var/spool/slrnpull"
set spool_root       "/var/spool/slrnpull/news"
set spool_nov_root   "/var/spool/slrnpull/news"
set use_slrnpull 1
set read_active 1
set server_object    "spool"
hostname "klaus.franken.de"
set username "kfr"
            

Das Abholen, Verschicken eigener News und das Löschen alter Artikel geschieht mit einem einzigen Kommando (als root), z.B.:

slrnpull -d /var/spool/slrnpull -h news.franken.de
            

Beim ersten Mal dauert das natürlich sehr lange und sollte daher manuell ausgeführt werden. Im Betrieb kann man das über einen Croneintrag oder in /etc/ppp/ip-up bei jedem Verbindungsaufbau durchführen lassen.

Beim manuellen Start gibt slrnpull Meldungen auf der Console aus; wird es im Hintergrund gestartet, loggt es nach /var/spool/slrnpull/log (Achtung: diese Datei kann gross werden!).

Leafnode installieren und konfigurieren

Leafnode (Version 1.4) gibt es auf

ftp.troll.no:/pub/freebies/

Die mitgelieferten Dateien README und INSTALL beschreiben die Installation sehr gut.

Im folgenden Beispiel werden die Binaries leafnode, fetch und texpire nach /usr/local/bin installiert (Makefile anpassen!).

Zunächst wird der NNTP-Server leafnode in der /etc/inetd.conf durch folgende Zeile aktiviert:

nntp    stream  tcp     nowait  news    /usr/sbin/tcpd /usr/local/bin/leafnode
            
Danach ein killall -1 inetd ausführen.

Als nächstes muß ein User und eine Gruppe news angelegt werden, z.B. durch folgenden Eintrag in /etc/passwd:

news:x:9:13::/var/spool/news:/bin/bash
            
Alle Arbeiten müssen dann als User news ausgeführt werden (als Root: su - news)!

Im Verzeichnis /usr/lib/leafnode wurde bei der Installation eine Bsp-Datei angelegt, die man kopieren und anpassen muss:

su - news
cd /usr/lib/leafnode
cp config.example config
            

Die Datei ist kommentiert, hier arbeiten folgende Einträge:

server = news.franken.de
expire = 20
maxcount = 1000
            

Jetzt muß man dafür sorgen, daß das Programm texpire regelmässig aufgerufen wird (ansonsten werden keine alten News wieder gelöscht), hier arbeitet folgender Crontab-Eintrag vom User root:

42  5 * * * su news -c texpire
            
um jede Nacht um 5:42 zu löschen.

Durch das Kommando fetch (besser fetch -v) wird nun der News-Server initialisiert, aber keine Gruppen sind aktiv.

In dem man jetzt einmalig durch einen News-Reader auf diesen Newsserver und auf die interessanten Gruppen zugreift (es werden natürlich alle mit der Anzahl 0 angezeigt), werden die Gruppen abonniert. Beim nächsten Aufruf von fetch werden dann die Artikel geholt.

Auch hier kann man fetch via Crontab regelmässig oder durch einen Eintrag in /etc/ppp/ip-up aufrufen.

Probleme: man hat keinen direkten Einfluß darauf, welche Gruppen abonniert werden. Es sei denn, daß man vor dem Aufruf von fetch das Verzeichnis /home/opt/spool/news/interesting.groups aufräumt.

Die Ausgabe von fetch sollte beachtet werden, abgelehnte eigene Postings werden nirgens abgespeichert, sondern einfach gelöscht.

10.6 Firewall

Hinweis: Firewalls sind ein heikles Thema. Insbesondere hierfür übernimmt der Autor keine Garantie! Wer eine wirklich sicheres System benötigt, soll zumindest das Firewall HOWTO lesen oder einen Experten dafür beauftragen.

Über Firewalls kann man dicke Bücher schreiben ... (siehe Firewall oder das Firewall HOWTO.

Die einfachste (aber wirkungsvolle) Methode ist die Benutzung eines Paketfilters, die direkt vom Linux-Kernel unterstützt wird und über das Kommando ipfwadm (IP-FireWall ADMinistration) konfiguriert wird.

Was ist ein Paketfilter?

Jedes IP-Paket, das vom Kernel behandelt wird, wird nach einer Regelliste untersucht und entweder akzeptiert oder abgelehnt.

Es werden drei verschiedene Listen geführt:

  1. Incoming (Schalter -I): einkommende Pakete
  2. Outgoing (Schalter -O): ausgehende Pakete
  3. Forwarding (Schalter -F): durchgehende Pakete

Wie gibt man eine Firewall-Regel an?

Der ipfwadm-Aufruf setzt sich zusammen aus:

Weiterhin gibt es folgende wichtige Optionen:

Was für Regeln brauche ich mindestens?

Eines der größten Sicherheitslöcher ist das sogenannte Spoofing. Darunter versteht man, daß ein eigentlich fremder Rechner behauptet eine IP-Nummer aus dem eigenen (sicheren) Netz zu haben. Daher müssen als erstes Regeln definiert werden, die verhindern, daß eigene IP-Nummern aus dem unsicheren Netz hereinkommen können.

Als nächstes sollte man alle Zugriffe von außen verbieten und nur (bei Bedarf) die benötigten Dienste (sendmail, www) freischalten.

Ein einfacher Firewall

Das lokale Ethernet ist auf 192.168.42.0 konfiguriert. Wir erwarten IP-Nummer aus dem Bereich 193.110.3.0/24 zugewiesen zu bekommen, wobei der PtP-Partner nicht aus diesem Bereich ist (sonst würden seine Pakete auch abgewiesen werden)

# spoofing verbieten:
/sbin/ipfwadm -I -a deny -o -P all -S 192.168.42.0/24 -D 192.168.42.0/24 -W ippp0
/sbin/ipfwadm -I -a deny -o -P all -S 192.168.42.0/24 -D 193.110.3.0/24 -W ippp0
/sbin/ipfwadm -I -a deny -o -P all -S 193.110.3.0/24 -D 192.168.42.0/24 -W ippp0
/sbin/ipfwadm -I -a deny -o -P all -S 193.110.3.0/24 -D 193.110.3.0/24 -W ippp0


# Zugriffe von ueberall auf den Mail-Server (Port 25) erlauben:
/sbin/ipfwadm -I -a accept -P tcp -S 0/0 -D 192.168.42.1 25 -W ippp0

# Zugriffe von ueberall auf den DNS-Server (Port 53) erlauben:
/sbin/ipfwadm -I -a accept -P tcp -S 0/0 -D 192.168.42.1 53 -W ippp0

# sonst alles verbieten (getrennt fuer Protokoll tcp und udp)
/sbin/ipfwadm -I -a deny -o -P tcp -S 0/0 -D 192.168.42.0/24 1:1023 -W ippp0 
/sbin/ipfwadm -I -a deny -o -P tcp -S 0/0 -D 193.110.3.0/24 1:1023 -W ippp0

/sbin/ipfwadm -I -a deny -o -P udp -S 0/0 -D 192.168.42.0/24 1:1023 -W ippp0
/sbin/ipfwadm -I -a deny -o -P udp -S 0/0 -D 193.110.3.0/24 1:1023 -W ippp0
            

Bei S.u.S.E. läßt sich obiges Bsp. auch in der /etc/rc.config einstellen:

FW_START="yes"
FW_LOCALNETS="192.168.42.0/24 193.110.3.0/24"
FW_MAILSERVER="192.168.42.1"
FW_DNSSERVER="192.168.42.1"
FW_WORLD_DEV="ippp0"
FW_LOG_ACCEPT="no"
FW_LOG_DENY="yes"
FW_TCP_LOCKED_PORTS="1:1023"
FW_UDP_LOCKED_PORTS="1:1023"
        
Siehe auch /usr/doc/packages/firewall

10.7 Masquerading

Masquerading (auch Network Adress Translation genannt) braucht man dann, wenn man ein internes Netz mit privaten IP-Nummern hat, vom ISP aber nur eine IP-Nummer (und diese vielleicht sogar dynamisch) bekommt. Die IP-Pakete werden beim rausschicken auf der Internetleitung umgeschrieben und mit der eigenen IP-Nummer versehen. Umgekehrt wird eine Tabelle der offenen Verbindungen gehalten, damit einkommende Pakete wieder dem ursprünglichen Absender zugestellt werden können.

Hat man sich mit dem Firewall (Paketfilter via ipfwadm, s.o.) vertraut gemacht, ist Masquerading fast trivial, denn es findet an derselben Stelle statt und wird fast genauso konfiguriert, es wird lediglich der Schalter -m dazugegeben.

Beispiel: Pakete aus dem internen Netzwerk (192.168.42.0/24), die zum Provider (Device ippp0) verschickt werden, sollen mit der jeweils gültigen IP-Nummer maskiert werden. Es wird einer Forwarding-Rule der Schalter -m mitgegeben:

/sbin/ipfwadm -F -a accept -P all -S 192.168.42.0/24 -D 0/0 -m -W ippp0
        

Bei manchen Internet-Diensten (z.B. ftp) wird nicht nur ein Socket geöffnet, sondern auch ein zweiter für die Datenübertragung, die der Server zum Client aufbaut. Da der Client aber selbst nicht erreichbar ist (private IP-Nummer) und der Server die Verbindung zum falschen Rechner (IZG) aufbaut, klappt diese Methode ohne weiteres Wissen über die speziellen Eigenheiten des entsprechenden Protokolls nicht. Abhilfe schaffen dafür spezielle Routinen, die auch dafür re-maskieren können. Diese werden durch Kernel-Module geladen:

/sbin/insmod ip_masq_cuseeme
/sbin/insmod ip_masq_ftp
/sbin/insmod ip_masq_irc
/sbin/insmod ip_masq_quake
/sbin/insmod ip_masq_raudio
/sbin/insmod ip_masq_vdolive
        

Bei S.u.S.E. läßt sich obiges Bsp. auch in der /etc/rc.config einstellen:

MSQ_START="yes"
MSQ_NETWORKS="192.168.42.0/24"
MSQ_DEV="ippp0"
MSQ_MODULES="ip_masq_cuseeme ip_masq_ftp ip_masq_irc ip_masq_quake ip_masq_raudio ip_masq_vdolive"
        
Siehe auch /usr/doc/packages/firewall

10.8 Accounting

Siehe man ipfwadm Stichwort -A

10.9 Samba

Samba ist ein File- und Druckerserver für das unter Windows benutzte SMB-Protokoll.

Das Thema gehört also garnicht hier her... doch: denn es kann in unserem Fall Probleme machen.

Beim SMB-Protokoll wird sehr viel mit Broadcasts gearbeitet, die Rechner schicken sich ständig (auch wenn eigentlich keine Aktionen ausgeführt werden) Nachrichten zu. Der Samba-Server wird meist so ausgeliefert, daß dieser alle verwendendbaren Netzdevices benutzt und dorthin Nachrichten schickt, also auch an das ippp0-Device.

Folge: es werden ständig Verbindungen aufgebaut!

Abhilfe:

  1. Starte Samba nur, wenn Du es auch brauchst.

    Bei S.u.S.E. wird Samba schon aktiviert, wenn das Paket installiert ist. Setze in /etc/rc.config: START_SMB="no"

  2. Wenn Du es brauchst, sage Samba, welche Devices benutzt werden dürfen. In der /etc/smb.conf setze z.B, in der global-Section: interfaces = 192.168.2.1/24 Mehr Infos:
    http://www.suse.de/Support/sdb/isdn_samba.html


Inhalt