Voraussetzung: Die Internet-Verbindung über eine Dial-On-Demand Wählverbindung und das Routing funktioniert.
Jetzt sollen (je nach Bedarf) weitere Internetdienste eingerichtet werden.
Hintergrund: siehe IP-Nummern Auflösung
bind
installieren.
/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
.
Trage
als Nameserver die lokale IP-Nummer ein (192.168.1.1
),
siehe
Konfiguration der Namensauflösung
/etc/rc.config
ein:
START_NAMED=yes
Starte Nameserver durch Reboot oder direkt
durch /sbin/init.d/named start
/usr/sbin/named
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.
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.
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"/
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
.
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.
/root/.fetchmailrc
an:
poll mail.provider.de protocol POP3 user asterix password adam is eva
poll mail.provider.de protocol POP3 user obelix password josef is maria
fetchmail -v --keep -a
Die Option -v
gibt mehr Ausgaben, die Option
--keep
sorgt dafür, daß die Mails auf dem Server
zunächst nicht gelöscht werden.
/etc/ppp/ip-up
das Kommando fetchmail -a >> /var/log/fetchmail
in der Start-Section ein.
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
.
Ü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:
/etc/rc.config
konfigurieren:
FROM_HEADER="klaus.franken.de"
SENDMAIL_TYPE="yes"
SENDMAIL_SMARTHOST="mail-n.franken.de"
SENDMAIL_LOCALHOST="localhost franken.b.eunet.de glen.home.suse.de \
klaus.franken.de"
SENDMAIL_RELAY=""
SENDMAIL_ARGS="-bd -om"
SENDMAIL_EXPENSIVE="yes"
SENDMAIL_NOCANONIFY="yes"
Seit sendmail Version 8, bietet Sendmail ein Macro-Paket,
bei dem die eigentlich Konfigurationsdatei
/etc/sendmail.cf
nicht von Hand erstellt
werden muß, sondern über eine Meta-Datei generiert wird.
Das Directory ist je nach Distribution unterschiedlich
(z.B. /usr/share/sendmail/m4
, bei S.u.S.E.
auch in /etc/mail
).
In der Distribution sollten sich Vorlagen befinden.
Bei S.u.S.E. ist eine gut kommentierte
/etc/mail/linux.mc
dabei. Bevor man diese
ändert, sollte man in /etc/rc.config
das automatische
Generieren abstellen (SENDMAIL_TYPE="no").
Man generiert eine neue Konfig mit:
m4 linux.mc > /etc/sendmail.cf
Mehr Infos: siehe /etc/mail/README
Bei ausgehenden E-Mails werden abhängig vom lokalen
Benutzernamen die E-Mail-Adressen umgeschrieben,
Datei /etc/mail/genericstable
:
kfr kfr@klaus.franken.de
sandra sandra@klaus.franken.de
sr sandra@klaus.franken.de
Übung:
root@server.isdnworkshop.de
/etc/ppp/ip-up
).
mailq
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.
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 (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.
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.
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:
-I
): einkommende Pakete
-O
): ausgehende Pakete
-F
): durchgehende Pakete
Der ipfwadm
-Aufruf setzt sich zusammen aus:
Incoming (-I), Outgoing (-O) oder Forwarding (-F)
Man kann neue Regeln an den Anfang der Liste (-i) oder an das Ende der Liste (-a). Die Regeln werden immer von vorne nach hinten interpretiert, bei der ersten passenden Regel wird nicht weitergesucht.
Soll das Paket akzeptiert werden (accept), oder abgewiesen (deny) werden.
Mögliche Protokolle sind tcp, udp, icmp oder alles (all)
Angabe des Source-IP-Nummern-Bereiches (-S), z.B.
-S 192.168.42.0/24
Angabe des Ziel-IP-Nummern Bereiches (-D)
Meist wird direkt hinter der Ziel-IP-Nummer noch der
Ziel-Port mit angegeben, dies kann der numerische
Wert oder der Alias, wie in /etc/services
definiert.
Mit dem Schalter -W kann die Regel auf ein Netzdevice beschränkt werden.
Weiterhin gibt es folgende wichtige Optionen:
/var/log/messages
geschrieben.
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.
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
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
Siehe man ipfwadm
Stichwort -A
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:
Bei S.u.S.E. wird Samba schon aktiviert, wenn das Paket
installiert ist.
Setze in /etc/rc.config
: START_SMB="no"
/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